@datagrok/bio 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3603,6 +3603,20 @@ function toAtomicLevel(df, macroMolecule) {
3603
3603
  }
3604
3604
  if (!checkInputColumn(macroMolecule, 'To Atomic Level'))
3605
3605
  return;
3606
+ let currentView;
3607
+ for (let view of datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.tableViews) {
3608
+ if (df.name === view.name) {
3609
+ currentView = view;
3610
+ }
3611
+ }
3612
+ const file = yield _package.files.readAsText('samples/sar-small.csv');
3613
+ const df2 = datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.DataFrame.fromCsv(file);
3614
+ const v = datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.addTableView(df2);
3615
+ setTimeout(() => {
3616
+ datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.closeTable(df2);
3617
+ v.close();
3618
+ datagrok_api_grok__WEBPACK_IMPORTED_MODULE_0__.shell.v = currentView;
3619
+ }, 100);
3606
3620
  const monomersLibFile = yield _package.files.readAsText(_utils_utils__WEBPACK_IMPORTED_MODULE_10__.HELM_CORE_LIB_FILENAME);
3607
3621
  const monomersLibObject = JSON.parse(monomersLibFile);
3608
3622
  const atomicCodes = (0,_utils_utils__WEBPACK_IMPORTED_MODULE_10__.getMolfilesFromSeq)(macroMolecule, monomersLibObject);
@@ -3610,7 +3624,7 @@ function toAtomicLevel(df, macroMolecule) {
3610
3624
  const col = datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.Column.fromStrings('regenerated', result);
3611
3625
  col.semType = datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.SEMTYPE.MOLECULE;
3612
3626
  col.tags[datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.TAGS.UNITS] = 'molblock';
3613
- df.columns.add(col);
3627
+ df.columns.add(col, true);
3614
3628
  });
3615
3629
  }
3616
3630
  //top-menu: Bio | MSA...
@@ -4759,6 +4773,7 @@ MWRSWY-CKHP
4759
4773
  'peptidesComplex': 'System:AppData/Bio/samples/peptides_complex_msa.csv',
4760
4774
  'fastaCsv': 'System:AppData/Bio/samples/sample_FASTA.csv',
4761
4775
  'fastaFasta': 'System:AppData/Bio/samples/sample_FASTA.fasta',
4776
+ 'fastaPtCsv': 'System:AppData/Bio/samples/sample_FASTA_PT.csv',
4762
4777
  'msaComplex': 'System:AppData/Bio/samples/sample_MSA.csv',
4763
4778
  'helmCsv': 'System:AppData/Bio/samples/sample_HELM.csv',
4764
4779
  'testDemogCsv': 'System:AppData/Bio/samples/testDemog.csv',
@@ -4919,6 +4934,9 @@ MWRSWY-CKHP
4919
4934
  (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('samplesTestSmiles2NegativeSmiles', () => __awaiter(void 0, void 0, void 0, function* () {
4920
4935
  yield _testNeg(readSamples("testSmiles2Csv" /* Samples.testSmiles2Csv */), 'SMILES');
4921
4936
  }));
4937
+ (0,_datagrok_libraries_utils_src_test__WEBPACK_IMPORTED_MODULE_0__.test)('samplesFastaPtPosSequence', () => __awaiter(void 0, void 0, void 0, function* () {
4938
+ yield (_testPos(readSamples("fastaPtCsv" /* Samples.fastaPtCsv */), 'sequence', 'fasta:SEQ:PT'));
4939
+ }));
4922
4940
  });
4923
4941
  function _testNeg(readDf, colName) {
4924
4942
  return __awaiter(this, void 0, void 0, function* () {
@@ -5611,6 +5629,10 @@ function getPalleteByType(paletteType) {
5611
5629
  return _datagrok_libraries_bio_src_aminoacids__WEBPACK_IMPORTED_MODULE_2__.AminoacidsPalettes.GrokGroups;
5612
5630
  case 'NT':
5613
5631
  return _datagrok_libraries_bio_src_nucleotides__WEBPACK_IMPORTED_MODULE_3__.NucleotidesPalettes.Chromatogram;
5632
+ case 'DNA':
5633
+ return _datagrok_libraries_bio_src_nucleotides__WEBPACK_IMPORTED_MODULE_3__.NucleotidesPalettes.Chromatogram;
5634
+ case 'RNA':
5635
+ return _datagrok_libraries_bio_src_nucleotides__WEBPACK_IMPORTED_MODULE_3__.NucleotidesPalettes.Chromatogram;
5614
5636
  // other
5615
5637
  default:
5616
5638
  return _datagrok_libraries_bio_src_unknown__WEBPACK_IMPORTED_MODULE_4__.UnknownSeqPalettes.Color;
@@ -5701,7 +5723,7 @@ class MacromoleculeSequenceCellRenderer extends datagrok_api_dg__WEBPACK_IMPORTE
5701
5723
  host.setAttribute('data', gridCell.cell.value);
5702
5724
  gridCell.element = host;
5703
5725
  //@ts-ignore
5704
- var canvas = new JSDraw2.Editor(host, { width: w, height: h, skin: "w8", viewonly: true });
5726
+ var canvas = new JSDraw2.Editor(host, { width: w, height: h, skin: 'w8', viewonly: true });
5705
5727
  var formula = canvas.getFormula(true);
5706
5728
  if (!formula) {
5707
5729
  gridCell.element = datagrok_api_ui__WEBPACK_IMPORTED_MODULE_6__.divText(gridCell.cell.value, { style: { color: 'red' } });
@@ -5716,7 +5738,7 @@ class MacromoleculeSequenceCellRenderer extends datagrok_api_dg__WEBPACK_IMPORTE
5716
5738
  }
5717
5739
  }
5718
5740
  else {
5719
- const [type, subtype, paletteType] = gridCell.cell.column.getTag(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.TAGS.UNITS).split(":");
5741
+ const [type, subtype, paletteType] = gridCell.cell.column.getTag(datagrok_api_dg__WEBPACK_IMPORTED_MODULE_1__.TAGS.UNITS).split(':');
5720
5742
  w = grid ? Math.min(grid.canvas.width - x, w) : g.canvas.width - x;
5721
5743
  g.save();
5722
5744
  g.beginPath();
@@ -12206,4 +12228,4 @@ module.exports = ui;
12206
12228
  /******/
12207
12229
  /******/ })()
12208
12230
  ;
12209
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDak9LO0FBQ3pDLGtDQUFrQyx5REFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7O0FDMUJwQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQzhCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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LEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxDQUFDO0FBQ007QUFDUDtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBFQUFNLGlCQUFpQixrRUFBd0I7QUFDdkQsS0FBSztBQUNMO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxRQUFRLDBFQUFNLGlCQUFpQixrRUFBd0I7QUFDdkQsUUFBUSwwRUFBTSxZQUFZLHVEQUFhO0FBQ3ZDO0FBQ0EsWUFBWSwwRUFBTTtBQUNsQixLQUFLO0FBQ0w7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL1FBLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxLQUFLLEVBQUUsRUFHVjs7QUFFVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLEtBQUssRUFBRSxFQUdWOztBQUVWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRFQUE0RSxlQUFlO0FBQzNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJGQUEyRixlQUFlO0FBQzFHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztB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O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNB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QkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7V0NOQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7Ozs7V0NmQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7Ozs7O1VFckJBO1VBQ0E7VUFDQTtVQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BiaW93YXNtL2Fpb2xpL2Rpc3QvYWlvbGkuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9hbWlub2FjaWRzLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvbnVjbGVvdGlkZXMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9zZXEtcGFsZXR0ZXMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9zZXF1ZW5jZS1lbmNvZGVyLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdGVzdHMvcGFsZXR0ZXMudGVzdC5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3Vua25vd24uanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92ZC1yZWdpb25zLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nby5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvc2VxdWVuY2Utc3BhY2UuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3ZpZXdlcnMvYWN0aXZpdHktY2xpZmZzLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy93b3JrZXJzL2RpbWVuc2lvbmFsaXR5LXJlZHVjaW5nLXdvcmtlci1jcmVhdG9yLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3NpbWlsYXJpdHktbWV0cmljcy5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdC5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9mYXN0ZXN0LWxldmVuc2h0ZWluL2luZGV4LmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9qYXJvLXdpbmtsZXItdHlwZXNjcmlwdC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3BhY2thZ2UtdGVzdC50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvcGFja2FnZS50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvc2VxX2FsaWduLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9QYWxldHRlcy10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9XZWJMb2dvLXRlc3QudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3Rlc3RzL2FjdGl2aXR5LWNsaWZmcy10ZXN0cy50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdGVzdHMvY29udmVydC10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9kZXRlY3RvcnMtdGVzdC50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdGVzdHMvbXNhLXRlc3RzLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9yZW5kZXJlci10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9zZXF1ZW5jZS1zcGFjZS10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9zcGxpdHRlci10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy91dGlscy50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdXRpbHMvYXRvbWljLXdvcmtzLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy9jZWxsLXJlbmRlcmVyLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3V0aWxzL2NvbnZlcnQudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3V0aWxzL211bHRpcGxlLXNlcXVlbmNlLWFsaWdubWVudC50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdXRpbHMvbm90YXRpb24tY29udmVydGVyLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy9zZXF1ZW5jZS1hY3Rpdml0eS1jbGlmZnMudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3V0aWxzL3NlcXVlbmNlLXNwYWNlLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdmlld2Vycy92ZC1yZWdpb25zLXZpZXdlci50cyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvd3UvZGlzdC93dS5qcyIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwiREdcIiIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwiZ3Jva1wiIiwid2VicGFjazovL2Jpby9leHRlcm5hbCB2YXIgXCJyeGpzXCIiLCJ3ZWJwYWNrOi8vYmlvL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9zdGFydHVwIiwid2VicGFjazovL2Jpby93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5BaW9saSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbmFtZSA9IFwiQGJpb3dhc20vYWlvbGlcIjtcbiAgdmFyIHZlcnNpb24gPSBcIjIuNC4wLXJjMlwiO1xuICB2YXIgZGVzY3JpcHRpb24gPSBcIkEgZnJhbWV3b3JrIGZvciBidWlsZGluZyBXZWJBc3NlbWJseS1iYXNlZCBnZW5vbWljcyB0b29sc1wiO1xuICB2YXIgYnJvd3NlciA9IFwiZGlzdC9haW9saS5qc1wiO1xuICB2YXIgd29ya2VyID0gXCJkaXN0L2Fpb2xpLndvcmtlci5qc1wiO1xuICB2YXIgbWFpbiA9IFwiYWlvbGkuanNcIjtcbiAgdmFyIHJlcG9zaXRvcnkgPSB7XG4gIFx0dHlwZTogXCJnaXRcIixcbiAgXHR1cmw6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9iaW93YXNtL2Fpb2xpLmdpdFwiXG4gIH07XG4gIHZhciBhdXRob3IgPSBcIlJvYmVydCBBYm91a2hhbGlsXCI7XG4gIHZhciBsaWNlbnNlID0gXCJNSVRcIjtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHtcbiAgXHRjb21saW5rOiBcIl40LjMuMVwiLFxuICBcdFwid2FzbS1mZWF0dXJlLWRldGVjdFwiOiBcIl4xLjIuMTFcIlxuICB9O1xuICB2YXIgZGV2RGVwZW5kZW5jaWVzID0ge1xuICBcdFwiQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIjogXCJeMTEuMC4xXCIsXG4gIFx0XCJAcm9sbHVwL3BsdWdpbi1qc29uXCI6IFwiXjQuMS4wXCIsXG4gIFx0XCJAcm9sbHVwL3BsdWdpbi1ub2RlLXJlc29sdmVcIjogXCJeNy4wLjBcIixcbiAgXHRjeXByZXNzOiBcIl44LjAuMFwiLFxuICBcdHJvbGx1cDogXCJeMS4yOS4wXCIsXG4gIFx0XCJyb2xsdXAtcGx1Z2luLXRlcnNlclwiOiBcIl43LjAuMlwiXG4gIH07XG4gIHZhciBzY3JpcHRzID0ge1xuICBcdGJ1aWxkOiBcInJvbGx1cCAtY1wiLFxuICBcdGRldjogXCJyb2xsdXAgLWMgLXdcIixcbiAgXHR0ZXN0OiBcImN5cHJlc3MgcnVuXCIsXG4gIFx0XCJ0ZXN0LW9wZW5cIjogXCJjeXByZXNzIG9wZW5cIlxuICB9O1xuICB2YXIgZmlsZXMgPSBbXG4gIFx0XCJkaXN0XCJcbiAgXTtcbiAgdmFyIHBrZyA9IHtcbiAgXHRuYW1lOiBuYW1lLFxuICBcdHZlcnNpb246IHZlcnNpb24sXG4gIFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICBcdGJyb3dzZXI6IGJyb3dzZXIsXG4gIFx0d29ya2VyOiB3b3JrZXIsXG4gIFx0bWFpbjogbWFpbixcbiAgXHRyZXBvc2l0b3J5OiByZXBvc2l0b3J5LFxuICBcdGF1dGhvcjogYXV0aG9yLFxuICBcdGxpY2Vuc2U6IGxpY2Vuc2UsXG4gIFx0ZGVwZW5kZW5jaWVzOiBkZXBlbmRlbmNpZXMsXG4gIFx0ZGV2RGVwZW5kZW5jaWVzOiBkZXZEZXBlbmRlbmNpZXMsXG4gIFx0c2NyaXB0czogc2NyaXB0cyxcbiAgXHRmaWxlczogZmlsZXNcbiAgfTtcblxuICAvKipcclxuICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICAgKi9cclxuICBjb25zdCBwcm94eU1hcmtlciA9IFN5bWJvbChcIkNvbWxpbmsucHJveHlcIik7XHJcbiAgY29uc3QgY3JlYXRlRW5kcG9pbnQgPSBTeW1ib2woXCJDb21saW5rLmVuZHBvaW50XCIpO1xyXG4gIGNvbnN0IHJlbGVhc2VQcm94eSA9IFN5bWJvbChcIkNvbWxpbmsucmVsZWFzZVByb3h5XCIpO1xyXG4gIGNvbnN0IHRocm93TWFya2VyID0gU3ltYm9sKFwiQ29tbGluay50aHJvd25cIik7XHJcbiAgY29uc3QgaXNPYmplY3QgPSAodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiAmJiB2YWwgIT09IG51bGwpIHx8IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIjtcclxuICAvKipcclxuICAgKiBJbnRlcm5hbCB0cmFuc2ZlciBoYW5kbGUgdG8gaGFuZGxlIG9iamVjdHMgbWFya2VkIHRvIHByb3h5LlxyXG4gICAqL1xyXG4gIGNvbnN0IHByb3h5VHJhbnNmZXJIYW5kbGVyID0ge1xyXG4gICAgICBjYW5IYW5kbGU6ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgdmFsW3Byb3h5TWFya2VyXSxcclxuICAgICAgc2VyaWFsaXplKG9iaikge1xyXG4gICAgICAgICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xyXG4gICAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDEpO1xyXG4gICAgICAgICAgcmV0dXJuIFtwb3J0MiwgW3BvcnQyXV07XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc2VyaWFsaXplKHBvcnQpIHtcclxuICAgICAgICAgIHBvcnQuc3RhcnQoKTtcclxuICAgICAgICAgIHJldHVybiB3cmFwKHBvcnQpO1xyXG4gICAgICB9LFxyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgdHJhbnNmZXIgaGFuZGxlciB0byBoYW5kbGUgdGhyb3duIGV4Y2VwdGlvbnMuXHJcbiAgICovXHJcbiAgY29uc3QgdGhyb3dUcmFuc2ZlckhhbmRsZXIgPSB7XHJcbiAgICAgIGNhbkhhbmRsZTogKHZhbHVlKSA9PiBpc09iamVjdCh2YWx1ZSkgJiYgdGhyb3dNYXJrZXIgaW4gdmFsdWUsXHJcbiAgICAgIHNlcmlhbGl6ZSh7IHZhbHVlIH0pIHtcclxuICAgICAgICAgIGxldCBzZXJpYWxpemVkO1xyXG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICBzZXJpYWxpemVkID0ge1xyXG4gICAgICAgICAgICAgICAgICBpc0Vycm9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdmFsdWUubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdGFjazogdmFsdWUuc3RhY2ssXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlcmlhbGl6ZWQgPSB7IGlzRXJyb3I6IGZhbHNlLCB2YWx1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtzZXJpYWxpemVkLCBbXV07XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpIHtcclxuICAgICAgICAgIGlmIChzZXJpYWxpemVkLmlzRXJyb3IpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihzZXJpYWxpemVkLnZhbHVlLm1lc3NhZ2UpLCBzZXJpYWxpemVkLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRocm93IHNlcmlhbGl6ZWQudmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBBbGxvd3MgY3VzdG9taXppbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgY2VydGFpbiB2YWx1ZXMuXHJcbiAgICovXHJcbiAgY29uc3QgdHJhbnNmZXJIYW5kbGVycyA9IG5ldyBNYXAoW1xyXG4gICAgICBbXCJwcm94eVwiLCBwcm94eVRyYW5zZmVySGFuZGxlcl0sXHJcbiAgICAgIFtcInRocm93XCIsIHRocm93VHJhbnNmZXJIYW5kbGVyXSxcclxuICBdKTtcclxuICBmdW5jdGlvbiBleHBvc2Uob2JqLCBlcCA9IHNlbGYpIHtcclxuICAgICAgZXAuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgZnVuY3Rpb24gY2FsbGJhY2soZXYpIHtcclxuICAgICAgICAgIGlmICghZXYgfHwgIWV2LmRhdGEpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCB7IGlkLCB0eXBlLCBwYXRoIH0gPSBPYmplY3QuYXNzaWduKHsgcGF0aDogW10gfSwgZXYuZGF0YSk7XHJcbiAgICAgICAgICBjb25zdCBhcmd1bWVudExpc3QgPSAoZXYuZGF0YS5hcmd1bWVudExpc3QgfHwgW10pLm1hcChmcm9tV2lyZVZhbHVlKTtcclxuICAgICAgICAgIGxldCByZXR1cm5WYWx1ZTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gcGF0aC5zbGljZSgwLCAtMSkucmVkdWNlKChvYmosIHByb3ApID0+IG9ialtwcm9wXSwgb2JqKTtcclxuICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHBhdGgucmVkdWNlKChvYmosIHByb3ApID0+IG9ialtwcm9wXSwgb2JqKTtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIkdFVFwiIC8qIEdFVCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJhd1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVRcIiAvKiBTRVQgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50W3BhdGguc2xpY2UoLTEpWzBdXSA9IGZyb21XaXJlVmFsdWUoZXYuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJBUFBMWVwiIC8qIEFQUExZICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmF3VmFsdWUuYXBwbHkocGFyZW50LCBhcmd1bWVudExpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJDT05TVFJVQ1RcIiAvKiBDT05TVFJVQ1QgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgcmF3VmFsdWUoLi4uYXJndW1lbnRMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHByb3h5KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiRU5EUE9JTlRcIiAvKiBFTkRQT0lOVCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdHJhbnNmZXIocG9ydDEsIFtwb3J0MV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJSRUxFQVNFXCIgLyogUkVMRUFTRSAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVyblZhbHVlID0geyB2YWx1ZSwgW3Rocm93TWFya2VyXTogMCB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJldHVyblZhbHVlKVxyXG4gICAgICAgICAgICAgIC5jYXRjaCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgW3Rocm93TWFya2VyXTogMCB9O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAudGhlbigocmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBbd2lyZVZhbHVlLCB0cmFuc2ZlcmFibGVzXSA9IHRvV2lyZVZhbHVlKHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICBlcC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdpcmVWYWx1ZSksIHsgaWQgfSksIHRyYW5zZmVyYWJsZXMpO1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSBcIlJFTEVBU0VcIiAvKiBSRUxFQVNFICovKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRldGFjaCBhbmQgZGVhY3RpdmUgYWZ0ZXIgc2VuZGluZyByZWxlYXNlIHJlc3BvbnNlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgICBlcC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICAgIGNsb3NlRW5kUG9pbnQoZXApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVwLnN0YXJ0KSB7XHJcbiAgICAgICAgICBlcC5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGlzTWVzc2FnZVBvcnQoZW5kcG9pbnQpIHtcclxuICAgICAgcmV0dXJuIGVuZHBvaW50LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiTWVzc2FnZVBvcnRcIjtcclxuICB9XHJcbiAgZnVuY3Rpb24gY2xvc2VFbmRQb2ludChlbmRwb2ludCkge1xyXG4gICAgICBpZiAoaXNNZXNzYWdlUG9ydChlbmRwb2ludCkpXHJcbiAgICAgICAgICBlbmRwb2ludC5jbG9zZSgpO1xyXG4gIH1cclxuICBmdW5jdGlvbiB3cmFwKGVwLCB0YXJnZXQpIHtcclxuICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBbXSwgdGFyZ2V0KTtcclxuICB9XHJcbiAgZnVuY3Rpb24gdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNSZWxlYXNlZCkge1xyXG4gICAgICBpZiAoaXNSZWxlYXNlZCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlXCIpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGVwLCBwYXRoID0gW10sIHRhcmdldCA9IGZ1bmN0aW9uICgpIHsgfSkge1xyXG4gICAgICBsZXQgaXNQcm94eVJlbGVhc2VkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwge1xyXG4gICAgICAgICAgZ2V0KF90YXJnZXQsIHByb3ApIHtcclxuICAgICAgICAgICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpO1xyXG4gICAgICAgICAgICAgIGlmIChwcm9wID09PSByZWxlYXNlUHJveHkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJSRUxFQVNFXCIgLyogUkVMRUFTRSAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRW5kUG9pbnQoZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJveHlSZWxlYXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwidGhlblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdGhlbjogKCkgPT4gcHJveHkgfTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCByID0gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJHRVRcIiAvKiBHRVQgKi8sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgfSkudGhlbihmcm9tV2lyZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHIudGhlbi5iaW5kKHIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIFsuLi5wYXRoLCBwcm9wXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2V0KF90YXJnZXQsIHByb3AsIHJhd1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTtcclxuICAgICAgICAgICAgICAvLyBGSVhNRTogRVM2IFByb3h5IEhhbmRsZXIgYHNldGAgbWV0aG9kcyBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIGFcclxuICAgICAgICAgICAgICAvLyBib29sZWFuLiBUbyBzaG93IGdvb2Qgd2lsbCwgd2UgcmV0dXJuIHRydWUgYXN5bmNocm9ub3VzbHkgwq9cXF8o44OEKV8vwq9cclxuICAgICAgICAgICAgICBjb25zdCBbdmFsdWUsIHRyYW5zZmVyYWJsZXNdID0gdG9XaXJlVmFsdWUocmF3VmFsdWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiU0VUXCIgLyogU0VUICovLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoOiBbLi4ucGF0aCwgcHJvcF0ubWFwKChwKSA9PiBwLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJnLCByYXdBcmd1bWVudExpc3QpIHtcclxuICAgICAgICAgICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgaWYgKGxhc3QgPT09IGNyZWF0ZUVuZHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkVORFBPSU5UXCIgLyogRU5EUE9JTlQgKi8sXHJcbiAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnJvbVdpcmVWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIFdlIGp1c3QgcHJldGVuZCB0aGF0IGBiaW5kKClgIGRpZG7igJl0IGhhcHBlbi5cclxuICAgICAgICAgICAgICBpZiAobGFzdCA9PT0gXCJiaW5kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBwYXRoLnNsaWNlKDAsIC0xKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiQVBQTFlcIiAvKiBBUFBMWSAqLyxcclxuICAgICAgICAgICAgICAgICAgcGF0aDogcGF0aC5tYXAoKHApID0+IHAudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TGlzdCxcclxuICAgICAgICAgICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbnN0cnVjdChfdGFyZ2V0LCByYXdBcmd1bWVudExpc3QpIHtcclxuICAgICAgICAgICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiQ09OU1RSVUNUXCIgLyogQ09OU1RSVUNUICovLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LFxyXG4gICAgICAgICAgICAgIH0sIHRyYW5zZmVyYWJsZXMpLnRoZW4oZnJvbVdpcmVWYWx1ZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHByb3h5O1xyXG4gIH1cclxuICBmdW5jdGlvbiBteUZsYXQoYXJyKSB7XHJcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIpO1xyXG4gIH1cclxuICBmdW5jdGlvbiBwcm9jZXNzQXJndW1lbnRzKGFyZ3VtZW50TGlzdCkge1xyXG4gICAgICBjb25zdCBwcm9jZXNzZWQgPSBhcmd1bWVudExpc3QubWFwKHRvV2lyZVZhbHVlKTtcclxuICAgICAgcmV0dXJuIFtwcm9jZXNzZWQubWFwKCh2KSA9PiB2WzBdKSwgbXlGbGF0KHByb2Nlc3NlZC5tYXAoKHYpID0+IHZbMV0pKV07XHJcbiAgfVxyXG4gIGNvbnN0IHRyYW5zZmVyQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xyXG4gIGZ1bmN0aW9uIHRyYW5zZmVyKG9iaiwgdHJhbnNmZXJzKSB7XHJcbiAgICAgIHRyYW5zZmVyQ2FjaGUuc2V0KG9iaiwgdHJhbnNmZXJzKTtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICB9XHJcbiAgZnVuY3Rpb24gcHJveHkob2JqKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9iaiwgeyBbcHJveHlNYXJrZXJdOiB0cnVlIH0pO1xyXG4gIH1cclxuICBmdW5jdGlvbiB0b1dpcmVWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBoYW5kbGVyXSBvZiB0cmFuc2ZlckhhbmRsZXJzKSB7XHJcbiAgICAgICAgICBpZiAoaGFuZGxlci5jYW5IYW5kbGUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgW3NlcmlhbGl6ZWRWYWx1ZSwgdHJhbnNmZXJhYmxlc10gPSBoYW5kbGVyLnNlcmlhbGl6ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJIQU5ETEVSXCIgLyogSEFORExFUiAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2VyaWFsaXplZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBcIlJBV1wiIC8qIFJBVyAqLyxcclxuICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2ZlckNhY2hlLmdldCh2YWx1ZSkgfHwgW10sXHJcbiAgICAgIF07XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGZyb21XaXJlVmFsdWUodmFsdWUpIHtcclxuICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFwiSEFORExFUlwiIC8qIEhBTkRMRVIgKi86XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVySGFuZGxlcnMuZ2V0KHZhbHVlLm5hbWUpLmRlc2VyaWFsaXplKHZhbHVlLnZhbHVlKTtcclxuICAgICAgICAgIGNhc2UgXCJSQVdcIiAvKiBSQVcgKi86XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIG1zZywgdHJhbnNmZXJzKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZVVVSUQoKTtcclxuICAgICAgICAgIGVwLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGZ1bmN0aW9uIGwoZXYpIHtcclxuICAgICAgICAgICAgICBpZiAoIWV2LmRhdGEgfHwgIWV2LmRhdGEuaWQgfHwgZXYuZGF0YS5pZCAhPT0gaWQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlcC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBsKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKGV2LmRhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoZXAuc3RhcnQpIHtcclxuICAgICAgICAgICAgICBlcC5zdGFydCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZXAucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7IGlkIH0sIG1zZyksIHRyYW5zZmVycyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQXJyYXkoNClcclxuICAgICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgICAubWFwKCgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpXHJcbiAgICAgICAgICAuam9pbihcIi1cIik7XHJcbiAgfVxuICAvLyMgc291cmNlTWFwcGluZ1VSTD1jb21saW5rLm1qcy5tYXBcblxuICAvLyBDb25zdGFudHNcbiAgY29uc3QgVVJMX0NETl9ST09UID0gXCJodHRwczovL2Nkbi5iaW93YXNtLmNvbS92MlwiO1xuICBjb25zdCBDT05GSUdfREVGQVVMVFMgPSB7XG4gIFx0Ly8gQmlvd2FzbSBDRE4gVVJMc1xuICBcdHVybENETjogVVJMX0NETl9ST09ULFxuICBcdC8vIEdldCB0aGUgV29ya2VyIGNvZGUgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBBaW9saSB2ZXJzaW9uXG4gIFx0dXJsQWlvbGk6IGAke1VSTF9DRE5fUk9PVH0vYWlvbGkvJHtwa2cudmVyc2lvbn0vYWlvbGkud29ya2VyLmpzYCxcbiAgXHQvLyBXaGVyZSB3ZSBjYW4gZmluZCB0aGUgYmFzZSBiaW93YXNtIG1vZHVsZSAob25seSBtb2RpZnkgdGhpcyBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQpXG4gIFx0dXJsQmFzZU1vZHVsZTogbnVsbCxcblxuICBcdC8vIEZvbGRlciB0byB1c2UgZm9yIG1vdW50aW5nIHRoZSBzaGFyZWQgZmlsZXN5c3RlbVxuICBcdGRpclNoYXJlZDogXCIvc2hhcmVkXCIsXG4gIFx0Ly8gRm9sZGVyIHRvIHVzZSBmb3IgbW91bnRpbmcgRmlsZS9CbG9iIG9iamVjdHMgdG8gdGhlIHZpcnR1YWwgZmlsZSBzeXN0ZW1cbiAgXHRkaXJNb3VudGVkOiBcIi9tbnRcIixcbiAgXHQvLyBGb2xkZXIgdG8gdXNlIGZvciBzeW1saW5rcyAoYmFzaWNhbGx5LCB3ZSBtYWtlIGEgc3ltbGluayB0byBlYWNoIGZpbGUgbW91bnRlZCBvbiBXT1JLRVJGU1xuICBcdC8vIHNvIHRoYXQgb3BlcmF0aW9ucyBsaWtlIFwic2FtdG9vbHMgaW5kZXhcIiBkb24ndCBjcmFzaCBkdWUgdG8gdGhlIHJlYWQtb25seSBuYXR1cmUgb2YgV09SS0VSUykuXG4gIFx0Ly8gQWxzbyBtb3VudCBVUkxzIGxhemlseSBpbiB0aGF0IGZvbGRlci5cbiAgXHRkaXJEYXRhOiBcIi9kYXRhXCIsXG4gIFx0Ly8gSW50ZXJsZWF2ZSBzdGRvdXQvc3RkZXJyLiBJZiBzZXQgdG8gZmFsc2UsIGAuZXhlYygpYCByZXR1cm5zIGFuIG9iamVjdCB7IFwic3Rkb3V0XCI6IDx0ZXh0PiwgXCJzdGRlcnJcIjogPHRleHQ+IH1cbiAgXHRwcmludEludGVybGVhdmVkOiB0cnVlLFxuXG4gIFx0Ly8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIHdoZW5ldmVyIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIFdlYldvcmtlciB3aXRoIHBheWxvYWQgeyB0eXBlOiBcImJpb3dhc21cIiwgdmFsdWU6IC4uLiB9LlxuICBcdC8vIFNlZSA8aHR0cHM6Ly9naXRodWIuY29tL2Jpb3dhc20vYmlvd2FzbS90cmVlL21haW4vdG9vbHMvYmh0c25lPiBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBjYW4gYmUgdXNlZCB0byBzZW5kIHJlZ3VsYXIgdXBkYXRlc1xuICBcdC8vIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBjYWxsTWFpbigpIGlzIGRvbmUgcnVubmluZy5cbiAgXHRjYWxsYmFjazogbnVsbCxcblxuICBcdC8vIERlYnVnZ2luZ1xuICBcdGRlYnVnOiBmYWxzZSxcbiAgXHRlbnY6IFwicHJkXCJcbiAgfTtcblxuICAvLyBDbGFzczogMSBvYmplY3QgPSAxIHdvcmtlcjsgdXNlciBjYW4gZGVjaWRlIGlmIHRoZXkgd2FudCB0b29scyBydW5uaW5nIGluIHNlcGFyYXRlIHRocmVhZHMgb3IgYWxsIG9mIHRoZW0gaW4gb25lXG4gIGNsYXNzIEFpb2xpXG4gIHtcbiAgXHRjb25zdHJ1Y3Rvcih0b29scywgY29uZmlnPXt9KVxuICBcdHtcbiAgXHRcdGlmKHRvb2xzID09IG51bGwpXG4gIFx0XHRcdHRocm93IFwiRXhwZWN0aW5nIGFycmF5IG9mIHRvb2xzIGFzIGlucHV0IHRvIEFpb2xpIGNvbnN0cnVjdG9yLlwiO1xuXG4gIFx0XHQvLyBQYXJzZSB1c2VyIGlucHV0XG4gIFx0XHRpZighQXJyYXkuaXNBcnJheSh0b29scykpXG4gIFx0XHRcdHRvb2xzID0gWyB0b29scyBdO1xuICBcdFx0Ly8gT3ZlcndyaXRlIGRlZmF1bHQgY29uZmlnIGlmIHNwZWNpZmllZFxuICBcdFx0Y29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgQ09ORklHX0RFRkFVTFRTLCBjb25maWcpO1xuICBcdFx0Ly8gRm9yIGNvbnZlbmllbmNlLCBzdXBwb3J0IFwiPHRvb2w+Lzx2ZXJzaW9uPlwiIG9yIFwiPHRvb2w+Lzxwcm9ncmFtPi88dmVyc2lvbj5cIiBpbnN0ZWFkIG9mIG9iamVjdCBjb25maWdcbiAgXHRcdHRvb2xzID0gdG9vbHMubWFwKHRoaXMuX3BhcnNlVG9vbCk7XG4gIFx0XHQvLyBJZiB0ZXN0aW5nIHdpdGggZGlmZmVyZW50IGVudmlyb25tZW50IGUuZy4gY2RuLXN0Zy5iaW93YXNtLmNvbVxuICBcdFx0aWYoY29uZmlnLmVudiAhPSBcInByZFwiKSB7XG4gIFx0XHRcdGNvbmZpZy51cmxDRE4gPSBjb25maWcudXJsQ0ROLnJlcGxhY2UoXCJjZG5cIiwgYGNkbi0ke2NvbmZpZy5lbnZ9YCk7XG4gIFx0XHRcdGNvbmZpZy51cmxBaW9saSA9IGNvbmZpZy51cmxBaW9saS5yZXBsYWNlKFwiY2RuXCIsIGBjZG4tJHtjb25maWcuZW52fWApO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBBZGQgYmlvd2FzbSBiYXNlIG1vZHVsZSB0byBsaXN0IG9mIHRvb2xzIHRvIGluaXRpYWxpemUgKG5lZWQgdGhpcyBmb3IgdGhlIHNoYXJlZCB2aXJ0dWFsIGZpbGVzeXN0ZW0pXG4gIFx0XHR0b29scyA9IFt7XG4gIFx0XHRcdHRvb2w6IFwiYmFzZVwiLFxuICBcdFx0XHR2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgXHRcdFx0dXJsUHJlZml4OiBjb25maWcudXJsQmFzZU1vZHVsZVxuICBcdFx0fSwgLi4udG9vbHNdO1xuXG4gIFx0XHQvLyBTZXQgc3RhdGVcbiAgXHRcdHRoaXMudG9vbHMgPSB0b29scztcbiAgXHRcdHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gIFx0XHQvLyBIYW5kbGUgY2FsbGJhY2sgKGRlbGV0ZSBpdCBiZWNhdXNlIHdlIGNhbid0IHNlbmQgYSBmdW5jdGlvbiB0byB0aGUgV2ViV29ya2VyKVxuICBcdFx0aWYodGhpcy5jb25maWcuY2FsbGJhY2sgIT0gbnVsbClcbiAgXHRcdFx0dGhpcy5jYWxsYmFjayA9IHRoaXMuY29uZmlnLmNhbGxiYWNrO1xuICBcdFx0ZGVsZXRlIHRoaXMuY29uZmlnLmNhbGxiYWNrO1xuXG4gIFx0XHRyZXR1cm4gdGhpcy5pbml0KCk7XG4gIFx0fVxuXG4gIFx0Ly8gSW5pdGlhbGl6ZSB0aGUgV2ViV29ya2VyIGFuZCB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlcyB3aXRoaW4gaXRcbiAgXHRhc3luYyBpbml0KCkge1xuICBcdFx0Ly8gTm90ZTogV2UgY2FuIG9ubHkgY3JlYXRlIGEgV2ViV29ya2VyIHVzaW5nIGEgVVJMIHRoYXQgaGFzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgYXBwIHJ1bm5pbmcgaXQsIGkuZS4gd2VcbiAgXHRcdC8vIGNhbid0IGRvIGBuZXcgV29ya2VyKFwiaHR0cHM6Ly9jZG4uYmlvd2FzbS5jb20vdjIvLi4uXCIpYCwgc28gaW5zdGVhZCB3ZSBuZWVkIHRvIGZldGNoIHRoZSBjb250ZW50cyBvZiB0aGF0XG4gIFx0XHQvLyBVUkwgZmlyc3QsIGFuZCB0aGVuIGNyZWF0ZSB0aGUgV2ViV29ya2VyLiBTZWUgPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MDAxNTg5OD4uXG4gIFx0XHRjb25zdCBtb2R1bGVKUyA9IGF3YWl0IChhd2FpdCBmZXRjaCh0aGlzLmNvbmZpZy51cmxBaW9saSkpLnRleHQoKTtcbiAgXHRcdGNvbnN0IG1vZHVsZUJsb2IgPSBuZXcgQmxvYihbbW9kdWxlSlNdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pO1xuXG4gIFx0XHQvLyBDcmVhdGUgdGhlIFdlYldvcmtlclxuICBcdFx0Y29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG1vZHVsZUJsb2IpKTtcbiAgXHRcdC8vIExpc3RlbiBmb3IgXCJiaW93YXNtXCIgbWVzc2FnZXMgZnJvbSB0aGUgV2ViV29ya2VyXG4gIFx0XHRpZih0aGlzLmNhbGxiYWNrKVxuICBcdFx0XHR3b3JrZXIub25tZXNzYWdlID0gZSA9PiB7XG4gIFx0XHRcdFx0aWYoZS5kYXRhLnR5cGUgPT0gXCJiaW93YXNtXCIpXG4gIFx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrKGUuZGF0YS52YWx1ZSk7XG4gIFx0XHRcdH07XG5cbiAgXHRcdGNvbnN0IGFpb2xpID0gd3JhcCh3b3JrZXIpO1xuICBcdFx0YWlvbGkudG9vbHMgPSB0aGlzLnRvb2xzO1xuICBcdFx0YWlvbGkuY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgXHRcdC8vIEluaXRpYWxpemUgdGhlIHRvb2xzIGluc2lkZSB0aGUgV2ViV29ya2VyXG4gIFx0XHRhd2FpdCBhaW9saS5pbml0KCk7XG5cbiAgXHRcdHJldHVybiBhaW9saTtcbiAgXHR9XG5cbiAgXHQvLyBQYXJzZSBcIjx0b29sPi88dmVyc2lvbj5cIiBhbmQgXCI8dG9vbD4vPHByb2dyYW0+Lzx2ZXJzaW9uPlwiIGludG8geyBcInRvb2xcIjogPHRvb2w+LCBcInByb2dyYW1cIjogPHByb2dyYW0+LCBcInZlcnNpb25cIjogPHZlcnNpb24+IH1cbiAgXHRfcGFyc2VUb29sKHRvb2wpXG4gIFx0e1xuICBcdFx0Ly8gSWYgbm90IGEgc3RyaW5nLCBsZWF2ZSBpdCBhcyBpc1xuICBcdFx0aWYodHlwZW9mIHRvb2wgIT09IFwic3RyaW5nXCIpXG4gIFx0XHRcdHJldHVybiB0b29sO1xuXG4gIFx0XHQvLyBTdXBwb3J0IFwiPHRvb2w+Lzx2ZXJzaW9uPlwiIGFuZCBcIjx0b29sPi88cHJvZ3JhbT4vPHZlcnNpb24+XCJcbiAgXHRcdGNvbnN0IHRvb2xTcGxpdCA9IHRvb2wuc3BsaXQoXCIvXCIpO1xuICBcdFx0aWYodG9vbFNwbGl0Lmxlbmd0aCAhPSAyICYmIHRvb2xTcGxpdC5sZW5ndGggIT0gMylcbiAgXHRcdFx0dGhyb3cgXCJFeHBlY3RpbmcgJzx0b29sPi88dmVyc2lvbj4nIG9yICc8dG9vbD4vPHByb2dyYW0+Lzx2ZXJzaW9uPidcIjtcblxuICBcdFx0cmV0dXJuIHtcbiAgXHRcdFx0dG9vbDogdG9vbFNwbGl0WzBdLFxuICBcdFx0XHRwcm9ncmFtOiB0b29sU3BsaXQubGVuZ3RoID09IDMgPyB0b29sU3BsaXRbMV0gOiB0b29sU3BsaXRbMF0sXG4gIFx0XHRcdHZlcnNpb246IHRvb2xTcGxpdFt0b29sU3BsaXQubGVuZ3RoIC0gMV1cbiAgXHRcdH07XG4gIFx0fVxuICB9XG5cbiAgcmV0dXJuIEFpb2xpO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWlvbGkuanMubWFwXG4iLCJpbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBBbWlub2FjaWRzUGFsZXR0ZXMgZXh0ZW5kcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgc3RhdGljIGdldCBMZXNrKCkge1xuICAgICAgICBpZiAodGhpcy5sZXNrID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMubGVzayA9IHRoaXMubWFrZVBhbGV0dGUoW1xuICAgICAgICAgICAgICAgIFtbJ0cnLCAnQScsICdTJywgJ1QnXSwgJ29yYW5nZSddLFxuICAgICAgICAgICAgICAgIFtbJ0MnLCAnVicsICdJJywgJ0wnLCAnUCcsICdGJywgJ1knLCAnTScsICdXJ10sICdhbGxfZ3JlZW4nXSxcbiAgICAgICAgICAgICAgICBbWydOJywgJ1EnLCAnSCddLCAnbWFnZW50YSddLFxuICAgICAgICAgICAgICAgIFtbJ0QnLCAnRSddLCAncmVkJ10sXG4gICAgICAgICAgICAgICAgW1snSycsICdSJ10sICdhbGxfYmx1ZSddLFxuICAgICAgICAgICAgXSwgZmFsc2UsIEFtaW5vYWNpZHNQYWxldHRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGVzaztcbiAgICB9XG4gICAgc3RhdGljIGdldCBHcm9rR3JvdXBzKCkge1xuICAgICAgICBpZiAodGhpcy5ncm9rR3JvdXBzID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3Jva0dyb3VwcyA9IHRoaXMubWFrZVBhbGV0dGUoW1xuICAgICAgICAgICAgICAgIFtbJ0MnLCAnVSddLCAneWVsbG93J10sXG4gICAgICAgICAgICAgICAgW1snRycsICdQJ10sICdyZWQnXSxcbiAgICAgICAgICAgICAgICBbWydBJywgJ1YnLCAnSScsICdMJywgJ00nLCAnRicsICdZJywgJ1cnXSwgJ2FsbF9ncmVlbiddLFxuICAgICAgICAgICAgICAgIFtbJ1InLCAnSCcsICdLJ10sICdsaWdodF9ibHVlJ10sXG4gICAgICAgICAgICAgICAgW1snRCcsICdFJ10sICdkYXJrX2JsdWUnXSxcbiAgICAgICAgICAgICAgICBbWydTJywgJ1QnLCAnTicsICdRJ10sICdvcmFuZ2UnXSxcbiAgICAgICAgICAgIF0sIGZhbHNlLCBBbWlub2FjaWRzUGFsZXR0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyb2tHcm91cHM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgUmFzTW9sKCkge1xuICAgICAgICBpZiAodGhpcy5yYXNNb2wgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5yYXNNb2wgPSBuZXcgQW1pbm9hY2lkc1BhbGV0dGVzKHtcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vYWNjZXMuZW5zLWx5b24uZnIvYmlvdGljL3Jhc3RvcC9oZWxwL2NvbG91ci5odG1cbiAgICAgICAgICAgICAgICAnRCc6ICcjRTYwQTBBJyxcbiAgICAgICAgICAgICAgICAnRSc6ICcjRTYwQTBBJyxcbiAgICAgICAgICAgICAgICAnQyc6ICcjRTZFNjAwJyxcbiAgICAgICAgICAgICAgICAnTSc6ICcjRTZFNjAwJyxcbiAgICAgICAgICAgICAgICAnSyc6ICcjMTQ1QUZGJyxcbiAgICAgICAgICAgICAgICAnUic6ICcjMTQ1QUZGJyxcbiAgICAgICAgICAgICAgICAnUyc6ICcjRkE5NjAwJyxcbiAgICAgICAgICAgICAgICAnVCc6ICcjRkE5NjAwJyxcbiAgICAgICAgICAgICAgICAnRic6ICcjMzIzMkFBJyxcbiAgICAgICAgICAgICAgICAnWSc6ICcjMzIzMkFBJyxcbiAgICAgICAgICAgICAgICAnTic6ICcjMDBEQ0RDJyxcbiAgICAgICAgICAgICAgICAnUSc6ICcjMDBEQ0RDJyxcbiAgICAgICAgICAgICAgICAnRyc6ICcjRUJFQkVCJyxcbiAgICAgICAgICAgICAgICAnTCc6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnVic6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnSSc6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnQSc6ICcjQzhDOEM4JyxcbiAgICAgICAgICAgICAgICAnVyc6ICcjQjQ1QUI0JyxcbiAgICAgICAgICAgICAgICAnSCc6ICcjODI4MkQyJyxcbiAgICAgICAgICAgICAgICAnUCc6ICcjREM5NjgyJyxcbiAgICAgICAgICAgICAgICAnb3RoZXJzJzogJyNCRUEwNkUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmFzTW9sO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbWlub2FjaWRzIHtcbiAgICBzdGF0aWMgZ2V0UGFsZXR0ZShzY2hlbWUgPSAnZ3JvaycpIHtcbiAgICAgICAgc3dpdGNoIChzY2hlbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2dyb2snOlxuICAgICAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcztcbiAgICAgICAgICAgIGNhc2UgJ2xlc2snOlxuICAgICAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuTGVzaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVtUGFsZXR0ZTogc2NoZW1lIFxcYCR7c2NoZW1lfVxcYCBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZGl2aWRlZCBhbWlubyBhY2lkIHdpdGggaXRzIGNvbnRlbnQgaW4gdGhlIGJyYWNrZXQsIGlmIHRoZSBjb250ZW50IGlzIG51bWJlciwgdGhlbiBpdHMgb21pdHRlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGMgcmF3IGFtaW5vXG4gICAgICogQHJldHVybiB7W3N0cmluZywgc3RyaW5nXX0gb3V0ZXIgYW5kIGlubmVyIGNvbnRlbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SW5uZXJPdXRlcihjKSB7XG4gICAgICAgIGxldCBpc0lubmVyID0gMDtcbiAgICAgICAgbGV0IGlubmVyID0gJyc7XG4gICAgICAgIGxldCBvdXRlciA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgYykge1xuICAgICAgICAgICAgaWYgKGNoYXIgPT0gJygnKVxuICAgICAgICAgICAgICAgIGlzSW5uZXIrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gJyknKVxuICAgICAgICAgICAgICAgIGlzSW5uZXItLTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5uZXIpXG4gICAgICAgICAgICAgICAgaW5uZXIgKz0gY2hhcjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvdXRlciArPSBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VJbnQoaW5uZXIpKSA/IFtvdXRlciwgJyddIDogW291dGVyLCBpbm5lcl07XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDb2xvckFBUGl2b3QobW9ub21lciA9ICcnLCBzY2hlbWUgPSAnZ3JvaycpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIC8vY29uc3QgY2hlbVBhbGV0dGVJbnN0YW5jZSA9IEFBUGFsZXR0ZXMuR3Jva0dyb3VwcygpO1xuICAgICAgICBjb25zdCBjaGVtUGFsZXR0ZUluc3RhbmNlID0gdGhpcy5nZXRQYWxldHRlKHNjaGVtZSk7XG4gICAgICAgIGxldCBbb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXJdID0gdGhpcy5nZXRJbm5lck91dGVyKG1vbm9tZXIpO1xuICAgICAgICBvdXRlck1vbm9tZXIgPSAob3V0ZXJNb25vbWVyLmxlbmd0aCA+IDYgPyBgJHtvdXRlck1vbm9tZXIuc2xpY2UoMCwgMyl9Li4uYCA6IG91dGVyTW9ub21lcik7XG4gICAgICAgIGlubmVyTW9ub21lciA9IChpbm5lck1vbm9tZXIubGVuZ3RoID4gNiA/IGAke2lubmVyTW9ub21lci5zbGljZSgwLCAzKX0uLi5gIDogaW5uZXJNb25vbWVyKTtcbiAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDEgfHwgbW9ub21lclsxXSA9PSAnKCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFtaW5vID0gKF9hID0gbW9ub21lclswXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMV0gOlxuICAgICAgICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbm9tZXJbMF0gPT0gJ2QnICYmIG1vbm9tZXJbMV0gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDIgfHwgbW9ub21lclsyXSA9PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IChfYiA9IG1vbm9tZXJbMV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbWlubyBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlID9cbiAgICAgICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMl0gOlxuICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb25vbWVyLnN1YnN0cmluZygwLCAzKSBpbiB0aGlzLkFBRnVsbE5hbWVzKSB7XG4gICAgICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gMyB8fCBtb25vbWVyWzNdID09ICcoJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFtaW5vID0gdGhpcy5BQUZ1bGxOYW1lc1ttb25vbWVyLnN1YnN0cmluZygwLCAzKV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFtaW5vIGluIGNoZW1QYWxldHRlSW5zdGFuY2UgP1xuICAgICAgICAgICAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCAzXSA6XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgM107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoX2MgPSBtb25vbWVyWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9Mb3dlckNhc2UoKSkgPT0gbW9ub21lclswXSkge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIuc3Vic3RyaW5nKDEsIDMpIGluIHRoaXMuQUFGdWxsTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gNCB8fCBtb25vbWVyWzRdID09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IHRoaXMuQUFGdWxsTmFtZXNbbW9ub21lci5zdWJzdHJpbmcoMSwgMyldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCA0XSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCAwXTtcbiAgICB9XG59XG5BbWlub2FjaWRzLlNlbVR5cGUgPSAnQW1pbm9hY2lkcyc7XG5BbWlub2FjaWRzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudCA9ICdBbWlub2FjaWRzTXVsdGlwbGVBbGlnbm1lbnQnO1xuQW1pbm9hY2lkcy51bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbkFtaW5vYWNpZHMuTmFtZXMgPSB7XG4gICAgJ0cnOiAnR2x5Y2luZScsXG4gICAgJ0wnOiAnTGV1Y2luZScsXG4gICAgJ1knOiAnVHlyb3NpbmUnLFxuICAgICdTJzogJ1NlcmluZScsXG4gICAgJ0UnOiAnR2x1dGFtaWMgYWNpZCcsXG4gICAgJ1EnOiAnR2x1dGFtaW5lJyxcbiAgICAnRCc6ICdBc3BhcnRpYyBhY2lkJyxcbiAgICAnTic6ICdBc3BhcmFnaW5lJyxcbiAgICAnRic6ICdQaGVueWxhbGFuaW5lJyxcbiAgICAnQSc6ICdBbGFuaW5lJyxcbiAgICAnSyc6ICdMeXNpbmUnLFxuICAgICdSJzogJ0FyZ2luaW5lJyxcbiAgICAnSCc6ICdIaXN0aWRpbmUnLFxuICAgICdDJzogJ0N5c3RlaW5lJyxcbiAgICAnVic6ICdWYWxpbmUnLFxuICAgICdQJzogJ1Byb2xpbmUnLFxuICAgICdXJzogJ1RyeXB0b3BoYW4nLFxuICAgICdJJzogJ0lzb2xldWNpbmUnLFxuICAgICdNJzogJ01ldGhpb25pbmUnLFxuICAgICdUJzogJ1RocmVvbmluZScsXG59O1xuQW1pbm9hY2lkcy5BQVNtaWxlcyA9IHtcbiAgICAnRyc6ICdOQ0MoPU8pTycsXG4gICAgJ0wnOiAnTltDQEhdKENDKEMpQylDKD1PKU8nLFxuICAgICdZJzogJ05DKENDMT1DQz1DKE8pQz1DMSlDKD1PKU8nLFxuICAgICdTJzogJ05DKENPKUMoPU8pTycsXG4gICAgJ0UnOiAnTltDQEBIXShDQ0MoTyk9TylDKD1PKU8nLFxuICAgICdRJzogJ05bQ0BASF0oQ0NDKE4pPU8pQyg9TylPJyxcbiAgICAnRCc6ICdOW0NAQEhdKENDKE8pPU8pQyg9TylPJyxcbiAgICAnTic6ICdOW0NAQEhdKENDKE4pPU8pQyg9TylPJyxcbiAgICAnRic6ICdOQyhDQzE9Q0M9Q0M9QzEpQyg9TylPJyxcbiAgICAnQSc6ICdOW0NASF0oQylDKD1PKU8nLFxuICAgICdLJzogJ05DKENDQ0NOKUMoPU8pTycsXG4gICAgJ1InOiAnTltDQEhdKENDQ05DKD1OKUMpQyg9TylPJyxcbiAgICAnSCc6ICdOQyhDQzE9Q049Q1tOXTEpQyg9TylPJyxcbiAgICAnQyc6ICdOW0NAQEhdKENTKUMoPU8pTycsXG4gICAgJ1YnOiAnTkMoQyhDKUMpQyg9TylPJyxcbiAgICAnUCc6ICdOKENDQzEpQzFDKD1PKU8nLFxuICAgICdXJzogJ05bQ0BASF0oQ2MxYzJjY2NjYzJuKFtIXSljMSlDKD1PKU8nLFxuICAgICdJJzogJ05bQ0BIXShbQ0BIXShDKUNDKUMoPU8pTycsXG4gICAgJ00nOiAnTkMoQ0NTQylDKD1PKU8nLFxuICAgICdUJzogJ05DKEMoTylDKUMoPU8pTycsXG59O1xuQW1pbm9hY2lkcy5BQVNtaWxlc1RydW5jYXRlZCA9IHtcbiAgICAnRyc6ICcqQyonLFxuICAgICdMJzogJ0NDKEMpQ1tDQEhdKCopKicsXG4gICAgJ1knOiAnQzE9Q0MoPUNDPUMxQ0MoKikqKU8nLFxuICAgICdTJzogJ09DQygqKUMqJyxcbiAgICAnRSc6ICcqW0NAQEhdKENDQyhPKT1PKSonLFxuICAgICdRJzogJypOW0NAQEhdKENDQyhOKT1PKSonLFxuICAgICdEJzogJypbQ0BASF0oQ0MoTyk9TykqJyxcbiAgICAnTic6ICcqW0NAQEhdKENDKE4pPU8pKicsXG4gICAgJ0YnOiAnQzE9Q0M9QyhDPUMxKUNDKCopKicsXG4gICAgJ0EnOiAnQ1tDQEhdKCopKicsXG4gICAgJ0snOiAnQyhDQ04pQ0MoKikqJyxcbiAgICAnUic6ICcqW0NASF0oQ0NDTkMoPU4pQykqJyxcbiAgICAnSCc6ICdDMT1DKE5DPU4xKUNDKCopKicsXG4gICAgJ0MnOiAnQyhbQ0BASF0oKikqKVMnLFxuICAgICdWJzogJ0NDKEMpQygqKSonLFxuICAgICdQJzogJ0MxQ0NOKCopQzEqJyxcbiAgICAnVyc6ICcqW0NAQEhdKENjMWMyY2NjY2MybihbSF0pYzEpKicsXG4gICAgJ0knOiAnQ0NbQ0BIXShDKVtDQEhdKCopKicsXG4gICAgJ00nOiAnQ1NDQ0MoKikqJyxcbiAgICAnVCc6ICdDQyhPKUMoKikqJyxcbn07XG4vKiogVE9ETzogRnVsbD9cbiAqL1xuQW1pbm9hY2lkcy5BQUZ1bGxOYW1lcyA9IHtcbiAgICAnQWxhJzogJ0EnLFxuICAgICdBcmcnOiAnUicsXG4gICAgJ0Fzbic6ICdOJyxcbiAgICAnQXNwJzogJ0QnLFxuICAgICdDeXMnOiAnQycsXG4gICAgJ0dsbic6ICdRJyxcbiAgICAnR2x1JzogJ0UnLFxuICAgICdHbHknOiAnRycsXG4gICAgJ0hpcyc6ICdIJyxcbiAgICAnSWxlJzogJ0knLFxuICAgICdMZXUnOiAnTCcsXG4gICAgJ0x5cyc6ICdLJyxcbiAgICAnTWV0JzogJ00nLFxuICAgICdQaGUnOiAnRicsXG4gICAgJ1Bybyc6ICdQJyxcbiAgICAnU2VyJzogJ1MnLFxuICAgICdUaHInOiAnVCcsXG4gICAgJ1RycCc6ICdXJyxcbiAgICAnVHlyJzogJ1knLFxuICAgICdWYWwnOiAnVicsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVcxcGJtOWhZMmxrY3k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbUZ0YVc1dllXTnBaSE11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlMwRXNUMEZCVHl4RlFVRmhMR05CUVdNc1JVRkJReXhOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlRGRUxFMUJRVTBzVDBGQlR5eHJRa0ZCYlVJc1UwRkJVU3hqUVVGak8wbEJSemRETEUxQlFVMHNTMEZCU3l4SlFVRkpPMUZCUTNCQ0xFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCU3l4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVONFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU03WjBKQlEyaERMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF6dG5Ra0ZETlVRc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1UwRkJVeXhEUVVGRE8yZENRVU0xUWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXp0blFrRkRia0lzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU03WVVGRGVrSXNSVUZCUlN4TFFVRkxMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0VFFVTXZRanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0SlFVTnVRaXhEUVVGRE8wbEJTVTBzVFVGQlRTeExRVUZMTEZWQlFWVTdVVUZETVVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJRenRuUWtGRGFrTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTTdaMEpCUTNSQ0xFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRE8yZENRVU51UWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJRenRuUWtGRGRrUXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNXVUZCV1N4RFFVRkRPMmRDUVVNdlFpeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF6dG5Ra0ZEZWtJc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGRkJRVkVzUTBGQlF6dGhRVU5xUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMU5CUXk5Q08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGSlRTeE5RVUZOTEV0QlFVc3NUVUZCVFR0UlFVTjBRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEV0QlFVc3NTMEZCU3l4RFFVRkRMRVZCUVVVN1dVRkRNVUlzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMR3RDUVVGclFpeERRVUZETzJkQ1FVTnVReXg1UkVGQmVVUTdaMEpCUTNwRUxFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEZGQlFWRXNSVUZCUlN4VFFVRlRPMkZCUTNCQ0xFTkJRVU1zUTBGQlF6dFRRVU5LTzFGQlEwUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRM0pDTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXhWUVVGVk8wbEJjVWRrTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJhVUlzVFVGQlRUdFJRVU01UXl4UlFVRlJMRTFCUVUwc1JVRkJSVHRaUVVOb1FpeExRVUZMTEUxQlFVMDdaMEpCUTFRc1QwRkJUeXhyUWtGQmEwSXNRMEZCUXl4VlFVRlZMRU5CUVVNN1dVRkRka01zUzBGQlN5eE5RVUZOTzJkQ1FVTlVMRTlCUVU4c2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTJwRE8yZENRVU5GTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2VVSkJRWGxDTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFRRVU55UlR0SlFVTklMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSkxFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCVXp0UlFVTnVReXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYUVJc1NVRkJTU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyWXNTVUZCU1N4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSV1lzUzBGQlN5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRjRUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NSMEZCUnp0blFrRkRZaXhQUVVGUExFVkJRVVVzUTBGQlF6dHBRa0ZEVUN4SlFVRkpMRWxCUVVrc1NVRkJTU3hIUVVGSE8yZENRVU5zUWl4UFFVRlBMRVZCUVVVc1EwRkJRenRwUWtGRFVDeEpRVUZKTEU5QlFVODdaMEpCUTJRc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF6czdaMEpCUldRc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF6dFRRVU5xUWp0UlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTm9SU3hEUVVGRE8wbEJSVTBzVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUXl4VlFVRnJRaXhGUVVGRkxFVkJRVVVzVTBGQmFVSXNUVUZCVFRzN1VVRkRla1VzYzBSQlFYTkVPMUZCUTNSRUxFMUJRVTBzYlVKQlFXMUNMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTndSQ3hKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEZsQlFWa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETDBRc1dVRkJXU3hIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzV1VGQldTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRNMFlzV1VGQldTeEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NXVUZCV1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03VVVGRk0wWXNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRelZETEUxQlFVMHNTMEZCU3l4SFFVRkhMRTFCUVVFc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5d3dRMEZCUlN4WFFVRlhMRVZCUVVjc1EwRkJRenRaUVVONlF5eFBRVUZQTEV0QlFVc3NTVUZCU1N4dFFrRkJiVUlzUTBGQlF5eERRVUZETzJkQ1FVTnVReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkVMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM2hFTzFGQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVVc1NVRkJTU3h0UWtGQmJVSXNSVUZCUlR0WlFVTXpSQ3hKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVTdaMEpCUXpWRExFMUJRVTBzUzBGQlN5eEhRVUZITEUxQlFVRXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXd3UTBGQlJTeFhRVUZYTEVWQlFVY3NRMEZCUXp0blFrRkRla01zVDBGQlR5eExRVUZMTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dHZRa0ZEYmtNc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU14UkN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzV1VGQldTeEZRVUZGTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVONFJEdFRRVU5HTzFGQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRk8xbEJReTlETEVsQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSVHRuUWtGRE5VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRSQ3hQUVVGUExFdEJRVXNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8yOUNRVU51UXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRekZFTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3haUVVGWkxFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTNoRU8xTkJRMFk3VVVGRlJDeEpRVUZKTEVOQlFVRXNUVUZCUVN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExEQkRRVUZGTEZkQlFWY3NSVUZCUlN4TFFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdFpRVU16UXl4SlFVRkpMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3WjBKQlF5OURMRWxCUVVrc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJUdHZRa0ZETlVNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVONFJDeFBRVUZQTEV0QlFVc3NTVUZCU1N4dFFrRkJiVUlzUTBGQlF5eERRVUZETzNkQ1FVTnVReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlF6RkVMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU40UkR0aFFVTkdPMU5CUTBZN1VVRkZSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4WlFVRlpMRVZCUVVVc1dVRkJXU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEVMRU5CUVVNN08wRkJjRXhsTEd0Q1FVRlBMRWRCUVZjc1dVRkJXU3hEUVVGRE8wRkJSUzlDTEcxRFFVRjNRaXhIUVVGWExEWkNRVUUyUWl4RFFVRkRPMEZCUlRGRkxIbENRVUZqTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU03UVVGRk4wSXNaMEpCUVVzc1IwRkJjVUk3U1VGRGRFTXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVTBGQlV6dEpRVU5rTEVkQlFVY3NSVUZCUlN4VlFVRlZPMGxCUTJZc1IwRkJSeXhGUVVGRkxGRkJRVkU3U1VGRFlpeEhRVUZITEVWQlFVVXNaVUZCWlR0SlFVTndRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1pVRkJaVHRKUVVOd1FpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzWlVGQlpUdEpRVU53UWl4SFFVRkhMRVZCUVVVc1UwRkJVenRKUVVOa0xFZEJRVWNzUlVGQlJTeFJRVUZSTzBsQlEySXNSMEZCUnl4RlFVRkZMRlZCUVZVN1NVRkRaaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1ZVRkJWVHRKUVVObUxFZEJRVWNzUlVGQlJTeFJRVUZSTzBsQlEySXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzV1VGQldUdEpRVU5xUWl4SFFVRkhMRVZCUVVVc1dVRkJXVHRKUVVOcVFpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dERRVU5xUWl4RFFVRkRPMEZCUlZrc2JVSkJRVkVzUjBGQmNVSTdTVUZEZWtNc1IwRkJSeXhGUVVGRkxGVkJRVlU3U1VGRFppeEhRVUZITEVWQlFVVXNjMEpCUVhOQ08wbEJRek5DTEVkQlFVY3NSVUZCUlN3eVFrRkJNa0k3U1VGRGFFTXNSMEZCUnl4RlFVRkZMR05CUVdNN1NVRkRia0lzUjBGQlJ5eEZRVUZGTEhsQ1FVRjVRanRKUVVNNVFpeEhRVUZITEVWQlFVVXNlVUpCUVhsQ08wbEJRemxDTEVkQlFVY3NSVUZCUlN4M1FrRkJkMEk3U1VGRE4wSXNSMEZCUnl4RlFVRkZMSGRDUVVGM1FqdEpRVU0zUWl4SFFVRkhMRVZCUVVVc2QwSkJRWGRDTzBsQlF6ZENMRWRCUVVjc1JVRkJSU3hwUWtGQmFVSTdTVUZEZEVJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0SlFVTjBRaXhIUVVGSExFVkJRVVVzTUVKQlFUQkNPMGxCUXk5Q0xFZEJRVWNzUlVGQlJTeDNRa0ZCZDBJN1NVRkROMElzUjBGQlJ5eEZRVUZGTEcxQ1FVRnRRanRKUVVONFFpeEhRVUZITEVWQlFVVXNhVUpCUVdsQ08wbEJRM1JDTEVkQlFVY3NSVUZCUlN4cFFrRkJhVUk3U1VGRGRFSXNSMEZCUnl4RlFVRkZMRzlEUVVGdlF6dEpRVU42UXl4SFFVRkhMRVZCUVVVc01FSkJRVEJDTzBsQlF5OUNMRWRCUVVjc1JVRkJSU3huUWtGQlowSTdTVUZEY2tJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0RFFVTjJRaXhEUVVGRE8wRkJSVmtzTkVKQlFXbENMRWRCUVhGQ08wbEJRMnhFTEVkQlFVY3NSVUZCUlN4TFFVRkxPMGxCUTFZc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0SlFVTjBRaXhIUVVGSExFVkJRVVVzYzBKQlFYTkNPMGxCUXpOQ0xFZEJRVWNzUlVGQlJTeFZRVUZWTzBsQlEyWXNSMEZCUnl4RlFVRkZMRzlDUVVGdlFqdEpRVU42UWl4SFFVRkhMRVZCUVVVc2NVSkJRWEZDTzBsQlF6RkNMRWRCUVVjc1JVRkJSU3h0UWtGQmJVSTdTVUZEZUVJc1IwRkJSeXhGUVVGRkxHMUNRVUZ0UWp0SlFVTjRRaXhIUVVGSExFVkJRVVVzY1VKQlFYRkNPMGxCUXpGQ0xFZEJRVWNzUlVGQlJTeFpRVUZaTzBsQlEycENMRWRCUVVjc1JVRkJSU3hqUVVGak8wbEJRMjVDTEVkQlFVY3NSVUZCUlN4eFFrRkJjVUk3U1VGRE1VSXNSMEZCUnl4RlFVRkZMRzFDUVVGdFFqdEpRVU40UWl4SFFVRkhMRVZCUVVVc1owSkJRV2RDTzBsQlEzSkNMRWRCUVVjc1JVRkJSU3haUVVGWk8wbEJRMnBDTEVkQlFVY3NSVUZCUlN4aFFVRmhPMGxCUTJ4Q0xFZEJRVWNzUlVGQlJTd3JRa0ZCSzBJN1NVRkRjRU1zUjBGQlJ5eEZRVUZGTEhGQ1FVRnhRanRKUVVNeFFpeEhRVUZITEVWQlFVVXNWMEZCVnp0SlFVTm9RaXhIUVVGSExFVkJRVVVzV1VGQldUdERRVU5zUWl4RFFVRkRPMEZCUlVZN1IwRkRSenRCUVVOWExITkNRVUZYTEVkQlFYRkNPMGxCUXpWRExFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1EwRkRXQ3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWjNKdmF5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaM0p2YXljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JseHVhVzF3YjNKMElIdFRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMU5sY1ZCaGJHVjBkR1VzSUZObGNWQmhiR1YwZEdWQ1lYTmxmU0JtY205dElDY3VMM05sY1Mxd1lXeGxkSFJsY3ljN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNZ1pYaDBaVzVrY3lCVFpYRlFZV3hsZEhSbFFtRnpaU0I3WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUd4bGMyczZJRk5sY1ZCaGJHVjBkR1U3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUWdUR1Z6YXlncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXNaWE5ySUQwOVBTQjJiMmxrSURBcElIdGNiaUFnSUNBZ0lIUm9hWE11YkdWemF5QTlJSFJvYVhNdWJXRnJaVkJoYkdWMGRHVW9XMXh1SUNBZ0lDQWdJQ0JiV3lkSEp5d2dKMEVuTENBblV5Y3NJQ2RVSjEwc0lDZHZjbUZ1WjJVblhTeGNiaUFnSUNBZ0lDQWdXMXNuUXljc0lDZFdKeXdnSjBrbkxDQW5UQ2NzSUNkUUp5d2dKMFluTENBbldTY3NJQ2ROSnl3Z0oxY25YU3dnSjJGc2JGOW5jbVZsYmlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRPSnl3Z0oxRW5MQ0FuU0NkZExDQW5iV0ZuWlc1MFlTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkRUp5d2dKMFVuWFN3Z0ozSmxaQ2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZExKeXdnSjFJblhTd2dKMkZzYkY5aWJIVmxKMTBzWEc0Z0lDQWdJQ0JkTENCbVlXeHpaU3dnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YkdWemF6dGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHZHliMnRIY205MWNITTZJRk5sY1ZCaGJHVjBkR1U3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUWdSM0p2YTBkeWIzVndjeWdwT2lCVFpYRlFZV3hsZEhSbElIdGNiaUFnSUNCcFppQW9kR2hwY3k1bmNtOXJSM0p2ZFhCeklEMDlQU0IyYjJsa0lEQXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVozSnZhMGR5YjNWd2N5QTlJSFJvYVhNdWJXRnJaVkJoYkdWMGRHVW9XMXh1SUNBZ0lDQWdJQ0JiV3lkREp5d2dKMVVuWFN3Z0ozbGxiR3h2ZHlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRISnl3Z0oxQW5YU3dnSjNKbFpDZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkQkp5d2dKMVluTENBblNTY3NJQ2RNSnl3Z0owMG5MQ0FuUmljc0lDZFpKeXdnSjFjblhTd2dKMkZzYkY5bmNtVmxiaWRkTEZ4dUlDQWdJQ0FnSUNCYld5ZFNKeXdnSjBnbkxDQW5TeWRkTENBbmJHbG5hSFJmWW14MVpTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkRUp5d2dKMFVuWFN3Z0oyUmhjbXRmWW14MVpTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkVEp5d2dKMVFuTENBblRpY3NJQ2RSSjEwc0lDZHZjbUZ1WjJVblhTeGNiaUFnSUNBZ0lGMHNJR1poYkhObExDQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW5jbTlyUjNKdmRYQnpPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdjbUZ6VFc5c09pQlRaWEZRWVd4bGRIUmxPMXh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMElGSmhjMDF2YkNncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXlZWE5OYjJ3Z1BUMDlJSFp2YVdRZ01Da2dlMXh1SUNBZ0lDQWdkR2hwY3k1eVlYTk5iMndnUFNCdVpYY2dRVzFwYm05aFkybGtjMUJoYkdWMGRHVnpLSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FIUjBjRG92TDJGalkyVnpMbVZ1Y3kxc2VXOXVMbVp5TDJKcGIzUnBZeTl5WVhOMGIzQXZhR1ZzY0M5amIyeHZkWEl1YUhSdFhHNGdJQ0FnSUNBZ0lDZEVKem9nSnlORk5qQkJNRUVuTENBdkx5QmhjM0FzSUdGemNHRnlkR2xqSUdGamFXUXNJR0Z6Y0Z4dUlDQWdJQ0FnSUNBblJTYzZJQ2NqUlRZd1FUQkJKeXdnTHk4Z1oyeDFMQ0JuYkhWMFlXMXBZeUJoWTJsa1hHNGdJQ0FnSUNBZ0lDZERKem9nSnlORk5rVTJNREFuTENBdkx5QmplWE1zSUdONWMzUmxhVzVsWEc0Z0lDQWdJQ0FnSUNkTkp6b2dKeU5GTmtVMk1EQW5MQ0F2THlCdFpYUXNJRzFsZEdocGIyNXBibVZjYmlBZ0lDQWdJQ0FnSjBzbk9pQW5JekUwTlVGR1JpY3NJQzh2SUd4NWN5d2diSGx6YVc1bFhHNGdJQ0FnSUNBZ0lDZFNKem9nSnlNeE5EVkJSa1luTENBdkx5QmhjbWNzSUdGeVoybHVhVzVsWEc0Z0lDQWdJQ0FnSUNkVEp6b2dKeU5HUVRrMk1EQW5MQ0F2THlCelpYSXNJSE5sY21sdVpWeHVJQ0FnSUNBZ0lDQW5WQ2M2SUNjalJrRTVOakF3Snl3Z0x5OGdkR2h5TENCMGFISmxiMjVwYm1WY2JpQWdJQ0FnSUNBZ0owWW5PaUFuSXpNeU16SkJRU2NzSUM4dklIQm9aU3dnY0dobGJubHNZV3hoYm1sdVpWeHVJQ0FnSUNBZ0lDQW5XU2M2SUNjak16SXpNa0ZCSnl3Z0x5OGdkSGx5TENCMGVYSnZjMmx1WlZ4dUlDQWdJQ0FnSUNBblRpYzZJQ2NqTURCRVEwUkRKeXdnTHk4Z1lYTnVMQ0JoYzNCaGNtRm5hVzVsWEc0Z0lDQWdJQ0FnSUNkUkp6b2dKeU13TUVSRFJFTW5MQ0F2THlCbmJHNHNJR2RzZFhSaGJXbHVaVnh1SUNBZ0lDQWdJQ0FuUnljNklDY2pSVUpGUWtWQ0p5d2dMeThnWjJ4NUxDQm5iSGxqYVc1bFhHNGdJQ0FnSUNBZ0lDZE1Kem9nSnlNd1JqZ3lNRVluTENBdkx5QnNaWFVzSUd4bGRXTnBibVZjYmlBZ0lDQWdJQ0FnSjFZbk9pQW5JekJHT0RJd1JpY3NJQzh2SUhaaGJDd2dkbUZzYVc1bFhHNGdJQ0FnSUNBZ0lDZEpKem9nSnlNd1JqZ3lNRVluTENBdkx5QnBiR1VzSUdsemIyeGxkV05wYm1WY2JpQWdJQ0FnSUNBZ0owRW5PaUFuSTBNNFF6aERPQ2NzSUM4dklHRnNZU3dnWVd4aGJtbHVaVnh1SUNBZ0lDQWdJQ0FuVnljNklDY2pRalExUVVJMEp5d2dMeThnZEhKd0xDQjBjbmx3ZEc5d2FHRnVYRzRnSUNBZ0lDQWdJQ2RJSnpvZ0p5TTRNamd5UkRJbkxDQXZMeUJvYVhNc0lHaHBjM1JwWkdsdVpWeHVJQ0FnSUNBZ0lDQW5VQ2M2SUNjalJFTTVOamd5Snl3Z0x5OGdjSEp2TENCd2NtOXNhVzVsWEc0Z0lDQWdJQ0FnSUNkdmRHaGxjbk1uT2lBbkkwSkZRVEEyUlNjc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtRnpUVzlzTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJCYldsdWIyRmphV1J6SUh0Y2JpQWdjM1JoZEdsaklISmxZV1J2Ym14NUlGTmxiVlI1Y0dVNklITjBjbWx1WnlBOUlDZEJiV2x1YjJGamFXUnpKenRjYmx4dUlDQnpkR0YwYVdNZ2NtVmhaRzl1YkhrZ1UyVnRWSGx3WlUxMWJIUnBjR3hsUVd4cFoyNXRaVzUwT2lCemRISnBibWNnUFNBblFXMXBibTloWTJsa2MwMTFiSFJwY0d4bFFXeHBaMjV0Wlc1MEp6dGNibHh1SUNCemRHRjBhV01nZFc1a1pXWnBibVZrUTI5c2IzSWdQU0FuY21kaUtERXdNQ3d4TURBc01UQXdLU2M3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCT1lXMWxjem9nVTNSeWFXNW5SR2xqZEdsdmJtRnllU0E5SUh0Y2JpQWdJQ0FuUnljNklDZEhiSGxqYVc1bEp5eGNiaUFnSUNBblRDYzZJQ2RNWlhWamFXNWxKeXhjYmlBZ0lDQW5XU2M2SUNkVWVYSnZjMmx1WlNjc1hHNGdJQ0FnSjFNbk9pQW5VMlZ5YVc1bEp5eGNiaUFnSUNBblJTYzZJQ2RIYkhWMFlXMXBZeUJoWTJsa0p5eGNiaUFnSUNBblVTYzZJQ2RIYkhWMFlXMXBibVVuTEZ4dUlDQWdJQ2RFSnpvZ0owRnpjR0Z5ZEdsaklHRmphV1FuTEZ4dUlDQWdJQ2RPSnpvZ0owRnpjR0Z5WVdkcGJtVW5MRnh1SUNBZ0lDZEdKem9nSjFCb1pXNTViR0ZzWVc1cGJtVW5MRnh1SUNBZ0lDZEJKem9nSjBGc1lXNXBibVVuTEZ4dUlDQWdJQ2RMSnpvZ0oweDVjMmx1WlNjc1hHNGdJQ0FnSjFJbk9pQW5RWEpuYVc1cGJtVW5MRnh1SUNBZ0lDZElKem9nSjBocGMzUnBaR2x1WlNjc1hHNGdJQ0FnSjBNbk9pQW5RM2x6ZEdWcGJtVW5MRnh1SUNBZ0lDZFdKem9nSjFaaGJHbHVaU2NzWEc0Z0lDQWdKMUFuT2lBblVISnZiR2x1WlNjc1hHNGdJQ0FnSjFjbk9pQW5WSEo1Y0hSdmNHaGhiaWNzWEc0Z0lDQWdKMGtuT2lBblNYTnZiR1YxWTJsdVpTY3NYRzRnSUNBZ0owMG5PaUFuVFdWMGFHbHZibWx1WlNjc1hHNGdJQ0FnSjFRbk9pQW5WR2h5Wlc5dWFXNWxKeXhjYmlBZ2ZUdGNibHh1SUNCd2RXSnNhV01nYzNSaGRHbGpJRUZCVTIxcGJHVnpPaUJUZEhKcGJtZEVhV04wYVc5dVlYSjVJRDBnZTF4dUlDQWdJQ2RISnpvZ0owNURReWc5VHlsUEp5eGNiaUFnSUNBblRDYzZJQ2RPVzBOQVNGMG9RME1vUXlsREtVTW9QVThwVHljc1hHNGdJQ0FnSjFrbk9pQW5Ua01vUTBNeFBVTkRQVU1vVHlsRFBVTXhLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxTW5PaUFuVGtNb1EwOHBReWc5VHlsUEp5eGNiaUFnSUNBblJTYzZJQ2RPVzBOQVFFaGRLRU5EUXloUEtUMVBLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxRW5PaUFuVGx0RFFFQklYU2hEUTBNb1RpazlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZEVKem9nSjA1YlEwQkFTRjBvUTBNb1R5azlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZE9Kem9nSjA1YlEwQkFTRjBvUTBNb1RpazlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZEdKem9nSjA1REtFTkRNVDFEUXoxRFF6MURNU2xES0QxUEtVOG5MRnh1SUNBZ0lDZEJKem9nSjA1YlEwQklYU2hES1VNb1BVOHBUeWNzWEc0Z0lDQWdKMHNuT2lBblRrTW9RME5EUTA0cFF5ZzlUeWxQSnl4Y2JpQWdJQ0FuVWljNklDZE9XME5BU0Ywb1EwTkRUa01vUFU0cFF5bERLRDFQS1U4bkxGeHVJQ0FnSUNkSUp6b2dKMDVES0VORE1UMURUajFEVzA1ZE1TbERLRDFQS1U4bkxGeHVJQ0FnSUNkREp6b2dKMDViUTBCQVNGMG9RMU1wUXlnOVR5bFBKeXhjYmlBZ0lDQW5WaWM2SUNkT1F5aERLRU1wUXlsREtEMVBLVThuTEZ4dUlDQWdJQ2RRSnpvZ0owNG9RME5ETVNsRE1VTW9QVThwVHljc1hHNGdJQ0FnSjFjbk9pQW5UbHREUUVCSVhTaERZekZqTW1OalkyTmpNbTRvVzBoZEtXTXhLVU1vUFU4cFR5Y3NYRzRnSUNBZ0owa25PaUFuVGx0RFFFaGRLRnREUUVoZEtFTXBRME1wUXlnOVR5bFBKeXhjYmlBZ0lDQW5UU2M2SUNkT1F5aERRMU5ES1VNb1BVOHBUeWNzWEc0Z0lDQWdKMVFuT2lBblRrTW9ReWhQS1VNcFF5ZzlUeWxQSnl4Y2JpQWdmVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUVGQlUyMXBiR1Z6VkhKMWJtTmhkR1ZrT2lCVGRISnBibWRFYVdOMGFXOXVZWEo1SUQwZ2UxeHVJQ0FnSUNkSEp6b2dKeXBES2ljc1hHNGdJQ0FnSjB3bk9pQW5RME1vUXlsRFcwTkFTRjBvS2lrcUp5eGNiaUFnSUNBbldTYzZJQ2RETVQxRFF5ZzlRME05UXpGRFF5Z3FLU29wVHljc1hHNGdJQ0FnSjFNbk9pQW5UME5ES0NvcFF5b25MRnh1SUNBZ0lDZEZKem9nSnlwYlEwQkFTRjBvUTBOREtFOHBQVThwS2ljc1hHNGdJQ0FnSjFFbk9pQW5LazViUTBCQVNGMG9RME5ES0U0cFBVOHBLaWNzWEc0Z0lDQWdKMFFuT2lBbktsdERRRUJJWFNoRFF5aFBLVDFQS1NvbkxGeHVJQ0FnSUNkT0p6b2dKeXBiUTBCQVNGMG9RME1vVGlrOVR5a3FKeXhjYmlBZ0lDQW5SaWM2SUNkRE1UMURRejFES0VNOVF6RXBRME1vS2lrcUp5eGNiaUFnSUNBblFTYzZJQ2REVzBOQVNGMG9LaWtxSnl4Y2JpQWdJQ0FuU3ljNklDZERLRU5EVGlsRFF5Z3FLU29uTEZ4dUlDQWdJQ2RTSnpvZ0p5cGJRMEJJWFNoRFEwTk9ReWc5VGlsREtTb25MRnh1SUNBZ0lDZElKem9nSjBNeFBVTW9Ua005VGpFcFEwTW9LaWtxSnl4Y2JpQWdJQ0FuUXljNklDZERLRnREUUVCSVhTZ3FLU29wVXljc1hHNGdJQ0FnSjFZbk9pQW5RME1vUXlsREtDb3BLaWNzWEc0Z0lDQWdKMUFuT2lBblF6RkRRMDRvS2lsRE1Tb25MRnh1SUNBZ0lDZFhKem9nSnlwYlEwQkFTRjBvUTJNeFl6SmpZMk5qWXpKdUtGdElYU2xqTVNrcUp5eGNiaUFnSUNBblNTYzZJQ2REUTF0RFFFaGRLRU1wVzBOQVNGMG9LaWtxSnl4Y2JpQWdJQ0FuVFNjNklDZERVME5EUXlncUtTb25MRnh1SUNBZ0lDZFVKem9nSjBOREtFOHBReWdxS1NvbkxGeHVJQ0I5TzF4dVhHNGdJQzhxS2lCVVQwUlBPaUJHZFd4c1AxeHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCQlFVWjFiR3hPWVcxbGN6b2dVM1J5YVc1blJHbGpkR2x2Ym1GeWVTQTlJSHRjYmlBZ0lDQW5RV3hoSnpvZ0owRW5MRnh1SUNBZ0lDZEJjbWNuT2lBblVpY3NYRzRnSUNBZ0owRnpiaWM2SUNkT0p5eGNiaUFnSUNBblFYTndKem9nSjBRbkxGeHVJQ0FnSUNkRGVYTW5PaUFuUXljc1hHNGdJQ0FnSjBkc2JpYzZJQ2RSSnl4Y2JpQWdJQ0FuUjJ4MUp6b2dKMFVuTEZ4dUlDQWdJQ2RIYkhrbk9pQW5SeWNzWEc0Z0lDQWdKMGhwY3ljNklDZElKeXhjYmlBZ0lDQW5TV3hsSnpvZ0owa25MRnh1SUNBZ0lDZE1aWFVuT2lBblRDY3NYRzRnSUNBZ0oweDVjeWM2SUNkTEp5eGNiaUFnSUNBblRXVjBKem9nSjAwbkxGeHVJQ0FnSUNkUWFHVW5PaUFuUmljc1hHNGdJQ0FnSjFCeWJ5YzZJQ2RRSnl4Y2JpQWdJQ0FuVTJWeUp6b2dKMU1uTEZ4dUlDQWdJQ2RVYUhJbk9pQW5WQ2NzWEc0Z0lDQWdKMVJ5Y0NjNklDZFhKeXhjYmlBZ0lDQW5WSGx5SnpvZ0oxa25MRnh1SUNBZ0lDZFdZV3duT2lBblZpY3NYRzRnSUgwN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJRWVd4bGRIUmxLSE5qYUdWdFpUb2djM1J5YVc1bklEMGdKMmR5YjJzbktUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdjM2RwZEdOb0lDaHpZMmhsYldVcElIdGNiaUFnSUNCallYTmxJQ2RuY205ckp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVIzSnZhMGR5YjNWd2N6dGNiaUFnSUNCallYTmxJQ2RzWlhOckp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVRHVnphenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRGFHVnRVR0ZzWlhSMFpUb2djMk5vWlcxbElGeGNZQ1I3YzJOb1pXMWxmVnhjWUNCa2IyVnpJRzV2ZENCbGVHbHpkR0FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdScGRtbGtaV1FnWVcxcGJtOGdZV05wWkNCM2FYUm9JR2wwY3lCamIyNTBaVzUwSUdsdUlIUm9aU0JpY21GamEyVjBMQ0JwWmlCMGFHVWdZMjl1ZEdWdWRDQnBjeUJ1ZFcxaVpYSXNJSFJvWlc0Z2FYUnpJRzl0YVhSMFpXUmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR01nY21GM0lHRnRhVzV2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMXR6ZEhKcGJtY3NJSE4wY21sdVoxMTlJRzkxZEdWeUlHRnVaQ0JwYm01bGNpQmpiMjUwWlc1MFhHNGdJQ0FxTDF4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdkbGRFbHVibVZ5VDNWMFpYSW9Zem9nYzNSeWFXNW5LVG9nVzNOMGNtbHVaeXdnYzNSeWFXNW5YU0I3WEc0Z0lDQWdiR1YwSUdselNXNXVaWElnUFNBd08xeHVJQ0FnSUd4bGRDQnBibTVsY2lBOUlDY25PMXh1SUNBZ0lHeGxkQ0J2ZFhSbGNpQTlJQ2NuTzF4dVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCamFHRnlJRzltSUdNcElIdGNiaUFnSUNBZ0lHbG1JQ2hqYUdGeUlEMDlJQ2NvSnlsY2JpQWdJQ0FnSUNBZ2FYTkpibTVsY2lzck8xeHVJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kyaGhjaUE5UFNBbktTY3BYRzRnSUNBZ0lDQWdJR2x6U1c1dVpYSXRMVHRjYmlBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2x6U1c1dVpYSXBYRzRnSUNBZ0lDQWdJR2x1Ym1WeUlDczlJR05vWVhJN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJRzkxZEdWeUlDczlJR05vWVhJN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJQ0ZwYzA1aFRpaHdZWEp6WlVsdWRDaHBibTVsY2lrcElEOGdXMjkxZEdWeUxDQW5KMTBnT2lCYmIzVjBaWElzSUdsdWJtVnlYVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwUTI5c2IzSkJRVkJwZG05MEtHMXZibTl0WlhJNklITjBjbWx1WnlBOUlDY25MQ0J6WTJobGJXVTZJQ2RuY205ckp5QTlJQ2RuY205ckp5azZJRnR6ZEhKcGJtY3NJSE4wY21sdVp5d2djM1J5YVc1bkxDQnVkVzFpWlhKZElIdGNiaUFnSUNBdkwyTnZibk4wSUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1BTQkJRVkJoYkdWMGRHVnpMa2R5YjJ0SGNtOTFjSE1vS1R0Y2JpQWdJQ0JqYjI1emRDQmphR1Z0VUdGc1pYUjBaVWx1YzNSaGJtTmxJRDBnZEdocGN5NW5aWFJRWVd4bGRIUmxLSE5qYUdWdFpTazdYRzRnSUNBZ2JHVjBJRnR2ZFhSbGNrMXZibTl0WlhJc0lHbHVibVZ5VFc5dWIyMWxjbDBnUFNCMGFHbHpMbWRsZEVsdWJtVnlUM1YwWlhJb2JXOXViMjFsY2lrN1hHNGdJQ0FnYjNWMFpYSk5iMjV2YldWeUlEMGdLRzkxZEdWeVRXOXViMjFsY2k1c1pXNW5kR2dnUGlBMklEOGdZQ1I3YjNWMFpYSk5iMjV2YldWeUxuTnNhV05sS0RBc0lETXBmUzR1TG1BZ09pQnZkWFJsY2sxdmJtOXRaWElwTzF4dUlDQWdJR2x1Ym1WeVRXOXViMjFsY2lBOUlDaHBibTVsY2sxdmJtOXRaWEl1YkdWdVozUm9JRDRnTmlBL0lHQWtlMmx1Ym1WeVRXOXViMjFsY2k1emJHbGpaU2d3TENBektYMHVMaTVnSURvZ2FXNXVaWEpOYjI1dmJXVnlLVHRjYmx4dUlDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBeElIeDhJRzF2Ym05dFpYSmJNVjBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmhiV2x1YnlBOUlHMXZibTl0WlhKYk1GMC9MblJ2VlhCd1pYSkRZWE5sS0NraE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdGdGFXNXZJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1AxeHVJQ0FnSUNBZ0lDQmJZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaUzVuWlhRb1lXMXBibThwTENCaGJXbHVieXdnYVc1dVpYSk5iMjV2YldWeUxDQXhYU0E2WEc0Z0lDQWdJQ0FnSUZ0MGFHbHpMblZ1WkdWbWFXNWxaRU52Ykc5eUxDQnZkWFJsY2sxdmJtOXRaWElzSUdsdWJtVnlUVzl1YjIxbGNpd2dNVjA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0cxdmJtOXRaWEpiTUYwZ1BUMGdKMlFuSUNZbUlHMXZibTl0WlhKYk1WMGhJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNBZ0lHbG1JQ2h0YjI1dmJXVnlMbXhsYm1kMGFDQTlQU0F5SUh4OElHMXZibTl0WlhKYk1sMGdQVDBnSnlnbktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHRnRhVzV2SUQwZ2JXOXViMjFsY2xzeFhUOHVkRzlWY0hCbGNrTmhjMlVvS1NFN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGJXbHVieUJwYmlCamFHVnRVR0ZzWlhSMFpVbHVjM1JoYm1ObElEOWNiaUFnSUNBZ0lDQWdJQ0JiWTJobGJWQmhiR1YwZEdWSmJuTjBZVzVqWlM1blpYUW9ZVzFwYm04cExDQmhiV2x1Ynl3Z2FXNXVaWEpOYjI1dmJXVnlMQ0F5WFNBNlhHNGdJQ0FnSUNBZ0lDQWdXM1JvYVhNdWRXNWtaV1pwYm1Wa1EyOXNiM0lzSUc5MWRHVnlUVzl1YjIxbGNpd2dhVzV1WlhKTmIyNXZiV1Z5TENBeVhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iVzl1YjIxbGNpNXpkV0p6ZEhKcGJtY29NQ3dnTXlrZ2FXNGdkR2hwY3k1QlFVWjFiR3hPWVcxbGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0cxdmJtOXRaWEl1YkdWdVozUm9JRDA5SURNZ2ZId2diVzl1YjIxbGNsc3pYU0E5UFNBbktDY3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZVzFwYm04Z1BTQjBhR2x6TGtGQlJuVnNiRTVoYldWelcyMXZibTl0WlhJdWMzVmljM1J5YVc1bktEQXNJRE1wWFR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGdGFXNXZJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1AxeHVJQ0FnSUNBZ0lDQWdJRnRqYUdWdFVHRnNaWFIwWlVsdWMzUmhibU5sTG1kbGRDaGhiV2x1Ynlrc0lHRnRhVzV2TENCcGJtNWxjazF2Ym05dFpYSXNJRE5kSURwY2JpQWdJQ0FnSUNBZ0lDQmJkR2hwY3k1MWJtUmxabWx1WldSRGIyeHZjaXdnYjNWMFpYSk5iMjV2YldWeUxDQnBibTVsY2sxdmJtOXRaWElzSUROZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRiMjV2YldWeVd6QmRQeTUwYjB4dmQyVnlRMkZ6WlNncElEMDlJRzF2Ym05dFpYSmJNRjBwSUh0Y2JpQWdJQ0FnSUdsbUlDaHRiMjV2YldWeUxuTjFZbk4wY21sdVp5Z3hMQ0F6S1NCcGJpQjBhR2x6TGtGQlJuVnNiRTVoYldWektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBMElIeDhJRzF2Ym05dFpYSmJORjBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWVcxcGJtOGdQU0IwYUdsekxrRkJSblZzYkU1aGJXVnpXMjF2Ym05dFpYSXVjM1ZpYzNSeWFXNW5LREVzSURNcFhUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZVzFwYm04Z2FXNGdZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaU0EvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmJZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaUzVuWlhRb1lXMXBibThwTENCaGJXbHVieXdnYVc1dVpYSk5iMjV2YldWeUxDQTBYU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmJkR2hwY3k1MWJtUmxabWx1WldSRGIyeHZjaXdnYjNWMFpYSk5iMjV2YldWeUxDQnBibTVsY2sxdmJtOXRaWElzSURSZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUZ0MGFHbHpMblZ1WkdWbWFXNWxaRU52Ykc5eUxDQnZkWFJsY2sxdmJtOXRaWElzSUdsdWJtVnlUVzl1YjIxbGNpd2dNRjA3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBOdWNsZW90aWRlc1BhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICAgIHN0YXRpYyBnZXQgQ2hyb21hdG9ncmFtKCkge1xuICAgICAgICBpZiAodGhpcy5jaHJvbWF0b2dyYW0gPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5jaHJvbWF0b2dyYW0gPSBuZXcgTnVjbGVvdGlkZXNQYWxldHRlcyh7XG4gICAgICAgICAgICAgICAgJ0EnOiAnZ3JlZW4nLFxuICAgICAgICAgICAgICAgICdDJzogJ2JsdWUnLFxuICAgICAgICAgICAgICAgICdHJzogJ2JsYWNrJyxcbiAgICAgICAgICAgICAgICAnVCc6ICdyZWQnLCAnVSc6ICdyZWQnLFxuICAgICAgICAgICAgICAgICdvdGhlcnMnOiAnZ3JheScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaHJvbWF0b2dyYW07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE51Y2xlb3RpZGVzIHtcbn1cbk51Y2xlb3RpZGVzLlNlbVR5cGUgPSAnTnVjbGVvdGlkZXMnO1xuTnVjbGVvdGlkZXMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50ID0gJ051Y2xlb3RpZGVzTXVsdGlwbGVBbGlnbm1lbnQnO1xuTnVjbGVvdGlkZXMuTmFtZXMgPSB7XG4gICAgJ0EnOiAnQWRlbmluZScsXG4gICAgJ0MnOiAnQ3l0b3NpbmUnLFxuICAgICdHJzogJ0d1YW5pbmUnLFxuICAgICdUJzogJ1RoeW1pbmUnLFxuICAgICdVJzogJ1VyYWNpbCcsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYm5WamJHVnZkR2xrWlhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUp1ZFdOc1pXOTBhV1JsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkxRU3hQUVVGUExFVkJRV0VzWTBGQll5eEZRVUZETEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRk1VUXNUVUZCVFN4UFFVRlBMRzFDUVVGdlFpeFRRVUZSTEdOQlFXTTdTVUZIT1VNc1RVRkJUU3hMUVVGTExGbEJRVms3VVVGRE5VSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1dVRkJXU3hMUVVGTExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlEyaERMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJRenRuUWtGRE1VTXNSMEZCUnl4RlFVRkZMRTlCUVU4N1owSkJRMW9zUjBGQlJ5eEZRVUZGTEUxQlFVMDdaMEpCUTFnc1IwRkJSeXhGUVVGRkxFOUJRVTg3WjBKQlExb3NSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN6dG5Ra0ZEZEVJc1VVRkJVU3hGUVVGRkxFMUJRVTA3WVVGRGFrSXNRMEZCUXl4RFFVRkRPMU5CUTBvN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdTVUZETTBJc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFBRVUZQTEZkQlFWYzdPMEZCUTA0c2JVSkJRVThzUjBGQlZ5eGhRVUZoTEVOQlFVTTdRVUZGYUVNc2IwTkJRWGRDTEVkQlFWY3NPRUpCUVRoQ0xFTkJRVU03UVVGRmNFVXNhVUpCUVVzc1IwRkJjVUk3U1VGRGRFTXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVlVGQlZUdEpRVU5tTEVkQlFVY3NSVUZCUlN4VFFVRlRPMGxCUTJRc1IwRkJSeXhGUVVGRkxGTkJRVk03U1VGRFpDeEhRVUZITEVWQlFVVXNVVUZCVVR0RFFVTmtMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dVhHNXBiWEJ2Y25RZ2UxTjBjbWx1WjBScFkzUnBiMjVoY25sOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdVMlZ4VUdGc1pYUjBaU3dnVTJWeFVHRnNaWFIwWlVKaGMyVjlJR1p5YjIwZ0p5NHZjMlZ4TFhCaGJHVjBkR1Z6Snp0Y2JseHVaWGh3YjNKMElHTnNZWE56SUU1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhNZ1pYaDBaVzVrY3lCVFpYRlFZV3hsZEhSbFFtRnpaU0I3WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOb2NtOXRZWFJ2WjNKaGJUb2dVMlZ4VUdGc1pYUjBaVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdkbGRDQkRhSEp2YldGMGIyZHlZVzBvS1RvZ1UyVnhVR0ZzWlhSMFpTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyaHliMjFoZEc5bmNtRnRJRDA5UFNCMmIybGtJREFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0SUQwZ2JtVjNJRTUxWTJ4bGIzUnBaR1Z6VUdGc1pYUjBaWE1vZTF4dUlDQWdJQ0FnSUNBblFTYzZJQ2RuY21WbGJpY3NYRzRnSUNBZ0lDQWdJQ2RESnpvZ0oySnNkV1VuTEZ4dUlDQWdJQ0FnSUNBblJ5YzZJQ2RpYkdGamF5Y3NJQzh2SUc5eVlXNW5aU0EvWEc0Z0lDQWdJQ0FnSUNkVUp6b2dKM0psWkNjc0lDZFZKem9nSjNKbFpDY3NYRzRnSUNBZ0lDQWdJQ2R2ZEdobGNuTW5PaUFuWjNKaGVTY3NYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0TzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJPZFdOc1pXOTBhV1JsY3lCN1hHNGdJSE4wWVhScFl5QnlaV0ZrYjI1c2VTQlRaVzFVZVhCbE9pQnpkSEpwYm1jZ1BTQW5UblZqYkdWdmRHbGtaWE1uTzF4dVhHNGdJSE4wWVhScFl5QnlaV0ZrYjI1c2VTQlRaVzFVZVhCbFRYVnNkR2x3YkdWQmJHbG5ibTFsYm5RNklITjBjbWx1WnlBOUlDZE9kV05zWlc5MGFXUmxjMDExYkhScGNHeGxRV3hwWjI1dFpXNTBKenRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUU1aGJXVnpPaUJUZEhKcGJtZEVhV04wYVc5dVlYSjVJRDBnZTF4dUlDQWdJQ2RCSnpvZ0owRmtaVzVwYm1VbkxGeHVJQ0FnSUNkREp6b2dKME41ZEc5emFXNWxKeXhjYmlBZ0lDQW5SeWM2SUNkSGRXRnVhVzVsSnl4Y2JpQWdJQ0FuVkNjNklDZFVhSGx0YVc1bEp5eGNiaUFnSUNBblZTYzZJQ2RWY21GamFXd25MRnh1SUNCOU8xeHVmVnh1SWwxOSIsImV4cG9ydCBjbGFzcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgY29uc3RydWN0b3IocGFsZXR0ZSkge1xuICAgICAgICB0aGlzLl9wYWxldHRlID0gcGFsZXR0ZTtcbiAgICB9XG4gICAgc3RhdGljIG1ha2VQYWxldHRlKGR0LCBzaW1wbGlmaWVkID0gZmFsc2UsIFBhbGV0dGVUeXBlID0gU2VxUGFsZXR0ZUJhc2UpIHtcbiAgICAgICAgY29uc3QgcGFsZXR0ZSA9IHt9O1xuICAgICAgICBkdC5mb3JFYWNoKChjcCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqTGlzdCA9IGNwWzBdO1xuICAgICAgICAgICAgY29uc3QgY29sb3VyID0gY3BbMV07XG4gICAgICAgICAgICBvYmpMaXN0LmZvckVhY2goKG9iaiwgaW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFsZXR0ZVtvYmpdID0gdGhpcy5jb2xvdXJQYWxldHRlW2NvbG91cl1bc2ltcGxpZmllZCA/IDAgOiBpbmRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFBhbGV0dGVUeXBlKHBhbGV0dGUpO1xuICAgIH1cbiAgICBnZXQobSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFsZXR0ZVttXTtcbiAgICB9XG59XG5TZXFQYWxldHRlQmFzZS51bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbi8qKiBQYWxldHRlIHdpdGggc2hhZGVzIG9mIHByaW1hcnkgY29sb3JzICovXG5TZXFQYWxldHRlQmFzZS5jb2xvdXJQYWxldHRlID0ge1xuICAgICdvcmFuZ2UnOiBbJ3JnYigyNTUsMTg3LDEyMCknLCAncmdiKDI0NSwxNjcsMTAwKScsICdyZ2IoMjM1LDEzNyw3MCknLCAncmdiKDIwNSwgMTExLCA3MSknXSxcbiAgICAnYWxsX2dyZWVuJzogWydyZ2IoNDQsMTYwLDQ0KScsICdyZ2IoNzQsMTYwLDc0KScsICdyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsXG4gICAgICAgICdyZ2IoMjQsMTEwLDc5KScsICdyZ2IoMTUyLDIyMywxMzgpJywgJ3JnYigxODIsIDIyMywgMTM4KScsICdyZ2IoMTUyLCAxOTMsIDEzOCknXSxcbiAgICAnYWxsX2JsdWUnOiBbJ3JnYigzMSwxMTksMTgwKScsICdyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDEyMiwgMTAyLCAxODkpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDE0MSwgMTI0LCAyMTcpJyxcbiAgICAgICAgJ3JnYigzMSwgMTIwLCAxNTApJ10sXG4gICAgJ21hZ2VudGEnOiBbJ3JnYigxNjIsMTA2LDE5MiknLCAncmdiKDE5NywxNjUsMjI0KScsICdyZ2IoMjA4LDExMywyMTgpJ10sXG4gICAgJ3JlZCc6IFsncmdiKDIxNCwzOSw0MCknLCAncmdiKDI1NSwxNTIsMTUwKSddLFxuICAgICdzdF9ibHVlJzogWydyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDE1OCwyMTgsMjI5KScsICdyZ2IoMzEsMTE5LDE4MCknXSxcbiAgICAnZGFya19ibHVlJzogWydyZ2IoMzEsMTE5LDE4MCknLCAncmdiKDMxLCAxMjAsIDE1MCknXSxcbiAgICAnbGlnaHRfYmx1ZSc6IFsncmdiKDIzLDE5MCwyMDcpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDEwOCwgMjE4LCAyMjkpJywgJ3JnYigyMywxOTAsMjI3KSddLFxuICAgICdsaWxhY19ibHVlJzogWydyZ2IoMTI0LDEwMiwyMTEpJywgJ3JnYigxNDksMTM0LDIxNyknLCAncmdiKDk3LCA4MSwgMTUwKSddLFxuICAgICdkYXJrX2dyZWVuJzogWydyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsICdyZ2IoMjQsMTEwLDc5KSddLFxuICAgICdncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDc0LDE2MCw3NCknXSxcbiAgICAnbGlnaHRfZ3JlZW4nOiBbJ3JnYigxNTIsMjIzLDEzOCknLCAncmdiKDE4MiwgMjIzLCAxMzgpJywgJ3JnYigxNTIsIDE5MywgMTM4KSddLFxuICAgICdzdF9ncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDE1MiwyMjMsMTM4KScsICdyZ2IoMzksIDE3NCwgOTYpJywgJ3JnYig3NCwxNjAsNzQpJ10sXG4gICAgJ3BpbmsnOiBbJ3JnYigyNDcsMTgyLDIxMCknXSxcbiAgICAnYnJvd24nOiBbJ3JnYigxNDAsODYsNzUpJywgJ3JnYigxMDIsIDYyLCA1NCknXSxcbiAgICAnZ3JheSc6IFsncmdiKDEyNywxMjcsMTI3KScsICdyZ2IoMTk5LDE5OSwxOTkpJywgJ3JnYigxOTYsMTU2LDE0OCknLCAncmdiKDIyMiwgMjIyLCAxODApJ10sXG4gICAgJ3llbGxvdyc6IFsncmdiKDE4OCwxODksMzQpJ10sXG4gICAgJ3doaXRlJzogWydyZ2IoMjMwLDIzMCwyMzApJ10sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWeExYQmhiR1YwZEdWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYzJWeExYQmhiR1YwZEdWekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRV2xDUVN4TlFVRk5MRTlCUVU4c1kwRkJZenRKUVRKRGVrSXNXVUZCV1N4UFFVRm5RenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVNeFFpeERRVUZETzBsQmJFSlRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQmQwSXNSVUZEYmtRc1ZVRkJWU3hIUVVGSExFdEJRVXNzUlVGQlJTeGpRVUZ4UXl4alFVRmpPMUZCUlhaRkxFMUJRVTBzVDBGQlR5eEhRVUU0UWl4RlFVRkZMRU5CUVVNN1VVRkRPVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRk8xbEJRMmhDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4wUWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tJc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSVHRuUWtGRE0wSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeFBRVUZQTEVsQlFVa3NWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZSVFN4SFFVRkhMRU5CUVVNc1EwRkJVenRSUVVOc1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE1VSXNRMEZCUXpzN1FVRm9SR0VzTmtKQlFXTXNSMEZCUnl4clFrRkJhMElzUTBGQlF6dEJRVVZzUkN3MFEwRkJORU03UVVGRE9VSXNORUpCUVdFc1IwRkJaME03U1VGRGVrUXNVVUZCVVN4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzYVVKQlFXbENMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTTdTVUZETVVZc1YwRkJWeXhGUVVGRkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTzFGQlEzQkhMR2RDUVVGblFpeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHOUNRVUZ2UWl4RlFVRkZMRzlDUVVGdlFpeERRVUZETzBsQlEyNUdMRlZCUVZVc1JVRkJSU3hEUVVGRExHbENRVUZwUWl4RlFVRkZMR2xDUVVGcFFpeEZRVUZGTEc5Q1FVRnZRaXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMRzlDUVVGdlFqdFJRVU12Unl4dFFrRkJiVUlzUTBGQlF6dEpRVU4wUWl4VFFVRlRMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1EwRkJRenRKUVVOMlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4blFrRkJaMElzUlVGQlJTeHJRa0ZCYTBJc1EwRkJRenRKUVVNM1F5eFRRVUZUTEVWQlFVVXNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXp0SlFVTnlSU3hYUVVGWExFVkJRVVVzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXp0SlFVTnlSQ3haUVVGWkxFVkJRVVVzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4dlFrRkJiMElzUlVGQlJTeHBRa0ZCYVVJc1EwRkJRenRKUVVNNVJpeFpRVUZaTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hyUWtGQmEwSXNRMEZCUXp0SlFVTXhSU3haUVVGWkxFVkJRVVVzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJRenRKUVVOMFJpeFBRVUZQTEVWQlFVVXNRMEZCUXl4blFrRkJaMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJRenRKUVVNM1F5eGhRVUZoTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3h2UWtGQmIwSXNRMEZCUXp0SlFVTXZSU3hWUVVGVkxFVkJRVVVzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJRenRKUVVONFJpeE5RVUZOTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlF6dEpRVU0xUWl4UFFVRlBMRVZCUVVVc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4clFrRkJhMElzUTBGQlF6dEpRVU12UXl4TlFVRk5MRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3h2UWtGQmIwSXNRMEZCUXp0SlFVTXhSaXhSUVVGUkxFVkJRVVVzUTBGQlF5eHBRa0ZCYVVJc1EwRkJRenRKUVVNM1FpeFBRVUZQTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlF6dERRVU01UWl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JUWlhGUVlXeGxkSFJsSUh0Y2JpQWdMeThnVkdobGNtVWdZWEpsSUhSdmJ5QnRkV05vSUhCeWIySnNaVzBnZDJsMGFDQnBibVJsZUdWeUlIQnliM0JsY25SNUlHbHVJSFI1Y0dWelkzSnBjSFF1WEc0Z0lDOHZJQzhxS2x4dUlDQXZMeUFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYlNCTmIyNXZiV1Z5SUdOb1lYSmhZM1JsY2x4dUlDQXZMeUFnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUVOdmJHOXlYRzRnSUM4dklDQXFMMXh1SUNBdkx5QmJiVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5PMXh1SUNBdktpb2dUVzl1YjIxbGNpQmpiMnh2Y2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiU0JOYjI1dmJXVnlYRzRnSUNBcUwxeHVJQ0JuWlhRb2JUb2djM1J5YVc1bktUb2djM1J5YVc1bk8xeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdVMlZ4VUdGc1pYUjBaVUpoYzJVZ2FXMXdiR1Z0Wlc1MGN5QlRaWEZRWVd4bGRIUmxJSHRjYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUIxYm1SbFptbHVaV1JEYjJ4dmNpQTlJQ2R5WjJJb01UQXdMREV3TUN3eE1EQXBKenRjYmx4dUlDQXZLaW9nVUdGc1pYUjBaU0IzYVhSb0lITm9ZV1JsY3lCdlppQndjbWx0WVhKNUlHTnZiRzl5Y3lBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHTnZiRzkxY2xCaGJHVjBkR1U2SUhzZ1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTBnZlNBOUlIdGNiaUFnSUNBbmIzSmhibWRsSnpvZ1d5ZHlaMklvTWpVMUxERTROeXd4TWpBcEp5d2dKM0puWWlneU5EVXNNVFkzTERFd01Da25MQ0FuY21kaUtESXpOU3d4TXpjc056QXBKeXdnSjNKbllpZ3lNRFVzSURFeE1Td2dOekVwSjEwc1hHNGdJQ0FnSjJGc2JGOW5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RjMExERTJNQ3czTkNrbkxDQW5jbWRpS0RJekxERXdNeXcxTnlrbkxDQW5jbWRpS0RNd0xERXhNQ3c1TmlrbkxDQW5jbWRpS0RZd0xERXpNU3c1TlNrbkxGeHVJQ0FnSUNBZ0ozSm5ZaWd5TkN3eE1UQXNOemtwSnl3Z0ozSm5ZaWd4TlRJc01qSXpMREV6T0NrbkxDQW5jbWRpS0RFNE1pd2dNakl6TENBeE16Z3BKeXdnSjNKbllpZ3hOVElzSURFNU15d2dNVE00S1NkZExGeHVJQ0FnSUNkaGJHeGZZbXgxWlNjNklGc25jbWRpS0RNeExERXhPU3d4T0RBcEp5d2dKM0puWWlneU15d3hPVEFzTWpBM0tTY3NJQ2R5WjJJb01USXlMQ0F4TURJc0lERTRPU2tuTENBbmNtZGlLREUxT0N3eU1UZ3NNakk1S1Njc0lDZHlaMklvTVRReExDQXhNalFzSURJeE55a25MRnh1SUNBZ0lDQWdKM0puWWlnek1Td2dNVEl3TENBeE5UQXBKMTBzWEc0Z0lDQWdKMjFoWjJWdWRHRW5PaUJiSjNKbllpZ3hOaklzTVRBMkxERTVNaWtuTENBbmNtZGlLREU1Tnl3eE5qVXNNakkwS1Njc0lDZHlaMklvTWpBNExERXhNeXd5TVRncEoxMHNYRzRnSUNBZ0ozSmxaQ2M2SUZzbmNtZGlLREl4TkN3ek9TdzBNQ2tuTENBbmNtZGlLREkxTlN3eE5USXNNVFV3S1NkZExGeHVJQ0FnSUNkemRGOWliSFZsSnpvZ1d5ZHlaMklvTWpNc01Ua3dMREl3TnlrbkxDQW5jbWRpS0RFMU9Dd3lNVGdzTWpJNUtTY3NJQ2R5WjJJb016RXNNVEU1TERFNE1Da25YU3hjYmlBZ0lDQW5aR0Z5YTE5aWJIVmxKem9nV3lkeVoySW9NekVzTVRFNUxERTRNQ2tuTENBbmNtZGlLRE14TENBeE1qQXNJREUxTUNrblhTeGNiaUFnSUNBbmJHbG5hSFJmWW14MVpTYzZJRnNuY21kaUtESXpMREU1TUN3eU1EY3BKeXdnSjNKbllpZ3hOVGdzTWpFNExESXlPU2tuTENBbmNtZGlLREV3T0N3Z01qRTRMQ0F5TWprcEp5d2dKM0puWWlneU15d3hPVEFzTWpJM0tTZGRMRnh1SUNBZ0lDZHNhV3hoWTE5aWJIVmxKem9nV3lkeVoySW9NVEkwTERFd01pd3lNVEVwSnl3Z0ozSm5ZaWd4TkRrc01UTTBMREl4TnlrbkxDQW5jbWRpS0RrM0xDQTRNU3dnTVRVd0tTZGRMRnh1SUNBZ0lDZGtZWEpyWDJkeVpXVnVKem9nV3lkeVoySW9Nak1zTVRBekxEVTNLU2NzSUNkeVoySW9NekFzTVRFd0xEazJLU2NzSUNkeVoySW9OakFzTVRNeExEazFLU2NzSUNkeVoySW9NalFzTVRFd0xEYzVLU2RkTEZ4dUlDQWdJQ2RuY21WbGJpYzZJRnNuY21kaUtEUTBMREUyTUN3ME5Da25MQ0FuY21kaUtEYzBMREUyTUN3M05Da25YU3hjYmlBZ0lDQW5iR2xuYUhSZlozSmxaVzRuT2lCYkozSm5ZaWd4TlRJc01qSXpMREV6T0NrbkxDQW5jbWRpS0RFNE1pd2dNakl6TENBeE16Z3BKeXdnSjNKbllpZ3hOVElzSURFNU15d2dNVE00S1NkZExGeHVJQ0FnSUNkemRGOW5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RFMU1pd3lNak1zTVRNNEtTY3NJQ2R5WjJJb016a3NJREUzTkN3Z09UWXBKeXdnSjNKbllpZzNOQ3d4TmpBc056UXBKMTBzWEc0Z0lDQWdKM0JwYm1zbk9pQmJKM0puWWlneU5EY3NNVGd5TERJeE1Da25YU3hjYmlBZ0lDQW5Zbkp2ZDI0bk9pQmJKM0puWWlneE5EQXNPRFlzTnpVcEp5d2dKM0puWWlneE1ESXNJRFl5TENBMU5Da25YU3hjYmlBZ0lDQW5aM0poZVNjNklGc25jbWRpS0RFeU55d3hNamNzTVRJM0tTY3NJQ2R5WjJJb01UazVMREU1T1N3eE9Ua3BKeXdnSjNKbllpZ3hPVFlzTVRVMkxERTBPQ2tuTENBbmNtZGlLREl5TWl3Z01qSXlMQ0F4T0RBcEoxMHNYRzRnSUNBZ0ozbGxiR3h2ZHljNklGc25jbWRpS0RFNE9Dd3hPRGtzTXpRcEoxMHNYRzRnSUNBZ0ozZG9hWFJsSnpvZ1d5ZHlaMklvTWpNd0xESXpNQ3d5TXpBcEoxMHNYRzRnSUgwN1hHNWNiaUFnY0hKdmRHVmpkR1ZrSUhOMFlYUnBZeUJ0WVd0bFVHRnNaWFIwWlNoa2REb2dXM04wY21sdVoxdGRMQ0J6ZEhKcGJtZGRXMTBzWEc0Z0lDQWdjMmx0Y0d4cFptbGxaQ0E5SUdaaGJITmxMQ0JRWVd4bGRIUmxWSGx3WlRvZ2RIbHdaVzltSUZObGNWQmhiR1YwZEdWQ1lYTmxJRDBnVTJWeFVHRnNaWFIwWlVKaGMyVmNiaUFnS1NCN1hHNGdJQ0FnWTI5dWMzUWdjR0ZzWlhSMFpUb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQnpkSEpwYm1jZ2ZTQTlJSHQ5TzF4dUlDQWdJR1IwTG1admNrVmhZMmdvS0dOd0tTQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnZZbXBNYVhOMElEMGdZM0JiTUYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJ4dmRYSWdQU0JqY0ZzeFhUdGNiaUFnSUNBZ0lHOWlha3hwYzNRdVptOXlSV0ZqYUNnb2IySnFMQ0JwYm1RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnY0dGc1pYUjBaVnR2WW1wZElEMGdkR2hwY3k1amIyeHZkWEpRWVd4bGRIUmxXMk52Ykc5MWNsMWJjMmx0Y0d4cFptbGxaQ0EvSURBZ09pQnBibVJkTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUVlXeGxkSFJsVkhsd1pTaHdZV3hsZEhSbEtUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2dYM0JoYkdWMGRHVTZJSHNnVzIwNklITjBjbWx1WjEwNklITjBjbWx1WnlCOU8xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhiR1YwZEdVNklIc2dXMjA2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5S1NCN1hHNGdJQ0FnZEdocGN5NWZjR0ZzWlhSMFpTQTlJSEJoYkdWMGRHVTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzQmhiR1YwZEdWYmJWMDdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmNsYXNzIFNpZGVDaGFpblNjYWxlcyB7XG4gICAgc3RhdGljIGdldEF2YWlsYWJsZVNjYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NhbGVzKS5tYXAoKFtrLCBfXSkgPT4gayk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTY2FsZShuYW1lKSB7XG4gICAgICAgIGFzc2VydCghKHRoaXMuc2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQpLCBgU2NhbGUgJyR7bmFtZX0nIHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNjYWxlc1tuYW1lXTtcbiAgICB9XG59XG5TaWRlQ2hhaW5TY2FsZXMuc2NhbGVzID0ge1xuICAgIC8vIFdpbWxleS1XaGl0ZSBpbnRlcmZhY2lhbCBoeWRyb3Bob2JpY2l0eSBzY2FsZVxuICAgICdXaW1sZXlXaGl0ZSc6IHtcbiAgICAgICAgJy0nOiAwLFxuICAgICAgICAnQSc6IDAuMTcsXG4gICAgICAgICdDJzogLTAuMjQsXG4gICAgICAgICdEJzogLTAuMDcsXG4gICAgICAgICdFJzogLTAuMDEsXG4gICAgICAgICdGJzogLTEuMTMsXG4gICAgICAgICdHJzogMC4wMSxcbiAgICAgICAgJ0gnOiAwLjE3LFxuICAgICAgICAnSSc6IC0wLjMxLFxuICAgICAgICAnSyc6IDAuOTksXG4gICAgICAgICdMJzogLTAuNTYsXG4gICAgICAgICdNJzogLTAuMjMsXG4gICAgICAgICdOJzogMC40MixcbiAgICAgICAgJ1AnOiAwLjQ1LFxuICAgICAgICAnUSc6IDAuNTgsXG4gICAgICAgICdSJzogMC44MSxcbiAgICAgICAgJ1MnOiAwLjEzLFxuICAgICAgICAnVCc6IDAuMTQsXG4gICAgICAgICdWJzogMC4wNyxcbiAgICAgICAgJ1cnOiAtMS44NSxcbiAgICAgICAgJ1knOiAtMC45NCxcbiAgICB9LFxuICAgICdjYXRlZ29yaWFsJzoge1xuICAgICAgICAnLSc6IDAsXG4gICAgICAgICdBJzogMSxcbiAgICAgICAgJ0MnOiAyLFxuICAgICAgICAnRCc6IDMsXG4gICAgICAgICdFJzogNCxcbiAgICAgICAgJ0YnOiA1LFxuICAgICAgICAnRyc6IDYsXG4gICAgICAgICdIJzogNyxcbiAgICAgICAgJ0knOiA4LFxuICAgICAgICAnSyc6IDksXG4gICAgICAgICdMJzogMTAsXG4gICAgICAgICdNJzogMTEsXG4gICAgICAgICdOJzogMTIsXG4gICAgICAgICdQJzogMTMsXG4gICAgICAgICdRJzogMTQsXG4gICAgICAgICdSJzogMTUsXG4gICAgICAgICdTJzogMTYsXG4gICAgICAgICdUJzogMTcsXG4gICAgICAgICdWJzogMTgsXG4gICAgICAgICdXJzogMTksXG4gICAgICAgICdZJzogMjAsXG4gICAgfSxcbn07XG4vKipcbiAqIENsYXNzIHRvIGNhdGVnb3JpYWwgZW5jb2RlL2RlY29kZSBhbGlnbmVkIGFtaW5vIGFjaWQgcmVzaWR1ZXMgc2VxdWVuY2UuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXIge1xuICAgIGNvbnN0cnVjdG9yKHNjYWxlID0gJ2NhdGVnb3JpYWwnKSB7XG4gICAgICAgIHRoaXMuYWEybnVtID0gU2lkZUNoYWluU2NhbGVzLmdldFNjYWxlKHNjYWxlKTtcbiAgICAgICAgdGhpcy5udW0yYWEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5hYTJudW0pLmZvckVhY2goKFtrLCB2XSkgPT4gKHRoaXMubnVtMmFhW3ZdID0gaykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgICAqIFRydW5jYXRlIE5IMiBhbmQgLUNPT0ggdGVybWluYWxzIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSBwcm92aWRlZC5cbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVHJ1bmNhdGVkIHNlcXVlbmNlLlxuICAgICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgICAqL1xuICAgIHN0YXRpYyBfdHJ1bmNhdGVTZXF1ZW5jZShzZXEpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgbGV0IGVuZCA9IHNlcS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRlcm1pbmEgPSBbJ05IMicsICdDT09IJ107XG4gICAgICAgIGlmIChzZXEuc3RhcnRzV2l0aCh0ZXJtaW5hWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMF0ubGVuZ3RoOyAvLyBDdXQgb25seSAnTkgyJyB3aXRob3V0IGZvbGxvd2luZyAnLScuXG4gICAgICAgICAgICBhc3NlcnQoc2VxW2xdID09ICctJywgYFdyb25nIHNlcXVlbmNlIGZvcm1hdDogJHt0ZXJtaW5hWzBdfSB3aXRob3V0IGZvbGxvd2luZyAnLScgaW4gJyR7c2VxfScuYCk7XG4gICAgICAgICAgICBzdGFydCA9IGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcS5lbmRzV2l0aCh0ZXJtaW5hWzFdKSkge1xuICAgICAgICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMV0ubGVuZ3RoICsgMTsgLy8gQ3V0IGJvdGggJ0NPT0gnIGFuZCBwcmVjZW5kaW5nICctJy5cbiAgICAgICAgICAgIGFzc2VydChzZXFbZW5kIC0gbF0gPT0gJy0nLCBgV3Jvbmcgc2VxdWVuY2UgZm9ybWF0OiAke3Rlcm1pbmFbMV19IHdpdGhvdXQgJy0nIHByZWNlbmRpbmcgaW4gJyR7c2VxfScuYCk7XG4gICAgICAgICAgICBlbmQgLT0gbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VxLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICAgKiBDdXRzIGF1eGlsaWFyeSBkZWZpc2VzIGJlZm9yZSBhIHJlc2lkdWUuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcSBUaGUgc2VxdWVuY2UgdG8gcHJvY2Vzcy5cbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gUHJvY2Vzc2VkIHNlcXVlbmNlLlxuICAgICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgICAqL1xuICAgIHN0YXRpYyBfZHJvcERlZmlzZXMoc2VxKSB7XG4gICAgICAgIHJldHVybiBzZXEucmVwbGFjZSgvKC0pKFteLV0rKS9nLCAnJDInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICAgKiBQZXJmb3JtcyB0cnVuY2F0aW9uIGFuZCBjdXR0aW5nIGF1eGlsaWFyeSBkZWZpc2VzLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXF1ZW5jZSBUaGUgc2VxdWVuY2Ugd29yayB1bmRlciBwcm9jZXNzLlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgb2YgY2xlYW5pbmcuXG4gICAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICAgICAgICovXG4gICAgc3RhdGljIGNsZWFuKHNlcXVlbmNlKSB7XG4gICAgICAgIHJldHVybiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl9kcm9wRGVmaXNlcyhBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl90cnVuY2F0ZVNlcXVlbmNlKHNlcXVlbmNlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAgICogQ2F0ZWdvcmlhbCBlbmNvZGUgb2YgdGhlIHNlcXVlbmNlIHByb3ZpZGVkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXF1ZW5jZSBUaGUgc2VxdWVuY2UuXG4gICAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gRW5jb2RlZCB2ZWN0b3IuXG4gICAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICAgICAgICovXG4gICAgZW5jb2RlKHNlcXVlbmNlKSB7XG4gICAgICAgIGNvbnN0IG5JdGVtcyA9IHNlcXVlbmNlLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gbmV3IEFycmF5KG5JdGVtcykuZmlsbCgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHNlcXVlbmNlW2ldO1xuICAgICAgICAgICAgYXNzZXJ0KGNoYXIgaW4gdGhpcy5hYTJudW0sIGBVbmtub3duIGNoYXIgJyR7Y2hhcn0nIGZvdW5kIGluIHNlcXVlbmNlICcke3NlcXVlbmNlfSdgKTtcbiAgICAgICAgICAgIHZhbHVlc1tpXSA9IHRoaXMuZW5jb2RlTGV0dHRlcihjaGFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiAgICBlbmNvZGVMZXR0dGVyKGxldHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hYTJudW1bbGV0dGVyXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICAgKiBEZWNvZGUgdGhlIGVuY29kZWQgdmVjdG9yIGludG8gdGhlIHNlcXVlbmNlIGJhY2suXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtudW1iZXJbXX0gdmFsdWUgVGhlIHZlY3RvciBlbmNvZGVkLlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBEZWNvZGVkIHNlcXVlbmNlLlxuICAgICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgICAqL1xuICAgIGRlY29kZSh2YWx1ZSkge1xuICAgICAgICBsZXQgcyA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdmFsdWVbaV07XG4gICAgICAgICAgICBhc3NlcnQoY29kZSBpbiB0aGlzLm51bTJhYSwgYFVua25vd24gY29kZSAnJHtjb2RlfScgZm91bmQgaW4gdmVjdG9yICcke3ZhbHVlfSdgKTtcbiAgICAgICAgICAgIHMgKz0gdGhpcy5udW0yYWFbY29kZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWeGRXVnVZMlV0Wlc1amIyUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluTmxjWFZsYm1ObExXVnVZMjlrWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eEZRVUZETEUxQlFVMHNSVUZCUXl4TlFVRk5MR2xFUVVGcFJDeERRVUZETzBGQlMzWkZMRTFCUVUwc1pVRkJaVHRKUVcxRWJrSXNUVUZCVFN4RFFVRkRMR3RDUVVGclFqdFJRVU4yUWl4UFFVRlBMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UkN4RFFVRkRPMGxCUlVRc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZaTzFGQlF6RkNMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhUUVVGVExFTkJRVU1zUlVGQlJTeFZRVUZWTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dFJRVU0zUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETTBJc1EwRkJRenM3UVVGNlJFMHNjMEpCUVUwc1IwRkJOa0k3U1VGRGVFTXNaMFJCUVdkRU8wbEJRMmhFTEdGQlFXRXNSVUZCUlR0UlFVTmlMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMDRzUjBGQlJ5eEZRVUZGTEVsQlFVazdVVUZEVkN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSk8xRkJRMVlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1R0UlFVTldMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRFZpeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpPMUZCUTFZc1IwRkJSeXhGUVVGRkxFbEJRVWs3VVVGRFZDeEhRVUZITEVWQlFVVXNTVUZCU1R0UlFVTlVMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRFZpeEhRVUZITEVWQlFVVXNTVUZCU1R0UlFVTlVMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRFZpeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpPMUZCUTFZc1IwRkJSeXhGUVVGRkxFbEJRVWs3VVVGRFZDeEhRVUZITEVWQlFVVXNTVUZCU1R0UlFVTlVMRWRCUVVjc1JVRkJSU3hKUVVGSk8xRkJRMVFzUjBGQlJ5eEZRVUZGTEVsQlFVazdVVUZEVkN4SFFVRkhMRVZCUVVVc1NVRkJTVHRSUVVOVUxFZEJRVWNzUlVGQlJTeEpRVUZKTzFGQlExUXNSMEZCUnl4RlFVRkZMRWxCUVVrN1VVRkRWQ3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTzFGQlExWXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTVHRMUVVOWU8wbEJRMFFzV1VGQldTeEZRVUZGTzFGQlExb3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRUaXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5PTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTA0c1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRFRpeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTk9MRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMDRzUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZEVGl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOT0xFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEwNHNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRUaXhIUVVGSExFVkJRVVVzUlVGQlJUdFJRVU5RTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1IwRkJSeXhGUVVGRkxFVkJRVVU3VVVGRFVDeEhRVUZITEVWQlFVVXNSVUZCUlR0UlFVTlFMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRMUFzUjBGQlJ5eEZRVUZGTEVWQlFVVTdVVUZEVUN4SFFVRkhMRVZCUVVVc1JVRkJSVHRSUVVOUUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNSMEZCUnl4RlFVRkZMRVZCUVVVN1VVRkRVQ3hIUVVGSExFVkJRVVVzUlVGQlJUdFJRVU5RTEVkQlFVY3NSVUZCUlN4RlFVRkZPMHRCUTFJN1EwRkRSaXhEUVVGRE8wRkJXVW83T3pzN08wZEJTMGM3UVVGRFNDeE5RVUZOTEU5QlFVOHNjMEpCUVhOQ08wbEJTV3BETEZsQlFWa3NVVUZCWjBJc1dVRkJXVHRSUVVOMFF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZET1VNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZEYWtJc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaEZMRU5CUVVNN1NVRkZSRHM3T3pzN096dFRRVTlMTzBsQlEwd3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVkQlFWYzdVVUZEYkVNc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU55UWl4TlFVRk5MRTlCUVU4c1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3V1VGRE9VSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMSGREUVVGM1F6dFpRVU55UlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN3d1FrRkJNRUlzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl3NFFrRkJPRUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTnFSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlExZzdVVUZEUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkROVUlzVFVGQlRTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4elEwRkJjME03V1VGRGNrVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMREJDUVVFd1FpeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMQ3RDUVVFclFpeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTNSSExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEVmp0UlFVTkVMRTlCUVU4c1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRia01zUTBGQlF6dEpRVVZFT3pzN096czdPMU5CVDBzN1NVRkRUQ3hOUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFWYzdVVUZETjBJc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNeFF5eERRVUZETzBsQlJVUTdPenM3T3pzN1UwRlBTenRKUVVOTUxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCWjBJN1VVRkRNMElzVDBGQlR5eHpRa0ZCYzBJc1EwRkJReXhaUVVGWkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOcVJ5eERRVUZETzBsQlJVUTdPenM3T3p0VFFVMUxPMGxCUTBVc1RVRkJUU3hEUVVGRExGRkJRV2RDTzFGQlF6VkNMRTFCUVUwc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZETDBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYcERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGREwwSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJYcENMRTFCUVUwc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4cFFrRkJhVUlzU1VGQlNTeDNRa0ZCZDBJc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVVYwUml4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOMFF6dFJRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlRTeGhRVUZoTEVOQlFVTXNUVUZCWXp0UlFVTnFReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkROMElzUTBGQlF6dEpRVVZFT3pzN096czdVMEZOU3p0SlFVTkZMRTFCUVUwc1EwRkJReXhMUVVGbE8xRkJRek5DTEVsQlFVa3NRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJRenRSUVVWdVFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOeVF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRmRFSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEdsQ1FVRnBRaXhKUVVGSkxITkNRVUZ6UWl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSV3BHTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEzaENPMUZCUTBRc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRFdDeERRVUZETzBOQlEwWWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMkZ6YzJWeWRIMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTW5PMXh1WEc1MGVYQmxJRk5wWkdWRGFHRnBibE5qWVd4bElEMGdlMXR1WVcxbE9pQnpkSEpwYm1kZE9pQnVkVzFpWlhKOU8xeHVkSGx3WlNCVGFXUmxRMmhoYVc1VFkyRnNaVU52Ykd4bFkzUnBiMjRnUFNCN1cyNWhiV1U2SUhOMGNtbHVaMTA2SUZOcFpHVkRhR0ZwYmxOallXeGxmVHRjYmx4dVkyeGhjM01nVTJsa1pVTm9ZV2x1VTJOaGJHVnpJSHRjYmlBZ2MzUmhkR2xqSUhOallXeGxjem9nVTJsa1pVTm9ZV2x1VTJOaGJHVkRiMnhzWldOMGFXOXVJRDBnZTF4dUlDQWdJQzh2SUZkcGJXeGxlUzFYYUdsMFpTQnBiblJsY21aaFkybGhiQ0JvZVdSeWIzQm9iMkpwWTJsMGVTQnpZMkZzWlZ4dUlDQWdJQ2RYYVcxc1pYbFhhR2wwWlNjNklIdGNiaUFnSUNBZ0lDY3RKem9nTUN4Y2JpQWdJQ0FnSUNkQkp6b2dNQzR4Tnl4Y2JpQWdJQ0FnSUNkREp6b2dMVEF1TWpRc1hHNGdJQ0FnSUNBblJDYzZJQzB3TGpBM0xDQXZMeUJCYzNBdE9pQXhMakl6WEc0Z0lDQWdJQ0FuUlNjNklDMHdMakF4TENBdkx5QkhiSFV0T2lBeUxqQXlYRzRnSUNBZ0lDQW5SaWM2SUMweExqRXpMQ0F2TDF4dUlDQWdJQ0FnSjBjbk9pQXdMakF4TEZ4dUlDQWdJQ0FnSjBnbk9pQXdMakUzTENBdkx5QklhWE1yT2lBd0xqazJYRzRnSUNBZ0lDQW5TU2M2SUMwd0xqTXhMRnh1SUNBZ0lDQWdKMHNuT2lBd0xqazVMQ0F2THlCTWVYTXJYRzRnSUNBZ0lDQW5UQ2M2SUMwd0xqVTJMRnh1SUNBZ0lDQWdKMDBuT2lBdE1DNHlNeXhjYmlBZ0lDQWdJQ2RPSnpvZ01DNDBNaXhjYmlBZ0lDQWdJQ2RRSnpvZ01DNDBOU3hjYmlBZ0lDQWdJQ2RSSnpvZ01DNDFPQ3hjYmlBZ0lDQWdJQ2RTSnpvZ01DNDRNU3dnTHk4Z1FYSm5LMXh1SUNBZ0lDQWdKMU1uT2lBd0xqRXpMRnh1SUNBZ0lDQWdKMVFuT2lBd0xqRTBMRnh1SUNBZ0lDQWdKMVluT2lBd0xqQTNMRnh1SUNBZ0lDQWdKMWNuT2lBdE1TNDROU3hjYmlBZ0lDQWdJQ2RaSnpvZ0xUQXVPVFFzWEc0Z0lDQWdmU3hjYmlBZ0lDQW5ZMkYwWldkdmNtbGhiQ2M2SUh0Y2JpQWdJQ0FnSUNjdEp6b2dNQ3hjYmlBZ0lDQWdJQ2RCSnpvZ01TeGNiaUFnSUNBZ0lDZERKem9nTWl4Y2JpQWdJQ0FnSUNkRUp6b2dNeXhjYmlBZ0lDQWdJQ2RGSnpvZ05DeGNiaUFnSUNBZ0lDZEdKem9nTlN4Y2JpQWdJQ0FnSUNkSEp6b2dOaXhjYmlBZ0lDQWdJQ2RJSnpvZ055eGNiaUFnSUNBZ0lDZEpKem9nT0N4Y2JpQWdJQ0FnSUNkTEp6b2dPU3hjYmlBZ0lDQWdJQ2RNSnpvZ01UQXNYRzRnSUNBZ0lDQW5UU2M2SURFeExGeHVJQ0FnSUNBZ0owNG5PaUF4TWl4Y2JpQWdJQ0FnSUNkUUp6b2dNVE1zWEc0Z0lDQWdJQ0FuVVNjNklERTBMRnh1SUNBZ0lDQWdKMUluT2lBeE5TeGNiaUFnSUNBZ0lDZFRKem9nTVRZc1hHNGdJQ0FnSUNBblZDYzZJREUzTEZ4dUlDQWdJQ0FnSjFZbk9pQXhPQ3hjYmlBZ0lDQWdJQ2RYSnpvZ01Ua3NYRzRnSUNBZ0lDQW5XU2M2SURJd0xGeHVJQ0FnSUgwc1hHNGdJSDA3WEc1Y2JpQWdjM1JoZEdsaklHZGxkRUYyWVdsc1lXSnNaVk5qWVd4bGN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0hSb2FYTXVjMk5oYkdWektTNXRZWEFvS0Z0ckxDQmZYU2tnUFQ0Z2F5azdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdaMlYwVTJOaGJHVW9ibUZ0WlRvZ2MzUnlhVzVuS1RvZ1UybGtaVU5vWVdsdVUyTmhiR1VnZTF4dUlDQWdJR0Z6YzJWeWRDZ2hLSFJvYVhNdWMyTmhiR1Z6VzI1aGJXVmRJRDA5UFNCMWJtUmxabWx1WldRcExDQmdVMk5oYkdVZ0p5UjdibUZ0WlgwbklIZGhjeUJ1YjNRZ1ptOTFibVF1WUNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWMyTmhiR1Z6VzI1aGJXVmRPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUTJ4aGMzTWdkRzhnWTJGMFpXZHZjbWxoYkNCbGJtTnZaR1V2WkdWamIyUmxJR0ZzYVdkdVpXUWdZVzFwYm04Z1lXTnBaQ0J5WlhOcFpIVmxjeUJ6WlhGMVpXNWpaUzVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQVkyeGhjM01nUVd4cFoyNWxaRk5sY1hWbGJtTmxSVzVqYjJSbGNseHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdRV3hwWjI1bFpGTmxjWFZsYm1ObFJXNWpiMlJsY2lCN1hHNGdJSEJ5YjNSbFkzUmxaQ0JoWVRKdWRXMDZJRk5wWkdWRGFHRnBibE5qWVd4bE8xeHVJQ0J3Y205MFpXTjBaV1FnYm5WdE1tRmhPaUI3VzJOdlpHVTZJRzUxYldKbGNsMDZJSE4wY21sdVozMDdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9jMk5oYkdVNklITjBjbWx1WnlBOUlDZGpZWFJsWjI5eWFXRnNKeWtnZTF4dUlDQWdJSFJvYVhNdVlXRXliblZ0SUQwZ1UybGtaVU5vWVdsdVUyTmhiR1Z6TG1kbGRGTmpZV3hsS0hOallXeGxLVHRjYmlBZ0lDQjBhR2x6TG01MWJUSmhZU0E5SUh0OU8xeHVJQ0FnSUU5aWFtVmpkQzVsYm5SeWFXVnpLSFJvYVhNdVlXRXliblZ0S1M1bWIzSkZZV05vS0NoYmF5d2dkbDBwSUQwK0lDaDBhR2x6TG01MWJUSmhZVnQyWFNBOUlHc3BLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnSUNBcUlGUnlkVzVqWVhSbElFNUlNaUJoYm1RZ0xVTlBUMGdnZEdWeWJXbHVZV3h6SUc5bUlIUm9aU0JuYVhabGJpQnpaWEYxWlc1alpTNWNiaUFnSUNBZ0tseHVJQ0FnSUNBcUlFQnpkR0YwYVdOY2JpQWdJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYzJWeElGUm9aU0J6WlhGMVpXNWpaU0J3Y205MmFXUmxaQzVjYmlBZ0lDQWdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRlJ5ZFc1allYUmxaQ0J6WlhGMVpXNWpaUzVjYmlBZ0lDQWdLaUJBYldWdFltVnliMllnUVd4cFoyNWxaRk5sY1hWbGJtTmxSVzVqYjJSbGNseHVJQ0FnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdYM1J5ZFc1allYUmxVMlZ4ZFdWdVkyVW9jMlZ4T2lCemRISnBibWNwT2lCemRISnBibWNnZTF4dUlDQWdJR3hsZENCemRHRnlkQ0E5SURBN1hHNGdJQ0FnYkdWMElHVnVaQ0E5SUhObGNTNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdkR1Z5YldsdVlTQTlJRnNuVGtneUp5d2dKME5QVDBnblhUdGNibHh1SUNBZ0lHbG1JQ2h6WlhFdWMzUmhjblJ6VjJsMGFDaDBaWEp0YVc1aFd6QmRLU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdiQ0E5SUhSbGNtMXBibUZiTUYwdWJHVnVaM1JvT3lBdkx5QkRkWFFnYjI1c2VTQW5Ua2d5SnlCM2FYUm9iM1YwSUdadmJHeHZkMmx1WnlBbkxTY3VYRzRnSUNBZ0lDQmhjM05sY25Rb2MyVnhXMnhkSUQwOUlDY3RKeXdnWUZkeWIyNW5JSE5sY1hWbGJtTmxJR1p2Y20xaGREb2dKSHQwWlhKdGFXNWhXekJkZlNCM2FYUm9iM1YwSUdadmJHeHZkMmx1WnlBbkxTY2dhVzRnSnlSN2MyVnhmU2N1WUNrN1hHNGdJQ0FnSUNCemRHRnlkQ0E5SUd3N1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoelpYRXVaVzVrYzFkcGRHZ29kR1Z5YldsdVlWc3hYU2twSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR3dnUFNCMFpYSnRhVzVoV3pGZExteGxibWQwYUNzeE95QXZMeUJEZFhRZ1ltOTBhQ0FuUTA5UFNDY2dZVzVrSUhCeVpXTmxibVJwYm1jZ0p5MG5MbHh1SUNBZ0lDQWdZWE56WlhKMEtITmxjVnRsYm1RdGJGMGdQVDBnSnkwbkxDQmdWM0p2Ym1jZ2MyVnhkV1Z1WTJVZ1ptOXliV0YwT2lBa2UzUmxjbTFwYm1GYk1WMTlJSGRwZEdodmRYUWdKeTBuSUhCeVpXTmxibVJwYm1jZ2FXNGdKeVI3YzJWeGZTY3VZQ2s3WEc0Z0lDQWdJQ0JsYm1RZ0xUMGdiRHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhObGNTNXpkV0p6ZEhKcGJtY29jM1JoY25Rc0lHVnVaQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNBZ0tpQkRkWFJ6SUdGMWVHbHNhV0Z5ZVNCa1pXWnBjMlZ6SUdKbFptOXlaU0JoSUhKbGMybGtkV1V1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJBYzNSaGRHbGpYRzRnSUNBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlITmxjU0JVYUdVZ2MyVnhkV1Z1WTJVZ2RHOGdjSEp2WTJWemN5NWNiaUFnSUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlGQnliMk5sYzNObFpDQnpaWEYxWlc1alpTNWNiaUFnSUNBZ0tpQkFiV1Z0WW1WeWIyWWdRV3hwWjI1bFpGTmxjWFZsYm1ObFJXNWpiMlJsY2x4dUlDQWdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1gyUnliM0JFWldacGMyVnpLSE5sY1RvZ2MzUnlhVzVuS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ4TG5KbGNHeGhZMlVvTHlndEtTaGJYaTFkS3lrdlp5d2dKeVF5SnlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDQWdLaUJRWlhKbWIzSnRjeUIwY25WdVkyRjBhVzl1SUdGdVpDQmpkWFIwYVc1bklHRjFlR2xzYVdGeWVTQmtaV1pwYzJWekxseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FITjBZWFJwWTF4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J6WlhGMVpXNWpaU0JVYUdVZ2MyVnhkV1Z1WTJVZ2QyOXlheUIxYm1SbGNpQndjbTlqWlhOekxseHVJQ0FnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1VtVnpkV3gwSUc5bUlHTnNaV0Z1YVc1bkxseHVJQ0FnSUNBcUlFQnRaVzFpWlhKdlppQkJiR2xuYm1Wa1UyVnhkV1Z1WTJWRmJtTnZaR1Z5WEc0Z0lDQWdJQ292WEc0Z0lITjBZWFJwWXlCamJHVmhiaWh6WlhGMVpXNWpaVG9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQnlaWFIxY200Z1FXeHBaMjVsWkZObGNYVmxibU5sUlc1amIyUmxjaTVmWkhKdmNFUmxabWx6WlhNb1FXeHBaMjVsWkZObGNYVmxibU5sUlc1amIyUmxjaTVmZEhKMWJtTmhkR1ZUWlhGMVpXNWpaU2h6WlhGMVpXNWpaU2twTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBZ0lDb2dRMkYwWldkdmNtbGhiQ0JsYm1OdlpHVWdiMllnZEdobElITmxjWFZsYm1ObElIQnliM1pwWkdWa0xseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhObGNYVmxibU5sSUZSb1pTQnpaWEYxWlc1alpTNWNiaUFnSUNBZ0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKYlhYMGdSVzVqYjJSbFpDQjJaV04wYjNJdVhHNGdJQ0FnSUNvZ1FHMWxiV0psY205bUlFRnNhV2R1WldSVFpYRjFaVzVqWlVWdVkyOWtaWEpjYmlBZ0lDQWdLaTljYmlBZ2NIVmliR2xqSUdWdVkyOWtaU2h6WlhGMVpXNWpaVG9nYzNSeWFXNW5LVG9nYm5WdFltVnlXMTBnZTF4dUlDQWdJR052Ym5OMElHNUpkR1Z0Y3lBOUlITmxjWFZsYm1ObExteGxibWQwYUR0Y2JpQWdJQ0JqYjI1emRDQjJZV3gxWlhNZ1BTQnVaWGNnUVhKeVlYa29ia2wwWlcxektTNW1hV3hzS0RBcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVTWFJsYlhNN0lDc3JhU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdZMmhoY2lBOUlITmxjWFZsYm1ObFcybGRPMXh1WEc0Z0lDQWdJQ0JoYzNObGNuUW9ZMmhoY2lCcGJpQjBhR2x6TG1GaE1tNTFiU3dnWUZWdWEyNXZkMjRnWTJoaGNpQW5KSHRqYUdGeWZTY2dabTkxYm1RZ2FXNGdjMlZ4ZFdWdVkyVWdKeVI3YzJWeGRXVnVZMlY5SjJBcE8xeHVYRzRnSUNBZ0lDQjJZV3gxWlhOYmFWMGdQU0IwYUdsekxtVnVZMjlrWlV4bGRIUjBaWElvWTJoaGNpazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpYTTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaVzVqYjJSbFRHVjBkSFJsY2loc1pYUjBaWEk2SUhOMGNtbHVaeWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WVdFeWJuVnRXMnhsZEhSbGNsMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ0FnS2lCRVpXTnZaR1VnZEdobElHVnVZMjlrWldRZ2RtVmpkRzl5SUdsdWRHOGdkR2hsSUhObGNYVmxibU5sSUdKaFkyc3VYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2x0ZGZTQjJZV3gxWlNCVWFHVWdkbVZqZEc5eUlHVnVZMjlrWldRdVhHNGdJQ0FnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCRVpXTnZaR1ZrSUhObGNYVmxibU5sTGx4dUlDQWdJQ0FxSUVCdFpXMWlaWEp2WmlCQmJHbG5ibVZrVTJWeGRXVnVZMlZGYm1OdlpHVnlYRzRnSUNBZ0lDb3ZYRzRnSUhCMVlteHBZeUJrWldOdlpHVW9kbUZzZFdVNklHNTFiV0psY2x0ZEtUb2djM1J5YVc1bklIdGNiaUFnSUNCc1pYUWdjem9nYzNSeWFXNW5JRDBnSnljN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIWmhiSFZsTG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyUmxJRDBnZG1Gc2RXVmJhVjA3WEc1Y2JpQWdJQ0FnSUdGemMyVnlkQ2hqYjJSbElHbHVJSFJvYVhNdWJuVnRNbUZoTENCZ1ZXNXJibTkzYmlCamIyUmxJQ2NrZTJOdlpHVjlKeUJtYjNWdVpDQnBiaUIyWldOMGIzSWdKeVI3ZG1Gc2RXVjlKMkFwTzF4dVhHNGdJQ0FnSUNCeklDczlJSFJvYVhNdWJuVnRNbUZoVzJOdlpHVmRPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnY3p0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0IHsgQW1pbm9hY2lkc1BhbGV0dGVzIH0gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4uL3NlcS1wYWxldHRlcyc7XG5pbXBvcnQgeyBOdWNsZW90aWRlc1BhbGV0dGVzIH0gZnJvbSAnLi4vbnVjbGVvdGlkZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGFsZXR0ZU4oKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgY3BDaHJvbWF0b2dyYW0gPSBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbTtcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgcGFsZXR0ZXMgaW1wbGVtZW50IFNlcVBhbGV0dGUgaW50ZXJmYWNlXG4gICAgICAgIC8vIGV4cGVjdChjcENocm9tYXRvZ3JhbSBpbnN0YW5jZW9mIFNlcVBhbGV0dGUsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BDaHJvbWF0b2dyYW0gaW5zdGFuY2VvZiBTZXFQYWxldHRlQmFzZSwgdHJ1ZSk7XG4gICAgICAgIGV4cGVjdChjcENocm9tYXRvZ3JhbSBpbnN0YW5jZW9mIE51Y2xlb3RpZGVzUGFsZXR0ZXMsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGFsZXR0ZUFBKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNwTGVzdCA9IEFtaW5vYWNpZHNQYWxldHRlcy5MZXNrO1xuICAgICAgICBjb25zdCBjcFJhc01vbCA9IEFtaW5vYWNpZHNQYWxldHRlcy5SYXNNb2w7XG4gICAgICAgIGNvbnN0IGNwR3Jva0dyb3VwcyA9IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzO1xuICAgICAgICAvLyBUT0RPOiBDaGVjayBwYWxldHRlcyBpbXBsZW1lbnQgU2VxUGFsZXR0ZSBpbnRlcmZhY2VcbiAgICAgICAgLy8gZXhwZWN0KGNwTGVzdCBpbnN0YW5jZW9mIFNlcVBhbGV0dGUsIHRydWUpO1xuICAgICAgICAvLyBleHBlY3QoY3BSYXNNb2wgaW5zdGFuY2VvZiBTZXFQYWxldHRlLCB0cnVlKTtcbiAgICAgICAgLy8gZXhwZWN0KGNwR3Jva0dyb3VwcyBpbnN0YW5jZW9mIFNlcVBhbGV0dGUsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BMZXN0IGluc3RhbmNlb2YgU2VxUGFsZXR0ZUJhc2UsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BSYXNNb2wgaW5zdGFuY2VvZiBTZXFQYWxldHRlQmFzZSwgdHJ1ZSk7XG4gICAgICAgIGV4cGVjdChjcEdyb2tHcm91cHMgaW5zdGFuY2VvZiBTZXFQYWxldHRlQmFzZSwgdHJ1ZSk7XG4gICAgICAgIGV4cGVjdChjcExlc3QgaW5zdGFuY2VvZiBBbWlub2FjaWRzUGFsZXR0ZXMsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BSYXNNb2wgaW5zdGFuY2VvZiBBbWlub2FjaWRzUGFsZXR0ZXMsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BHcm9rR3JvdXBzIGluc3RhbmNlb2YgQW1pbm9hY2lkc1BhbGV0dGVzLCB0cnVlKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNHRnNaWFIwWlhNdWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluQmhiR1YwZEdWekxuUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlNVRXNUMEZCVHl4RlFVRm5ReXhOUVVGTkxFVkJRV1VzVFVGQlRTeHZRMEZCYjBNc1EwRkJRenRCUVVWMlJ5eFBRVUZQTEVWQlFVTXNhMEpCUVd0Q0xFVkJRVU1zVFVGQlRTeGxRVUZsTEVOQlFVTTdRVUZEYWtRc1QwRkJUeXhGUVVGRExHTkJRV01zUlVGQlF5eE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJReTlETEU5QlFVOHNSVUZCUXl4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEdkQ1FVRm5RaXhEUVVGRE8wRkJSVzVFTEUxQlFVMHNWVUZCWjBJc1lVRkJZVHM3VVVGRGFrTXNUVUZCVFN4alFVRmpMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUlhoRUxITkVRVUZ6UkR0UlFVTjBSQ3h6UkVGQmMwUTdVVUZGZEVRc1RVRkJUU3hEUVVGRExHTkJRV01zV1VGQldTeGpRVUZqTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZka1FzVFVGQlRTeERRVUZETEdOQlFXTXNXVUZCV1N4dFFrRkJiVUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTVSQ3hEUVVGRE8wTkJRVUU3UVVGRlJDeE5RVUZOTEZWQlFXZENMR05CUVdNN08xRkJRMnhETEUxQlFVMHNUVUZCVFN4SFFVRkhMR3RDUVVGclFpeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTjJReXhOUVVGTkxGRkJRVkVzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE0wTXNUVUZCVFN4WlFVRlpMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUlc1RUxITkVRVUZ6UkR0UlFVTjBSQ3c0UTBGQk9FTTdVVUZET1VNc1owUkJRV2RFTzFGQlEyaEVMRzlFUVVGdlJEdFJRVVZ3UkN4TlFVRk5MRU5CUVVNc1RVRkJUU3haUVVGWkxHTkJRV01zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTXZReXhOUVVGTkxFTkJRVU1zVVVGQlVTeFpRVUZaTEdOQlFXTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOcVJDeE5RVUZOTEVOQlFVTXNXVUZCV1N4WlFVRlpMR05CUVdNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVZ5UkN4TlFVRk5MRU5CUVVNc1RVRkJUU3haUVVGWkxHdENRVUZyUWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMjVFTEUxQlFVMHNRMEZCUXl4UlFVRlJMRmxCUVZrc2EwSkJRV3RDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeERRVUZETEZsQlFWa3NXVUZCV1N4clFrRkJhMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpSQ3hEUVVGRE8wTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1WEc1cGJYQnZjblFnZTJGbWRHVnlMQ0JpWldadmNtVXNJR05oZEdWbmIzSjVMQ0IwWlhOMExDQmxlSEJsWTNRc0lHVjRjR1ZqZEU5aWFtVmpkSDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEdWemRDYzdYRzVjYm1sdGNHOXlkQ0I3UVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6ZlNCbWNtOXRJQ2N1TGk5aGJXbHViMkZqYVdSekp6dGNibWx0Y0c5eWRDQjdVMlZ4VUdGc1pYUjBaVUpoYzJWOUlHWnliMjBnSnk0dUwzTmxjUzF3WVd4bGRIUmxjeWM3WEc1cGJYQnZjblFnZTA1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhOOUlHWnliMjBnSnk0dUwyNTFZMnhsYjNScFpHVnpKenRjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJRjkwWlhOMFVHRnNaWFIwWlU0b0tTQjdYRzRnSUdOdmJuTjBJR053UTJoeWIyMWhkRzluY21GdElEMGdUblZqYkdWdmRHbGtaWE5RWVd4bGRIUmxjeTVEYUhKdmJXRjBiMmR5WVcwN1hHNWNiaUFnTHk4Z1ZFOUVUem9nUTJobFkyc2djR0ZzWlhSMFpYTWdhVzF3YkdWdFpXNTBJRk5sY1ZCaGJHVjBkR1VnYVc1MFpYSm1ZV05sWEc0Z0lDOHZJR1Y0Y0dWamRDaGpjRU5vY205dFlYUnZaM0poYlNCcGJuTjBZVzVqWlc5bUlGTmxjVkJoYkdWMGRHVXNJSFJ5ZFdVcE8xeHVYRzRnSUdWNGNHVmpkQ2hqY0VOb2NtOXRZWFJ2WjNKaGJTQnBibk4wWVc1alpXOW1JRk5sY1ZCaGJHVjBkR1ZDWVhObExDQjBjblZsS1R0Y2JseHVJQ0JsZUhCbFkzUW9ZM0JEYUhKdmJXRjBiMmR5WVcwZ2FXNXpkR0Z1WTJWdlppQk9kV05zWlc5MGFXUmxjMUJoYkdWMGRHVnpMQ0IwY25WbEtUdGNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJRjkwWlhOMFVHRnNaWFIwWlVGQktDa2dlMXh1SUNCamIyNXpkQ0JqY0V4bGMzUWdQU0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE11VEdWemF6dGNiaUFnWTI5dWMzUWdZM0JTWVhOTmIyd2dQU0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE11VW1GelRXOXNPMXh1SUNCamIyNXpkQ0JqY0VkeWIydEhjbTkxY0hNZ1BTQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXVSM0p2YTBkeWIzVndjenRjYmx4dUlDQXZMeUJVVDBSUE9pQkRhR1ZqYXlCd1lXeGxkSFJsY3lCcGJYQnNaVzFsYm5RZ1UyVnhVR0ZzWlhSMFpTQnBiblJsY21aaFkyVmNiaUFnTHk4Z1pYaHdaV04wS0dOd1RHVnpkQ0JwYm5OMFlXNWpaVzltSUZObGNWQmhiR1YwZEdVc0lIUnlkV1VwTzF4dUlDQXZMeUJsZUhCbFkzUW9ZM0JTWVhOTmIyd2dhVzV6ZEdGdVkyVnZaaUJUWlhGUVlXeGxkSFJsTENCMGNuVmxLVHRjYmlBZ0x5OGdaWGh3WldOMEtHTndSM0p2YTBkeWIzVndjeUJwYm5OMFlXNWpaVzltSUZObGNWQmhiR1YwZEdVc0lIUnlkV1VwTzF4dVhHNGdJR1Y0Y0dWamRDaGpjRXhsYzNRZ2FXNXpkR0Z1WTJWdlppQlRaWEZRWVd4bGRIUmxRbUZ6WlN3Z2RISjFaU2s3WEc0Z0lHVjRjR1ZqZENoamNGSmhjMDF2YkNCcGJuTjBZVzVqWlc5bUlGTmxjVkJoYkdWMGRHVkNZWE5sTENCMGNuVmxLVHRjYmlBZ1pYaHdaV04wS0dOd1IzSnZhMGR5YjNWd2N5QnBibk4wWVc1alpXOW1JRk5sY1ZCaGJHVjBkR1ZDWVhObExDQjBjblZsS1R0Y2JseHVJQ0JsZUhCbFkzUW9ZM0JNWlhOMElHbHVjM1JoYm1ObGIyWWdRVzFwYm05aFkybGtjMUJoYkdWMGRHVnpMQ0IwY25WbEtUdGNiaUFnWlhod1pXTjBLR053VW1GelRXOXNJR2x1YzNSaGJtTmxiMllnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6TENCMGNuVmxLVHRjYmlBZ1pYaHdaV04wS0dOd1IzSnZhMGR5YjNWd2N5QnBibk4wWVc1alpXOW1JRUZ0YVc1dllXTnBaSE5RWVd4bGRIUmxjeXdnZEhKMVpTazdYRzU5WEc0aVhYMD0iLCJleHBvcnQgY2xhc3MgU3RyaW5nVXRpbHMge1xuICAgIHN0YXRpYyBoYXNoQ29kZShzKSB7XG4gICAgICAgIGxldCBoYXNoID0gMDtcbiAgICAgICAgaWYgKHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hyID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xuICAgICAgICAgICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzaDtcbiAgICB9XG59XG5pbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBVbmtub3duU2VxUGFsZXR0ZSB7XG59XG5leHBvcnQgY2xhc3MgR3JheUFsbFBhbGV0dGUgZXh0ZW5kcyBVbmtub3duU2VxUGFsZXR0ZSB7XG4gICAgZ2V0KG0pIHtcbiAgICAgICAgcmV0dXJuICcjNjY2NjY2JztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVW5rbm93bkNvbG9yUGFsZXR0ZSBleHRlbmRzIFVua25vd25TZXFQYWxldHRlIHtcbiAgICBzdGF0aWMgYnVpbGRQYWxldHRlKCkge1xuICAgICAgICBjb25zdCByZXMgPSBbXS5jb25jYXQoLi4uT2JqZWN0LnZhbHVlcyhTZXFQYWxldHRlQmFzZS5jb2xvdXJQYWxldHRlKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGdldChtKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBTdHJpbmdVdGlscy5oYXNoQ29kZShtKTtcbiAgICAgICAgY29uc3QgcEkgPSBoYXNoICUgVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIFVua25vd25Db2xvclBhbGV0dGUucGFsZXR0ZVtwSV07XG4gICAgfVxufVxuVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlID0gVW5rbm93bkNvbG9yUGFsZXR0ZS5idWlsZFBhbGV0dGUoKTtcbmV4cG9ydCBjbGFzcyBVbmtub3duU2VxUGFsZXR0ZXMgZXh0ZW5kcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgc3RhdGljIGdldCBHcmF5KCkge1xuICAgICAgICBpZiAodGhpcy5ncmF5ID09PSB2b2lkIDApXG4gICAgICAgICAgICB0aGlzLmdyYXkgPSBuZXcgR3JheUFsbFBhbGV0dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JheTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBDb2xvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sb3IgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBuZXcgVW5rbm93bkNvbG9yUGFsZXR0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkVzVyYm05M2JpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5WdWEyNXZkMjR1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlNVRXNUVUZCVFN4UFFVRlBMRmRCUVZjN1NVRkRaaXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFWTTdVVUZET1VJc1NVRkJTU3hKUVVGSkxFZEJRVmNzUTBGQlF5eERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETzFsQlEyaENMRTlCUVU4c1NVRkJTU3hEUVVGRE8xRkJRMlFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRla01zVFVGQlRTeEhRVUZITEVkQlFWY3NRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRGJFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExESkNRVUV5UWp0VFFVTjJRenRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0RFFVTkdPMEZCUlVRc1QwRkJUeXhGUVVGaExHTkJRV01zUlVGQlF5eE5RVUZOTEdkQ1FVRm5RaXhEUVVGRE8wRkJSVEZFTEUxQlFVMHNUMEZCWjBJc2FVSkJRV2xDTzBOQlJYUkRPMEZCUlVRc1RVRkJUU3hQUVVGUExHTkJRV1VzVTBGQlVTeHBRa0ZCYVVJN1NVRkROVU1zUjBGQlJ5eERRVUZETEVOQlFWTTdVVUZEYkVJc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRGJrSXNRMEZCUXp0RFFVTkdPMEZCUjBRc1RVRkJUU3hQUVVGUExHMUNRVUZ2UWl4VFFVRlJMR2xDUVVGcFFqdEpRVWRvUkN4TlFVRk5MRU5CUVVNc1dVRkJXVHRSUVVONlFpeE5RVUZOTEVkQlFVY3NSMEZCU1N4RlFVRmxMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53Uml4UFFVRlBMRWRCUVVjc1EwRkJRenRKUVVOaUxFTkJRVU03U1VGRlRTeEhRVUZITEVOQlFVTXNRMEZCVXp0UlFVTnNRaXhOUVVGTkxFbEJRVWtzUjBGQlZ5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRemRETEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRM0pFTEU5QlFVOHNiVUpCUVcxQ0xFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTNwRExFTkJRVU03TzBGQldHRXNNa0pCUVU4c1IwRkJZU3h0UWtGQmJVSXNRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRCUVdOMlJTeE5RVUZOTEU5QlFVOHNhMEpCUVcxQ0xGTkJRVkVzWTBGQll6dEpRVWMzUXl4TlFVRk5MRXRCUVVzc1NVRkJTVHRSUVVOd1FpeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVzc1MwRkJTeXhEUVVGRE8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hqUVVGakxFVkJRVVVzUTBGQlF6dFJRVU51UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03U1VGRGJrSXNRMEZCUXp0SlFVbE5MRTFCUVUwc1MwRkJTeXhMUVVGTE8xRkJRM0pDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJTeXhMUVVGTExFTkJRVU03V1VGRGRrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxHMUNRVUZ0UWl4RlFVRkZMRU5CUVVNN1VVRkRla01zVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMGxCUTNCQ0xFTkJRVU03UTBGRFJpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nZFdrZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwzVnBKenRjYm1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVGRISnBibWRWZEdsc2N5QjdYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdhR0Z6YUVOdlpHVW9jem9nYzNSeWFXNW5LVG9nYm5WdFltVnlJSHRjYmlBZ0lDQnNaWFFnYUdGemFEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ0lDQnBaaUFvY3k1c1pXNW5kR2dnUFQwOUlEQXBYRzRnSUNBZ0lDQnlaWFIxY200Z2FHRnphRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBPaUJ1ZFcxaVpYSWdQU0F3T3lCcElEd2djeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWTJoeU9pQnVkVzFpWlhJZ1BTQnpMbU5vWVhKRGIyUmxRWFFvYVNrN1hHNGdJQ0FnSUNCb1lYTm9JRDBnS0Nob1lYTm9JRHc4SURVcElDMGdhR0Z6YUNrZ0t5QmphSEk3WEc0Z0lDQWdJQ0JvWVhOb0lIdzlJREE3SUM4dklFTnZiblpsY25RZ2RHOGdNekppYVhRZ2FXNTBaV2RsY2x4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2FHRnphRHRjYmlBZ2ZWeHVmVnh1WEc1cGJYQnZjblFnZTFObGNWQmhiR1YwZEdVc0lGTmxjVkJoYkdWMGRHVkNZWE5sZlNCbWNtOXRJQ2N1TDNObGNTMXdZV3hsZEhSbGN5YzdYRzVjYm1WNGNHOXlkQ0JoWW5OMGNtRmpkQ0JqYkdGemN5QlZibXR1YjNkdVUyVnhVR0ZzWlhSMFpTQnBiWEJzWlcxbGJuUnpJRk5sY1ZCaGJHVjBkR1VnZTF4dUlDQndkV0pzYVdNZ1lXSnpkSEpoWTNRZ1oyVjBLRzA2SUhOMGNtbHVaeWs2SUhOMGNtbHVaenRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUVkeVlYbEJiR3hRWVd4bGRIUmxJR1Y0ZEdWdVpITWdWVzVyYm05M2JsTmxjVkJoYkdWMGRHVWdlMXh1SUNCd2RXSnNhV01nWjJWMEtHMDZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUNBZ2NtVjBkWEp1SUNjak5qWTJOalkySnp0Y2JpQWdmVnh1ZlZ4dVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVmJtdHViM2R1UTI5c2IzSlFZV3hsZEhSbElHVjRkR1Z1WkhNZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdVZ2UxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklIQmhiR1YwZEdVNklITjBjbWx1WjF0ZElEMGdWVzVyYm05M2JrTnZiRzl5VUdGc1pYUjBaUzVpZFdsc1pGQmhiR1YwZEdVb0tUdGNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJpZFdsc1pGQmhiR1YwZEdVb0tUb2djM1J5YVc1blcxMGdlMXh1SUNBZ0lHTnZibk4wSUhKbGN5QTlJQ2hiWFNCaGN5QnpkSEpwYm1kYlhTa3VZMjl1WTJGMEtDNHVMazlpYW1WamRDNTJZV3gxWlhNb1UyVnhVR0ZzWlhSMFpVSmhjMlV1WTI5c2IzVnlVR0ZzWlhSMFpTa3BPMXh1SUNBZ0lISmxkSFZ5YmlCeVpYTTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnWTI5dWMzUWdhR0Z6YURvZ2JuVnRZbVZ5SUQwZ1UzUnlhVzVuVlhScGJITXVhR0Z6YUVOdlpHVW9iU2s3WEc0Z0lDQWdZMjl1YzNRZ2NFa2dQU0JvWVhOb0lDVWdWVzVyYm05M2JrTnZiRzl5VUdGc1pYUjBaUzV3WVd4bGRIUmxMbXhsYm1kMGFEdGNiaUFnSUNCeVpYUjFjbTRnVlc1cmJtOTNia052Ykc5eVVHRnNaWFIwWlM1d1lXeGxkSFJsVzNCSlhUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdWeklHVjRkR1Z1WkhNZ1UyVnhVR0ZzWlhSMFpVSmhjMlVnZTF4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCbmNtRjVPaUJUWlhGUVlXeGxkSFJsTzF4dVhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ1oyVjBJRWR5WVhrb0tUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVaM0poZVNBOVBUMGdkbTlwWkNBd0tWeHVJQ0FnSUNBZ2RHaHBjeTVuY21GNUlEMGdibVYzSUVkeVlYbEJiR3hRWVd4bGRIUmxLQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjNKaGVUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHTnZiRzl5T2lCVFpYRlFZV3hsZEhSbE8xeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwSUVOdmJHOXlLQ2s2SUZObGNWQmhiR1YwZEdVZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJHOXlJRDA5UFNCMmIybGtJREFwWEc0Z0lDQWdJQ0IwYUdsekxtTnZiRzl5SUQwZ2JtVjNJRlZ1YTI1dmQyNURiMnh2Y2xCaGJHVjBkR1VvS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIyeHZjanRjYmlBZ2ZWeHVmVnh1SWwxOSIsIi8vIERhdGEgc3RydWN0dXJlcyBmb3IgVi1Eb21haW4gcmVnaW9ucyBvZiBhbnRpYm9kaWVzXG5leHBvcnQgdmFyIFZkUmVnaW9uVHlwZTtcbihmdW5jdGlvbiAoVmRSZWdpb25UeXBlKSB7XG4gICAgVmRSZWdpb25UeXBlW1wiVW5rbm93blwiXSA9IFwidW5rbm93blwiO1xuICAgIFZkUmVnaW9uVHlwZVtcIkZSXCJdID0gXCJmcmFtZXdvcmtcIjtcbiAgICBWZFJlZ2lvblR5cGVbXCJDRFJcIl0gPSBcImNkclwiO1xufSkoVmRSZWdpb25UeXBlIHx8IChWZFJlZ2lvblR5cGUgPSB7fSkpO1xuLyoqIERlc2NyaWJlcyBWLURPTUFJTiAoSUcgYW5kIFRSKSByZWdpb24gKG9mIG11bHRpcGxlIGFsaWdubWVudClcbiAqIGh0dHBzOi8vd3d3LmltZ3Qub3JnL0lNR1RTY2llbnRpZmljQ2hhcnQvTnVtYmVyaW5nL0lNR1RJR1ZMc3VwZXJmYW1pbHkuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgVmRSZWdpb24ge1xuICAgIC8qKlxuICAgICAqIHN0YXJ0IGFuZCBwb3NpdGlvbiBhcmUgc3RyaW5ncyBiZWNhdXNlIHRoZXkgY29ycmVzcG9uZCB0byBwb3NpdGlvbiBuYW1lcyBhcyBjb2x1bW4gbmFtZXMgaW4gQU5BUkNJIG91dHB1dFxuICAgICAqIEBwYXJhbSB7VmRSZWdpb25UeXBlfSB0eXBlICBUeXBlIG9mIHRoZSByZWdpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgTmFtZSBvZiB0aGUgcmVnaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYWluXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uU3RhcnROYW1lICBSZWdpb24gc3RhcnQgcG9zaXRpb24gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25FbmROYW1lICBSZWdpb24gZW5kIHBvc2l0aW9uIChpbmNsdXNpdmUpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZSwgbmFtZSwgY2hhaW4sIG9yZGVyLCBwb3NpdGlvblN0YXJ0TmFtZSwgcG9zaXRpb25FbmROYW1lKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuY2hhaW4gPSBjaGFpbjtcbiAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyO1xuICAgICAgICB0aGlzLnBvc2l0aW9uU3RhcnROYW1lID0gcG9zaXRpb25TdGFydE5hbWU7XG4gICAgICAgIHRoaXMucG9zaXRpb25FbmROYW1lID0gcG9zaXRpb25FbmROYW1lO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRtUXRjbVZuYVc5dWN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5aa0xYSmxaMmx2Ym5NdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzY1VSQlFYRkVPMEZCUlhKRUxFMUJRVTBzUTBGQlRpeEpRVUZaTEZsQlNWZzdRVUZLUkN4WFFVRlpMRmxCUVZrN1NVRkRkRUlzYlVOQlFXMUNMRU5CUVVFN1NVRkRia0lzWjBOQlFXZENMRU5CUVVFN1NVRkRhRUlzTWtKQlFWY3NRMEZCUVR0QlFVTmlMRU5CUVVNc1JVRktWeXhaUVVGWkxFdEJRVm9zV1VGQldTeFJRVWwyUWp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZGQlFWRTdTVUZSYmtJN096czdPenM3TzA5QlVVYzdTVUZEU0N4WlFVRlpMRWxCUVd0Q0xFVkJRVVVzU1VGQldTeEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmhMRVZCUTNoRkxHbENRVUY1UWl4RlFVRkZMR1ZCUVhWQ08xRkJRMnhFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMjVDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMjVDTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eHBRa0ZCYVVJc1EwRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4SFFVRkhMR1ZCUVdVc1EwRkJRenRKUVVONlF5eERRVUZETzBOQlEwWWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2THlCRVlYUmhJSE4wY25WamRIVnlaWE1nWm05eUlGWXRSRzl0WVdsdUlISmxaMmx2Ym5NZ2IyWWdZVzUwYVdKdlpHbGxjMXh1WEc1bGVIQnZjblFnWlc1MWJTQldaRkpsWjJsdmJsUjVjR1VnZTF4dUlDQlZibXR1YjNkdUlEMGdKM1Z1YTI1dmQyNG5MRnh1SUNCR1VpQTlJQ2RtY21GdFpYZHZjbXNuTEZ4dUlDQkRSRklnUFNBblkyUnlKeXhjYm4xY2JseHVMeW9xSUVSbGMyTnlhV0psY3lCV0xVUlBUVUZKVGlBb1NVY2dZVzVrSUZSU0tTQnlaV2RwYjI0Z0tHOW1JRzExYkhScGNHeGxJR0ZzYVdkdWJXVnVkQ2xjYmlBcUlHaDBkSEJ6T2k4dmQzZDNMbWx0WjNRdWIzSm5MMGxOUjFSVFkybGxiblJwWm1salEyaGhjblF2VG5WdFltVnlhVzVuTDBsTlIxUkpSMVpNYzNWd1pYSm1ZVzFwYkhrdWFIUnRiRnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVm1SU1pXZHBiMjRnZTF4dUlDQjBlWEJsT2lCV1pGSmxaMmx2YmxSNWNHVTdYRzRnSUc1aGJXVTZJSE4wY21sdVp6dGNiaUFnWTJoaGFXNDZJSE4wY21sdVp6dGNiaUFnYjNKa1pYSTZJRzUxYldKbGNqdGNiaUFnY0c5emFYUnBiMjVUZEdGeWRFNWhiV1U2SUhOMGNtbHVaenRjYmlBZ2NHOXphWFJwYjI1RmJtUk9ZVzFsT2lCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSE4wWVhKMElHRnVaQ0J3YjNOcGRHbHZiaUJoY21VZ2MzUnlhVzVuY3lCaVpXTmhkWE5sSUhSb1pYa2dZMjl5Y21WemNHOXVaQ0IwYnlCd2IzTnBkR2x2YmlCdVlXMWxjeUJoY3lCamIyeDFiVzRnYm1GdFpYTWdhVzRnUVU1QlVrTkpJRzkxZEhCMWRGeHVJQ0FnS2lCQWNHRnlZVzBnZTFaa1VtVm5hVzl1Vkhsd1pYMGdkSGx3WlNBZ1ZIbHdaU0J2WmlCMGFHVWdjbVZuYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElDQk9ZVzFsSUc5bUlIUm9aU0J5WldkcGIyNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdOb1lXbHVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdmNtUmxjbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NHOXphWFJwYjI1VGRHRnlkRTVoYldVZ0lGSmxaMmx2YmlCemRHRnlkQ0J3YjNOcGRHbHZiaUFvYVc1amJIVnphWFpsS1Z4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjRzl6YVhScGIyNUZibVJPWVcxbElDQlNaV2RwYjI0Z1pXNWtJSEJ2YzJsMGFXOXVJQ2hwYm1Oc2RYTnBkbVVwWEc0Z0lDQXFMMXh1SUNCamIyNXpkSEoxWTNSdmNpaDBlWEJsT2lCV1pGSmxaMmx2YmxSNWNHVXNJRzVoYldVNklITjBjbWx1Wnl3Z1kyaGhhVzQ2SUhOMGNtbHVaeXdnYjNKa1pYSTZJRzUxYldKbGNpeGNiaUFnSUNCd2IzTnBkR2x2YmxOMFlYSjBUbUZ0WlRvZ2MzUnlhVzVuTENCd2IzTnBkR2x2YmtWdVpFNWhiV1U2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSFJvYVhNdWRIbHdaU0E5SUhSNWNHVTdYRzRnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0IwYUdsekxtTm9ZV2x1SUQwZ1kyaGhhVzQ3WEc0Z0lDQWdkR2hwY3k1dmNtUmxjaUE5SUc5eVpHVnlPMXh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjVUZEdGeWRFNWhiV1VnUFNCd2IzTnBkR2x2YmxOMFlYSjBUbUZ0WlR0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dVJXNWtUbUZ0WlNBOUlIQnZjMmwwYVc5dVJXNWtUbUZ0WlR0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWZWN0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyB2ZWN0b3JMZW5ndGgsIHZlY3RvckRvdFByb2R1Y3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBBbWlub2FjaWRzLCBBbWlub2FjaWRzUGFsZXR0ZXMgfSBmcm9tICcuLi9hbWlub2FjaWRzJztcbmltcG9ydCB7IE51Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzIH0gZnJvbSAnLi4vbnVjbGVvdGlkZXMnO1xuaW1wb3J0IHsgVW5rbm93blNlcVBhbGV0dGVzIH0gZnJvbSAnLi4vdW5rbm93bic7XG5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gbmV3IERHLlBvaW50KGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCk7XG59O1xuREcuUmVjdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiB0aGlzLmxlZnQgPD0geCAmJiB4IDw9IHRoaXMucmlnaHQgJiYgdGhpcy50b3AgPD0geSAmJiB5IDw9IHRoaXMuYm90dG9tO1xufTtcbmV4cG9ydCBjbGFzcyBQb3NpdGlvbk1vbm9tZXJJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYm91bmRzID0gbmV3IERHLlJlY3QoMCwgMCwgMCwgMCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uSW5mbyB7XG4gICAgLyoqIGZyZXEgPSB7fSwgcm93Q291bnQgPSAwXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwb3NpdGlvbiAoJzExMUEnLCAnMTExLjEnLCBldGMpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZyZXEgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dDb3VudCA9IDA7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYkxvZ28gZXh0ZW5kcyBERy5Kc1ZpZXdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmlld2VySWQgPSAtMTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAvLyBwcml2YXRlIHJlYWRvbmx5IGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZSA9IENvbG9yU2NoZW1lc1tOdWNsZW90aWRlc1dlYkxvZ28ucmVzaWR1ZXNTZXRdO1xuICAgICAgICB0aGlzLmNwID0gbnVsbDtcbiAgICAgICAgdGhpcy5heGlzSGVpZ2h0ID0gMTI7XG4gICAgICAgIHRoaXMuc2VxQ29sID0gbnVsbDtcbiAgICAgICAgdGhpcy5zcGxpdHRlciA9IG51bGw7XG4gICAgICAgIC8vIHByaXZhdGUgbWF4TGVuZ3RoOiBudW1iZXIgPSAxMDA7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gW107XG4gICAgICAgIHRoaXMucm93c01hc2tlZCA9IDA7XG4gICAgICAgIHRoaXMucm93c051bGwgPSAwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gLTE7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAtMTtcbiAgICAgICAgdGhpcy52aWV3U3VicyA9IFtdO1xuICAgICAgICB0aGlzLnZpZXdlcklkID0gV2ViTG9nby52aWV3ZXJDb3VudDtcbiAgICAgICAgV2ViTG9nby52aWV3ZXJDb3VudCArPSAxO1xuICAgICAgICB0aGlzLnRleHRCYXNlbGluZSA9ICd0b3AnO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoID0gdGhpcy5mbG9hdCgncG9zaXRpb25XaWR0aCcsIDE2IC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDQsIG1heDogNjQsIHBvc3RmaXg6ICdweCd9Ki8pO1xuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMuZmxvYXQoJ21pbkhlaWdodCcsIDUwIC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDI1LCBtYXg6IDI1MCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5mbG9hdCgnbWF4SGVpZ2h0JywgMTAwIC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDI1LCBtYXg6IDUwMCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgICAgIHRoaXMuY29uc2lkZXJOdWxsU2VxdWVuY2VzID0gdGhpcy5ib29sKCdjb25zaWRlck51bGxTZXF1ZW5jZXMnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID0gdGhpcy5zdHJpbmcoJ3NlcXVlbmNlQ29sdW1uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ3N0YXJ0UG9zaXRpb25OYW1lJywgbnVsbCk7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ2VuZFBvc2l0aW9uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLmZpeFdpZHRoID0gdGhpcy5ib29sKCdmaXhXaWR0aCcsIGZhbHNlKTtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCd2ZXJ0aWNhbEFsaWdubWVudCcsICdtaWRkbGUnLCB7IGNob2ljZXM6IFsndG9wJywgJ21pZGRsZScsICdib3R0b20nXSB9KTtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy5zdHJpbmcoJ2hvcml6b250YWxBbGlnbm1lbnQnLCAnY2VudGVyJywgeyBjaG9pY2VzOiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10gfSk7XG4gICAgICAgIHRoaXMuZml0QXJlYSA9IHRoaXMuYm9vbCgnZml0QXJlYScsIHRydWUpO1xuICAgICAgICB0aGlzLnNocmlua0VtcHR5VGFpbCA9IHRoaXMuYm9vbCgnc2hyaW5rRW1wdHlUYWlsJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2tpcEVtcHR5UG9zaXRpb25zID0gdGhpcy5ib29sKCdza2lwRW1wdHlQb3NpdGlvbnMnLCBmYWxzZSk7XG4gICAgfVxuICAgIC8qKiBGb3Igc3RhcnRQb3NpdGlvbiBlcXVhbHMgdG8gZW5kUG9zaXRpb24gTGVuZ3RoIGlzIDEgKi9cbiAgICBnZXQgTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBvc2l0aW9uIDw9IHRoaXMuZW5kUG9zaXRpb24gPyB0aGlzLmVuZFBvc2l0aW9uIC0gdGhpcy5zdGFydFBvc2l0aW9uICsgMSA6IDA7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dlYkxvZ28gc2Vjb25kIGluaXRpYWxpemF0aW9uIScpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oZWxwVXJsID0gJy9oZWxwL3Zpc3VhbGl6ZS92aWV3ZXJzL3dlYi1sb2dvLm1kJztcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdCA9IHVpLmRpdignTm8gbWVzc2FnZScpO1xuICAgICAgICAgICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHVpLmNhbnZhcygpO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICB0aGlzLmhvc3QgPSB1aS5kaXYoW3RoaXMubXNnSG9zdCwgdGhpcy5jYW52YXNdKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyID0gdWkucmFuZ2VTbGlkZXIoMCwgMjAsIDIsIDUpO1xuICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXIucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzEycHgnO1xuICAgICAgICAgICAgY29uc3QgZ2V0TW9ub21lciA9IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgalBvcyA9IE1hdGguZmxvb3IocC54IC8gdGhpcy5fcG9zaXRpb25XaWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb25vbWVyID0gT2JqZWN0LmtleXMocG9zaXRpb24uZnJlcSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoKG0pID0+IHBvc2l0aW9uLmZyZXFbbV0uYm91bmRzLmNvbnRhaW5zKHAueCwgcC55KSk7XG4gICAgICAgICAgICAgICAgaWYgKG1vbm9tZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2pQb3MsIG1vbm9tZXIsIHBvc2l0aW9uLmZyZXFbbW9ub21lcl1dO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHRoaXMuc3Vicy5wdXNoKHJ4anMuZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2VvdmVyJykuc3Vic2NyaWJlKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyB9KSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdWJzLnB1c2gocnhqcy5mcm9tRXZlbnQodGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FudmFzKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IGU7XG4gICAgICAgICAgICAgICAgY29uc3QgW2pQb3MsIG1vbm9tZXJdID0gZ2V0TW9ub21lcih0aGlzLmNhbnZhcy5nZXRDdXJzb3JQb3NpdGlvbihhcmdzKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICYmIHRoaXMuc2VxQ29sICYmIHRoaXMuc3BsaXR0ZXIgJiYgbW9ub21lcikge1xuICAgICAgICAgICAgICAgICAgICB1aS50b29sdGlwLnNob3dSb3dHcm91cCh0aGlzLmRhdGFGcmFtZSwgKGlSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcSA9IHRoaXMuc2VxQ29sLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcU0gPSBzZXEgPyB0aGlzLnNwbGl0dGVyKHNlcSlbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcU0gPT09IG1vbm9tZXIgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJncy54ICsgMTYsIGFyZ3MueSArIDE2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMucHVzaChyeGpzLmZyb21FdmVudCh0aGlzLmNhbnZhcywgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgZS5idXR0b24gIT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnRzIGRlc2VsZWN0IGFsbCByb3dzIGlmIHdlIG1pc3MgbW9ub21lciBib3VuZHNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgdGhpcy5zcGxpdHRlciAmJiBtb25vbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5pbml0KChpUm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEgPSB0aGlzLnNlcUNvbC5nZXQoaVJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXFNID0gc2VxID8gdGhpcy5zcGxpdHRlcihzZXEpW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXFNID09PSBtb25vbWVyICYmIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXQoaVJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMucHVzaCh1aS5vblNpemVDaGFuZ2VkKHRoaXMucm9vdCkuc3Vic2NyaWJlKHRoaXMucm9vdE9uU2l6ZUNoYW5nZWQuYmluZCh0aGlzKSkpO1xuICAgICAgICAgICAgdGhpcy5yb290LmFwcGVuZCh0aGlzLmhvc3QpO1xuICAgICAgICAgICAgLy8gdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuc2xpZGVyLnJvb3QpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByb290T25TaXplQ2hhbmdlZChhcmdzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvLm9uUm9vdFNpemVDaGFuZ2VkKCkgYCArXG4gICAgICAgIC8vICAgYHJvb3Qud2lkdGg9JHt0aGlzLnJvb3QuY2xpZW50V2lkdGh9LCByb290LmhlaWdodD0ke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9LCBgICtcbiAgICAgICAgLy8gICBgY2FudmFzLndpZHRoPSR7dGhpcy5jYW52YXMud2lkdGh9LCBjYW52YXMuaGVpZ2h0PSR7dGhpcy5jYW52YXMuaGVpZ2h0fSAuYCk7XG4gICAgfVxuICAgIC8qKiBBc3NpZ25zIHtAbGluayBzZXFDb2x9IGFuZCB7QGxpbmsgY3B9IGJhc2VkIG9uIHtAbGluayBzZXF1ZW5jZUNvbHVtbk5hbWV9IGFuZCBjYWxscyB7QGxpbmsgcmVuZGVyfSgpLlxuICAgICAqL1xuICAgIHVwZGF0ZVNlcUNvbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnNlcUNvbCA9IHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID8gdGhpcy5kYXRhRnJhbWUuY29sKHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VxQ29sID0gV2ViTG9nby5waWNrVXBTZXFDb2wyKHRoaXMuZGF0YUZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc2VxQ29sID8gdGhpcy5zZXFDb2wubmFtZSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0cyA9IHRoaXMuc2VxQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLnNlcUNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXR0ZXIgPSBXZWJMb2dvLmdldFNwbGl0dGVyKHVuaXRzLCBzZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZSh0aGlzLnNlcUNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0dGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBvc2l0aW9uID0gLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5jcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gICAgdXBkYXRlUG9zaXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VxQ29sKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgY2F0ZWdvcmllcztcbiAgICAgICAgaWYgKHRoaXMuc2hyaW5rRW1wdHlUYWlsKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgICAgICAgY2F0ZWdvcmllcyA9IEFycmF5LmZyb20obmV3IFNldChBcnJheS5mcm9tKEFycmF5KGluZGljZXMubGVuZ3RoKS5rZXlzKCkpLm1hcCgoaSkgPT4gdGhpcy5zZXFDb2wuZ2V0KGluZGljZXNbaV0pKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2F0ZWdvcmllcyA9IHRoaXMuc2VxQ29sLmNhdGVnb3JpZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gY2F0ZWdvcmllcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4uY2F0ZWdvcmllcy5tYXAoKHMpID0+IHMgIT09IG51bGwgPyB0aGlzLnNwbGl0dGVyKHMpLmxlbmd0aCA6IDApKSA6IDA7XG4gICAgICAgIC8vIEdldCBwb3NpdGlvbiBuYW1lcyBmcm9tIGRhdGEgY29sdW1uIHRhZyAncG9zaXRpb25OYW1lcydcbiAgICAgICAgY29uc3QgcG9zaXRpb25OYW1lc1R4dCA9IHRoaXMuc2VxQ29sLmdldFRhZygncG9zaXRpb25OYW1lcycpO1xuICAgICAgICAvLyBGYWxsYmFjayBpZiAncG9zaXRpb25OYW1lcycgdGFnIGlzIG5vdCBwcm92aWRlZFxuICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBwb3NpdGlvbk5hbWVzVHh0ID8gcG9zaXRpb25OYW1lc1R4dC5zcGxpdCgnLCAnKS5tYXAoKG4pID0+IG4udHJpbSgpKSA6XG4gICAgICAgICAgICBbLi4uQXJyYXkobWF4TGVuZ3RoKS5rZXlzKCldLm1hcCgoalBvcykgPT4gYCR7alBvcyArIDF9YCk7XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9ICh0aGlzLnN0YXJ0UG9zaXRpb25OYW1lICYmIHRoaXMucG9zaXRpb25OYW1lcyAmJlxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluY2x1ZGVzKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLnN0YXJ0UG9zaXRpb25OYW1lKSA6IDA7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAodGhpcy5lbmRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5lbmRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLmVuZFBvc2l0aW9uTmFtZSkgOiAobWF4TGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5KSB7XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25Qcm9wZXJ0eUNoYW5nZWQoICR7cHJvcGVydHkubmFtZX0gPSAnJyB9KWApO1xuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSk7XG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnY29uc2lkZXJOdWxsU2VxdWVuY2VzJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlcXVlbmNlQ29sdW1uTmFtZSc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0UG9zaXRpb25OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kUG9zaXRpb25OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpb25XaWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbkhlaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhIZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZml4V2lkdGgnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmVydGljYWxBbGlnbm1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbEFsaWdubWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaXRBcmVhJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nocmlua0VtcHR5VGFpbCc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblRhYmxlQXR0YWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgb25UYWJsZUF0dGFjaGVkOiB7IGdldDogKCkgPT4gc3VwZXIub25UYWJsZUF0dGFjaGVkIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSB0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJztcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoIGRhdGFGcmFtZSA9ICR7ZGF0YUZyYW1lVHh0fSApIHN0YXJ0YCk7XG4gICAgICAgICAgICBfc3VwZXIub25UYWJsZUF0dGFjaGVkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24ub25DaGFuZ2VkLnN1YnNjcmliZSgoXykgPT4gdGhpcy5yZW5kZXIoKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCkgZW5kYCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZXRhY2goKSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgZGV0YWNoOiB7IGdldDogKCkgPT4gc3VwZXIuZGV0YWNoIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSBgJHt0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJ31gO1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHtkYXRhRnJhbWVUeHR9ICkgc3RhcnRgKTtcbiAgICAgICAgICAgIF9zdXBlci5kZXRhY2guY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICB0aGlzLmhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoKSBlbmRgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9udWxsU2VxdWVuY2UoZmlsbGVyUmVzaWR1ZSA9ICdYJykge1xuICAgICAgICBpZiAodGhpcy5jb25zaWRlck51bGxTZXF1ZW5jZXMpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIF9jYWxjdWxhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuaG9zdCB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNhbGNTaXplKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NOYW1lID0gdGhpcy5wb3NpdGlvbk5hbWVzW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10gPSBuZXcgUG9zaXRpb25JbmZvKHBvc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDIwMjItMDUtMDUgYXNrYWxraW4gaW5zdHJ1Y3RlZCB0byBzaG93IFdlYkxvZ28gYmFzZWQgb24gZmlsdGVyIChub3Qgc2VsZWN0aW9uKVxuICAgICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgICAvLyBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnRydWVDb3VudCA+IDAgPyB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRJbmRleGVzKCkgOlxuICAgICAgICAvLyAgIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5yb3dzTWFza2VkID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucm93c051bGwgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5kaWNlcykge1xuICAgICAgICAgICAgbGV0IHMgPSAodGhpcy5zZXFDb2wuZ2V0KGkpKTtcbiAgICAgICAgICAgIGlmICghcykge1xuICAgICAgICAgICAgICAgIHMgPSB0aGlzLl9udWxsU2VxdWVuY2UoKTtcbiAgICAgICAgICAgICAgICArK3RoaXMucm93c051bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZXFNID0gdGhpcy5zcGxpdHRlcihzKTtcbiAgICAgICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBtSW5mbyA9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXE7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9IHNlcU1bdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gfHwgJy0nO1xuICAgICAgICAgICAgICAgIGlmICghKG0gaW4gcG1JbmZvKSlcbiAgICAgICAgICAgICAgICAgICAgcG1JbmZvW21dID0gbmV3IFBvc2l0aW9uTW9ub21lckluZm8oKTtcbiAgICAgICAgICAgICAgICBwbUluZm9bbV0uY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyNyZWdpb24gUG9saXNoIGZyZXEgY291bnRzXG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgLy8gZGVsZXRlIHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXFbJy0nXTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbSBpbiB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKVxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50ICs9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXFbbV0uY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8jZW5kcmVnaW9uXG4gICAgICAgIGNvbnN0IHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC0gdGhpcy5heGlzSGVpZ2h0ICogcjtcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhgV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5fY2FsY3VsYXRlKCkgbWF4SGVpZ2h0PSR7bWF4SGVpZ2h0fS5gKTtcbiAgICAgICAgLy8jcmVnaW9uIENhbGN1bGF0ZSBzY3JlZW5cbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBmcmVxID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQ7XG4gICAgICAgICAgICBsZXQgeSA9IHRoaXMuYXhpc0hlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhmcmVxKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFbMF0gIT09ICctJyAmJiBiWzBdICE9PSAnLScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiWzFdLmNvdW50IC0gYVsxXS5jb3VudDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScgJiYgYlswXSA9PT0gJy0nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBlbHNlIC8qIChiWzBdID09PSAnLScpICovXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiArMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG1JbmZvID0gZW50cnlbMV07XG4gICAgICAgICAgICAgICAgLy8gY29uc3QgbTogc3RyaW5nID0gZW50cnlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IG1heEhlaWdodCAqIHBtSW5mby5jb3VudCAvIHJvd0NvdW50O1xuICAgICAgICAgICAgICAgIHBtSW5mby5ib3VuZHMgPSBuZXcgREcuUmVjdChqUG9zICogdGhpcy5fcG9zaXRpb25XaWR0aCwgeSwgdGhpcy5fcG9zaXRpb25XaWR0aCwgaCk7XG4gICAgICAgICAgICAgICAgeSArPSBoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vI2VuZHJlZ2lvblxuICAgIH1cbiAgICAvLyByZWZsZWN0IGNoYW5nZXMgbWFkZSB0byBmaWx0ZXIvc2VsZWN0aW9uXG4gICAgcmVuZGVyKHJlY2FsYyA9IHRydWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5tc2dIb3N0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wgJiYgIXRoaXMuY3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZ0hvc3QuaW5uZXJUZXh0ID0gYFVua25vd24gcGFsZXR0ZSAoY29sdW1uIHNlbVR5cGU6ICcke3RoaXMuc2VxQ29sLnNlbVR5cGV9JykuYDtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZ0hvc3Quc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lIHx8ICF0aGlzLmNwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBnID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgaWYgKCFnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocmVjYWxjKVxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlKCk7XG4gICAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgZy5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgICAgICBnLmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBnLnRleHRCYXNlbGluZSA9IHRoaXMudGV4dEJhc2VsaW5lO1xuICAgICAgICAvLyBQcmV2ZW50cyBkaXZpc2lvbiBieSB6ZXJvIG9uIExlbmd0aCA9IDBcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRQb3NpdGlvbiA9PT0gLTEgfHwgdGhpcy5lbmRQb3NpdGlvbiA9PT0gLTEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vI3JlZ2lvbiBQbG90IHBvc2l0aW9uTmFtZXNcbiAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICBnLmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgICAgIGcudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgIGcuZm9udCA9ICcxMHB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgY29uc3QgcG9zTmFtZU1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5wb3NpdGlvbnMubWFwKChwb3MpID0+IGcubWVhc3VyZVRleHQocG9zLm5hbWUpLndpZHRoKSk7XG4gICAgICAgIGNvbnN0IGhTY2FsZSA9IHBvc05hbWVNYXhXaWR0aCA8ICh0aGlzLl9wb3NpdGlvbldpZHRoIC0gMikgPyAxIDogKHRoaXMuX3Bvc2l0aW9uV2lkdGggLSAyKSAvIHBvc05hbWVNYXhXaWR0aDtcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgICAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKGhTY2FsZSwgMCwgMCwgMSwgalBvcyAqIHRoaXMuX3Bvc2l0aW9uV2lkdGggKyB0aGlzLl9wb3NpdGlvbldpZHRoIC8gMiwgMCk7XG4gICAgICAgICAgICBnLmZpbGxUZXh0KHBvcy5uYW1lLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyNlbmRyZWdpb24gUGxvdCBwb3NpdGlvbk5hbWVzXG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbW9ub21lciwgcG1JbmZvXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKSkge1xuICAgICAgICAgICAgICAgIGlmIChtb25vbWVyICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IHBtSW5mby5ib3VuZHM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9ICcxNnB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFja3MgdG8gc2NhbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gdGFyZ2V0IHJlY3RhbmdsZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJBc2NlbnQgPSAwLjI1O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQgPSAxMi4yO1xuICAgICAgICAgICAgICAgICAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnbGlnaHRncmF5JztcbiAgICAgICAgICAgICAgICAgICAgZy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICBnLnJlY3QoYi5sZWZ0LCBiLnRvcCwgYi53aWR0aCwgYi5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBnLmZpbGxTdHlsZSA9IChfYSA9IHRoaXMuY3AuZ2V0KG1vbm9tZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmNwLmdldCgnb3RoZXInKTtcbiAgICAgICAgICAgICAgICAgICAgZy50ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIGcuZm9udCA9IGZvbnRTdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgLy9nLmZpbGxSZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbVRtID0gZy5tZWFzdXJlVGV4dChtb25vbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKG1NLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50ICE9IDApXG4gICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhgbTogJHttfSwgbU0uYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQ6ICR7bU0uYWN0dWFsQm91bmRpbmdCb3hBc2NlbnR9YCk7XG4gICAgICAgICAgICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKGIud2lkdGggLyBtVG0ud2lkdGgsIDAsIDAsIGIuaGVpZ2h0IC8gdXBwZXJjYXNlTGV0dGVySGVpZ2h0LCBiLmxlZnQsIGIudG9wKTtcbiAgICAgICAgICAgICAgICAgICAgZy5maWxsVGV4dChtb25vbWVyLCAwLCAtdXBwZXJjYXNlTGV0dGVyQXNjZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FsY1NpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuaG9zdClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHdpZHRoID0gdGhpcy5MZW5ndGggKiB0aGlzLnBvc2l0aW9uV2lkdGg7XG4gICAgICAgIGxldCBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQpKTtcbiAgICAgICAgaWYgKHRoaXMuZml0QXJlYSkge1xuICAgICAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5yb290LmNsaWVudEhlaWdodCAvIGhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMucm9vdC5jbGllbnRXaWR0aCAvIHdpZHRoO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heCgxLCBNYXRoLm1pbih4U2NhbGUsIHlTY2FsZSkpO1xuICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoICogc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoICogcjtcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICAgIC8vIGNvbnN0IGNhbnZhc0hlaWdodDogbnVtYmVyID0gd2lkdGggPiB0aGlzLnJvb3QuY2xpZW50V2lkdGggPyBoZWlnaHQgLSA4IDogaGVpZ2h0O1xuICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xuICAgICAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmhvc3QuY2xpZW50SGVpZ2h0O1xuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQgKiByO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7Y2FudmFzSGVpZ2h0fXB4YCk7XG4gICAgICAgIC8vIEFkanVzdCBob3N0IGFuZCByb290IHdpZHRoXG4gICAgICAgIGlmICh0aGlzLmZpeFdpZHRoKSB7XG4gICAgICAgICAgICAvLyBmdWxsIHdpZHRoIGZvciBjYW52YXMgaG9zdCBhbmQgcm9vdFxuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgJ2hpZGRlbicsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ3RleHQtYWxpZ24nLCB0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpO1xuICAgICAgICAgICAgLy8gdmVydGljYWwgYWxpZ25tZW50XG4gICAgICAgICAgICBsZXQgaG9zdFRvcE1hcmdpbiA9IDA7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgICAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IC0gaGVpZ2h0KSAvIDIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgdGhpcy5yb290LmNsaWVudEhlaWdodCAtIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgYCR7aG9zdFRvcE1hcmdpbn1weGAsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHt0aGlzLnJvb3QuY2xpZW50SGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdy15JywgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXG4gICAgICAgIC8vICAgYHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgPSAke3RoaXMucm9vdC5zdHlsZS5oZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPSAke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMuaG9zdC5zdHlsZS5oZWlnaHQgPSAke3RoaXMuaG9zdC5zdHlsZS5oZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMuaG9zdC5jbGllbnRIZWlnaHQgPSAke3RoaXMuaG9zdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgJ1xcbicgK1xuICAgICAgICAvLyAgIGB0aGlzLmNhbnZhcy5oZWlnaHQgICAgICAgPSAke3RoaXMuY2FudmFzLmhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICBgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gJHt0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHR9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSAgbWluTGVuZ3RoIG1pbmltdW0gbGVuZ3RoIG9mIHNlcXVlbmNlIHRvIGRldGVjdCBwYWxldHRlIChlbXB0eSBzdHJpbmdzIGFyZSBhbGxvd2VkKVxuICAgICAqIEByZXR1cm4ge1NlcVBhbGV0dGV9IFBhbGV0dGUgY29ycmVzcG9uZGluZyB0byB0aGUgYWxwaGFiZXQgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgY29sdW1uXG4gICAgICovXG4gICAgc3RhdGljIHBpY2tVcFBhbGV0dGUoc2VxQ29sLCBtaW5MZW5ndGggPSA1KSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKHNlcUNvbC5zZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFtaW5vYWNpZHMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgICAgICAgICAgIHJlcyA9IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOdWNsZW90aWRlcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQ6XG4gICAgICAgICAgICAgICAgcmVzID0gTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHMgPSBXZWJMb2dvLmdldFN0YXRzKHNlcUNvbCwgbWluTGVuZ3RoLCBXZWJMb2dvLnNwbGl0dGVyQXNGYXN0YSk7XG4gICAgICAgIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlcyA9IFtcbiAgICAgICAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSksIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtXSxcbiAgICAgICAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKEFtaW5vYWNpZHMuTmFtZXMpKSwgQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHNdLFxuICAgICAgICBdO1xuICAgICAgICAvLyBDYWxjdWxhdGUgbGlrZWxpaG9vZHMgZm9yIGFscGhhYmV0X2NhbmRpZGF0ZXNcbiAgICAgICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltID0gYWxwaGFiZXRDYW5kaWRhdGVzXG4gICAgICAgICAgICAubWFwKChjKSA9PiBXZWJMb2dvLmdldEFscGhhYmV0U2ltaWxhcml0eShzdGF0cy5mcmVxLCBjWzBdKSk7XG4gICAgICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgICAgIGlmIChtYXhDb3MgPiAwLjY1KVxuICAgICAgICAgICAgcmVzID0gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzFdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSBVbmtub3duU2VxUGFsZXR0ZXMuQ29sb3I7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8qKiBTdGF0cyBvZiBzZXF1ZW5jZXMgd2l0aCBzcGVjaWZpZWQgc3BsaXR0ZXIgZnVuYywgcmV0dXJucyB7IGZyZXEsIHNhbWVMZW5ndGggfS5cbiAgICAgKiBAcGFyYW0ge0RHLkNvbHVtbn0gc2VxQ29sXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbkxlbmd0aFxuICAgICAqIEBwYXJhbSB7U3BsaXR0ZXJGdW5jfSBzcGxpdHRlclxuICAgICAqIEByZXR1cm4geyBTZXFDb2xTdGF0cyB9LCBzYW1lTGVuZ3RoOiBib29sZWFuIH0gc3RhdHMgb2YgY29sdW1uIHNlcXVlbmNlc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTdGF0cyhzZXFDb2wsIG1pbkxlbmd0aCwgc3BsaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgZnJlcSA9IHt9O1xuICAgICAgICBsZXQgc2FtZUxlbmd0aCA9IHRydWU7XG4gICAgICAgIGxldCBmaXJzdExlbmd0aCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIHNlcUNvbC5jYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtU2VxID0gc3BsaXR0ZXIoc2VxKTtcbiAgICAgICAgICAgIGlmIChmaXJzdExlbmd0aCA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGZpcnN0TGVuZ3RoID0gbVNlcS5sZW5ndGg7XG4gICAgICAgICAgICBlbHNlIGlmIChtU2VxLmxlbmd0aCAhPT0gZmlyc3RMZW5ndGgpXG4gICAgICAgICAgICAgICAgc2FtZUxlbmd0aCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKG1TZXEubGVuZ3RoID4gbWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1TZXEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEobSBpbiBmcmVxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyZXFbbV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBmcmVxW21dICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGZyZXE6IGZyZXEsIHNhbWVMZW5ndGg6IHNhbWVMZW5ndGggfTtcbiAgICB9XG4gICAgc3RhdGljIGdldEFscGhhYmV0U2ltaWxhcml0eShmcmVxLCBhbHBoYWJldCwgZ2FwU3ltYm9sID0gJy0nKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKGZyZXEpKSwgLi4uYWxwaGFiZXRdKTtcbiAgICAgICAga2V5cy5kZWxldGUoZ2FwU3ltYm9sKTtcbiAgICAgICAgY29uc3QgZnJlcUEgPSBbXTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRBID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBmcmVxQS5wdXNoKG0gaW4gZnJlcSA/IGZyZXFbbV0gOiAwKTtcbiAgICAgICAgICAgIGFscGhhYmV0QS5wdXNoKGFscGhhYmV0LmhhcyhtKSA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBUaGVyZSB3ZXJlIGEgZmV3IGlkZWFzOiBjaGktc3F1YXJlZCwgcGVhcnNvbiBjb3JyZWxhdGlvbiAodmFyaWFuY2U/KSwgc2NhbGFyIHByb2R1Y3QgKi9cbiAgICAgICAgY29uc3QgZnJlcVYgPSBuZXcgVmVjdG9yKGZyZXFBKTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRWID0gbmV3IFZlY3RvcihhbHBoYWJldEEpO1xuICAgICAgICBjb25zdCBjb3MgPSB2ZWN0b3JEb3RQcm9kdWN0KGZyZXFWLCBhbHBoYWJldFYpIC8gKHZlY3Rvckxlbmd0aChmcmVxVikgKiB2ZWN0b3JMZW5ndGgoYWxwaGFiZXRWKSk7XG4gICAgICAgIHJldHVybiBjb3M7XG4gICAgfVxuICAgIC8vIC8qKiBGaXJzdCB0cnkgdG8gZmluZCBjb2x1bW4gd2l0aCBzZW1UeXBlICdhbGlnbmVkU2VxdWVuY2UnLlxuICAgIC8vICAqIE5leHQgbG9vayBmb3IgY29sdW1uIHdpdGggZGF0YSBhbHBoYWJldCBjb3JyZXNwb25kaW5nIHRvIGFueSBvZiB0aGUga25vd24gcGFsZXR0ZXMuXG4gICAgLy8gICogQHBhcmFtIHtERy5EYXRhRnJhbWV9IGRhdGFGcmFtZVxuICAgIC8vICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gVGhlIGNvbHVtbiB3ZSB3ZXJlIGxvb2tpbmcgZm9yIG9yIG51bGxcbiAgICAvLyAgKi9cbiAgICAvLyBwcml2YXRlIHBpY2tVcFNlcUNvbChkYXRhRnJhbWU6IERHLkRhdGFGcmFtZSk6IERHLkNvbHVtbiB8IG51bGwge1xuICAgIC8vICAgbGV0IHJlczogREcuQ29sdW1uIHwgbnVsbCA9IGRhdGFGcmFtZS5jb2x1bW5zLmJ5U2VtVHlwZSgnYWxpZ25lZFNlcXVlbmNlJyk7XG4gICAgLy8gICBpZiAocmVzID09IG51bGwpIHtcbiAgICAvLyAgICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUZyYW1lLmNvbHVtbnMpIHtcbiAgICAvLyAgICAgICBjb25zdCBjcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZShjb2wgYXMgREcuQ29sdW1uLCA1KTtcbiAgICAvLyAgICAgICBpZiAoY3AgIT09IG51bGwgJiYgIShjcCBpbnN0YW5jZW9mIFVua25vd25TZXFQYWxldHRlKSkge1xuICAgIC8vICAgICAgICAgcmVzID0gY29sO1xuICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gICByZXR1cm4gcmVzO1xuICAgIC8vIH1cbiAgICBzdGF0aWMgcGlja1VwU2VxQ29sMihkZikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNlbVR5cGVDb2xMaXN0ID0gZGYuY29sdW1ucy5ieVNlbVR5cGVBbGwoREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKTtcbiAgICAgICAgbGV0IHJlc0NvbCA9IChfYSA9IHNlbVR5cGVDb2xMaXN0LmZpbmQoKGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICAgICAgcmV0dXJuIHVuaXRzID8gdW5pdHMuaW5kZXhPZignTVNBJykgIT09IC0xIDogZmFsc2U7XG4gICAgICAgIH0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICBpZiAoIXJlc0NvbCAmJiBzZW1UeXBlQ29sTGlzdC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmVzQ29sID0gc2VtVHlwZUNvbExpc3RbMF07XG4gICAgICAgIHJldHVybiByZXNDb2w7XG4gICAgfVxuICAgIC8qKiBTcGxpdCBzZXF1ZW5jZSBmb3Igc2luZ2xlIGNoYXJhY3RlciBtb25vbWVycywgc3F1YXJlIGJyYWNrZXRzIG11bHRpY2hhciBtb25vbWVyIG5hbWVzIG9yIGdhcCBzeW1ib2wuXG4gICAgICogQHBhcmFtIHthbnl9IHNlcSBvYmplY3Qgd2l0aCBzZXF1ZW5jZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBhcnJheSBvZiBtb25vbWVyc1xuICAgICAqL1xuICAgIHN0YXRpYyBzcGxpdHRlckFzRmFzdGEoc2VxKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHd1KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKFdlYkxvZ28ubW9ub21lclJlKSlcbiAgICAgICAgICAgIC5tYXAoKG1hKSA9PiB7XG4gICAgICAgICAgICBsZXQgbVJlcztcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtYVswXTtcbiAgICAgICAgICAgIGlmIChtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobSBpbiBXZWJMb2dvLmFhU3lub255bXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbVJlcyA9IFdlYkxvZ28uYWFTeW5vbnltc1ttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1SZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgTG9uZyBtb25vbWVyICcke219JyBoYXMgbm90IGEgc2hvcnQgc3lub255bS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtUmVzID0gbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtUmVzO1xuICAgICAgICB9KS50b0FycmF5KCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8qKiBHZXRzIG1ldGhvZCB0byBzcGxpdCBzZXF1ZW5jZSBieSBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAgICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTcGxpdHRlcldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAoc2VxKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc2VxLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBHZXQgc3BsaXR0ZXIgbWV0aG9kIHRvIHNwbGl0IHNlcXVlbmNlcyB0byBtb25vbWVyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAgICAgKiBAcmV0dXJuIHtTcGxpdHRlckZ1bmN9XG4gICAgICovXG4gICAgc3RhdGljIGdldFNwbGl0dGVyKHVuaXRzLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgaWYgKHVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZmFzdGEnKSlcbiAgICAgICAgICAgIHJldHVybiBXZWJMb2dvLnNwbGl0dGVyQXNGYXN0YTtcbiAgICAgICAgZWxzZSBpZiAodW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdzZXBhcmF0b3InKSlcbiAgICAgICAgICAgIHJldHVybiBXZWJMb2dvLmdldFNwbGl0dGVyV2l0aFNlcGFyYXRvcihzZXBhcmF0b3IpO1xuICAgICAgICAvKlxuICAgICAgICBlbHNlIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2hlbG0nKSlcbiAgICAgICAgICByZXR1cm4gV2ViTG9nby5zcGxpdHRlckFzSGVsbTtcbiAgICAgICAgLyoqL1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdW5pdHMgJHt1bml0c30gLmApO1xuICAgICAgICAvLyBUT0RPOiBTcGxpdHRlciBmb3IgSEVMTVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0U3BsaXR0ZXJGb3JDb2x1bW4oY29sKSB7XG4gICAgICAgIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHZXQgc3BsaXR0ZXIgZm9yIHNlbVR5cGUgXCIke0RHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRX1cIiBvbmx5LmApO1xuICAgICAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICAgICAgICByZXR1cm4gV2ViTG9nby5nZXRTcGxpdHRlcih1bml0cywgc2VwYXJhdG9yKTtcbiAgICB9XG59XG5XZWJMb2dvLnJlc2lkdWVzU2V0ID0gJ251Y2xlb3RpZGVzJztcbldlYkxvZ28udmlld2VyQ291bnQgPSAtMTtcbldlYkxvZ28ubW9ub21lclJlID0gL1xcWyhcXHcrKVxcXXwoXFx3KXwoLSkvZztcbi8qKiBPbmx5IHNvbWUgb2YgdGhlIHN5bm9ueW1zLiBUaGVzZSB3ZXJlIG9idGFpbmVkIGZyb20gdGhlIGNsdXN0ZXJlZCBvbGlnb3BlcHRpZGUgZGF0YXNldC4gKi9cbldlYkxvZ28uYWFTeW5vbnltcyA9IHtcbiAgICAnW01lTmxlXSc6ICdMJyxcbiAgICAnW01lQV0nOiAnQScsXG4gICAgJ1tNZUddJzogJ0cnLFxuICAgICdbTWVGXSc6ICdGJyxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkMlZpTFd4dloyOHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKM1pXSXRiRzluYnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkRRU3hQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNTMEZCU3l4RlFVRkZMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTTdRVUZGZEVNc1QwRkJUeXhGUVVGRkxFMUJRVTBzU1VGQlNTeERRVUZETzBGQlEzQkNMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzVFVGQlRTeERRVUZETzBGQlJUZENMRTlCUVU4c1JVRkJReXhOUVVGTkxFVkJRVU1zVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVOMlJTeFBRVUZQTEVWQlFVTXNXVUZCV1N4RlFVRkZMR2RDUVVGblFpeEZRVUZETEUxQlFVMHNhVVJCUVdsRUxFTkJRVU03UVVGREwwWXNUMEZCVHl4RlFVRkRMRlZCUVZVc1JVRkJSU3hyUWtGQmEwSXNSVUZCUXl4TlFVRk5MR1ZCUVdVc1EwRkJRenRCUVVNM1JDeFBRVUZQTEVWQlFVTXNWMEZCVnl4RlFVRkZMRzFDUVVGdFFpeEZRVUZETEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRGFFVXNUMEZCVHl4RlFVRnZRaXhyUWtGQmEwSXNSVUZCUXl4TlFVRk5MRmxCUVZrc1EwRkJRenRCUVc5Q2FrVXNhVUpCUVdsQ0xFTkJRVU1zVTBGQlV5eERRVUZETEdsQ1FVRnBRaXhIUVVGSExGVkJRVk1zUzBGQmFVSTdTVUZEZUVVc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03U1VGRE1VTXNUMEZCVHl4SlFVRkpMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRek5GTEVOQlFVTXNRMEZCUXp0QlFVVkdMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZGQlFWRXNSMEZCUnl4VlFVRlRMRU5CUVZNc1JVRkJSU3hEUVVGVE8wbEJRM2hFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRGFFWXNRMEZCUXl4RFFVRkRPMEZCUlVZc1RVRkJUU3hQUVVGUExHMUNRVUZ0UWp0SlFWTTVRanRSUVVORkxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJZc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4UFFVRlBMRmxCUVZrN1NVRkxka0k3TzA5QlJVYzdTVUZEU0N4WlFVRlpMRWxCUVZrN1VVRkRkRUlzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRha0lzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRaaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTndRaXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRVZCUVVVc1EwRkJReXhSUVVGUk8wbEJkVVIwUXp0UlFVTkZMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJjRVJHTEdGQlFWRXNSMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFFpeG5Ra0ZCVnl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVVWeVF5dzBSa0ZCTkVZN1VVRkRiRVlzVDBGQlJTeEhRVUZ6UWl4SlFVRkpMRU5CUVVNN1VVRlJMMElzWlVGQlZTeEhRVUZYTEVWQlFVVXNRMEZCUXp0UlFVVjRRaXhYUVVGTkxFZEJRVFpDTEVsQlFVa3NRMEZCUXp0UlFVTjRReXhoUVVGUkxFZEJRWGRDTEVsQlFVa3NRMEZCUXp0UlFVTTNReXh0UTBGQmJVTTdVVUZETTBJc1kwRkJVeXhIUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZGTDBJc1pVRkJWU3hIUVVGWExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4aFFVRlJMRWRCUVZjc1EwRkJReXhEUVVGRE8xRkJhMEp5UWl4clFrRkJZU3hIUVVGaExFVkJRVVVzUTBGQlF6dFJRVVUzUWl4clFrRkJZU3hIUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJUTkNMR2RDUVVGWExFZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZQZWtJc1lVRkJVU3hIUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZMY0VNc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRPMUZCUTNCRExFOUJRVThzUTBGQlF5eFhRVUZYTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlhwQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUlRGQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSVUZCUlN4RlFVRkZMRU5CUVVFN09FUkJRMjVDTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlFUdG5SVUZEWVN4RFFVRkRMRU5CUVVNN1VVRkRNVVFzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUlVGQlJTeEhRVUZITEVOQlFVRTdaMFZCUTFrc1EwRkJReXhEUVVGRE8xRkJSVEZFTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMSFZDUVVGMVFpeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNaRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJXeEZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMmhGTEVsQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVUxUkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVGRETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEZGQlFWRXNSVUZEYUVVc1JVRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eExRVUZMTEVWQlFVVXNVVUZCVVN4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXh4UWtGQmNVSXNSVUZCUlN4UlFVRlJMRVZCUTNCRkxFVkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1JVRkJSU3hQUVVGUExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETVVRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRGJrVXNRMEZCUXp0SlFYSkRSQ3d3UkVGQk1FUTdTVUZETVVRc1NVRkJXU3hOUVVGTk8xRkJRMmhDTEU5QlFVOHNTVUZCU1N4RFFVRkRMR0ZCUVdFc1NVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFFY3NRMEZCUXp0SlFXOURZU3hKUVVGSk96dFpRVU5vUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3WjBKQlEzQkNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1EwRkJRenRuUWtGRGFFUXNUMEZCVHp0aFFVTlNPMWxCUlVRc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdXVUZEZUVJc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eHhRMEZCY1VNc1EwRkJRenRaUVVWeVJDeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZEY0VNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenRaUVVWd1F5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU14UWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRPMWxCUldwRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRmFFUXNOa05CUVRaRE8xbEJRemRETEhsRFFVRjVRenRaUVVONlF5d3dRMEZCTUVNN1dVRkZNVU1zVFVGQlRTeFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRlhMRVZCUVhWRUxFVkJRVVU3WjBKQlEzUkdMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdaMEpCUTI1RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlJYUkRMRWxCUVVrc1VVRkJVU3hMUVVGTExFdEJRVXNzUTBGQlF6dHZRa0ZEY2tJc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJSVFZDTEUxQlFVMHNUMEZCVHl4SFFVRjFRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNN2NVSkJRek5FTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpORUxFbEJRVWtzVDBGQlR5eExRVUZMTEZOQlFWTTdiMEpCUTNaQ0xFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVVUxUWl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFrUXNRMEZCUXl4RFFVRkRPMWxCUjBZc2NVZEJRWEZITzFsQlEzSkhMRTlCUVU4N1dVRkZVQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGaExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQllTeEZRVUZGTEVWQlFVVTdaMEpCUTJ4SExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFR0dlFrRkRaQ3hQUVVGUE8yZENRVVZVTEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVdVc1EwRkJRenRuUWtGRE4wSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVY0UlN4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hKUVVGSkxFOUJRVThzUlVGQlJUdHZRa0ZETjBRc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTzNkQ1FVTXZReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dDNRa0ZEYmtNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRla1VzVDBGQlR5eEpRVUZKTEV0QlFVc3NUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlF6bENPM0ZDUVVGTk8yOUNRVU5NTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEyNUNPMWxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVVZLTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFXRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRmhMRVZCUVVVc1JVRkJSVHRuUWtGRGJFY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRPMjlDUVVNdlFpeFBRVUZQTzJkQ1FVVlVMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRV1VzUTBGQlF6dG5Ra0ZETjBJc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVVjRSU3gxUkVGQmRVUTdaMEpCUTNaRUxFbEJRVWtzU1VGQlNTeERRVUZETEZOQlFWTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NUMEZCVHl4RlFVRkZPMjlDUVVNM1JDeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0M1FrRkRja01zVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdkMEpCUTI1RExFMUJRVTBzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN2QwSkJRM3BGTEU5QlFVOHNTVUZCU1N4TFFVRkxMRTlCUVU4c1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YjBKQlF6ZEVMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5LTzFsQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVWS0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVTNSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRE5VSXNNa05CUVRKRE8xbEJSVE5ETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGNFSXNRMEZCUXp0TFFVRkJPMGxCUlU4c2FVSkJRV2xDTEVOQlFVTXNTVUZCVXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUld4Q0xHbEVRVUZwUkR0UlFVTnFSQ3h4UmtGQmNVWTdVVUZEY2tZc2FVWkJRV2xHTzBsQlEyNUdMRU5CUVVNN1NVRkZSRHRQUVVOSE8wbEJRMHNzV1VGQldUdFJRVU5zUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVU3V1VGRGJFSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUlVGQlJUdG5Ra0ZEZGtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dG5Ra0ZEY0VRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZEYWtVN1dVRkRSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdaMEpCUTJZc1RVRkJUU3hMUVVGTExFZEJRVmNzU1VGQlNTeERRVUZETEUxQlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0blFrRkRla1FzVFVGQlRTeFRRVUZUTEVkQlFWY3NTVUZCU1N4RFFVRkRMRTFCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdaMEpCUXpORUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUlhSRUxFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0aFFVTTVRenRwUWtGQlRUdG5Ra0ZEVEN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tJc1NVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM2hDTEVsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzUkNMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETzJGQlEyaENPMU5CUTBZN1VVRkRSQ3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdTVUZEYUVJc1EwRkJRenRKUVVWUExHVkJRV1U3VVVGRGNrSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTk8xbEJRMlFzVDBGQlR6dFJRVVZVTEVsQlFVa3NWVUZCT0VJc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVN1dVRkRlRUlzVFVGQlRTeFBRVUZQTEVkQlFXVXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zYTBKQlFXdENMRVZCUVVVc1EwRkJRenRaUVVOMlJTeFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGRE4wSXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTXZSanRoUVVGTk8xbEJRMHdzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRE8xTkJRM0pETzFGQlEwUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1ZVRkJWU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVTnNSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVY2UkN3d1JFRkJNRVE3VVVGRE1VUXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF6dFJRVU0zUkN4clJFRkJhMFE3VVVGRGJFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZSaXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlRWRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NTVUZCU1N4RFFVRkRMR0ZCUVdFN1dVRkRhRVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JFTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtRc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4bFFVRmxMRWxCUVVrc1NVRkJTU3hEUVVGRExHRkJRV0U3V1VGRE5VUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1JDeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzWkZMRU5CUVVNN1NVRkZaU3hwUWtGQmFVSXNRMEZCUXl4UlFVRnhRanRSUVVOeVJDeDNSVUZCZDBVN1VVRkRlRVVzUzBGQlN5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlJXeERMRkZCUVZFc1VVRkJVU3hEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU4yUWl4TFFVRkxMSFZDUVVGMVFqdG5Ra0ZETVVJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRiRUlzVFVGQlRUdFpRVU5TTEV0QlFVc3NiMEpCUVc5Q08yZENRVU4yUWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRTFCUVUwN1dVRkRVaXhMUVVGTExHMUNRVUZ0UWp0blFrRkRkRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeE5RVUZOTzFsQlExSXNTMEZCU3l4cFFrRkJhVUk3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dG5Ra0ZEY0VJc1RVRkJUVHRaUVVOU0xFdEJRVXNzWlVGQlpUdG5Ra0ZEYkVJc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRPMmRDUVVONlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhYUVVGWE8yZENRVU5rTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExGZEJRVmM3WjBKQlEyUXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZEYkVJc1RVRkJUVHRaUVVOU0xFdEJRVXNzVlVGQlZUdG5Ra0ZEWWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnNRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eHRRa0ZCYlVJN1owSkJRM1JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExIRkNRVUZ4UWp0blFrRkRlRUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0WlFVTlNMRXRCUVVzc1UwRkJVenRuUWtGRFdpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhwUWtGQmFVSTdaMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0VFFVTlFPMGxCUTBnc1EwRkJRenRKUVVWeFFpeGxRVUZsT3pzN096dFpRVU51UXl4TlFVRk5MRmxCUVZrc1IwRkJWeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dFpRVU01UkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hyUTBGQmEwTXNXVUZCV1N4VlFVRlZMRU5CUVVNc1EwRkJRenRaUVVOeVJ5eFBRVUZOTEdWQlFXVXNXVUZCUnp0WlFVVjRRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdXVUZGY0VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVRkZPMmRDUVVNM1FpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTnVSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3YjBKQlF6ZEVMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6dHZRa0ZEZGtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzJkQ1FVTm9RaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEwdzdXVUZGUkN4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU5zUWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFTkJRVU03UzBGQlFUdEpRVVZ4UWl4TlFVRk5PenM3T3p0WlFVTXhRaXhOUVVGTkxGbEJRVmtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1dVRkRNMFFzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4blFrRkJaMElzU1VGQlNTeERRVUZETEZGQlFWRXNhME5CUVd0RExGbEJRVmtzVlVGQlZTeERRVUZETEVOQlFVTTdXVUZEY2tjc1QwRkJUU3hOUVVGTkxGbEJRVWM3V1VGRlppeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRGJFUXNTVUZCU1N4RFFVRkRMRWxCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU53UWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExGTkJRVk1zUTBGQlF6dFpRVU40UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExGTkJRVk1zUTBGQlF6dFpRVU42UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGTkJRVk1zUTBGQlF6dFpRVVYwUWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU42UWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFTkJRVU03UzBGQlFUdEpRVVZUTEdGQlFXRXNRMEZCUXl4aFFVRmhMRWRCUVVjc1IwRkJSenRSUVVONlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUk3V1VGRE5VSXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVTNSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5hTEVOQlFVTTdTVUZGVXl4VlFVRlZPMUZCUTJ4Q0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV6dFpRVU12UkN4UFFVRlBPMUZCUlZRc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzFGQlJXaENMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRM2hETEV0QlFVc3NTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhGUVVGRkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hGUVVGRk8xbEJRemRETEUxQlFVMHNUMEZCVHl4SFFVRlhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOMFJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzV1VGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMU5CUTJ4RU8xRkJSVVFzYVVaQlFXbEdPMUZCUTJwR0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExHdENRVUZyUWl4RlFVRkZMRU5CUVVNN1VVRkRNMFFzTWtkQlFUSkhPMUZCUXpOSExHZEVRVUZuUkR0UlFVVm9SQ3hKUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRha01zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZiRUlzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4UFFVRlBMRVZCUVVVN1dVRkRka0lzU1VGQlNTeERRVUZETEVkQlFXMUNMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVVM1F5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOT0xFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RlFVRkZMRU5CUVVNN1owSkJRM3BDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRoUVVOcVFqdFpRVVZFTEUxQlFVMHNTVUZCU1N4SFFVRmhMRWxCUVVrc1EwRkJReXhSUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZWtNc1MwRkJTeXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVTdaMEpCUXpkRExFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVTjZReXhOUVVGTkxFTkJRVU1zUjBGQlZ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTTdaMEpCUTNwRUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNN2IwSkJRMmhDTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxHMUNRVUZ0UWl4RlFVRkZMRU5CUVVNN1owSkJRM2hETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dGhRVU51UWp0VFFVTkdPMUZCUlVRc05FSkJRVFJDTzFGQlF6VkNMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlF6ZERMSGxEUVVGNVF6dFpRVVY2UXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRiRU1zUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVazdaMEpCUTNaRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1VVRkJVU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0VFFVTjJSVHRSUVVORUxGbEJRVms3VVVGRldpeE5RVUZOTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdVVUZEYkVNc1RVRkJUU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETTBRc2JVWkJRVzFHTzFGQlJXNUdMREJDUVVFd1FqdFJRVU14UWl4TFFVRkxMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU1zUlVGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU0zUXl4TlFVRk5MRWxCUVVrc1IwRkJlVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE4wVXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNN1dVRkZMME1zU1VGQlNTeERRVUZETEVkQlFWY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVWb1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEYWtRc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITzI5Q1FVTTVRaXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0eFFrRkROVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhPMjlDUVVOdVF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0eFFrRkRUaXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhPMjlDUVVOdVFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPM0ZDUVVOUUxHOUNRVUZ2UWp0dlFrRkRka0lzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTmtMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzUzBGQlN5eE5RVUZOTEV0QlFVc3NTVUZCU1N4UFFVRlBMRVZCUVVVN1owSkJRek5DTEUxQlFVMHNUVUZCVFN4SFFVRjNRaXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpkRExEaENRVUU0UWp0blFrRkRPVUlzVFVGQlRTeERRVUZETEVkQlFWY3NVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhMUVVGTExFZEJRVWNzVVVGQlVTeERRVUZETzJkQ1FVVjBSQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRia1lzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0aFFVTlNPMU5CUTBZN1VVRkRSQ3haUVVGWk8wbEJRMlFzUTBGQlF6dEpRVVZFTERKRFFVRXlRenRKUVVNelF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrN08xRkJRMnhDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRaUVVOb1FpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTXpRaXhKUVVGSkxFTkJRVU1zVDBGQlVTeERRVUZETEZOQlFWTXNSMEZCUnl4eFEwRkJjVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRXRCUVVzc1EwRkJRenRuUWtGRGVFWXNTVUZCU1N4RFFVRkRMRTlCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXp0aFFVTnNRenRwUWtGQlRUdG5Ra0ZEVEN4SlFVRkpMRU5CUVVNc1QwRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMkZCUTNSRE8xTkJRMFk3VVVGRlJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdXVUZETjBRc1QwRkJUenRSUVVWVUxFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzWkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVVZtTEVsQlFVa3NUVUZCVFR0WlFVTlNMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVVZ3UWl4RFFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03VVVGRGJrSXNRMEZCUXl4RFFVRkRMRk5CUVZNc1IwRkJSeXhQUVVGUExFTkJRVU03VVVGRGRFSXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRlRVFzUTBGQlF5eERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRE8xRkJSVzVETERCRFFVRXdRenRSUVVNeFF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4aFFVRmhMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRkRVFzVDBGQlR6dFJRVVZVTERSQ1FVRTBRanRSUVVNMVFpeERRVUZETEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1VVRkRia0lzUTBGQlF5eERRVUZETEZOQlFWTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1VVRkRkRUlzUTBGQlF5eERRVUZETEZOQlFWTXNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRka0lzUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4MVEwRkJkVU1zUTBGQlF6dFJRVU5xUkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGFFY3NUVUZCVFN4TlFVRk5MRWRCUVVjc1pVRkJaU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NaVUZCWlN4RFFVRkRPMUZCUlRkSExFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZPMWxCUXpkRExFMUJRVTBzUjBGQlJ5eEhRVUZwUWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF5OURMRU5CUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dFpRVU51UWl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVOYUxFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkRaaXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXpSQ3hEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF6VkNPMUZCUTBRc0swSkJRU3RDTzFGQlJTOUNMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlF6ZERMRXRCUVVzc1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlEzcEZMRWxCUVVrc1QwRkJUeXhMUVVGTExFZEJRVWNzUlVGQlJUdHZRa0ZEYmtJc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0dlFrRkZlRUlzVFVGQlRTeFRRVUZUTEVkQlFVY3NkVU5CUVhWRExFTkJRVU03YjBKQlF6RkVMREJFUVVFd1JEdHZRa0ZETVVRc1RVRkJUU3h4UWtGQmNVSXNSMEZCUnl4SlFVRkpMRU5CUVVNN2IwSkJRMjVETEUxQlFVMHNjVUpCUVhGQ0xFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVVnVReXhEUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdiMEpCUTI1Q0xFTkJRVU1zUTBGQlF5eFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRPMjlDUVVNMVFpeERRVUZETEVOQlFVTXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGFFSXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN2IwSkJRM3BETEVOQlFVTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1RVRkJRU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc2JVTkJRVWtzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03YjBKQlF6TkVMRU5CUVVNc1EwRkJReXhUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETzI5Q1FVTnlRaXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEZOQlFWTXNRMEZCUXp0dlFrRkRia0lzSzBOQlFTdERPMjlDUVVNdlF5eE5RVUZOTEVkQlFVY3NSMEZCWjBJc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0dlFrRkZhRVFzZFVOQlFYVkRPMjlDUVVOMlF5eDVSa0ZCZVVZN2IwSkJSWHBHTEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUTFvc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4eFFrRkJjVUlzUlVGRE0wUXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUTJwQ0xFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN2FVSkJRMmhFTzJGQlEwWTdVMEZEUmp0SlFVTklMRU5CUVVNN1NVRkZUeXhSUVVGUk8xRkJRMlFzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU0xUWl4UFFVRlBPMUZCUlZRc1NVRkJTU3hMUVVGTExFZEJRVmNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRM0pFTEVsQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJUdFpRVU5vUWl4TlFVRk5MRTFCUVUwc1IwRkJWeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4TlFVRk5MRU5CUVVNN1dVRkRka1FzVFVGQlRTeE5RVUZOTEVkQlFWY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzUzBGQlN5eERRVUZETzFsQlEzSkVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRjRVFzUzBGQlN5eEhRVUZITEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRkRUlzVFVGQlRTeEhRVUZITEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRlRUlzU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFdEJRVXNzUTBGQlF6dFRRVU5zUkR0UlFVVkVMRTFCUVUwc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRSUVVOc1F5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRXRCUVVzc1NVRkJTU3hEUVVGRE8xRkJSWFpETEc5R1FVRnZSanRSUVVOd1JpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zVVVGQlVTeEZRVUZGTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeE5RVUZOTEZsQlFWa3NSMEZCVnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU53UkN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eFpRVUZaTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlRkRUxEWkNRVUUyUWp0UlFVTTNRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc2MwTkJRWE5ETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4TFFVRkxMRWxCUVVrc1EwRkJRenRaUVVNM1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXp0WlFVTjJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0VFFVTm9SVHRoUVVGTk8xbEJRMHdzT0VKQlFUaENPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRE8xbEJRM1pFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUjBGQlJ5eG5Ra0ZCWjBJc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUlRsRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFTkJRVU03V1VGRmNFVXNjVUpCUVhGQ08xbEJRM0pDTEVsQlFVa3NZVUZCWVN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMFFpeFJRVUZSTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUlVGQlJUdG5Ra0ZEYUVNc1MwRkJTeXhMUVVGTE8yOUNRVU5TTEdGQlFXRXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRMnhDTEUxQlFVMDdaMEpCUTFJc1MwRkJTeXhSUVVGUk8yOUNRVU5ZTEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOdVJTeE5RVUZOTzJkQ1FVTlNMRXRCUVVzc1VVRkJVVHR2UWtGRFdDeGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU03YjBKQlF6ZEVMRTFCUVUwN1lVRkRVRHRaUVVORUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eGhRVUZoTEVsQlFVa3NSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenRaUVVVM1JTeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFMUJRVTBzUlVGQlJUdG5Ra0ZEYmtNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGNrVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEZsQlFWa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOcVJEdHBRa0ZCVFR0blFrRkRUQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1dVRkJXU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0aFFVTnNSVHRUUVVOR08xRkJSVVFzYVVKQlFXbENPMUZCUTJwQ0xEWkVRVUUyUkR0UlFVTTNSQ3cyUkVGQk5rUTdVVUZETjBRc05rUkJRVFpFTzFGQlF6ZEVMRFpFUVVFMlJEdFJRVU0zUkN4WFFVRlhPMUZCUTFnc01rUkJRVEpFTzFGQlF6TkVMQ3RFUVVFclJEdEpRVU5xUlN4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTkpMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRMnhGTEVsQlFVa3NSMEZCUnl4SFFVRnpRaXhKUVVGSkxFTkJRVU03VVVGRGJFTXNVVUZCVVN4TlFVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRM2hDTEV0QlFVc3NWVUZCVlN4RFFVRkRMSGRDUVVGM1FqdG5Ra0ZEZEVNc1IwRkJSeXhIUVVGSExHdENRVUZyUWl4RFFVRkRMRlZCUVZVc1EwRkJRenRuUWtGRGNFTXNUVUZCVFR0WlFVTlNMRXRCUVVzc1YwRkJWeXhEUVVGRExIZENRVUYzUWp0blFrRkRka01zUjBGQlJ5eEhRVUZITEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGQlF6dG5Ra0ZEZGtNc1RVRkJUVHRUUVVOUU8xRkJRMFFzVFVGQlRTeExRVUZMTEVkQlFXZENMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU03VVVGRmVFWXNUVUZCVFN4clFrRkJhMElzUjBGQlowTTdXVUZEZEVRc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGQlF6dFpRVU16UlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzYTBKQlFXdENMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xTkJRM2hGTEVOQlFVTTdVVUZEUml4blJFRkJaMFE3VVVGRGFFUXNUVUZCVFN4eFFrRkJjVUlzUjBGQllTeHJRa0ZCYTBJN1lVRkRka1FzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8xRkJRMnhFTEVsQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrN1dVRkRaaXhIUVVGSExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMWxCUlc1RkxFZEJRVWNzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRmFrTXNUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVdsQ0xFVkJRVVVzVTBGQmFVSXNSVUZCUlN4UlFVRnpRanRSUVVNeFJTeE5RVUZOTEVsQlFVa3NSMEZCTkVJc1JVRkJSU3hEUVVGRE8xRkJRM3BETEVsQlFVa3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeEpRVUZKTEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkZka0lzUzBGQlN5eE5RVUZOTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRk8xbEJRMjVETEUxQlFVMHNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVVV6UWl4SlFVRkpMRmRCUVZjc1NVRkJTU3hKUVVGSk8yZENRVU55UWl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dHBRa0ZEZGtJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeExRVUZMTEZkQlFWYzdaMEpCUTJ4RExGVkJRVlVzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZGY2tJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEZOQlFWTXNSVUZCUlR0blFrRkRNMElzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVN2IwSkJRM0JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU03ZDBKQlEyUXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEWkN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJsQ1FVTmtPMkZCUTBZN1UwRkRSanRSUVVORUxFOUJRVThzUlVGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRlZCUVZVc1JVRkJSU3hWUVVGVkxFVkJRVU1zUTBGQlF6dEpRVU01UXl4RFFVRkRPMGxCUlUwc1RVRkJUU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRWxCUVd0Q0xFVkJRVVVzVVVGQmNVSXNSVUZCUlN4WlFVRnZRaXhIUVVGSE8xRkJRM0JITEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGVExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRek5GTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRmRrSXNUVUZCVFN4TFFVRkxMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRek5DTEUxQlFVMHNVMEZCVXl4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVNdlFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRWxCUVVrc1JVRkJSVHRaUVVOd1FpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY0VNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM3BETzFGQlEwUXNNRVpCUVRCR08xRkJRekZHTEUxQlFVMHNTMEZCU3l4SFFVRlhMRWxCUVVrc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzaERMRTFCUVUwc1UwRkJVeXhIUVVGWExFbEJRVWtzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTJoRUxFMUJRVTBzUjBGQlJ5eEhRVUZYTEdkQ1FVRm5RaXhEUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRU5CUVVNN1NVRkZSQ3dyUkVGQkswUTdTVUZETDBRc2VVWkJRWGxHTzBsQlEzcEdMSEZEUVVGeFF6dEpRVU55UXl4blJVRkJaMFU3U1VGRGFFVXNUVUZCVFR0SlFVTk9MRzlGUVVGdlJUdEpRVU53UlN4blJrRkJaMFk3U1VGRGFFWXNkVUpCUVhWQ08wbEJRM1pDTERaRFFVRTJRenRKUVVNM1F5d3JSRUZCSzBRN1NVRkRMMFFzYVVWQlFXbEZPMGxCUTJwRkxIRkNRVUZ4UWp0SlFVTnlRaXhwUWtGQmFVSTdTVUZEYWtJc1ZVRkJWVHRKUVVOV0xGRkJRVkU3U1VGRFVpeE5RVUZOTzBsQlEwNHNaMEpCUVdkQ08wbEJRMmhDTEVsQlFVazdTVUZGUnl4TlFVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRV2RDT3p0UlFVTXhReXhOUVVGTkxHTkJRV01zUjBGQlJ5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMUZCUTNwRkxFbEJRVWtzVFVGQlRTeEhRVUZ4UWl4TlFVRkJMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlR0WlFVTjZSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEZUVNc1QwRkJUeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOeVJDeERRVUZETEVOQlFVTXNiVU5CUVVrc1NVRkJTU3hEUVVGRE8xRkJRMWdzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4alFVRmpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU03V1VGRGRFTXNUVUZCVFN4SFFVRkhMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU0zUWl4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBsQlNVUTdPenRQUVVkSE8wbEJRMGtzVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRlJPMUZCUTNCRExFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCYlVJc1IwRkJSeXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03WVVGRGJrWXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJiMElzUlVGQlJTeEZRVUZGTzFsQlF6VkNMRWxCUVVrc1NVRkJXU3hEUVVGRE8xbEJRMnBDTEUxQlFVMHNRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTm9RaXhKUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCVlN4RlFVRkZPMjlDUVVNelFpeEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZET1VJN2NVSkJRVTA3YjBKQlEwd3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenR2UWtGRFZpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMR2xDUVVGcFFpeERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03YVVKQlF5OUVPMkZCUTBZN2FVSkJRVTA3WjBKQlEwd3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVOV08xbEJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTTdVVUZEWkN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVVZtTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenRKUVVWRU96czdUMEZIUnp0SlFVTkpMRTFCUVUwc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4VFFVRnBRanRSUVVOMFJDeFBRVUZQTEVOQlFVTXNSMEZCVnl4RlFVRkZMRVZCUVVVN1dVRkRja0lzVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJRemxDTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBrc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZoTEVWQlFVVXNVMEZCYVVJN1VVRkRlRVFzU1VGQlNTeExRVUZMTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU42UXl4UFFVRlBMRTlCUVU4c1EwRkJReXhsUVVGbExFTkJRVU03WVVGRE5VSXNTVUZCU1N4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEZkQlFWY3NRMEZCUXp0WlFVTnNSQ3hQUVVGUExFOUJRVThzUTBGQlF5eDNRa0ZCZDBJc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU55UkRzN08xbEJSMGs3TzFsQlJVWXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh2UWtGQmIwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWcVJDd3dRa0ZCTUVJN1NVRkROVUlzUTBGQlF6dEpRVVZOTEUxQlFVMHNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eEhRVUZqTzFGQlF5OURMRWxCUVVrc1IwRkJSeXhEUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFN1dVRkRNVU1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3MlFrRkJOa0lzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4aFFVRmhMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJSV3hHTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlF6RkRMRTlCUVU4c1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkRMME1zUTBGQlF6czdRVUYyZEVKaExHMUNRVUZYTEVkQlFVY3NZVUZCWVN4RFFVRkRPMEZCUXpOQ0xHMUNRVUZYTEVkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRnpjRUo2UWl4cFFrRkJVeXhIUVVGSExIRkNRVUZ4UWl4RFFVRkRPMEZCYTBWcVJDdzRSa0ZCT0VZN1FVRkRMMFVzYTBKQlFWVXNSMEZCSzBJN1NVRkRkRVFzVTBGQlV5eEZRVUZGTEVkQlFVYzdTVUZEWkN4UFFVRlBMRVZCUVVVc1IwRkJSenRKUVVOYUxFOUJRVThzUlVGQlJTeEhRVUZITzBsQlExb3NUMEZCVHl4RlFVRkZMRWRCUVVjN1EwRkRZaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWjNKdmF5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaM0p2YXljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JseHVhVzF3YjNKMElIZDFJR1p5YjIwZ0ozZDFKenRjYm1sdGNHOXlkQ0FxSUdGeklISjRhbk1nWm5KdmJTQW5jbmhxY3ljN1hHNWNibWx0Y0c5eWRDQjdWbVZqZEc5eWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlM1psWTNSdmNreGxibWQwYUN3Z2RtVmpkRzl5Ukc5MFVISnZaSFZqZEgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdEJiV2x1YjJGamFXUnpMQ0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE45SUdaeWIyMGdKeTR1TDJGdGFXNXZZV05wWkhNbk8xeHVhVzF3YjNKMElIdE9kV05zWlc5MGFXUmxjeXdnVG5WamJHVnZkR2xrWlhOUVlXeGxkSFJsYzMwZ1puSnZiU0FuTGk0dmJuVmpiR1Z2ZEdsa1pYTW5PMXh1YVcxd2IzSjBJSHRWYm10dWIzZHVVMlZ4VUdGc1pYUjBaU3dnVlc1cmJtOTNibE5sY1ZCaGJHVjBkR1Z6ZlNCbWNtOXRJQ2N1TGk5MWJtdHViM2R1Snp0Y2JtbHRjRzl5ZENCN1UyVnhVR0ZzWlhSMFpYMGdabkp2YlNBbkxpNHZjMlZ4TFhCaGJHVjBkR1Z6Snp0Y2JtbHRjRzl5ZENCN1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JseHVaR1ZqYkdGeVpTQnRiMlIxYkdVZ0oyUmhkR0ZuY205ckxXRndhUzl6Y21NdlozSnBaQ2NnZTF4dUlDQnBiblJsY21aaFkyVWdVbVZqZENCN1hHNGdJQ0FnWTI5dWRHRnBibk1vZURvZ2JuVnRZbVZ5TENCNU9pQnVkVzFpWlhJcE9pQmliMjlzWldGdU8xeHVJQ0I5WEc1OVhHNWNibVJsWTJ4aGNtVWdaMnh2WW1Gc0lIdGNiaUFnYVc1MFpYSm1ZV05sSUVoVVRVeERZVzUyWVhORmJHVnRaVzUwSUh0Y2JpQWdJQ0JuWlhSRGRYSnpiM0pRYjNOcGRHbHZiaWhsZG1WdWREb2dUVzkxYzJWRmRtVnVkQ2s2SUVSSExsQnZhVzUwTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRTF2Ym05dFpYSkdjbVZ4Y3lBOUlIc2dXMjA2SUhOMGNtbHVaMTA2SUc1MWJXSmxjaUI5TzF4dVpYaHdiM0owSUhSNWNHVWdVMlZ4UTI5c1UzUmhkSE1nUFNCN0lHWnlaWEU2SUUxdmJtOXRaWEpHY21WeGN5d2djMkZ0WlV4bGJtZDBhRG9nWW05dmJHVmhiaUI5WEc1bGVIQnZjblFnZEhsd1pTQlRjR3hwZEhSbGNrWjFibU1nUFNBb2MyVnhPaUJ6ZEhKcGJtY3BJRDArSUhOMGNtbHVaMXRkTzF4dVhHNUlWRTFNUTJGdWRtRnpSV3hsYldWdWRDNXdjbTkwYjNSNWNHVXVaMlYwUTNWeWMyOXlVRzl6YVhScGIyNGdQU0JtZFc1amRHbHZiaWhsZG1WdWREb2dUVzkxYzJWRmRtVnVkQ2s2SUVSSExsQnZhVzUwSUh0Y2JpQWdZMjl1YzNRZ2NtVmpkQ0E5SUhSb2FYTXVaMlYwUW05MWJtUnBibWREYkdsbGJuUlNaV04wS0NrN1hHNGdJSEpsZEhWeWJpQnVaWGNnUkVjdVVHOXBiblFvWlhabGJuUXVZMnhwWlc1MFdDQXRJSEpsWTNRdWJHVm1kQ3dnWlhabGJuUXVZMnhwWlc1MFdTQXRJSEpsWTNRdWRHOXdLVHRjYm4wN1hHNWNia1JITGxKbFkzUXVjSEp2ZEc5MGVYQmxMbU52Ym5SaGFXNXpJRDBnWm5WdVkzUnBiMjRvZURvZ2JuVnRZbVZ5TENCNU9pQnVkVzFpWlhJcE9pQmliMjlzWldGdUlIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWJHVm1kQ0E4UFNCNElDWW1JSGdnUEQwZ2RHaHBjeTV5YVdkb2RDQW1KaUIwYUdsekxuUnZjQ0E4UFNCNUlDWW1JSGtnUEQwZ2RHaHBjeTVpYjNSMGIyMDdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVUc5emFYUnBiMjVOYjI1dmJXVnlTVzVtYnlCN1hHNGdJQzhxS2lCVFpYRjFaVzVqWlhNZ1kyOTFiblFnZDJsMGFDQnRiMjV2YldWeUlHbHVJSEJ2YzJsMGFXOXVYRzRnSUNBcUwxeHVJQ0JqYjNWdWREb2diblZ0WW1WeU8xeHVYRzRnSUM4cUtpQlNaVzFsYldKbGNpQnpZM0psWlc0Z1kyOXZjbVJ6SUhKbFkzUmNiaUFnSUNvdlhHNGdJR0p2ZFc1a2N6b2dSRWN1VW1WamREdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQjBhR2x6TG1OdmRXNTBJRDBnTUR0Y2JpQWdJQ0IwYUdsekxtSnZkVzVrY3lBOUlHNWxkeUJFUnk1U1pXTjBLREFzSURBc0lEQXNJREFwTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJRYjNOcGRHbHZia2x1Wm04Z2UxeHVJQ0J3ZFdKc2FXTWdjbVZoWkc5dWJIa2dibUZ0WlRvZ2MzUnlhVzVuTzF4dUlDQm1jbVZ4T2lCN0lGdHRPaUJ6ZEhKcGJtZGRPaUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUgwN1hHNGdJSEp2ZDBOdmRXNTBPaUJ1ZFcxaVpYSTdYRzVjYmlBZ0x5b3FJR1p5WlhFZ1BTQjdmU3dnY205M1EyOTFiblFnUFNBd1hHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElFNWhiV1VnYjJZZ2NHOXphWFJwYjI0Z0tDY3hNVEZCSnl3Z0p6RXhNUzR4Snl3Z1pYUmpLVnh1SUNBZ0tpOWNiaUFnWTI5dWMzUnlkV04wYjNJb2JtRnRaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdkR2hwY3k1dVlXMWxJRDBnYm1GdFpUdGNiaUFnSUNCMGFHbHpMbVp5WlhFZ1BTQjdmVHRjYmlBZ0lDQjBhR2x6TG5KdmQwTnZkVzUwSUQwZ01EdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1YyVmlURzluYnlCbGVIUmxibVJ6SUVSSExrcHpWbWxsZDJWeUlIdGNiaUFnY0hWaWJHbGpJSE4wWVhScFl5QnlaWE5wWkhWbGMxTmxkQ0E5SUNkdWRXTnNaVzkwYVdSbGN5YzdYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJSFpwWlhkbGNrTnZkVzUwT2lCdWRXMWlaWElnUFNBdE1UdGNibHh1SUNCd2NtbDJZWFJsSUhacFpYZGxja2xrT2lCdWRXMWlaWElnUFNBdE1UdGNiaUFnY0hKcGRtRjBaU0JwYm1sMGFXRnNhWHBsWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dVhHNGdJQzh2SUhCeWFYWmhkR1VnY21WaFpHOXViSGtnWTI5c2IzSlRZMmhsYldVNklFTnZiRzl5VTJOb1pXMWxJRDBnUTI5c2IzSlRZMmhsYldWelcwNTFZMnhsYjNScFpHVnpWMlZpVEc5bmJ5NXlaWE5wWkhWbGMxTmxkRjA3WEc0Z0lIQnliM1JsWTNSbFpDQmpjRG9nVTJWeFVHRnNaWFIwWlNCOElHNTFiR3dnUFNCdWRXeHNPMXh1WEc0Z0lIQnlhWFpoZEdVZ2FHOXpkRDg2SUVoVVRVeEVhWFpGYkdWdFpXNTBPMXh1SUNCd2NtbDJZWFJsSUcxelowaHZjM1EvT2lCSVZFMU1SV3hsYldWdWREdGNiaUFnY0hKcGRtRjBaU0JqWVc1MllYTS9PaUJJVkUxTVEyRnVkbUZ6Uld4bGJXVnVkRHRjYmlBZ2NISnBkbUYwWlNCemJHbGtaWEkvT2lCRVJ5NVNZVzVuWlZOc2FXUmxjanRjYmlBZ2NISnBkbUYwWlNCMFpYaDBRbUZ6Wld4cGJtVTZJRU5oYm5aaGMxUmxlSFJDWVhObGJHbHVaVHRjYmx4dUlDQndjbWwyWVhSbElHRjRhWE5JWldsbmFIUTZJRzUxYldKbGNpQTlJREV5TzF4dVhHNGdJSEJ5YVhaaGRHVWdjMlZ4UTI5c09pQkVSeTVEYjJ4MWJXNDhjM1J5YVc1blBpQjhJRzUxYkd3Z1BTQnVkV3hzTzF4dUlDQndjbWwyWVhSbElITndiR2wwZEdWeU9pQlRjR3hwZEhSbGNrWjFibU1nZkNCdWRXeHNJRDBnYm5Wc2JEdGNiaUFnTHk4Z2NISnBkbUYwWlNCdFlYaE1aVzVuZEdnNklHNTFiV0psY2lBOUlERXdNRHRjYmlBZ2NISnBkbUYwWlNCd2IzTnBkR2x2Ym5NNklGQnZjMmwwYVc5dVNXNW1iMXRkSUQwZ1cxMDdYRzVjYmlBZ2NISnBkbUYwWlNCeWIzZHpUV0Z6YTJWa09pQnVkVzFpWlhJZ1BTQXdPMXh1SUNCd2NtbDJZWFJsSUhKdmQzTk9kV3hzT2lCdWRXMWlaWElnUFNBd08xeHVYRzRnSUM4dklGWnBaWGRsY2lkeklIQnliM0JsY25ScFpYTWdLR3hwYTJWc2VTQjBhR1Y1SUhOb2IzVnNaQ0JpWlNCd2RXSnNhV01nYzI4Z2RHaGhkQ0IwYUdWNUlHTmhiaUJpWlNCelpYUWdiM1YwYzJsa1pTbGNiaUFnY0hKcGRtRjBaU0JmY0c5emFYUnBiMjVYYVdSMGFEb2diblZ0WW1WeU8xeHVJQ0J3ZFdKc2FXTWdjRzl6YVhScGIyNVhhV1IwYURvZ2JuVnRZbVZ5TzF4dUlDQndkV0pzYVdNZ2JXbHVTR1ZwWjJoME9pQnVkVzFpWlhJN1hHNGdJSEIxWW14cFl5QnRZWGhJWldsbmFIUTZJRzUxYldKbGNqdGNiaUFnY0hWaWJHbGpJR052Ym5OcFpHVnlUblZzYkZObGNYVmxibU5sY3pvZ1ltOXZiR1ZoYmp0Y2JpQWdjSFZpYkdsaklITmxjWFZsYm1ObFEyOXNkVzF1VG1GdFpUb2djM1J5YVc1bklId2diblZzYkR0Y2JpQWdjSFZpYkdsaklITjBZWEowVUc5emFYUnBiMjVPWVcxbE9pQnpkSEpwYm1jZ2ZDQnVkV3hzTzF4dUlDQndkV0pzYVdNZ1pXNWtVRzl6YVhScGIyNU9ZVzFsT2lCemRISnBibWNnZkNCdWRXeHNPMXh1SUNCd2RXSnNhV01nWm1sNFYybGtkR2c2SUdKdmIyeGxZVzQ3WEc0Z0lIQjFZbXhwWXlCMlpYSjBhV05oYkVGc2FXZHViV1Z1ZERvZ2MzUnlhVzVuSUh3Z2JuVnNiRHRjYmlBZ2NIVmliR2xqSUdodmNtbDZiMjUwWVd4QmJHbG5ibTFsYm5RNklITjBjbWx1WnlCOElHNTFiR3c3WEc0Z0lIQjFZbXhwWXlCbWFYUkJjbVZoT2lCaWIyOXNaV0Z1TzF4dUlDQndkV0pzYVdNZ2MyaHlhVzVyUlcxd2RIbFVZV2xzT2lCaWIyOXNaV0Z1TzF4dUlDQndkV0pzYVdNZ2MydHBjRVZ0Y0hSNVVHOXphWFJwYjI1ek9pQmliMjlzWldGdU8xeHVYRzRnSUhCeWFYWmhkR1VnY0c5emFYUnBiMjVPWVcxbGN6b2djM1J5YVc1blcxMGdQU0JiWFR0Y2JseHVJQ0J3Y21sMllYUmxJSE4wWVhKMFVHOXphWFJwYjI0NklHNTFiV0psY2lBOUlDMHhPMXh1WEc0Z0lIQnlhWFpoZEdVZ1pXNWtVRzl6YVhScGIyNDZJRzUxYldKbGNpQTlJQzB4TzF4dVhHNGdJQzhxS2lCR2IzSWdjM1JoY25SUWIzTnBkR2x2YmlCbGNYVmhiSE1nZEc4Z1pXNWtVRzl6YVhScGIyNGdUR1Z1WjNSb0lHbHpJREVnS2k5Y2JpQWdjSEpwZG1GMFpTQm5aWFFnVEdWdVozUm9LQ2s2SUc1MWJXSmxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJpQThQU0IwYUdsekxtVnVaRkJ2YzJsMGFXOXVJRDhnZEdocGN5NWxibVJRYjNOcGRHbHZiaUF0SUhSb2FYTXVjM1JoY25SUWIzTnBkR2x2YmlBcklERWdPaUF3TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCMmFXVjNVM1ZpY3pvZ1UzVmljMk55YVhCMGFXOXVXMTBnUFNCYlhUdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQnpkWEJsY2lncE8xeHVYRzRnSUNBZ2RHaHBjeTUyYVdWM1pYSkpaQ0E5SUZkbFlreHZaMjh1ZG1sbGQyVnlRMjkxYm5RN1hHNGdJQ0FnVjJWaVRHOW5ieTUyYVdWM1pYSkRiM1Z1ZENBclBTQXhPMXh1WEc0Z0lDQWdkR2hwY3k1MFpYaDBRbUZ6Wld4cGJtVWdQU0FuZEc5d0p6dGNibHh1SUNBZ0lIUm9hWE11WDNCdmMybDBhVzl1VjJsa2RHZ2dQU0IwYUdsekxuQnZjMmwwYVc5dVYybGtkR2dnUFNCMGFHbHpMbVpzYjJGMEtDZHdiM05wZEdsdmJsZHBaSFJvSnl3Z01UWXZLaXhjYmlBZ0lDQWdJSHRsWkdsMGIzSTZJQ2R6Ykdsa1pYSW5MQ0J0YVc0NklEUXNJRzFoZURvZ05qUXNJSEJ2YzNSbWFYZzZJQ2R3ZUNkOUtpOHBPMXh1SUNBZ0lIUm9hWE11YldsdVNHVnBaMmgwSUQwZ2RHaHBjeTVtYkc5aGRDZ25iV2x1U0dWcFoyaDBKeXdnTlRBdktpeGNiaUFnSUNBZ0lIdGxaR2wwYjNJNklDZHpiR2xrWlhJbkxDQnRhVzQ2SURJMUxDQnRZWGc2SURJMU1Dd2djRzl6ZEdacGVEb2dKM0I0SjMwcUx5azdYRzRnSUNBZ2RHaHBjeTV0WVhoSVpXbG5hSFFnUFNCMGFHbHpMbVpzYjJGMEtDZHRZWGhJWldsbmFIUW5MQ0F4TURBdktpeGNiaUFnSUNBZ0lIdGxaR2wwYjNJNklDZHpiR2xrWlhJbkxDQnRhVzQ2SURJMUxDQnRZWGc2SURVd01Dd2djRzl6ZEdacGVEb2dKM0I0SjMwcUx5azdYRzVjYmlBZ0lDQjBhR2x6TG1OdmJuTnBaR1Z5VG5Wc2JGTmxjWFZsYm1ObGN5QTlJSFJvYVhNdVltOXZiQ2duWTI5dWMybGtaWEpPZFd4c1UyVnhkV1Z1WTJWekp5d2dabUZzYzJVcE8xeHVJQ0FnSUhSb2FYTXVjMlZ4ZFdWdVkyVkRiMngxYlc1T1lXMWxJRDBnZEdocGN5NXpkSEpwYm1jb0ozTmxjWFZsYm1ObFEyOXNkVzF1VG1GdFpTY3NJRzUxYkd3cE8xeHVYRzRnSUNBZ2RHaHBjeTV6ZEdGeWRGQnZjMmwwYVc5dVRtRnRaU0E5SUhSb2FYTXVjM1J5YVc1bktDZHpkR0Z5ZEZCdmMybDBhVzl1VG1GdFpTY3NJRzUxYkd3cE8xeHVJQ0FnSUhSb2FYTXVaVzVrVUc5emFYUnBiMjVPWVcxbElEMGdkR2hwY3k1emRISnBibWNvSjJWdVpGQnZjMmwwYVc5dVRtRnRaU2NzSUc1MWJHd3BPMXh1WEc0Z0lDQWdkR2hwY3k1bWFYaFhhV1IwYUNBOUlIUm9hWE11WW05dmJDZ25abWw0VjJsa2RHZ25MQ0JtWVd4elpTazdYRzVjYmlBZ0lDQjBhR2x6TG5abGNuUnBZMkZzUVd4cFoyNXRaVzUwSUQwZ2RHaHBjeTV6ZEhKcGJtY29KM1psY25ScFkyRnNRV3hwWjI1dFpXNTBKeXdnSjIxcFpHUnNaU2NzWEc0Z0lDQWdJQ0I3WTJodmFXTmxjem9nV3lkMGIzQW5MQ0FuYldsa1pHeGxKeXdnSjJKdmRIUnZiU2RkZlNrN1hHNGdJQ0FnZEdocGN5NW9iM0pwZW05dWRHRnNRV3hwWjI1dFpXNTBJRDBnZEdocGN5NXpkSEpwYm1jb0oyaHZjbWw2YjI1MFlXeEJiR2xuYm0xbGJuUW5MQ0FuWTJWdWRHVnlKeXhjYmlBZ0lDQWdJSHRqYUc5cFkyVnpPaUJiSjJ4bFpuUW5MQ0FuWTJWdWRHVnlKeXdnSjNKcFoyaDBKMTE5S1R0Y2JpQWdJQ0IwYUdsekxtWnBkRUZ5WldFZ1BTQjBhR2x6TG1KdmIyd29KMlpwZEVGeVpXRW5MQ0IwY25WbEtUdGNiaUFnSUNCMGFHbHpMbk5vY21sdWEwVnRjSFI1VkdGcGJDQTlJSFJvYVhNdVltOXZiQ2duYzJoeWFXNXJSVzF3ZEhsVVlXbHNKeXdnZEhKMVpTazdYRzRnSUNBZ2RHaHBjeTV6YTJsd1JXMXdkSGxRYjNOcGRHbHZibk1nUFNCMGFHbHpMbUp2YjJ3b0ozTnJhWEJGYlhCMGVWQnZjMmwwYVc5dWN5Y3NJR1poYkhObEtUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ2FXNXBkQ2dwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXBibWwwYVdGc2FYcGxaQ2tnZTF4dUlDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25WMlZpVEc5bmJ5QnpaV052Ym1RZ2FXNXBkR2xoYkdsNllYUnBiMjRoSnlrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBhV0ZzYVhwbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnZEdocGN5NW9aV3h3VlhKc0lEMGdKeTlvWld4d0wzWnBjM1ZoYkdsNlpTOTJhV1YzWlhKekwzZGxZaTFzYjJkdkxtMWtKenRjYmx4dUlDQWdJSFJvYVhNdWJYTm5TRzl6ZENBOUlIVnBMbVJwZGlnblRtOGdiV1Z6YzJGblpTY3BPMXh1SUNBZ0lIUm9hWE11YlhOblNHOXpkQzV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTWdQU0IxYVM1allXNTJZWE1vS1R0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1emRIbHNaUzUzYVdSMGFDQTlJQ2N4TURBbEp6dGNibHh1SUNBZ0lIUm9hWE11YUc5emRDQTlJSFZwTG1ScGRpaGJkR2hwY3k1dGMyZEliM04wTENCMGFHbHpMbU5oYm5aaGMxMHBPMXh1WEc0Z0lDQWdMeThnZEdocGN5NXpiR2xrWlhJZ1BTQjFhUzV5WVc1blpWTnNhV1JsY2lnd0xDQXlNQ3dnTWl3Z05TazdYRzRnSUNBZ0x5OGdkR2hwY3k1emJHbGtaWEl1Y205dmRDNXpkSGxzWlM1M2FXUjBhQ0E5SUNjeE1EQWxKenRjYmlBZ0lDQXZMeUIwYUdsekxuTnNhV1JsY2k1eWIyOTBMbk4wZVd4bExtaGxhV2RvZENBOUlDY3hNbkI0Snp0Y2JseHVJQ0FnSUdOdmJuTjBJR2RsZEUxdmJtOXRaWElnUFNBb2NEb2dSRWN1VUc5cGJuUXBPaUJiYm5WdFltVnlMQ0J6ZEhKcGJtY2dmQ0J1ZFd4c0xDQlFiM05wZEdsdmJrMXZibTl0WlhKSmJtWnZJSHdnYm5Wc2JGMGdQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdhbEJ2Y3lBOUlFMWhkR2d1Wm14dmIzSW9jQzU0SUM4Z2RHaHBjeTVmY0c5emFYUnBiMjVYYVdSMGFDazdYRzRnSUNBZ0lDQmpiMjV6ZENCd2IzTnBkR2x2YmlBOUlIUm9hWE11Y0c5emFYUnBiMjV6VzJwUWIzTmRPMXh1WEc0Z0lDQWdJQ0JwWmlBb2NHOXphWFJwYjI0Z1BUMDlJSFp2YVdRZ01DbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGdHFVRzl6TENCdWRXeHNMQ0J1ZFd4c1hUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2JXOXViMjFsY2pvZ2MzUnlhVzVuSUh3Z2RXNWtaV1pwYm1Wa0lEMGdUMkpxWldOMExtdGxlWE1vY0c5emFYUnBiMjR1Wm5KbGNTbGNiaUFnSUNBZ0lDQWdMbVpwYm1Rb0tHMHBJRDArSUhCdmMybDBhVzl1TG1aeVpYRmJiVjB1WW05MWJtUnpMbU52Ym5SaGFXNXpLSEF1ZUN3Z2NDNTVLU2s3WEc0Z0lDQWdJQ0JwWmlBb2JXOXViMjFsY2lBOVBUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdXMnBRYjNNc0lHNTFiR3dzSUc1MWJHeGRPMXh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdXMnBRYjNNc0lHMXZibTl0WlhJc0lIQnZjMmwwYVc5dUxtWnlaWEZiYlc5dWIyMWxjbDFkTzF4dUlDQWdJSDA3WEc1Y2JseHVJQ0FnSUM4dklIUm9hWE11YzNWaWN5NXdkWE5vS0hKNGFuTXVabkp2YlVWMlpXNTBQRTF2ZFhObFJYWmxiblErS0hSb2FYTXVZMkZ1ZG1GekxDQW5iVzkxYzJWdmRtVnlKeWt1YzNWaWMyTnlhV0psS0NobE9pQk5iM1Z6WlVWMlpXNTBLU0E5UGlCN1hHNGdJQ0FnTHk4Z2ZTa3BPMXh1WEc0Z0lDQWdkR2hwY3k1MmFXVjNVM1ZpY3k1d2RYTm9LSEo0YW5NdVpuSnZiVVYyWlc1MFBFMXZkWE5sUlhabGJuUStLSFJvYVhNdVkyRnVkbUZ6TENBbmJXOTFjMlZ0YjNabEp5a3VjM1ZpYzJOeWFXSmxLQ2hsT2lCTmIzVnpaVVYyWlc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11WTJGdWRtRnpLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQWdJR052Ym5OMElHRnlaM01nUFNCbElHRnpJRTF2ZFhObFJYWmxiblE3WEc0Z0lDQWdJQ0JqYjI1emRDQmJhbEJ2Y3l3Z2JXOXViMjFsY2wwZ1BTQm5aWFJOYjI1dmJXVnlLSFJvYVhNdVkyRnVkbUZ6TG1kbGRFTjFjbk52Y2xCdmMybDBhVzl1S0dGeVozTXBLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WkdGMFlVWnlZVzFsSUNZbUlIUm9hWE11YzJWeFEyOXNJQ1ltSUhSb2FYTXVjM0JzYVhSMFpYSWdKaVlnYlc5dWIyMWxjaWtnZTF4dUlDQWdJQ0FnSUNCMWFTNTBiMjlzZEdsd0xuTm9iM2RTYjNkSGNtOTFjQ2gwYUdsekxtUmhkR0ZHY21GdFpTd2dLR2xTYjNjcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6WlhFZ1BTQjBhR2x6TG5ObGNVTnZiQ0V1WjJWMEtHbFNiM2NwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhObGNVMGdQU0J6WlhFZ1B5QjBhR2x6TG5Od2JHbDBkR1Z5SVNoelpYRXBXM1JvYVhNdWMzUmhjblJRYjNOcGRHbHZiaUFySUdwUWIzTmRJRG9nYm5Wc2JEdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMlZ4VFNBOVBUMGdiVzl1YjIxbGNpQW1KaUIwYUdsekxtUmhkR0ZHY21GdFpTNW1hV3gwWlhJdVoyVjBLR2xTYjNjcE8xeHVJQ0FnSUNBZ0lDQjlMQ0JoY21kekxuZ2dLeUF4Tml3Z1lYSm5jeTU1SUNzZ01UWXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkV2t1ZEc5dmJIUnBjQzVvYVdSbEtDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTa3BPMXh1WEc0Z0lDQWdkR2hwY3k1MmFXVjNVM1ZpY3k1d2RYTm9LSEo0YW5NdVpuSnZiVVYyWlc1MFBFMXZkWE5sUlhabGJuUStLSFJvYVhNdVkyRnVkbUZ6TENBbmJXOTFjMlZrYjNkdUp5a3VjM1ZpYzJOeWFXSmxLQ2hsT2lCTmIzVnpaVVYyWlc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11WTJGdWRtRnpJSHg4SUdVdVluVjBkRzl1SUNFOUlEQXBYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1lYSm5jeUE5SUdVZ1lYTWdUVzkxYzJWRmRtVnVkRHRjYmlBZ0lDQWdJR052Ym5OMElGdHFVRzl6TENCdGIyNXZiV1Z5WFNBOUlHZGxkRTF2Ym05dFpYSW9kR2hwY3k1allXNTJZWE11WjJWMFEzVnljMjl5VUc5emFYUnBiMjRvWVhKbmN5a3BPMXh1WEc0Z0lDQWdJQ0F2THlCd2NtVjJaVzUwY3lCa1pYTmxiR1ZqZENCaGJHd2djbTkzY3lCcFppQjNaU0J0YVhOeklHMXZibTl0WlhJZ1ltOTFibVJ6WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVrWVhSaFJuSmhiV1VnSmlZZ2RHaHBjeTV6WlhGRGIyd2dKaVlnZEdocGN5NXpjR3hwZEhSbGNpQW1KaUJ0YjI1dmJXVnlLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR0YwWVVaeVlXMWxMbk5sYkdWamRHbHZiaTVwYm1sMEtDaHBVbTkzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ4SUQwZ2RHaHBjeTV6WlhGRGIyd2hMbWRsZENocFVtOTNLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6WlhGTklEMGdjMlZ4SUQ4Z2RHaHBjeTV6Y0d4cGRIUmxjaUVvYzJWeEtWdDBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNGdLeUJxVUc5elhTQTZJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlITmxjVTBnUFQwOUlHMXZibTl0WlhJZ0ppWWdkR2hwY3k1a1lYUmhSbkpoYldVdVptbHNkR1Z5TG1kbGRDaHBVbTkzS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTa3BPMXh1WEc0Z0lDQWdkR2hwY3k1MmFXVjNVM1ZpY3k1d2RYTm9LSFZwTG05dVUybDZaVU5vWVc1blpXUW9kR2hwY3k1eWIyOTBLUzV6ZFdKelkzSnBZbVVvZEdocGN5NXliMjkwVDI1VGFYcGxRMmhoYm1kbFpDNWlhVzVrS0hSb2FYTXBLU2s3WEc1Y2JpQWdJQ0IwYUdsekxuSnZiM1F1WVhCd1pXNWtLSFJvYVhNdWFHOXpkQ2s3WEc0Z0lDQWdMeThnZEdocGN5NXliMjkwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YzJ4cFpHVnlMbkp2YjNRcE8xeHVYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9kSEoxWlNrN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElISnZiM1JQYmxOcGVtVkRhR0Z1WjJWa0tHRnlaM002SUdGdWVTa2dlMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLSFJ5ZFdVcE8xeHVYRzRnSUNBZ0x5OGdZMjl1YzI5c1pTNWtaV0oxWnloZ1YyVmlURzluYnk1dmJsSnZiM1JUYVhwbFEyaGhibWRsWkNncElHQWdLMXh1SUNBZ0lDOHZJQ0FnWUhKdmIzUXVkMmxrZEdnOUpIdDBhR2x6TG5KdmIzUXVZMnhwWlc1MFYybGtkR2g5TENCeWIyOTBMbWhsYVdkb2REMGtlM1JvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhSOUxDQmdJQ3RjYmlBZ0lDQXZMeUFnSUdCallXNTJZWE11ZDJsa2RHZzlKSHQwYUdsekxtTmhiblpoY3k1M2FXUjBhSDBzSUdOaGJuWmhjeTVvWldsbmFIUTlKSHQwYUdsekxtTmhiblpoY3k1b1pXbG5hSFI5SUM1Z0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCQmMzTnBaMjV6SUh0QWJHbHVheUJ6WlhGRGIyeDlJR0Z1WkNCN1FHeHBibXNnWTNCOUlHSmhjMlZrSUc5dUlIdEFiR2x1YXlCelpYRjFaVzVqWlVOdmJIVnRiazVoYldWOUlHRnVaQ0JqWVd4c2N5QjdRR3hwYm1zZ2NtVnVaR1Z5ZlNncExseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQjFjR1JoZEdWVFpYRkRiMndvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVaR0YwWVVaeVlXMWxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTmxjVU52YkNBOUlIUm9hWE11YzJWeGRXVnVZMlZEYjJ4MWJXNU9ZVzFsSUQ4Z2RHaHBjeTVrWVhSaFJuSmhiV1V1WTI5c0tIUm9hWE11YzJWeGRXVnVZMlZEYjJ4MWJXNU9ZVzFsS1NBNklHNTFiR3c3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV6WlhGRGIyd2dQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuTmxjVU52YkNBOUlGZGxZa3h2WjI4dWNHbGphMVZ3VTJWeFEyOXNNaWgwYUdsekxtUmhkR0ZHY21GdFpTazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVnhkV1Z1WTJWRGIyeDFiVzVPWVcxbElEMGdkR2hwY3k1elpYRkRiMndnUHlCMGFHbHpMbk5sY1VOdmJDNXVZVzFsSURvZ2JuVnNiRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbk5sY1VOdmJDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjFibWwwY3pvZ2MzUnlhVzVuSUQwZ2RHaHBjeTV6WlhGRGIyd2hMbWRsZEZSaFp5aEVSeTVVUVVkVExsVk9TVlJUS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJWd1lYSmhkRzl5T2lCemRISnBibWNnUFNCMGFHbHpMbk5sY1VOdmJDRXVaMlYwVkdGbktDZHpaWEJoY21GMGIzSW5LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXpjR3hwZEhSbGNpQTlJRmRsWWt4dloyOHVaMlYwVTNCc2FYUjBaWElvZFc1cGRITXNJSE5sY0dGeVlYUnZjaWs3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVlFiM05wZEdsdmJuTW9LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpjQ0E5SUZkbFlreHZaMjh1Y0dsamExVndVR0ZzWlhSMFpTaDBhR2x6TG5ObGNVTnZiQ2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuTndiR2wwZEdWeUlEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWeklEMGdXMTA3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjM1JoY25SUWIzTnBkR2x2YmlBOUlDMHhPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtVnVaRkJ2YzJsMGFXOXVJRDBnTFRFN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTNBZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCMWNHUmhkR1ZRYjNOcGRHbHZibk1vS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbk5sY1VOdmJDbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUd4bGRDQmpZWFJsWjI5eWFXVnpPaUFvYzNSeWFXNW5JSHdnYm5Wc2JDa2dXMTA3WEc0Z0lDQWdhV1lnS0hSb2FYTXVjMmh5YVc1clJXMXdkSGxVWVdsc0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6T2lCSmJuUXpNa0Z5Y21GNUlEMGdkR2hwY3k1a1lYUmhSbkpoYldVdVptbHNkR1Z5TG1kbGRGTmxiR1ZqZEdWa1NXNWtaWGhsY3lncE8xeHVJQ0FnSUNBZ1kyRjBaV2R2Y21sbGN5QTlJRUZ5Y21GNUxtWnliMjBvYm1WM0lGTmxkQ2hjYmlBZ0lDQWdJQ0FnUVhKeVlYa3Vabkp2YlNoQmNuSmhlU2hwYm1ScFkyVnpMbXhsYm1kMGFDa3VhMlY1Y3lncEtTNXRZWEFvS0drNklHNTFiV0psY2lrZ1BUNGdkR2hwY3k1elpYRkRiMndoTG1kbGRDaHBibVJwWTJWelcybGRLU2twS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdZMkYwWldkdmNtbGxjeUE5SUhSb2FYTXVjMlZ4UTI5c0xtTmhkR1ZuYjNKcFpYTTdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJRzFoZUV4bGJtZDBhQ0E5SUdOaGRHVm5iM0pwWlhNdWJHVnVaM1JvSUQ0Z01DQS9JRTFoZEdndWJXRjRLQzR1TG1OaGRHVm5iM0pwWlhNdWJXRndLRnh1SUNBZ0lDQWdLSE1wSUQwK0lITWdJVDA5SUc1MWJHd2dQeUIwYUdsekxuTndiR2wwZEdWeUlTaHpLUzVzWlc1bmRHZ2dPaUF3S1NrZ09pQXdPMXh1WEc0Z0lDQWdMeThnUjJWMElIQnZjMmwwYVc5dUlHNWhiV1Z6SUdaeWIyMGdaR0YwWVNCamIyeDFiVzRnZEdGbklDZHdiM05wZEdsdmJrNWhiV1Z6SjF4dUlDQWdJR052Ym5OMElIQnZjMmwwYVc5dVRtRnRaWE5VZUhRZ1BTQjBhR2x6TG5ObGNVTnZiQzVuWlhSVVlXY29KM0J2YzJsMGFXOXVUbUZ0WlhNbktUdGNiaUFnSUNBdkx5QkdZV3hzWW1GamF5QnBaaUFuY0c5emFYUnBiMjVPWVcxbGN5Y2dkR0ZuSUdseklHNXZkQ0J3Y205MmFXUmxaRnh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjVPWVcxbGN5QTlJSEJ2YzJsMGFXOXVUbUZ0WlhOVWVIUWdQeUJ3YjNOcGRHbHZiazVoYldWelZIaDBMbk53YkdsMEtDY3NJQ2NwTG0xaGNDZ29iaWtnUFQ0Z2JpNTBjbWx0S0NrcElEcGNiaUFnSUNBZ0lGc3VMaTVCY25KaGVTaHRZWGhNWlc1bmRHZ3BMbXRsZVhNb0tWMHViV0Z3S0NocVVHOXpLU0E5UGlCZ0pIdHFVRzl6SUNzZ01YMWdLVHRjYmx4dUlDQWdJSFJvYVhNdWMzUmhjblJRYjNOcGRHbHZiaUE5SUNoMGFHbHpMbk4wWVhKMFVHOXphWFJwYjI1T1lXMWxJQ1ltSUhSb2FYTXVjRzl6YVhScGIyNU9ZVzFsY3lBbUpseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWekxtbHVZMngxWkdWektIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJrNWhiV1VwS1NBL1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVUbUZ0WlhNdWFXNWtaWGhQWmloMGFHbHpMbk4wWVhKMFVHOXphWFJwYjI1T1lXMWxLU0E2SURBN1hHNGdJQ0FnZEdocGN5NWxibVJRYjNOcGRHbHZiaUE5SUNoMGFHbHpMbVZ1WkZCdmMybDBhVzl1VG1GdFpTQW1KaUIwYUdsekxuQnZjMmwwYVc5dVRtRnRaWE1nSmlaY2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNU9ZVzFsY3k1cGJtTnNkV1JsY3loMGFHbHpMbVZ1WkZCdmMybDBhVzl1VG1GdFpTa3BJRDljYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI1T1lXMWxjeTVwYm1SbGVFOW1LSFJvYVhNdVpXNWtVRzl6YVhScGIyNU9ZVzFsS1NBNklDaHRZWGhNWlc1bmRHZ2dMU0F4S1R0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCdmRtVnljbWxrWlNCdmJsQnliM0JsY25SNVEyaGhibWRsWkNod2NtOXdaWEowZVRvZ1JFY3VVSEp2Y0dWeWRIa3BPaUIyYjJsa0lIdGNiaUFnSUNBdkx5QmpiMjV6YjJ4bExtUmxZblZuS0dCWFpXSk1iMmR2TG05dVVISnZjR1Z5ZEhsRGFHRnVaMlZrS0NBa2UzQnliM0JsY25SNUxtNWhiV1Y5SUQwZ0p5Y2dmU2xnS1R0Y2JpQWdJQ0J6ZFhCbGNpNXZibEJ5YjNCbGNuUjVRMmhoYm1kbFpDaHdjbTl3WlhKMGVTazdYRzVjYmlBZ0lDQnpkMmwwWTJnZ0tIQnliM0JsY25SNUxtNWhiV1VwSUh0Y2JpQWdJQ0JqWVhObElDZGpiMjV6YVdSbGNrNTFiR3hUWlhGMVpXNWpaWE1uT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2R6WlhGMVpXNWpaVU52YkhWdGJrNWhiV1VuT2x4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVFpYRkRiMndvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjNOMFlYSjBVRzl6YVhScGIyNU9ZVzFsSnpwY2JpQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFUyVnhRMjlzS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkbGJtUlFiM05wZEdsdmJrNWhiV1VuT2x4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVFpYRkRiMndvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjNCdmMybDBhVzl1VjJsa2RHZ25PbHh1SUNBZ0lDQWdkR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ0E5SUhSb2FYTXVjRzl6YVhScGIyNVhhV1IwYUR0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuYldsdVNHVnBaMmgwSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuYldGNFNHVnBaMmgwSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuWm1sNFYybGtkR2duT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2QyWlhKMGFXTmhiRUZzYVdkdWJXVnVkQ2M2WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2loMGNuVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdKMmh2Y21sNmIyNTBZV3hCYkdsbmJtMWxiblFuT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2RtYVhSQmNtVmhKenBjYmlBZ0lDQWdJSFJvYVhNdWNtVnVaR1Z5S0hSeWRXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQW5jMmh5YVc1clJXMXdkSGxVWVdsc0p6cGNiaUFnSUNBZ0lIUm9hWE11ZFhCa1lYUmxVRzl6YVhScGIyNXpLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2loMGNuVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCdmRtVnljbWxrWlNCaGMzbHVZeUJ2YmxSaFlteGxRWFIwWVdOb1pXUW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZVVp5WVcxbFZIaDBPaUJ6ZEhKcGJtY2dQU0IwYUdsekxtUmhkR0ZHY21GdFpTQS9JQ2RrWVhSaEp5QTZJQ2R1ZFd4c0p6dGNiaUFnSUNCamIyNXpiMnhsTG1SbFluVm5LR0JpYVc4NklGZGxZa3h2WjI4OEpIdDBhR2x6TG5acFpYZGxja2xrZlQ0dWIyNVVZV0pzWlVGMGRHRmphR1ZrS0NCa1lYUmhSbkpoYldVZ1BTQWtlMlJoZEdGR2NtRnRaVlI0ZEgwZ0tTQnpkR0Z5ZEdBcE8xeHVJQ0FnSUhOMWNHVnlMbTl1VkdGaWJHVkJkSFJoWTJobFpDZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1MWNHUmhkR1ZUWlhGRGIyd29LVHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbVJoZEdGR2NtRnRaU0FoUFQwZ2RtOXBaQ0F3S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbk4xWW5NdWNIVnphQ2gwYUdsekxtUmhkR0ZHY21GdFpTNXpaV3hsWTNScGIyNHViMjVEYUdGdVoyVmtMbk4xWW5OamNtbGlaU2dvWHlrZ1BUNGdkR2hwY3k1eVpXNWtaWElvS1NrcE8xeHVJQ0FnSUNBZ2RHaHBjeTV6ZFdKekxuQjFjMmdvZEdocGN5NWtZWFJoUm5KaGJXVXVabWxzZEdWeUxtOXVRMmhoYm1kbFpDNXpkV0p6WTNKcFltVW9LRjhwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZRYjNOcGRHbHZibk1vS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ0lDQWdJSDBwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG1sdWFYUW9LVHRjYmlBZ0lDQmpiMjV6YjJ4bExtUmxZblZuS0dCaWFXODZJRmRsWWt4dloyODhKSHQwYUdsekxuWnBaWGRsY2tsa2ZUNHViMjVVWVdKc1pVRjBkR0ZqYUdWa0tDa2daVzVrWUNrN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2IzWmxjbkpwWkdVZ1lYTjVibU1nWkdWMFlXTm9LQ2tnZTF4dUlDQWdJR052Ym5OMElHUmhkR0ZHY21GdFpWUjRkQ0E5SUdBa2UzUm9hWE11WkdGMFlVWnlZVzFsSUQ4Z0oyUmhkR0VuSURvZ0oyNTFiR3duZldBN1hHNGdJQ0FnWTI5dWMyOXNaUzVrWldKMVp5aGdZbWx2T2lCWFpXSk1iMmR2UENSN2RHaHBjeTUyYVdWM1pYSkpaSDArTG05dVZHRmliR1ZCZEhSaFkyaGxaQ2dnWkdGMFlVWnlZVzFsSUQwZ0pIdGtZWFJoUm5KaGJXVlVlSFI5SUNrZ2MzUmhjblJnS1R0Y2JpQWdJQ0J6ZFhCbGNpNWtaWFJoWTJnb0tUdGNibHh1SUNBZ0lIUm9hWE11ZG1sbGQxTjFZbk11Wm05eVJXRmphQ2dvYzNWaUtTQTlQaUJ6ZFdJdWRXNXpkV0p6WTNKcFltVW9LU2s3WEc0Z0lDQWdkR2hwY3k1b2IzTjBJUzV5WlcxdmRtVW9LVHRjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0IwYUdsekxtMXpaMGh2YzNRZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ2RHaHBjeTVvYjNOMElEMGdkVzVrWldacGJtVmtPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBhV0ZzYVhwbFpDQTlJR1poYkhObE8xeHVJQ0FnSUdOdmJuTnZiR1V1WkdWaWRXY29ZR0pwYnpvZ1YyVmlURzluYnp3a2UzUm9hWE11ZG1sbGQyVnlTV1I5UGk1dmJsUmhZbXhsUVhSMFlXTm9aV1FvS1NCbGJtUmdLVHRjYmlBZ2ZWeHVYRzRnSUhCeWIzUmxZM1JsWkNCZmJuVnNiRk5sY1hWbGJtTmxLR1pwYkd4bGNsSmxjMmxrZFdVZ1BTQW5XQ2NwT2lCemRISnBibWNnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym5OcFpHVnlUblZzYkZObGNYVmxibU5sY3lsY2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1FYSnlZWGtvZEdocGN5NU1aVzVuZEdncExtWnBiR3dvWm1sc2JHVnlVbVZ6YVdSMVpTa3VhbTlwYmlnbkp5azdYRzVjYmlBZ0lDQnlaWFIxY200Z0p5YzdYRzRnSUgxY2JseHVJQ0J3Y205MFpXTjBaV1FnWDJOaGJHTjFiR0YwWlNncElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdVkyRnVkbUZ6SUh4OElDRjBhR2x6TG1odmMzUWdmSHdnSVhSb2FYTXVjMlZ4UTI5c0lIeDhJQ0YwYUdsekxtUmhkR0ZHY21GdFpTbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUhSb2FYTXVZMkZzWTFOcGVtVW9LVHRjYmx4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI1eklEMGdibVYzSUVGeWNtRjVLSFJvYVhNdVRHVnVaM1JvS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxVUc5eklEMGdNRHNnYWxCdmN5QThJSFJvYVhNdVRHVnVaM1JvT3lCcVVHOXpLeXNwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ2YzA1aGJXVTZJSE4wY21sdVp5QTlJSFJvYVhNdWNHOXphWFJwYjI1T1lXMWxjMXQwYUdsekxuTjBZWEowVUc5emFYUnBiMjRnS3lCcVVHOXpYVHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kSUQwZ2JtVjNJRkJ2YzJsMGFXOXVTVzVtYnlod2IzTk9ZVzFsS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlBeU1ESXlMVEExTFRBMUlHRnphMkZzYTJsdUlHbHVjM1J5ZFdOMFpXUWdkRzhnYzJodmR5QlhaV0pNYjJkdklHSmhjMlZrSUc5dUlHWnBiSFJsY2lBb2JtOTBJSE5sYkdWamRHbHZiaWxjYmlBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6SUQwZ2RHaHBjeTVrWVhSaFJuSmhiV1V1Wm1sc2RHVnlMbWRsZEZObGJHVmpkR1ZrU1c1a1pYaGxjeWdwTzF4dUlDQWdJQzh2SUdOdmJuTjBJR2x1WkdsalpYTWdQU0IwYUdsekxtUmhkR0ZHY21GdFpTNXpaV3hsWTNScGIyNHVkSEoxWlVOdmRXNTBJRDRnTUNBL0lIUm9hWE11WkdGMFlVWnlZVzFsTG5ObGJHVmpkR2x2Ymk1blpYUlRaV3hsWTNSbFpFbHVaR1Y0WlhNb0tTQTZYRzRnSUNBZ0x5OGdJQ0IwYUdsekxtUmhkR0ZHY21GdFpTNW1hV3gwWlhJdVoyVjBVMlZzWldOMFpXUkpibVJsZUdWektDazdYRzVjYmlBZ0lDQjBhR2x6TG5KdmQzTk5ZWE5yWldRZ1BTQnBibVJwWTJWekxteGxibWQwYUR0Y2JpQWdJQ0IwYUdsekxuSnZkM05PZFd4c0lEMGdNRHRjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYVNCdlppQnBibVJwWTJWektTQjdYRzRnSUNBZ0lDQnNaWFFnY3pvZ2MzUnlhVzVuSUQwZ1BITjBjbWx1Wno0b2RHaHBjeTV6WlhGRGIyd3VaMlYwS0drcEtUdGNibHh1SUNBZ0lDQWdhV1lnS0NGektTQjdYRzRnSUNBZ0lDQWdJSE1nUFNCMGFHbHpMbDl1ZFd4c1UyVnhkV1Z1WTJVb0tUdGNiaUFnSUNBZ0lDQWdLeXQwYUdsekxuSnZkM05PZFd4c08xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmpiMjV6ZENCelpYRk5PaUJ6ZEhKcGJtZGJYU0E5SUhSb2FYTXVjM0JzYVhSMFpYSWhLSE1wTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYWxCdmN5QTlJREE3SUdwUWIzTWdQQ0IwYUdsekxreGxibWQwYURzZ2FsQnZjeXNyS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhCdFNXNW1ieUE5SUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEU3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzA2SUhOMGNtbHVaeUE5SUhObGNVMWJkR2hwY3k1emRHRnlkRkJ2YzJsMGFXOXVJQ3NnYWxCdmMxMGdmSHdnSnkwbk8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVNodElHbHVJSEJ0U1c1bWJ5a3BYRzRnSUNBZ0lDQWdJQ0FnY0cxSmJtWnZXMjFkSUQwZ2JtVjNJRkJ2YzJsMGFXOXVUVzl1YjIxbGNrbHVabThvS1R0Y2JpQWdJQ0FnSUNBZ2NHMUpibVp2VzIxZExtTnZkVzUwS3lzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4amNtVm5hVzl1SUZCdmJHbHphQ0JtY21WeElHTnZkVzUwYzF4dUlDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnTHk4Z1pHVnNaWFJsSUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEZiSnkwblhUdGNibHh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ym5OYmFsQnZjMTB1Y205M1EyOTFiblFnUFNBd08xeHVJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnRJR2x1SUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEVwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExuSnZkME52ZFc1MElDczlJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kTG1aeVpYRmJiVjB1WTI5MWJuUTdYRzRnSUNBZ2ZWeHVJQ0FnSUM4dkkyVnVaSEpsWjJsdmJseHVYRzRnSUNBZ1kyOXVjM1FnY2lBOUlIZHBibVJ2ZHk1a1pYWnBZMlZRYVhobGJGSmhkR2x2TzF4dUlDQWdJR052Ym5OMElHMWhlRWhsYVdkb2RDQTlJSFJvYVhNdVkyRnVkbUZ6TG1obGFXZG9kQ0F0SUhSb2FYTXVZWGhwYzBobGFXZG9kQ0FxSUhJN1hHNGdJQ0FnTHk4Z1kyOXVjMjlzWlM1a1pXSjFaeWhnVjJWaVRHOW5iendrZTNSb2FYTXVkbWxsZDJWeVNXUjlQaTVmWTJGc1kzVnNZWFJsS0NrZ2JXRjRTR1ZwWjJoMFBTUjdiV0Y0U0dWcFoyaDBmUzVnS1R0Y2JseHVJQ0FnSUM4dkkzSmxaMmx2YmlCRFlXeGpkV3hoZEdVZ2MyTnlaV1Z1WEc0Z0lDQWdabTl5SUNoc1pYUWdhbEJ2Y3lBOUlEQTdJR3BRYjNNZ1BDQjBhR2x6TGt4bGJtZDBhRHNnYWxCdmN5c3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQm1jbVZ4T2lCN0lGdGpPaUJ6ZEhKcGJtZGRPaUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUgwZ1BTQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzVtY21WeE8xeHVJQ0FnSUNBZ1kyOXVjM1FnY205M1EyOTFiblFnUFNCMGFHbHpMbkJ2YzJsMGFXOXVjMXRxVUc5elhTNXliM2REYjNWdWREdGNibHh1SUNBZ0lDQWdiR1YwSUhrNklHNTFiV0psY2lBOUlIUm9hWE11WVhocGMwaGxhV2RvZER0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWlc1MGNtbGxjeUE5SUU5aWFtVmpkQzVsYm5SeWFXVnpLR1p5WlhFcExuTnZjblFvS0dFc0lHSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0ZiTUYwZ0lUMDlJQ2N0SnlBbUppQmlXekJkSUNFOVBTQW5MU2NwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdKYk1WMHVZMjkxYm5RZ0xTQmhXekZkTG1OdmRXNTBPMXh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hoV3pCZElEMDlQU0FuTFNjZ0ppWWdZbHN3WFNBOVBUMGdKeTBuS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGhXekJkSUQwOVBTQW5MU2NwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUMweE8xeHVJQ0FnSUNBZ0lDQmxiSE5sSUM4cUlDaGlXekJkSUQwOVBTQW5MU2NwSUNvdlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDc3hPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUdWdWRISjVJRzltSUdWdWRISnBaWE1wSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY0cxSmJtWnZPaUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUQwZ1pXNTBjbmxiTVYwN1hHNGdJQ0FnSUNBZ0lDOHZJR052Ym5OMElHMDZJSE4wY21sdVp5QTlJR1Z1ZEhKNVd6QmRPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQm9PaUJ1ZFcxaVpYSWdQU0J0WVhoSVpXbG5hSFFnS2lCd2JVbHVabTh1WTI5MWJuUWdMeUJ5YjNkRGIzVnVkRHRjYmx4dUlDQWdJQ0FnSUNCd2JVbHVabTh1WW05MWJtUnpJRDBnYm1WM0lFUkhMbEpsWTNRb2FsQnZjeUFxSUhSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnc0lIa3NJSFJvYVhNdVgzQnZjMmwwYVc5dVYybGtkR2dzSUdncE8xeHVJQ0FnSUNBZ0lDQjVJQ3M5SUdnN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJQzh2STJWdVpISmxaMmx2Ymx4dUlDQjlYRzVjYmlBZ0x5OGdjbVZtYkdWamRDQmphR0Z1WjJWeklHMWhaR1VnZEc4Z1ptbHNkR1Z5TDNObGJHVmpkR2x2Ymx4dUlDQnlaVzVrWlhJb2NtVmpZV3hqSUQwZ2RISjFaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbTF6WjBodmMzUXBJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbk5sY1VOdmJDQW1KaUFoZEdocGN5NWpjQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTF6WjBodmMzUWhMbWx1Ym1WeVZHVjRkQ0E5SUdCVmJtdHViM2R1SUhCaGJHVjBkR1VnS0dOdmJIVnRiaUJ6WlcxVWVYQmxPaUFuSkh0MGFHbHpMbk5sY1VOdmJDNXpaVzFVZVhCbGZTY3BMbUE3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViWE5uU0c5emRDRXVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDY25PMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dGMyZEliM04wSVM1emRIbHNaUzVrYVhOd2JHRjVJRDBnSjI1dmJtVW5PMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWpZVzUyWVhNZ2ZId2dJWFJvYVhNdWMyVnhRMjlzSUh4OElDRjBhR2x6TG1SaGRHRkdjbUZ0WlNCOGZDQWhkR2hwY3k1amNDbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUdOdmJuTjBJR2NnUFNCMGFHbHpMbU5oYm5aaGN5NW5aWFJEYjI1MFpYaDBLQ2N5WkNjcE8xeHVJQ0FnSUdsbUlDZ2haeWtnY21WMGRYSnVPMXh1WEc0Z0lDQWdhV1lnS0hKbFkyRnNZeWxjYmlBZ0lDQWdJSFJvYVhNdVgyTmhiR04xYkdGMFpTZ3BPMXh1WEc0Z0lDQWdaeTV5WlhObGRGUnlZVzV6Wm05eWJTZ3BPMXh1SUNBZ0lHY3VabWxzYkZOMGVXeGxJRDBnSjNkb2FYUmxKenRjYmlBZ0lDQm5MbVpwYkd4U1pXTjBLREFzSURBc0lIUm9hWE11WTJGdWRtRnpMbmRwWkhSb0xDQjBhR2x6TG1OaGJuWmhjeTVvWldsbmFIUXBPMXh1SUNBZ0lHY3VkR1Y0ZEVKaGMyVnNhVzVsSUQwZ2RHaHBjeTUwWlhoMFFtRnpaV3hwYm1VN1hHNWNiaUFnSUNBdkx5QlFjbVYyWlc1MGN5QmthWFpwYzJsdmJpQmllU0I2WlhKdklHOXVJRXhsYm1kMGFDQTlJREJjYmlBZ0lDQnBaaUFvZEdocGN5NXpkR0Z5ZEZCdmMybDBhVzl1SUQwOVBTQXRNU0I4ZkNCMGFHbHpMbVZ1WkZCdmMybDBhVzl1SUQwOVBTQXRNU2xjYmlBZ0lDQWdJSEpsZEhWeWJqdGNibHh1SUNBZ0lDOHZJM0psWjJsdmJpQlFiRzkwSUhCdmMybDBhVzl1VG1GdFpYTmNiaUFnSUNCbkxuSmxjMlYwVkhKaGJuTm1iM0p0S0NrN1hHNGdJQ0FnWnk1bWFXeHNVM1I1YkdVZ1BTQW5ZbXhoWTJzbk8xeHVJQ0FnSUdjdWRHVjRkRUZzYVdkdUlEMGdKMk5sYm5SbGNpYzdYRzRnSUNBZ1p5NW1iMjUwSUQwZ0p6RXdjSGdnVW05aWIzUnZMQ0JTYjJKdmRHOGdURzlqWVd3c0lITmhibk10YzJWeWFXWW5PMXh1SUNBZ0lHTnZibk4wSUhCdmMwNWhiV1ZOWVhoWGFXUjBhQ0E5SUUxaGRHZ3ViV0Y0S0M0dUxuUm9hWE11Y0c5emFYUnBiMjV6TG0xaGNDZ29jRzl6S1NBOVBpQm5MbTFsWVhOMWNtVlVaWGgwS0hCdmN5NXVZVzFsS1M1M2FXUjBhQ2twTzF4dUlDQWdJR052Ym5OMElHaFRZMkZzWlNBOUlIQnZjMDVoYldWTllYaFhhV1IwYUNBOElDaDBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JQzBnTWlrZ1B5QXhJRG9nS0hSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnZ0xTQXlLU0F2SUhCdmMwNWhiV1ZOWVhoWGFXUjBhRHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjRzl6T2lCUWIzTnBkR2x2YmtsdVptOGdQU0IwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFR0Y2JpQWdJQ0FnSUdjdWNtVnpaWFJVY21GdWMyWnZjbTBvS1R0Y2JpQWdJQ0FnSUdjdWMyVjBWSEpoYm5ObWIzSnRLRnh1SUNBZ0lDQWdJQ0JvVTJOaGJHVXNJREFzSURBc0lERXNYRzRnSUNBZ0lDQWdJR3BRYjNNZ0tpQjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JQ3NnZEdocGN5NWZjRzl6YVhScGIyNVhhV1IwYUNBdklESXNJREFwTzF4dUlDQWdJQ0FnWnk1bWFXeHNWR1Y0ZENod2IzTXVibUZ0WlN3Z01Dd2dNQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJMlZ1WkhKbFoybHZiaUJRYkc5MElIQnZjMmwwYVc5dVRtRnRaWE5jYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnWm05eUlDaGpiMjV6ZENCYmJXOXViMjFsY2l3Z2NHMUpibVp2WFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMGFHbHpMbkJ2YzJsMGFXOXVjMXRxVUc5elhTNW1jbVZ4S1NrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYlc5dWIyMWxjaUFoUFQwZ0p5MG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWWlBOUlIQnRTVzVtYnk1aWIzVnVaSE03WEc1Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbWIyNTBVM1I1YkdVZ1BTQW5NVFp3ZUNCU2IySnZkRzhzSUZKdlltOTBieUJNYjJOaGJDd2djMkZ1Y3kxelpYSnBaaWM3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdTR0ZqYTNNZ2RHOGdjMk5oYkdVZ2RYQndaWEpqWVhObElHTm9ZWEpoWTNSbGNuTWdkRzhnZEdGeVoyVjBJSEpsWTNSaGJtZHNaVnh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFZ3Y0dWeVkyRnpaVXhsZEhSbGNrRnpZMlZ1ZENBOUlEQXVNalU3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZFhCd1pYSmpZWE5sVEdWMGRHVnlTR1ZwWjJoMElEMGdNVEl1TWp0Y2JseHVJQ0FnSUNBZ0lDQWdJR2N1Y21WelpYUlVjbUZ1YzJadmNtMG9LVHRjYmlBZ0lDQWdJQ0FnSUNCbkxuTjBjbTlyWlZOMGVXeGxJRDBnSjJ4cFoyaDBaM0poZVNjN1hHNGdJQ0FnSUNBZ0lDQWdaeTVzYVc1bFYybGtkR2dnUFNBeE8xeHVJQ0FnSUNBZ0lDQWdJR2N1Y21WamRDaGlMbXhsWm5Rc0lHSXVkRzl3TENCaUxuZHBaSFJvTENCaUxtaGxhV2RvZENrN1hHNGdJQ0FnSUNBZ0lDQWdaeTVtYVd4c1UzUjViR1VnUFNCMGFHbHpMbU53TG1kbGRDaHRiMjV2YldWeUtTQS9QeUIwYUdsekxtTndMbWRsZENnbmIzUm9aWEluS1R0Y2JpQWdJQ0FnSUNBZ0lDQm5MblJsZUhSQmJHbG5iaUE5SUNkc1pXWjBKenRjYmlBZ0lDQWdJQ0FnSUNCbkxtWnZiblFnUFNCbWIyNTBVM1I1YkdVN1hHNGdJQ0FnSUNBZ0lDQWdMeTluTG1acGJHeFNaV04wS0dJdWJHVm1kQ3dnWWk1MGIzQXNJR0l1ZDJsa2RHZ3NJR0l1YUdWcFoyaDBLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0VkcwNklGUmxlSFJOWlhSeWFXTnpJRDBnWnk1dFpXRnpkWEpsVkdWNGRDaHRiMjV2YldWeUtUdGNibHh1SUNBZ0lDQWdJQ0FnSUM4dklHbG1JQ2h0VFM1aFkzUjFZV3hDYjNWdVpHbHVaMEp2ZUVGelkyVnVkQ0FoUFNBd0tWeHVJQ0FnSUNBZ0lDQWdJQzh2SUNBZ1kyOXVjMjlzWlM1a1pXSjFaeWhnYlRvZ0pIdHRmU3dnYlUwdVlXTjBkV0ZzUW05MWJtUnBibWRDYjNoQmMyTmxiblE2SUNSN2JVMHVZV04wZFdGc1FtOTFibVJwYm1kQ2IzaEJjMk5sYm5SOVlDazdYRzVjYmlBZ0lDQWdJQ0FnSUNCbkxuTmxkRlJ5WVc1elptOXliU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lHSXVkMmxrZEdnZ0x5QnRWRzB1ZDJsa2RHZ3NJREFzSURBc0lHSXVhR1ZwWjJoMElDOGdkWEJ3WlhKallYTmxUR1YwZEdWeVNHVnBaMmgwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZaTVzWldaMExDQmlMblJ2Y0NrN1hHNGdJQ0FnSUNBZ0lDQWdaeTVtYVd4c1ZHVjRkQ2h0YjI1dmJXVnlMQ0F3TENBdGRYQndaWEpqWVhObFRHVjBkR1Z5UVhOalpXNTBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnWTJGc1kxTnBlbVVvS1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1OaGJuWmhjeUI4ZkNBaGRHaHBjeTVvYjNOMEtWeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJQ0FnYkdWMElIZHBaSFJvT2lCdWRXMWlaWElnUFNCMGFHbHpMa3hsYm1kMGFDQXFJSFJvYVhNdWNHOXphWFJwYjI1WGFXUjBhRHRjYmlBZ0lDQnNaWFFnYUdWcFoyaDBJRDBnVFdGMGFDNXRhVzRvZEdocGN5NXRZWGhJWldsbmFIUXNJRTFoZEdndWJXRjRLSFJvYVhNdWJXbHVTR1ZwWjJoMExDQjBhR2x6TG5KdmIzUXVZMnhwWlc1MFNHVnBaMmgwS1NrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1bWFYUkJjbVZoS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0I0VTJOaGJHVTZJRzUxYldKbGNpQTlJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhRZ0x5Qm9aV2xuYUhRN1hHNGdJQ0FnSUNCamIyNXpkQ0I1VTJOaGJHVTZJRzUxYldKbGNpQTlJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUlhhV1IwYUNBdklIZHBaSFJvTzF4dUlDQWdJQ0FnWTI5dWMzUWdjMk5oYkdVZ1BTQk5ZWFJvTG0xaGVDZ3hMQ0JOWVhSb0xtMXBiaWg0VTJOaGJHVXNJSGxUWTJGc1pTa3BPMXh1SUNBZ0lDQWdkMmxrZEdnZ1BTQjNhV1IwYUNBcUlITmpZV3hsTzF4dUlDQWdJQ0FnYUdWcFoyaDBJRDBnYUdWcFoyaDBJQ29nYzJOaGJHVTdYRzRnSUNBZ0lDQjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JRDBnZEdocGN5NXdiM05wZEdsdmJsZHBaSFJvSUNvZ2MyTmhiR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2NpQTlJSGRwYm1SdmR5NWtaWFpwWTJWUWFYaGxiRkpoZEdsdk8xeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuZHBaSFJvSUQwZ2QybGtkR2dnS2lCeU8xeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuTjBlV3hsTG5kcFpIUm9JRDBnWUNSN2QybGtkR2g5Y0hoZ08xeHVYRzRnSUNBZ0x5OGdZMjl1YzNRZ1kyRnVkbUZ6U0dWcFoyaDBPaUJ1ZFcxaVpYSWdQU0IzYVdSMGFDQStJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUlhhV1IwYUNBL0lHaGxhV2RvZENBdElEZ2dPaUJvWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZG9aV2xuYUhRbkxDQmdKSHRvWldsbmFIUjljSGhnS1R0Y2JpQWdJQ0JqYjI1emRDQmpZVzUyWVhOSVpXbG5hSFE2SUc1MWJXSmxjaUE5SUhSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTXVhR1ZwWjJoMElEMGdZMkZ1ZG1GelNHVnBaMmgwSUNvZ2NqdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NXpkSGxzWlM1elpYUlFjbTl3WlhKMGVTZ25hR1ZwWjJoMEp5d2dZQ1I3WTJGdWRtRnpTR1ZwWjJoMGZYQjRZQ2s3WEc1Y2JpQWdJQ0F2THlCQlpHcDFjM1FnYUc5emRDQmhibVFnY205dmRDQjNhV1IwYUZ4dUlDQWdJR2xtSUNoMGFHbHpMbVpwZUZkcFpIUm9LU0I3WEc0Z0lDQWdJQ0F2THlCbWRXeHNJSGRwWkhSb0lHWnZjaUJqWVc1MllYTWdhRzl6ZENCaGJtUWdjbTl2ZEZ4dUlDQWdJQ0FnZEdocGN5NXliMjkwTG5OMGVXeGxMbmRwWkhSb0lEMGdkR2hwY3k1b2IzTjBMbk4wZVd4bExuZHBaSFJvSUQwZ1lDUjdkMmxrZEdoOWNIaGdPMXh1SUNBZ0lDQWdkR2hwY3k1eWIyOTBMbk4wZVd4bExtaGxhV2RvZENBOUlHQWtlMmhsYVdkb2RIMXdlR0E3WEc0Z0lDQWdJQ0IwYUdsekxtaHZjM1F1YzNSNWJHVXVjMlYwVUhKdmNHVnlkSGtvSjI5MlpYSm1iRzkzSnl3Z0oyaHBaR1JsYmljc0lDZHBiWEJ2Y25SaGJuUW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0x5OGdZV3hzYjNjZ2MyTnliMnhzSUdOaGJuWmhjeUJwYmlCeWIyOTBYRzRnSUNBZ0lDQjBhR2x6TG5KdmIzUXVjM1I1YkdVdWQybGtkR2dnUFNCMGFHbHpMbWh2YzNRdWMzUjViR1V1ZDJsa2RHZ2dQU0FuTVRBd0pTYzdYRzRnSUNBZ0lDQjBhR2x6TG1odmMzUXVjM1I1YkdVdWIzWmxjbVpzYjNkWUlEMGdKMkYxZEc4aGFXMXdiM0owWVc1MEp6dGNiaUFnSUNBZ0lIUm9hWE11YUc5emRDNXpkSGxzWlM1elpYUlFjbTl3WlhKMGVTZ25iM1psY21ac2IzY25MQ0J1ZFd4c0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1b2IzTjBMbk4wZVd4bExuTmxkRkJ5YjNCbGNuUjVLQ2QwWlhoMExXRnNhV2R1Snl3Z2RHaHBjeTVvYjNKcGVtOXVkR0ZzUVd4cFoyNXRaVzUwS1R0Y2JseHVJQ0FnSUNBZ0x5OGdkbVZ5ZEdsallXd2dZV3hwWjI1dFpXNTBYRzRnSUNBZ0lDQnNaWFFnYUc5emRGUnZjRTFoY21kcGJpQTlJREE3WEc0Z0lDQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWRtVnlkR2xqWVd4QmJHbG5ibTFsYm5RcElIdGNiaUFnSUNBZ0lHTmhjMlVnSjNSdmNDYzZYRzRnSUNBZ0lDQWdJR2h2YzNSVWIzQk5ZWEpuYVc0Z1BTQXdPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnSjIxcFpHUnNaU2M2WEc0Z0lDQWdJQ0FnSUdodmMzUlViM0JOWVhKbmFXNGdQU0JOWVhSb0xtMWhlQ2d3TENBb2RHaHBjeTV5YjI5MExtTnNhV1Z1ZEVobGFXZG9kQ0F0SUdobGFXZG9kQ2tnTHlBeUtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJQ2RpYjNSMGIyMG5PbHh1SUNBZ0lDQWdJQ0JvYjNOMFZHOXdUV0Z5WjJsdUlEMGdUV0YwYUM1dFlYZ29NQ3dnZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RDQXRJR2hsYVdkb2RDazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZHRZWEpuYVc0dGRHOXdKeXdnWUNSN2FHOXpkRlJ2Y0UxaGNtZHBibjF3ZUdBc0lDZHBiWEJ2Y25SaGJuUW5LVHRjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Y205dmRDNWpiR2xsYm5SSVpXbG5hSFFnUENCb1pXbG5hSFFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZG9aV2xuYUhRbkxDQmdKSHQwYUdsekxuSnZiM1F1WTJ4cFpXNTBTR1ZwWjJoMGZYQjRZQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhRzl6ZEM1emRIbHNaUzV6WlhSUWNtOXdaWEowZVNnbmIzWmxjbVpzYjNjdGVTY3NJRzUxYkd3cE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZHZkbVZ5Wm14dmR5MTVKeXdnSjJocFpHUmxiaWNzSUNkcGJYQnZjblJoYm5RbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QmpiMjV6YjJ4bExtUmxZblZuS0Z4dUlDQWdJQzh2SUNBZ1lIUm9hWE11Y205dmRDNXpkSGxzWlM1b1pXbG5hSFFnUFNBa2UzUm9hWE11Y205dmRDNXpkSGxzWlM1b1pXbG5hSFI5WEZ4dVlDQXJYRzRnSUNBZ0x5OGdJQ0JnZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RDQTlJQ1I3ZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RIMWNYRzVnSUN0Y2JpQWdJQ0F2THlBZ0lHQjBhR2x6TG1odmMzUXVjM1I1YkdVdWFHVnBaMmgwSUQwZ0pIdDBhR2x6TG1odmMzUXVjM1I1YkdVdWFHVnBaMmgwZlZ4Y2JtQWdLMXh1SUNBZ0lDOHZJQ0FnWUhSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUWdQU0FrZTNSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUjlYRnh1WUNBclhHNGdJQ0FnTHk4Z0lDQW5YRnh1SnlBclhHNGdJQ0FnTHk4Z0lDQmdkR2hwY3k1allXNTJZWE11YUdWcFoyaDBJQ0FnSUNBZ0lEMGdKSHQwYUdsekxtTmhiblpoY3k1b1pXbG5hSFI5WEZ4dVlDQXJYRzRnSUNBZ0x5OGdJQ0JnZEdocGN5NWpZVzUyWVhNdWMzUjViR1V1YUdWcFoyaDBJRDBnSkh0MGFHbHpMbU5oYm5aaGN5NXpkSGxzWlM1b1pXbG5hSFI5WUNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdEVSeTVEYjJ4MWJXNTlJSE5sY1VOdmJDQkRiMngxYlc0Z2RHOGdiRzl2YXlCbWIzSWdZU0J3WVd4bGRIUmxYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNBZ2JXbHVUR1Z1WjNSb0lHMXBibWx0ZFcwZ2JHVnVaM1JvSUc5bUlITmxjWFZsYm1ObElIUnZJR1JsZEdWamRDQndZV3hsZEhSbElDaGxiWEIwZVNCemRISnBibWR6SUdGeVpTQmhiR3h2ZDJWa0tWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0VFpYRlFZV3hsZEhSbGZTQlFZV3hsZEhSbElHTnZjbkpsYzNCdmJtUnBibWNnZEc4Z2RHaGxJR0ZzY0doaFltVjBJRzltSUhSb1pTQnpaWEYxWlc1alpYTWdhVzRnZEdobElHTnZiSFZ0Ymx4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJ3YVdOclZYQlFZV3hsZEhSbEtITmxjVU52YkRvZ1JFY3VRMjlzZFcxdUxDQnRhVzVNWlc1bmRHZzZJRzUxYldKbGNpQTlJRFVwT2lCVFpYRlFZV3hsZEhSbElIdGNiaUFnSUNCc1pYUWdjbVZ6T2lCVFpYRlFZV3hsZEhSbElId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdjM2RwZEdOb0lDaHpaWEZEYjJ3dWMyVnRWSGx3WlNrZ2UxeHVJQ0FnSUdOaGMyVWdRVzFwYm05aFkybGtjeTVUWlcxVWVYQmxUWFZzZEdsd2JHVkJiR2xuYm0xbGJuUTZYRzRnSUNBZ0lDQnlaWE1nUFNCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVIzSnZhMGR5YjNWd2N6dGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ1RuVmpiR1Z2ZEdsa1pYTXVVMlZ0Vkhsd1pVMTFiSFJwY0d4bFFXeHBaMjV0Wlc1ME9seHVJQ0FnSUNBZ2NtVnpJRDBnVG5WamJHVnZkR2xrWlhOUVlXeGxkSFJsY3k1RGFISnZiV0YwYjJkeVlXMDdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ2MzUmhkSE02SUZObGNVTnZiRk4wWVhSeklEMGdWMlZpVEc5bmJ5NW5aWFJUZEdGMGN5aHpaWEZEYjJ3c0lHMXBia3hsYm1kMGFDd2dWMlZpVEc5bmJ5NXpjR3hwZEhSbGNrRnpSbUZ6ZEdFcE8xeHVYRzRnSUNBZ1kyOXVjM1FnWVd4d2FHRmlaWFJEWVc1a2FXUmhkR1Z6T2lCYlUyVjBQSE4wY21sdVp6NHNJRk5sY1ZCaGJHVjBkR1ZkVzEwZ1BTQmJYRzRnSUNBZ0lDQmJibVYzSUZObGRDaFBZbXBsWTNRdWEyVjVjeWhPZFdOc1pXOTBhV1JsY3k1T1lXMWxjeWtwTENCT2RXTnNaVzkwYVdSbGMxQmhiR1YwZEdWekxrTm9jbTl0WVhSdlozSmhiVjBzWEc0Z0lDQWdJQ0JiYm1WM0lGTmxkQ2hQWW1wbFkzUXVhMlY1Y3loQmJXbHViMkZqYVdSekxrNWhiV1Z6S1Nrc0lFRnRhVzV2WVdOcFpITlFZV3hsZEhSbGN5NUhjbTlyUjNKdmRYQnpYU3hjYmlBZ0lDQmRPMXh1SUNBZ0lDOHZJRU5oYkdOMWJHRjBaU0JzYVd0bGJHbG9iMjlrY3lCbWIzSWdZV3h3YUdGaVpYUmZZMkZ1Wkdsa1lYUmxjMXh1SUNBZ0lHTnZibk4wSUdGc2NHaGhZbVYwUTJGdVpHbGtZWFJsYzFOcGJUb2diblZ0WW1WeVcxMGdQU0JoYkhCb1lXSmxkRU5oYm1ScFpHRjBaWE5jYmlBZ0lDQWdJQzV0WVhBb0tHTXBJRDArSUZkbFlreHZaMjh1WjJWMFFXeHdhR0ZpWlhSVGFXMXBiR0Z5YVhSNUtITjBZWFJ6TG1aeVpYRXNJR05iTUYwcEtUdGNiaUFnSUNCamIyNXpkQ0J0WVhoRGIzTWdQU0JOWVhSb0xtMWhlQ2d1TGk1aGJIQm9ZV0psZEVOaGJtUnBaR0YwWlhOVGFXMHBPMXh1SUNBZ0lHbG1JQ2h0WVhoRGIzTWdQaUF3TGpZMUtWeHVJQ0FnSUNBZ2NtVnpJRDBnWVd4d2FHRmlaWFJEWVc1a2FXUmhkR1Z6VzJGc2NHaGhZbVYwUTJGdVpHbGtZWFJsYzFOcGJTNXBibVJsZUU5bUtHMWhlRU52Y3lsZFd6RmRPMXh1SUNBZ0lHVnNjMlZjYmlBZ0lDQWdJSEpsY3lBOUlGVnVhMjV2ZDI1VFpYRlFZV3hsZEhSbGN5NURiMnh2Y2p0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5WlhNN1hHNGdJSDFjYmx4dUlDQXZLaW9nVTNSaGRITWdiMllnYzJWeGRXVnVZMlZ6SUhkcGRHZ2djM0JsWTJsbWFXVmtJSE53YkdsMGRHVnlJR1oxYm1Nc0lISmxkSFZ5Ym5NZ2V5Qm1jbVZ4TENCellXMWxUR1Z1WjNSb0lIMHVYRzRnSUNBcUlFQndZWEpoYlNCN1JFY3VRMjlzZFcxdWZTQnpaWEZEYjJ4Y2JpQWdJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzFwYmt4bGJtZDBhRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxTndiR2wwZEdWeVJuVnVZMzBnYzNCc2FYUjBaWEpjYmlBZ0lDb2dRSEpsZEhWeWJpQjdJRk5sY1VOdmJGTjBZWFJ6SUgwc0lITmhiV1ZNWlc1bmRHZzZJR0p2YjJ4bFlXNGdmU0J6ZEdGMGN5QnZaaUJqYjJ4MWJXNGdjMlZ4ZFdWdVkyVnpYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaMlYwVTNSaGRITW9jMlZ4UTI5c09pQkVSeTVEYjJ4MWJXNHNJRzFwYmt4bGJtZDBhRG9nYm5WdFltVnlMQ0J6Y0d4cGRIUmxjam9nVTNCc2FYUjBaWEpHZFc1aktUb2dVMlZ4UTI5c1UzUmhkSE1nZTF4dUlDQWdJR052Ym5OMElHWnlaWEU2SUhzZ1cyMDZJSE4wY21sdVoxMDZJRzUxYldKbGNpQjlJRDBnZTMwN1hHNGdJQ0FnYkdWMElITmhiV1ZNWlc1bmRHZ2dQU0IwY25WbE8xeHVJQ0FnSUd4bGRDQm1hWEp6ZEV4bGJtZDBhQ0E5SUc1MWJHdzdYRzVjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJSE5sY1NCdlppQnpaWEZEYjJ3dVkyRjBaV2R2Y21sbGN5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JWTmxjU0E5SUhOd2JHbDBkR1Z5S0hObGNTazdYRzVjYmlBZ0lDQWdJR2xtSUNobWFYSnpkRXhsYm1kMGFDQTlQU0J1ZFd4c0tWeHVJQ0FnSUNBZ0lDQm1hWEp6ZEV4bGJtZDBhQ0E5SUcxVFpYRXViR1Z1WjNSb08xeHVJQ0FnSUNBZ1pXeHpaU0JwWmlBb2JWTmxjUzVzWlc1bmRHZ2dJVDA5SUdacGNuTjBUR1Z1WjNSb0tWeHVJQ0FnSUNBZ0lDQnpZVzFsVEdWdVozUm9JRDBnWm1Gc2MyVTdYRzVjYmlBZ0lDQWdJR2xtSUNodFUyVnhMbXhsYm1kMGFDQStJRzFwYmt4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR052Ym5OMElHMGdiMllnYlZObGNTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hLRzBnYVc0Z1puSmxjU2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1jbVZ4VzIxZElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCbWNtVnhXMjFkSUNzOUlERTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUh0bWNtVnhPaUJtY21WeExDQnpZVzFsVEdWdVozUm9PaUJ6WVcxbFRHVnVaM1JvZlR0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMFFXeHdhR0ZpWlhSVGFXMXBiR0Z5YVhSNUtHWnlaWEU2SUUxdmJtOXRaWEpHY21WeGN5d2dZV3h3YUdGaVpYUTZJRk5sZER4emRISnBibWMrTENCbllYQlRlVzFpYjJ3NklITjBjbWx1WnlBOUlDY3RKeWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdZMjl1YzNRZ2EyVjVjeUE5SUc1bGR5QlRaWFE4YzNSeWFXNW5QaWhiTGk0dWJtVjNJRk5sZENoUFltcGxZM1F1YTJWNWN5aG1jbVZ4S1Nrc0lDNHVMbUZzY0doaFltVjBYU2s3WEc0Z0lDQWdhMlY1Y3k1a1pXeGxkR1VvWjJGd1UzbHRZbTlzS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR1p5WlhGQk9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElHRnNjR2hoWW1WMFFUb2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUcwZ2IyWWdhMlY1Y3lrZ2UxeHVJQ0FnSUNBZ1puSmxjVUV1Y0hWemFDaHRJR2x1SUdaeVpYRWdQeUJtY21WeFcyMWRJRG9nTUNrN1hHNGdJQ0FnSUNCaGJIQm9ZV0psZEVFdWNIVnphQ2hoYkhCb1lXSmxkQzVvWVhNb2JTa2dQeUF4SURvZ01DazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUlGUm9aWEpsSUhkbGNtVWdZU0JtWlhjZ2FXUmxZWE02SUdOb2FTMXpjWFZoY21Wa0xDQndaV0Z5YzI5dUlHTnZjbkpsYkdGMGFXOXVJQ2gyWVhKcFlXNWpaVDhwTENCelkyRnNZWElnY0hKdlpIVmpkQ0FxTDF4dUlDQWdJR052Ym5OMElHWnlaWEZXT2lCV1pXTjBiM0lnUFNCdVpYY2dWbVZqZEc5eUtHWnlaWEZCS1R0Y2JpQWdJQ0JqYjI1emRDQmhiSEJvWVdKbGRGWTZJRlpsWTNSdmNpQTlJRzVsZHlCV1pXTjBiM0lvWVd4d2FHRmlaWFJCS1R0Y2JpQWdJQ0JqYjI1emRDQmpiM002SUc1MWJXSmxjaUE5SUhabFkzUnZja1J2ZEZCeWIyUjFZM1FvWm5KbGNWWXNJR0ZzY0doaFltVjBWaWtnTHlBb2RtVmpkRzl5VEdWdVozUm9LR1p5WlhGV0tTQXFJSFpsWTNSdmNreGxibWQwYUNoaGJIQm9ZV0psZEZZcEtUdGNiaUFnSUNCeVpYUjFjbTRnWTI5ek8xeHVJQ0I5WEc1Y2JpQWdMeThnTHlvcUlFWnBjbk4wSUhSeWVTQjBieUJtYVc1a0lHTnZiSFZ0YmlCM2FYUm9JSE5sYlZSNWNHVWdKMkZzYVdkdVpXUlRaWEYxWlc1alpTY3VYRzRnSUM4dklDQXFJRTVsZUhRZ2JHOXZheUJtYjNJZ1kyOXNkVzF1SUhkcGRHZ2daR0YwWVNCaGJIQm9ZV0psZENCamIzSnlaWE53YjI1a2FXNW5JSFJ2SUdGdWVTQnZaaUIwYUdVZ2EyNXZkMjRnY0dGc1pYUjBaWE11WEc0Z0lDOHZJQ0FxSUVCd1lYSmhiU0I3UkVjdVJHRjBZVVp5WVcxbGZTQmtZWFJoUm5KaGJXVmNiaUFnTHk4Z0lDb2dRSEpsZEhWeWJpQjdSRWN1UTI5c2RXMXVmU0JVYUdVZ1kyOXNkVzF1SUhkbElIZGxjbVVnYkc5dmEybHVaeUJtYjNJZ2IzSWdiblZzYkZ4dUlDQXZMeUFnS2k5Y2JpQWdMeThnY0hKcGRtRjBaU0J3YVdOclZYQlRaWEZEYjJ3b1pHRjBZVVp5WVcxbE9pQkVSeTVFWVhSaFJuSmhiV1VwT2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUh0Y2JpQWdMeThnSUNCc1pYUWdjbVZ6T2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUQwZ1pHRjBZVVp5WVcxbExtTnZiSFZ0Ym5NdVlubFRaVzFVZVhCbEtDZGhiR2xuYm1Wa1UyVnhkV1Z1WTJVbktUdGNiaUFnTHk4Z0lDQnBaaUFvY21WeklEMDlJRzUxYkd3cElIdGNiaUFnTHk4Z0lDQWdJR1p2Y2lBb1kyOXVjM1FnWTI5c0lHOW1JR1JoZEdGR2NtRnRaUzVqYjJ4MWJXNXpLU0I3WEc0Z0lDOHZJQ0FnSUNBZ0lHTnZibk4wSUdOd0lEMGdWMlZpVEc5bmJ5NXdhV05yVlhCUVlXeGxkSFJsS0dOdmJDQmhjeUJFUnk1RGIyeDFiVzRzSURVcE8xeHVJQ0F2THlBZ0lDQWdJQ0JwWmlBb1kzQWdJVDA5SUc1MWJHd2dKaVlnSVNoamNDQnBibk4wWVc1alpXOW1JRlZ1YTI1dmQyNVRaWEZRWVd4bGRIUmxLU2tnZTF4dUlDQXZMeUFnSUNBZ0lDQWdJSEpsY3lBOUlHTnZiRHRjYmlBZ0x5OGdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdMeThnSUNBZ0lDQWdmVnh1SUNBdkx5QWdJQ0FnZlZ4dUlDQXZMeUFnSUgxY2JpQWdMeThnSUNCeVpYUjFjbTRnY21Wek8xeHVJQ0F2THlCOVhHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5QndhV05yVlhCVFpYRkRiMnd5S0dSbU9pQkVSeTVFWVhSaFJuSmhiV1VwT2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUh0Y2JpQWdJQ0JqYjI1emRDQnpaVzFVZVhCbFEyOXNUR2x6ZENBOUlHUm1MbU52YkhWdGJuTXVZbmxUWlcxVWVYQmxRV3hzS0VSSExsTkZUVlJaVUVVdVRVRkRVazlOVDB4RlExVk1SU2s3WEc0Z0lDQWdiR1YwSUhKbGMwTnZiRG9nUkVjdVEyOXNkVzF1SUh3Z2JuVnNiQ0E5SUhObGJWUjVjR1ZEYjJ4TWFYTjBMbVpwYm1Rb0tHTnZiQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZFc1cGRITWdQU0JqYjJ3dVoyVjBWR0ZuS0VSSExsUkJSMU11VlU1SlZGTXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIVnVhWFJ6SUQ4Z2RXNXBkSE11YVc1a1pYaFBaaWduVFZOQkp5a2dJVDA5SUMweElEb2dabUZzYzJVN1hHNGdJQ0FnZlNrZ1B6OGdiblZzYkR0Y2JpQWdJQ0JwWmlBb0lYSmxjME52YkNBbUppQnpaVzFVZVhCbFEyOXNUR2x6ZEM1c1pXNW5kR2dnUGlBd0tWeHVJQ0FnSUNBZ2NtVnpRMjlzSUQwZ2MyVnRWSGx3WlVOdmJFeHBjM1JiTUYwN1hHNGdJQ0FnY21WMGRYSnVJSEpsYzBOdmJEdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHMXZibTl0WlhKU1pTQTlJQzljWEZzb1hGeDNLeWxjWEYxOEtGeGNkeWw4S0MwcEwyYzdYRzVjYmlBZ0x5b3FJRk53YkdsMElITmxjWFZsYm1ObElHWnZjaUJ6YVc1bmJHVWdZMmhoY21GamRHVnlJRzF2Ym05dFpYSnpMQ0J6Y1hWaGNtVWdZbkpoWTJ0bGRITWdiWFZzZEdsamFHRnlJRzF2Ym05dFpYSWdibUZ0WlhNZ2IzSWdaMkZ3SUhONWJXSnZiQzVjYmlBZ0lDb2dRSEJoY21GdElIdGhibmw5SUhObGNTQnZZbXBsWTNRZ2QybDBhQ0J6WlhGMVpXNWpaVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kYlhYMGdZWEp5WVhrZ2IyWWdiVzl1YjIxbGNuTmNiaUFnSUNvdlhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ2MzQnNhWFIwWlhKQmMwWmhjM1JoS0hObGNUb2dZVzU1S1RvZ2MzUnlhVzVuVzEwZ2UxeHVJQ0FnSUdOdmJuTjBJSEpsY3pvZ2MzUnlhVzVuVzEwZ1BTQjNkVHhTWldkRmVIQk5ZWFJqYUVGeWNtRjVQaWh6WlhFdWRHOVRkSEpwYm1jb0tTNXRZWFJqYUVGc2JDaFhaV0pNYjJkdkxtMXZibTl0WlhKU1pTa3BYRzRnSUNBZ0lDQXViV0Z3S0NodFlUb2dVbVZuUlhod1RXRjBZMmhCY25KaGVTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCc1pYUWdiVkpsY3pvZ2MzUnlhVzVuTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0T2lCemRISnBibWNnUFNCdFlWc3dYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHMHViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h0SUdsdUlGZGxZa3h2WjI4dVlXRlRlVzV2Ym5sdGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JWSmxjeUE5SUZkbFlreHZaMjh1WVdGVGVXNXZibmx0YzF0dFhUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JWSmxjeUE5SUNjbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVrWldKMVp5aGdURzl1WnlCdGIyNXZiV1Z5SUNja2UyMTlKeUJvWVhNZ2JtOTBJR0VnYzJodmNuUWdjM2x1YjI1NWJTNWdLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdiVkpsY3lBOUlHMDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzFTWlhNN1hHNGdJQ0FnSUNCOUtTNTBiMEZ5Y21GNUtDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVnpPMXh1SUNCOVhHNWNiaUFnTHlvcUlFZGxkSE1nYldWMGFHOWtJSFJ2SUhOd2JHbDBJSE5sY1hWbGJtTmxJR0o1SUhObGNHRnlZWFJ2Y2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjMlZ3WVhKaGRHOXlYRzRnSUNBcUlFQnlaWFIxY200Z2UxTndiR2wwZEdWeVJuVnVZMzFjYmlBZ0lDb3ZYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwVTNCc2FYUjBaWEpYYVhSb1UyVndZWEpoZEc5eUtITmxjR0Z5WVhSdmNqb2djM1J5YVc1bktUb2dVM0JzYVhSMFpYSkdkVzVqSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLSE5sY1RvZ2MzUnlhVzVuS1NBOVBpQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MyVnhMbk53YkdsMEtITmxjR0Z5WVhSdmNpazdYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCSFpYUWdjM0JzYVhSMFpYSWdiV1YwYUc5a0lIUnZJSE53YkdsMElITmxjWFZsYm1ObGN5QjBieUJ0YjI1dmJXVnljMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RXNXBkSE5jYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlITmxjR0Z5WVhSdmNseHVJQ0FnS2lCQWNtVjBkWEp1SUh0VGNHeHBkSFJsY2taMWJtTjlYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHZGxkRk53YkdsMGRHVnlLSFZ1YVhSek9pQnpkSEpwYm1jc0lITmxjR0Z5WVhSdmNqb2djM1J5YVc1bktUb2dVM0JzYVhSMFpYSkdkVzVqSUh0Y2JpQWdJQ0JwWmlBb2RXNXBkSE11ZEc5TWIzZGxja05oYzJVb0tTNXpkR0Z5ZEhOWGFYUm9LQ2RtWVhOMFlTY3BLVnh1SUNBZ0lDQWdjbVYwZFhKdUlGZGxZa3h2WjI4dWMzQnNhWFIwWlhKQmMwWmhjM1JoTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLSFZ1YVhSekxuUnZURzkzWlhKRFlYTmxLQ2t1YzNSaGNuUnpWMmwwYUNnbmMyVndZWEpoZEc5eUp5a3BYRzRnSUNBZ0lDQnlaWFIxY200Z1YyVmlURzluYnk1blpYUlRjR3hwZEhSbGNsZHBkR2hUWlhCaGNtRjBiM0lvYzJWd1lYSmhkRzl5S1R0Y2JpQWdJQ0F2S2x4dUlDQWdJR1ZzYzJVZ2FXWWdLSFZ1YVhSekxuUnZURzkzWlhKRFlYTmxLQ2t1YzNSaGNuUnpWMmwwYUNnbmFHVnNiU2NwS1Z4dUlDQWdJQ0FnY21WMGRYSnVJRmRsWWt4dloyOHVjM0JzYVhSMFpYSkJjMGhsYkcwN1hHNGdJQ0FnTHlvcUwxeHVJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1ZXNWxlSEJsWTNSbFpDQjFibWwwY3lBa2UzVnVhWFJ6ZlNBdVlDazdYRzVjYmlBZ0lDQXZMeUJVVDBSUE9pQlRjR3hwZEhSbGNpQm1iM0lnU0VWTVRWeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUlRjR3hwZEhSbGNrWnZja052YkhWdGJpaGpiMnc2SUVSSExrTnZiSFZ0YmlrNklGTndiR2wwZEdWeVJuVnVZeUI3WEc0Z0lDQWdhV1lnS0dOdmJDNXpaVzFVZVhCbElDRTlQU0JFUnk1VFJVMVVXVkJGTGsxQlExSlBUVTlNUlVOVlRFVXBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFZGxkQ0J6Y0d4cGRIUmxjaUJtYjNJZ2MyVnRWSGx3WlNCY0lpUjdSRWN1VTBWTlZGbFFSUzVOUVVOU1QwMVBURVZEVlV4RmZWd2lJRzl1YkhrdVlDazdYRzVjYmlBZ0lDQmpiMjV6ZENCMWJtbDBjeUE5SUdOdmJDNW5aWFJVWVdjb1JFY3VWRUZIVXk1VlRrbFVVeWs3WEc0Z0lDQWdZMjl1YzNRZ2MyVndZWEpoZEc5eUlEMGdZMjlzTG1kbGRGUmhaeWduYzJWd1lYSmhkRzl5SnlrN1hHNGdJQ0FnY21WMGRYSnVJRmRsWWt4dloyOHVaMlYwVTNCc2FYUjBaWElvZFc1cGRITXNJSE5sY0dGeVlYUnZjaWs3WEc0Z0lIMWNibHh1SUNBdktpb2dUMjVzZVNCemIyMWxJRzltSUhSb1pTQnplVzV2Ym5sdGN5NGdWR2hsYzJVZ2QyVnlaU0J2WW5SaGFXNWxaQ0JtY205dElIUm9aU0JqYkhWemRHVnlaV1FnYjJ4cFoyOXdaWEIwYVdSbElHUmhkR0Z6WlhRdUlDb3ZYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR0ZoVTNsdWIyNTViWE02SUhzZ1cyNWhiV1U2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5SUQwZ2UxeHVJQ0FnSUNkYlRXVk9iR1ZkSnpvZ0owd25MQ0F2THlCT2JHVWdMU0J1YjNKc1pYVmphVzVsWEc0Z0lDQWdKMXROWlVGZEp6b2dKMEVuTEZ4dUlDQWdJQ2RiVFdWSFhTYzZJQ2RISnl4Y2JpQWdJQ0FuVzAxbFJsMG5PaUFuUmljc1hHNGdJSDA3WEc1OVhHNGlYWDA9IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBjcmVhdGVEaW1lbnNpbmFsaXR5UmVkdWNpbmdXb3JrZXIgfSBmcm9tICcuL3dvcmtlcnMvZGltZW5zaW9uYWxpdHktcmVkdWNpbmctd29ya2VyLWNyZWF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZURpbWVuc2luYWxpdHlXaXRoTm9ybWFsaXphdGlvbihkYXRhQ29sLCBtZXRob2ROYW1lLCBzaW1pbGFyaXR5TWV0cmljLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uYWxpdHlSZWR1Y2VSZXMgPSB5aWVsZCBjcmVhdGVEaW1lbnNpbmFsaXR5UmVkdWNpbmdXb3JrZXIoeyBkYXRhOiBkYXRhQ29sLCBtZXRyaWM6IHNpbWlsYXJpdHlNZXRyaWMgfSwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLmVtYmVkZGluZyA9IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLmVtYmVkZGluZy5tYXAoaXQgPT4gbm9ybWFsaXplKGl0KSk7XG4gICAgICAgIHJldHVybiBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcztcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnhkV1Z1WTJVdGMzQmhZMlV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SnpaWEYxWlc1alpTMXpjR0ZqWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkZRU3hQUVVGUExFVkJRVVVzVTBGQlV5eEZRVUZGTEUxQlFVMHNhVVJCUVdsRUxFTkJRVU03UVVGSE5VVXNUMEZCVHl4RlFVRkZMR2xEUVVGcFF5eEZRVUVyUWl4TlFVRk5MR3RFUVVGclJDeERRVUZETzBGQlIyeEpMRTFCUVUwc1ZVRkJaMElzYjBOQlFXOURMRU5CUTNSRUxFOUJRWEZETEVWQlEzSkRMRlZCUVd0Q0xFVkJRMnhDTEdkQ1FVRTJSQ3hGUVVNM1JDeFBRVUZoT3p0UlFVVmlMRTFCUVUwc2RVSkJRWFZDTEVkQlEzcENMRTFCUVUwc2FVTkJRV2xETEVOQlEyNURMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFVkJRV2RDTEVWQlEzcEVMRlZCUVZVc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVUzUWl4MVFrRkJkVUlzUTBGQlF5eFRRVUZUTEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXk5R0xFOUJRVThzZFVKQlFYVkNMRU5CUVVNN1NVRkRia01zUTBGQlF6dERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUVKcGRFRnljbUY1SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDJKcGRDMWhjbkpoZVNjN1hHNXBiWEJ2Y25RZ2V5Qk5ZWFJ5YVhnc0lGWmxZM1J2Y2lCOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdJRzV2Y20xaGJHbDZaU0I5SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNabFkzUnZjaTF2Y0dWeVlYUnBiMjV6Snp0Y2JtbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVwYlhCdmNuUWdleUJDYVhSQmNuSmhlVTFsZEhKcFkzTXNJRk4wY21sdVowMWxkSEpwWTNNc0lGWmhiR2xrVkhsd1pYTXNJRlpsWTNSdmNrMWxkSEpwWTNNZ2ZTQm1jbTl0SUNjdUwzUjVjR1ZrTFcxbGRISnBZM01uTzF4dWFXMXdiM0owSUhzZ1kzSmxZWFJsUkdsdFpXNXphVzVoYkdsMGVWSmxaSFZqYVc1blYyOXlhMlZ5TENCSlVtVmtkV05sUkdsdFpXNXphVzl1WVd4cGRIbFNaWE4xYkhRZ2ZTQm1jbTl0SUNjdUwzZHZjbXRsY25NdlpHbHRaVzV6YVc5dVlXeHBkSGt0Y21Wa2RXTnBibWN0ZDI5eWEyVnlMV055WldGMGIzSW5PMXh1WEc1Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJ5WldSMVkyVkVhVzFsYm5OcGJtRnNhWFI1VjJsMGFFNXZjbTFoYkdsNllYUnBiMjRvWEc0Z0lDQWdaR0YwWVVOdmJEb2dRbWwwUVhKeVlYbGJYWHhXWldOMGIzSmJYWHh6ZEhKcGJtZGJYU3dnWEc0Z0lDQWdiV1YwYUc5a1RtRnRaVG9nYzNSeWFXNW5MQ0JjYmlBZ0lDQnphVzFwYkdGeWFYUjVUV1YwY21sak9pQkNhWFJCY25KaGVVMWxkSEpwWTNOOFZtVmpkRzl5VFdWMGNtbGpjM3hUZEhKcGJtZE5aWFJ5YVdOekxGeHVJQ0FnSUc5d2RHbHZibk0vT2lCaGJua3BPaUJRY205dGFYTmxQRWxTWldSMVkyVkVhVzFsYm5OcGIyNWhiR2wwZVZKbGMzVnNkRDRnZTF4dVhHNGdJQ0FnWTI5dWMzUWdaR2x0Wlc1emFXOXVZV3hwZEhsU1pXUjFZMlZTWlhNNklFbFNaV1IxWTJWRWFXMWxibk5wYjI1aGJHbDBlVkpsYzNWc2RDQTlYRzRnSUNBZ0lDQWdJR0YzWVdsMElHTnlaV0YwWlVScGJXVnVjMmx1WVd4cGRIbFNaV1IxWTJsdVoxZHZjbXRsY2loY2JpQWdJQ0FnSUNBZ0lDQWdJSHNnWkdGMFlUb2daR0YwWVVOdmJDd2diV1YwY21sak9pQnphVzFwYkdGeWFYUjVUV1YwY21saklIMGdZWE1nVm1Gc2FXUlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFsZEdodlpFNWhiV1VzSUc5d2RHbHZibk1wTzF4dVhHNGdJQ0FnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTXVaVzFpWldSa2FXNW5JRDBnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTXVaVzFpWldSa2FXNW5MbTFoY0NocGRDQTlQaUJ1YjNKdFlXeHBlbVVvYVhRcEtUdGNiaUFnSUNCeVpYUjFjbTRnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTTdYRzU5SWwxOSIsImltcG9ydCAqIGFzIGZsIGZyb20gJ2Zhc3Rlc3QtbGV2ZW5zaHRlaW4nO1xuaW1wb3J0IHsgamFyb1dpbmtsZXIgfSBmcm9tICdqYXJvLXdpbmtsZXItdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBkaXN0YW5jZU1ldHJpY3MgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9zaW1pbGFyaXR5LW1ldHJpY3MnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5leHBvcnQgY29uc3QgQXZhaWxhYmxlTWV0cmljcyA9IHtcbiAgICAnVmVjdG9yJzoge1xuICAgICAgICAnRXVjbGlkZWFuRGlzdGFuY2UnOiBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZSxcbiAgICB9LFxuICAgICdTdHJpbmcnOiB7XG4gICAgICAgICdMZXZlbnNodGVpbic6IGZsLmRpc3RhbmNlLFxuICAgICAgICAnSmFyby1XaW5rbGVyJzogamFyb1dpbmtsZXIsXG4gICAgfSxcbiAgICAnQml0QXJyYXknOiB7XG4gICAgICAgICdUYW5pbW90byc6IGRpc3RhbmNlTWV0cmljc1snVGFuaW1vdG8nXSxcbiAgICAgICAgJ0RpY2UnOiBkaXN0YW5jZU1ldHJpY3NbJ0RpY2UnXSxcbiAgICAgICAgJ0FzeW1tZXRyaWMnOiBkaXN0YW5jZU1ldHJpY3NbJ0FzeW1tZXRyaWMnXSxcbiAgICAgICAgJ0JyYXVuLUJsYW5xdWV0JzogZGlzdGFuY2VNZXRyaWNzWydCcmF1bi1CbGFucXVldCddLFxuICAgICAgICAnQ29zaW5lJzogZGlzdGFuY2VNZXRyaWNzWydDb3NpbmUnXSxcbiAgICAgICAgJ0t1bGN6eW5za2knOiBkaXN0YW5jZU1ldHJpY3NbJ0t1bGN6eW5za2knXSxcbiAgICAgICAgJ01jLUNvbm5hdWdoZXknOiBkaXN0YW5jZU1ldHJpY3NbJ01jLUNvbm5hdWdoZXknXSxcbiAgICAgICAgJ1JvZ290LUdvbGRiZXJnJzogZGlzdGFuY2VNZXRyaWNzWydSb2dvdC1Hb2xkYmVyZyddLFxuICAgICAgICAnUnVzc2VsJzogZGlzdGFuY2VNZXRyaWNzWydSdXNzZWwnXSxcbiAgICAgICAgJ1Nva2FsJzogZGlzdGFuY2VNZXRyaWNzWydTb2thbCddLFxuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IE1ldHJpY1RvRGF0YVR5cGUgPSBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzKVxuICAgIC5yZWR1Y2UoKHJldCwga2V5KSA9PiB7XG4gICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1trZXldKSkge1xuICAgICAgICByZXRbdmFsXSA9IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn0sIHt9KTtcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ01ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaXRBcnJheU1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ0JpdEFycmF5Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3Rvck1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1ZlY3Rvcic7XG59XG4vKiogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IHN0cmluZyBtZWFzdXJlcy4gKi9cbmV4cG9ydCBjbGFzcyBNZWFzdXJlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE1lYXN1cmUgd2l0aCAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCBNZXRob2QgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXRob2QpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuZGF0YVR5cGUgPSBNZXRyaWNUb0RhdGFUeXBlW21ldGhvZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBmdW5jdGlvbiBzcGVjaWZpZWQuXG4gICAgICogQHJldHVybiB7RGlzdGFuY2VNZXRyaWN9IENhbGxiYWNrIG9mIHRoZSBtZWFzdXJlIGNob3Nlbi5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBnZXRNZWFzdXJlKCkge1xuICAgICAgICBjb25zdCBkaWN0ID0gQXZhaWxhYmxlTWV0cmljcztcbiAgICAgICAgcmV0dXJuIGRpY3RbdGhpcy5kYXRhVHlwZV1bdGhpcy5tZXRob2RdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZS5cbiAgICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gZGF0YVR5cGUgTWV0cmljJ3MgZGF0YSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IE1ldHJpYyBuYW1lcyB3aGljaCBleHBlY3RzIHRoZSBnaXZlbiBkYXRhIHR5cGVcbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TWV0cmljQnlEYXRhVHlwZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1tkYXRhVHlwZV0pO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBtZXRyaWMgbmFtZXMgYXZhaWxhYmxlLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICovXG4gICAgc3RhdGljIGdldCBhdmFpbGFibGVNZWFzdXJlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaV1F0YldWMGNtbGpjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUjVjR1ZrTFcxbGRISnBZM011ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3h4UWtGQmNVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZETEUxQlFVMHNlVUpCUVhsQ0xFTkJRVU03UVVGRmNFUXNUMEZCVHl4RlFVRkRMR1ZCUVdVc1JVRkJReXhOUVVGTkxHdEVRVUZyUkN4RFFVRkRPMEZCUTJwR0xFOUJRVThzUlVGQlF5d3dRa0ZCTUVJc1JVRkJReXhOUVVGTkxHbEVRVUZwUkN4RFFVRkRPMEZCU1ROR0xFMUJRVTBzUTBGQlF5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGSE8wbEJRemxDTEZGQlFWRXNSVUZCUlR0UlFVTlNMRzFDUVVGdFFpeEZRVUZGTERCQ1FVRXdRanRMUVVOb1JEdEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMR0ZCUVdFc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVUdFJRVU14UWl4alFVRmpMRVZCUVVVc1YwRkJWenRMUVVNMVFqdEpRVU5FTEZWQlFWVXNSVUZCUlR0UlFVTldMRlZCUVZVc1JVRkJSU3hsUVVGbExFTkJRVU1zVlVGQlZTeERRVUZETzFGQlEzWkRMRTFCUVUwc1JVRkJSU3hsUVVGbExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF5OUNMRmxCUVZrc1JVRkJSU3hsUVVGbExFTkJRVU1zV1VGQldTeERRVUZETzFGQlF6TkRMR2RDUVVGblFpeEZRVUZGTEdWQlFXVXNRMEZCUXl4blFrRkJaMElzUTBGQlF6dFJRVU51UkN4UlFVRlJMRVZCUVVVc1pVRkJaU3hEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU51UXl4WlFVRlpMRVZCUVVVc1pVRkJaU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU16UXl4bFFVRmxMRVZCUVVVc1pVRkJaU3hEUVVGRExHVkJRV1VzUTBGQlF6dFJRVU5xUkN4blFrRkJaMElzUlVGQlJTeGxRVUZsTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03VVVGRGJrUXNVVUZCVVN4RlFVRkZMR1ZCUVdVc1EwRkJReXhSUVVGUkxFTkJRVU03VVVGRGJrTXNUMEZCVHl4RlFVRkZMR1ZCUVdVc1EwRkJReXhQUVVGUExFTkJRVU03UzBGRGJFTTdRMEZEUml4RFFVRkRPMEZCUlVZc1RVRkJUU3hEUVVGRExFMUJRVTBzWjBKQlFXZENMRWRCUVhGQ0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03UzBGRE5VVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJjVUlzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlR0SlFVTnlReXhMUVVGTExFMUJRVTBzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCZVVJc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRE1VVXNSMEZCUnl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTMEZEZEVNN1NVRkRSQ3hQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5pTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVZkVUxFMUJRVTBzVlVGQlZTeGpRVUZqTEVOQlFVTXNTVUZCYTBJN1NVRkRMME1zVDBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdRVUZETlVNc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeG5Ra0ZCWjBJc1EwRkJReXhKUVVGclFqdEpRVU5xUkN4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRlZCUVZVc1EwRkJRenRCUVVNNVF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR05CUVdNc1EwRkJReXhKUVVGclFqdEpRVU12UXl4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJRenRCUVVNMVF5eERRVUZETzBGQlJVUXNORVJCUVRSRU8wRkJRelZFTEUxQlFVMHNUMEZCVHl4UFFVRlBPMGxCU1d4Q096czdPMDlCU1VjN1NVRkRTQ3haUVVGWkxFMUJRVzlDTzFGQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGMVFpeERRVUZETzBsQlEycEZMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBrc1ZVRkJWVHRSUVVObUxFMUJRVTBzU1VGQlNTeEhRVUZ6UkN4blFrRkJaMElzUTBGQlF6dFJRVU5xUml4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRekZETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTkpMRTFCUVUwc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRTBRanRSUVVNMVJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOcVJDeERRVUZETzBsQlJVUTdPMDFCUlVVN1NVRkRSaXhOUVVGTkxFdEJRVXNzYVVKQlFXbENPMUZCUXpGQ0xFOUJRVThzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzBsQlEzWkRMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHWnNJR1p5YjIwZ0oyWmhjM1JsYzNRdGJHVjJaVzV6YUhSbGFXNG5PMXh1YVcxd2IzSjBJSHRxWVhKdlYybHVhMnhsY24wZ1puSnZiU0FuYW1GeWJ5MTNhVzVyYkdWeUxYUjVjR1Z6WTNKcGNIUW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVTFsZEhKcFkzMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRrYVhOMFlXNWpaVTFsZEhKcFkzTjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM05wYldsc1lYSnBkSGt0YldWMGNtbGpjeWM3WEc1cGJYQnZjblFnZTJOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ1FtbDBRWEp5WVhrZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdlltbDBMV0Z5Y21GNUp6dGNibWx0Y0c5eWRDQjdWbVZqZEc5eUxDQlRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOeklEMGdlMXh1SUNBblZtVmpkRzl5SnpvZ2UxeHVJQ0FnSUNkRmRXTnNhV1JsWVc1RWFYTjBZVzVqWlNjNklHTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObExGeHVJQ0I5TEZ4dUlDQW5VM1J5YVc1bkp6b2dlMXh1SUNBZ0lDZE1aWFpsYm5Ob2RHVnBiaWM2SUdac0xtUnBjM1JoYm1ObExGeHVJQ0FnSUNkS1lYSnZMVmRwYm10c1pYSW5PaUJxWVhKdlYybHVhMnhsY2l4Y2JpQWdmU3hjYmlBZ0owSnBkRUZ5Y21GNUp6b2dlMXh1SUNBZ0lDZFVZVzVwYlc5MGJ5YzZJR1JwYzNSaGJtTmxUV1YwY21samMxc25WR0Z1YVcxdmRHOG5YU3hjYmlBZ0lDQW5SR2xqWlNjNklHUnBjM1JoYm1ObFRXVjBjbWxqYzFzblJHbGpaU2RkTEZ4dUlDQWdJQ2RCYzNsdGJXVjBjbWxqSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkQmMzbHRiV1YwY21sakoxMHNYRzRnSUNBZ0owSnlZWFZ1TFVKc1lXNXhkV1YwSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkQ2NtRjFiaTFDYkdGdWNYVmxkQ2RkTEZ4dUlDQWdJQ2REYjNOcGJtVW5PaUJrYVhOMFlXNWpaVTFsZEhKcFkzTmJKME52YzJsdVpTZGRMRnh1SUNBZ0lDZExkV3hqZW5sdWMydHBKem9nWkdsemRHRnVZMlZOWlhSeWFXTnpXeWRMZFd4amVubHVjMnRwSjEwc1hHNGdJQ0FnSjAxakxVTnZibTVoZFdkb1pYa25PaUJrYVhOMFlXNWpaVTFsZEhKcFkzTmJKMDFqTFVOdmJtNWhkV2RvWlhrblhTeGNiaUFnSUNBblVtOW5iM1F0UjI5c1pHSmxjbWNuT2lCa2FYTjBZVzVqWlUxbGRISnBZM05iSjFKdloyOTBMVWR2YkdSaVpYSm5KMTBzWEc0Z0lDQWdKMUoxYzNObGJDYzZJR1JwYzNSaGJtTmxUV1YwY21samMxc25VblZ6YzJWc0oxMHNYRzRnSUNBZ0oxTnZhMkZzSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkVGIydGhiQ2RkTEZ4dUlDQjlMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUUxbGRISnBZMVJ2UkdGMFlWUjVjR1U2SUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCUFltcGxZM1F1YTJWNWN5aEJkbUZwYkdGaWJHVk5aWFJ5YVdOektWeHVJQ0F1Y21Wa2RXTmxLQ2h5WlhRNklGTjBjbWx1WjBScFkzUnBiMjVoY25rc0lHdGxlU2tnUFQ0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RtRnNJRzltSUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYmEyVjVJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzEwcEtTQjdYRzRnSUNBZ0lDQnlaWFJiZG1Gc0lHRnpJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMTBnUFNCclpYazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBzSUh0OUtUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWeklEMGdhMlY1YjJZZ2RIbHdaVzltSUVGMllXbHNZV0pzWlUxbGRISnBZM003WEc1bGVIQnZjblFnZEhsd1pTQlRkSEpwYm1kTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMU4wY21sdVp5ZGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1FtbDBRWEp5WVhsTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMEpwZEVGeWNtRjVKMTA3WEc1bGVIQnZjblFnZEhsd1pTQldaV04wYjNKTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMVpsWTNSdmNpZGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1MyNXZkMjVOWlhSeWFXTnpJRDBnVTNSeWFXNW5UV1YwY21samN5QjhJRUpwZEVGeWNtRjVUV1YwY21samN5QjhJRlpsWTNSdmNrMWxkSEpwWTNNN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUZaaGJHbGtWSGx3WlhNZ1BTQjdaR0YwWVRvZ2MzUnlhVzVuVzEwc0lHMWxkSEpwWXpvZ1UzUnlhVzVuVFdWMGNtbGpjMzBnZkNCN1pHRjBZVG9nVm1WamRHOXlXMTBzSUcxbGRISnBZem9nVm1WamRHOXlUV1YwY21samMzMGdmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRrWVhSaE9pQkNhWFJCY25KaGVWdGRMQ0J0WlhSeWFXTTZJRUpwZEVGeWNtRjVUV1YwY21samMzMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzFOMGNtbHVaMDFsZEhKcFl5aHVZVzFsT2lCTGJtOTNiazFsZEhKcFkzTXBJSHRjYmlBZ2NtVjBkWEp1SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYm1GdFpWMGdQVDBnSjFOMGNtbHVaeWM3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMEpwZEVGeWNtRjVUV1YwY21saktHNWhiV1U2SUV0dWIzZHVUV1YwY21samN5a2dlMXh1SUNCeVpYUjFjbTRnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR1WVcxbFhTQTlQU0FuUW1sMFFYSnlZWGtuTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5XWldOMGIzSk5aWFJ5YVdNb2JtRnRaVG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUhKbGRIVnliaUJOWlhSeWFXTlViMFJoZEdGVWVYQmxXMjVoYldWZElEMDlJQ2RXWldOMGIzSW5PMXh1ZlZ4dVhHNHZLaW9nVlc1cFptbGxaQ0JqYkdGemN5QnBiWEJzWlcxbGJuUnBibWNnWkdsbVptVnlaVzUwSUhOMGNtbHVaeUJ0WldGemRYSmxjeTRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWldGemRYSmxJSHRjYmlBZ2NISnZkR1ZqZEdWa0lHMWxkR2h2WkRvZ1MyNXZkMjVOWlhSeWFXTnpPMXh1SUNCd2NtOTBaV04wWldRZ1pHRjBZVlI1Y0dVNklFRjJZV2xzWVdKc1pVUmhkR0ZVZVhCbGN6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCaGJpQnBibk4wWVc1alpTQnZaaUJOWldGemRYSmxJSGRwZEdnZ0xseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYldWMGFHOWtJRTFsZEdodlpDQjBieUJqWVd4amRXeGhkR1VnWkdsemRHRnVZMlVnWW1WMGQyVmxiaUJ6ZEhKcGJtZHpMbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdUV1ZoYzNWeVpYSmNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRzl5S0cxbGRHaHZaRG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUNBZ2RHaHBjeTV0WlhSb2IyUWdQU0J0WlhSb2IyUTdYRzRnSUNBZ2RHaHBjeTVrWVhSaFZIbHdaU0E5SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYldWMGFHOWtYU0JoY3lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmpkWE4wYjIwZ2MzUnlhVzVuSUdScGMzUmhibU5sSUdaMWJtTjBhVzl1SUhOd1pXTnBabWxsWkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3UkdsemRHRnVZMlZOWlhSeWFXTjlJRU5oYkd4aVlXTnJJRzltSUhSb1pTQnRaV0Z6ZFhKbElHTm9iM05sYmk1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUUxbFlYTjFjbVZ5WEc0Z0lDQXFMMXh1SUNCd2RXSnNhV01nWjJWMFRXVmhjM1Z5WlNncE9pQkVhWE4wWVc1alpVMWxkSEpwWXlCN1hHNGdJQ0FnWTI5dWMzUWdaR2xqZERvZ2UxdHJaWGs2SUhOMGNtbHVaMTA2SUh0YmEyVjVNam9nYzNSeWFXNW5YVG9nUkdsemRHRnVZMlZOWlhSeWFXTjlmU0E5SUVGMllXbHNZV0pzWlUxbGRISnBZM003WEc0Z0lDQWdjbVYwZFhKdUlHUnBZM1JiZEdocGN5NWtZWFJoVkhsd1pWMWJkR2hwY3k1dFpYUm9iMlJkTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1kzVnpkRzl0SUhOMGNtbHVaeUJrYVhOMFlXNWpaU0JpZVNCMGFHVWdaMmwyWlc0Z1pHRjBZU0IwZVhCbExseHVJQ0FnS2lCQWNHRnlZVzBnZTBGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzMwZ1pHRjBZVlI1Y0dVZ1RXVjBjbWxqSjNNZ1pHRjBZU0IwZVhCbFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMXRkZlNCTlpYUnlhV01nYm1GdFpYTWdkMmhwWTJnZ1pYaHdaV04wY3lCMGFHVWdaMmwyWlc0Z1pHRjBZU0IwZVhCbFhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJuWlhSTlpYUnlhV05DZVVSaGRHRlVlWEJsS0dSaGRHRlVlWEJsT2lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNcE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYlpHRjBZVlI1Y0dWZEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCU1pYUjFjbTV6SUcxbGRISnBZeUJ1WVcxbGN5QmhkbUZwYkdGaWJHVXVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQk5aV0Z6ZFhKbGNseHVJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBJR0YyWVdsc1lXSnNaVTFsWVhOMWNtVnpLQ2s2SUhOMGNtbHVaMXRkSUh0Y2JpQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjeWs3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgeyBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvc2ltaWxhcml0eS1tZXRyaWNzJztcbmxldCB6b29tID0gZmFsc2U7XG4vLyBTZWFyY2hlcyBmb3IgYWN0aXZpdHkgY2xpZmZzIGluIGEgY2hlbWljYWwgZGF0YXNldCBieSBzZWxlY3RlZCBjdXRvZmZcbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpdml0eUNsaWZmcyhkZiwgc2VxQ29sLCBheGVzTmFtZXMsIHNjYXR0ZXJUaXRsZSwgYWN0aXZpdGllcywgc2ltaWxhcml0eSwgc2ltaWxhcml0eU1ldHJpYywgbWV0aG9kTmFtZSwgc2VtVHlwZSwgdW5pdHMsIHNlcVNwYWNlRnVuYywgc2ltRnVuYywgdG9vbHRpcERyYXdGdW5jLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXV0b21hdGljU2ltaWxhcml0eUxpbWl0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IE1JTl9TSU1JTEFSSVRZID0gODA7XG4gICAgICAgIGNvbnN0IGluaXRpYWxTaW1pbGFyaXR5TGltaXQgPSBhdXRvbWF0aWNTaW1pbGFyaXR5TGltaXQgPyBNSU5fU0lNSUxBUklUWSA6IHNpbWlsYXJpdHkgLyAxMDA7XG4gICAgICAgIGNvbnN0IHsgZGlzdGFuY2UsIGNvb3JkaW5hdGVzIH0gPSB5aWVsZCBzZXFTcGFjZUZ1bmMoe1xuICAgICAgICAgICAgc2VxQ29sOiBzZXFDb2wsXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxuICAgICAgICAgICAgc2ltaWxhcml0eU1ldHJpYzogc2ltaWxhcml0eU1ldHJpYyxcbiAgICAgICAgICAgIGVtYmVkQXhlc05hbWVzOiBheGVzTmFtZXMsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb29yZGluYXRlcylcbiAgICAgICAgICAgIGRmLmNvbHVtbnMuYWRkKGNvbCk7XG4gICAgICAgIGNvbnN0IGRmU2VxID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbUxpc3QoJ3N0cmluZycsICdzZXEnLCBzZXFDb2wudG9MaXN0KCkpXSk7XG4gICAgICAgIGNvbnN0IGRpbSA9IHNlcUNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNpbUFyciA9IEFycmF5KGRpbSAtIDEpO1xuICAgICAgICBpZiAoIWRpc3RhbmNlKVxuICAgICAgICAgICAgeWllbGQgZ2V0U2ltaWxhcml0aWVzTWFyaXgoZGltLCBzZXFDb2wsIGRmU2VxLCBzaW1BcnIsIHNpbUZ1bmMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBnZXRTaW1pbGFyaXRpZXNNYXJpeEZyb21EaXN0YW5jZXMoZGltLCBkaXN0YW5jZSwgc2ltQXJyKTtcbiAgICAgICAgY29uc3Qgb3B0U2ltaWxhcml0eUxpbWl0ID0gaW5pdGlhbFNpbWlsYXJpdHlMaW1pdDtcbiAgICAgICAgY29uc3Qgc2ltVmFscyA9IFtdO1xuICAgICAgICBjb25zdCBzYWxpVmFscyA9IFtdO1xuICAgICAgICBjb25zdCBuMSA9IFtdO1xuICAgICAgICBjb25zdCBuMiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBkaW0gLSAxOyArK2kpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqICE9IGRpbSAtIDEgLSBpOyArK2opIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW0gPSBzaW1BcnJbaV0uZ2V0KGopO1xuICAgICAgICAgICAgICAgIGlmIChzaW0gPj0gb3B0U2ltaWxhcml0eUxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIG4xLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIG4yLnB1c2goaSArIGogKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgc2ltVmFscy5wdXNoKHNpbSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhY3Rpdml0aWVzLmdldChpKSAtIGFjdGl2aXRpZXMuZ2V0KGkgKyBqICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltICE9IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWxpVmFscy5wdXNoKGRpZmYgLyAoMSAtIHNpbSkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWxpVmFscy5wdXNoKEluZmluaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FsaVZhbHNXaXRob3V0SW5maW5pdHkgPSBzYWxpVmFscy5maWx0ZXIoaXQgPT4gaXQgIT09IEluZmluaXR5KTtcbiAgICAgICAgY29uc3Qgc2FsaU1pbiA9IE1hdGgubWluKC4uLnNhbGlWYWxzV2l0aG91dEluZmluaXR5KTtcbiAgICAgICAgY29uc3Qgc2FsaU1heCA9IE1hdGgubWF4KC4uLnNhbGlWYWxzV2l0aG91dEluZmluaXR5KTtcbiAgICAgICAgY29uc3Qgc2FsaU9wYWNpdHlDb2VmID0gMC44IC8gKHNhbGlNYXggLSBzYWxpTWluKTtcbiAgICAgICAgY29uc3QgbmVpZ2hib3Vyc0NvdW50ID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcbiAgICAgICAgY29uc3Qgc2ltaWxhcml0eUNvdW50ID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcbiAgICAgICAgY29uc3Qgc2FsaUNvdW50ID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gbjEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG5laWdoYm91cnNDb3VudFtuMVtpXV0gKz0gMTtcbiAgICAgICAgICAgIG5laWdoYm91cnNDb3VudFtuMltpXV0gKz0gMTtcbiAgICAgICAgICAgIHNpbWlsYXJpdHlDb3VudFtuMVtpXV0gKz0gc2ltVmFsc1tpXTtcbiAgICAgICAgICAgIHNpbWlsYXJpdHlDb3VudFtuMltpXV0gKz0gc2ltVmFsc1tpXTtcbiAgICAgICAgICAgIGlmIChzYWxpVmFsc1tpXSAhPSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0aWVzLmdldChuMVtpXSkgPiBhY3Rpdml0aWVzLmdldChuMltpXSkpXG4gICAgICAgICAgICAgICAgICAgIHNhbGlDb3VudFtuMVtpXV0gKz0gc2FsaVZhbHNbaV07XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzYWxpQ291bnRbbjJbaV1dICs9IHNhbGlWYWxzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhbGkgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIGBzYWxpXyR7YXhlc05hbWVzWzBdLnN1YnN0cmluZyhheGVzTmFtZXNbMF0ubGFzdEluZGV4T2YoJ18nKSl9YCwgc2FsaUNvdW50KTtcbiAgICAgICAgZGYuY29sdW1ucy5hZGQoc2FsaSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyhkZi5uYW1lKTtcbiAgICAgICAgY29uc3Qgc3AgPSB2aWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHtcbiAgICAgICAgICAgIHhDb2x1bW5OYW1lOiBheGVzTmFtZXNbMF0sXG4gICAgICAgICAgICB5Q29sdW1uTmFtZTogYXhlc05hbWVzWzFdLFxuICAgICAgICAgICAgc2l6ZTogc2FsaS5uYW1lLFxuICAgICAgICAgICAgY29sb3I6IGFjdGl2aXRpZXMubmFtZSxcbiAgICAgICAgICAgIHNob3dYU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd1lTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93U2l6ZVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dDb2xvclNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIG1hcmtlck1pblNpemU6IDUsXG4gICAgICAgICAgICBtYXJrZXJNYXhTaXplOiAyNSxcbiAgICAgICAgICAgIHRpdGxlOiBzY2F0dGVyVGl0bGVcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBzcC5nZXRJbmZvKClbJ2NhbnZhcyddO1xuICAgICAgICBjb25zdCBsaW5lc1JlcyA9IGNyZWF0ZUxpbmVzKG4xLCBuMiwgc2VxQ29sLCBhY3Rpdml0aWVzLCBzYWxpVmFscywgc2VtVHlwZSwgdW5pdHMpO1xuICAgICAgICBjb25zdCB0b29sdGlwcyA9IHt9O1xuICAgICAgICBsaW5lc1Jlcy5saW5lc0RmLm9uQ3VycmVudENlbGxDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9sSWR4ID0gbGluZXNSZXMubGluZXNEZi5jdXJyZW50Q29sICYmIGxpbmVzUmVzLmxpbmVzRGYuY3VycmVudENvbC5uYW1lID09PSAnMl9zZXEnID8gMSA6IDA7XG4gICAgICAgICAgICBzcC5kYXRhRnJhbWUuY3VycmVudFJvd0lkeCA9XG4gICAgICAgICAgICAgICAgbGluZXNSZXMubGluZXNEZi5jdXJyZW50Um93SWR4ICE9PSAtMSA/IGxpbmVzUmVzLmxpbmVzW2xpbmVzUmVzLmxpbmVzRGYuY3VycmVudFJvd0lkeF0ubW9sc1tjdXJyZW50TW9sSWR4XSA6IC0xO1xuICAgICAgICAgICAgc3AuZGF0YUZyYW1lLnNlbGVjdGlvbi5zZXQoMCwgIWxpbmVzUmVzLmxpbmVzWzBdLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNwLmRhdGFGcmFtZS5zZWxlY3Rpb24uc2V0KDAsIGxpbmVzUmVzLmxpbmVzWzBdLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGxpbmVzRGZHcmlkLmludmFsaWRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpbmVzUmVzLmxpbmVzRGYub25TZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmVzUmVzLmxpbmVzRGYubW91c2VPdmVyUm93SWR4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1Jlcy5saW5lc1tsaW5lc1Jlcy5saW5lc0RmLm1vdXNlT3ZlclJvd0lkeF07XG4gICAgICAgICAgICAgICAgbGluZS5zZWxlY3RlZCA9ICFsaW5lLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgIGlmICghbGluZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgZGYuc2VsZWN0aW9uLnNldEFsbChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lc1Jlcy5saW5lcy5mb3JFYWNoKChsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGwuc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIGwubW9scy5mb3JFYWNoKChtKSA9PiBkZi5zZWxlY3Rpb24uc2V0KG0sIHRydWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGluZXNEZkdyaWQuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGluZXNEZkdyaWQgPSBsaW5lc1Jlcy5saW5lc0RmLnBsb3QuZ3JpZCgpLnNvcnQoWydhY3RfZGlmZiddLCBbZmFsc2VdKTtcbiAgICAgICAgbGluZXNEZkdyaWQub25DZWxsQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHpvb20gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGlzdENsaWZmc0xpbmsgPSB1aS5idXR0b24oYCR7bGluZXNSZXMubGluZXNEZi5yb3dDb3VudH0gY2xpZmZzYCwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xpZmZzRGlhbG9nID0gdWkuZGlhbG9nKHsgdGl0bGU6ICdBY3Rpdml0eSBjbGlmZnMnIH0pXG4gICAgICAgICAgICAgICAgLmFkZChsaW5lc0RmR3JpZC5yb290KVxuICAgICAgICAgICAgICAgIC5zaG93KCk7XG4gICAgICAgICAgICBjbGlmZnNEaWFsb2cucm9vdC5pZCA9ICdjbGlmZnNfZGlhbG9nJztcbiAgICAgICAgfSk7XG4gICAgICAgIGxpc3RDbGlmZnNMaW5rLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgbGlzdENsaWZmc0xpbmsuc3R5bGUudG9wID0gJzEwcHgnO1xuICAgICAgICBsaXN0Q2xpZmZzTGluay5zdHlsZS5yaWdodCA9ICcxMHB4JztcbiAgICAgICAgc3Aucm9vdC5hcHBlbmQobGlzdENsaWZmc0xpbmspO1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICB0aW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gY2hlY2tDdXJzb3JPbkxpbmUoZXZlbnQsIGNhbnZhcywgbGluZXNSZXMubGluZXMpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5lICYmIGRmLm1vdXNlT3ZlclJvd0lkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b29sdGlwc1tsaW5lLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJhd1Rvb2x0aXBQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHM6IHRvb2x0aXBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGY6IGRmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcUNvbDogc2VxQ29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBEcmF3RnVuYyhkcmF3VG9vbHRpcFBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdWkudG9vbHRpcC5zaG93KHRvb2x0aXBzW2xpbmUuaWRdLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBjaGVja0N1cnNvck9uTGluZShldmVudCwgY2FudmFzLCBsaW5lc1Jlcy5saW5lcyk7XG4gICAgICAgICAgICBpZiAobGluZSAmJiBkZi5tb3VzZU92ZXJSb3dJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZS5zZWxlY3RlZCA9ICFsaW5lLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBsaW5lc1Jlcy5saW5lc0RmLnNlbGVjdGlvbi5zZXQobGluZS5pZCwgbGluZS5zZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmLnNlbGVjdGlvbi5zZXRBbGwoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBsaW5lc1Jlcy5saW5lcy5mb3JFYWNoKChsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobC5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLm1vbHMuZm9yRWFjaCgobSkgPT4gZGYuc2VsZWN0aW9uLnNldChtLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzUmVzLmxpbmVzRGYuY3VycmVudFJvd0lkeCAhPT0gbGluZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNSZXMubGluZXNEZi5jdXJyZW50Um93SWR4ID0gbGluZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmLmN1cnJlbnRSb3dJZHggPSBsaW5lLm1vbHNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZi5zZWxlY3Rpb24uc2V0KDAsICFsaW5lc1Jlcy5saW5lc1swXS5zZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZi5zZWxlY3Rpb24uc2V0KDAsIGxpbmVzUmVzLmxpbmVzWzBdLnNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNwLm9uRXZlbnQoJ2Q0LWJlZm9yZS1kcmF3LXNjZW5lJylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gcmVuZGVyTGluZXMoc3AsIGF4ZXNOYW1lc1swXSwgYXhlc05hbWVzWzFdLCBsaW5lc1Jlcywgc2FsaVZhbHMsIHNhbGlPcGFjaXR5Q29lZiwgc2FsaU1pbik7XG4gICAgICAgICAgICBpZiAoem9vbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gbGluZXNbbGluZXNSZXMubGluZXNEZi5jdXJyZW50Um93SWR4XTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeDEgPSBzcC5kYXRhRnJhbWUuZ2V0KGF4ZXNOYW1lc1swXSwgY3VycmVudExpbmUubW9sc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkxID0gc3AuZGF0YUZyYW1lLmdldChheGVzTmFtZXNbMV0sIGN1cnJlbnRMaW5lLm1vbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4MiA9IHNwLmRhdGFGcmFtZS5nZXQoYXhlc05hbWVzWzBdLCBjdXJyZW50TGluZS5tb2xzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeTIgPSBzcC5kYXRhRnJhbWUuZ2V0KGF4ZXNOYW1lc1sxXSwgY3VycmVudExpbmUubW9sc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhEaWZmID0gTWF0aC5hYnMoeDEgLSB4MikgKiA1O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5RGlmZiA9IE1hdGguYWJzKHkxIC0geTIpICogNTtcbiAgICAgICAgICAgICAgICAgICAgc3Auem9vbSh4MSA8IHgyID8geDEgLSB4RGlmZiA6IHgyIC0geERpZmYsIHkxID4geTIgPyB5MSArIHlEaWZmIDogeTIgKyB5RGlmZiwgeDEgPiB4MiA/IHgxICsgeERpZmYgOiB4MiArIHhEaWZmLCB5MSA8IHkyID8geTEgLSB5RGlmZiA6IHkyIC0geURpZmYpO1xuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICAgICAgem9vbSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3AuYWRkUHJvcGVydHkoJ3NpbWlsYXJpdHlMaW1pdCcsICdkb3VibGUnLCBvcHRTaW1pbGFyaXR5TGltaXQpO1xuICAgICAgICByZXR1cm4gc3A7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGVja0N1cnNvck9uTGluZShldmVudCwgY2FudmFzLCBsaW5lcykge1xuICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguYWJzKE1hdGguaHlwb3QobGluZS5hWzBdIC0geCwgbGluZS5hWzFdIC0geSkgK1xuICAgICAgICAgICAgTWF0aC5oeXBvdChsaW5lLmJbMF0gLSB4LCBsaW5lLmJbMV0gLSB5KSAtIE1hdGguaHlwb3QobGluZS5hWzBdIC0gbGluZS5iWzBdLCBsaW5lLmFbMV0gLSBsaW5lLmJbMV0pKTtcbiAgICAgICAgaWYgKGRpc3QgPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gcmVuZGVyTGluZXMoc3AsIHhBeGlzLCB5QXhpcywgbGluZXNSZXMsIHNhbGlWYWxzLCBzYWxpT3BhY2l0eUNvZWYsIHNhbGlNaW4pIHtcbiAgICBjb25zdCBsaW5lcyA9IGxpbmVzUmVzLmxpbmVzO1xuICAgIGNvbnN0IGNhbnZhcyA9IHNwLmdldEluZm8oKVsnY2FudmFzJ107XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY29uc3QgeCA9IHNwLmRhdGFGcmFtZS5jb2x1bW5zLmJ5TmFtZSh4QXhpcyk7XG4gICAgY29uc3QgeSA9IHNwLmRhdGFGcmFtZS5jb2x1bW5zLmJ5TmFtZSh5QXhpcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2ludEZyb20gPSBzcC53b3JsZFRvU2NyZWVuKHguZ2V0KGxpbmVzW2ldLm1vbHNbMF0pLCB5LmdldChsaW5lc1tpXS5tb2xzWzBdKSk7XG4gICAgICAgIGNvbnN0IHBvaW50VG8gPSBzcC53b3JsZFRvU2NyZWVuKHguZ2V0KGxpbmVzW2ldLm1vbHNbMV0pLCB5LmdldChsaW5lc1tpXS5tb2xzWzFdKSk7XG4gICAgICAgIGxpbmVzW2ldLmEgPSBbcG9pbnRGcm9tLngsIHBvaW50RnJvbS55XTtcbiAgICAgICAgbGluZXNbaV0uYiA9IFtwb2ludFRvLngsIHBvaW50VG8ueV07XG4gICAgICAgIGNvbnN0IGxpbmUgPSBuZXcgUGF0aDJEKCk7XG4gICAgICAgIGxpbmUubW92ZVRvKGxpbmVzW2ldLmFbMF0sIGxpbmVzW2ldLmFbMV0pO1xuICAgICAgICBjb25zdCBjb2xvciA9IGxpbmVzW2ldLnNlbGVjdGVkID8gJzI1NSwyNTUsMCcgOiAnMCwxMjgsMCc7XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSBzYWxpVmFsc1tpXSA9PT0gSW5maW5pdHkgPyAxIDogMC4yICsgKHNhbGlWYWxzW2ldIC0gc2FsaU1pbikgKiBzYWxpT3BhY2l0eUNvZWY7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGByZ2JhKCR7Y29sb3J9LCR7b3BhY2l0eX0pYDtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVzW2ldLmlkID09PSBsaW5lc1Jlcy5saW5lc0RmLmN1cnJlbnRSb3dJZHggPyAzIDogMTtcbiAgICAgICAgbGluZS5saW5lVG8obGluZXNbaV0uYlswXSwgbGluZXNbaV0uYlsxXSk7XG4gICAgICAgIGN0eC5zdHJva2UobGluZSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxpbmVzKG4xLCBuMiwgc2VxLCBhY3Rpdml0aWVzLCBzYWxpVmFscywgc2VtVHlwZSwgdW5pdHMpIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbnVtMSA9IG4xW2ldO1xuICAgICAgICBjb25zdCBudW0yID0gbjJbaV07XG4gICAgICAgIGxpbmVzLnB1c2goeyBpZDogaSwgbW9sczogW251bTEsIG51bTJdLCBzZWxlY3RlZDogZmFsc2UsIGE6IFtdLCBiOiBbXSB9KTtcbiAgICB9XG4gICAgY29uc3QgbGluZXNEZiA9IERHLkRhdGFGcmFtZS5jcmVhdGUobGluZXMubGVuZ3RoKTtcbiAgICBsaW5lc0RmLmNvbHVtbnMuYWRkTmV3U3RyaW5nKCcxX3NlcScpLmluaXQoKGkpID0+IHNlcS5nZXQobGluZXNbaV0ubW9sc1swXSkpO1xuICAgIGxpbmVzRGYuY29sdW1ucy5hZGROZXdTdHJpbmcoJzJfc2VxJykuaW5pdCgoaSkgPT4gc2VxLmdldChsaW5lc1tpXS5tb2xzWzFdKSk7XG4gICAgbGluZXNEZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KCdhY3RfZGlmZicpXG4gICAgICAgIC5pbml0KChpKSA9PiBNYXRoLmFicyhhY3Rpdml0aWVzLmdldChsaW5lc1tpXS5tb2xzWzBdKSAtIGFjdGl2aXRpZXMuZ2V0KGxpbmVzW2ldLm1vbHNbMV0pKSk7XG4gICAgbGluZXNEZi5jb2x1bW5zLmFkZE5ld0ludCgnbGluZV9pbmRleCcpLmluaXQoKGkpID0+IGkpO1xuICAgIGxpbmVzRGYuY29sdW1ucy5hZGROZXdGbG9hdCgnc2FsaScpLmluaXQoKGkpID0+IHNhbGlWYWxzW2ldKTtcbiAgICBsaW5lc0RmLmNvbCgnMV9zZXEnKS50YWdzW0RHLlRBR1MuVU5JVFNdID0gdW5pdHM7XG4gICAgbGluZXNEZi5jb2woJzJfc2VxJykudGFnc1tERy5UQUdTLlVOSVRTXSA9IHVuaXRzO1xuICAgIGxpbmVzRGYuY29sKCcxX3NlcScpLnNlbVR5cGUgPSBzZW1UeXBlO1xuICAgIGxpbmVzRGYuY29sKCcyX3NlcScpLnNlbVR5cGUgPSBzZW1UeXBlO1xuICAgIHJldHVybiB7IGxpbmVzLCBsaW5lc0RmIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltaWxhcml0aWVzTWFyaXgoZGltLCBzZXFDb2wsIGRmU2VxLCBzaW1BcnIsIHNpbUZ1bmMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBkaW0gLSAxOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vbCA9IHNlcUNvbC5nZXQoaSk7XG4gICAgICAgICAgICBkZlNlcS5yb3dzLnJlbW92ZUF0KDAsIDEsIGZhbHNlKTtcbiAgICAgICAgICAgIHNpbUFycltpXSA9ICh5aWVsZCBzaW1GdW5jKGRmU2VxLmNvbCgnc2VxJyksIG1vbCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW1BcnI7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltaWxhcml0aWVzTWFyaXhGcm9tRGlzdGFuY2VzKGRpbSwgZGlzdGFuY2VzLCBzaW1BcnIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbSAtIDE7ICsraSkge1xuICAgICAgICBjb25zdCBzaW1pbGFyaXR5QXJyID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGRpbTsgKytqKVxuICAgICAgICAgICAgc2ltaWxhcml0eUFyci5wdXNoKGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoZGlzdGFuY2VzW2ldW2pdKSk7XG4gICAgICAgIHNpbUFycltpXSA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCdzaW1pbGFyaXR5JywgRmxvYXQzMkFycmF5LmZyb20oc2ltaWxhcml0eUFycikpO1xuICAgIH1cbiAgICByZXR1cm4gc2ltQXJyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdOMGFYWnBkSGt0WTJ4cFptWnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVlXTjBhWFpwZEhrdFkyeHBabVp6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3p0QlFVRkJMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzYlVKQlFXMUNMRU5CUVVNN1FVRkRNVU1zVDBGQlR5eExRVUZMTEVWQlFVVXNUVUZCVFN4cFFrRkJhVUlzUTBGQlF6dEJRVU4wUXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUlhSRExFOUJRVThzUlVGQlJTeDVRa0ZCZVVJc1JVRkJSU3hOUVVGTkxHdEVRVUZyUkN4RFFVRkRPMEZCYzBNM1JpeEpRVUZKTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkZha0lzZDBWQlFYZEZPMEZCUTNoRkxFMUJRVTBzVlVGQlowSXNhVUpCUVdsQ0xFTkJRMjVETEVWQlFXZENMRVZCUTJoQ0xFMUJRV2xDTEVWQlEycENMRk5CUVcxQ0xFVkJRMjVDTEZsQlFXOUNMRVZCUTNCQ0xGVkJRWEZDTEVWQlEzSkNMRlZCUVd0Q0xFVkJRMnhDTEdkQ1FVRjNRaXhGUVVONFFpeFZRVUZyUWl4RlFVTnNRaXhQUVVGbExFVkJRMllzUzBGQllTeEZRVU5pTEZsQlFUWkZMRVZCUXpkRkxFOUJRVzFGTEVWQlEyNUZMR1ZCUVhGRUxFVkJRM0pFTEU5QlFXRTdPMUZCUTJZc1RVRkJUU3gzUWtGQmQwSXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRka01zVFVGQlRTeGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUlRGQ0xFMUJRVTBzYzBKQlFYTkNMRWRCUVVjc2QwSkJRWGRDTEVOQlFVTXNRMEZCUXl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeEhRVUZITEVkQlFVY3NRMEZCUXp0UlFVVTFSaXhOUVVGTkxFVkJRVU1zVVVGQlVTeEZRVUZGTEZkQlFWY3NSVUZCUXl4SFFVRkhMRTFCUVUwc1dVRkJXU3hEUVVGRE8xbEJRMnBFTEUxQlFVMHNSVUZCUlN4TlFVRk5PMWxCUTJRc1ZVRkJWU3hGUVVGRkxGVkJRVlU3V1VGRGRFSXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENPMWxCUTJ4RExHTkJRV01zUlVGQlJTeFRRVUZUTzFsQlEzcENMRTlCUVU4c1JVRkJSU3hQUVVGUE8xTkJRMnBDTEVOQlFVTXNRMEZCUXp0UlFVVklMRXRCUVVzc1RVRkJUU3hIUVVGSExFbEJRVWtzVjBGQlZ6dFpRVU16UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVjBRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRkZCUVZFc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlHTEUxQlFVMHNSMEZCUnl4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4TlFVRk5MRWRCUVdkQ0xFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZNME1zU1VGQlNTeERRVUZETEZGQlFWRTdXVUZEV0N4TlFVRk5MRzlDUVVGdlFpeERRVUZETEVkQlFVY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1dVRkZhRVVzYVVOQlFXbERMRU5CUVVNc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVXpSQ3hOUVVGTkxHdENRVUZyUWl4SFFVRkhMSE5DUVVGelFpeERRVUZETzFGQlJXeEVMRTFCUVUwc1QwRkJUeXhIUVVGaExFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRkZCUVZFc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGRE9VSXNUVUZCVFN4RlFVRkZMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRM2hDTEUxQlFVMHNSVUZCUlN4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVWNFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEzSkRMRTFCUVUwc1IwRkJSeXhIUVVGWExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJYSkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxHdENRVUZyUWl4RlFVRkZPMjlDUVVNM1FpeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU5ZTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRia0lzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGJFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTnlSU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzNkQ1FVTldMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03TzNkQ1FVVm9ReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmxDUVVNelFqdGhRVU5HTzFOQlEwWTdVVUZGUkN4TlFVRk5MSFZDUVVGMVFpeEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRka1VzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeGxRVUZsTEVkQlFVY3NSMEZCUnl4SFFVRkRMRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETzFGQlIyaEVMRTFCUVUwc1pVRkJaU3hIUVVGSExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU12UXl4TlFVRk5MR1ZCUVdVc1IwRkJSeXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGREwwTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWHBETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMjVETEdWQlFXVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZETlVJc1pVRkJaU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVNMVFpeGxRVUZsTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKRExHVkJRV1VzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tNc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RlFVRkZPMmRDUVVNelFpeEpRVUZKTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUXk5RExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMjlDUVVWb1F5eFRRVUZUTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTI1RE8xTkJRMFk3VVVGRlJDeE5RVUZOTEVsQlFVa3NSMEZCWXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eFJRVUZSTEVWQlFVVXNVVUZCVVN4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJSV3BKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJYSkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU01UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5zUkN4WFFVRlhMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42UWl4WFFVRlhMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42UWl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFbEJRVWs3V1VGRFppeExRVUZMTEVWQlFVVXNWVUZCVlN4RFFVRkRMRWxCUVVrN1dVRkRkRUlzWVVGQllTeEZRVUZGTEV0QlFVczdXVUZEY0VJc1lVRkJZU3hGUVVGRkxFdEJRVXM3V1VGRGNFSXNaMEpCUVdkQ0xFVkJRVVVzUzBGQlN6dFpRVU4yUWl4cFFrRkJhVUlzUlVGQlJTeExRVUZMTzFsQlEzaENMR0ZCUVdFc1JVRkJSU3hEUVVGRE8xbEJRMmhDTEdGQlFXRXNSVUZCUlN4RlFVRkZPMWxCUTJwQ0xFdEJRVXNzUlVGQlJTeFpRVUZaTzFOQlEzQkNMRU5CUVVNc1EwRkJlVUlzUTBGQlF6dFJRVVUxUWl4TlFVRk5MRTFCUVUwc1IwRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRMME1zVFVGQlRTeFJRVUZSTEVkQlFVY3NWMEZCVnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4UlFVRlJMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEyNUdMRTFCUVUwc1VVRkJVU3hIUVVGUkxFVkJRVVVzUTBGQlF6dFJRVVY2UWl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFVkJRVVU3V1VGRGJrUXNUVUZCVFN4aFFVRmhMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVsQlFVa3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeExRVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETVVjc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eGhRVUZoTzJkQ1FVTjRRaXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYkVnc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03V1VGRE0wUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUXpGRUxGZEJRVmNzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRGJFUXNTVUZCU1N4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExHVkJRV1VzUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUlR0blFrRkRNME1zVFVGQlRTeEpRVUZKTEVkQlFVY3NVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMmRDUVVNNVJDeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dG5Ra0ZETDBJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTzI5Q1FVTm9RaXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVNNVFqdFpRVU5FTEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUXpOQ0xFbEJRVWtzUTBGQlF5eERRVUZETEZGQlFWRTdiMEpCUTFvc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzSkVMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVjBGQlZ5eERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUXpOQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJVZ3NUVUZCVFN4WFFVRlhMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVGRGTEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUlVGQlJUdFpRVU55UXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMlFzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGU0N4TlFVRk5MR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxGTkJRVk1zUlVGQlJTeEhRVUZITEVWQlFVVTdXVUZETTBVc1RVRkJUU3haUVVGWkxFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkRMRXRCUVVzc1JVRkJSU3hwUWtGQmFVSXNSVUZCUXl4RFFVRkRPMmxDUVVOMlJDeEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJRenRwUWtGRGNrSXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRWaXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4bFFVRmxMRU5CUVVNN1VVRkRla01zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eFZRVUZWTEVOQlFVTTdVVUZETTBNc1kwRkJZeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUTJ4RExHTkJRV01zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJRenRSUVVOd1F5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dFJRVVV2UWl4SlFVRkpMRXRCUVhGQ0xFTkJRVU03VVVGRE1VSXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEZkQlFWY3NSVUZCUlN4VlFVRlZMRXRCUVdsQ08xbEJRemxFTEZsQlFWa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVOd1FpeExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRuUWtGRGVFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdaMEpCUXpsRUxFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4bFFVRmxMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVU3YjBKQlEzSkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZPM2RDUVVOMFFpeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSE96UkNRVU40UWl4UlFVRlJMRVZCUVVVc1VVRkJVVHMwUWtGRGJFSXNTVUZCU1N4RlFVRkZMRWxCUVVrN05FSkJRMVlzUlVGQlJTeEZRVUZGTEVWQlFVVTdORUpCUTA0c1RVRkJUU3hGUVVGRkxFMUJRVTA3TkVKQlEyUXNVVUZCVVN4RlFVRkZMRlZCUVZVN05FSkJRM0JDTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1QwRkJUenMwUWtGRGFFSXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhQUVVGUE8zbENRVU5xUWl4RFFVRkJPM2RDUVVORUxHVkJRV1VzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE8zRkNRVU53UXp0dlFrRkRSQ3hGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzJsQ1FVTnNSVHRaUVVOSUxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTllMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGZEJRVmNzUlVGQlJTeFZRVUZUTEV0QlFXbENPMWxCUXpkRUxFMUJRVTBzU1VGQlNTeEhRVUZITEdsQ1FVRnBRaXhEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xbEJRemxFTEVsQlFVa3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhsUVVGbExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTNKRExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlR0dlFrRkRha0lzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03YjBKQlF5OUNMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0dlFrRkZka1FzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJPM2RDUVVOb1FpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dHZRa0ZGTjBJc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHQzUWtGRE0wSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1VVRkJVVHMwUWtGRFdpeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRM0pFTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVOS08zRkNRVUZOTzI5Q1FVTk1MRWxCUVVrc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEV0QlFVc3NTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSVHQzUWtGRE9VTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXp0M1FrRkRla01zUlVGQlJTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTm9ReXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8zZENRVU5xUkN4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0eFFrRkRha1E3YVVKQlEwWTdZVUZEUmp0UlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4elFrRkJjMElzUTBGQlF6dGhRVU12UWl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5tTEUxQlFVMHNTMEZCU3l4SFFVRkhMRmRCUVZjc1EwRkJReXhGUVVGRkxFVkJRekZDTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RlFVRkZMRkZCUVZFc1JVRkJSU3hsUVVGbExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdXVUZETlVVc1NVRkJTU3hKUVVGSkxFVkJRVVU3WjBKQlExSXNUVUZCVFN4WFFVRlhMRWRCUVVjc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1owSkJRekZFTEZWQlFWVXNRMEZCUXl4SFFVRkZMRVZCUVVVN2IwSkJRMklzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOc1F5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnhETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEV0QlFVc3NSVUZEZGtNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZKTEV0QlFVc3NSVUZEYkVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEV0QlFVc3NSVUZEYWtNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRPMmRDUVVOMlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMUlzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0aFFVTmtPMUZCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRlRDeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4clFrRkJhMElzUTBGQlF5eERRVUZETzFGQlEyaEZMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRMW9zUTBGQlF6dERRVUZCTzBGQlJVUXNVMEZCVXl4cFFrRkJhVUlzUTBGQlF5eExRVUZWTEVWQlFVVXNUVUZCVnl4RlFVRkZMRXRCUVdNN1NVRkRhRVVzVFVGQlRTeEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMSEZDUVVGeFFpeEZRVUZGTEVOQlFVTTdTVUZETlVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRE8wbEJRM0JETEUxQlFVMHNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0SlFVTnVReXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZKTEV0QlFVc3NSVUZCUlR0UlFVTjRRaXhOUVVGTkxFbEJRVWtzUjBGRFVpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGFrUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka2NzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXp0WlFVTldMRTlCUVU4c1NVRkJTU3hEUVVGRE8wdEJRMlk3U1VGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0QlFVTmtMRU5CUVVNN1FVRkZSQ3hUUVVGVExGZEJRVmNzUTBGQlF5eEZRVUYzUWl4RlFVTXpReXhMUVVGaExFVkJRVVVzUzBGQllTeEZRVUZGTEZGQlFYZENMRVZCUVVVc1VVRkJhMElzUlVGQlJTeGxRVUYxUWl4RlFVRkZMRTlCUVdVN1NVRkRjRWdzVFVGQlRTeExRVUZMTEVkQlFVY3NVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJRenRKUVVNM1FpeE5RVUZOTEUxQlFVMHNSMEZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVFNFFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMGxCUTI1RkxFMUJRVTBzUjBGQlJ5eEhRVUZITEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVFMlFpeERRVUZETzBsQlEyaEZMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eFRRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU01UXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlZTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRE9VTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1JVRkJSU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKR0xFMUJRVTBzVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51Uml4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRNVUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU14UkN4TlFVRk5MRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUXl4bFFVRmxMRU5CUVVNN1VVRkROMFlzUjBGQlJ5eERRVUZETEZkQlFWY3NSMEZCUnl4UlFVRlJMRXRCUVVzc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF6dFJRVU01UXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTnNRanRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1YwRkJWeXhEUVVOc1FpeEZRVUZaTEVWQlExb3NSVUZCV1N4RlFVTmFMRWRCUVdNc1JVRkRaQ3hWUVVGeFFpeEZRVU55UWl4UlFVRnJRaXhGUVVOc1FpeFBRVUZsTEVWQlEyWXNTMEZCWVR0SlFVTmlMRTFCUVUwc1MwRkJTeXhIUVVGWkxFVkJRVVVzUTBGQlF6dEpRVU14UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU5zUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYmtJc1RVRkJUU3hKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTI1Q0xFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hSUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTTdTMEZEZUVVN1NVRkRSQ3hOUVVGTkxFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYkVRc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzSkdMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVk1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU55Uml4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eFZRVUZWTEVOQlFVTTdVMEZEY0VNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjBSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJReTlFTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVZNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja1VzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03U1VGRGJFUXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTVUZEYkVRc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVVXNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJRM2hETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVTjRReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUXl4RFFVRkRPMEZCUXpGQ0xFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFXZENMRzlDUVVGdlFpeERRVU4wUXl4SFFVRlhMRVZCUTFnc1RVRkJhVUlzUlVGRGFrSXNTMEZCYlVJc1JVRkRia0lzVFVGQmJVSXNSVUZEYmtJc1QwRkJiVVU3TzFGQlIzSkZMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEycERMRTFCUVUwc1IwRkJSeXhIUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNVUlzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTnFReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRkxFTkJRVU03VTBGRGRFUTdVVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBOQlFVRTdRVUZGUkN4TlFVRk5MRlZCUVZVc2FVTkJRV2xETEVOQlFVTXNSMEZCVnl4RlFVRkZMRk5CUVdsQ0xFVkJRVVVzVFVGQmJVSTdTVUZGYmtjc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEYUVNc1RVRkJUU3hoUVVGaExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEzcENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF6dFpRVU01UWl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExIbENRVUY1UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRha1VzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1dVRkJXU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVONFJqdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJSHNnVFdGMGNtbDRJSDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUhzZ1oyVjBVMmx0YVd4aGNtbDBlVVp5YjIxRWFYTjBZVzVqWlNCOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzTnBiV2xzWVhKcGRIa3RiV1YwY21samN5YzdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnU1V4cGJtVWdlMXh1SUNCcFpEb2diblZ0WW1WeU8xeHVJQ0J0YjJ4ek9pQnVkVzFpWlhKYlhUdGNiaUFnYzJWc1pXTjBaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lHRTZJRzUxYldKbGNsdGRPeUF2THlCYmVDd2dlVjFjYmlBZ1lqb2diblZ0WW1WeVcxMDdJQzh2SUZ0NExDQjVYVnh1ZlZ4dVhHNXBiblJsY21aaFkyVWdTVkpsYm1SbGNtVmtUR2x1WlhNZ2UxeHVJQ0JzYVc1bGN6b2dTVXhwYm1WYlhUdGNiaUFnYkdsdVpYTkVaam9nUkVjdVJHRjBZVVp5WVcxbE8xeHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVsVFpYRjFaVzVqWlZOd1lXTmxVR0Z5WVcxeklIdGNiaUFnSUNCelpYRkRiMnc2SUVSSExrTnZiSFZ0Yml4Y2JpQWdJQ0J0WlhSb2IyUk9ZVzFsT2lCemRISnBibWNzWEc0Z0lDQWdjMmx0YVd4aGNtbDBlVTFsZEhKcFl6b2djM1J5YVc1bkxGeHVJQ0FnSUdWdFltVmtRWGhsYzA1aGJXVnpPaUJ6ZEhKcGJtZGJYU3hjYmlBZ0lDQnZjSFJwYjI1elB6b2dZVzU1WEc1OVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdTVk5sY1hWbGJtTmxVM0JoWTJWU1pYTjFiSFFnZTF4dUlDQWdJR1JwYzNSaGJtTmxPaUJOWVhSeWFYZzdYRzRnSUNBZ1kyOXZjbVJwYm1GMFpYTTZJRVJITGtOdmJIVnRia3hwYzNRN1hHNGdJSDFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSlJISmhkMVJ2YjJ4MGFYQlFZWEpoYlhNZ2UxeHVJQ0IwYjI5c2RHbHdjem9nWVc1NUxGeHVJQ0JzYVc1bE9pQkpUR2x1WlN4Y2JpQWdaR1k2SUVSSExrUmhkR0ZHY21GdFpTeGNiaUFnYzJWeFEyOXNPaUJFUnk1RGIyeDFiVzRzWEc0Z0lHRmpkR2wyYVhSNU9pQkVSeTVEYjJ4MWJXNHNYRzRnSUhnNklHNTFiV0psY2l4Y2JpQWdlVG9nYm5WdFltVnlYRzU5WEc1Y2JteGxkQ0I2YjI5dElEMGdabUZzYzJVN1hHNWNiaTh2SUZObFlYSmphR1Z6SUdadmNpQmhZM1JwZG1sMGVTQmpiR2xtWm5NZ2FXNGdZU0JqYUdWdGFXTmhiQ0JrWVhSaGMyVjBJR0o1SUhObGJHVmpkR1ZrSUdOMWRHOW1abHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlHZGxkRUZqZEdsMmFYUjVRMnhwWm1aektGeHVJQ0FnSUdSbU9pQkVSeTVFWVhSaFJuSmhiV1VzSUZ4dUlDQWdJSE5sY1VOdmJEb2dSRWN1UTI5c2RXMXVMQ0JjYmlBZ0lDQmhlR1Z6VG1GdFpYTTZJSE4wY21sdVoxdGRMRnh1SUNBZ0lITmpZWFIwWlhKVWFYUnNaVG9nYzNSeWFXNW5MRnh1SUNBZ0lHRmpkR2wyYVhScFpYTTZJRVJITGtOdmJIVnRiaXdnWEc0Z0lDQWdjMmx0YVd4aGNtbDBlVG9nYm5WdFltVnlMRnh1SUNBZ0lITnBiV2xzWVhKcGRIbE5aWFJ5YVdNNklITjBjbWx1Wnl3Z1hHNGdJQ0FnYldWMGFHOWtUbUZ0WlRvZ2MzUnlhVzVuTENCY2JpQWdJQ0J6WlcxVWVYQmxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2RXNXBkSE02SUhOMGNtbHVaeXhjYmlBZ0lDQnpaWEZUY0dGalpVWjFibU02SUNod1lYSmhiWE02SUVsVFpYRjFaVzVqWlZOd1lXTmxVR0Z5WVcxektTQTlQaUJRY205dGFYTmxQRWxUWlhGMVpXNWpaVk53WVdObFVtVnpkV3gwUGl4Y2JpQWdJQ0J6YVcxR2RXNWpPaUFvWTI5c09pQkVSeTVEYjJ4MWJXNHNJRzF2YkRvZ2MzUnlhVzVuS1NBOVBpQlFjbTl0YVhObFBFUkhMa052YkhWdGJpQjhJRzUxYkd3K0xGeHVJQ0FnSUhSdmIyeDBhWEJFY21GM1JuVnVZem9nS0hCaGNtRnRjem9nU1VSeVlYZFViMjlzZEdsd1VHRnlZVzF6S1NBOVBpQjJiMmxrTEZ4dUlDQWdJRzl3ZEdsdmJuTS9PaUJoYm5rcElEb2dVSEp2YldselpUeEVSeTVXYVdWM1pYSStJSHRjYmlBZ1kyOXVjM1FnWVhWMGIyMWhkR2xqVTJsdGFXeGhjbWwwZVV4cGJXbDBJRDBnWm1Gc2MyVTdYRzRnSUdOdmJuTjBJRTFKVGw5VFNVMUpURUZTU1ZSWklEMGdPREE3WEc1Y2JpQWdZMjl1YzNRZ2FXNXBkR2xoYkZOcGJXbHNZWEpwZEhsTWFXMXBkQ0E5SUdGMWRHOXRZWFJwWTFOcGJXbHNZWEpwZEhsTWFXMXBkQ0EvSUUxSlRsOVRTVTFKVEVGU1NWUlpJRG9nYzJsdGFXeGhjbWwwZVNBdklERXdNRHRjYmx4dUlDQmpiMjV6ZENCN1pHbHpkR0Z1WTJVc0lHTnZiM0prYVc1aGRHVnpmU0E5SUdGM1lXbDBJSE5sY1ZOd1lXTmxSblZ1WXloN1hHNGdJQ0FnYzJWeFEyOXNPaUJ6WlhGRGIyd3NYRzRnSUNBZ2JXVjBhRzlrVG1GdFpUb2diV1YwYUc5a1RtRnRaU3hjYmlBZ0lDQnphVzFwYkdGeWFYUjVUV1YwY21sak9pQnphVzFwYkdGeWFYUjVUV1YwY21sakxGeHVJQ0FnSUdWdFltVmtRWGhsYzA1aGJXVnpPaUJoZUdWelRtRnRaWE1zWEc0Z0lDQWdiM0IwYVc5dWN6b2diM0IwYVc5dWMxeHVJQ0I5S1R0Y2JseHVJQ0JtYjNJZ0tHTnZibk4wSUdOdmJDQnZaaUJqYjI5eVpHbHVZWFJsY3lsY2JpQWdJQ0JrWmk1amIyeDFiVzV6TG1Ga1pDaGpiMndwTzF4dVhHNGdJR052Ym5OMElHUm1VMlZ4SUQwZ1JFY3VSR0YwWVVaeVlXMWxMbVp5YjIxRGIyeDFiVzV6S0Z0RVJ5NURiMngxYlc0dVpuSnZiVXhwYzNRb0ozTjBjbWx1Wnljc0lDZHpaWEVuTENCelpYRkRiMnd1ZEc5TWFYTjBLQ2twWFNrN1hHNGdJR052Ym5OMElHUnBiU0E5SUhObGNVTnZiQzVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJSE5wYlVGeWNqb2dSRWN1UTI5c2RXMXVXMTBnUFNCQmNuSmhlU2hrYVcwZ0xTQXhLVHRjYmx4dUlDQnBaaUFvSVdScGMzUmhibU5sS1Z4dUlDQWdJR0YzWVdsMElHZGxkRk5wYldsc1lYSnBkR2xsYzAxaGNtbDRLR1JwYlN3Z2MyVnhRMjlzTENCa1psTmxjU3dnYzJsdFFYSnlMQ0J6YVcxR2RXNWpLVHRjYmlBZ1pXeHpaVnh1SUNBZ0lHZGxkRk5wYldsc1lYSnBkR2xsYzAxaGNtbDRSbkp2YlVScGMzUmhibU5sY3loa2FXMHNJR1JwYzNSaGJtTmxMQ0J6YVcxQmNuSXBPMXh1WEc0Z0lHTnZibk4wSUc5d2RGTnBiV2xzWVhKcGRIbE1hVzFwZENBOUlHbHVhWFJwWVd4VGFXMXBiR0Z5YVhSNVRHbHRhWFE3WEc1Y2JpQWdZMjl1YzNRZ2MybHRWbUZzY3pvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnYzJGc2FWWmhiSE02SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJRzR4T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCamIyNXpkQ0J1TWpvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQWhQU0JrYVcwZ0xTQXhPeUFySzJrcElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBaFBTQmthVzBnTFNBeElDMGdhVHNnS3l0cUtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCemFXMDZJRzUxYldKbGNpQTlJSE5wYlVGeWNsdHBYUzVuWlhRb2FpazdYRzVjYmlBZ0lDQWdJR2xtSUNoemFXMGdQajBnYjNCMFUybHRhV3hoY21sMGVVeHBiV2wwS1NCN1hHNGdJQ0FnSUNBZ0lHNHhMbkIxYzJnb2FTazdYRzRnSUNBZ0lDQWdJRzR5TG5CMWMyZ29hU0FySUdvZ0t5QXhLVHRjYmlBZ0lDQWdJQ0FnYzJsdFZtRnNjeTV3ZFhOb0tITnBiU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JwWm1ZZ1BTQk5ZWFJvTG1GaWN5aGhZM1JwZG1sMGFXVnpMbWRsZENocEtTQXRJR0ZqZEdsMmFYUnBaWE11WjJWMEtHa2dLeUJxSUNzZ01Ta3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2MybHRJQ0U5SURFcFhHNGdJQ0FnSUNBZ0lDQWdjMkZzYVZaaGJITXVjSFZ6YUNoa2FXWm1JQzhnS0RFZ0xTQnphVzBwS1R0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUhOaGJHbFdZV3h6TG5CMWMyZ29TVzVtYVc1cGRIa3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR052Ym5OMElITmhiR2xXWVd4elYybDBhRzkxZEVsdVptbHVhWFI1SUQwZ2MyRnNhVlpoYkhNdVptbHNkR1Z5S0dsMElEMCtJR2wwSUNFOVBTQkpibVpwYm1sMGVTazdYRzRnSUdOdmJuTjBJSE5oYkdsTmFXNGdQU0JOWVhSb0xtMXBiaWd1TGk1ellXeHBWbUZzYzFkcGRHaHZkWFJKYm1acGJtbDBlU2s3WEc0Z0lHTnZibk4wSUhOaGJHbE5ZWGdnUFNCTllYUm9MbTFoZUNndUxpNXpZV3hwVm1Gc2MxZHBkR2h2ZFhSSmJtWnBibWwwZVNrN1hHNGdJR052Ym5OMElITmhiR2xQY0dGamFYUjVRMjlsWmlBOUlEQXVPQzhvYzJGc2FVMWhlQ0F0SUhOaGJHbE5hVzRwTzF4dVhHNWNiaUFnWTI5dWMzUWdibVZwWjJoaWIzVnljME52ZFc1MElEMGdibVYzSUVGeWNtRjVLR1JwYlNrdVptbHNiQ2d3S1R0Y2JpQWdZMjl1YzNRZ2MybHRhV3hoY21sMGVVTnZkVzUwSUQwZ2JtVjNJRUZ5Y21GNUtHUnBiU2t1Wm1sc2JDZ3dLVHRjYmlBZ1kyOXVjM1FnYzJGc2FVTnZkVzUwSUQwZ2JtVjNJRUZ5Y21GNUtHUnBiU2t1Wm1sc2JDZ3dLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQWhQU0J1TVM1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lHNWxhV2RvWW05MWNuTkRiM1Z1ZEZ0dU1WdHBYVjBnS3owZ01UdGNiaUFnSUNCdVpXbG5hR0p2ZFhKelEyOTFiblJiYmpKYmFWMWRJQ3M5SURFN1hHNGdJQ0FnYzJsdGFXeGhjbWwwZVVOdmRXNTBXMjR4VzJsZFhTQXJQU0J6YVcxV1lXeHpXMmxkTzF4dUlDQWdJSE5wYldsc1lYSnBkSGxEYjNWdWRGdHVNbHRwWFYwZ0t6MGdjMmx0Vm1Gc2MxdHBYVHRjYmlBZ0lDQnBaaUFvYzJGc2FWWmhiSE5iYVYwZ0lUMGdTVzVtYVc1cGRIa3BJSHRjYmlBZ0lDQWdJR2xtSUNoaFkzUnBkbWwwYVdWekxtZGxkQ2h1TVZ0cFhTa2dQaUJoWTNScGRtbDBhV1Z6TG1kbGRDaHVNbHRwWFNrcFhHNGdJQ0FnSUNBZ0lITmhiR2xEYjNWdWRGdHVNVnRwWFYwZ0t6MGdjMkZzYVZaaGJITmJhVjA3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lITmhiR2xEYjNWdWRGdHVNbHRwWFYwZ0t6MGdjMkZzYVZaaGJITmJhVjA3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTI5dWMzUWdjMkZzYVRvZ1JFY3VRMjlzZFcxdUlEMGdSRWN1UTI5c2RXMXVMbVp5YjIxTWFYTjBLQ2RrYjNWaWJHVW5MQ0JnYzJGc2FWOGtlMkY0WlhOT1lXMWxjMXN3WFM1emRXSnpkSEpwYm1jb1lYaGxjMDVoYldWeld6QmRMbXhoYzNSSmJtUmxlRTltS0NkZkp5a3BmV0FzSUhOaGJHbERiM1Z1ZENrN1hHNWNiaUFnWkdZdVkyOXNkVzF1Y3k1aFpHUW9jMkZzYVNrN1hHNWNiaUFnWTI5dWMzUWdkbWxsZHlBOUlHZHliMnN1YzJobGJHd3VaMlYwVkdGaWJHVldhV1YzS0dSbUxtNWhiV1VwTzF4dUlDQmpiMjV6ZENCemNDQTlJSFpwWlhjdVlXUmtWbWxsZDJWeUtFUkhMbFpwWlhkbGNpNXpZMkYwZEdWeVVHeHZkQ2hrWml3Z2UxeHVJQ0FnSUhoRGIyeDFiVzVPWVcxbE9pQmhlR1Z6VG1GdFpYTmJNRjBzWEc0Z0lDQWdlVU52YkhWdGJrNWhiV1U2SUdGNFpYTk9ZVzFsYzFzeFhTeGNiaUFnSUNCemFYcGxPaUJ6WVd4cExtNWhiV1VzWEc0Z0lDQWdZMjlzYjNJNklHRmpkR2wyYVhScFpYTXVibUZ0WlN4Y2JpQWdJQ0J6YUc5M1dGTmxiR1ZqZEc5eU9pQm1ZV3h6WlN4Y2JpQWdJQ0J6YUc5M1dWTmxiR1ZqZEc5eU9pQm1ZV3h6WlN4Y2JpQWdJQ0J6YUc5M1UybDZaVk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNRMjlzYjNKVFpXeGxZM1J2Y2pvZ1ptRnNjMlVzWEc0Z0lDQWdiV0Z5YTJWeVRXbHVVMmw2WlRvZ05TeGNiaUFnSUNCdFlYSnJaWEpOWVhoVGFYcGxPaUF5TlN4Y2JpQWdJQ0IwYVhSc1pUb2djMk5oZEhSbGNsUnBkR3hsWEc0Z0lIMHBLU0JoY3lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNqdGNibHh1SUNCamIyNXpkQ0JqWVc1MllYTWdQU0FvYzNBdVoyVjBTVzVtYnlncElHRnpJR0Z1ZVNsYkoyTmhiblpoY3lkZE8xeHVJQ0JqYjI1emRDQnNhVzVsYzFKbGN5QTlJR055WldGMFpVeHBibVZ6S0c0eExDQnVNaXdnYzJWeFEyOXNMQ0JoWTNScGRtbDBhV1Z6TENCellXeHBWbUZzY3l3Z2MyVnRWSGx3WlN3Z2RXNXBkSE1wTzF4dUlDQmpiMjV6ZENCMGIyOXNkR2x3Y3pvZ1lXNTVJRDBnZTMwN1hHNWNiaUFnYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV2YmtOMWNuSmxiblJEWld4c1EyaGhibWRsWkM1emRXSnpZM0pwWW1Vb0tDa2dQVDRnZTF4dUlDQWdJR052Ym5OMElHTjFjbkpsYm5STmIyeEpaSGdnUFNCc2FXNWxjMUpsY3k1c2FXNWxjMFJtTG1OMWNuSmxiblJEYjJ3Z0ppWWdiR2x1WlhOU1pYTXViR2x1WlhORVppNWpkWEp5Wlc1MFEyOXNMbTVoYldVZ1BUMDlJQ2N5WDNObGNTY2dQeUF4SURvZ01EdGNiaUFnSUNCemNDNWtZWFJoUm5KaGJXVXVZM1Z5Y21WdWRGSnZkMGxrZUNBOVhHNGdJQ0FnSUNCc2FXNWxjMUpsY3k1c2FXNWxjMFJtTG1OMWNuSmxiblJTYjNkSlpIZ2dJVDA5SUMweElEOGdiR2x1WlhOU1pYTXViR2x1WlhOYmJHbHVaWE5TWlhNdWJHbHVaWE5FWmk1amRYSnlaVzUwVW05M1NXUjRYUzV0YjJ4elcyTjFjbkpsYm5STmIyeEpaSGhkSURvZ0xURTdYRzRnSUNBZ2MzQXVaR0YwWVVaeVlXMWxMbk5sYkdWamRHbHZiaTV6WlhRb01Dd2dJV3hwYm1WelVtVnpMbXhwYm1Weld6QmRMbk5sYkdWamRHVmtLVHRjYmlBZ0lDQnpjQzVrWVhSaFJuSmhiV1V1YzJWc1pXTjBhVzl1TG5ObGRDZ3dMQ0JzYVc1bGMxSmxjeTVzYVc1bGMxc3dYUzV6Wld4bFkzUmxaQ2s3WEc0Z0lDQWdiR2x1WlhORVprZHlhV1F1YVc1MllXeHBaR0YwWlNncE8xeHVJQ0I5S1R0Y2JseHVJQ0JzYVc1bGMxSmxjeTVzYVc1bGMwUm1MbTl1VTJWc1pXTjBhVzl1UTJoaGJtZGxaQzV6ZFdKelkzSnBZbVVvS0Y4cElEMCtJSHRjYmlBZ0lDQnBaaUFvYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV0YjNWelpVOTJaWEpTYjNkSlpIZ2dJVDA5SUMweEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc2FXNWxJRDBnYkdsdVpYTlNaWE11YkdsdVpYTmJiR2x1WlhOU1pYTXViR2x1WlhORVppNXRiM1Z6WlU5MlpYSlNiM2RKWkhoZE8xeHVJQ0FnSUNBZ2JHbHVaUzV6Wld4bFkzUmxaQ0E5SUNGc2FXNWxMbk5sYkdWamRHVmtPMXh1SUNBZ0lDQWdhV1lnS0NGc2FXNWxMbk5sYkdWamRHVmtLVnh1SUNBZ0lDQWdJQ0JrWmk1elpXeGxZM1JwYjI0dWMyVjBRV3hzS0daaGJITmxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2JHbHVaWE5TWlhNdWJHbHVaWE11Wm05eVJXRmphQ2dvYkNrZ1BUNGdlMXh1SUNBZ0lDQWdhV1lnS0d3dWMyVnNaV04wWldRcFhHNGdJQ0FnSUNBZ0lHd3ViVzlzY3k1bWIzSkZZV05vS0NodEtTQTlQaUJrWmk1elpXeGxZM1JwYjI0dWMyVjBLRzBzSUhSeWRXVXBLVHRjYmlBZ0lDQjlLVHRjYmlBZ0lDQnNhVzVsYzBSbVIzSnBaQzVwYm5aaGJHbGtZWFJsS0NrN1hHNGdJSDBwTzF4dVhHNGdJR052Ym5OMElHeHBibVZ6UkdaSGNtbGtJRDBnYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV3Ykc5MExtZHlhV1FvS1M1emIzSjBLRnNuWVdOMFgyUnBabVluWFN3Z1cyWmhiSE5sWFNrN1hHNWNiaUFnYkdsdVpYTkVaa2R5YVdRdWIyNURaV3hzUTJ4cFkyc3VjM1ZpYzJOeWFXSmxLQ2dwSUQwK0lIdGNiaUFnSUNCNmIyOXRJRDBnZEhKMVpUdGNiaUFnZlNrN1hHNWNiaUFnWTI5dWMzUWdiR2x6ZEVOc2FXWm1jMHhwYm1zZ1BTQjFhUzVpZFhSMGIyNG9ZQ1I3YkdsdVpYTlNaWE11YkdsdVpYTkVaaTV5YjNkRGIzVnVkSDBnWTJ4cFptWnpZQ3dnS0NrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUdOc2FXWm1jMFJwWVd4dlp5QTlJSFZwTG1ScFlXeHZaeWg3ZEdsMGJHVTZJQ2RCWTNScGRtbDBlU0JqYkdsbVpuTW5mU2xjYmlBZ0lDQWdJQzVoWkdRb2JHbHVaWE5FWmtkeWFXUXVjbTl2ZENsY2JpQWdJQ0FnSUM1emFHOTNLQ2s3WEc0Z0lDQWdZMnhwWm1aelJHbGhiRzluTG5KdmIzUXVhV1FnUFNBblkyeHBabVp6WDJScFlXeHZaeWM3WEc0Z0lIMHBPMXh1SUNCc2FYTjBRMnhwWm1aelRHbHVheTV6ZEhsc1pTNXdiM05wZEdsdmJpQTlJQ2RoWW5OdmJIVjBaU2M3WEc0Z0lHeHBjM1JEYkdsbVpuTk1hVzVyTG5OMGVXeGxMblJ2Y0NBOUlDY3hNSEI0Snp0Y2JpQWdiR2x6ZEVOc2FXWm1jMHhwYm1zdWMzUjViR1V1Y21sbmFIUWdQU0FuTVRCd2VDYzdYRzRnSUhOd0xuSnZiM1F1WVhCd1pXNWtLR3hwYzNSRGJHbG1abk5NYVc1cktUdGNibHh1SUNCc1pYUWdkR2x0WlhJNklFNXZaR1ZLVXk1VWFXMWxiM1YwTzF4dUlDQmpZVzUyWVhNdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlZ0YjNabEp5d2dablZ1WTNScGIyNGdLR1YyWlc1ME9pQk5iM1Z6WlVWMlpXNTBLU0I3WEc0Z0lDQWdZMnhsWVhKVWFXMWxiM1YwS0hScGJXVnlLVHRjYmlBZ0lDQjBhVzFsY2lBOUlHZHNiMkpoYkM1elpYUlVhVzFsYjNWMEtHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeHBibVVnUFNCamFHVmphME4xY25OdmNrOXVUR2x1WlNobGRtVnVkQ3dnWTJGdWRtRnpMQ0JzYVc1bGMxSmxjeTVzYVc1bGN5azdYRzRnSUNBZ0lDQnBaaUFvYkdsdVpTQW1KaUJrWmk1dGIzVnpaVTkyWlhKU2IzZEpaSGdnUFQwOUlDMHhLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hkRzl2YkhScGNITmJiR2x1WlM1cFpGMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrY21GM1ZHOXZiSFJwY0ZCaGNtRnRjeUE5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ2YjJ4MGFYQnpPaUIwYjI5c2RHbHdjeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBibVU2SUd4cGJtVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pqb2daR1lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWEZEYjJ3NklITmxjVU52YkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZqZEdsMmFYUjVPaUJoWTNScGRtbDBhV1Z6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdlRG9nWlhabGJuUXVZMnhwWlc1MFdDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhrNklHVjJaVzUwTG1Oc2FXVnVkRmxjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdkRzl2YkhScGNFUnlZWGRHZFc1aktHUnlZWGRVYjI5c2RHbHdVR0Z5WVcxektUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG5Ob2IzY29kRzl2YkhScGNITmJiR2x1WlM1cFpGMHNJR1YyWlc1MExtTnNhV1Z1ZEZnc0lHVjJaVzUwTG1Oc2FXVnVkRmtwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBzSURFd01EQXBPMXh1SUNCOUtUdGNibHh1SUNCallXNTJZWE11WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVmtiM2R1Snl3Z1puVnVZM1JwYjI0b1pYWmxiblE2SUUxdmRYTmxSWFpsYm5RcElIdGNiaUFnSUNCamIyNXpkQ0JzYVc1bElEMGdZMmhsWTJ0RGRYSnpiM0pQYmt4cGJtVW9aWFpsYm5Rc0lHTmhiblpoY3l3Z2JHbHVaWE5TWlhNdWJHbHVaWE1wTzF4dUlDQWdJR2xtSUNoc2FXNWxJQ1ltSUdSbUxtMXZkWE5sVDNabGNsSnZkMGxrZUNBOVBUMGdMVEVwSUh0Y2JpQWdJQ0FnSUdsbUlDaGxkbVZ1ZEM1amRISnNTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lHeHBibVV1YzJWc1pXTjBaV1FnUFNBaGJHbHVaUzV6Wld4bFkzUmxaRHRjYmlBZ0lDQWdJQ0FnYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV6Wld4bFkzUnBiMjR1YzJWMEtHeHBibVV1YVdRc0lHeHBibVV1YzJWc1pXTjBaV1FwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2doYkdsdVpTNXpaV3hsWTNSbFpDbGNiaUFnSUNBZ0lDQWdJQ0JrWmk1elpXeGxZM1JwYjI0dWMyVjBRV3hzS0daaGJITmxLVHRjYmx4dUlDQWdJQ0FnSUNCc2FXNWxjMUpsY3k1c2FXNWxjeTVtYjNKRllXTm9LQ2hzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHd3VjMlZzWldOMFpXUXBYRzRnSUNBZ0lDQWdJQ0FnSUNCc0xtMXZiSE11Wm05eVJXRmphQ2dvYlNrZ1BUNGdaR1l1YzJWc1pXTjBhVzl1TG5ObGRDaHRMQ0IwY25WbEtTazdYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZ6VW1WekxteHBibVZ6UkdZdVkzVnljbVZ1ZEZKdmQwbGtlQ0FoUFQwZ2JHbHVaUzVwWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hwYm1WelVtVnpMbXhwYm1WelJHWXVZM1Z5Y21WdWRGSnZkMGxrZUNBOUlHeHBibVV1YVdRN1hHNGdJQ0FnSUNBZ0lDQWdaR1l1WTNWeWNtVnVkRkp2ZDBsa2VDQTlJR3hwYm1VdWJXOXNjMXN3WFR0Y2JpQWdJQ0FnSUNBZ0lDQmtaaTV6Wld4bFkzUnBiMjR1YzJWMEtEQXNJQ0ZzYVc1bGMxSmxjeTVzYVc1bGMxc3dYUzV6Wld4bFkzUmxaQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1pHWXVjMlZzWldOMGFXOXVMbk5sZENnd0xDQnNhVzVsYzFKbGN5NXNhVzVsYzFzd1hTNXpaV3hsWTNSbFpDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgwcE8xeHVYRzRnSUhOd0xtOXVSWFpsYm5Rb0oyUTBMV0psWm05eVpTMWtjbUYzTFhOalpXNWxKeWxjYmlBZ0lDQXVjM1ZpYzJOeWFXSmxLQ2hmS1NBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc2FXNWxjeUE5SUhKbGJtUmxja3hwYm1WektITndMRnh1SUNBZ0lDQWdJQ0JoZUdWelRtRnRaWE5iTUYwc0lHRjRaWE5PWVcxbGMxc3hYU3dnYkdsdVpYTlNaWE1zSUhOaGJHbFdZV3h6TENCellXeHBUM0JoWTJsMGVVTnZaV1lzSUhOaGJHbE5hVzRwTzF4dUlDQWdJQ0FnYVdZZ0tIcHZiMjBwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTNWeWNtVnVkRXhwYm1VZ1BTQnNhVzVsYzF0c2FXNWxjMUpsY3k1c2FXNWxjMFJtTG1OMWNuSmxiblJTYjNkSlpIaGRPMXh1SUNBZ0lDQWdJQ0J6WlhSVWFXMWxiM1YwS0NncFBUNGdlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSGd4SUQwZ2MzQXVaR0YwWVVaeVlXMWxMbWRsZENoaGVHVnpUbUZ0WlhOYk1GMHNJR04xY25KbGJuUk1hVzVsTG0xdmJITmJNRjBwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhreElEMGdjM0F1WkdGMFlVWnlZVzFsTG1kbGRDaGhlR1Z6VG1GdFpYTmJNVjBzSUdOMWNuSmxiblJNYVc1bExtMXZiSE5iTUYwcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIZ3lJRDBnYzNBdVpHRjBZVVp5WVcxbExtZGxkQ2hoZUdWelRtRnRaWE5iTUYwc0lHTjFjbkpsYm5STWFXNWxMbTF2YkhOYk1WMHBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSGt5SUQwZ2MzQXVaR0YwWVVaeVlXMWxMbWRsZENoaGVHVnpUbUZ0WlhOYk1WMHNJR04xY25KbGJuUk1hVzVsTG0xdmJITmJNVjBwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhoRWFXWm1JRDBnVFdGMGFDNWhZbk1vZURFZ0xTQjRNaWtxTlR0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCNVJHbG1aaUE5SUUxaGRHZ3VZV0p6S0hreElDMGdlVElwS2pVN1hHNGdJQ0FnSUNBZ0lDQWdjM0F1ZW05dmJTaDRNU0E4SUhneUlEOGdlREVnTFNCNFJHbG1aaUE2SUhneUlDMGdlRVJwWm1Zc1hHNGdJQ0FnSUNBZ0lDQWdJQ0I1TVNBK0lIa3lJRDhnZVRFZ0t5QjVSR2xtWmlBNklIa3lJQ0FySUhsRWFXWm1MRnh1SUNBZ0lDQWdJQ0FnSUNBZ2VERWdQaUI0TWlBL0lIZ3hJQ3NnZUVScFptWWdPaUI0TWlBcklIaEVhV1ptTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdlVEVnUENCNU1pQS9JSGt4SUMwZ2VVUnBabVlnT2lCNU1pQXRJSGxFYVdabUtUdGNiaUFnSUNBZ0lDQWdmU3dnTXpBd0tUdGNiaUFnSUNBZ0lDQWdlbTl2YlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBwTzF4dVhHNGdJSE53TG1Ga1pGQnliM0JsY25SNUtDZHphVzFwYkdGeWFYUjVUR2x0YVhRbkxDQW5aRzkxWW14bEp5d2diM0IwVTJsdGFXeGhjbWwwZVV4cGJXbDBLVHRjYmlBZ2NtVjBkWEp1SUhOd08xeHVmVnh1WEc1bWRXNWpkR2x2YmlCamFHVmphME4xY25OdmNrOXVUR2x1WlNobGRtVnVkRG9nWVc1NUxDQmpZVzUyWVhNNklHRnVlU3dnYkdsdVpYTTZJRWxNYVc1bFcxMHBPaUJKVEdsdVpTQjhJRzUxYkd3Z2UxeHVJQ0JqYjI1emRDQnlaV04wSUQwZ1kyRnVkbUZ6TG1kbGRFSnZkVzVrYVc1blEyeHBaVzUwVW1WamRDZ3BPMXh1SUNCamIyNXpkQ0I0SUQwZ1pYWmxiblF1WTJ4cFpXNTBXQ0F0SUhKbFkzUXViR1ZtZER0Y2JpQWdZMjl1YzNRZ2VTQTlJR1YyWlc1MExtTnNhV1Z1ZEZrZ0xTQnlaV04wTG5SdmNEdGNiaUFnWm05eUlDaGpiMjV6ZENCc2FXNWxJRzltSUd4cGJtVnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHbHpkQ0E5WEc0Z0lDQWdJQ0JOWVhSb0xtRmljeWhOWVhSb0xtaDVjRzkwS0d4cGJtVXVZVnN3WFNBdElIZ3NJR3hwYm1VdVlWc3hYU0F0SUhrcElDdGNiaUFnSUNBZ0lFMWhkR2d1YUhsd2IzUW9iR2x1WlM1aVd6QmRJQzBnZUN3Z2JHbHVaUzVpV3pGZElDMGdlU2tnTFNCTllYUm9MbWg1Y0c5MEtHeHBibVV1WVZzd1hTQXRJR3hwYm1VdVlsc3dYU3dnYkdsdVpTNWhXekZkSUMwZ2JHbHVaUzVpV3pGZEtTazdYRzRnSUNBZ2FXWWdLR1JwYzNRZ1BDQXlLVnh1SUNBZ0lDQWdjbVYwZFhKdUlHeHBibVU3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzUxYkd3N1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGJtUmxja3hwYm1WektITndPaUJFUnk1VFkyRjBkR1Z5VUd4dmRGWnBaWGRsY2l4Y2JpQWdlRUY0YVhNNklITjBjbWx1Wnl3Z2VVRjRhWE02SUhOMGNtbHVaeXdnYkdsdVpYTlNaWE02SUVsU1pXNWtaWEpsWkV4cGJtVnpMQ0J6WVd4cFZtRnNjem9nYm5WdFltVnlXMTBzSUhOaGJHbFBjR0ZqYVhSNVEyOWxaam9nYm5WdFltVnlMQ0J6WVd4cFRXbHVPaUJ1ZFcxaVpYSXBPaUJKVEdsdVpTQmJYU0I3WEc0Z0lHTnZibk4wSUd4cGJtVnpJRDBnYkdsdVpYTlNaWE11YkdsdVpYTTdYRzRnSUdOdmJuTjBJR05oYm5aaGN5QTlJQ2h6Y0M1blpYUkpibVp2S0NrZ1lYTWdlMXRwYm1SbGVEb2djM1J5YVc1blhTQTZJR0Z1ZVgwcFd5ZGpZVzUyWVhNblhUdGNiaUFnWTI5dWMzUWdZM1I0SUQwZ1kyRnVkbUZ6TG1kbGRFTnZiblJsZUhRb0p6SmtKeWtnWVhNZ1EyRnVkbUZ6VW1WdVpHVnlhVzVuUTI5dWRHVjRkREpFTzF4dUlDQmpiMjV6ZENCNElEMGdjM0F1WkdGMFlVWnlZVzFsSVM1amIyeDFiVzV6TG1KNVRtRnRaU2g0UVhocGN5azdYRzRnSUdOdmJuTjBJSGtnUFNCemNDNWtZWFJoUm5KaGJXVWhMbU52YkhWdGJuTXVZbmxPWVcxbEtIbEJlR2x6S1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzYVc1bGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElIQnZhVzUwUm5KdmJTQTlJSE53TG5kdmNteGtWRzlUWTNKbFpXNG9lQzVuWlhRb2JHbHVaWE5iYVYwdWJXOXNjMXN3WFNrc0lIa3VaMlYwS0d4cGJtVnpXMmxkTG0xdmJITmJNRjBwS1R0Y2JpQWdJQ0JqYjI1emRDQndiMmx1ZEZSdklEMGdjM0F1ZDI5eWJHUlViMU5qY21WbGJpaDRMbWRsZENoc2FXNWxjMXRwWFM1dGIyeHpXekZkS1N3Z2VTNW5aWFFvYkdsdVpYTmJhVjB1Ylc5c2Mxc3hYU2twTzF4dUlDQWdJR3hwYm1WelcybGRMbUVnUFNCYmNHOXBiblJHY205dExuZ3NJSEJ2YVc1MFJuSnZiUzU1WFR0Y2JpQWdJQ0JzYVc1bGMxdHBYUzVpSUQwZ1czQnZhVzUwVkc4dWVDd2djRzlwYm5SVWJ5NTVYVHRjYmlBZ0lDQmpiMjV6ZENCc2FXNWxJRDBnYm1WM0lGQmhkR2d5UkNncE8xeHVJQ0FnSUd4cGJtVXViVzkyWlZSdktHeHBibVZ6VzJsZExtRmJNRjBzSUd4cGJtVnpXMmxkTG1GYk1WMHBPMXh1SUNBZ0lHTnZibk4wSUdOdmJHOXlJRDBnYkdsdVpYTmJhVjB1YzJWc1pXTjBaV1FnUHlBbk1qVTFMREkxTlN3d0p5QTZJQ2N3TERFeU9Dd3dKenRjYmlBZ0lDQmpiMjV6ZENCdmNHRmphWFI1SUQwZ2MyRnNhVlpoYkhOYmFWMGdQVDA5SUVsdVptbHVhWFI1SUQ4Z01TQTZJREF1TWlBcklDaHpZV3hwVm1Gc2MxdHBYU0F0SUhOaGJHbE5hVzRwS25OaGJHbFBjR0ZqYVhSNVEyOWxaanRjYmlBZ0lDQmpkSGd1YzNSeWIydGxVM1I1YkdVZ1BTQmdjbWRpWVNna2UyTnZiRzl5ZlN3a2UyOXdZV05wZEhsOUtXQTdYRzRnSUNBZ1kzUjRMbXhwYm1WWGFXUjBhQ0E5SUd4cGJtVnpXMmxkTG1sa0lEMDlQU0JzYVc1bGMxSmxjeTVzYVc1bGMwUm1MbU4xY25KbGJuUlNiM2RKWkhnZ1B5QXpJRG9nTVR0Y2JpQWdJQ0JzYVc1bExteHBibVZVYnloc2FXNWxjMXRwWFM1aVd6QmRMQ0JzYVc1bGMxdHBYUzVpV3pGZEtUdGNiaUFnSUNCamRIZ3VjM1J5YjJ0bEtHeHBibVVwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJzYVc1bGN6dGNibjFjYmx4dVpuVnVZM1JwYjI0Z1kzSmxZWFJsVEdsdVpYTW9YRzRnSUc0eE9pQnVkVzFpWlhKYlhTd2dYRzRnSUc0eU9pQnVkVzFpWlhKYlhTd2dYRzRnSUhObGNUb2dSRWN1UTI5c2RXMXVMQ0JjYmlBZ1lXTjBhWFpwZEdsbGN6b2dSRWN1UTI5c2RXMXVMQ0JjYmlBZ2MyRnNhVlpoYkhNNklHNTFiV0psY2x0ZExGeHVJQ0J6WlcxVWVYQmxPaUJ6ZEhKcGJtY3NYRzRnSUhWdWFYUnpPaUJ6ZEhKcGJtY3BJRG9nU1ZKbGJtUmxjbVZrVEdsdVpYTWdlMXh1SUNCamIyNXpkQ0JzYVc1bGN6b2dTVXhwYm1WYlhTQTlJRnRkTzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzR4TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1kyOXVjM1FnYm5WdE1TQTlJRzR4VzJsZE8xeHVJQ0FnSUdOdmJuTjBJRzUxYlRJZ1BTQnVNbHRwWFR0Y2JpQWdJQ0JzYVc1bGN5NXdkWE5vS0h0cFpEb2dhU3dnYlc5c2N6b2dXMjUxYlRFc0lHNTFiVEpkTENCelpXeGxZM1JsWkRvZ1ptRnNjMlVzSUdFNklGdGRMQ0JpT2lCYlhYMHBPMXh1SUNCOVhHNGdJR052Ym5OMElHeHBibVZ6UkdZZ1BTQkVSeTVFWVhSaFJuSmhiV1V1WTNKbFlYUmxLR3hwYm1WekxteGxibWQwYUNrN1hHNGdJR3hwYm1WelJHWXVZMjlzZFcxdWN5NWhaR1JPWlhkVGRISnBibWNvSnpGZmMyVnhKeWt1YVc1cGRDZ29hVG9nYm5WdFltVnlLU0E5UGlCelpYRXVaMlYwS0d4cGJtVnpXMmxkTG0xdmJITmJNRjBwS1R0Y2JpQWdiR2x1WlhORVppNWpiMngxYlc1ekxtRmtaRTVsZDFOMGNtbHVaeWduTWw5elpYRW5LUzVwYm1sMEtDaHBPaUJ1ZFcxaVpYSXBJRDArSUhObGNTNW5aWFFvYkdsdVpYTmJhVjB1Ylc5c2Mxc3hYU2twTzF4dUlDQnNhVzVsYzBSbUxtTnZiSFZ0Ym5NdVlXUmtUbVYzUm14dllYUW9KMkZqZEY5a2FXWm1KeWxjYmlBZ0lDQXVhVzVwZENnb2FUb2diblZ0WW1WeUtTQTlQaUJOWVhSb0xtRmljeWhoWTNScGRtbDBhV1Z6TG1kbGRDaHNhVzVsYzF0cFhTNXRiMnh6V3pCZEtTQXRJR0ZqZEdsMmFYUnBaWE11WjJWMEtHeHBibVZ6VzJsZExtMXZiSE5iTVYwcEtTazdYRzRnSUd4cGJtVnpSR1l1WTI5c2RXMXVjeTVoWkdST1pYZEpiblFvSjJ4cGJtVmZhVzVrWlhnbktTNXBibWwwS0NocE9pQnVkVzFpWlhJcElEMCtJR2twTzF4dUlDQnNhVzVsYzBSbUxtTnZiSFZ0Ym5NdVlXUmtUbVYzUm14dllYUW9KM05oYkdrbktTNXBibWwwS0NocE9pQnVkVzFpWlhJcElEMCtJSE5oYkdsV1lXeHpXMmxkS1R0Y2JpQWdiR2x1WlhORVppNWpiMndvSnpGZmMyVnhKeWtoTG5SaFozTmJSRWN1VkVGSFV5NVZUa2xVVTEwZ1BTQjFibWwwY3p0Y2JpQWdiR2x1WlhORVppNWpiMndvSnpKZmMyVnhKeWtoTG5SaFozTmJSRWN1VkVGSFV5NVZUa2xVVTEwZ1BTQjFibWwwY3p0Y2JpQWdiR2x1WlhORVppNWpiMndvSnpGZmMyVnhKeWtoTG5ObGJWUjVjR1VnUFNCelpXMVVlWEJsTzF4dUlDQnNhVzVsYzBSbUxtTnZiQ2duTWw5elpYRW5LU0V1YzJWdFZIbHdaU0E5SUhObGJWUjVjR1U3WEc0Z0lISmxkSFZ5YmlCN2JHbHVaWE1zSUd4cGJtVnpSR1o5TzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z1oyVjBVMmx0YVd4aGNtbDBhV1Z6VFdGeWFYZ29YRzRnSUNBZ1pHbHRPaUJ1ZFcxaVpYSXNJRnh1SUNBZ0lITmxjVU52YkRvZ1JFY3VRMjlzZFcxdUxDQmNiaUFnSUNCa1psTmxjVG9nUkVjdVJHRjBZVVp5WVcxbExDQmNiaUFnSUNCemFXMUJjbkk2SUVSSExrTnZiSFZ0Ymx0ZExGeHVJQ0FnSUhOcGJVWjFibU02SUNoamIydzZJRVJITGtOdmJIVnRiaXdnYlc5c09pQnpkSEpwYm1jcElEMCtJRkJ5YjIxcGMyVThSRWN1UTI5c2RXMXVJSHdnYm5Wc2JENWNiaUFnSUNBcFhHNGdJRG9nVUhKdmJXbHpaVHhFUnk1RGIyeDFiVzViWFQ0Z2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0FoUFNCa2FXMGdMU0F4T3lBcksya3BJSHRjYmlBZ0lDQmpiMjV6ZENCdGIyd2dQU0J6WlhGRGIyd3VaMlYwS0drcE8xeHVJQ0FnSUdSbVUyVnhMbkp2ZDNNdWNtVnRiM1psUVhRb01Dd2dNU3dnWm1Gc2MyVXBPMXh1SUNBZ0lITnBiVUZ5Y2x0cFhTQTlJQ2hoZDJGcGRDQnphVzFHZFc1aktHUm1VMlZ4TG1OdmJDZ25jMlZ4SnlraExDQnRiMndwS1NFN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhOcGJVRnljanRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRk5wYldsc1lYSnBkR2xsYzAxaGNtbDRSbkp2YlVScGMzUmhibU5sY3loa2FXMDZJRzUxYldKbGNpd2daR2x6ZEdGdVkyVnpPaUJOWVhSeWFYZ3NJSE5wYlVGeWNqb2dSRWN1UTI5c2RXMXVXMTBwWEc0Z0lEb2dSRWN1UTI5c2RXMXVXMTBnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYlNBdElERTdJQ3NyYVNrZ2UxeHVJQ0FnSUdOdmJuTjBJSE5wYldsc1lYSnBkSGxCY25JZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVNBcklERTdJR29nUENCa2FXMDdJQ3NyYWlsY2JpQWdJQ0FnSUhOcGJXbHNZWEpwZEhsQmNuSXVjSFZ6YUNoblpYUlRhVzFwYkdGeWFYUjVSbkp2YlVScGMzUmhibU5sS0dScGMzUmhibU5sYzF0cFhWdHFYU2twTzF4dUlDQWdJSE5wYlVGeWNsdHBYU0E5SUVSSExrTnZiSFZ0Ymk1bWNtOXRSbXh2WVhRek1rRnljbUY1S0NkemFXMXBiR0Z5YVhSNUp5d2dSbXh2WVhRek1rRnljbUY1TG1aeWIyMG9jMmx0YVd4aGNtbDBlVUZ5Y2lrcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemFXMUJjbkk3WEc1OUlsMTkiLCJleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW5hbGl0eVJlZHVjaW5nV29ya2VyKGRhdGFNZXRyaWMsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4vZGltZW5zaW9uYWxpdHktcmVkdWNlcicsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgY29sdW1uRGF0YTogZGF0YU1ldHJpYy5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBtZWFzdXJlOiBkYXRhTWV0cmljLm1ldHJpYyxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gKHsgZGF0YTogeyBkaXN0YW5jZSwgZW1iZWRkaW5nIH0gfSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IGRpc3RhbmNlOiBkaXN0YW5jZSwgZW1iZWRkaW5nOiBlbWJlZGRpbmcgfSk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV05wYm1jdGQyOXlhMlZ5TFdOeVpXRjBiM0l1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SmthVzFsYm5OcGIyNWhiR2wwZVMxeVpXUjFZMmx1WnkxM2IzSnJaWEl0WTNKbFlYUnZjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGcFFrRXNUVUZCVFN4VlFVRlZMR2xEUVVGcFF5eERRVUZETEZWQlFYTkNMRVZCUVVVc1RVRkJZeXhGUVVOc1JpeFBRVUZoTzBsQlJXcENMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlV5eFBRVUZQTzFGQlEycERMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMREJDUVVFd1FpeEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUml4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRE8xbEJRMnBDTEZWQlFWVXNSVUZCUlN4VlFVRlZMRU5CUVVNc1NVRkJTVHRaUVVNelFpeE5RVUZOTEVWQlFVVXNUVUZCVFR0WlFVTmtMRTlCUVU4c1JVRkJSU3hWUVVGVkxFTkJRVU1zVFVGQlRUdFpRVU14UWl4UFFVRlBMRVZCUVVVc1QwRkJUenRUUVVOcVFpeERRVUZETEVOQlFVTTdVVUZEU0N4TlFVRk5MRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUlVGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUXl4UlFVRlJMRVZCUVVVc1UwRkJVeXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkVMRTlCUVU4c1EwRkJReXhGUVVGRExGRkJRVkVzUlVGQlJTeFJRVUZSTEVWQlFVVXNVMEZCVXl4RlFVRkZMRk5CUVZNc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGNrUXNRMEZCUXl4RFFVRkRPMGxCUTBvc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFRDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1RXRjBjbWw0SUgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRIbHdaUzFrWldOc1lYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdFdZV3hwWkZSNWNHVnpmU0JtY205dElDY3VMaTkwZVhCbFpDMXRaWFJ5YVdOekp6dGNibHh1THlvcVhHNGdLaUJCSUhkdmNtdGxjaUIwYnlCd1pYSm1iM0p0SUdScGJXVnVjMmx2Ym1Gc2FYUjVJSEpsWkhWamRHbHZiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMVpoYkdsa1ZIbHdaWE45SUdSaGRHRk5aWFJ5YVdNZ1ZHaGxJR1JoZEdFZ2RHOGdjSEp2WTJWemN5NWNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J0WlhSb2IyUWdRU0J0WlhSb2IyUWdiMllnWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVMbHh1SUNvZ1FIQmhjbUZ0SUc5d2RHbHZibk1nTFNCclpYa3RkbUZzZFdVZ2NHRnBjbk5jYmlBcUlFQndZWEpoYlNCeVpYUjFjbTVFYVhOMFlXNWpaVTFoZEhKcGVGeHVJQ29nUUhKbGRIVnliaUI3VUhKdmJXbHpaVHhKVW1Wa2RXTmxSR2x0Wlc1emFXOXVZV3hwZEhsU1pYTjFiSFErZlNCU1pYTjFiSFJwYm1jZ1pXMWlaV1JrYVc1bklHRnVaQ0JrYVhOMFlXNWpaU0J0WVhSeWFYZ3VYRzRnS2k5Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1NWSmxaSFZqWlVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZ6ZFd4MElIdGNiaUFnWkdsemRHRnVZMlU2SUUxaGRISnBlRHRjYmlBZ1pXMWlaV1JrYVc1bk9pQk5ZWFJ5YVhnN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqY21WaGRHVkVhVzFsYm5OcGJtRnNhWFI1VW1Wa2RXTnBibWRYYjNKclpYSW9aR0YwWVUxbGRISnBZem9nVm1Gc2FXUlVlWEJsY3l3Z2JXVjBhRzlrT2lCemRISnBibWNzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpQem9nWVc1NUtUb2dVSEp2YldselpUeEpVbVZrZFdObFJHbHRaVzV6YVc5dVlXeHBkSGxTWlhOMWJIUStJSHRjYmx4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ablZ1WTNScGIyNG9jbVZ6YjJ4MlpTa2dlMXh1SUNBZ0lHTnZibk4wSUhkdmNtdGxjaUE5SUc1bGR5QlhiM0pyWlhJb2JtVjNJRlZTVENnbkxpOWthVzFsYm5OcGIyNWhiR2wwZVMxeVpXUjFZMlZ5Snl3Z2FXMXdiM0owTG0xbGRHRXVkWEpzS1NrN1hHNGdJQ0FnZDI5eWEyVnlMbkJ2YzNSTlpYTnpZV2RsS0h0Y2JpQWdJQ0FnSUdOdmJIVnRia1JoZEdFNklHUmhkR0ZOWlhSeWFXTXVaR0YwWVN4Y2JpQWdJQ0FnSUcxbGRHaHZaRG9nYldWMGFHOWtMRnh1SUNBZ0lDQWdiV1ZoYzNWeVpUb2daR0YwWVUxbGRISnBZeTV0WlhSeWFXTXNYRzRnSUNBZ0lDQnZjSFJwYjI1ek9pQnZjSFJwYjI1ekxGeHVJQ0FnSUgwcE8xeHVJQ0FnSUhkdmNtdGxjaTV2Ym0xbGMzTmhaMlVnUFNBb2UyUmhkR0U2SUh0a2FYTjBZVzVqWlN3Z1pXMWlaV1JrYVc1bmZYMHBJRDArSUh0Y2JpQWdJQ0FnY21WemIyeDJaU2g3WkdsemRHRnVZMlU2SUdScGMzUmhibU5sTENCbGJXSmxaR1JwYm1jNklHVnRZbVZrWkdsdVozMHBPMXh1SUNBZ0lIMDdYRzRnSUgwcE8xeHVmVnh1SWwxOSIsIi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gZmxvYXQgZnJvbSAwIHRvIHJhbmdlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gZmxvYXQgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tRmxvYXQocmFuZ2UpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIHJhbmdlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgc2luZ2xlIHJhbmRvbSBpbnRlZ2VyIGZyb20gMCB0byByYW5nZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UgTWF4IGdlbmVyYXRpbmcgdmFsdWUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tSW50KHJhbmdlKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tRmxvYXQocmFuZ2UpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtRnVaRzl0TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2ljbUZ1Wkc5dExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCT3pzN096czdSMEZOUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zUzBGQllUdEpRVU4yUXl4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETDBJc1EwRkJRenRCUVVWRU96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4VFFVRlRMRU5CUVVNc1MwRkJZVHRKUVVOeVF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZUVNc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUjJWdVpYSmhkR1Z6SUhOcGJtZHNaU0J5WVc1a2IyMGdabXh2WVhRZ1puSnZiU0F3SUhSdklISmhibWRsTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCeVlXNW5aU0JOWVhnZ1oyVnVaWEpoZEdsdVp5QjJZV3gxWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMGdRU0J5WVc1a2IyMGdabXh2WVhRZ1oyVnVaWEpoZEdWa0xseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY21GdVpHOXRSbXh2WVhRb2NtRnVaMlU2SUc1MWJXSmxjaWs2SUc1MWJXSmxjaUI3WEc0Z0lISmxkSFZ5YmlCTllYUm9MbkpoYm1SdmJTZ3BJQ29nY21GdVoyVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWeklITnBibWRzWlNCeVlXNWtiMjBnYVc1MFpXZGxjaUJtY205dElEQWdkRzhnY21GdVoyVXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSEpoYm1kbElFMWhlQ0JuWlc1bGNtRjBhVzVuSUhaaGJIVmxMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCQklISmhibVJ2YlNCcGJuUmxaMlZ5SUdkbGJtVnlZWFJsWkM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpoYm1SdmJVbHVkQ2h5WVc1blpUb2diblZ0WW1WeUtUb2diblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJRTFoZEdndVpteHZiM0lvY21GdVpHOXRSbXh2WVhRb2NtRnVaMlVwS1R0Y2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IHJhbmRvbUludCB9IGZyb20gJy4vcmFuZG9tJztcbmV4cG9ydCBjb25zdCBzaW1pbGFyaXR5TWV0cmljID0ge1xuICAgICdUYW5pbW90byc6IHRhbmltb3RvU2ltaWxhcml0eSxcbiAgICAnRGljZSc6IGRpY2VTaW1pbGFyaXR5LFxuICAgICdBc3ltbWV0cmljJzogYXN5bW1ldHJpY1NpbWlsYXJpdHksXG4gICAgJ0JyYXVuLUJsYW5xdWV0JzogYnJhdW5CbGFucXVldFNpbWlsYXJpdHksXG4gICAgJ0Nvc2luZSc6IGNvc2luZVNpbWlsYXJpdHksXG4gICAgJ0t1bGN6eW5za2knOiBrdWxjenluc2tpU2ltaWxhcml0eSxcbiAgICAnTWMtQ29ubmF1Z2hleSc6IG1jQ29ubmF1Z2hleVNpbWlsYXJpdHksXG4gICAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHksXG4gICAgJ1J1c3NlbCc6IHJ1c3NlbFNpbWlsYXJpdHksXG4gICAgJ1Nva2FsJzogc29rYWxTaW1pbGFyaXR5LFxuICAgICdIYW1taW5nJzogaGFtbWluZ1NpbWlsYXJpdHksXG4gICAgJ0V1Y2xpZGVhbic6IGV1Y2xpZGVhblNpbWlsYXJpdHksXG59O1xuZXhwb3J0IGNvbnN0IGRpc3RhbmNlTWV0cmljcyA9IHtcbiAgICAnVGFuaW1vdG8nOiB0YW5pbW90b0Rpc3RhbmNlLFxuICAgICdEaWNlJzogZGljZURpc3RhbmNlLFxuICAgICdBc3ltbWV0cmljJzogYXN5bW1ldHJpY0Rpc3RhbmNlLFxuICAgICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXREaXN0YW5jZSxcbiAgICAnQ29zaW5lJzogY29zaW5lRGlzdGFuY2UsXG4gICAgJ0t1bGN6eW5za2knOiBrdWxjenluc2tpRGlzdGFuY2UsXG4gICAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgICAnUm9nb3QtR29sZGJlcmcnOiByb2dvdEdvbGRiZXJnRGlzdGFuY2UsXG4gICAgJ1J1c3NlbCc6IHJ1c3NlbERpc3RhbmNlLFxuICAgICdTb2thbCc6IHNva2FsRGlzdGFuY2UsXG4gICAgJ0hhbW1pbmcnOiBoYW1taW5nRGlzdGFuY2UsXG4gICAgJ0V1Y2xpZGVhbic6IGV1Y2xpZGVhbkRpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBDSEVNX1NJTUlMQVJJVFlfTUVUUklDUyA9IFsnVGFuaW1vdG8nLCAnRGljZScsICdDb3NpbmUnLCAnSGFtbWluZycsICdFdWNsaWRlYW4nXTtcbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b1NpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyAodG90YWwgLSBjb21tb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRhbmltb3RvRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KHRhbmltb3RvU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGljZVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiAyICogY29tbW9uIC8gdG90YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gZGljZURpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShkaWNlU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29zaW5lU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICogeS50cnVlQ291bnQoKTtcbiAgICBpZiAodG90YWwgPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvIE1hdGguc3FydCh0b3RhbCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29zaW5lRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGNvc2luZVNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV1Y2xpZGVhblNpbWlsYXJpdHkoeCwgeSkge1xuICAgIHJldHVybiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGV1Y2xpZGVhbkRpc3RhbmNlKHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIgKiB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0U2ltaWxhcml0eUZyb21EaXN0YW5jZShoYW1taW5nRGlzdGFuY2UoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpIC0gMiAqIHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzb2thbFNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyAoMiAqIHRvdGFsIC0gMyAqIGNvbW1vbik7XG59XG5leHBvcnQgZnVuY3Rpb24gc29rYWxEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoc29rYWxTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBrdWxjenluc2tpU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgICBjb25zdCB0b3RhbFByb2QgPSB4LnRydWVDb3VudCgpICogeS50cnVlQ291bnQoKTtcbiAgICBpZiAodG90YWxQcm9kID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiAoY29tbW9uICogdG90YWwpIC8gKDIgKiB0b3RhbFByb2QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGt1bGN6eW5za2lEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoa3VsY3p5bnNraVNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsUHJvZCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gKGNvbW1vbiAqIHRvdGFsIC0gdG90YWxQcm9kKSAvIHRvdGFsUHJvZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkobWNDb25uYXVnaGV5U2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXN5bW1ldHJpY1NpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHgudHJ1ZUNvdW50KCksIHkudHJ1ZUNvdW50KCkpO1xuICAgIGlmIChtaW4gPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvIG1pbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3ltbWV0cmljRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGFzeW1tZXRyaWNTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoeC50cnVlQ291bnQoKSwgeS50cnVlQ291bnQoKSk7XG4gICAgaWYgKG1heCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8gbWF4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJyYXVuQmxhbnF1ZXREaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoYnJhdW5CbGFucXVldFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1c3NlbFNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGlmICh4Lmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8geC5sZW5ndGg7XG59XG5leHBvcnQgZnVuY3Rpb24gcnVzc2VsRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KHJ1c3NlbFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJvZ290R29sZGJlcmdTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgY29uc3QgdG90YWwgPSB4LmNvdW50Qml0cyh0cnVlKSArIHkuY291bnRCaXRzKHRydWUpO1xuICAgIGNvbnN0IGxlbiA9IHgubGVuZ3RoO1xuICAgIGNvbnN0IGRpZmYgPSBsZW4gLSB0b3RhbCArIGNvbW1vbjtcbiAgICBpZiAoKGNvbW1vbiA9PSBsZW4pIHx8IChkaWZmID09IGxlbikpXG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gY29tbW9uIC8gdG90YWwgKyBkaWZmIC8gKDIgKiBsZW4gLSB0b3RhbCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcm9nb3RHb2xkYmVyZ0Rpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShyb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltaWxhcml0eUZyb21EaXN0YW5jZShkaXN0YW5jZSkge1xuICAgIHJldHVybiAxIC8gKDEgKyBkaXN0YW5jZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzaW1pbGFyaXR5KSB7XG4gICAgcmV0dXJuIDEgLyBzaW1pbGFyaXR5IC0gMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMmx0YVd4aGNtbDBlUzF0WlhSeWFXTnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWMybHRhV3hoY21sMGVTMXRaWFJ5YVdOekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVU5CTEU5QlFVOHNSVUZCUXl4VFFVRlRMRVZCUVVNc1RVRkJUU3hWUVVGVkxFTkJRVU03UVVGRmJrTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1owSkJRV2RDTEVkQlFUSkVPMGxCUTNSR0xGVkJRVlVzUlVGQlJTeHJRa0ZCYTBJN1NVRkRPVUlzVFVGQlRTeEZRVUZGTEdOQlFXTTdTVUZEZEVJc1dVRkJXU3hGUVVGRkxHOUNRVUZ2UWp0SlFVTnNReXhuUWtGQlowSXNSVUZCUlN4MVFrRkJkVUk3U1VGRGVrTXNVVUZCVVN4RlFVRkZMR2RDUVVGblFqdEpRVU14UWl4WlFVRlpMRVZCUVVVc2IwSkJRVzlDTzBsQlEyeERMR1ZCUVdVc1JVRkJSU3h6UWtGQmMwSTdTVUZEZGtNc1owSkJRV2RDTEVWQlFVVXNkVUpCUVhWQ08wbEJRM3BETEZGQlFWRXNSVUZCUlN4blFrRkJaMEk3U1VGRE1VSXNUMEZCVHl4RlFVRkZMR1ZCUVdVN1NVRkRlRUlzVTBGQlV5eEZRVUZGTEdsQ1FVRnBRanRKUVVNMVFpeFhRVUZYTEVWQlFVVXNiVUpCUVcxQ08wTkJRMnBETEVOQlFVTTdRVUZGUml4TlFVRk5MRU5CUVVNc1RVRkJUU3hsUVVGbExFZEJRVEpFTzBsQlEzSkdMRlZCUVZVc1JVRkJSU3huUWtGQlowSTdTVUZETlVJc1RVRkJUU3hGUVVGRkxGbEJRVms3U1VGRGNFSXNXVUZCV1N4RlFVRkZMR3RDUVVGclFqdEpRVU5vUXl4blFrRkJaMElzUlVGQlJTeHhRa0ZCY1VJN1NVRkRka01zVVVGQlVTeEZRVUZGTEdOQlFXTTdTVUZEZUVJc1dVRkJXU3hGUVVGRkxHdENRVUZyUWp0SlFVTm9ReXhsUVVGbExFVkJRVVVzYjBKQlFXOUNPMGxCUTNKRExHZENRVUZuUWl4RlFVRkZMSEZDUVVGeFFqdEpRVU4yUXl4UlFVRlJMRVZCUVVVc1kwRkJZenRKUVVONFFpeFBRVUZQTEVWQlFVVXNZVUZCWVR0SlFVTjBRaXhUUVVGVExFVkJRVVVzWlVGQlpUdEpRVU14UWl4WFFVRlhMRVZCUVVVc2FVSkJRV2xDTzBOQlF5OUNMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTeDFRa0ZCZFVJc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRk5CUVZNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dEJRVVU1Uml4TlFVRk5MRlZCUVZVc2EwSkJRV3RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRla1FzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTTFReXhKUVVGSkxFdEJRVXNzU1VGQlNTeERRVUZETzFGQlExb3NUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpORExFOUJRVThzVFVGQlRTeEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMjVETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRka1FzVDBGQlR5eDVRa0ZCZVVJc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0zUkN4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHTkJRV01zUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTnlSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzBsQlF6VkRMRWxCUVVrc1MwRkJTeXhKUVVGSkxFTkJRVU03VVVGRFdpeFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETTBNc1QwRkJUeXhEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTTFRaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEZsQlFWa3NRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVOdVJDeFBRVUZQTEhsQ1FVRjVRaXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVONlJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUTNaRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETlVNc1NVRkJTU3hMUVVGTExFbEJRVWtzUTBGQlF6dFJRVU5hTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMjVETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1kwRkJZeXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzSkVMRTlCUVU4c2VVSkJRWGxDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4dFFrRkJiVUlzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTXhSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRelZFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2FVSkJRV2xDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRlRVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnNSaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdsQ1FVRnBRaXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzaEVMRTlCUVU4c2VVSkJRWGxDTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6RkVMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWlVGQlpTeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUTNSRUxFOUJRVThzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOMlJTeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR1ZCUVdVc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU4wUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8wbEJRelZETEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wTXNUMEZCVHl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNelF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR0ZCUVdFc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU53UkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU14UkN4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHOUNRVUZ2UWl4RFFVRkRMRU5CUVZjc1JVRkJSU3hEUVVGWE8wbEJRek5FTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkROVU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTm9SQ3hKUVVGSkxGTkJRVk1zU1VGQlNTeERRVUZETzFGQlEyaENMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUXpWRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZEZWtRc1QwRkJUeXg1UWtGQmVVSXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNdlJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUXpkRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETlVNc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dEpRVU5vUkN4SlFVRkpMRk5CUVZNc1NVRkJTU3hEUVVGRE8xRkJRMmhDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEV0QlFVc3NSMEZCUnl4VFFVRlRMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRGJFUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3h2UWtGQmIwSXNRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVNelJDeFBRVUZQTEhsQ1FVRjVRaXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEycEZMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzYjBKQlFXOUNMRU5CUVVNc1EwRkJWeXhGUVVGRkxFTkJRVmM3U1VGRE0wUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdTVUZEYmtRc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5XTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZEVJc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHJRa0ZCYTBJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU42UkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXk5RUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZET1VRc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRia1FzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTldMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eFBRVUZQTEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRkRUlzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTTFSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMSFZDUVVGMVFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhGTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRka1FzU1VGQlNTeERRVUZETEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNN1VVRkRaaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wTXNUMEZCVHl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU16UWl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHTkJRV01zUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTnlSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5FTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2RVSkJRWFZDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRPVVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU55UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhIUVVGSExFZEJRVWNzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnNReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF6dFJRVUZGTEU5QlFVOHNSMEZCUnl4RFFVRkRPenRSUVVNMVF5eFBRVUZQTEUxQlFVMHNSMEZCUnl4TFFVRkxMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSEZDUVVGeFFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUXpWRUxFOUJRVThzZVVKQlFYbENMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJFVXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3g1UWtGQmVVSXNRMEZCUXl4UlFVRm5RanRKUVVONFJDeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkZMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU0zUWl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxIbENRVUY1UWl4RFFVRkRMRlZCUVd0Q08wbEJRekZFTEU5QlFVOHNRMEZCUXl4SFFVRkhMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE5VSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3huUWtGQlowSXNRMEZCUXl4TlFVRmpMRVZCUVVVc1EwRkJVeXhGUVVGRkxFbEJRWGRETzBsQlEyeEhMRk5CUVZNc1MwRkJTeXhEUVVGRExFMUJRV2RETEVWQlFVVXNUMEZCT0VJN1VVRkROMFVzU1VGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNCQ0xFbEJRVWtzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjBRaXhMUVVGTExFMUJRVTBzVDBGQlR5eEpRVUZKTEUxQlFVMHNSVUZCUlR0WlFVTTFRaXhOUVVGTkxHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeFZRVUZWTEVsQlFVa3NTVUZCU1N4SlFVRkpMR05CUVdNc1IwRkJSeXhWUVVGVkxFVkJRVVU3WjBKQlEzSkVMRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU03WjBKQlEyNUNMRlZCUVZVc1IwRkJSeXhqUVVGakxFTkJRVU03WVVGRE4wSTdVMEZEUmp0UlFVTkVMRTlCUVU4c1VVRkJVU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOMlF5eE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJSVGRDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0pDTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGNrSTdTVUZGUkN4UFFVRlBMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzFGQlEzaENMRTFCUVUwc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGRFppeFZRVUZWTEVOQlFVTXNUVUZCVFN4RlFVRTRRaXhGUVVNdlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVlVGQlV5eEhRVUZITEVWQlFVVXNTMEZCU3p0WlFVTjRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTFBc1NVRkJTU3hIUVVGSExFVkJRVVU3V1VGRFVDeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnBDTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVFSTdTMEZEUmp0SlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBbkxpOWlhWFF0WVhKeVlYa25PMXh1YVcxd2IzSjBJSHR5WVc1a2IyMUpiblI5SUdaeWIyMGdKeTR2Y21GdVpHOXRKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSE5wYldsc1lYSnBkSGxOWlhSeWFXTTZJSHRiYm1GdFpUb2djM1J5YVc1blhUb2dLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTa2dQVDRnYm5WdFltVnlmU0E5SUh0Y2JpQWdKMVJoYm1sdGIzUnZKem9nZEdGdWFXMXZkRzlUYVcxcGJHRnlhWFI1TEZ4dUlDQW5SR2xqWlNjNklHUnBZMlZUYVcxcGJHRnlhWFI1TEZ4dUlDQW5RWE41YlcxbGRISnBZeWM2SUdGemVXMXRaWFJ5YVdOVGFXMXBiR0Z5YVhSNUxGeHVJQ0FuUW5KaGRXNHRRbXhoYm5GMVpYUW5PaUJpY21GMWJrSnNZVzV4ZFdWMFUybHRhV3hoY21sMGVTeGNiaUFnSjBOdmMybHVaU2M2SUdOdmMybHVaVk5wYldsc1lYSnBkSGtzWEc0Z0lDZExkV3hqZW5sdWMydHBKem9nYTNWc1kzcDVibk5yYVZOcGJXbHNZWEpwZEhrc1hHNGdJQ2ROWXkxRGIyNXVZWFZuYUdWNUp6b2diV05EYjI1dVlYVm5hR1Y1VTJsdGFXeGhjbWwwZVN4Y2JpQWdKMUp2WjI5MExVZHZiR1JpWlhKbkp6b2djbTluYjNSSGIyeGtZbVZ5WjFOcGJXbHNZWEpwZEhrc1hHNGdJQ2RTZFhOelpXd25PaUJ5ZFhOelpXeFRhVzFwYkdGeWFYUjVMRnh1SUNBblUyOXJZV3duT2lCemIydGhiRk5wYldsc1lYSnBkSGtzWEc0Z0lDZElZVzF0YVc1bkp6b2dhR0Z0YldsdVoxTnBiV2xzWVhKcGRIa3NYRzRnSUNkRmRXTnNhV1JsWVc0bk9pQmxkV05zYVdSbFlXNVRhVzFwYkdGeWFYUjVMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdScGMzUmhibU5sVFdWMGNtbGpjem9nZTF0dVlXMWxPaUJ6ZEhKcGJtZGRPaUFvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLU0E5UGlCdWRXMWlaWEo5SUQwZ2UxeHVJQ0FuVkdGdWFXMXZkRzhuT2lCMFlXNXBiVzkwYjBScGMzUmhibU5sTEZ4dUlDQW5SR2xqWlNjNklHUnBZMlZFYVhOMFlXNWpaU3hjYmlBZ0owRnplVzF0WlhSeWFXTW5PaUJoYzNsdGJXVjBjbWxqUkdsemRHRnVZMlVzWEc0Z0lDZENjbUYxYmkxQ2JHRnVjWFZsZENjNklHSnlZWFZ1UW14aGJuRjFaWFJFYVhOMFlXNWpaU3hjYmlBZ0owTnZjMmx1WlNjNklHTnZjMmx1WlVScGMzUmhibU5sTEZ4dUlDQW5TM1ZzWTNwNWJuTnJhU2M2SUd0MWJHTjZlVzV6YTJsRWFYTjBZVzVqWlN4Y2JpQWdKMDFqTFVOdmJtNWhkV2RvWlhrbk9pQnRZME52Ym01aGRXZG9aWGxFYVhOMFlXNWpaU3hjYmlBZ0oxSnZaMjkwTFVkdmJHUmlaWEpuSnpvZ2NtOW5iM1JIYjJ4a1ltVnlaMFJwYzNSaGJtTmxMRnh1SUNBblVuVnpjMlZzSnpvZ2NuVnpjMlZzUkdsemRHRnVZMlVzWEc0Z0lDZFRiMnRoYkNjNklITnZhMkZzUkdsemRHRnVZMlVzWEc0Z0lDZElZVzF0YVc1bkp6b2dhR0Z0YldsdVowUnBjM1JoYm1ObExGeHVJQ0FuUlhWamJHbGtaV0Z1SnpvZ1pYVmpiR2xrWldGdVJHbHpkR0Z1WTJVc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdRMGhGVFY5VFNVMUpURUZTU1ZSWlgwMUZWRkpKUTFNZ1BTQmJKMVJoYm1sdGIzUnZKeXdnSjBScFkyVW5MQ0FuUTI5emFXNWxKeXdnSjBoaGJXMXBibWNuTENBblJYVmpiR2xrWldGdUoxMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIwWVc1cGJXOTBiMU5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ1kyOXVjM1FnZEc5MFlXd2dQU0I0TG5SeWRXVkRiM1Z1ZENncElDc2dlUzUwY25WbFEyOTFiblFvS1R0Y2JpQWdhV1lnS0hSdmRHRnNJRDA5SURBcFhHNGdJQ0FnY21WMGRYSnVJREV1TUR0Y2JpQWdZMjl1YzNRZ1kyOXRiVzl1SUQwZ2VDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcE8xeHVJQ0J5WlhSMWNtNGdZMjl0Ylc5dUlDOGdLSFJ2ZEdGc0lDMGdZMjl0Ylc5dUtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhSaGJtbHRiM1J2UkdsemRHRnVZMlVvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUdkbGRFUnBjM1JoYm1ObFJuSnZiVk5wYldsc1lYSnBkSGtvZEdGdWFXMXZkRzlUYVcxcGJHRnlhWFI1S0hnc0lIa3BLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBZMlZUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXJJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR2xtSUNoMGIzUmhiQ0E5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJRElnS2lCamIyMXRiMjRnTHlCMGIzUmhiRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBZMlZFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hrYVdObFUybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjNOcGJtVlRhVzFwYkdGeWFYUjVLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTazZJRzUxYldKbGNpQjdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdlQzUwY25WbFEyOTFiblFvS1NBcUlIa3VkSEoxWlVOdmRXNTBLQ2s3WEc0Z0lHbG1JQ2gwYjNSaGJDQTlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdMakE3WEc0Z0lHTnZibk4wSUdOdmJXMXZiaUE5SUhndVlXNWtWMmwwYUVOdmRXNTBRbWwwY3loNUxDQjBjblZsS1R0Y2JpQWdjbVYwZFhKdUlHTnZiVzF2YmlBdklFMWhkR2d1YzNGeWRDaDBiM1JoYkNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjNOcGJtVkVhWE4wWVc1alpTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0J5WlhSMWNtNGdaMlYwUkdsemRHRnVZMlZHY205dFUybHRhV3hoY21sMGVTaGpiM05wYm1WVGFXMXBiR0Z5YVhSNUtIZ3NJSGtwS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1YxWTJ4cFpHVmhibE5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUdkbGRGTnBiV2xzWVhKcGRIbEdjbTl0UkdsemRHRnVZMlVvWlhWamJHbGtaV0Z1UkdsemRHRnVZMlVvZUN3Z2VTa3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYVmpiR2xrWldGdVJHbHpkR0Z1WTJVb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaDRMblJ5ZFdWRGIzVnVkQ2dwSUNzZ2VTNTBjblZsUTI5MWJuUW9LU0F0SURJcWVDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdoaGJXMXBibWRUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lISmxkSFZ5YmlCblpYUlRhVzFwYkdGeWFYUjVSbkp2YlVScGMzUmhibU5sS0doaGJXMXBibWRFYVhOMFlXNWpaU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCb1lXMXRhVzVuUkdsemRHRnVZMlVvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUhndWRISjFaVU52ZFc1MEtDa2dLeUI1TG5SeWRXVkRiM1Z1ZENncElDMGdNaXA0TG1GdVpGZHBkR2hEYjNWdWRFSnBkSE1vZVN3Z2RISjFaU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpiMnRoYkZOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2RHOTBZV3dnUFNCNExuUnlkV1ZEYjNWdWRDZ3BJQ3NnZVM1MGNuVmxRMjkxYm5Rb0tUdGNiaUFnWTI5dWMzUWdZMjl0Ylc5dUlEMGdlQzVoYm1SWGFYUm9RMjkxYm5SQ2FYUnpLSGtzSUhSeWRXVXBPMXh1SUNCeVpYUjFjbTRnWTI5dGJXOXVJQzhnS0RJZ0tpQjBiM1JoYkNBdElETWdLaUJqYjIxdGIyNHBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2MyOXJZV3hFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2h6YjJ0aGJGTnBiV2xzWVhKcGRIa29lQ3dnZVNrcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYTNWc1kzcDVibk5yYVZOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2RHOTBZV3dnUFNCNExuUnlkV1ZEYjNWdWRDZ3BJQ3NnZVM1MGNuVmxRMjkxYm5Rb0tUdGNiaUFnWTI5dWMzUWdkRzkwWVd4UWNtOWtJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXFJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR2xtSUNoMGIzUmhiRkJ5YjJRZ1BUMGdNQ2xjYmlBZ0lDQnlaWFIxY200Z01DNHdPMXh1SUNCamIyNXpkQ0JqYjIxdGIyNGdQU0I0TG1GdVpGZHBkR2hEYjNWdWRFSnBkSE1vZVN3Z2RISjFaU2s3WEc0Z0lISmxkSFZ5YmlBb1kyOXRiVzl1SUNvZ2RHOTBZV3dwSUM4Z0tESWdLaUIwYjNSaGJGQnliMlFwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhM1ZzWTNwNWJuTnJhVVJwYzNSaGJtTmxLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTazZJRzUxYldKbGNpQjdYRzRnSUhKbGRIVnliaUJuWlhSRWFYTjBZVzVqWlVaeWIyMVRhVzFwYkdGeWFYUjVLR3QxYkdONmVXNXphMmxUYVcxcGJHRnlhWFI1S0hnc0lIa3BLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWpRMjl1Ym1GMVoyaGxlVk5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ1kyOXVjM1FnZEc5MFlXd2dQU0I0TG5SeWRXVkRiM1Z1ZENncElDc2dlUzUwY25WbFEyOTFiblFvS1R0Y2JpQWdZMjl1YzNRZ2RHOTBZV3hRY205a0lEMGdlQzUwY25WbFEyOTFiblFvS1NBcUlIa3VkSEoxWlVOdmRXNTBLQ2s3WEc0Z0lHbG1JQ2gwYjNSaGJGQnliMlFnUFQwZ01DbGNiaUFnSUNCeVpYUjFjbTRnTUM0d08xeHVJQ0JqYjI1emRDQmpiMjF0YjI0Z1BTQjRMbUZ1WkZkcGRHaERiM1Z1ZEVKcGRITW9lU3dnZEhKMVpTazdYRzRnSUhKbGRIVnliaUFvWTI5dGJXOXVJQ29nZEc5MFlXd2dMU0IwYjNSaGJGQnliMlFwSUM4Z2RHOTBZV3hRY205a08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldORGIyNXVZWFZuYUdWNVJHbHpkR0Z1WTJVb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlHZGxkRVJwYzNSaGJtTmxSbkp2YlZOcGJXbHNZWEpwZEhrb2JXTkRiMjV1WVhWbmFHVjVVMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaGMzbHRiV1YwY21salUybHRhV3hoY21sMGVTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0JqYjI1emRDQnRhVzRnUFNCTllYUm9MbTFwYmloNExuUnlkV1ZEYjNWdWRDZ3BMQ0I1TG5SeWRXVkRiM1Z1ZENncEtUdGNiaUFnYVdZZ0tHMXBiaUE5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJR052YlcxdmJpQXZJRzFwYmp0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z6ZVcxdFpYUnlhV05FYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hoYzNsdGJXVjBjbWxqVTJsdGFXeGhjbWwwZVNoNExDQjVLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmljbUYxYmtKc1lXNXhkV1YwVTJsdGFXeGhjbWwwZVNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQmpiMjV6ZENCdFlYZ2dQU0JOWVhSb0xtMWhlQ2g0TG5SeWRXVkRiM1Z1ZENncExDQjVMblJ5ZFdWRGIzVnVkQ2dwS1R0Y2JpQWdhV1lnS0cxaGVDQTlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdMakE3WEc0Z0lHTnZibk4wSUdOdmJXMXZiaUE5SUhndVlXNWtWMmwwYUVOdmRXNTBRbWwwY3loNUxDQjBjblZsS1R0Y2JpQWdjbVYwZFhKdUlHTnZiVzF2YmlBdklHMWhlRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHSnlZWFZ1UW14aGJuRjFaWFJFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hpY21GMWJrSnNZVzV4ZFdWMFUybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5ZFhOelpXeFRhVzFwYkdGeWFYUjVLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTazZJRzUxYldKbGNpQjdYRzRnSUdsbUlDaDRMbXhsYm1kMGFDQTlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdMakE3WEc0Z0lHTnZibk4wSUdOdmJXMXZiaUE5SUhndVlXNWtWMmwwYUVOdmRXNTBRbWwwY3loNUxDQjBjblZsS1R0Y2JpQWdjbVYwZFhKdUlHTnZiVzF2YmlBdklIZ3ViR1Z1WjNSb08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY25WemMyVnNSR2x6ZEdGdVkyVW9lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJR2RsZEVScGMzUmhibU5sUm5KdmJWTnBiV2xzWVhKcGRIa29jblZ6YzJWc1UybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5YjJkdmRFZHZiR1JpWlhKblUybHRhV3hoY21sMGVTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0JqYjI1emRDQmpiMjF0YjI0Z1BTQjRMbUZ1WkZkcGRHaERiM1Z1ZEVKcGRITW9lU3dnZEhKMVpTazdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdlQzVqYjNWdWRFSnBkSE1vZEhKMVpTa2dLeUI1TG1OdmRXNTBRbWwwY3loMGNuVmxLVHRjYmlBZ1kyOXVjM1FnYkdWdUlEMGdlQzVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJR1JwWm1ZZ1BTQnNaVzRnTFNCMGIzUmhiQ0FySUdOdmJXMXZianRjYmlBZ2FXWWdLQ2hqYjIxdGIyNGdQVDBnYkdWdUtTQjhmQ0FvWkdsbVppQTlQU0JzWlc0cEtTQnlaWFIxY200Z01TNHdPMXh1SUNCbGJITmxJSEpsZEhWeWJpQmpiMjF0YjI0Z0x5QjBiM1JoYkNBcklHUnBabVlnTHlBb01pQXFJR3hsYmlBdElIUnZkR0ZzS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEp2WjI5MFIyOXNaR0psY21kRWFYTjBZVzVqWlNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z1oyVjBSR2x6ZEdGdVkyVkdjbTl0VTJsdGFXeGhjbWwwZVNoeWIyZHZkRWR2YkdSaVpYSm5VMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUlRhVzFwYkdGeWFYUjVSbkp2YlVScGMzUmhibU5sS0dScGMzUmhibU5sT2lCdWRXMWlaWElwSUh0Y2JpQWdjbVYwZFhKdUlERWdMeUFvSURFZ0t5QmthWE4wWVc1alpTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUkVhWE4wWVc1alpVWnliMjFUYVcxcGJHRnlhWFI1S0hOcGJXbHNZWEpwZEhrNklHNTFiV0psY2lrZ2UxeHVJQ0J5WlhSMWNtNGdNU0F2SUhOcGJXbHNZWEpwZEhrZ0xTQXhPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1oyVjBSR2wyWlhKelpWTjFZbk5sZENoc1pXNW5kR2c2SUc1MWJXSmxjaXdnYmpvZ2JuVnRZbVZ5TENCa2FYTjBPaUFvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlLU0I3WEc0Z0lHWjFibU4wYVc5dUlHMWhlRUo1S0haaGJIVmxjem9nU1hSbGNtRmliR1ZKZEdWeVlYUnZjanh1ZFcxaVpYSStMQ0J2Y21SbGNrSjVPaUFvYVRvZ2JuVnRZbVZ5S1NBOVBpQnVkVzFpWlhJcElIdGNiaUFnSUNCc1pYUWdiV0Y0Vm1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUd4bGRDQnRZWGhQY21SbGNrSjVJRDBnYm5Wc2JEdGNibHh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdaV3hsYldWdWRDQnZaaUIyWVd4MVpYTXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHVnNaVzFsYm5SUGNtUmxja0o1SUQwZ2IzSmtaWEpDZVNobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUdsbUlDaHRZWGhQY21SbGNrSjVJRDA5SUc1MWJHd2dmSHdnWld4bGJXVnVkRTl5WkdWeVFua2dQaUJ0WVhoUGNtUmxja0o1S1NCN1hHNGdJQ0FnSUNBZ0lHMWhlRlpoYkhWbElEMGdaV3hsYldWdWREdGNiaUFnSUNBZ0lDQWdiV0Y0VDNKa1pYSkNlU0E5SUdWc1pXMWxiblJQY21SbGNrSjVPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYldGNFZtRnNkV1U3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J6ZFdKelpYUWdQU0JiY21GdVpHOXRTVzUwS0d4bGJtZDBhQ0F0SURFcFhUdGNiaUFnWTI5dWMzUWdZMjl0Y0d4bGJXVnVkQ0E5SUc1bGR5QlRaWFFvS1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ2FXWWdLQ0Z6ZFdKelpYUXVhVzVqYkhWa1pYTW9hU2twWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG1Ga1pDaHBLVHRjYmlBZ2ZWeHVYRzRnSUhkb2FXeGxJQ2h6ZFdKelpYUXViR1Z1WjNSb0lEd2diaWtnZTF4dUlDQWdJR052Ym5OMElHbGtlQ0E5SUcxaGVFSjVLRnh1SUNBZ0lDQWdZMjl0Y0d4bGJXVnVkQzUyWVd4MVpYTW9LU0JoY3lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzWEc0Z0lDQWdJQ0FvYVNrZ1BUNGdUV0YwYUM1dGFXNHVZWEJ3Ykhrb1RXRjBhQ3dnYzNWaWMyVjBMbTFoY0NobWRXNWpkR2x2YmloMllXd3NJR2x1WkdWNEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmthWE4wS0drc0lIWmhiQ2s3WEc0Z0lDQWdJQ0I5S1NrcE8xeHVJQ0FnSUdsbUlDaHBaSGdwSUh0Y2JpQWdJQ0FnSUhOMVluTmxkQzV3ZFhOb0tHbGtlQ2s3WEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG1SbGJHVjBaU2hwWkhncE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYzNWaWMyVjBPMXh1ZlZ4dUlsMTkiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBhc3N1cmUubm90TnVsbCA9IG5vdE51bGw7XG59KShhc3N1cmUgfHwgKGFzc3VyZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gICAgY29uc3RydWN0b3IoY2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9hID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAob3B0aW9ucy50aW1lb3V0ID0gMzAwMDApO1xuICAgICAgICAoX2IgPSBvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQgPSAyMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHlpZWxkIGFzc2VydE5vRXJyb3Iob3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0KSkpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cbi8qKiBBd2FpdHMgZm9yIGEgd2hpbGUgY2hlY2tpbmcgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgcGxhdGZvcm0gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb0Vycm9yKG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtcyAvIDUwMDsgKytpKSB7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSg1MDApO1xuICAgICAgICAgICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCAhPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG4vKiogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSkge1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGlmICghYXJlRXF1YWwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICAgICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICAgICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFZhbHVlfSBmb3Iga2V5ICR7ZXhwZWN0ZWRLZXl9LCBnb3QgJHthY3R1YWxWYWx1ZX1gKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyoqIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5LCB0ZXN0cykge1xuICAgIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRlc3RzKCk7XG59XG4vKiogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZSkge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5iZWZvcmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IChfYSA9IHZhbHVlLnRlc3RzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHlpZWxkIGV4ZWNUZXN0KHRbaV0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50ZXN0KSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gKHlpZWxkIFByb21pc2UuYWxsKHJlcykpLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5hZnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4ZWNUZXN0KHQsIHByZWRpY2F0ZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICghdC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSkpKVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogJ3NraXBwZWQnIH07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAoX2EgPSB5aWVsZCB0LnRlc3QoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ09LJyB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCkgfTtcbiAgICAgICAgfVxuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qKiBXYWl0cyBbbXNdIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhOUVVGTkxFTkJRVU1zVFVGQlRTeExRVUZMTEVkQlMyUXNSVUZCUlN4RFFVRkRPMEZCUlZBc1RVRkJUU3hEUVVGRExFbEJRVWtzWlVGQmRVSXNRMEZCUXp0QlFVVnVReXhOUVVGTkxFdEJRVmNzVFVGQlRTeERRVTEwUWp0QlFVNUVMRmRCUVdsQ0xFMUJRVTA3U1VGRmNrSXNVMEZCWjBJc1QwRkJUeXhEUVVGRExFdEJRVlVzUlVGQlJTeEpRVUZoTzFGQlF5OURMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWs3V1VGRFppeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxHTkJRV01zUTBGQlF5eERRVUZETzBsQlEzQkZMRU5CUVVNN1NVRklaU3hqUVVGUExGVkJSM1JDTEVOQlFVRTdRVUZEU0N4RFFVRkRMRVZCVG1kQ0xFMUJRVTBzUzBGQlRpeE5RVUZOTEZGQlRYUkNPMEZCVDBRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEUxQlFVRXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeHZRMEZCYWtNc1QwRkJUeXhEUVVGRExIbENRVUY1UWl4SFFVRkxMRWxCUVVrc1JVRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVhWQ0xFVkJRVVU3V1VGRGJrTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGUExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0blFrRkRNME1zU1VGQlNTeE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMmRDUVVOb1FpeEpRVUZKTzI5Q1FVTkdMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRNVUlzVFVGQlRTeEhRVUZITEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRM1pDTzJkQ1FVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yOUNRVU5tTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRFdEdG5Ra0ZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxHRkJRV0VzUTBGQlF5eFBRVUZSTEVOQlFVTXNlVUpCUVRCQ0xFTkJRVU1zUTBGQlF6dHZRa0ZETjBRc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEc5RFFVRnZReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFFWXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMnhDTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1VVRkRUQ3hEUVVGRExFTkJRVUVzUTBGQlF6dEpRVU5LTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hKUVVGSkxFTkJRVU1zU1VGQldTeEZRVUZGTEVsQlFYZENMRVZCUVVVc1QwRkJjVUk3U1VGRGFFWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEV0QlFVc3NTVUZCU1N4VFFVRlRPMUZCUXpORExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRM0JETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja1lzUTBGQlF6dEJRVVZFTEcxRlFVRnRSVHRCUVVOdVJTeE5RVUZOTEZWQlFXZENMR0ZCUVdFc1EwRkJReXhGUVVGVk96dFJRVU0xUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU5xUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5xUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0VFFVTm9RanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0RFFVRkJPMEZCUlVRc2FVWkJRV2xHTzBGQlEycEdMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFTkJRVU1zVFVGQlZ5eEZRVUZGTEZGQlFXRTdTVUZETDBNc1NVRkJTU3hOUVVGTkxFdEJRVXNzVVVGQlVUdFJRVU55UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHRkJRV0VzVVVGQlVTeFhRVUZYTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRMMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1RVRkJZeXhGUVVGRkxGRkJRV2RDTEVWQlFVVXNVMEZCVXl4SFFVRkhMRXRCUVVzN1NVRkROMFVzVFVGQlRTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzVVVGQlVTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRPMGxCUTNwRUxFbEJRVWtzUTBGQlF5eFJRVUZSTzFGQlExZ3NUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxGRkJRVkVzVTBGQlV5eE5RVUZOTEdsQ1FVRnBRaXhUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzUkdMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzV1VGQldTeERRVUZETEUxQlFUaENMRVZCUVVVc1VVRkJaME03U1VGRE0wWXNTMEZCU3l4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxHRkJRV0VzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVU3VVVGRGJrVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zVjBGQlZ5eERRVUZETzFsQlEzSkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zYzBKQlFYTkNMRmRCUVZjc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRmJFVXNUVUZCVFN4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlEzaERMRWxCUVVrc1YwRkJWeXhaUVVGWkxFdEJRVXNzU1VGQlNTeGhRVUZoTEZsQlFWa3NTMEZCU3p0WlFVTm9SU3hYUVVGWExFTkJRVU1zVjBGQlZ5eEZRVUZGTEdGQlFXRXNRMEZCUXl4RFFVRkRPMkZCUTNKRExFbEJRVWtzVjBGQlZ5eFpRVUZaTEUxQlFVMHNTVUZCU1N4aFFVRmhMRmxCUVZrc1RVRkJUVHRaUVVOMlJTeFpRVUZaTEVOQlFVTXNWMEZCVnl4RlFVRkZMR0ZCUVdFc1EwRkJReXhEUVVGRE8yRkJRM1JETEVsQlFVa3NWMEZCVnl4SlFVRkpMR0ZCUVdFN1dVRkRia01zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4WlFVRlpMR0ZCUVdFc1dVRkJXU3hYUVVGWExGTkJRVk1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTXpSanRCUVVOSUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdFc1JVRkJSU3hSUVVGbE8wbEJRM2hFTEUxQlFVMHNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGJrTXNUVUZCVFN4alFVRmpMRWRCUVVjc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVVYyUXl4SlFVRkpMRmxCUVZrc1NVRkJTU3hqUVVGakxFVkJRVVU3VVVGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXd3UkVGQk1FUXNXVUZCV1N4SFFVRkhPMWxCUTNaR0xHZERRVUZuUXl4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8wdEJRM0pFTzBsQlJVUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZsQlFWa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOeVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRXRCUVVzN1dVRkROVVFzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTnFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5MRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEUxQlFVMDdXVUZEYmtVc1dVRkJXU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5zUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXk5Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNXVUZCV1N4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRk5CUVZNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnFSanRCUVVOSUxFTkJRVU03UVVGRlJDdzBRa0ZCTkVJN1FVRkROVUlzVFVGQlRTeFZRVUZWTEZGQlFWRXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFdEJRV2xDTzBsQlF6RkVMR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRE0wSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1FVRkRWaXhEUVVGRE8wRkJSVVFzZDBaQlFYZEdPMEZCUTNoR0xFMUJRVTBzVlVGQlZTeE5RVUZOTEVOQlFVTXNUVUZCTWtJN1NVRkRhRVFzU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzBGQlEzcERMRU5CUVVNN1FVRkZSQ3gxUmtGQmRVWTdRVUZEZGtZc1RVRkJUU3hWUVVGVkxFdEJRVXNzUTBGQlF5eExRVUV3UWp0SlFVTTVReXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNTVUZCU1N4VFFVRlRPMUZCUTNKRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGRrTXNRMEZCUXp0QlFVZEVMRTFCUVUwc1ZVRkJaMElzVVVGQlVTeERRVUZETEU5QlFUaERPenM3VVVGRE0wVXNUVUZCVFN4UFFVRlBMRWRCUVRaRkxFVkJRVVVzUTBGQlF6dFJRVVUzUml4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdFpRVU5vUkN4SlFVRkpMRU5CUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1MwRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4UlFVRlJMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03YjBKQlEyaEZMRk5CUVZNN1lVRkRXanRaUVVORUxFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEZEVZc1NVRkJTU3hMUVVGTExFTkJRVU1zV1VGQldUdG5Ra0ZEY0VJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmxCUVZrc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjJSaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRka0k3VVVGRlJDeFBRVUZQTEU5QlFVOHNRMEZCUXpzN1EwRkRhRUk3UVVGRlJDeFRRVUZsTEZGQlFWRXNRMEZCUXl4RFFVRlBMRVZCUVVVc1UwRkJOa0k3T3p0UlFVTTFSQ3hKUVVGSkxFTkJRWGxGTEVOQlFVTTdVVUZET1VVc1NVRkJTVHRaUVVOR0xFbEJRVWtzVTBGQlV5eEpRVUZKTEZOQlFWTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNaR0xFTkJRVU1zUjBGQlJ5eEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlF5eERRVUZET3p0blFrRkZka01zUTBGQlF5eEhRVUZITEVWQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlFTeE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc2JVTkJRVWtzU1VGQlNTeEZRVUZETEVOQlFVTTdVMEZEZGtRN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJReXhEUVVGRE8xTkJRelZETzFGQlEwUXNRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETzFGQlEzaENMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTm9RaXhQUVVGUExFTkJRVU1zUTBGQlF6czdRMEZEVmp0QlFVVkVMRGhDUVVFNFFqdEJRVU01UWl4TlFVRk5MRlZCUVdkQ0xFdEJRVXNzUTBGQlF5eEZRVUZWT3p0UlFVTndReXhOUVVGTkxFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRPVU1zUTBGQlF6dERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0IwWlhOMGN6b2dlMXh1SUNCYmEyVjVPaUJ6ZEhKcGJtZGRPaUI3WEc0Z0lDQWdkR1Z6ZEhNL09pQlVaWE4wVzEwc0lHSmxabTl5WlQ4NklDZ3BJRDArSUZCeWIyMXBjMlU4ZG05cFpENHNJR0ZtZEdWeVB6b2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaXhjYmlBZ0lDQmlaV1p2Y21WVGRHRjBkWE0vT2lCemRISnBibWNzSUdGbWRHVnlVM1JoZEhWelB6b2djM1J5YVc1blhHNGdJSDFjYm4wZ1BTQjdmVHRjYmx4dVpYaHdiM0owSUd4bGRDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rNklITjBjbWx1Wnp0Y2JseHVaWGh3YjNKMElHNWhiV1Z6Y0dGalpTQmhjM04xY21VZ2UxeHVYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZSbGMzUWdlMXh1SUNCMFpYTjBPaUFvS1NBOVBpQlFjbTl0YVhObFBHRnVlVDQ3WEc0Z0lHNWhiV1U2SUhOMGNtbHVaenRjYmlBZ1kyRjBaV2R2Y25rNklITjBjbWx1Wnp0Y2JpQWdiM0IwYVc5dWN6ODZJRlJsYzNSUGNIUnBiMjV6TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0dOaGRHVm5iM0o1T2lCemRISnBibWNzSUc1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wSUh0Y2JpQWdJQ0IwYUdsekxtTmhkR1ZuYjNKNUlEMGdZMkYwWldkdmNuazdYRzRnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnSUNCdmNIUnBiMjV6TG5ScGJXVnZkWFFnUHo4OUlETXdNREF3TzF4dUlDQWdJRzl3ZEdsdmJuTXVkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWRDQS9QejBnTWpBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJR2R5YjJzdWMyaGxiR3d1YkdGemRFVnljbTl5SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQ0FnY21WemRXeDBJRDBnWVhkaGFYUWdkR1Z6ZENncE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxPaUJoYm5rcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WldwbFkzUW9aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLQ0VvWVhkaGFYUWdZWE56WlhKMFRtOUZjbkp2Y2lodmNIUnBiMjV6SVM1MWJtaGhibVJzWldSRmVHTmxjSFJwYjI1VWFXMWxiM1YwSVNrcEtWeHVJQ0FnSUNBZ0lDQWdJSEpsYW1WamRDaHVaWGNnUlhKeWIzSW9ZRlZ1YUdGdVpHeGxaQ0JsZUdObGNIUnBiMjRnWkhWeWFXNW5JSFJsYzNRNklDUjdaM0p2YXk1emFHVnNiQzVzWVhOMFJYSnliM0o5WUNrcE8xeHVJQ0FnSUNBZ0lDQnlaWE52YkhabEtISmxjM1ZzZENrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOU8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvcUlFRjNZV2wwY3lCbWIzSWdZU0IzYUdsc1pTQmphR1ZqYTJsdVp5QjBhR1VnWlhKeWIzSWdjM1JoZEhWeklHOW1JSFJvWlNCd2JHRjBabTl5YlNBcUwxeHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUdGemMyVnlkRTV2UlhKeWIzSW9iWE02SUc1MWJXSmxjaWs2SUZCeWIyMXBjMlU4WW05dmJHVmhiajRnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzF6SUM4Z05UQXdPeUFySzJrcElIdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZzFNREFwTzF4dUlDQWdJR2xtSUNobmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpNXNaVzVuZEdnZ0lUMDlJREFwWEc0Z0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhSeWRXVTdYRzU5WEc1Y2JpOHFLaUJVWlhOMGN5QjBkMjhnYjJKcVpXTjBjeUJtYjNJZ1pYRjFZV3hwZEhrc0lIUm9jbTkzY3lCaGJpQmxlR05sY0hScGIyNGdhV1lnZEdobGVTQmhjbVVnYm05MElHVnhkV0ZzTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZENoaFkzUjFZV3c2SUdGdWVTd2daWGh3WldOMFpXUTZJR0Z1ZVNrNklIWnZhV1FnZTF4dUlDQnBaaUFvWVdOMGRXRnNJQ0U5UFNCbGVIQmxZM1JsWkNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJRndpSkh0bGVIQmxZM1JsWkgxY0lpd2daMjkwSUZ3aUpIdGhZM1IxWVd4OVhDSmdLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVac2IyRjBLR0ZqZEhWaGJEb2diblZ0WW1WeUxDQmxlSEJsWTNSbFpEb2diblZ0WW1WeUxDQjBiMnhsY21GdVkyVWdQU0F3TGpBd01TazZJSFp2YVdRZ2UxeHVJQ0JqYjI1emRDQmhjbVZGY1hWaGJDQTlJRTFoZEdndVlXSnpLR0ZqZEhWaGJDQXRJR1Y0Y0dWamRHVmtLU0E4SUhSdmJHVnlZVzVqWlR0Y2JpQWdhV1lnS0NGaGNtVkZjWFZoYkNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1I5TENCbmIzUWdKSHRoWTNSMVlXeDlJQ2gwYjJ4bGNtRnVZMlVnUFNBa2UzUnZiR1Z5WVc1alpYMHBZQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1JXWVd4MVpYMGdabTl5SUd0bGVTQWtlMlY0Y0dWamRHVmtTMlY1ZlN3Z1oyOTBJQ1I3WVdOMGRXRnNWbUZzZFdWOVlDazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRG9nWVc1NVcxMHNJR1Y0Y0dWamRHVmtPaUJoYm5sYlhTa2dlMXh1SUNCamIyNXpkQ0JoWTNSMVlXeE1aVzVuZEdnZ1BTQmhZM1IxWVd3dWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCbGVIQmxZM1JsWkV4bGJtZDBhQ0E5SUdWNGNHVmpkR1ZrTG14bGJtZDBhRHRjYmx4dUlDQnBaaUFvWVdOMGRXRnNUR1Z1WjNSb0lDRTlJR1Y0Y0dWamRHVmtUR1Z1WjNSb0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCQmNuSmhlWE1nWVhKbElHOW1JR1JwWm1abGNtVnVkQ0JzWlc1bmRHZzZJR0ZqZEhWaGJDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGhZM1IxWVd4TVpXNW5kR2g5SUdBZ0sxeHVJQ0FnSUNBZ1lHRnVaQ0JsZUhCbFkzUmxaQ0JoY25KaGVTQnNaVzVuZEdnZ2FYTWdKSHRsZUhCbFkzUmxaRXhsYm1kMGFIMWdLVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1lXTjBkV0ZzVEdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCcFppQW9ZV04wZFdGc1cybGRJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JiYVYwZ2FXNXpkR0Z1WTJWdlppQkJjbkpoZVNsY2JpQWdJQ0FnSUdWNGNHVmpkRUZ5Y21GNUtHRmpkSFZoYkZ0cFhTd2daWGh3WldOMFpXUmJhVjBwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGdHBYU0JwYm5OMFlXNWpaVzltSUU5aWFtVmpkQ0FtSmlCbGVIQmxZM1JsWkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDbGNiaUFnSUNBZ0lHVjRjR1ZqZEU5aWFtVmpkQ2hoWTNSMVlXeGJhVjBzSUdWNGNHVmpkR1ZrVzJsZEtUdGNiaUFnSUNCbGJITmxJR2xtSUNoaFkzUjFZV3hiYVYwZ0lUMGdaWGh3WldOMFpXUmJhVjBwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1JiYVYxOUlHRjBJSEJ2YzJsMGFXOXVJQ1I3YVgwc0lHZHZkQ0FrZTJGamRIVmhiRnRwWFgxZ0tUdGNiaUFnZlZ4dWZWeHVYRzR2S2lvZ1JHVm1hVzVsY3lCaElIUmxjM1FnYzNWcGRHVXVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGMFpXZHZjbmtvWTJGMFpXZHZjbms2SUhOMGNtbHVaeXdnZEdWemRITTZJQ2dwSUQwK0lIWnZhV1FwT2lCMmIybGtJSHRjYmlBZ1kzVnljbVZ1ZEVOaGRHVm5iM0o1SUQwZ1kyRjBaV2R2Y25rN1hHNGdJSFJsYzNSektDazdYRzU5WEc1Y2JpOHFLaUJFWldacGJtVnpJR0VnWm5WdVkzUnBiMjRnZEc4Z1ltVWdaWGhsWTNWMFpXUWdZbVZtYjNKbElIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaVpXWnZjbVVvWW1WbWIzSmxPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErS1RvZ2RtOXBaQ0I3WEc0Z0lHbG1JQ2gwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwZ2UzMDdYRzRnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVZbVZtYjNKbElEMGdZbVZtYjNKbE8xeHVmVnh1WEc0dktpb2dSR1ZtYVc1bGN5QmhJR1oxYm1OMGFXOXVJSFJ2SUdKbElHVjRaV04xZEdWa0lHRm1kR1Z5SUhSb1pTQjBaWE4wY3lCcGJpQjBhR2x6SUdOaGRHVm5iM0o1SUdGeVpTQmxlR1ZqZFhSbFpDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoWm5SbGNpaGhablJsY2pvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1GbWRHVnlJRDBnWVdaMFpYSTdYRzU5WEc1Y2JseHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUhKMWJsUmxjM1J6S0c5d2RHbHZibk0vT2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQjBaWE4wUHpvZ2MzUnlhVzVuSUgwcElIdGNiaUFnWTI5dWMzUWdjbVZ6ZFd4MGN6b2dleUJqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnYm1GdFpUODZJSE4wY21sdVp5d2djM1ZqWTJWemN6b2dZbTl2YkdWaGJpd2djbVZ6ZFd4ME9pQnpkSEpwYm1jZ2ZWdGRJRDBnVzEwN1hHNWNiaUFnWm05eUlDaGpiMjV6ZENCYmEyVjVMQ0IyWVd4MVpWMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9kR1Z6ZEhNcEtTQjdYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTS9MbU5oZEdWbmIzSjVJQ0U5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZyWlhrdWRHOU1iM2RsY2tOaGMyVW9LUzV6ZEdGeWRITlhhWFJvS0c5d2RHbHZibk0vTG1OaGRHVm5iM0o1TG5SdlRHOTNaWEpEWVhObEtDa3BLVnh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJR2xtSUNoMllXeDFaUzVpWldadmNtVXBYRzRnSUNBZ0lDQWdJR0YzWVdsMElIWmhiSFZsTG1KbFptOXlaU2dwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGc2SUdGdWVTa2dlMXh1SUNBZ0lDQWdkbUZzZFdVdVltVm1iM0psVTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQjBJRDBnZG1Gc2RXVXVkR1Z6ZEhNZ1B6OGdXMTA3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMExteGxibWQwYURzZ2FTc3JLVnh1SUNBZ0lDQWdjbVZ6TG5CMWMyZ29ZWGRoYVhRZ1pYaGxZMVJsYzNRb2RGdHBYU3dnYjNCMGFXOXVjejh1ZEdWemRDa3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUNoaGQyRnBkQ0JRY205dGFYTmxMbUZzYkNoeVpYTXBLUzVtYVd4MFpYSW9LR1FwSUQwK0lHUXVjbVZ6ZFd4MElDRTlJQ2R6YTJsd2NHVmtKeWs3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aFpuUmxjaWxjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVlXWjBaWElvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2g0T2lCaGJua3BJSHRjYmlBZ0lDQWdJSFpoYkhWbExtRm1kR1Z5VTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RtRnNkV1V1WVdaMFpYSlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aFpuUmxjbE4wWVhSMWN5d2djM1ZqWTJWemN6b2dabUZzYzJWOUtUdGNiaUFnSUNCcFppQW9kbUZzZFdVdVltVm1iM0psVTNSaGRIVnpLVnh1SUNBZ0lDQWdaR0YwWVM1d2RYTm9LSHRqWVhSbFoyOXllVG9nYTJWNUxDQnVZVzFsT2lBbmFXNXBkQ2NzSUhKbGMzVnNkRG9nZG1Gc2RXVXVZbVZtYjNKbFUzUmhkSFZ6TENCemRXTmpaWE56T2lCbVlXeHpaWDBwTzF4dUlDQWdJSEpsYzNWc2RITXVjSFZ6YUNndUxpNWtZWFJoS1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCeVpYTjFiSFJ6TzF4dWZWeHVYRzVoYzNsdVl5Qm1kVzVqZEdsdmJpQmxlR1ZqVkdWemRDaDBPaUJVWlhOMExDQndjbVZrYVdOaGRHVTZJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQnNaWFFnY2pvZ2V5QmpZWFJsWjI5eWVUODZJSE4wY21sdVp5d2dibUZ0WlQ4NklITjBjbWx1Wnl3Z2MzVmpZMlZ6Y3pvZ1ltOXZiR1ZoYml3Z2NtVnpkV3gwT2lCemRISnBibWNnZlR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0JwWmlBb2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLU2xjYmlBZ0lDQWdJSElnUFNCN2MzVmpZMlZ6Y3pvZ2RISjFaU3dnY21WemRXeDBPaUFuYzJ0cGNIQmxaQ2Q5TzF4dUlDQWdJR1ZzYzJWY2JpQWdJQ0FnSUhJZ1BTQjdjM1ZqWTJWemN6b2dkSEoxWlN3Z2NtVnpkV3gwT2lCaGQyRnBkQ0IwTG5SbGMzUW9LU0EvUHlBblQwc25mVHRjYmlBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQm1ZV3h6WlN3Z2NtVnpkV3gwT2lCNExuUnZVM1J5YVc1bktDbDlPMXh1SUNCOVhHNGdJSEl1WTJGMFpXZHZjbmtnUFNCMExtTmhkR1ZuYjNKNU8xeHVJQ0J5TG01aGJXVWdQU0IwTG01aGJXVTdYRzRnSUhKbGRIVnliaUJ5TzF4dWZWeHVYRzR2S2lvZ1YyRnBkSE1nVzIxelhTQnRhV3hzYVhObFkyOXVaSE1nS2k5Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJrWld4aGVTaHRjem9nYm5WdFltVnlLU0I3WEc0Z0lHRjNZV2wwSUc1bGR5QlFjbTl0YVhObEtDaHlLU0E5UGlCelpYUlVhVzFsYjNWMEtISXNJRzF6S1NrN1hHNTlYRzRpWFgwPSIsIi8qKlxuICogRGVub3RlcyBhIHZlY3RvciBvZiBmbG9hdGluZyBwb2l0IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yXG4gKiBAZXh0ZW5kcyB7RmxvYXQzMkFycmF5fVxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9yIGV4dGVuZHMgRmxvYXQzMkFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBhIHR3by1kaW1lbnNpb25hbCBtYXRyaXguXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE1hdHJpeFxuICogQGV4dGVuZHMge0FycmF5PFZlY3Rvcj59XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRyaXggZXh0ZW5kcyBBcnJheSB7XG59XG4vKipcbiAqIERlbm90ZXMgY2FydGVzaWFuIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBDb29yZGluYXRlc1xuICogQGV4dGVuZHMge01hdHJpeH1cbiAqL1xuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVzIGV4dGVuZHMgTWF0cml4IHtcbn1cbi8qKlxuICogRGVub3RlcyBhbiBhcnJheSBvZiBhcmJpdHJhcnktdHlwZWQgdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yc1xuICogQGV4dGVuZHMge0FycmF5PGFueT59XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3JzIGV4dGVuZHMgQXJyYXkge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pTMWtaV05zWVhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVFVGQlR5eFRRVUZSTEZsQlFWazdRMEZCUnp0QlFVVXpRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRXRCUVdFN1EwRkJSenRCUVVVMVF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1YwRkJXU3hUUVVGUkxFMUJRVTA3UTBGQlJ6dEJRVVV4UXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVDBGQlVTeFRRVUZSTEV0QlFWVTdRMEZCUnlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIWmxZM1J2Y2lCdlppQm1iRzloZEdsdVp5QndiMmwwSUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQVkyeGhjM01nVm1WamRHOXlYRzRnS2lCQVpYaDBaVzVrY3lCN1JteHZZWFF6TWtGeWNtRjVmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVm1WamRHOXlJR1Y0ZEdWdVpITWdSbXh2WVhRek1rRnljbUY1SUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnRZWFJ5YVhndVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFMWhkSEpwZUZ4dUlDb2dRR1Y0ZEdWdVpITWdlMEZ5Y21GNVBGWmxZM1J2Y2o1OVhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5Qk5ZWFJ5YVhnZ1pYaDBaVzVrY3lCQmNuSmhlVHhXWldOMGIzSStJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCallYSjBaWE5wWVc0Z1kyOXZjbVJwYm1GMFpYTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRU52YjNKa2FXNWhkR1Z6WEc0Z0tpQkFaWGgwWlc1a2N5QjdUV0YwY21sNGZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdRMjl2Y21ScGJtRjBaWE1nWlhoMFpXNWtjeUJOWVhSeWFYZ2dlMzFjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdGdUlHRnljbUY1SUc5bUlHRnlZbWwwY21GeWVTMTBlWEJsWkNCMlpXTjBiM0p6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQmpiR0Z6Y3lCV1pXTjBiM0p6WEc0Z0tpQkFaWGgwWlc1a2N5QjdRWEp5WVhrOFlXNTVQbjFjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZabFkzUnZjbk1nWlhoMFpXNWtjeUJCY25KaGVUeGhibmsrSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJR1JwWTNScGIyNWhjbmtnWTI5dWRHRnBibWx1WnlCbWRXNWpkR2x2YmlCdmNIUnBiMjV6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQjBlWEJsSUU5d2RHbHZibk5jYmlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVDNCMGFXOXVjeUE5SUh0YmJtRnRaVG9nYzNSeWFXNW5YVG9nWVc1NWZUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR04xYzNSdmJTQmthWE4wWVc1alpTQnRaWFJ5YVdNZ1ltVjBkMlZsYmlCMGFHVWdkSGR2SUdkcGRtVnVJSFpsWTNSdmNuTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhSNWNHVWdSR2x6ZEdGdVkyVk5aWFJ5YVdOY2JpQXFJRUJ3WVhKaGJTQjdZVzU1ZlNCMk1TQlVhR1VnWm1seWMzUWdkbVZqZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRoYm5sOUlIWXlJRlJvWlNCelpXTnZibVFnZG1WamRHOXlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCRWFYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pYTmxJSFIzYnlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdkSGx3WlNCRWFYTjBZVzVqWlUxbGRISnBZeUE5SUNoMk1Ub2dZVzU1TENCMk1qb2dZVzU1S1NBOVBpQW9iblZ0WW1WeUtUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0VnYzJsdGNHeGxJSE4wY21sdVp5QjBieUJ6ZEhKcGJtY2daR2xqZEdsdmJtRnllUzVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWRIbHdaU0JUZEhKcGJtZEVhV04wYVc5dVlYSjVYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRk4wY21sdVowUnBZM1JwYjI1aGNua2dQU0I3VzJ0bGVUb2djM1J5YVc1blhUb2djM1J5YVc1bmZUdGNiaUpkZlE9PSIsImltcG9ydCB7IFZlY3RvciB9IGZyb20gJy4vdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHsgcmFuZG9tRmxvYXQsIHJhbmRvbUludCB9IGZyb20gJy4vcmFuZG9tJztcbi8qKlxuICogQXNzZXJ0cyBhIGNvbmRpdGlvbiBieSB0aHJvd2luZyBhbiBFcnJvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25kaXRpb249ZmFsc2VdIENvbmRpdGlvbiB0byBhc3NlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9J0Fzc2VydGlvbiBlcnJvci4nXSBNZXNzYWdlIHRvIG91dHB1dC5cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiA9IGZhbHNlLCBtZXNzYWdlID0gJ0Fzc2VydGlvbiBlcnJvci4nKSB7XG4gICAgaWYgKCFjb25kaXRpb24pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBuZXcgdHdvLWRpbWVuc2lvbmFsIGFycmF5IGFuZCBmaWxscyBpdCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIHJvd3MpLlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2YgY29sdW1ucykuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGw9MF0gQSB2YWx1ZSB0byBmaWxsIHRoZSBjb29yZGluYXRlcyB3aXRoLlxuICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IEEgdHdvLWRpbWVuc2lvbmFsIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5mdW5jdGlvbiBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgZmlsbCA9IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cbi8qKlxuICogVHJhbnNwb3NlIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4IFRoZSBtYXRyaXggdG8gYmUgdHJhbnNwb3NlZC5cbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG1hdHJpeFswXS5sZW5ndGgpLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuLyoqXG4gKiBBZGRzIHR3byB2ZWN0b3JzIHdpdGggdGhlIHNlY29uZCBvbmUgdG8gYmUgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gcmF0aW8uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge251bWJlcn0gW211bHRpcGxpZXI9MV0gQSBtdWx0aXBsaWVyIHRvIGJlIHVzZWQgYmVmb3JlIHRoZSBzZWNvbmQgdmVjdG9yIGlzIGFkZGVkLlxuICogQHJldHVybiB7VmVjdG9yfSBOZXcgdmVjdG9yIGNvbnRhaW5lZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiBwK211bHRpcGxpZXIqcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckFkZChwLCBxLCBtdWx0aXBsaWVyID0gMSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IHAubGVuZ3RoO1xuICAgIGFzc2VydChuSXRlbXMgPT0gcS5sZW5ndGgsICdWZWN0b3IgbGVuZ3RocyBkbyBub3QgbWF0Y2guJyk7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHBbaV0gKyBtdWx0aXBsaWVyICogcVtpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1bXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVjdG9yJ3MgaXRlbXMgc3VtLlxuICovXG5mdW5jdGlvbiBpdGVtc1N1bSh2KSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsICs9IHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHYpIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3Rvckxlbmd0aCh2KSB7XG4gICAgbGV0IHNxclN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKVxuICAgICAgICBzcXJTdW0gKz0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIE1hdGguc3FydChzcXJTdW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckRvdFByb2R1Y3QodjEsIHYyKSB7XG4gICAgaWYgKHYxLmxlbmd0aCAhPSB2Mi5sZW5ndGgpXG4gICAgICAgIHRocm93IEVycm9yKCdUaGUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIHZlY3RvcnMgbXVzdCBtYXRjaCcpO1xuICAgIGxldCBwcm9kID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYxLmxlbmd0aDsgaSsrKVxuICAgICAgICBwcm9kICs9IHYxW2ldICogdjJbaV07XG4gICAgcmV0dXJuIHByb2Q7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xLl0gTWF4IHZhbHVlIGdpdmVuIGJ5IHJhbmRvbSBnZW5lcmF0b3IuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IEEgbmV3IG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxSYW5kb21NYXRyaXgoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgc2NhbGUgPSAxLikge1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbWVuc2lvbjE7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbWVuc2lvbjI7ICsrailcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IHJhbmRvbUZsb2F0KHNjYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yLlxuICogQHBhcmFtIHtWZWN0b3J9IHEgVGhlIHNlY29uZCB2ZWN0b3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiB2ZWN0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UocCwgcSkge1xuICAgIGNvbnN0IGRpZmYgPSB2ZWN0b3JBZGQocCwgcSwgLTEpO1xuICAgIGNvbnN0IHNxZGlmZiA9IHZlY3RvclNxdWFyZShkaWZmKTtcbiAgICBjb25zdCBzcWRpZmZTdW1tID0gaXRlbXNTdW0oc3FkaWZmKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHNxZGlmZlN1bW0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgZGlzdGFuY2UgbWF0cml4IHVzaW5nIGEgY3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yc30gZGF0YSBJbnB1dCB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMuXG4gKiBAcGFyYW0ge0Rpc3RhbmNlTWV0cmljfSBkaXN0YW5jZSBDdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtNYXRyaXh9IENhbGN1bGF0ZWQgY3VzdG9tIGRpc3RhbmNlIG1hdHJpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNEaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBuSXRlbXM7ICsraikge1xuICAgICAgICAgICAgY29uc3QgZCA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwpID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqIEdlbmVyYXRlcyBhcnJheSBmcm9tIGEgcmFuZ2UgW2JlZ2luOyBlbmRdIG9yIFtiZWdpbjsgZW5kKSBpZiBlbmRFeGNsdXNpdmUuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlblJhbmdlKGJlZ2luLCBlbmQsIGVuZEV4Y2x1c2l2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZW5kIC0gYmVnaW4gKyAoZW5kRXhjbHVzaXZlID8gMCA6IDEpO1xuICAgIGNvbnN0IHNlcmllcyA9IG5ldyBJbnQzMkFycmF5KG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSlcbiAgICAgICAgc2VyaWVzW2ldID0gYmVnaW4gKyBpO1xuICAgIHJldHVybiBzZXJpZXM7XG59XG4vKipcbiogUmV0dXJucyBvcmRlciBvZiB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgc29ydGVkLlxuKlxuKiBAZXhwb3J0XG4qIEBwYXJhbSB7YW55W119IHZhbHVlcyBJbnB1dCBhcnJheS5cbiogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gV2hldGhlciB0byByZXR1cm4gcmV2ZXJzZWQgb3JkZXIuXG4qIEByZXR1cm4ge251bWJlcltdfSBUaGUgb3JkZXIgY29tcHV0ZWQuXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ1NvcnQodmFsdWVzLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICBjb25zdCBzb3J0Zm4gPSByZXZlcnNlID8gKGEsIGIpID0+IChiWzBdIC0gYVswXSkgOiAoYSwgYikgPT4gKGFbMF0gLSBiWzBdKTtcbiAgICBjb25zdCBkZWNvciA9ICh2LCBpKSA9PiBbdiwgaV07IC8vIHNldCBpbmRleCB0byB2YWx1ZVxuICAgIGNvbnN0IHVuZGVjb3IgPSAoYSkgPT4gYVsxXTsgLy8gbGVhdmUgb25seSBpbmRleFxuICAgIGNvbnN0IF9hcmdzb3J0ID0gKGFycikgPT4gYXJyLm1hcChkZWNvcikuc29ydChzb3J0Zm4pLm1hcCh1bmRlY29yKTtcbiAgICByZXR1cm4gX2FyZ3NvcnQodmFsdWVzKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHMgYWNjb3JkaW5nIHRvIHRoZSBkaXN0IGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvdGFsIG51bWJlciBvZiBvYmplY3RzXG4gKiBAcGFyYW0ge251bWJlcn0gbiBudW1iZXIgb2YgZGl2ZXJzZSBlbGVtZW50cyB0byBmaW5kXG4gKiBAcGFyYW0geyhpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXJ9IGRpc3QgYSBmdW5jdGlvbiB3aGljaCBjYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gb2JqZWN0cyB1c2luZyB0aGVpciBpbmRleGVzXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IFRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2ZXJzZVN1YnNldChsZW5ndGgsIG4sIGRpc3QpIHtcbiAgICBmdW5jdGlvbiBtYXhCeSh2YWx1ZXMsIG9yZGVyQnkpIHtcbiAgICAgICAgbGV0IG1heFZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T3JkZXJCeSA9IG9yZGVyQnkoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobWF4T3JkZXJCeSA9PSBudWxsIHx8IGVsZW1lbnRPcmRlckJ5ID4gbWF4T3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSW50KGxlbmd0aCAtIDEpXTtcbiAgICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkpXG4gICAgICAgICAgICBjb21wbGVtZW50LmFkZChpKTtcbiAgICB9XG4gICAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IG1heEJ5KGNvbXBsZW1lbnQudmFsdWVzKCksIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzdChpLCB2YWwpO1xuICAgICAgICB9KSkpO1xuICAgICAgICBpZiAoaWR4KSB7XG4gICAgICAgICAgICBzdWJzZXQucHVzaChpZHgpO1xuICAgICAgICAgICAgY29tcGxlbWVudC5kZWxldGUoaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3Vic2V0O1xufVxuLyoqXG4gKiBSZXR1cm5zIG5vcm1hbGl6ZWQgdmVjdG9yXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gZGF0YSBudW1lcmljYWwgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShkYXRhKSB7XG4gICAgbGV0IG1lYW4gPSAwO1xuICAgIGxldCBzdGQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgbWVhbiArPSBkYXRhW2ldO1xuICAgIG1lYW4gLz0gZGF0YS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKVxuICAgICAgICBzdGQgKz0gKGRhdGFbaV0gLSBtZWFuKSAqIChkYXRhW2ldIC0gbWVhbik7XG4gICAgc3RkID0gTWF0aC5zcXJ0KHN0ZCAvIGRhdGEubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgIGRhdGFbaV0gPSAoZGF0YVtpXSAtIG1lYW4pIC8gc3RkO1xuICAgIHJldHVybiBkYXRhO1xufVxuLyoqXG4gKiBGaW5kcyBzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsaXN0cy5cbiAqIEBwYXJhbSB7YW55W119IGEgVGhlIGZpcnN0IGxpc3QuXG4gKiBAcGFyYW0ge2FueVtdfSBiIFRoZSBzZWNvbmQgbGlzdC5cbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlmZmVyZW5jZShhLCBiKSB7XG4gICAgY29uc3QgYlNldCA9IG5ldyBTZXQoYik7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhLmZpbHRlcigoeCkgPT4gIWJTZXQuaGFzKHgpKSkudmFsdWVzKCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WamRHOXlMVzl3WlhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjJaV04wYjNJdGIzQmxjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVZNc1RVRkJUU3hGUVVGMVF5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRE8wRkJRM3BHTEU5QlFVOHNSVUZCUXl4WFFVRlhMRVZCUVVVc1UwRkJVeXhGUVVGRExFMUJRVTBzVlVGQlZTeERRVUZETzBGQlJXaEVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRmxCUVhGQ0xFdEJRVXNzUlVGQlJTeFZRVUZyUWl4clFrRkJhMEk3U1VGRGNrWXNTVUZCU1N4RFFVRkRMRk5CUVZNN1VVRkRXaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xFTkJRVU03UVVGRlJEczdPenM3T3pzN1IwRlJSenRCUVVOSUxGTkJRVk1zWlVGQlpTeERRVUZETEZWQlFXdENMRVZCUVVVc1ZVRkJhMElzUlVGQlJTeFBRVUZsTEVOQlFVTTdTVUZETDBVc1QwRkJUeXhKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU42Uml4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4bFFVRmxMRU5CUVVNc1RVRkJZenRKUVVNMVF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1pETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzUkdMRU5CUVVNN1FVRkZSRHM3T3pzN096czdSMEZSUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hUUVVGVExFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4aFFVRnhRaXhEUVVGRE8wbEJRM0JGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRmVFSXNUVUZCVFN4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTERoQ1FVRTRRaXhEUVVGRExFTkJRVU03U1VGRk0wUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGYWtNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlF5OUNMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVjBReXhQUVVGUExFdEJRVXNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRk5CUVZNc1VVRkJVU3hEUVVGRExFTkJRVk03U1VGRGVrSXNTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSV1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZhRUlzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRN096czdPMGRCUzBjN1FVRkRTQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTzBsQlF6ZENMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZha01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlhwQ0xFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zUTBGQlV6dEpRVU53UXl4SlFVRkpMRTFCUVUwc1IwRkJWeXhEUVVGRExFTkJRVU03U1VGRGRrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRM1pETEUxQlFVMHNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNelFpeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEVWQlFWVXNSVUZCUlN4RlFVRlZPMGxCUTNKRUxFbEJRVWtzUlVGQlJTeERRVUZETEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNc1RVRkJUVHRSUVVONFFpeE5RVUZOTEV0QlFVc3NRMEZCUXl3NFEwRkJPRU1zUTBGQlF5eERRVUZETzBsQlF6bEVMRWxCUVVrc1NVRkJTU3hIUVVGWExFTkJRVU1zUTBGQlF6dEpRVU55UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGRGVFTXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzVDBGQlR5eEpRVUZKTEVOQlFVTTdRVUZEWkN4RFFVRkRPMEZCUlVRN096czdPenM3TzBkQlVVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNWVUZCYTBJc1JVRkJSU3hWUVVGclFpeEZRVUZGTEZGQlFXZENMRVZCUVVVN1NVRkRla1lzVFVGQlRTeE5RVUZOTEVkQlFVY3NaVUZCWlN4RFFVRkRMRlZCUVZVc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dEpRVVYyUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWVUZCVlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRMjVETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFZRVUZWTEVWQlFVVXNSVUZCUlN4RFFVRkRPMWxCUTJwRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdTMEZEY2tNN1NVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN3d1FrRkJNRUlzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXp0SlFVTTNSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEycERMRTFCUVUwc1RVRkJUU3hIUVVGSExGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTnNReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRjRU1zVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8wRkJReTlDTEVOQlFVTTdRVUZGUkRzN096czdPenRIUVU5SE8wRkJRMGdzVFVGQlRTeFZRVUZWTEd0Q1FVRnJRaXhEUVVGRExFbEJRV0VzUlVGQlJTeFJRVUYzUWp0SlFVTjRSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUXpOQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJXeEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGJrTXNUVUZCVFN4RFFVRkRMRWRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFJpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU5xUXp0TFFVTkdPMGxCUTBRc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVMR3RHUVVGclJqdEJRVU5zUml4TlFVRk5MRlZCUVZVc1VVRkJVU3hEUVVGRExFdEJRV0VzUlVGQlJTeEhRVUZYTEVWQlFVVXNXVUZCV1N4SFFVRkhMRXRCUVVzN1NVRkRka1VzVFVGQlRTeE5RVUZOTEVkQlFVY3NSMEZCUnl4SFFVRkhMRXRCUVVzc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU53UkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVVjBReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVjRRaXhQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVFN096czdPenM3UlVGUFJUdEJRVU5JTEUxQlFVMHNWVUZCVlN4UFFVRlBMRU5CUVVNc1RVRkJZU3hGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTzBsQlEzQkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1EwRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOMlJ5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hEUVVGVExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zY1VKQlFYRkNPMGxCUTJ4RkxFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4dFFrRkJiVUk3U1VGRGRrUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1EwRkJReXhIUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU14UlN4UFFVRlBMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU14UWl4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4blFrRkJaMElzUTBGQlF5eE5RVUZqTEVWQlFVVXNRMEZCVXl4RlFVRkZMRWxCUVhkRE8wbEJRMnhITEZOQlFWTXNTMEZCU3l4RFFVRkRMRTFCUVdkRExFVkJRVVVzVDBGQk9FSTdVVUZETjBVc1NVRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzQkNMRWxCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVVYwUWl4TFFVRkxMRTFCUVUwc1QwRkJUeXhKUVVGSkxFMUJRVTBzUlVGQlJUdFpRVU0xUWl4TlFVRk5MR05CUVdNc1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3hWUVVGVkxFbEJRVWtzU1VGQlNTeEpRVUZKTEdOQlFXTXNSMEZCUnl4VlFVRlZMRVZCUVVVN1owSkJRM0pFTEZGQlFWRXNSMEZCUnl4UFFVRlBMRU5CUVVNN1owSkJRMjVDTEZWQlFWVXNSMEZCUnl4alFVRmpMRU5CUVVNN1lVRkROMEk3VTBGRFJqdFJRVU5FTEU5QlFVOHNVVUZCVVN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUlRkQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKQ0xGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRja0k3U1VGRlJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8xRkJRM2hDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkRaaXhWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUU0UWl4RlFVTXZReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1ZVRkJVeXhIUVVGSExFVkJRVVVzUzBGQlN6dFpRVU40UkN4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlExQXNTVUZCU1N4SFFVRkhMRVZCUVVVN1dVRkRVQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRlRUk3UzBGRFJqdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU03UVVGRlJEczdPMGRCUjBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVTBGQlV5eERRVUZETEVsQlFWazdTVUZEY0VNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEySXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVm9zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFbEJRVWtzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZiRUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkZjRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVVUzUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVzVETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJRenRSUVVOc1F5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8wbEJSVzVETEU5QlFVOHNTVUZCU1N4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRU96czdPenRIUVV0SE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4RFFVRlJMRVZCUVVVc1EwRkJVVHRKUVVNNVF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UWl4UFFVRlBMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM0pGTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMDFoZEhKcGVDd2dWbVZqZEc5eUxDQkRiMjl5WkdsdVlYUmxjeXdnVm1WamRHOXljeXdnUkdsemRHRnVZMlZOWlhSeWFXTjlJR1p5YjIwZ0p5NHZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHR5WVc1a2IyMUdiRzloZEN3Z2NtRnVaRzl0U1c1MGZTQm1jbTl0SUNjdUwzSmhibVJ2YlNjN1hHNWNiaThxS2x4dUlDb2dRWE56WlhKMGN5QmhJR052Ym1ScGRHbHZiaUJpZVNCMGFISnZkMmx1WnlCaGJpQkZjbkp2Y2k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlGdGpiMjVrYVhScGIyNDlabUZzYzJWZElFTnZibVJwZEdsdmJpQjBieUJoYzNObGNuUXVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzIxbGMzTmhaMlU5SjBGemMyVnlkR2x2YmlCbGNuSnZjaTRuWFNCTlpYTnpZV2RsSUhSdklHOTFkSEIxZEM1Y2JpQXFJRUIwYUhKdmQzTWdlMFZ5Y205eWZWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWVhOelpYSjBLR052Ym1ScGRHbHZiam9nWW05dmJHVmhiaUE5SUdaaGJITmxMQ0J0WlhOellXZGxPaUJ6ZEhKcGJtY2dQU0FuUVhOelpYSjBhVzl1SUdWeWNtOXlMaWNwSUh0Y2JpQWdhV1lnS0NGamIyNWthWFJwYjI0cFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRzFsYzNOaFoyVXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ2JtVjNJSFIzYnkxa2FXMWxibk5wYjI1aGJDQmhjbkpoZVNCaGJtUWdabWxzYkhNZ2FYUWdkMmwwYUNCMGFHVWdkbUZzZFdVZ1oybDJaVzR1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR1JwYldWdWMybHZiakVnVkdobElHWnBjbk4wSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnWTI5dmNtUnBibUYwWlhNZ0tHNTFiV0psY2lCdlppQnliM2R6S1M1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmthVzFsYm5OcGIyNHlJRlJvWlNCelpXTnZibVFnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0JqYjI5eVpHbHVZWFJsY3lBb2JuVnRZbVZ5SUc5bUlHTnZiSFZ0Ym5NcExseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnRtYVd4c1BUQmRJRUVnZG1Gc2RXVWdkRzhnWm1sc2JDQjBhR1VnWTI5dmNtUnBibUYwWlhNZ2QybDBhQzVjYmlBcUlFQnlaWFIxY200Z2UwTnZiM0prYVc1aGRHVnpmU0JCSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0JtYVd4c1pXUWdkMmwwYUNCMGFHVWdkbUZzZFdVZ1oybDJaVzR1WEc0Z0tpQkFkRzlrYnlCTmFXZG9kQ0JpWlNCemJHOTNJSE5wYm1ObElIVnpaV1FnUVhKeVlYa3ViV0Z3TGlCUWNtOWlZV0pzZVNCdVpXVmtjeUJ3WlhKbWIzSnRZVzVqWlNCeVpYWnBjMmx2Ymk1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVc1cGRFTnZiM0prYVc1aGRHVnpLR1JwYldWdWMybHZiakU2SUc1MWJXSmxjaXdnWkdsdFpXNXphVzl1TWpvZ2JuVnRZbVZ5TENCbWFXeHNPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1EyOXZjbVJwYm1GMFpYTWdlMXh1SUNCeVpYUjFjbTRnYm1WM0lFRnljbUY1S0dScGJXVnVjMmx2YmpFcExtWnBiR3dvWm1sc2JDa3ViV0Z3S0NncElEMCtJQ2h1WlhjZ1ZtVmpkRzl5S0dScGJXVnVjMmx2YmpJcExtWnBiR3dvWm1sc2JDa3BLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlVjbUZ1YzNCdmMyVWdiV0YwY21sNExseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdUV0YwY21sNGZTQnRZWFJ5YVhnZ1ZHaGxJRzFoZEhKcGVDQjBieUJpWlNCMGNtRnVjM0J2YzJWa0xseHVJQ29nUUhKbGRIVnliaUI3VFdGMGNtbDRmU0JVY21GdWMzQnZjMlZrSUcxaGRISnBlQzVjYmlBcUlFQjBiMlJ2SUUxcFoyaDBJR0psSUhOc2IzY2djMmx1WTJVZ2RYTmxaQ0JCY25KaGVTNXRZWEF1SUZCeWIySmhZbXg1SUc1bFpXUnpJSEJsY21admNtMWhibU5sSUhKbGRtbHphVzl1TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkSEpoYm5Od2IzTmxUV0YwY21sNEtHMWhkSEpwZURvZ1RXRjBjbWw0S1RvZ1RXRjBjbWw0SUh0Y2JpQWdjbVYwZFhKdUlHNWxkeUJCY25KaGVTaHRZWFJ5YVhoYk1GMHViR1Z1WjNSb0tTNW1hV3hzS0RBcFhHNGdJQ0FnTG0xaGNDZ29YeXdnYVNrZ1BUNGdLRzVsZHlCV1pXTjBiM0lvYldGMGNtbDRMbXhsYm1kMGFDa3VabWxzYkNnd0tTNXRZWEFvS0Y4c0lHb3BJRDArSUNodFlYUnlhWGhiYWwxYmFWMHBLU2twTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZrWkhNZ2RIZHZJSFpsWTNSdmNuTWdkMmwwYUNCMGFHVWdjMlZqYjI1a0lHOXVaU0IwYnlCaVpTQnRkV3gwYVhCc2FXVmtJR0o1SUhSb1pTQm5hWFpsYmlCeVlYUnBieTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5SUhSdklHRmtaQzVjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCeElGUm9aU0J6WldOdmJtUWdkbVZqZEc5eUlIUnZJR0ZrWkM1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJiWFZzZEdsd2JHbGxjajB4WFNCQklHMTFiSFJwY0d4cFpYSWdkRzhnWW1VZ2RYTmxaQ0JpWldadmNtVWdkR2hsSUhObFkyOXVaQ0IyWldOMGIzSWdhWE1nWVdSa1pXUXVYRzRnS2lCQWNtVjBkWEp1SUh0V1pXTjBiM0o5SUU1bGR5QjJaV04wYjNJZ1kyOXVkR0ZwYm1Wa0lIUm9aU0J5WlhOMWJIUWdiMllnYjNCbGNtRjBhVzl1SUhBcmJYVnNkR2x3YkdsbGNpcHhMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2RtVmpkRzl5UVdSa0tIQTZJRlpsWTNSdmNpd2djVG9nVm1WamRHOXlMQ0J0ZFd4MGFYQnNhV1Z5T2lCdWRXMWlaWElnUFNBeEtUb2dWbVZqZEc5eUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdjQzVzWlc1bmRHZzdYRzVjYmlBZ1lYTnpaWEowS0c1SmRHVnRjeUE5UFNCeExteGxibWQwYUN3Z0oxWmxZM1J2Y2lCc1pXNW5kR2h6SUdSdklHNXZkQ0J0WVhSamFDNG5LVHRjYmx4dUlDQmpiMjV6ZENCMGIzUmhiQ0E5SUc1bGR5QldaV04wYjNJb2JrbDBaVzF6S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhBdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ2RHOTBZV3hiYVYwZ1BTQndXMmxkSUNzZ2JYVnNkR2x3YkdsbGNpQXFJSEZiYVYwN1hHNWNiaUFnY21WMGRYSnVJSFJ2ZEdGc08xeHVmVnh1WEc0dktpcGNiaUFxSUZOMWJYTWdkR2hsSUhabFkzUnZjaWR6SUdsMFpXMXpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQjJJRlJvWlNCMlpXTjBiM0lnZEc4Z1ltVWdjM1Z0YldWa0xseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JVYUdVZ2RtVmpkRzl5SjNNZ2FYUmxiWE1nYzNWdExseHVJQ292WEc1bWRXNWpkR2x2YmlCcGRHVnRjMU4xYlNoMk9pQldaV04wYjNJcE9pQnVkVzFpWlhJZ2UxeHVJQ0JzWlhRZ2RHOTBZV3dnUFNBd08xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQjBiM1JoYkNBclBTQjJXMmxkTzF4dVhHNGdJSEpsZEhWeWJpQjBiM1JoYkR0Y2JuMWNibHh1THlvcVhHNGdLaUJUZFhGaGNtVnpJSFJvWlNCMlpXTjBiM0luY3lCcGRHVnRjeTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuMGdkaUJVYUdVZ2RtVmpkRzl5SUhSdklITnhkV0Z5WlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMVpsWTNSdmNuMGdRU0J1WlhjZ2RtVmpkRzl5SUdOdmJuUmhhVzVwYm1jZ2RHaGxJRzl5YVdkcGJtRnNKM01nYVhSbGJYTWdjM0YxWVhKbFpDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2RtVmpkRzl5VTNGMVlYSmxLSFk2SUZabFkzUnZjaWs2SUZabFkzUnZjaUI3WEc0Z0lHTnZibk4wSUc1SmRHVnRjeUE5SUhZdWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCMGIzUmhiQ0E5SUc1bGR5QldaV04wYjNJb2JrbDBaVzF6S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhZdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ2RHOTBZV3hiYVYwZ1BTQjJXMmxkSUNvZ2RsdHBYVHRjYmx4dUlDQnlaWFIxY200Z2RHOTBZV3c3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjJaV04wYjNKTVpXNW5kR2dvZGpvZ1ZtVmpkRzl5S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdiR1YwSUhOeGNsTjFiVG9nYm5WdFltVnlJRDBnTUR0Y2JpQWdabTl5SUNoc1pYUWdhVG9nYm5WdFltVnlJRDBnTURzZ2FTQThJSFl1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnYzNGeVUzVnRJQ3M5SUhaYmFWMGdLaUIyVzJsZE8xeHVJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSE54Y2xOMWJTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMlpXTjBiM0pFYjNSUWNtOWtkV04wS0hZeE9pQldaV04wYjNJc0lIWXlPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCcFppQW9kakV1YkdWdVozUm9JQ0U5SUhZeUxteGxibWQwYUNsY2JpQWdJQ0IwYUhKdmR5QkZjbkp2Y2lnblZHaGxJR1JwYldWdWMybHZibUZzYVhSNUlHOW1JSFJvWlNCMlpXTjBiM0p6SUcxMWMzUWdiV0YwWTJnbktUdGNiaUFnYkdWMElIQnliMlE2SUc1MWJXSmxjaUE5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2s2SUc1MWJXSmxjaUE5SURBN0lHa2dQQ0IyTVM1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCd2NtOWtJQ3M5SUhZeFcybGRJQ29nZGpKYmFWMDdYRzRnSUhKbGRIVnliaUJ3Y205a08xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYUnlhWGdnWm1sc2JHVmtJSGRwZEdnZ2NtRnVaRzl0SUdac2IyRjBhVzVuSUhCdmFXNTBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNU0JVYUdVZ1ptbHljM1FnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0J0WVhSeWFYZ3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TWlCVWFHVWdjMlZqYjI1a0lHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRjBjbWw0TGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpZMkZzWlQweExsMGdUV0Y0SUhaaGJIVmxJR2RwZG1WdUlHSjVJSEpoYm1SdmJTQm5aVzVsY21GMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVFZ2JtVjNJRzFoZEhKcGVDQm1hV3hzWldRZ2QybDBhQ0J5WVc1a2IyMGdabXh2WVhScGJtY2djRzlwYm5RZ0lIWmhiSFZsY3k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1pwYkd4U1lXNWtiMjFOWVhSeWFYZ29aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUhOallXeGxPaUJ1ZFcxaVpYSWdQU0F4TGlrNklFMWhkSEpwZUNCN1hHNGdJR052Ym5OMElHMWhkSEpwZUNBOUlHbHVhWFJEYjI5eVpHbHVZWFJsY3loa2FXMWxibk5wYjI0eExDQmthVzFsYm5OcGIyNHlLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYldWdWMybHZiakU3SUNzcmFTa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2daR2x0Wlc1emFXOXVNanNnS3l0cUtWeHVJQ0FnSUNBZ2JXRjBjbWw0VzJsZFcycGRJRDBnY21GdVpHOXRSbXh2WVhRb2MyTmhiR1VwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhSeWFYZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRnNZM1ZzWVhSbGN5QkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBkMjhnZG1WamRHOXljeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUVWMVkyeHBaR1ZoYmlCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pTQm5hWFpsYmlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTNWc1lYUmxSWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQmpiMjV6ZENCa2FXWm1JRDBnZG1WamRHOXlRV1JrS0hBc0lIRXNJQzB4S1R0Y2JpQWdZMjl1YzNRZ2MzRmthV1ptSUQwZ2RtVmpkRzl5VTNGMVlYSmxLR1JwWm1ZcE8xeHVJQ0JqYjI1emRDQnpjV1JwWm1aVGRXMXRJRDBnYVhSbGJYTlRkVzBvYzNGa2FXWm1LVHRjYmlBZ2NtVjBkWEp1SUUxaGRHZ3VjM0Z5ZENoemNXUnBabVpUZFcxdEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdFZ1pHbHpkR0Z1WTJVZ2JXRjBjbWw0SUhWemFXNW5JR0VnWTNWemRHOXRJR1JwYzNSaGJtTmxJR1oxYm1OMGFXOXVMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXljMzBnWkdGMFlTQkpibkIxZENCMlpXTjBiM0p6SUhSdklHTmhiR04xYkdGMFpTQmthWE4wWVc1alpYTXVYRzRnS2lCQWNHRnlZVzBnZTBScGMzUmhibU5sVFdWMGNtbGpmU0JrYVhOMFlXNWpaU0JEZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVOaGJHTjFiR0YwWldRZ1kzVnpkRzl0SUdScGMzUmhibU5sSUcxaGRISnBlQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhiR05FYVhOMFlXNWpaVTFoZEhKcGVDaGtZWFJoT2lCV1pXTjBiM0p6TENCa2FYTjBZVzVqWlRvZ1JHbHpkR0Z1WTJWTlpYUnlhV01wT2lCTllYUnlhWGdnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCa1lYUmhMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdiV0YwY21sNElEMGdhVzVwZEVOdmIzSmthVzVoZEdWektHNUpkR1Z0Y3l3Z2JrbDBaVzF6TENBd0tUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNUpkR1Z0Y3pzZ0t5dHBLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SUdrZ0t5QXhPeUJxSUR3Z2JrbDBaVzF6T3lBcksyb3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHUTZJRzUxYldKbGNpQTlJQ2hrWVhSaFcybGRJRDA5SUc1MWJHd3BJSHg4SUNoa1lYUmhXMnBkSUQwOUlHNTFiR3dwSUQ4Z01DQTZJR1JwYzNSaGJtTmxLR1JoZEdGYmFWMHNJR1JoZEdGYmFsMHBPMXh1SUNBZ0lDQWdiV0YwY21sNFcybGRXMnBkSUQwZ2JXRjBjbWw0VzJwZFcybGRJRDBnWkR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzFoZEhKcGVEdGNibjFjYmx4dUx5b3FJRWRsYm1WeVlYUmxjeUJoY25KaGVTQm1jbTl0SUdFZ2NtRnVaMlVnVzJKbFoybHVPeUJsYm1SZElHOXlJRnRpWldkcGJqc2daVzVrS1NCcFppQmxibVJGZUdOc2RYTnBkbVV1SUNvcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxibEpoYm1kbEtHSmxaMmx1T2lCdWRXMWlaWElzSUdWdVpEb2diblZ0WW1WeUxDQmxibVJGZUdOc2RYTnBkbVVnUFNCbVlXeHpaU2s2SUVsdWRETXlRWEp5WVhrZ2UxeHVJQ0JqYjI1emRDQnVTWFJsYlhNZ1BTQmxibVFnTFNCaVpXZHBiaUFySUNobGJtUkZlR05zZFhOcGRtVWdQeUF3SURvZ01TazdYRzRnSUdOdmJuTjBJSE5sY21sbGN5QTlJRzVsZHlCSmJuUXpNa0Z5Y21GNUtHNUpkR1Z0Y3lrN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVNYUmxiWE03SUNzcmFTbGNiaUFnSUNCelpYSnBaWE5iYVYwZ1BTQmlaV2RwYmlBcklHazdYRzVjYmlBZ2NtVjBkWEp1SUhObGNtbGxjenRjYm4xY2JseHVJQzhxS2x4dUlDb2dVbVYwZFhKdWN5QnZjbVJsY2lCdlppQjJZV3gxWlhNZ1lYTWdhV1lnZEdobGVTQmhjbVVnYzI5eWRHVmtMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJSFpoYkhWbGN5QkpibkIxZENCaGNuSmhlUzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1czSmxkbVZ5YzJVOVptRnNjMlZkSUZkb1pYUm9aWElnZEc4Z2NtVjBkWEp1SUhKbGRtVnljMlZrSUc5eVpHVnlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5VzExOUlGUm9aU0J2Y21SbGNpQmpiMjF3ZFhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeVoxTnZjblFvZG1Gc2RXVnpPaUJoYm5sYlhTd2djbVYyWlhKelpTQTlJR1poYkhObEtUb2diblZ0WW1WeVcxMGdlMXh1SUNCamIyNXpkQ0J6YjNKMFptNGdQU0J5WlhabGNuTmxJRDhnS0dFNklHRnVlVnRkTENCaU9pQmhibmxiWFNrZ1BUNGdLR0piTUYwZ0xTQmhXekJkS1NBNklDaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBJRDArSUNoaFd6QmRJQzBnWWxzd1hTazdYRzRnSUdOdmJuTjBJR1JsWTI5eUlEMGdLSFk2SUdGdWVTd2dhVG9nYm5WdFltVnlLU0E5UGlCYmRpd2dhVjA3SUM4dklITmxkQ0JwYm1SbGVDQjBieUIyWVd4MVpWeHVJQ0JqYjI1emRDQjFibVJsWTI5eUlEMGdLR0U2SUdGdWVWdGRLU0E5UGlCaFd6RmRPeUF2THlCc1pXRjJaU0J2Ym14NUlHbHVaR1Y0WEc0Z0lHTnZibk4wSUY5aGNtZHpiM0owSUQwZ0tHRnljam9nWVc1NVcxMHBJRDArSUdGeWNpNXRZWEFvWkdWamIzSXBMbk52Y25Rb2MyOXlkR1p1S1M1dFlYQW9kVzVrWldOdmNpazdYRzRnSUhKbGRIVnliaUJmWVhKbmMyOXlkQ2gyWVd4MVpYTXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2RHaGxJR2x1WkdWNFpYTWdiMllnZEdobElHMXZjM1FnWkdsMlpYSnpaU0J2WW1wbFkzUnpJR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdaR2x6ZENCbWRXNWpkR2x2Ymx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHeGxibWQwYUNCMGIzUmhiQ0J1ZFcxaVpYSWdiMllnYjJKcVpXTjBjMXh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUc0Z2JuVnRZbVZ5SUc5bUlHUnBkbVZ5YzJVZ1pXeGxiV1Z1ZEhNZ2RHOGdabWx1WkZ4dUlDb2dRSEJoY21GdElIc29hVEU2SUc1MWJXSmxjaXdnYVRJNklHNTFiV0psY2lrZ1BUNGdiblZ0WW1WeWZTQmthWE4wSUdFZ1puVnVZM1JwYjI0Z2QyaHBZMmdnWTJGc1kzVnNZWFJsY3lCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhkdklHOWlhbVZqZEhNZ2RYTnBibWNnZEdobGFYSWdhVzVrWlhobGMxeHVJQ29nUUhKbGRIVnlibk1nZTI1MWJXSmxjbHRkZlNCVWFHVWdhVzVrWlhobGN5QnZaaUIwYUdVZ2JXOXpkQ0JrYVhabGNuTmxJRzlpYW1WamRITmNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFUnBkbVZ5YzJWVGRXSnpaWFFvYkdWdVozUm9PaUJ1ZFcxaVpYSXNJRzQ2SUc1MWJXSmxjaXdnWkdsemREb2dLR2t4T2lCdWRXMWlaWElzSUdreU9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpazZJRzUxYldKbGNsdGRJSHRjYmlBZ1puVnVZM1JwYjI0Z2JXRjRRbmtvZG1Gc2RXVnpPaUJKZEdWeVlXSnNaVWwwWlhKaGRHOXlQRzUxYldKbGNqNHNJRzl5WkdWeVFuazZJQ2hwT2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lrZ2UxeHVJQ0FnSUd4bGRDQnRZWGhXWVd4MVpTQTlJRzUxYkd3N1hHNGdJQ0FnYkdWMElHMWhlRTl5WkdWeVFua2dQU0J1ZFd4c08xeHVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmxiR1Z0Wlc1MElHOW1JSFpoYkhWbGN5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXeGxiV1Z1ZEU5eVpHVnlRbmtnUFNCdmNtUmxja0o1S0dWc1pXMWxiblFwTzF4dUlDQWdJQ0FnYVdZZ0tHMWhlRTl5WkdWeVFua2dQVDBnYm5Wc2JDQjhmQ0JsYkdWdFpXNTBUM0prWlhKQ2VTQStJRzFoZUU5eVpHVnlRbmtwSUh0Y2JpQWdJQ0FnSUNBZ2JXRjRWbUZzZFdVZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0FnSUNBZ0lDQnRZWGhQY21SbGNrSjVJRDBnWld4bGJXVnVkRTl5WkdWeVFuazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ0WVhoV1lXeDFaVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBJSE4xWW5ObGRDQTlJRnR5WVc1a2IyMUpiblFvYkdWdVozUm9JQzBnTVNsZE8xeHVJQ0JqYjI1emRDQmpiMjF3YkdWdFpXNTBJRDBnYm1WM0lGTmxkQ2dwTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNCcFppQW9JWE4xWW5ObGRDNXBibU5zZFdSbGN5aHBLU2xjYmlBZ0lDQWdJR052YlhCc1pXMWxiblF1WVdSa0tHa3BPMXh1SUNCOVhHNWNiaUFnZDJocGJHVWdLSE4xWW5ObGRDNXNaVzVuZEdnZ1BDQnVLU0I3WEc0Z0lDQWdZMjl1YzNRZ2FXUjRJRDBnYldGNFFua29YRzRnSUNBZ0lDQmpiMjF3YkdWdFpXNTBMblpoYkhWbGN5Z3BJR0Z6SUVsMFpYSmhZbXhsU1hSbGNtRjBiM0k4Ym5WdFltVnlQaXhjYmlBZ0lDQWdJQ2hwS1NBOVBpQk5ZWFJvTG0xcGJpNWhjSEJzZVNoTllYUm9MQ0J6ZFdKelpYUXViV0Z3S0daMWJtTjBhVzl1S0haaGJDd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHUnBjM1FvYVN3Z2RtRnNLVHRjYmlBZ0lDQWdJSDBwS1NrN1hHNGdJQ0FnYVdZZ0tHbGtlQ2tnZTF4dUlDQWdJQ0FnYzNWaWMyVjBMbkIxYzJnb2FXUjRLVHRjYmlBZ0lDQWdJR052YlhCc1pXMWxiblF1WkdWc1pYUmxLR2xrZUNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ6ZFdKelpYUTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCdWIzSnRZV3hwZW1Wa0lIWmxZM1J2Y2x4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlHUmhkR0VnYm5WdFpYSnBZMkZzSUdGeWNtRjVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzSnRZV3hwZW1Vb1pHRjBZVG9nVm1WamRHOXlLVG9nVm1WamRHOXlJSHRjYmlBZ2JHVjBJRzFsWVc0Z1BTQXdPMXh1SUNCc1pYUWdjM1JrSUQwZ01EdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUmhkR0V1YkdWdVozUm9PeUFySzJrcFhHNGdJQ0FnYldWaGJpQXJQU0JrWVhSaFcybGRPMXh1WEc0Z0lHMWxZVzRnTHowZ1pHRjBZUzVzWlc1bmRHZzdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmtZWFJoTG14bGJtZDBhRHNnS3l0cEtWeHVJQ0FnSUhOMFpDQXJQU0FvWkdGMFlWdHBYU0F0SUcxbFlXNHBJQ29nS0dSaGRHRmJhVjBnTFNCdFpXRnVLVHRjYmx4dUlDQnpkR1FnUFNCTllYUm9Mbk54Y25Rb2MzUmtJQzhnWkdGMFlTNXNaVzVuZEdncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHRjBZUzVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0JrWVhSaFcybGRJRDBnS0dSaGRHRmJhVjBnTFNCdFpXRnVLU0F2SUhOMFpEdGNibHh1SUNCeVpYUjFjbTRnWkdGMFlUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUJ6WlhRZ1pHbG1abVZ5Wlc1alpTQmlaWFIzWldWdUlIUjNieUJzYVhOMGN5NWNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJR0VnVkdobElHWnBjbk4wSUd4cGMzUXVYRzRnS2lCQWNHRnlZVzBnZTJGdWVWdGRmU0JpSUZSb1pTQnpaV052Ym1RZ2JHbHpkQzVjYmlBcUlFQnlaWFIxY200Z2UyRnVlVnRkZlZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUkdsbVptVnlaVzVqWlNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcE9pQmhibmxiWFNCN1hHNGdJR052Ym5OMElHSlRaWFFnUFNCdVpYY2dVMlYwS0dJcE8xeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLR0V1Wm1sc2RHVnlLQ2g0S1NBOVBpQWhZbE5sZEM1b1lYTW9lQ2twS1M1MllXeDFaWE1vS1NrN1hHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgcGVxID0gbmV3IFVpbnQzMkFycmF5KDB4MTAwMDApO1xuY29uc3QgbXllcnNfMzIgPSAoYSwgYikgPT4ge1xuICBjb25zdCBuID0gYS5sZW5ndGg7XG4gIGNvbnN0IG0gPSBiLmxlbmd0aDtcbiAgY29uc3QgbHN0ID0gMSA8PCAobiAtIDEpO1xuICBsZXQgcHYgPSAtMTtcbiAgbGV0IG12ID0gMDtcbiAgbGV0IHNjID0gbjtcbiAgbGV0IGkgPSBuO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcGVxW2EuY2hhckNvZGVBdChpKV0gfD0gMSA8PCBpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICBsZXQgZXEgPSBwZXFbYi5jaGFyQ29kZUF0KGkpXTtcbiAgICBjb25zdCB4diA9IGVxIHwgbXY7XG4gICAgZXEgfD0gKChlcSAmIHB2KSArIHB2KSBeIHB2O1xuICAgIG12IHw9IH4oZXEgfCBwdik7XG4gICAgcHYgJj0gZXE7XG4gICAgaWYgKG12ICYgbHN0KSB7XG4gICAgICBzYysrO1xuICAgIH1cbiAgICBpZiAocHYgJiBsc3QpIHtcbiAgICAgIHNjLS07XG4gICAgfVxuICAgIG12ID0gKG12IDw8IDEpIHwgMTtcbiAgICBwdiA9IChwdiA8PCAxKSB8IH4oeHYgfCBtdik7XG4gICAgbXYgJj0geHY7XG4gIH1cbiAgaSA9IG47XG4gIHdoaWxlIChpLS0pIHtcbiAgICBwZXFbYS5jaGFyQ29kZUF0KGkpXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNjO1xufTtcblxuY29uc3QgbXllcnNfeCA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IG4gPSBhLmxlbmd0aDtcbiAgY29uc3QgbSA9IGIubGVuZ3RoO1xuICBjb25zdCBtaGMgPSBbXTtcbiAgY29uc3QgcGhjID0gW107XG4gIGNvbnN0IGhzaXplID0gTWF0aC5jZWlsKG4gLyAzMik7XG4gIGNvbnN0IHZzaXplID0gTWF0aC5jZWlsKG0gLyAzMik7XG4gIGxldCBzY29yZSA9IG07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaHNpemU7IGkrKykge1xuICAgIHBoY1tpXSA9IC0xO1xuICAgIG1oY1tpXSA9IDA7XG4gIH1cbiAgbGV0IGogPSAwO1xuICBmb3IgKDsgaiA8IHZzaXplIC0gMTsgaisrKSB7XG4gICAgbGV0IG12ID0gMDtcbiAgICBsZXQgcHYgPSAtMTtcbiAgICBjb25zdCBzdGFydCA9IGogKiAzMjtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbigzMiwgbSkgKyBzdGFydDtcbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgICAgcGVxW2IuY2hhckNvZGVBdChrKV0gfD0gMSA8PCBrO1xuICAgIH1cbiAgICBzY29yZSA9IG07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGVxID0gcGVxW2EuY2hhckNvZGVBdChpKV07XG4gICAgICBjb25zdCBwYiA9IChwaGNbKGkgLyAzMikgfCAwXSA+Pj4gaSkgJiAxO1xuICAgICAgY29uc3QgbWIgPSAobWhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICAgIGNvbnN0IHh2ID0gZXEgfCBtdjtcbiAgICAgIGNvbnN0IHhoID0gKCgoKGVxIHwgbWIpICYgcHYpICsgcHYpIF4gcHYpIHwgZXEgfCBtYjtcbiAgICAgIGxldCBwaCA9IG12IHwgfih4aCB8IHB2KTtcbiAgICAgIGxldCBtaCA9IHB2ICYgeGg7XG4gICAgICBpZiAoKHBoID4+PiAzMSkgXiBwYikge1xuICAgICAgICBwaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgICB9XG4gICAgICBpZiAoKG1oID4+PiAzMSkgXiBtYikge1xuICAgICAgICBtaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgICB9XG4gICAgICBwaCA9IChwaCA8PCAxKSB8IHBiO1xuICAgICAgbWggPSAobWggPDwgMSkgfCBtYjtcbiAgICAgIHB2ID0gbWggfCB+KHh2IHwgcGgpO1xuICAgICAgbXYgPSBwaCAmIHh2O1xuICAgIH1cbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgICAgcGVxW2IuY2hhckNvZGVBdChrKV0gPSAwO1xuICAgIH1cbiAgfVxuICBsZXQgbXYgPSAwO1xuICBsZXQgcHYgPSAtMTtcbiAgY29uc3Qgc3RhcnQgPSBqICogMzI7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKDMyLCBtIC0gc3RhcnQpICsgc3RhcnQ7XG4gIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgaysrKSB7XG4gICAgcGVxW2IuY2hhckNvZGVBdChrKV0gfD0gMSA8PCBrO1xuICB9XG4gIHNjb3JlID0gbTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCBlcSA9IHBlcVthLmNoYXJDb2RlQXQoaSldO1xuICAgIGNvbnN0IHBiID0gKHBoY1soaSAvIDMyKSB8IDBdID4+PiBpKSAmIDE7XG4gICAgY29uc3QgbWIgPSAobWhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICBjb25zdCB4diA9IGVxIHwgbXY7XG4gICAgY29uc3QgeGggPSAoKCgoZXEgfCBtYikgJiBwdikgKyBwdikgXiBwdikgfCBlcSB8IG1iO1xuICAgIGxldCBwaCA9IG12IHwgfih4aCB8IHB2KTtcbiAgICBsZXQgbWggPSBwdiAmIHhoO1xuICAgIHNjb3JlICs9IChwaCA+Pj4gKG0gLSAxKSkgJiAxO1xuICAgIHNjb3JlIC09IChtaCA+Pj4gKG0gLSAxKSkgJiAxO1xuICAgIGlmICgocGggPj4+IDMxKSBeIHBiKSB7XG4gICAgICBwaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgfVxuICAgIGlmICgobWggPj4+IDMxKSBeIG1iKSB7XG4gICAgICBtaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgfVxuICAgIHBoID0gKHBoIDw8IDEpIHwgcGI7XG4gICAgbWggPSAobWggPDwgMSkgfCBtYjtcbiAgICBwdiA9IG1oIHwgfih4diB8IHBoKTtcbiAgICBtdiA9IHBoICYgeHY7XG4gIH1cbiAgZm9yIChsZXQgayA9IHN0YXJ0OyBrIDwgZW5kOyBrKyspIHtcbiAgICBwZXFbYi5jaGFyQ29kZUF0KGspXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNjb3JlO1xufTtcblxuY29uc3QgZGlzdGFuY2UgPSAoYSwgYikgPT4ge1xuICBpZiAoYS5sZW5ndGggPiBiLmxlbmd0aCkge1xuICAgIGNvbnN0IHRtcCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHRtcDtcbiAgfVxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYi5sZW5ndGg7XG4gIH1cbiAgaWYgKGEubGVuZ3RoIDw9IDMyKSB7XG4gICAgcmV0dXJuIG15ZXJzXzMyKGEsIGIpO1xuICB9XG4gIHJldHVybiBteWVyc194KGEsIGIpO1xufTtcblxuY29uc3QgY2xvc2VzdCA9IChzdHIsIGFycikgPT4ge1xuICBsZXQgbWluX2Rpc3RhbmNlID0gSW5maW5pdHk7XG4gIGxldCBtaW5faW5kZXggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRpc3QgPSBkaXN0YW5jZShzdHIsIGFycltpXSk7XG4gICAgaWYgKGRpc3QgPCBtaW5fZGlzdGFuY2UpIHtcbiAgICAgIG1pbl9kaXN0YW5jZSA9IGRpc3Q7XG4gICAgICBtaW5faW5kZXggPSBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyW21pbl9pbmRleF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2xvc2VzdCwgZGlzdGFuY2Vcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gUmVmZXJlbmNlOiBodHRwczovL3d3dy5nZWVrc2ZvcmdlZWtzLm9yZy9qYXJvLWFuZC1qYXJvLXdpbmtsZXItc2ltaWxhcml0eS9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuamFyb1dpbmtsZXIgPSBleHBvcnRzLmphcm8gPSB2b2lkIDA7XG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyMSBTdHJpbmcgMSBmb3IgY29tcGFyZVxuICogQHBhcmFtIHN0cjIgU3RyaW5nIDIgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBvcHRpb25zIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdmUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGphcm8oc3RyMSwgc3RyMiwgb3B0aW9ucykge1xuICAgIC8vIEV4aXQgZWFybHkgaWYgZWl0aGVyIGFyZSBlbXB0eS5cbiAgICBpZiAoc3RyMS5sZW5ndGggPT09IDAgfHwgc3RyMi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdG8gdXBwZXIgaWYgY2FzZS1zZW5zaXRpdmUgaXMgZmFsc2UuXG4gICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlvbnMuY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICBzdHIxID0gc3RyMS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBzdHIyID0gc3RyMi50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBFeGFjdCBtYXRjaFxuICAgIGlmIChzdHIxID09PSBzdHIyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICAvLyBOdW1iZXIgb2YgbWF0Y2hlc1xuICAgIHZhciBtID0gMDtcbiAgICAvLyBMZW5ndGggb2YgdHdvIFN0cmluZ3NcbiAgICB2YXIgbGVuMSA9IHN0cjEubGVuZ3RoO1xuICAgIHZhciBsZW4yID0gc3RyMi5sZW5ndGg7XG4gICAgLy8gTWF4aW11bSBkaXN0YW5jZVxuICAgIHZhciB3aW5kb3cgPSBNYXRoLmZsb29yKE1hdGgubWF4KGxlbjEsIGxlbjIpIC8gMikgLSAxO1xuICAgIC8vIEhhc2ggZm9yIG1hdGNoZXNcbiAgICB2YXIgc3RyMUhhc2ggPSBuZXcgQXJyYXkobGVuMSk7XG4gICAgdmFyIHN0cjJIYXNoID0gbmV3IEFycmF5KGxlbjIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCBpIC0gd2luZG93KTsgaiA8PSBNYXRoLm1pbihsZW4yLCBpICsgd2luZG93ICsgMSk7IGorKykge1xuICAgICAgICAgICAgaWYgKCFzdHIxSGFzaFtpXSAmJiAhc3RyMkhhc2hbal0gJiYgc3RyMVtpXSA9PT0gc3RyMltqXSkge1xuICAgICAgICAgICAgICAgICsrbTtcbiAgICAgICAgICAgICAgICBzdHIxSGFzaFtpXSA9IHN0cjJIYXNoW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBFeGl0IGVhcmx5IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAgICBpZiAobSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgLy8gQ291bnQgdGhlIHRyYW5zcG9zaXRpb25zLlxuICAgIHZhciB0ID0gMDtcbiAgICB2YXIgcG9pbnQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgICAgIGlmIChzdHIxSGFzaFtpXSkge1xuICAgICAgICAgICAgd2hpbGUgKCFzdHIySGFzaFtwb2ludF0pIHtcbiAgICAgICAgICAgICAgICBwb2ludCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cjEuY2hhckF0KGkpICE9PSBzdHIyLmNoYXJBdChwb2ludCsrKSkge1xuICAgICAgICAgICAgICAgIHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0IC89IDI7XG4gICAgcmV0dXJuIChtIC8gbGVuMSArIG0gLyBsZW4yICsgKG0gLSB0KSAvIG0pIC8gMztcbn1cbmV4cG9ydHMuamFybyA9IGphcm87XG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyMSBTdHJpbmcgMSBmb3IgY29tcGFyZVxuICogQHBhcmFtIHN0cjIgU3RyaW5nIDIgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBvcHRpb25zIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdmUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGphcm9XaW5rbGVyKHN0cjEsIHN0cjIsIG9wdGlvbnMpIHtcbiAgICAvLyBKYXJvIERpc3RhbmNlXG4gICAgdmFyIGphcm9EaXN0ID0gamFybyhzdHIxLCBzdHIyLCBvcHRpb25zKTtcbiAgICAvLyBTYW1lIHByZWZpeCBsZW5ndGgsIG1heGl1bSBpcyA0XG4gICAgdmFyIHByZWZpeCA9IDA7XG4gICAgaWYgKGphcm9EaXN0ID4gMC43KSB7XG4gICAgICAgIHZhciBtaW5JbmRleCA9IE1hdGgubWluKHN0cjEubGVuZ3RoLCBzdHIyLmxlbmd0aCk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKHN0cjFbaV0gPT09IHN0cjJbaV0gJiYgaSA8IDQgJiYgaSA8IG1pbkluZGV4KSB7XG4gICAgICAgICAgICArK3ByZWZpeDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBqYXJvRGlzdCArPSAwLjEgKiBwcmVmaXggKiAoMSAtIGphcm9EaXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGphcm9EaXN0O1xufVxuZXhwb3J0cy5qYXJvV2lua2xlciA9IGphcm9XaW5rbGVyO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgcnVuVGVzdHMsIHRlc3RzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgJy4vdGVzdHMvV2ViTG9nby10ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9QYWxldHRlcy10ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9kZXRlY3RvcnMtdGVzdCc7XG5pbXBvcnQgJy4vdGVzdHMvbXNhLXRlc3RzJztcbmltcG9ydCAnLi90ZXN0cy9zZXF1ZW5jZS1zcGFjZS10ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9hY3Rpdml0eS1jbGlmZnMtdGVzdHMnO1xuaW1wb3J0ICcuL3Rlc3RzL3NwbGl0dGVyLXRlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL3JlbmRlcmVyLXRlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL2NvbnZlcnQtdGVzdCc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuZXhwb3J0IHsgdGVzdHMgfTtcbi8qKiBGb3IgdGhlICd0ZXN0JyBmdW5jdGlvbiBhcmd1bWVudCBuYW1lcyBhcmUgZml4ZWQgYXMgJ2NhdGVnb3J5JyBhbmQgJ3Rlc3QnIGJlY2F1c2Ugb2Ygd2F5IGl0IGlzIGNhbGxlZC4gKi9cbi8vbmFtZTogdGVzdFxuLy9pbnB1dDogc3RyaW5nIGNhdGVnb3J5IHtvcHRpb25hbDogdHJ1ZX1cbi8vaW5wdXQ6IHN0cmluZyB0ZXN0IHtvcHRpb25hbDogdHJ1ZX1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgcmVzdWx0XG4vL3RvcC1tZW51OiBUb29scyB8IERldiB8IEpTIEFQSSBUZXN0c1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3QoY2F0ZWdvcnksIHRlc3QpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcnVuVGVzdHMoeyBjYXRlZ29yeSwgdGVzdCB9KTtcbiAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tT2JqZWN0cyhkYXRhKTtcbiAgICB9KTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG5pbXBvcnQgeyBXZWJMb2dvIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3ZpZXdlcnMvd2ViLWxvZ28nO1xuaW1wb3J0IHsgVmRSZWdpb25zVmlld2VyIH0gZnJvbSAnLi92aWV3ZXJzL3ZkLXJlZ2lvbnMtdmlld2VyJztcbmltcG9ydCB7IHJ1bkthbGlnbiB9IGZyb20gJy4vdXRpbHMvbXVsdGlwbGUtc2VxdWVuY2UtYWxpZ25tZW50JztcbmltcG9ydCB7IFNlcXVlbmNlQWxpZ25tZW50IH0gZnJvbSAnLi9zZXFfYWxpZ24nO1xuaW1wb3J0IHsgY29udmVydCB9IGZyb20gJy4vdXRpbHMvY29udmVydCc7XG5pbXBvcnQgeyBnZXRFbWJlZGRpbmdDb2xzTmFtZXMsIHNlcXVlbmNlU3BhY2UgfSBmcm9tICcuL3V0aWxzL3NlcXVlbmNlLXNwYWNlJztcbmltcG9ydCB7IGdldEFjdGl2aXR5Q2xpZmZzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdmlld2Vycy9hY3Rpdml0eS1jbGlmZnMnO1xuaW1wb3J0IHsgc2VxdWVuY2VHZXRTaW1pbGFyaXRpZXMsIGRyYXdUb29sdGlwIH0gZnJvbSAnLi91dGlscy9zZXF1ZW5jZS1hY3Rpdml0eS1jbGlmZnMnO1xuaW1wb3J0IHsgZ2V0TW9sZmlsZXNGcm9tU2VxLCBIRUxNX0NPUkVfTElCX0ZJTEVOQU1FIH0gZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgeyBnZXRNYWNyb01vbCB9IGZyb20gJy4vdXRpbHMvYXRvbWljLXdvcmtzJztcbmltcG9ydCB7IE1hY3JvbW9sZWN1bGVTZXF1ZW5jZUNlbGxSZW5kZXJlciB9IGZyb20gJy4vdXRpbHMvY2VsbC1yZW5kZXJlcic7XG4vL3RhZ3M6IGluaXRcbmV4cG9ydCBmdW5jdGlvbiBpbml0QmlvKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGFwcGFyZW50bHkgSEVMTVdlYkVkaXRvciByZXF1aXJlcyBkb2pvIHRvIGJlIGluaXRpYWxpemVkIGZpcnN0XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBkb2pvLnJlYWR5KGZ1bmN0aW9uICgpIHsgcmVzb2x2ZShudWxsKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy9uYW1lOiBtYWNyb21vbGVjdWxlU2VxdWVuY2VDZWxsUmVuZGVyZXJcbi8vdGFnczogY2VsbFJlbmRlcmVyXG4vL21ldGEuY2VsbFR5cGU6IE1hY3JvbW9sZWN1bGVcbi8vb3V0cHV0OiBncmlkX2NlbGxfcmVuZGVyZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gbWFjcm9tb2xlY3VsZVNlcXVlbmNlQ2VsbFJlbmRlcmVyKCkge1xuICAgIHJldHVybiBuZXcgTWFjcm9tb2xlY3VsZVNlcXVlbmNlQ2VsbFJlbmRlcmVyKCk7XG59XG5mdW5jdGlvbiBjaGVja0lucHV0Q29sdW1uKGNvbCwgbmFtZSwgYWxsb3dlZE5vdGF0aW9ucyA9IFtdLCBhbGxvd2VkQWxwaGFiZXRzID0gW10pIHtcbiAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgaWYgKGNvbC5zZW1UeXBlICE9PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKG5hbWUgKyAnIGFuYWx5c2lzIGlzIGFsbG93ZWQgZm9yIE1hY3JvbW9sZWN1bGVzIHNlbWFudGljIHR5cGUnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICgoYWxsb3dlZEFscGhhYmV0cy5sZW5ndGggPiAwICYmXG4gICAgICAgICFhbGxvd2VkQWxwaGFiZXRzLnNvbWUoKGEpID0+IHVuaXRzLnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoYS50b1VwcGVyQ2FzZSgpKSkpIHx8XG4gICAgICAgIChhbGxvd2VkTm90YXRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFhbGxvd2VkTm90YXRpb25zLnNvbWUoKG4pID0+IHVuaXRzLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChuLnRvVXBwZXJDYXNlKCkpKSkpIHtcbiAgICAgICAgY29uc3Qgbm90YXRpb25BZGQgPSBhbGxvd2VkTm90YXRpb25zLmxlbmd0aCA9PSAwID8gJ2FueSBub3RhdGlvbicgOlxuICAgICAgICAgICAgKGBub3RhdGlvbiR7YWxsb3dlZE5vdGF0aW9ucy5sZW5ndGggPiAxID8gJ3MnIDogJyd9ICR7YWxsb3dlZE5vdGF0aW9ucy5tYXAoKG4pID0+IGBcIiR7bn1cImApLmpvaW4oJywgJyl9IGApO1xuICAgICAgICBjb25zdCBhbHBoYWJldEFkZCA9IGFsbG93ZWROb3RhdGlvbnMubGVuZ3RoID09IDAgPyAnYW55IGFscGhhYmV0JyA6XG4gICAgICAgICAgICAoYGFscGhhYmV0JHthbGxvd2VkQWxwaGFiZXRzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gJHthbGxvd2VkQWxwaGFiZXRzLm1hcCgoYSkgPT4gYFwiJHthfVwiYCkuam9pbignLCAnKX0uYCk7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhuYW1lICsgJyBhbmFseXNpcyBpcyBhbGxvd2VkIGZvciBNYWNyb21vbGVjdWxlcyB3aXRoICcgKyBub3RhdGlvbkFkZCArICcgYW5kICcgKyBhbHBoYWJldEFkZCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vL25hbWU6IHNlcXVlbmNlQWxpZ25tZW50XG4vL2lucHV0OiBzdHJpbmcgYWxpZ25UeXBlIHtjaG9pY2VzOiBbJ0xvY2FsIGFsaWdubWVudCcsICdHbG9iYWwgYWxpZ25tZW50J119XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy9pbnB1dDogc3RyaW5nIGFsaWduVGFibGUge2Nob2ljZXM6IFsnQVVUTycsICdOVUNMRU9USURFUycsICdCTE9TVU00NScsICdCTE9TVU01MCcsJ0JMT1NVTTYyJywnQkxPU1VNODAnLCdCTE9TVU05MCcsJ1BBTTMwJywnUEFNNzAnLCdQQU0yNTAnLCdTQ0hORUlERVInLCdUUkFOUyddfVxuLy9pbnB1dDogZG91YmxlIGdhcFxuLy9pbnB1dDogc3RyaW5nIHNlcTFcbi8vaW5wdXQ6IHN0cmluZyBzZXEyXG4vL291dHB1dDogb2JqZWN0IHJlc1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlQWxpZ25tZW50KGFsaWduVHlwZSwgYWxpZ25UYWJsZSwgZ2FwLCBzZXExLCBzZXEyKSB7XG4gICAgY29uc3QgdG9BbGlnbiA9IG5ldyBTZXF1ZW5jZUFsaWdubWVudChzZXExLCBzZXEyLCBnYXAsIGFsaWduVGFibGUpO1xuICAgIGNvbnN0IHJlcyA9IGFsaWduVHlwZSA9PSAnTG9jYWwgYWxpZ25tZW50JyA/IHRvQWxpZ24uc21pdGhXYXRlcm1hbigpIDogdG9BbGlnbi5uZWVkbGVtYW5XdW5jaCgpO1xuICAgIHJldHVybiByZXM7XG59XG4vL25hbWU6IFdlYkxvZ29cbi8vZGVzY3JpcHRpb246IFdlYkxvZ28gdmlld2VyXG4vL3RhZ3M6IHZpZXdlciwgcGFuZWxcbi8vb3V0cHV0OiB2aWV3ZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gd2ViTG9nb1ZpZXdlcigpIHtcbiAgICByZXR1cm4gbmV3IFdlYkxvZ28oKTtcbn1cbi8vbmFtZTogVmRSZWdpb25zXG4vL2Rlc2NyaXB0aW9uOiBWLURvbWFpbiByZWdpb25zIHZpZXdlclxuLy90YWdzOiB2aWV3ZXIsIHBhbmVsXG4vL291dHB1dDogdmlld2VyIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIHZkUmVnaW9uVmlld2VyKCkge1xuICAgIHJldHVybiBuZXcgVmRSZWdpb25zVmlld2VyKCk7XG59XG4vL3RvcC1tZW51OiBCaW8gfCBTZXF1ZW5jZSBBY3Rpdml0eSBDbGlmZnMuLi5cbi8vbmFtZTogU2VxdWVuY2UgQWN0aXZpdHkgQ2xpZmZzXG4vL2Rlc2NyaXB0aW9uOiBkZXRlY3QgYWN0aXZpdHkgY2xpZmZzXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGUgW0lucHV0IGRhdGEgdGFibGVdXG4vL2lucHV0OiBjb2x1bW4gbWFjcm9Nb2xlY3VsZSB7c2VtVHlwZTogTWFjcm9tb2xlY3VsZX1cbi8vaW5wdXQ6IGNvbHVtbiBhY3Rpdml0aWVzXG4vL2lucHV0OiBkb3VibGUgc2ltaWxhcml0eSA9IDgwIFtTaW1pbGFyaXR5IGN1dG9mZl1cbi8vaW5wdXQ6IHN0cmluZyBtZXRob2ROYW1lIHsgY2hvaWNlczpbXCJVTUFQXCIsIFwidC1TTkVcIiwgXCJTUEVcIl0gfVxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5Q2xpZmZzKGRmLCBtYWNyb01vbGVjdWxlLCBhY3Rpdml0aWVzLCBzaW1pbGFyaXR5LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCFjaGVja0lucHV0Q29sdW1uKG1hY3JvTW9sZWN1bGUsICdBY3Rpdml0eSBDbGlmZnMnKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgYXhlc05hbWVzID0gZ2V0RW1iZWRkaW5nQ29sc05hbWVzKGRmKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICdTUEUnOiB7IGN5Y2xlczogMjAwMCwgbGFtYmRhOiAxLjAsIGRsYW1iZGE6IDAuMDAwNSB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bml0cyA9IG1hY3JvTW9sZWN1bGUudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgICAgICAgeWllbGQgZ2V0QWN0aXZpdHlDbGlmZnMoZGYsIG1hY3JvTW9sZWN1bGUsIGF4ZXNOYW1lcywgJ0FjdGl2aXR5IGNsaWZmcycsIGFjdGl2aXRpZXMsIHNpbWlsYXJpdHksICdMZXZlbnNodGVpbicsIG1ldGhvZE5hbWUsIERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSwgdW5pdHMsIHNlcXVlbmNlU3BhY2UsIHNlcXVlbmNlR2V0U2ltaWxhcml0aWVzLCBkcmF3VG9vbHRpcCwgb3B0aW9uc1ttZXRob2ROYW1lXSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBCaW8gfCBTZXF1ZW5jZSBTcGFjZS4uLlxuLy9uYW1lOiBTZXF1ZW5jZSBTcGFjZVxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW4gbWFjcm9Nb2xlY3VsZSB7IHNlbVR5cGU6IE1hY3JvbW9sZWN1bGUgfVxuLy9pbnB1dDogc3RyaW5nIG1ldGhvZE5hbWUgeyBjaG9pY2VzOltcIlVNQVBcIiwgXCJ0LVNORVwiLCBcIlNQRVwiXSB9XG4vL2lucHV0OiBzdHJpbmcgc2ltaWxhcml0eU1ldHJpYyB7IGNob2ljZXM6W1wiTGV2ZW5zaHRlaW5cIiwgXCJUYW5pbW90b1wiXSB9XG4vL2lucHV0OiBib29sIHBsb3RFbWJlZGRpbmdzID0gdHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlU3BhY2VUb3BNZW51KHRhYmxlLCBtYWNyb01vbGVjdWxlLCBtZXRob2ROYW1lLCBzaW1pbGFyaXR5TWV0cmljID0gJ0xldmVuc2h0ZWluJywgcGxvdEVtYmVkZGluZ3MpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWNoZWNrSW5wdXRDb2x1bW4obWFjcm9Nb2xlY3VsZSwgJ0FjdGl2aXR5IENsaWZmcycpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbWJlZENvbHNOYW1lcyA9IGdldEVtYmVkZGluZ0NvbHNOYW1lcyh0YWJsZSk7XG4gICAgICAgIGNvbnN0IGNoZW1TcGFjZVBhcmFtcyA9IHtcbiAgICAgICAgICAgIHNlcUNvbDogbWFjcm9Nb2xlY3VsZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICBzaW1pbGFyaXR5TWV0cmljOiBzaW1pbGFyaXR5TWV0cmljLFxuICAgICAgICAgICAgZW1iZWRBeGVzTmFtZXM6IGVtYmVkQ29sc05hbWVzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlU3BhY2VSZXMgPSB5aWVsZCBzZXF1ZW5jZVNwYWNlKGNoZW1TcGFjZVBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSBzZXF1ZW5jZVNwYWNlUmVzLmNvb3JkaW5hdGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBlbWJlZGRpbmdzKVxuICAgICAgICAgICAgdGFibGUuY29sdW1ucy5hZGQoY29sKTtcbiAgICAgICAgaWYgKHBsb3RFbWJlZGRpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgZ3Jvay5zaGVsbC52aWV3cykge1xuICAgICAgICAgICAgICAgIGlmICh2Lm5hbWUgPT09IHRhYmxlLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgIHYuc2NhdHRlclBsb3QoeyB4OiBlbWJlZENvbHNOYW1lc1swXSwgeTogZW1iZWRDb2xzTmFtZXNbMV0sIHRpdGxlOiAnU2VxdWVuY2Ugc3BhY2UnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG47XG4vL3RvcC1tZW51OiBCaW8gfCBUbyBBdG9taWMgTGV2ZWwuLi5cbi8vbmFtZTogVG8gQXRvbWljIExldmVsXG4vL2Rlc2NyaXB0aW9uOiByZXR1cm5zIG1vbGZpbGVzIGZvciBlYWNoIG1vbm9tZXIgZnJvbSBIRUxNIGxpYnJhcnlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZiBbSW5wdXQgZGF0YSB0YWJsZV1cbi8vaW5wdXQ6IGNvbHVtbiBtYWNyb01vbGVjdWxlIHtzZW1UeXBlOiBNYWNyb21vbGVjdWxlfVxuZXhwb3J0IGZ1bmN0aW9uIHRvQXRvbWljTGV2ZWwoZGYsIG1hY3JvTW9sZWN1bGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoREcuRnVuYy5maW5kKHsgcGFja2FnZTogJ0NoZW0nLCBuYW1lOiAnZ2V0UmRLaXRNb2R1bGUnIH0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUcmFuc2Zvcm1hdGlvbiB0byBhdG9taWMgbGV2ZWwgcmVxdWlyZXMgcGFja2FnZSBcIkNoZW1cIiBpbnN0YWxsZWQuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja0lucHV0Q29sdW1uKG1hY3JvTW9sZWN1bGUsICdUbyBBdG9taWMgTGV2ZWwnKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbW9ub21lcnNMaWJGaWxlID0geWllbGQgX3BhY2thZ2UuZmlsZXMucmVhZEFzVGV4dChIRUxNX0NPUkVfTElCX0ZJTEVOQU1FKTtcbiAgICAgICAgY29uc3QgbW9ub21lcnNMaWJPYmplY3QgPSBKU09OLnBhcnNlKG1vbm9tZXJzTGliRmlsZSk7XG4gICAgICAgIGNvbnN0IGF0b21pY0NvZGVzID0gZ2V0TW9sZmlsZXNGcm9tU2VxKG1hY3JvTW9sZWN1bGUsIG1vbm9tZXJzTGliT2JqZWN0KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgZ2V0TWFjcm9Nb2woYXRvbWljQ29kZXMpO1xuICAgICAgICBjb25zdCBjb2wgPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ3JlZ2VuZXJhdGVkJywgcmVzdWx0KTtcbiAgICAgICAgY29sLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1PTEVDVUxFO1xuICAgICAgICBjb2wudGFnc1tERy5UQUdTLlVOSVRTXSA9ICdtb2xibG9jayc7XG4gICAgICAgIGRmLmNvbHVtbnMuYWRkKGNvbCk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBCaW8gfCBNU0EuLi5cbi8vbmFtZTogTVNBXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbiBzZXF1ZW5jZSB7IHNlbVR5cGU6IE1hY3JvbW9sZWN1bGUgfVxuLy9vdXRwdXQ6IGNvbHVtbiByZXN1bHRcbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBsZVNlcXVlbmNlQWxpZ25tZW50QW55KHRhYmxlLCBjb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWNoZWNrSW5wdXRDb2x1bW4oY29sLCAnTVNBJywgWydmYXN0YSddLCBbJ0ROQScsICdSTkEnLCAnUFQnXSkpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbXNhQ29sID0geWllbGQgcnVuS2FsaWduKGNvbCwgZmFsc2UpO1xuICAgICAgICB0YWJsZS5jb2x1bW5zLmFkZChtc2FDb2wpO1xuICAgICAgICAvLyBUaGlzIGNhbGwgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIGNlbGwgcmVuZGVyZXIgYWN0aXZhdGlvblxuICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyh0YWJsZSk7XG4gICAgICAgIC8vIGNvbnN0IHR2OiBERy5UYWJsZVZpZXcgPSBncm9rLnNoZWxsLnR2O1xuICAgICAgICAvLyB0di5ncmlkLmludmFsaWRhdGUoKTtcbiAgICAgICAgcmV0dXJuIG1zYUNvbDtcbiAgICB9KTtcbn1cbi8vbmFtZTogQ29tcG9zaXRpb24gQW5hbHlzaXNcbi8vdG9wLW1lbnU6IEJpbyB8IENvbXBvc2l0aW9uIEFuYWx5c2lzXG4vL291dHB1dDogdmlld2VyIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBvc2l0aW9uQW5hbHlzaXMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gSGlnaGVyIHByaW9yaXR5IGZvciBjb2x1bW5zIHdpdGggTVNBIGRhdGEgdG8gc2hvdyB3aXRoIFdlYkxvZ28uXG4gICAgICAgIGNvbnN0IHR2ID0gZ3Jvay5zaGVsbC50djtcbiAgICAgICAgY29uc3QgZGYgPSB0di5kYXRhRnJhbWU7XG4gICAgICAgIGNvbnN0IGNvbCA9IFdlYkxvZ28ucGlja1VwU2VxQ29sMihkZik7XG4gICAgICAgIGlmICghY29sKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdDdXJyZW50IHRhYmxlIGRvZXMgbm90IGNvbnRhaW4gc2VxdWVuY2VzJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja0lucHV0Q29sdW1uKGNvbCwgJ0NvbXBvc2l0aW9uJykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGFsbG93ZWROb3RhdGlvbnMgPSBbJ2Zhc3RhJywgJ3NlcGFyYXRvciddO1xuICAgICAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgICAgIGlmICghYWxsb3dlZE5vdGF0aW9ucy5zb21lKChuKSA9PiB1bml0cy50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgobi50b1VwcGVyQ2FzZSgpKSkpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZygnQ29tcG9zaXRpb24gYW5hbHlzaXMgaXMgYWxsb3dlZCBmb3IgJyArXG4gICAgICAgICAgICAgICAgYG5vdGF0aW9uJHthbGxvd2VkTm90YXRpb25zLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gJHthbGxvd2VkTm90YXRpb25zLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHYuYWRkVmlld2VyKCdXZWJMb2dvJywgeyBzZXF1ZW5jZUNvbHVtbk5hbWU6IGNvbC5uYW1lIH0pO1xuICAgIH0pO1xufVxuLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBpbXBvcnRGYXN0YVxuZnVuY3Rpb24gcGFyc2VNYWNyb21vbGVjdWxlKGZpbGVDb250ZW50LCBzdGFydE9mU2VxdWVuY2UsIGVuZE9mU2VxdWVuY2UpIHtcbiAgICBjb25zdCBzZXEgPSBmaWxlQ29udGVudC5zbGljZShzdGFydE9mU2VxdWVuY2UsIGVuZE9mU2VxdWVuY2UpO1xuICAgIGNvbnN0IHNlcUFycmF5ID0gc2VxLnNwbGl0KC9cXHMvKTtcbiAgICByZXR1cm4gc2VxQXJyYXkuam9pbignJyk7XG59XG4vL25hbWU6IGltcG9ydEZhc3RhXG4vL2Rlc2NyaXB0aW9uOiBPcGVucyBGQVNUQSBmaWxlXG4vL3RhZ3M6IGZpbGUtaGFuZGxlclxuLy9tZXRhLmV4dDogZmFzdGEsIGZuYSwgZmZuLCBmYWEsIGZybiwgZmEsIGZzdFxuLy9pbnB1dDogc3RyaW5nIGZpbGVDb250ZW50XG4vL291dHB1dDogbGlzdCB0YWJsZXNcbmV4cG9ydCBmdW5jdGlvbiBpbXBvcnRGYXN0YShmaWxlQ29udGVudCkge1xuICAgIGNvbnN0IHJlZ2V4ID0gL14+KC4qKSQvZ207IC8vIG1hdGNoIGxpbmVzIHN0YXJ0aW5nIHdpdGggPlxuICAgIGNvbnN0IGRlc2NyaXB0aW9uc0FycmF5ID0gW107XG4gICAgY29uc3Qgc2VxdWVuY2VzQXJyYXkgPSBbXTtcbiAgICBsZXQgc3RhcnRPZlNlcXVlbmNlID0gMDtcbiAgICBsZXQgbWF0Y2g7IC8vIG1hdGNoLmluZGV4IGlzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1hdGNoZWQgbGluZVxuICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4LmV4ZWMoZmlsZUNvbnRlbnQpKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gZmlsZUNvbnRlbnQuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsgMSwgcmVnZXgubGFzdEluZGV4KTtcbiAgICAgICAgZGVzY3JpcHRpb25zQXJyYXkucHVzaChkZXNjcmlwdGlvbik7XG4gICAgICAgIGlmIChzdGFydE9mU2VxdWVuY2UgIT09IDApXG4gICAgICAgICAgICBzZXF1ZW5jZXNBcnJheS5wdXNoKHBhcnNlTWFjcm9tb2xlY3VsZShmaWxlQ29udGVudCwgc3RhcnRPZlNlcXVlbmNlLCBtYXRjaC5pbmRleCkpO1xuICAgICAgICBzdGFydE9mU2VxdWVuY2UgPSByZWdleC5sYXN0SW5kZXggKyAxO1xuICAgIH1cbiAgICBzZXF1ZW5jZXNBcnJheS5wdXNoKHBhcnNlTWFjcm9tb2xlY3VsZShmaWxlQ29udGVudCwgc3RhcnRPZlNlcXVlbmNlLCAtMSkpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uc0FycmF5Q29sID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uc0FycmF5KTtcbiAgICBjb25zdCBzZXF1ZW5jZUNvbCA9IERHLkNvbHVtbi5mcm9tU3RyaW5ncygnc2VxdWVuY2UnLCBzZXF1ZW5jZXNBcnJheSk7XG4gICAgc2VxdWVuY2VDb2wuc2VtVHlwZSA9ICdNYWNyb21vbGVjdWxlJztcbiAgICBjb25zdCBzdGF0cyA9IFdlYkxvZ28uZ2V0U3RhdHMoc2VxdWVuY2VDb2wsIDUsIFdlYkxvZ28uc3BsaXR0ZXJBc0Zhc3RhKTtcbiAgICBjb25zdCBzZXFUeXBlID0gc3RhdHMuc2FtZUxlbmd0aCA/ICdTRVEuTVNBJyA6ICdTRVEnO1xuICAgIGNvbnN0IFBlcHRpZGVGYXN0YUFscGhhYmV0ID0gbmV3IFNldChbXG4gICAgICAgICdHJywgJ0wnLCAnWScsICdTJywgJ0UnLCAnUScsICdEJywgJ04nLCAnRicsICdBJyxcbiAgICAgICAgJ0snLCAnUicsICdIJywgJ0MnLCAnVicsICdQJywgJ1cnLCAnSScsICdNJywgJ1QnLFxuICAgIF0pO1xuICAgIGNvbnN0IERuYUZhc3RhQWxwaGFiZXQgPSBuZXcgU2V0KFsnQScsICdDJywgJ0cnLCAnVCddKTtcbiAgICBjb25zdCBSbmFGYXN0YUFscGhhYmV0ID0gbmV3IFNldChbJ0EnLCAnQycsICdHJywgJ1UnXSk7XG4gICAgLy9jb25zdCBTbWlsZXNSYXdBbHBoYWJldCA9IG5ldyBTZXQoW1xuICAgIC8vICAnTycsICdDJywgJ2MnLCAnTicsICdTJywgJ0YnLCAnKCcsICcpJyxcbiAgICAvLyAgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLFxuICAgIC8vICAnKycsICctJywgJ0AnLCAnWycsICddJywgJy8nLCAnXFxcXCcsICcjJywgJz0nXSk7XG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzID0gW1xuICAgICAgICBbJ1BUJywgUGVwdGlkZUZhc3RhQWxwaGFiZXRdLFxuICAgICAgICBbJ0ROQScsIERuYUZhc3RhQWxwaGFiZXRdLFxuICAgICAgICBbJ1JOQScsIFJuYUZhc3RhQWxwaGFiZXRdLFxuICAgIF07XG4gICAgLy9jb25zdCBhbHBoYWJldENhbmRpZGF0ZXM6IFtzdHJpbmcsIFNldDxzdHJpbmc+XVtdID0gW1xuICAgIC8vICBbJ05UJywgbmV3IFNldChPYmplY3Qua2V5cyhOdWNsZW90aWRlcy5OYW1lcykpXSxcbiAgICAvLyAgWydQVCcsIG5ldyBTZXQoT2JqZWN0LmtleXMoQW1pbm9hY2lkcy5OYW1lcykpXSxcbiAgICAvL107XG4gICAgLy8gQ2FsY3VsYXRlIGxpa2VsaWhvb2RzIGZvciBhbHBoYWJldF9jYW5kaWRhdGVzXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltID0gYWxwaGFiZXRDYW5kaWRhdGVzLm1hcCgoYykgPT4gV2ViTG9nby5nZXRBbHBoYWJldFNpbWlsYXJpdHkoc3RhdHMuZnJlcSwgY1sxXSkpO1xuICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgY29uc3QgYWxwaGFiZXQgPSBtYXhDb3MgPiAwLjY1ID8gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzBdIDogJ1VOJztcbiAgICBzZXF1ZW5jZUNvbC5zZW1UeXBlID0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFO1xuICAgIGNvbnN0IHVuaXRzID0gYGZhc3RhOiR7c2VxVHlwZX06JHthbHBoYWJldH1gO1xuICAgIHNlcXVlbmNlQ29sLnNldFRhZyhERy5UQUdTLlVOSVRTLCB1bml0cyk7XG4gICAgcmV0dXJuIFtERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zQXJyYXlDb2wsXG4gICAgICAgICAgICBzZXF1ZW5jZUNvbCxcbiAgICAgICAgXSldO1xufVxuLy9uYW1lOiBCaW8gfCBDb252ZXJ0XG4vL2ZyaWVuZGx5LW5hbWU6IEJpbyB8IENvbnZlcnRcbi8vdGFnczogcGFuZWwsIGJpb1xuLy9pbnB1dDogY29sdW1uIGNvbCB7c2VtVHlwZTogTWFjcm9tb2xlY3VsZX1cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFuZWwoY29sKSB7XG4gICAgY29udmVydChjb2wpO1xufVxuIiwiY2xhc3MgQ2VsbCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBhcmVudEkgPSAwO1xuICAgICAgICB0aGlzLnBhcmVudEogPSAwO1xuICAgIH1cbn1cbjtcbmV4cG9ydCBjbGFzcyBBbGlnbmVkIHtcbiAgICBjb25zdHJ1Y3RvcihzZXExXywgc2VxMl8sIHNjb3JlXykge1xuICAgICAgICB0aGlzLnNlcTEgPSBzZXExXztcbiAgICAgICAgdGhpcy5zZXEyID0gc2VxMl87XG4gICAgICAgIHRoaXMuc2NvcmUgPSBzY29yZV87XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIFNlcXVlbmNlQWxpZ25tZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzZXExXywgc2VxMl8sIGdhcF8sIGFsaWduR3JpZF8gPSBcIlwiKSB7XG4gICAgICAgIHRoaXMuc2VxMSA9ICcnO1xuICAgICAgICB0aGlzLnNlcTIgPSAnJztcbiAgICAgICAgdGhpcy5nYXAgPSAxO1xuICAgICAgICB0aGlzLmxlbjEgPSAwO1xuICAgICAgICB0aGlzLmxlbjIgPSAwO1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICB0aGlzLmFsaWduR3JpZCA9IFtdO1xuICAgICAgICB0aGlzLnNjb3JlcyA9IFtdO1xuICAgICAgICB0aGlzLmRwR3JpZCA9IFtdO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0ge307XG4gICAgICAgIHRoaXMuQkxPU1VNNDUgPSBbWzUsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTEsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAxLCAwLCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTVdLFxuICAgICAgICAgICAgWy0yLCA3LCAwLCAtMSwgLTMsIDEsIDAsIC0yLCAwLCAtMywgLTIsIDMsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTIsIC0xLCAtMiwgLTEsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDYsIDIsIC0yLCAwLCAwLCAwLCAxLCAtMiwgLTMsIDAsIC0yLCAtMiwgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDQsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCAyLCA3LCAtMywgMCwgMiwgLTEsIDAsIC00LCAtMywgMCwgLTMsIC00LCAtMSwgMCwgLTEsIC00LCAtMiwgLTMsIDUsIDEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMiwgLTMsIDEyLCAtMywgLTMsIC0zLCAtMywgLTMsIC0yLCAtMywgLTIsIC0yLCAtNCwgLTEsIC0xLCAtNSwgLTMsIC0xLCAtMiwgLTMsIC0yLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDEsIDAsIDAsIC0zLCA2LCAyLCAtMiwgMSwgLTIsIC0yLCAxLCAwLCAtNCwgLTEsIDAsIC0xLCAtMiwgLTEsIC0zLCAwLCA0LCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAyLCAtMywgMiwgNiwgLTIsIDAsIC0zLCAtMiwgMSwgLTIsIC0zLCAwLCAwLCAtMSwgLTMsIC0yLCAtMywgMSwgNCwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMiwgMCwgLTEsIC0zLCAtMiwgLTIsIDcsIC0yLCAtNCwgLTMsIC0yLCAtMiwgLTMsIC0yLCAwLCAtMiwgLTIsIC0zLCAtMywgLTEsIC0yLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCAwLCAxLCAwLCAtMywgMSwgMCwgLTIsIDEwLCAtMywgLTIsIC0xLCAwLCAtMiwgLTIsIC0xLCAtMiwgLTMsIDIsIC0zLCAwLCAwLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTIsIC00LCAtMywgLTIsIC0zLCAtNCwgLTMsIDUsIDIsIC0zLCAyLCAwLCAtMiwgLTIsIC0xLCAtMiwgMCwgMywgLTMsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTMsIC0zLCAtMiwgLTIsIC0yLCAtMywgLTIsIDIsIDUsIC0zLCAyLCAxLCAtMywgLTMsIC0xLCAtMiwgMCwgMSwgLTMsIC0yLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAzLCAwLCAwLCAtMywgMSwgMSwgLTIsIC0xLCAtMywgLTMsIDUsIC0xLCAtMywgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMiwgMCwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0yLCAtMywgLTIsIDAsIC0yLCAtMiwgMCwgMiwgMiwgLTEsIDYsIDAsIC0yLCAtMiwgLTEsIC0yLCAwLCAxLCAtMiwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtMiwgLTQsIC0yLCAtNCwgLTMsIC0zLCAtMiwgMCwgMSwgLTMsIDAsIDgsIC0zLCAtMiwgLTEsIDEsIDMsIDAsIC0zLCAtMywgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMSwgLTQsIC0xLCAwLCAtMiwgLTIsIC0yLCAtMywgLTEsIC0yLCAtMywgOSwgLTEsIC0xLCAtMywgLTMsIC0zLCAtMiwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMSwgLTEsIDEsIDAsIC0xLCAwLCAwLCAwLCAtMSwgLTIsIC0zLCAtMSwgLTIsIC0yLCAtMSwgNCwgMiwgLTQsIC0yLCAtMSwgMCwgMCwgMCwgLTVdLFxuICAgICAgICAgICAgWzAsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAyLCA1LCAtMywgLTEsIDAsIDAsIC0xLCAwLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtNCwgLTQsIC01LCAtMiwgLTMsIC0yLCAtMywgLTIsIC0yLCAtMiwgLTIsIDEsIC0zLCAtNCwgLTMsIDE1LCAzLCAtMywgLTQsIC0yLCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0yLCAtMSwgLTIsIC0yLCAtMywgLTEsIC0yLCAtMywgMiwgMCwgMCwgLTEsIDAsIDMsIC0zLCAtMiwgLTEsIDMsIDgsIC0xLCAtMiwgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTIsIC0zLCAtMywgLTEsIC0zLCAtMywgLTMsIC0zLCAzLCAxLCAtMiwgMSwgMCwgLTMsIC0xLCAwLCAtMywgLTEsIDUsIC0zLCAtMywgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIDQsIDUsIC0yLCAwLCAxLCAtMSwgMCwgLTMsIC0zLCAwLCAtMiwgLTMsIC0yLCAwLCAwLCAtNCwgLTIsIC0zLCA0LCAyLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAxLCAtMywgNCwgNCwgLTIsIDAsIC0zLCAtMiwgMSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0yLCAtMiwgLTMsIDIsIDQsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNNTAgPSBbWzUsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTEsIDAsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTMsIC0xLCAxLCAwLCAtMywgLTIsIDAsIC0yLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgNywgLTEsIC0yLCAtNCwgMSwgMCwgLTMsIDAsIC00LCAtMywgMywgLTIsIC0zLCAtMywgLTEsIC0xLCAtMywgLTEsIC0zLCAtMSwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIDcsIDIsIC0yLCAwLCAwLCAwLCAxLCAtMywgLTQsIDAsIC0yLCAtNCwgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDQsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0yLCAyLCA4LCAtNCwgMCwgMiwgLTEsIC0xLCAtNCwgLTQsIC0xLCAtNCwgLTUsIC0xLCAwLCAtMSwgLTUsIC0zLCAtNCwgNSwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTQsIC0yLCAtNCwgMTMsIC0zLCAtMywgLTMsIC0zLCAtMiwgLTIsIC0zLCAtMiwgLTIsIC00LCAtMSwgLTEsIC01LCAtMywgLTEsIC0zLCAtMywgLTIsIC01XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgMCwgLTMsIDcsIDIsIC0yLCAxLCAtMywgLTIsIDIsIDAsIC00LCAtMSwgMCwgLTEsIC0xLCAtMSwgLTMsIDAsIDQsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDIsIC0zLCAyLCA2LCAtMywgMCwgLTQsIC0zLCAxLCAtMiwgLTMsIC0xLCAtMSwgLTEsIC0zLCAtMiwgLTMsIDEsIDUsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTMsIDAsIC0xLCAtMywgLTIsIC0zLCA4LCAtMiwgLTQsIC00LCAtMiwgLTMsIC00LCAtMiwgMCwgLTIsIC0zLCAtMywgLTQsIC0xLCAtMiwgLTIsIC01XSxcbiAgICAgICAgICAgIFstMiwgMCwgMSwgLTEsIC0zLCAxLCAwLCAtMiwgMTAsIC00LCAtMywgMCwgLTEsIC0xLCAtMiwgLTEsIC0yLCAtMywgMiwgLTQsIDAsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC00LCAtMywgLTQsIC0yLCAtMywgLTQsIC00LCAtNCwgNSwgMiwgLTMsIDIsIDAsIC0zLCAtMywgLTEsIC0zLCAtMSwgNCwgLTQsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTQsIC00LCAtMiwgLTIsIC0zLCAtNCwgLTMsIDIsIDUsIC0zLCAzLCAxLCAtNCwgLTMsIC0xLCAtMiwgLTEsIDEsIC00LCAtMywgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMywgMCwgLTEsIC0zLCAyLCAxLCAtMiwgMCwgLTMsIC0zLCA2LCAtMiwgLTQsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMywgMCwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtNCwgLTIsIDAsIC0yLCAtMywgLTEsIDIsIDMsIC0yLCA3LCAwLCAtMywgLTIsIC0xLCAtMSwgMCwgMSwgLTMsIC0xLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTQsIC01LCAtMiwgLTQsIC0zLCAtNCwgLTEsIDAsIDEsIC00LCAwLCA4LCAtNCwgLTMsIC0yLCAxLCA0LCAtMSwgLTQsIC00LCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTIsIC0xLCAtNCwgLTEsIC0xLCAtMiwgLTIsIC0zLCAtNCwgLTEsIC0zLCAtNCwgMTAsIC0xLCAtMSwgLTQsIC0zLCAtMywgLTIsIC0xLCAtMiwgLTVdLFxuICAgICAgICAgICAgWzEsIC0xLCAxLCAwLCAtMSwgMCwgLTEsIDAsIC0xLCAtMywgLTMsIDAsIC0yLCAtMywgLTEsIDUsIDIsIC00LCAtMiwgLTIsIDAsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDIsIDUsIC0zLCAtMiwgMCwgMCwgLTEsIDAsIC01XSxcbiAgICAgICAgICAgIFstMywgLTMsIC00LCAtNSwgLTUsIC0xLCAtMywgLTMsIC0zLCAtMywgLTIsIC0zLCAtMSwgMSwgLTQsIC00LCAtMywgMTUsIDIsIC0zLCAtNSwgLTIsIC0zLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0zLCAyLCAtMSwgLTEsIC0yLCAwLCA0LCAtMywgLTIsIC0yLCAyLCA4LCAtMSwgLTMsIC0yLCAtMSwgLTVdLFxuICAgICAgICAgICAgWzAsIC0zLCAtMywgLTQsIC0xLCAtMywgLTMsIC00LCAtNCwgNCwgMSwgLTMsIDEsIC0xLCAtMywgLTIsIDAsIC0zLCAtMSwgNSwgLTQsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCAtMSwgNCwgNSwgLTMsIDAsIDEsIC0xLCAwLCAtNCwgLTQsIDAsIC0zLCAtNCwgLTIsIDAsIDAsIC01LCAtMywgLTQsIDUsIDIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDEsIC0zLCA0LCA1LCAtMiwgMCwgLTMsIC0zLCAxLCAtMSwgLTQsIC0xLCAwLCAtMSwgLTIsIC0yLCAtMywgMiwgNSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0yLCAtMSwgMCwgLTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgMV1dO1xuICAgICAgICB0aGlzLkJMT1NVTTYyID0gW1s0LCAtMSwgLTIsIC0yLCAwLCAtMSwgLTEsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAxLCAwLCAtMywgLTIsIDAsIC0yLCAtMSwgMCwgLTRdLFxuICAgICAgICAgICAgWy0xLCA1LCAwLCAtMiwgLTMsIDEsIDAsIC0yLCAwLCAtMywgLTIsIDIsIC0xLCAtMywgLTIsIC0xLCAtMSwgLTMsIC0yLCAtMywgLTEsIDAsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTIsIDAsIDYsIDEsIC0zLCAwLCAwLCAwLCAxLCAtMywgLTMsIDAsIC0yLCAtMywgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDMsIDAsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTIsIC0yLCAxLCA2LCAtMywgMCwgMiwgLTEsIC0xLCAtMywgLTQsIC0xLCAtMywgLTMsIC0xLCAwLCAtMSwgLTQsIC0zLCAtMywgNCwgMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFswLCAtMywgLTMsIC0zLCA5LCAtMywgLTQsIC0zLCAtMywgLTEsIC0xLCAtMywgLTEsIC0yLCAtMywgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMywgLTMsIC0yLCAtNF0sXG4gICAgICAgICAgICBbLTEsIDEsIDAsIDAsIC0zLCA1LCAyLCAtMiwgMCwgLTMsIC0yLCAxLCAwLCAtMywgLTEsIDAsIC0xLCAtMiwgLTEsIC0yLCAwLCAzLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAyLCAtNCwgMiwgNSwgLTIsIDAsIC0zLCAtMywgMSwgLTIsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDEsIDQsIC0xLCAtNF0sXG4gICAgICAgICAgICBbMCwgLTIsIDAsIC0xLCAtMywgLTIsIC0yLCA2LCAtMiwgLTQsIC00LCAtMiwgLTMsIC0zLCAtMiwgMCwgLTIsIC0yLCAtMywgLTMsIC0xLCAtMiwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgMCwgMSwgLTEsIC0zLCAwLCAwLCAtMiwgOCwgLTMsIC0zLCAtMSwgLTIsIC0xLCAtMiwgLTEsIC0yLCAtMiwgMiwgLTMsIDAsIDAsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMywgLTMsIC0xLCAtMywgLTMsIC00LCAtMywgNCwgMiwgLTMsIDEsIDAsIC0zLCAtMiwgLTEsIC0zLCAtMSwgMywgLTMsIC0zLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTMsIC00LCAtMSwgLTIsIC0zLCAtNCwgLTMsIDIsIDQsIC0yLCAyLCAwLCAtMywgLTIsIC0xLCAtMiwgLTEsIDEsIC00LCAtMywgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgMiwgMCwgLTEsIC0zLCAxLCAxLCAtMiwgLTEsIC0zLCAtMiwgNSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDAsIDEsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMiwgLTMsIC0xLCAwLCAtMiwgLTMsIC0yLCAxLCAyLCAtMSwgNSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMywgLTEsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtMywgLTMsIC0yLCAtMywgLTMsIC0zLCAtMSwgMCwgMCwgLTMsIDAsIDYsIC00LCAtMiwgLTIsIDEsIDMsIC0xLCAtMywgLTMsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTEsIC0zLCAtMSwgLTEsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC00LCA3LCAtMSwgLTEsIC00LCAtMywgLTIsIC0yLCAtMSwgLTIsIC00XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMSwgMCwgLTEsIDAsIDAsIDAsIC0xLCAtMiwgLTIsIDAsIC0xLCAtMiwgLTEsIDQsIDEsIC0zLCAtMiwgLTIsIDAsIDAsIDAsIC00XSxcbiAgICAgICAgICAgIFswLCAtMSwgMCwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgMSwgNSwgLTIsIC0yLCAwLCAtMSwgLTEsIDAsIC00XSxcbiAgICAgICAgICAgIFstMywgLTMsIC00LCAtNCwgLTIsIC0yLCAtMywgLTIsIC0yLCAtMywgLTIsIC0zLCAtMSwgMSwgLTQsIC0zLCAtMiwgMTEsIDIsIC0zLCAtNCwgLTMsIC0yLCAtNF0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtMiwgLTMsIC0yLCAtMSwgLTIsIC0zLCAyLCAtMSwgLTEsIC0yLCAtMSwgMywgLTMsIC0yLCAtMiwgMiwgNywgLTEsIC0zLCAtMiwgLTEsIC00XSxcbiAgICAgICAgICAgIFswLCAtMywgLTMsIC0zLCAtMSwgLTIsIC0yLCAtMywgLTMsIDMsIDEsIC0yLCAxLCAtMSwgLTIsIC0yLCAwLCAtMywgLTEsIDQsIC0zLCAtMiwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTEsIDMsIDQsIC0zLCAwLCAxLCAtMSwgMCwgLTMsIC00LCAwLCAtMywgLTMsIC0yLCAwLCAtMSwgLTQsIC0zLCAtMywgNCwgMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgMCwgMCwgMSwgLTMsIDMsIDQsIC0yLCAwLCAtMywgLTMsIDEsIC0xLCAtMywgLTEsIDAsIC0xLCAtMywgLTIsIC0yLCAxLCA0LCAtMSwgLTRdLFxuICAgICAgICAgICAgWzAsIC0xLCAtMSwgLTEsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMiwgMCwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgMV1dO1xuICAgICAgICB0aGlzLkJMT1NVTTgwID0gW1s3LCAtMywgLTMsIC0zLCAtMSwgLTIsIC0yLCAwLCAtMywgLTMsIC0zLCAtMSwgLTIsIC00LCAtMSwgMiwgMCwgLTUsIC00LCAtMSwgLTMsIC0yLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0zLCA5LCAtMSwgLTMsIC02LCAxLCAtMSwgLTQsIDAsIC01LCAtNCwgMywgLTMsIC01LCAtMywgLTIsIC0yLCAtNSwgLTQsIC00LCAtMiwgMCwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTEsIDksIDIsIC01LCAwLCAtMSwgLTEsIDEsIC02LCAtNiwgMCwgLTQsIC02LCAtNCwgMSwgMCwgLTcsIC00LCAtNSwgNSwgLTEsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC0zLCAyLCAxMCwgLTcsIC0xLCAyLCAtMywgLTIsIC03LCAtNywgLTIsIC02LCAtNiwgLTMsIC0xLCAtMiwgLTgsIC02LCAtNiwgNiwgMSwgLTMsIC04XSxcbiAgICAgICAgICAgIFstMSwgLTYsIC01LCAtNywgMTMsIC01LCAtNywgLTYsIC03LCAtMiwgLTMsIC02LCAtMywgLTQsIC02LCAtMiwgLTIsIC01LCAtNSwgLTIsIC02LCAtNywgLTQsIC04XSxcbiAgICAgICAgICAgIFstMiwgMSwgMCwgLTEsIC01LCA5LCAzLCAtNCwgMSwgLTUsIC00LCAyLCAtMSwgLTUsIC0zLCAtMSwgLTEsIC00LCAtMywgLTQsIC0xLCA1LCAtMiwgLThdLFxuICAgICAgICAgICAgWy0yLCAtMSwgLTEsIDIsIC03LCAzLCA4LCAtNCwgMCwgLTYsIC02LCAxLCAtNCwgLTYsIC0yLCAtMSwgLTIsIC02LCAtNSwgLTQsIDEsIDYsIC0yLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTQsIC0xLCAtMywgLTYsIC00LCAtNCwgOSwgLTQsIC03LCAtNywgLTMsIC01LCAtNiwgLTUsIC0xLCAtMywgLTYsIC02LCAtNiwgLTIsIC00LCAtMywgLThdLFxuICAgICAgICAgICAgWy0zLCAwLCAxLCAtMiwgLTcsIDEsIDAsIC00LCAxMiwgLTYsIC01LCAtMSwgLTQsIC0yLCAtNCwgLTIsIC0zLCAtNCwgMywgLTUsIC0xLCAwLCAtMiwgLThdLFxuICAgICAgICAgICAgWy0zLCAtNSwgLTYsIC03LCAtMiwgLTUsIC02LCAtNywgLTYsIDcsIDIsIC01LCAyLCAtMSwgLTUsIC00LCAtMiwgLTUsIC0zLCA0LCAtNiwgLTYsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC00LCAtNiwgLTcsIC0zLCAtNCwgLTYsIC03LCAtNSwgMiwgNiwgLTQsIDMsIDAsIC01LCAtNCwgLTMsIC00LCAtMiwgMSwgLTcsIC01LCAtMiwgLThdLFxuICAgICAgICAgICAgWy0xLCAzLCAwLCAtMiwgLTYsIDIsIDEsIC0zLCAtMSwgLTUsIC00LCA4LCAtMywgLTUsIC0yLCAtMSwgLTEsIC02LCAtNCwgLTQsIC0xLCAxLCAtMiwgLThdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTQsIC02LCAtMywgLTEsIC00LCAtNSwgLTQsIDIsIDMsIC0zLCA5LCAwLCAtNCwgLTMsIC0xLCAtMywgLTMsIDEsIC01LCAtMywgLTIsIC04XSxcbiAgICAgICAgICAgIFstNCwgLTUsIC02LCAtNiwgLTQsIC01LCAtNiwgLTYsIC0yLCAtMSwgMCwgLTUsIDAsIDEwLCAtNiwgLTQsIC00LCAwLCA0LCAtMiwgLTYsIC02LCAtMywgLThdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTQsIC0zLCAtNiwgLTMsIC0yLCAtNSwgLTQsIC01LCAtNSwgLTIsIC00LCAtNiwgMTIsIC0yLCAtMywgLTcsIC02LCAtNCwgLTQsIC0yLCAtMywgLThdLFxuICAgICAgICAgICAgWzIsIC0yLCAxLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0yLCAtNCwgLTQsIC0xLCAtMywgLTQsIC0yLCA3LCAyLCAtNiwgLTMsIC0zLCAwLCAtMSwgLTEsIC04XSxcbiAgICAgICAgICAgIFswLCAtMiwgMCwgLTIsIC0yLCAtMSwgLTIsIC0zLCAtMywgLTIsIC0zLCAtMSwgLTEsIC00LCAtMywgMiwgOCwgLTUsIC0zLCAwLCAtMSwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTUsIC01LCAtNywgLTgsIC01LCAtNCwgLTYsIC02LCAtNCwgLTUsIC00LCAtNiwgLTMsIDAsIC03LCAtNiwgLTUsIDE2LCAzLCAtNSwgLTgsIC01LCAtNSwgLThdLFxuICAgICAgICAgICAgWy00LCAtNCwgLTQsIC02LCAtNSwgLTMsIC01LCAtNiwgMywgLTMsIC0yLCAtNCwgLTMsIDQsIC02LCAtMywgLTMsIDMsIDExLCAtMywgLTUsIC00LCAtMywgLThdLFxuICAgICAgICAgICAgWy0xLCAtNCwgLTUsIC02LCAtMiwgLTQsIC00LCAtNiwgLTUsIDQsIDEsIC00LCAxLCAtMiwgLTQsIC0zLCAwLCAtNSwgLTMsIDcsIC02LCAtNCwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTIsIDUsIDYsIC02LCAtMSwgMSwgLTIsIC0xLCAtNiwgLTcsIC0xLCAtNSwgLTYsIC00LCAwLCAtMSwgLTgsIC01LCAtNiwgNiwgMCwgLTMsIC04XSxcbiAgICAgICAgICAgIFstMiwgMCwgLTEsIDEsIC03LCA1LCA2LCAtNCwgMCwgLTYsIC01LCAxLCAtMywgLTYsIC0yLCAtMSwgLTIsIC01LCAtNCwgLTQsIDAsIDYsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTMsIC00LCAtMiwgLTIsIC0zLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0zLCAtMywgLTEsIC0xLCAtNSwgLTMsIC0yLCAtMywgLTEsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNOTAgPSBbWzUsIC0yLCAtMiwgLTMsIC0xLCAtMSwgLTEsIDAsIC0yLCAtMiwgLTIsIC0xLCAtMiwgLTMsIC0xLCAxLCAwLCAtNCwgLTMsIC0xLCAtMiwgLTEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTIsIDYsIC0xLCAtMywgLTUsIDEsIC0xLCAtMywgMCwgLTQsIC0zLCAyLCAtMiwgLTQsIC0zLCAtMSwgLTIsIC00LCAtMywgLTMsIC0yLCAwLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtMSwgNywgMSwgLTQsIDAsIC0xLCAtMSwgMCwgLTQsIC00LCAwLCAtMywgLTQsIC0zLCAwLCAwLCAtNSwgLTMsIC00LCA0LCAtMSwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMywgLTMsIDEsIDcsIC01LCAtMSwgMSwgLTIsIC0yLCAtNSwgLTUsIC0xLCAtNCwgLTUsIC0zLCAtMSwgLTIsIC02LCAtNCwgLTUsIDQsIDAsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC01LCAtNCwgLTUsIDksIC00LCAtNiwgLTQsIC01LCAtMiwgLTIsIC00LCAtMiwgLTMsIC00LCAtMiwgLTIsIC00LCAtNCwgLTIsIC00LCAtNSwgLTMsIC02XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgLTEsIC00LCA3LCAyLCAtMywgMSwgLTQsIC0zLCAxLCAwLCAtNCwgLTIsIC0xLCAtMSwgLTMsIC0zLCAtMywgLTEsIDQsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMSwgMSwgLTYsIDIsIDYsIC0zLCAtMSwgLTQsIC00LCAwLCAtMywgLTUsIC0yLCAtMSwgLTEsIC01LCAtNCwgLTMsIDAsIDQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbMCwgLTMsIC0xLCAtMiwgLTQsIC0zLCAtMywgNiwgLTMsIC01LCAtNSwgLTIsIC00LCAtNSwgLTMsIC0xLCAtMywgLTQsIC01LCAtNSwgLTIsIC0zLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAwLCAwLCAtMiwgLTUsIDEsIC0xLCAtMywgOCwgLTQsIC00LCAtMSwgLTMsIC0yLCAtMywgLTIsIC0yLCAtMywgMSwgLTQsIC0xLCAwLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtNCwgLTQsIC01LCAtMiwgLTQsIC00LCAtNSwgLTQsIDUsIDEsIC00LCAxLCAtMSwgLTQsIC0zLCAtMSwgLTQsIC0yLCAzLCAtNSwgLTQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtNCwgLTUsIC0yLCAtMywgLTQsIC01LCAtNCwgMSwgNSwgLTMsIDIsIDAsIC00LCAtMywgLTIsIC0zLCAtMiwgMCwgLTUsIC00LCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0xLCAyLCAwLCAtMSwgLTQsIDEsIDAsIC0yLCAtMSwgLTQsIC0zLCA2LCAtMiwgLTQsIC0yLCAtMSwgLTEsIC01LCAtMywgLTMsIC0xLCAxLCAtMSwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtMiwgLTMsIC00LCAtMiwgMCwgLTMsIC00LCAtMywgMSwgMiwgLTIsIDcsIC0xLCAtMywgLTIsIC0xLCAtMiwgLTIsIDAsIC00LCAtMiwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMywgLTQsIC00LCAtNSwgLTMsIC00LCAtNSwgLTUsIC0yLCAtMSwgMCwgLTQsIC0xLCA3LCAtNCwgLTMsIC0zLCAwLCAzLCAtMiwgLTQsIC00LCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0xLCAtMywgLTMsIC0zLCAtNCwgLTIsIC0yLCAtMywgLTMsIC00LCAtNCwgLTIsIC0zLCAtNCwgOCwgLTIsIC0yLCAtNSwgLTQsIC0zLCAtMywgLTIsIC0yLCAtNl0sXG4gICAgICAgICAgICBbMSwgLTEsIDAsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTIsIC0zLCAtMywgLTEsIC0yLCAtMywgLTIsIDUsIDEsIC00LCAtMywgLTIsIDAsIC0xLCAtMSwgLTZdLFxuICAgICAgICAgICAgWzAsIC0yLCAwLCAtMiwgLTIsIC0xLCAtMSwgLTMsIC0yLCAtMSwgLTIsIC0xLCAtMSwgLTMsIC0yLCAxLCA2LCAtNCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTQsIC00LCAtNSwgLTYsIC00LCAtMywgLTUsIC00LCAtMywgLTQsIC0zLCAtNSwgLTIsIDAsIC01LCAtNCwgLTQsIDExLCAyLCAtMywgLTYsIC00LCAtMywgLTZdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTMsIC00LCAtNCwgLTMsIC00LCAtNSwgMSwgLTIsIC0yLCAtMywgLTIsIDMsIC00LCAtMywgLTIsIDIsIDgsIC0zLCAtNCwgLTMsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtNCwgLTUsIC0yLCAtMywgLTMsIC01LCAtNCwgMywgMCwgLTMsIDAsIC0yLCAtMywgLTIsIC0xLCAtMywgLTMsIDUsIC00LCAtMywgLTIsIC02XSxcbiAgICAgICAgICAgIFstMiwgLTIsIDQsIDQsIC00LCAtMSwgMCwgLTIsIC0xLCAtNSwgLTUsIC0xLCAtNCwgLTQsIC0zLCAwLCAtMSwgLTYsIC00LCAtNCwgNCwgMCwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMSwgMCwgLTEsIDAsIC01LCA0LCA0LCAtMywgMCwgLTQsIC00LCAxLCAtMiwgLTQsIC0yLCAtMSwgLTEsIC00LCAtMywgLTMsIDAsIDQsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTIsIC0zLCAtMSwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMywgLTIsIC0yLCAtMiwgLTEsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAxXV07XG4gICAgICAgIHRoaXMuTlVDTEVPVElERVMgPSBbWzEsIC0xLCAtMSwgLTFdLFxuICAgICAgICAgICAgWy0xLCAxLCAtMSwgLTFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgMSwgLTFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTEsIDFdXTtcbiAgICAgICAgdGhpcy5QQU0zMCA9IFtbNiwgLTcsIC00LCAtMywgLTYsIC00LCAtMiwgLTIsIC03LCAtNSwgLTYsIC03LCAtNSwgLTgsIC0yLCAwLCAtMSwgLTEzLCAtOCwgLTIsIC0zLCAtMywgLTMsIC0xN10sXG4gICAgICAgICAgICBbLTcsIDgsIC02LCAtMTAsIC04LCAtMiwgLTksIC05LCAtMiwgLTUsIC04LCAwLCAtNCwgLTksIC00LCAtMywgLTYsIC0yLCAtMTAsIC04LCAtNywgLTQsIC02LCAtMTddLFxuICAgICAgICAgICAgWy00LCAtNiwgOCwgMiwgLTExLCAtMywgLTIsIC0zLCAwLCAtNSwgLTcsIC0xLCAtOSwgLTksIC02LCAwLCAtMiwgLTgsIC00LCAtOCwgNiwgLTMsIC0zLCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtMTAsIDIsIDgsIC0xNCwgLTIsIDIsIC0zLCAtNCwgLTcsIC0xMiwgLTQsIC0xMSwgLTE1LCAtOCwgLTQsIC01LCAtMTUsIC0xMSwgLTgsIDYsIDEsIC01LCAtMTddLFxuICAgICAgICAgICAgWy02LCAtOCwgLTExLCAtMTQsIDEwLCAtMTQsIC0xNCwgLTksIC03LCAtNiwgLTE1LCAtMTQsIC0xMywgLTEzLCAtOCwgLTMsIC04LCAtMTUsIC00LCAtNiwgLTEyLCAtMTQsIC05LCAtMTddLFxuICAgICAgICAgICAgWy00LCAtMiwgLTMsIC0yLCAtMTQsIDgsIDEsIC03LCAxLCAtOCwgLTUsIC0zLCAtNCwgLTEzLCAtMywgLTUsIC01LCAtMTMsIC0xMiwgLTcsIC0zLCA2LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMiwgLTksIC0yLCAyLCAtMTQsIDEsIDgsIC00LCAtNSwgLTUsIC05LCAtNCwgLTcsIC0xNCwgLTUsIC00LCAtNiwgLTE3LCAtOCwgLTYsIDEsIDYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtOSwgLTMsIC0zLCAtOSwgLTcsIC00LCA2LCAtOSwgLTExLCAtMTAsIC03LCAtOCwgLTksIC02LCAtMiwgLTYsIC0xNSwgLTE0LCAtNSwgLTMsIC01LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstNywgLTIsIDAsIC00LCAtNywgMSwgLTUsIC05LCA5LCAtOSwgLTYsIC02LCAtMTAsIC02LCAtNCwgLTYsIC03LCAtNywgLTMsIC02LCAtMSwgLTEsIC01LCAtMTddLFxuICAgICAgICAgICAgWy01LCAtNSwgLTUsIC03LCAtNiwgLTgsIC01LCAtMTEsIC05LCA4LCAtMSwgLTYsIC0xLCAtMiwgLTgsIC03LCAtMiwgLTE0LCAtNiwgMiwgLTYsIC02LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstNiwgLTgsIC03LCAtMTIsIC0xNSwgLTUsIC05LCAtMTAsIC02LCAtMSwgNywgLTgsIDEsIC0zLCAtNywgLTgsIC03LCAtNiwgLTcsIC0yLCAtOSwgLTcsIC02LCAtMTddLFxuICAgICAgICAgICAgWy03LCAwLCAtMSwgLTQsIC0xNCwgLTMsIC00LCAtNywgLTYsIC02LCAtOCwgNywgLTIsIC0xNCwgLTYsIC00LCAtMywgLTEyLCAtOSwgLTksIC0yLCAtNCwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTUsIC00LCAtOSwgLTExLCAtMTMsIC00LCAtNywgLTgsIC0xMCwgLTEsIDEsIC0yLCAxMSwgLTQsIC04LCAtNSwgLTQsIC0xMywgLTExLCAtMSwgLTEwLCAtNSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTgsIC05LCAtOSwgLTE1LCAtMTMsIC0xMywgLTE0LCAtOSwgLTYsIC0yLCAtMywgLTE0LCAtNCwgOSwgLTEwLCAtNiwgLTksIC00LCAyLCAtOCwgLTEwLCAtMTMsIC04LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtNCwgLTYsIC04LCAtOCwgLTMsIC01LCAtNiwgLTQsIC04LCAtNywgLTYsIC04LCAtMTAsIDgsIC0yLCAtNCwgLTE0LCAtMTMsIC02LCAtNywgLTQsIC01LCAtMTddLFxuICAgICAgICAgICAgWzAsIC0zLCAwLCAtNCwgLTMsIC01LCAtNCwgLTIsIC02LCAtNywgLTgsIC00LCAtNSwgLTYsIC0yLCA2LCAwLCAtNSwgLTcsIC02LCAtMSwgLTUsIC0zLCAtMTddLFxuICAgICAgICAgICAgWy0xLCAtNiwgLTIsIC01LCAtOCwgLTUsIC02LCAtNiwgLTcsIC0yLCAtNywgLTMsIC00LCAtOSwgLTQsIDAsIDcsIC0xMywgLTYsIC0zLCAtMywgLTYsIC00LCAtMTddLFxuICAgICAgICAgICAgWy0xMywgLTIsIC04LCAtMTUsIC0xNSwgLTEzLCAtMTcsIC0xNSwgLTcsIC0xNCwgLTYsIC0xMiwgLTEzLCAtNCwgLTE0LCAtNSwgLTEzLCAxMywgLTUsIC0xNSwgLTEwLCAtMTQsIC0xMSwgLTE3XSxcbiAgICAgICAgICAgIFstOCwgLTEwLCAtNCwgLTExLCAtNCwgLTEyLCAtOCwgLTE0LCAtMywgLTYsIC03LCAtOSwgLTExLCAyLCAtMTMsIC03LCAtNiwgLTUsIDEwLCAtNywgLTYsIC05LCAtNywgLTE3XSxcbiAgICAgICAgICAgIFstMiwgLTgsIC04LCAtOCwgLTYsIC03LCAtNiwgLTUsIC02LCAyLCAtMiwgLTksIC0xLCAtOCwgLTYsIC02LCAtMywgLTE1LCAtNywgNywgLTgsIC02LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMywgLTcsIDYsIDYsIC0xMiwgLTMsIDEsIC0zLCAtMSwgLTYsIC05LCAtMiwgLTEwLCAtMTAsIC03LCAtMSwgLTMsIC0xMCwgLTYsIC04LCA2LCAwLCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMywgLTQsIC0zLCAxLCAtMTQsIDYsIDYsIC01LCAtMSwgLTYsIC03LCAtNCwgLTUsIC0xMywgLTQsIC01LCAtNiwgLTE0LCAtOSwgLTYsIDAsIDYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtNiwgLTMsIC01LCAtOSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNiwgLTUsIC01LCAtOCwgLTUsIC0zLCAtNCwgLTExLCAtNywgLTUsIC01LCAtNSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIDFdXTtcbiAgICAgICAgdGhpcy5QQU03MCA9IFtbNSwgLTQsIC0yLCAtMSwgLTQsIC0yLCAtMSwgMCwgLTQsIC0yLCAtNCwgLTQsIC0zLCAtNiwgMCwgMSwgMSwgLTksIC01LCAtMSwgLTEsIC0xLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstNCwgOCwgLTMsIC02LCAtNSwgMCwgLTUsIC02LCAwLCAtMywgLTYsIDIsIC0yLCAtNywgLTIsIC0xLCAtNCwgMCwgLTcsIC01LCAtNCwgLTIsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAtMywgNiwgMywgLTcsIC0xLCAwLCAtMSwgMSwgLTMsIC01LCAwLCAtNSwgLTYsIC0zLCAxLCAwLCAtNiwgLTMsIC01LCA1LCAtMSwgLTIsIC0xMV0sXG4gICAgICAgICAgICBbLTEsIC02LCAzLCA2LCAtOSwgMCwgMywgLTEsIC0xLCAtNSwgLTgsIC0yLCAtNywgLTEwLCAtNCwgLTEsIC0yLCAtMTAsIC03LCAtNSwgNSwgMiwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTQsIC01LCAtNywgLTksIDksIC05LCAtOSwgLTYsIC01LCAtNCwgLTEwLCAtOSwgLTksIC04LCAtNSwgLTEsIC01LCAtMTEsIC0yLCAtNCwgLTgsIC05LCAtNiwgLTExXSxcbiAgICAgICAgICAgIFstMiwgMCwgLTEsIDAsIC05LCA3LCAyLCAtNCwgMiwgLTUsIC0zLCAtMSwgLTIsIC05LCAtMSwgLTMsIC0zLCAtOCwgLTgsIC00LCAtMSwgNSwgLTIsIC0xMV0sXG4gICAgICAgICAgICBbLTEsIC01LCAwLCAzLCAtOSwgMiwgNiwgLTIsIC0yLCAtNCwgLTYsIC0yLCAtNCwgLTksIC0zLCAtMiwgLTMsIC0xMSwgLTYsIC00LCAyLCA1LCAtMywgLTExXSxcbiAgICAgICAgICAgIFswLCAtNiwgLTEsIC0xLCAtNiwgLTQsIC0yLCA2LCAtNiwgLTYsIC03LCAtNSwgLTYsIC03LCAtMywgMCwgLTMsIC0xMCwgLTksIC0zLCAtMSwgLTMsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy00LCAwLCAxLCAtMSwgLTUsIDIsIC0yLCAtNiwgOCwgLTYsIC00LCAtMywgLTYsIC00LCAtMiwgLTMsIC00LCAtNSwgLTEsIC00LCAwLCAxLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstMiwgLTMsIC0zLCAtNSwgLTQsIC01LCAtNCwgLTYsIC02LCA3LCAxLCAtNCwgMSwgMCwgLTUsIC00LCAtMSwgLTksIC00LCAzLCAtNCwgLTQsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy00LCAtNiwgLTUsIC04LCAtMTAsIC0zLCAtNiwgLTcsIC00LCAxLCA2LCAtNSwgMiwgLTEsIC01LCAtNiwgLTQsIC00LCAtNCwgMCwgLTYsIC00LCAtNCwgLTExXSxcbiAgICAgICAgICAgIFstNCwgMiwgMCwgLTIsIC05LCAtMSwgLTIsIC01LCAtMywgLTQsIC01LCA2LCAwLCAtOSwgLTQsIC0yLCAtMSwgLTcsIC03LCAtNiwgLTEsIC0yLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstMywgLTIsIC01LCAtNywgLTksIC0yLCAtNCwgLTYsIC02LCAxLCAyLCAwLCAxMCwgLTIsIC01LCAtMywgLTIsIC04LCAtNywgMCwgLTYsIC0zLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstNiwgLTcsIC02LCAtMTAsIC04LCAtOSwgLTksIC03LCAtNCwgMCwgLTEsIC05LCAtMiwgOCwgLTcsIC00LCAtNiwgLTIsIDQsIC01LCAtNywgLTksIC01LCAtMTFdLFxuICAgICAgICAgICAgWzAsIC0yLCAtMywgLTQsIC01LCAtMSwgLTMsIC0zLCAtMiwgLTUsIC01LCAtNCwgLTUsIC03LCA3LCAwLCAtMiwgLTksIC05LCAtMywgLTQsIC0yLCAtMywgLTExXSxcbiAgICAgICAgICAgIFsxLCAtMSwgMSwgLTEsIC0xLCAtMywgLTIsIDAsIC0zLCAtNCwgLTYsIC0yLCAtMywgLTQsIDAsIDUsIDIsIC0zLCAtNSwgLTMsIDAsIC0yLCAtMSwgLTExXSxcbiAgICAgICAgICAgIFsxLCAtNCwgMCwgLTIsIC01LCAtMywgLTMsIC0zLCAtNCwgLTEsIC00LCAtMSwgLTIsIC02LCAtMiwgMiwgNiwgLTgsIC00LCAtMSwgLTEsIC0zLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstOSwgMCwgLTYsIC0xMCwgLTExLCAtOCwgLTExLCAtMTAsIC01LCAtOSwgLTQsIC03LCAtOCwgLTIsIC05LCAtMywgLTgsIDEzLCAtMywgLTEwLCAtNywgLTEwLCAtNywgLTExXSxcbiAgICAgICAgICAgIFstNSwgLTcsIC0zLCAtNywgLTIsIC04LCAtNiwgLTksIC0xLCAtNCwgLTQsIC03LCAtNywgNCwgLTksIC01LCAtNCwgLTMsIDksIC01LCAtNCwgLTcsIC01LCAtMTFdLFxuICAgICAgICAgICAgWy0xLCAtNSwgLTUsIC01LCAtNCwgLTQsIC00LCAtMywgLTQsIDMsIDAsIC02LCAwLCAtNSwgLTMsIC0zLCAtMSwgLTEwLCAtNSwgNiwgLTUsIC00LCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTQsIDUsIDUsIC04LCAtMSwgMiwgLTEsIDAsIC00LCAtNiwgLTEsIC02LCAtNywgLTQsIDAsIC0xLCAtNywgLTQsIC01LCA1LCAxLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0xLCAyLCAtOSwgNSwgNSwgLTMsIDEsIC00LCAtNCwgLTIsIC0zLCAtOSwgLTIsIC0yLCAtMywgLTEwLCAtNywgLTQsIDEsIDUsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTIsIC0zLCAtNiwgLTIsIC0zLCAtMywgLTMsIC0zLCAtNCwgLTMsIC0zLCAtNSwgLTMsIC0xLCAtMiwgLTcsIC01LCAtMiwgLTIsIC0zLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgMV1dO1xuICAgICAgICB0aGlzLlBBTTI1MCA9IFtbMiwgLTIsIDAsIDAsIC0yLCAwLCAwLCAxLCAtMSwgLTEsIC0yLCAtMSwgLTEsIC0zLCAxLCAxLCAxLCAtNiwgLTMsIDAsIDAsIDAsIDAsIC04XSxcbiAgICAgICAgICAgIFstMiwgNiwgMCwgLTEsIC00LCAxLCAtMSwgLTMsIDIsIC0yLCAtMywgMywgMCwgLTQsIDAsIDAsIC0xLCAyLCAtNCwgLTIsIC0xLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIDAsIDIsIDIsIC00LCAxLCAxLCAwLCAyLCAtMiwgLTMsIDEsIC0yLCAtMywgMCwgMSwgMCwgLTQsIC0yLCAtMiwgMiwgMSwgMCwgLThdLFxuICAgICAgICAgICAgWzAsIC0xLCAyLCA0LCAtNSwgMiwgMywgMSwgMSwgLTIsIC00LCAwLCAtMywgLTYsIC0xLCAwLCAwLCAtNywgLTQsIC0yLCAzLCAzLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0yLCAtNCwgLTQsIC01LCAxMiwgLTUsIC01LCAtMywgLTMsIC0yLCAtNiwgLTUsIC01LCAtNCwgLTMsIDAsIC0yLCAtOCwgMCwgLTIsIC00LCAtNSwgLTMsIC04XSxcbiAgICAgICAgICAgIFswLCAxLCAxLCAyLCAtNSwgNCwgMiwgLTEsIDMsIC0yLCAtMiwgMSwgLTEsIC01LCAwLCAtMSwgLTEsIC01LCAtNCwgLTIsIDEsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDEsIDMsIC01LCAyLCA0LCAwLCAxLCAtMiwgLTMsIDAsIC0yLCAtNSwgLTEsIDAsIDAsIC03LCAtNCwgLTIsIDMsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMSwgLTMsIDAsIDEsIC0zLCAtMSwgMCwgNSwgLTIsIC0zLCAtNCwgLTIsIC0zLCAtNSwgMCwgMSwgMCwgLTcsIC01LCAtMSwgMCwgMCwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMSwgMiwgMiwgMSwgLTMsIDMsIDEsIC0yLCA2LCAtMiwgLTIsIDAsIC0yLCAtMiwgMCwgLTEsIC0xLCAtMywgMCwgLTIsIDEsIDIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0zLCAtMiwgNSwgMiwgLTIsIDIsIDEsIC0yLCAtMSwgMCwgLTUsIC0xLCA0LCAtMiwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtMywgLTQsIC02LCAtMiwgLTMsIC00LCAtMiwgMiwgNiwgLTMsIDQsIDIsIC0zLCAtMywgLTIsIC0yLCAtMSwgMiwgLTMsIC0zLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0xLCAzLCAxLCAwLCAtNSwgMSwgMCwgLTIsIDAsIC0yLCAtMywgNSwgMCwgLTUsIC0xLCAwLCAwLCAtMywgLTQsIC0yLCAxLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0xLCAwLCAtMiwgLTMsIC01LCAtMSwgLTIsIC0zLCAtMiwgMiwgNCwgMCwgNiwgMCwgLTIsIC0yLCAtMSwgLTQsIC0yLCAyLCAtMiwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC00LCAtMywgLTYsIC00LCAtNSwgLTUsIC01LCAtMiwgMSwgMiwgLTUsIDAsIDksIC01LCAtMywgLTMsIDAsIDcsIC0xLCAtNCwgLTUsIC0yLCAtOF0sXG4gICAgICAgICAgICBbMSwgMCwgMCwgLTEsIC0zLCAwLCAtMSwgMCwgMCwgLTIsIC0zLCAtMSwgLTIsIC01LCA2LCAxLCAwLCAtNiwgLTUsIC0xLCAtMSwgMCwgLTEsIC04XSxcbiAgICAgICAgICAgIFsxLCAwLCAxLCAwLCAwLCAtMSwgMCwgMSwgLTEsIC0xLCAtMywgMCwgLTIsIC0zLCAxLCAyLCAxLCAtMiwgLTMsIC0xLCAwLCAwLCAwLCAtOF0sXG4gICAgICAgICAgICBbMSwgLTEsIDAsIDAsIC0yLCAtMSwgMCwgMCwgLTEsIDAsIC0yLCAwLCAtMSwgLTMsIDAsIDEsIDMsIC01LCAtMywgMCwgMCwgLTEsIDAsIC04XSxcbiAgICAgICAgICAgIFstNiwgMiwgLTQsIC03LCAtOCwgLTUsIC03LCAtNywgLTMsIC01LCAtMiwgLTMsIC00LCAwLCAtNiwgLTIsIC01LCAxNywgMCwgLTYsIC01LCAtNiwgLTQsIC04XSxcbiAgICAgICAgICAgIFstMywgLTQsIC0yLCAtNCwgMCwgLTQsIC00LCAtNSwgMCwgLTEsIC0xLCAtNCwgLTIsIDcsIC01LCAtMywgLTMsIDAsIDEwLCAtMiwgLTMsIC00LCAtMiwgLThdLFxuICAgICAgICAgICAgWzAsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0xLCAtMiwgNCwgMiwgLTIsIDIsIC0xLCAtMSwgLTEsIDAsIC02LCAtMiwgNCwgLTIsIC0yLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIC0xLCAyLCAzLCAtNCwgMSwgMywgMCwgMSwgLTIsIC0zLCAxLCAtMiwgLTQsIC0xLCAwLCAwLCAtNSwgLTMsIC0yLCAzLCAyLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIDAsIDEsIDMsIC01LCAzLCAzLCAwLCAyLCAtMiwgLTMsIDAsIC0yLCAtNSwgMCwgMCwgLTEsIC02LCAtNCwgLTIsIDIsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDAsIC0xLCAtMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDAsIDAsIC00LCAtMiwgLTEsIC0xLCAtMSwgLTEsIC04XSxcbiAgICAgICAgICAgIFstOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIDFdXTtcbiAgICAgICAgdGhpcy5TQ0hORUlERVIgPSBbWzExLjYsIC0yLjcsIDkuNywgLTEuNywgLTIuNywgLTYuNCwgLTMuOSwgLTUuNiwgNS4xLCAtNS4wLCAzLjYsIC00LjIsIC02LjMsIC0xMy4wLCAtNy4xLCAtMTEuNSwgMC40LCAtNi4wLCAtMS45LCAtNS4zLCAtOC41LCAtMTEuMiwgLTguOSwgLTEwLjgsIDIuMSwgMC4wLCAxLjQsIDAuMiwgLTEwLjIsIC0xMy41LCAtMTMuMCwgLTEyLjUsIC0yLjYsIC04LjUsIC01LjAsIC04LjEsIC02LjMsIC05LjksIC03LjUsIC05LjAsIC03LjEsIC0xMC4yLCAtOC4yLCAtOS4yLCAtOC4yLCAtMTIuNSwgLTExLjEsIC0xMS40LCAtNTAuMCwgLTE0LjgsIC01MC4wLCAtMTMuOCwgLTcuMywgLTEwLjEsIC04LjQsIC05LjEsIC01MC4wLCAtMTMuMCwgLTEzLjUsIC0xMi40LCAtMTAuNywgLTE4LjEsIC0xMS44LCAtMTcuMixdLFxuICAgICAgICAgICAgWy0yLjcsIDEzLjAsIC0zLjMsIDEwLjksIC0zLjUsIC0wLjQsIC0zLjMsIC0xLjgsIC01LjQsIDQuNiwgLTUuNSwgMy4wLCAtMTAuMiwgLTcuOSwgLTkuOSwgLTkuNiwgLTUuMCwgMC41LCAtNS41LCAtMS4wLCAtMTAuMywgLTguMSwgLTkuNCwgLTkuNiwgLTguMSwgLTUuMCwgLTcuMywgLTYuMywgLTEzLjQsIC0xMS4zLCAtMTQuNCwgLTEyLjksIC02LjMsIDAuOCwgLTYuNCwgLTEuMSwgLTcuNCwgLTUuMCwgLTYuMiwgLTYuNSwgLTUuNiwgLTEuNiwgLTQuNywgLTMuMCwgLTEwLjgsIC04LjcsIC0xMS45LCAtMTAuMCwgLTUwLjAsIC02LjIsIC01MC4wLCAtNy41LCAtNi4zLCAtNC4zLCAtNi4yLCAtNS40LCAtNTAuMCwgLTcuMCwgLTE2LjMsIC04LjIsIC0xMy4yLCAtMTIuMywgLTEzLjEsIC0xMy4zLF0sXG4gICAgICAgICAgICBbOS43LCAtMy4zLCAxMS42LCAtMi44LCAtNC41LCAtNi43LCAtMy4xLCAtNi45LCAzLjMsIC01LjUsIDQuOCwgLTUuMSwgLTguOSwgLTEzLjIsIC01LjcsIC0xMi42LCAtMS41LCAtNi4xLCAtMC42LCAtNi4xLCAtMTAuMCwgLTExLjgsIC04LjYsIC0xMS45LCAxLjIsIDAuNSwgMi4yLCAwLjEsIC0xMS44LCAtMTQuMCwgLTExLjksIC0xMy40LCAtNC45LCAtOS4xLCAtMy40LCAtOC45LCAtOC4wLCAtMTAuMCwgLTcuMiwgLTEwLjAsIC05LjEsIC0xMC4yLCAtNy4xLCAtOS45LCAtMTAuMSwgLTEzLjAsIC0xMC42LCAtMTIuNywgLTUwLjAsIC0xNC45LCAtNTAuMCwgLTE0LjQsIC04LjksIC0xMC44LCAtOC45LCAtMTAuNCwgLTUwLjAsIC0xMy4xLCAtMTEuOCwgLTEzLjAsIC0xMi40LCAtMTkuNCwgLTExLjUsIC0xNy44LF0sXG4gICAgICAgICAgICBbLTEuNywgMTAuOSwgLTIuOCwgMTIuOSwgLTIuNywgLTIuMiwgLTIuOCwgMC4yLCAtNC44LCAyLjksIC01LjIsIDUuMiwgLTkuMSwgLTkuNSwgLTkuMCwgLTcuMCwgLTQuMCwgLTEuMCwgLTUuMCwgMS4wLCAtOS4wLCAtOC44LCAtOC45LCAtNy43LCAtNy4wLCAtNi44LCAtNy4xLCAtNC4zLCAtMTIuNCwgLTEyLjksIC0xMy45LCAtMTAuMCwgLTQuOSwgLTAuNywgLTUuNiwgMS40LCAtNi4wLCAtNi41LCAtNi4yLCAtNC44LCAtNS4xLCAtMy4yLCAtNS4wLCAtMS4yLCAtOS44LCAtOS45LCAtMTEuMywgLTguMiwgLTUwLjAsIC03LjYsIC01MC4wLCAtNS4xLCAtNS41LCAtNS44LCAtNS45LCAtNC4yLCAtNTAuMCwgLTguMywgLTE1LjUsIC01LjksIC0xMS42LCAtMTQuMiwgLTEyLjAsIC0xMS42LF0sXG4gICAgICAgICAgICBbLTIuNywgLTMuNSwgLTQuNSwgLTIuNywgMTEuNywgOS4wLCAxMC42LCA5LjYsIC0zLjIsIC0wLjcsIC01LjEsIC0wLjQsIDAuNywgLTQuNiwgLTAuNCwgLTMuNiwgLTQuOCwgLTguOSwgLTYuNSwgLTcuOCwgLTEuNCwgLTQuMSwgLTIuOSwgLTMuMywgLTguMCwgLTkuMSwgLTguMCwgLTguMiwgLTYuMCwgLTkuMywgLTcuNywgLTguNSwgLTYuNCwgLTEwLjEsIC03LjUsIC04LjYsIDIuOCwgLTAuNywgMC45LCAwLjEsIC01LjksIC03LjMsIC02LjUsIC02LjUsIC0wLjQsIC0zLjksIC0yLjYsIC0zLjEsIC01MC4wLCAtMTQuNiwgLTUwLjAsIC0xMi42LCAyLjksIDAuMSwgMS44LCAxLjAsIC01MC4wLCAtOS4yLCAtMTMuNiwgLTcuNywgLTQuOCwgLTEyLjIsIC02LjIsIC0xMS4wLF0sXG4gICAgICAgICAgICBbLTYuNCwgLTAuNCwgLTYuNywgLTIuMiwgOS4wLCAxMi4zLCA5LjgsIDkuNiwgLTcuMSwgMi40LCAtNy4yLCAwLjMsIC0yLjksIC0xLjIsIC0zLjAsIC0zLjMsIC03LjYsIC02LjcsIC04LjEsIC03LjksIC00LjksIC0xLjksIC00LjUsIC0zLjgsIC05LjUsIC03LjgsIC05LjMsIC04LjksIC05LjQsIC03LjEsIC05LjAsIC05LjAsIC05LjQsIC03LjUsIC05LjMsIC05LjIsIC0wLjcsIDIuNiwgMC4yLCAtMC4xLCAtOC4wLCAtNC42LCAtNy43LCAtNi4xLCAtMy42LCAtMS4wLCAtNC4xLCAtMy4xLCAtNTAuMCwgLTExLjYsIC01MC4wLCAtMTEuNiwgMC4yLCAyLjMsIDAuNCwgMC41LCAtNTAuMCwgLTYuNSwgLTE1LjMsIC03LjgsIC04LjQsIC05LjUsIC04LjMsIC0xMS4xLF0sXG4gICAgICAgICAgICBbLTMuOSwgLTMuMywgLTMuMSwgLTIuOCwgMTAuNiwgOS44LCAxMi4yLCA5LjgsIC00LjksIDAuMSwgLTMuNiwgLTAuMiwgLTEuNywgLTQuMSwgMC45LCAtMy41LCAtNS45LCAtOC45LCAtNS42LCAtOC41LCAtMy45LCAtMy45LCAtMi4yLCAtNC41LCAtNy4zLCAtNy41LCAtNi40LCAtOC41LCAtNy4xLCAtOC4yLCAtNi43LCAtNy44LCAtNy45LCAtOS4xLCAtNy4xLCAtOS40LCAwLjksIC0wLjIsIDIuNSwgLTAuMywgLTYuOSwgLTYuNSwgLTUuNSwgLTYuOCwgLTEuNywgLTMuNCwgLTEuNywgLTIuOCwgLTUwLjAsIC0xMy4wLCAtNTAuMCwgLTExLjUsIDEuNSwgMC43LCAyLjcsIDAuNiwgLTUwLjAsIC04LjksIC0xMi4xLCAtNy40LCAtNi4xLCAtMTEuNSwgLTUuNCwgLTEwLjQsXSxcbiAgICAgICAgICAgIFstNS42LCAtMS44LCAtNi45LCAwLjIsIDkuNiwgOS42LCA5LjgsIDExLjYsIC02LjYsIDAuOSwgLTcuMiwgMi41LCAtMi4zLCAtMy40LCAtMi4zLCAtMC42LCAtNi41LCAtOC4yLCAtOC4wLCAtNi4zLCAtMy43LCAtMy41LCAtMy45LCAtMS42LCAtOS45LCAtOC45LCAtOS42LCAtNy4wLCAtOC42LCAtOC45LCAtOC44LCAtNi44LCAtOC42LCAtOC4yLCAtOC44LCAtNi44LCAwLjMsIDAuMSwgMC4yLCAyLjQsIC03LjQsIC02LjIsIC02LjksIC00LjQsIC0yLjksIC0yLjksIC0zLjUsIC0wLjksIC01MC4wLCAtMTIuMiwgLTUwLjAsIC0xMC4xLCAxLjIsIDAuNiwgMS4yLCAyLjQsIC01MC4wLCAtNy42LCAtMTYuMSwgLTUuOCwgLTcuMiwgLTEwLjgsIC03LjQsIC05LjAsXSxcbiAgICAgICAgICAgIFs1LjEsIC01LjQsIDMuMywgLTQuOCwgLTMuMiwgLTcuMSwgLTQuOSwgLTYuNiwgMTMuMywgLTIuOCwgMTEuMiwgLTEuOSwgLTUuNywgLTEyLjUsIC03LjIsIC0xMS42LCAtMC43LCAtNC44LCAtMy4xLCAtNC4zLCAtMTAuMCwgLTExLjYsIC04LjgsIC0xMS43LCAxMC41LCA3LjcsIDkuMSwgOC41LCAtOS44LCAtMTIuNywgLTExLjcsIC0xMS44LCAtNi4zLCAtMTEuNCwgLTguOCwgLTExLjAsIC03LjUsIC0xMC4zLCAtOC4zLCAtOS45LCAtMS45LCAtNi43LCAtNC4xLCAtNi40LCAtNy45LCAtMTIuNSwgLTExLjQsIC0xMS43LCAtNTAuMCwgLTE0LjAsIC01MC4wLCAtMTMuMiwgLTguNSwgLTEwLjQsIC05LjEsIC05LjYsIC01MC4wLCAtOS44LCAtNy43LCAtOC44LCAtMTAuMywgLTE3LjksIC0xMS44LCAtMTYuMCxdLFxuICAgICAgICAgICAgWy01LjAsIDQuNiwgLTUuNSwgMi45LCAtMC43LCAyLjQsIDAuMSwgMC45LCAtMi44LCAxMi44LCAtMi42LCAxMS4wLCAtOC40LCAtNi4zLCAtOC4zLCAtNy43LCAtNi4xLCAtMi45LCAtNi41LCAtNC4yLCAtOC41LCAtNS45LCAtNy41LCAtNy43LCAtNS41LCAtMi40LCAtNS41LCAtNC4xLCAtMTIuOSwgLTEwLjMsIC0xMi43LCAtMTEuMywgLTcuNCwgLTMuMSwgLTcuNCwgLTQuOSwgLTQuNCwgLTEuOCwgLTMuNSwgLTMuNSwgLTEuNiwgMy4wLCAtMC44LCAwLjksIC04LjQsIC02LjMsIC05LjYsIC03LjMsIC01MC4wLCAtOS4wLCAtNTAuMCwgLTkuNywgLTIuMywgLTAuMiwgLTEuMiwgLTEuNSwgLTUwLjAsIC0wLjcsIC0xMy4zLCAtMi4wLCAtMTEuOCwgLTExLjksIC0xMi4zLCAtMTIuNyxdLFxuICAgICAgICAgICAgWzMuNiwgLTUuNSwgNC44LCAtNS4yLCAtNS4xLCAtNy4yLCAtMy42LCAtNy4yLCAxMS4yLCAtMi42LCAxMy40LCAtMi4xLCAtNy43LCAtMTIuNSwgLTUuMywgLTExLjksIC0yLjIsIC00LjQsIC0xLjksIC00LjgsIC0xMC4yLCAtMTEuNSwgLTguMSwgLTEyLjAsIDkuMywgOC4yLCAxMC4wLCA4LjAsIC0xMC44LCAtMTEuOSwgLTEwLjcsIC0xMi40LCAtOC4yLCAtMTEuOCwgLTYuOSwgLTExLjUsIC04LjQsIC05LjksIC03LjEsIC0xMC42LCAtNC43LCAtNi44LCAtMS4yLCAtNy4wLCAtOS44LCAtMTEuNiwgLTkuNiwgLTEyLjEsIC01MC4wLCAtMTQuMSwgLTUwLjAsIC0xMi43LCAtMTAuMCwgLTEwLjgsIC04LjgsIC0xMC41LCAtNTAuMCwgLTkuMiwgLTQuMiwgLTkuMywgLTExLjAsIC0xOC4yLCAtMTEuMSwgLTE2LjEsXSxcbiAgICAgICAgICAgIFstNC4yLCAzLjAsIC01LjEsIDUuMiwgLTAuNCwgMC4zLCAtMC4yLCAyLjUsIC0xLjksIDExLjAsIC0yLjEsIDEzLjIsIC03LjYsIC04LjUsIC04LjAsIC01LjMsIC01LjYsIC00LjUsIC02LjgsIC0yLjQsIC03LjgsIC03LjksIC03LjksIC02LjIsIC01LjcsIC01LjEsIC01LjQsIC0yLjEsIC0xMi40LCAtMTIuMywgLTEzLjEsIC0xMC4xLCAtNi42LCAtNC40LCAtNi45LCAtMi42LCAtMy42LCAtMy44LCAtMy43LCAtMi4wLCAtMS40LCAwLjgsIC0wLjksIDMuMCwgLTguMiwgLTguMSwgLTkuMiwgLTUuOCwgLTUwLjAsIC0xMC4xLCAtNTAuMCwgLTcuNCwgLTEuNywgLTIuMCwgLTEuNSwgLTAuNSwgLTUwLjAsIC0yLjEsIC0xMi42LCAtMC40LCAtMTEuNiwgLTEzLjksIC0xMS40LCAtMTEuMSxdLFxuICAgICAgICAgICAgWy02LjMsIC0xMC4yLCAtOC45LCAtOS4xLCAwLjcsIC0yLjksIC0xLjcsIC0yLjMsIC01LjcsIC04LjQsIC03LjcsIC03LjYsIDEzLjIsIDkuNiwgMy41LCA5LjcsIC04LjcsIC0xMi40LCAtMTAuNywgLTEwLjcsIC03LjgsIC0xMC4yLCAtOC44LCAtOS42LCAtOS41LCAtMTEuOSwgLTEwLjksIC0xMC41LCAyLjMsIC0wLjQsIC0wLjIsIC0wLjMsIC05LjcsIC0xNS41LCAtMTEuNCwgLTEzLjcsIC0zLjAsIC02LjQsIC00LjEsIC01LjQsIC05LjYsIC0xMS45LCAtMTAuNSwgLTExLjgsIDYuMiwgMy4zLCAzLjcsIDMuNiwgLTUwLjAsIC0xMy42LCAtNTAuMCwgLTExLjksIC01LjYsIC04LjgsIC03LjIsIC04LjksIC01MC4wLCAtMTIuNCwgLTE0LjEsIC0xMS42LCAyLjgsIC02LjQsIDAuNSwgLTUuMixdLFxuICAgICAgICAgICAgWy0xMy4wLCAtNy45LCAtMTMuMiwgLTkuNSwgLTQuNiwgLTEuMiwgLTQuMSwgLTMuNCwgLTEyLjUsIC02LjMsIC0xMi41LCAtOC41LCA5LjYsIDEyLjcsIDAuMiwgMTAuNSwgLTEyLjQsIC0xMS42LCAtMTMuMiwgLTEyLjAsIC0xMi40LCAtMTAuMSwgLTExLjYsIC0xMi4wLCAtMTUuMSwgLTEzLjEsIC0xNC4zLCAtMTMuNCwgLTEuNCwgMS40LCAtMS42LCAtMC41LCAtMTQuOSwgLTE0LjMsIC0xNS4yLCAtMTYuOCwgLTcuNywgLTQuNywgLTYuMywgLTYuNiwgLTE0LjYsIC0xMC44LCAtMTIuOCwgLTEzLjAsIDIuMywgNi4wLCAyLjUsIDMuNiwgLTUwLjAsIC0xMS4yLCAtNTAuMCwgLTExLjksIC0xMC41LCAtOS4yLCAtMTAuNSwgLTEwLjUsIC01MC4wLCAtMTAuMywgLTE2LjIsIC0xMS4zLCAtMS43LCAtMy43LCAtMi41LCAtNS40LF0sXG4gICAgICAgICAgICBbLTcuMSwgLTkuOSwgLTUuNywgLTkuMCwgLTAuNCwgLTMuMCwgMC45LCAtMi4zLCAtNy4yLCAtOC4zLCAtNS4zLCAtOC4wLCAzLjUsIDAuMiwgMTQuMywgMS4wLCAtNy4zLCAtMTEuMiwgLTYuOSwgLTkuNywgLTguNSwgLTEwLjIsIC03LjcsIC05LjgsIC0xMC4wLCAtMTAuNCwgLTguNCwgLTEwLjIsIDEuMCwgLTAuNiwgMS43LCAtMC41LCAtMTEuMSwgLTE0LjgsIC05LjcsIC0xNC41LCAtMy43LCAtNS44LCAtMy4xLCAtNS42LCAtMTAuNCwgLTExLjUsIC04LjIsIC0xMS4xLCAwLjYsIC0xLjYsIDEuNiwgLTEuMSwgLTUwLjAsIC0xMi40LCAtNTAuMCwgLTExLjUsIC01LjUsIC04LjAsIC00LjksIC03LjIsIC01MC4wLCAtMTIuNCwgLTEwLjMsIC0xMS42LCAwLjcsIC02LjgsIDIuNCwgLTYuMCxdLFxuICAgICAgICAgICAgWy0xMS41LCAtOS42LCAtMTIuNiwgLTcuMCwgLTMuNiwgLTMuMywgLTMuNSwgLTAuNiwgLTExLjYsIC03LjcsIC0xMS45LCAtNS4zLCA5LjcsIDEwLjUsIDEuMCwgMTIuNiwgLTEyLjAsIC0xMi4yLCAtMTIuNSwgLTkuNywgLTExLjEsIC0xMS4yLCAtMTEuOSwgLTkuNCwgLTEyLjksIC0xNC4zLCAtMTQuMCwgLTExLjksIC0xLjAsIC0wLjQsIC0xLjYsIDEuMiwgLTEzLjksIC0xNS40LCAtMTMuNywgLTEyLjYsIC02LjIsIC02LjcsIC02LjMsIC00LjQsIC0xMy4wLCAtMTIuMiwgLTEzLjAsIC0xMC40LCAyLjksIDMuOCwgMi41LCA1LjgsIC01MC4wLCAtMTIuNSwgLTUwLjAsIC0xMC4yLCAtOS42LCAtOS43LCAtOS42LCAtOC4zLCAtNTAuMCwgLTExLjYsIC0xNS40LCAtOS40LCAtMS4xLCAtNS40LCAtMS42LCAtMy4zLF0sXG4gICAgICAgICAgICBbMC40LCAtNS4wLCAtMS41LCAtNC4wLCAtNC44LCAtNy42LCAtNS45LCAtNi41LCAtMC43LCAtNi4xLCAtMi4yLCAtNS42LCAtOC43LCAtMTIuNCwgLTcuMywgLTEyLjAsIDEyLjgsIDIuMywgMTAuMiwgMy4wLCAwLjAsIC0zLjQsIC0wLjcsIC0zLjIsIDIuNSwgLTAuOCwgMC45LCAwLjIsIC0zLjAsIC03LjIsIC01LjcsIC02LjEsIC0wLjIsIC02LjYsIC0xLjgsIC02LjAsIC01LjMsIC04LjIsIC01LjcsIC03LjYsIC02LjcsIC05LjYsIC03LjUsIC05LjMsIC03LjEsIC0xMC41LCAtOS42LCAtOS40LCAtNTAuMCwgLTguMSwgLTUwLjAsIC03LjIsIC00LjMsIC02LjgsIC01LjcsIC02LjMsIC01MC4wLCAtOS41LCAtOS42LCAtOC45LCAtNi4yLCAtMTIuOCwgLTYuOCwgLTExLjgsXSxcbiAgICAgICAgICAgIFstNi4wLCAwLjUsIC02LjEsIC0xLjAsIC04LjksIC02LjcsIC04LjksIC04LjIsIC00LjgsIC0yLjksIC00LjQsIC00LjUsIC0xMi40LCAtMTEuNiwgLTExLjIsIC0xMi4yLCAyLjMsIDE0LjYsIDEuOSwgMTIuOSwgLTUuNSwgLTIuNiwgLTQuMSwgLTQuNywgLTEuMiwgMy4wLCAtMS4xLCAxLjYsIC04LjAsIC00LjcsIC04LjcsIC02LjAsIC04LjIsIC00LjcsIC03LjgsIC02LjcsIC0xMC4wLCAtOC4zLCAtOC45LCAtOS45LCAtMTAuOCwgLTcuMSwgLTEwLjAsIC05LjIsIC0xMS42LCAtMTAuMSwgLTEyLjMsIC0xMS45LCAtNTAuMCwgMi4yLCAtNTAuMCwgMC45LCAtNy45LCAtNS45LCAtNy40LCAtNi45LCAtNTAuMCwgLTQuNiwgLTExLjYsIC01LjYsIC05LjcsIC01LjksIC05LjksIC03LjMsXSxcbiAgICAgICAgICAgIFstMS45LCAtNS41LCAtMC42LCAtNS4wLCAtNi41LCAtOC4xLCAtNS42LCAtOC4wLCAtMy4xLCAtNi41LCAtMS45LCAtNi44LCAtMTAuNywgLTEzLjIsIC02LjksIC0xMi41LCAxMC4yLCAxLjksIDExLjksIDIuMSwgLTIuMywgLTQuMSwgLTAuNSwgLTQuNiwgLTAuMSwgLTAuOSwgMi40LCAtMC44LCAtNS4xLCAtNi45LCAtNC44LCAtNi43LCAtMi4zLCAtNy4xLCAtMC44LCAtNy4yLCAtNy4yLCAtOC4wLCAtNS42LCAtOC41LCAtOS40LCAtOS43LCAtNy4yLCAtOS44LCAtOS4yLCAtMTEuMSwgLTkuNSwgLTEwLjcsIC01MC4wLCAtOC43LCAtNTAuMCwgLTguNiwgLTYuMSwgLTcuNSwgLTUuNSwgLTcuNywgLTUwLjAsIC0xMC40LCAtNy43LCAtMTAuMCwgLTcuMywgLTEzLjYsIC02LjQsIC0xMy4zLF0sXG4gICAgICAgICAgICBbLTUuMywgLTEuMCwgLTYuMSwgMS4wLCAtNy44LCAtNy45LCAtOC41LCAtNi4zLCAtNC4zLCAtNC4yLCAtNC44LCAtMi40LCAtMTAuNywgLTEyLjAsIC05LjcsIC05LjcsIDMuMCwgMTIuOSwgMi4xLCAxNC43LCAtNC45LCAtMy44LCAtNC4wLCAtMi40LCAtMS4wLCAwLjgsIC0xLjMsIDMuNCwgLTcuNiwgLTUuNywgLTguMSwgLTMuNSwgLTYuOCwgLTUuOCwgLTcuMiwgLTQuMiwgLTguOSwgLTEwLjIsIC04LjQsIC04LjIsIC05LjksIC04LjQsIC05LjcsIC02LjQsIC0xMS4xLCAtMTEuMSwgLTExLjgsIC0xMC4wLCAtNTAuMCwgMC40LCAtNTAuMCwgMi42LCAtNy4yLCAtNy4wLCAtNy40LCAtNS4xLCAtNTAuMCwgLTUuNywgLTkuOCwgLTMuMiwgLTguNCwgLTcuNCwgLTguOSwgLTUuOSxdLFxuICAgICAgICAgICAgWy04LjUsIC0xMC4zLCAtMTAuMCwgLTkuMCwgLTEuNCwgLTQuOSwgLTMuOSwgLTMuNywgLTEwLjAsIC04LjUsIC0xMC4yLCAtNy44LCAtNy44LCAtMTIuNCwgLTguNSwgLTExLjEsIDAuMCwgLTUuNSwgLTIuMywgLTQuOSwgMTIuNiwgMTAuMCwgMTEuMSwgMTAuNSwgLTYuMCwgLTguMywgLTYuOSwgLTcuNSwgLTIuMiwgLTcuNCwgLTUuMywgLTUuOSwgLTguOSwgLTEyLjUsIC05LjQsIC0xMS42LCAtMC43LCAtMy45LCAtMi4zLCAtMy4wLCAtOS4xLCAtOS44LCAtOS4yLCAtOS41LCAtNS42LCAtOS4wLCAtOC4wLCAtOC41LCAtNTAuMCwgLTE1LjMsIC01MC4wLCAtMTQuMSwgMi4zLCAtMS40LCAwLjMsIC0wLjUsIC01MC4wLCAtMTMuNiwgLTE0LjMsIC0xMS41LCAtNS4zLCAtMTMuNywgLTYuMSwgLTEyLjcsXSxcbiAgICAgICAgICAgIFstMTEuMiwgLTguMSwgLTExLjgsIC04LjgsIC00LjEsIC0xLjksIC0zLjksIC0zLjUsIC0xMS42LCAtNS45LCAtMTEuNSwgLTcuOSwgLTEwLjIsIC0xMC4xLCAtMTAuMiwgLTExLjIsIC0zLjQsIC0yLjYsIC00LjEsIC0zLjgsIDEwLjAsIDEzLjEsIDEwLjcsIDEwLjYsIC04LjEsIC01LjIsIC04LjAsIC02LjcsIC02LjEsIC0zLjcsIC03LjUsIC01LjYsIC0xMS4xLCAtMTAuMywgLTEwLjYsIC0xMS45LCAtMy4yLCAtMS4wLCAtMi4yLCAtMi44LCAtMTAuNSwgLTguMSwgLTkuNCwgLTkuNSwgLTguMywgLTYuOSwgLTkuNCwgLTguOCwgLTUwLjAsIC0xMS4zLCAtNTAuMCwgLTEyLjgsIC0wLjYsIDIuMiwgLTAuMywgMC4xLCAtNTAuMCwgLTEwLjEsIC0xNy41LCAtMTEuMSwgLTguNiwgLTkuOSwgLTguNiwgLTExLjksXSxcbiAgICAgICAgICAgIFstOC45LCAtOS40LCAtOC42LCAtOC45LCAtMi45LCAtNC41LCAtMi4yLCAtMy45LCAtOC44LCAtNy41LCAtOC4xLCAtNy45LCAtOC44LCAtMTEuNiwgLTcuNywgLTExLjksIC0wLjcsIC00LjEsIC0wLjUsIC00LjAsIDExLjEsIDEwLjcsIDEzLjIsIDEwLjQsIC01LjcsIC01LjgsIC0zLjUsIC02LjEsIC0zLjYsIC02LjUsIC0zLjMsIC01LjUsIC05LjQsIC0xMS4wLCAtOC43LCAtMTEuMiwgLTEuOCwgLTIuNywgMC43LCAtMy4wLCAtOS4xLCAtOC4yLCAtNy4zLCAtOS40LCAtNy4yLCAtOC4yLCAtNy4yLCAtOC4yLCAtNTAuMCwgLTEzLjIsIC01MC4wLCAtMTMuMywgMC41LCAtMC45LCAxLjgsIC0wLjYsIC01MC4wLCAtMTEuNCwgLTExLjEsIC0xMC41LCAtNi4xLCAtMTIuOSwgLTUuMCwgLTExLjksXSxcbiAgICAgICAgICAgIFstMTAuOCwgLTkuNiwgLTExLjksIC03LjcsIC0zLjMsIC0zLjgsIC00LjUsIC0xLjYsIC0xMS43LCAtNy43LCAtMTIuMCwgLTYuMiwgLTkuNiwgLTEyLjAsIC05LjgsIC05LjQsIC0zLjIsIC00LjcsIC00LjYsIC0yLjQsIDEwLjUsIDEwLjYsIDEwLjQsIDEyLjYsIC04LjIsIC03LjksIC05LjAsIC00LjcsIC02LjEsIC02LjAsIC03LjUsIC0yLjksIC0xMC45LCAtMTIuMiwgLTExLjIsIC0xMC45LCAtMi40LCAtMi45LCAtMi43LCAtMC45LCAtMTAuNCwgLTkuNywgLTEwLjIsIC04LjAsIC04LjQsIC05LjEsIC05LjMsIC02LjUsIC01MC4wLCAtMTMuMywgLTUwLjAsIC0xMS4wLCAtMC4wLCAtMC40LCAtMC40LCAyLjMsIC01MC4wLCAtMTAuOSwgLTE3LjIsIC04LjMsIC04LjMsIC0xMi43LCAtNy44LCAtOS4zLF0sXG4gICAgICAgICAgICBbMi4xLCAtOC4xLCAxLjIsIC03LjAsIC04LjAsIC05LjUsIC03LjMsIC05LjksIDEwLjUsIC01LjUsIDkuMywgLTUuNywgLTkuNSwgLTE1LjEsIC0xMC4wLCAtMTIuOSwgMi41LCAtMS4yLCAtMC4xLCAtMS4wLCAtNi4wLCAtOC4xLCAtNS43LCAtOC4yLCAxMy44LCAxMS4zLCAxMS44LCAxMi4xLCAtNi4wLCAtOS4xLCAtOS4wLCAtOS41LCAtOC45LCAtMTMuNCwgLTEwLjAsIC0xMy4xLCAtOS45LCAtMTEuNywgLTkuOCwgLTEyLjgsIC01LjksIC05LjQsIC02LjUsIC04LjEsIC0xMC43LCAtMTQuMCwgLTEzLjMsIC0xMy45LCAtNTAuMCwgLTExLjksIC01MC4wLCAtOS43LCAtOC45LCAtMTAuOCwgLTkuMCwgLTExLjEsIC01MC4wLCAtNi41LCAtNS4zLCAtNi4zLCAtMTAuNSwgLTE2LjIsIC0xMC40LCAtMTUuMixdLFxuICAgICAgICAgICAgWzAuMCwgLTUuMCwgMC41LCAtNi44LCAtOS4xLCAtNy44LCAtNy41LCAtOC45LCA3LjcsIC0yLjQsIDguMiwgLTUuMSwgLTExLjksIC0xMy4xLCAtMTAuNCwgLTE0LjMsIC0wLjgsIDMuMCwgLTAuOSwgMC44LCAtOC4zLCAtNS4yLCAtNS44LCAtNy45LCAxMS4zLCAxNS4wLCAxMS4yLCAxMi44LCAtOS43LCAtNS4zLCAtOS4yLCAtNy44LCAtMTEuNywgLTEwLjYsIC0xMC4xLCAtMTIuMiwgLTExLjcsIC04LjgsIC04LjksIC0xMS44LCAtOS4zLCAtNS4wLCAtOC4wLCAtOC4yLCAtMTMuNiwgLTExLjQsIC0xMi44LCAtMTMuMCwgLTUwLjAsIC03LjIsIC01MC4wLCAtOC40LCAtMTEuMCwgLTcuNywgLTguNywgLTEwLjIsIC01MC4wLCAtMS41LCAtNy4xLCAtNC45LCAtMTEuMiwgLTExLjYsIC0xMS42LCAtMTUuMCxdLFxuICAgICAgICAgICAgWzEuNCwgLTcuMywgMi4yLCAtNy4xLCAtOC4wLCAtOS4zLCAtNi40LCAtOS42LCA5LjEsIC01LjUsIDEwLjAsIC01LjQsIC0xMC45LCAtMTQuMywgLTguNCwgLTE0LjAsIDAuOSwgLTEuMSwgMi40LCAtMS4zLCAtNi45LCAtOC4wLCAtMy41LCAtOS4wLCAxMS44LCAxMS4yLCAxMy40LCAxMS40LCAtNy4zLCAtOC44LCAtNi41LCAtOC41LCAtMTAuMCwgLTEyLjUsIC03LjgsIC0xMi41LCAtOS42LCAtMTEuMCwgLTcuMSwgLTEwLjcsIC03LjksIC04LjAsIC00LjMsIC05LjQsIC0xMS40LCAtMTIuMywgLTEwLjksIC0xMi45LCAtNTAuMCwgLTExLjgsIC01MC4wLCAtMTEuMiwgLTkuNCwgLTkuOCwgLTcuMywgLTEwLjUsIC01MC4wLCAtNi4yLCAtMi4yLCAtNi43LCAtOS44LCAtMTUuMiwgLTguNSwgLTE0LjksXSxcbiAgICAgICAgICAgIFswLjIsIC02LjMsIDAuMSwgLTQuMywgLTguMiwgLTguOSwgLTguNSwgLTcuMCwgOC41LCAtNC4xLCA4LjAsIC0yLjEsIC0xMC41LCAtMTMuNCwgLTEwLjIsIC0xMS45LCAwLjIsIDEuNiwgLTAuOCwgMy40LCAtNy41LCAtNi43LCAtNi4xLCAtNC43LCAxMi4xLCAxMi44LCAxMS40LCAxNC43LCAtOC43LCAtNy40LCAtOS40LCAtNS4zLCAtOS45LCAtMTEuOCwgLTEwLjUsIC0xMC4zLCAtOS45LCAtMTAuMSwgLTkuMywgLTkuMywgLTguMSwgLTcuMiwgLTguMCwgLTUuMiwgLTEyLjAsIC0xMi4xLCAtMTIuNiwgLTEwLjksIC01MC4wLCAtNy45LCAtNTAuMCwgLTUuMywgLTkuMywgLTguOCwgLTguOSwgLTcuMCwgLTUwLjAsIC0zLjYsIC03LjEsIC0xLjIsIC0xMC4yLCAtMTIuNywgLTkuOSwgLTExLjAsXSxcbiAgICAgICAgICAgIFstMTAuMiwgLTEzLjQsIC0xMS44LCAtMTIuNCwgLTYuMCwgLTkuNCwgLTcuMSwgLTguNiwgLTkuOCwgLTEyLjksIC0xMC44LCAtMTIuNCwgMi4zLCAtMS40LCAxLjAsIC0xLjAsIC0zLjAsIC04LjAsIC01LjEsIC03LjYsIC0yLjIsIC02LjEsIC0zLjYsIC02LjEsIC02LjAsIC05LjcsIC03LjMsIC04LjcsIDExLjIsIDcuOSwgOC45LCA4LjEsIC0xMi4xLCAtMTcuNCwgLTEzLjIsIC0xNi44LCAtNi4zLCAtOS41LCAtNy41LCAtOC44LCAtMTIuNywgLTE1LjIsIC0xMy4xLCAtMTQuMiwgMC4wLCAtMy4xLCAtMS44LCAtMy4xLCAtNTAuMCwgLTEwLjcsIC01MC4wLCAtOS4zLCAtNC42LCAtOC45LCAtNS45LCAtOC4zLCAtNTAuMCwgLTEyLjgsIC05LjYsIC0xMC42LCA5LjUsIC0zLjIsIDguMiwgLTIuOCxdLFxuICAgICAgICAgICAgWy0xMy41LCAtMTEuMywgLTE0LjAsIC0xMi45LCAtOS4zLCAtNy4xLCAtOC4yLCAtOC45LCAtMTIuNywgLTEwLjMsIC0xMS45LCAtMTIuMywgLTAuNCwgMS40LCAtMC42LCAtMC40LCAtNy4yLCAtNC43LCAtNi45LCAtNS43LCAtNy40LCAtMy43LCAtNi41LCAtNi4wLCAtOS4xLCAtNS4zLCAtOC44LCAtNy40LCA3LjksIDExLjksIDcuOCwgOS4zLCAtMTUuMiwgLTE1LjEsIC0xNC42LCAtMTcuMiwgLTkuNywgLTcuMywgLTguMiwgLTkuMiwgLTE1LjAsIC0xMi44LCAtMTQuMSwgLTE0LjksIC0yLjgsIDAuMiwgLTIuOSwgLTIuMywgLTUwLjAsIC03LjQsIC01MC4wLCAtOC43LCAtOS40LCAtNy4zLCAtOS40LCAtOS40LCAtNTAuMCwgLTguMCwgLTExLjksIC05LjcsIDYuNSwgMC41LCA2LjQsIC0xLjgsXSxcbiAgICAgICAgICAgIFstMTMuMCwgLTE0LjQsIC0xMS45LCAtMTMuOSwgLTcuNywgLTkuMCwgLTYuNywgLTguOCwgLTExLjcsIC0xMi43LCAtMTAuNywgLTEzLjEsIC0wLjIsIC0xLjYsIDEuNywgLTEuNiwgLTUuNywgLTguNywgLTQuOCwgLTguMSwgLTUuMywgLTcuNSwgLTMuMywgLTcuNSwgLTkuMCwgLTkuMiwgLTYuNSwgLTkuNCwgOC45LCA3LjgsIDEwLjEsIDcuOCwgLTE0LjMsIC0xNy43LCAtMTMuMCwgLTE3LjgsIC04LjAsIC05LjQsIC02LjIsIC05LjIsIC0xNS4xLCAtMTQuOSwgLTEyLjIsIC0xNC45LCAtMS44LCAtMy4yLCAtMC44LCAtMy4yLCAtNTAuMCwgLTEwLjgsIC01MC4wLCAtOS45LCAtNy4zLCAtOS42LCAtNi40LCAtOS40LCAtNTAuMCwgLTEyLjMsIC04LjcsIC0xMS4zLCA3LjYsIC0zLjMsIDguNywgLTIuOSxdLFxuICAgICAgICAgICAgWy0xMi41LCAtMTIuOSwgLTEzLjQsIC0xMC4wLCAtOC41LCAtOS4wLCAtNy44LCAtNi44LCAtMTEuOCwgLTExLjMsIC0xMi40LCAtMTAuMSwgLTAuMywgLTAuNSwgLTAuNSwgMS4yLCAtNi4xLCAtNi4wLCAtNi43LCAtMy41LCAtNS45LCAtNS42LCAtNS41LCAtMi45LCAtOS41LCAtNy44LCAtOC41LCAtNS4zLCA4LjEsIDkuMywgNy44LCAxMS44LCAtMTQuNCwgLTE1LjcsIC0xNC41LCAtMTQuNiwgLTguNCwgLTguNywgLTcuOSwgLTcuMSwgLTE0LjMsIC0xMy44LCAtMTMuOCwgLTEyLjMsIC0yLjQsIC0yLjIsIC0yLjksIC0wLjIsIC01MC4wLCAtOC45LCAtNTAuMCwgLTcuMSwgLTguMSwgLTkuMSwgLTguNywgLTYuNiwgLTUwLjAsIC05LjcsIC0xMS40LCAtOC4wLCA2LjgsIC0xLjgsIDYuOSwgMC40LF0sXG4gICAgICAgICAgICBbLTIuNiwgLTYuMywgLTQuOSwgLTQuOSwgLTYuNCwgLTkuNCwgLTcuOSwgLTguNiwgLTYuMywgLTcuNCwgLTguMiwgLTYuNiwgLTkuNywgLTE0LjksIC0xMS4xLCAtMTMuOSwgLTAuMiwgLTguMiwgLTIuMywgLTYuOCwgLTguOSwgLTExLjEsIC05LjQsIC0xMC45LCAtOC45LCAtMTEuNywgLTEwLjAsIC05LjksIC0xMi4xLCAtMTUuMiwgLTE0LjMsIC0xNC40LCAxMS4xLCAyLjksIDkuMiwgMy41LCAtMy4wLCAtNy4wLCAtNC4zLCAtNi4yLCAtMi4yLCAtNi42LCAtMy43LCAtNS43LCAtNi4wLCAtMTAuNCwgLTguNiwgLTkuNSwgLTUwLjAsIC0xNS41LCAtNTAuMCwgLTEzLjksIC03LjgsIC0xMC41LCAtOC43LCAtOS42LCAtNTAuMCwgLTE2LjUsIC0xNy4xLCAtMTQuOCwgLTEyLjEsIC0xOC45LCAtMTIuNCwgLTE3LjQsXSxcbiAgICAgICAgICAgIFstOC41LCAwLjgsIC05LjEsIC0wLjcsIC0xMC4xLCAtNy41LCAtOS4xLCAtOC4yLCAtMTEuNCwgLTMuMSwgLTExLjgsIC00LjQsIC0xNS41LCAtMTQuMywgLTE0LjgsIC0xNS40LCAtNi42LCAtNC43LCAtNy4xLCAtNS44LCAtMTIuNSwgLTEwLjMsIC0xMS4wLCAtMTIuMiwgLTEzLjQsIC0xMC42LCAtMTIuNSwgLTExLjgsIC0xNy40LCAtMTUuMSwgLTE3LjcsIC0xNS43LCAyLjksIDEyLjUsIDMuMSwgMTAuMywgLTcuNywgLTUuMiwgLTYuMiwgLTcuMywgLTUuNCwgLTEuNywgLTUuNCwgLTMuNywgLTExLjYsIC05LjEsIC0xMy4wLCAtMTAuOCwgLTUwLjAsIC0xMC4zLCAtNTAuMCwgLTExLjIsIC05LjgsIC04LjMsIC05LjEsIC05LjcsIC01MC4wLCAtMTIuNywgLTIwLjYsIC0xMy4xLCAtMTYuMCwgLTE2LjYsIC0xNy4wLCAtMTguNCxdLFxuICAgICAgICAgICAgWy01LjAsIC02LjQsIC0zLjQsIC01LjYsIC03LjUsIC05LjMsIC03LjEsIC04LjgsIC04LjgsIC03LjQsIC02LjksIC02LjksIC0xMS40LCAtMTUuMiwgLTkuNywgLTEzLjcsIC0xLjgsIC03LjgsIC0wLjgsIC03LjIsIC05LjQsIC0xMC42LCAtOC43LCAtMTEuMiwgLTEwLjAsIC0xMC4xLCAtNy44LCAtMTAuNSwgLTEzLjIsIC0xNC42LCAtMTMuMCwgLTE0LjUsIDkuMiwgMy4xLCAxMC44LCAzLjAsIC00LjUsIC02LjcsIC0yLjcsIC02LjcsIC01LjAsIC02LjgsIC0yLjUsIC02LjcsIC03LjUsIC0xMC40LCAtNy40LCAtMTAuMiwgLTUwLjAsIC0xNS41LCAtNTAuMCwgLTE0LjIsIC04LjksIC0xMC4yLCAtOC41LCAtMTAuMCwgLTUwLjAsIC0xNS42LCAtMTUuMywgLTE1LjUsIC0xMy4wLCAtMTguOCwgLTEyLjYsIC0xOC4zLF0sXG4gICAgICAgICAgICBbLTguMSwgLTEuMSwgLTguOSwgMS40LCAtOC42LCAtOS4yLCAtOS40LCAtNi44LCAtMTEuMCwgLTQuOSwgLTExLjUsIC0yLjYsIC0xMy43LCAtMTYuOCwgLTE0LjUsIC0xMi42LCAtNi4wLCAtNi43LCAtNy4yLCAtNC4yLCAtMTEuNiwgLTExLjksIC0xMS4yLCAtMTAuOSwgLTEzLjEsIC0xMi4yLCAtMTIuNSwgLTEwLjMsIC0xNi44LCAtMTcuMiwgLTE3LjgsIC0xNC42LCAzLjUsIDEwLjMsIDMuMCwgMTIuNCwgLTYuOSwgLTcuNSwgLTYuOCwgLTQuOSwgLTUuNCwgLTQuMiwgLTUuNCwgLTEuMywgLTEwLjgsIC0xMS41LCAtMTIuNCwgLTguMiwgLTUwLjAsIC0xMi41LCAtNTAuMCwgLTguOSwgLTkuMiwgLTEwLjAsIC05LjQsIC03LjksIC01MC4wLCAtMTQuMywgLTE5LjksIC0xMS40LCAtMTYuMiwgLTE5LjIsIC0xNS44LCAtMTUuOSxdLFxuICAgICAgICAgICAgWy02LjMsIC03LjQsIC04LjAsIC02LjAsIDIuOCwgLTAuNywgMC45LCAwLjMsIC03LjUsIC00LjQsIC04LjQsIC0zLjYsIC0zLjAsIC03LjcsIC0zLjcsIC02LjIsIC01LjMsIC0xMC4wLCAtNy4yLCAtOC45LCAtMC43LCAtMy4yLCAtMS44LCAtMi40LCAtOS45LCAtMTEuNywgLTkuNiwgLTkuOSwgLTYuMywgLTkuNywgLTguMCwgLTguNCwgLTMuMCwgLTcuNywgLTQuNSwgLTYuOSwgMTEuMywgOC4yLCA5LjQsIDkuMSwgLTEuMCwgLTMuMywgLTEuOCwgLTIuNCwgMS41LCAtMi4xLCAtMC40LCAtMS4xLCAtNTAuMCwgLTE0LjUsIC01MC4wLCAtMTIuOSwgMi44LCAtMC4wLCAxLjQsIDAuNywgLTUwLjAsIC04LjcsIC0xNC4xLCAtNy41LCAtNS4yLCAtMTIuNSwgLTYuNSwgLTEwLjcsXSxcbiAgICAgICAgICAgIFstOS45LCAtNS4wLCAtMTAuMCwgLTYuNSwgLTAuNywgMi42LCAtMC4yLCAwLjEsIC0xMC4zLCAtMS44LCAtOS45LCAtMy44LCAtNi40LCAtNC43LCAtNS44LCAtNi43LCAtOC4yLCAtOC4zLCAtOC4wLCAtMTAuMiwgLTMuOSwgLTEuMCwgLTIuNywgLTIuOSwgLTExLjcsIC04LjgsIC0xMS4wLCAtMTAuMSwgLTkuNSwgLTcuMywgLTkuNCwgLTguNywgLTcuMCwgLTUuMiwgLTYuNywgLTcuNSwgOC4yLCAxMS42LCA4LjgsIDkuMSwgLTMuNywgLTAuOSwgLTMuMSwgLTMuMCwgLTIuMCwgMS4yLCAtMi4zLCAtMS4zLCAtNTAuMCwgLTEyLjEsIC01MC4wLCAtMTIuNiwgMC4xLCAyLjUsIDAuNywgMC42LCAtNTAuMCwgLTYuMCwgLTE0LjgsIC03LjUsIC04LjYsIC05LjQsIC04LjUsIC0xMS4yLF0sXG4gICAgICAgICAgICBbLTcuNSwgLTYuMiwgLTcuMiwgLTYuMiwgMC45LCAwLjIsIDIuNSwgMC4yLCAtOC4zLCAtMy41LCAtNy4xLCAtMy43LCAtNC4xLCAtNi4zLCAtMy4xLCAtNi4zLCAtNS43LCAtOC45LCAtNS42LCAtOC40LCAtMi4zLCAtMi4yLCAwLjcsIC0yLjcsIC05LjgsIC04LjksIC03LjEsIC05LjMsIC03LjUsIC04LjIsIC02LjIsIC03LjksIC00LjMsIC02LjIsIC0yLjcsIC02LjgsIDkuNCwgOC44LCAxMi4xLCA4LjgsIC0yLjEsIC0yLjAsIDAuMSwgLTIuNCwgMC4wLCAtMS4xLCAxLjMsIC0wLjgsIC01MC4wLCAtMTEuOSwgLTUwLjAsIC0xMi42LCAxLjIsIDAuNywgMy41LCAwLjgsIC01MC4wLCAtNy4xLCAtMTIuNCwgLTcuMSwgLTcuMSwgLTEwLjYsIC01LjAsIC0xMC42LF0sXG4gICAgICAgICAgICBbLTkuMCwgLTYuNSwgLTEwLjAsIC00LjgsIDAuMSwgLTAuMSwgLTAuMywgMi40LCAtOS45LCAtMy41LCAtMTAuNiwgLTIuMCwgLTUuNCwgLTYuNiwgLTUuNiwgLTQuNCwgLTcuNiwgLTkuOSwgLTguNSwgLTguMiwgLTMuMCwgLTIuOCwgLTMuMCwgLTAuOSwgLTEyLjgsIC0xMS44LCAtMTAuNywgLTkuMywgLTguOCwgLTkuMiwgLTkuMiwgLTcuMSwgLTYuMiwgLTcuMywgLTYuNywgLTQuOSwgOS4xLCA5LjEsIDguOCwgMTEuMiwgLTMuMSwgLTMuMCwgLTMuMywgLTEuMCwgLTEuMSwgLTEuNCwgLTIuMCwgMS4yLCAtNTAuMCwgLTEyLjgsIC01MC4wLCAtMTAuOSwgMC44LCAwLjUsIDAuNywgMi4zLCAtNTAuMCwgLTcuNSwgLTE2LjUsIC01LjksIC03LjgsIC0xMS4xLCAtNy44LCAtOS4wLF0sXG4gICAgICAgICAgICBbLTcuMSwgLTUuNiwgLTkuMSwgLTUuMSwgLTUuOSwgLTguMCwgLTYuOSwgLTcuNCwgLTEuOSwgLTEuNiwgLTQuNywgLTEuNCwgLTkuNiwgLTE0LjYsIC0xMC40LCAtMTMuMCwgLTYuNywgLTEwLjgsIC05LjQsIC05LjksIC05LjEsIC0xMC41LCAtOS4xLCAtMTAuNCwgLTUuOSwgLTkuMywgLTcuOSwgLTguMSwgLTEyLjcsIC0xNS4wLCAtMTUuMSwgLTE0LjMsIC0yLjIsIC01LjQsIC01LjAsIC01LjQsIC0xLjAsIC0zLjcsIC0yLjEsIC0zLjEsIDEyLjgsIDkuNiwgMTEuMSwgMTAuMSwgLTQuOCwgLTkuNCwgLTguMSwgLTguNiwgLTUwLjAsIC0xOC4zLCAtNTAuMCwgLTE1LjQsIC01LjksIC03LjUsIC02LjYsIC03LjEsIC01MC4wLCAtOS41LCAtMTEuNywgLTguNCwgLTEyLjUsIC0xNy4zLCAtMTMuMiwgLTE1LjQsXSxcbiAgICAgICAgICAgIFstMTAuMiwgLTEuNiwgLTEwLjIsIC0zLjIsIC03LjMsIC00LjYsIC02LjUsIC02LjIsIC02LjcsIDMuMCwgLTYuOCwgMC44LCAtMTEuOSwgLTEwLjgsIC0xMS41LCAtMTIuMiwgLTkuNiwgLTcuMSwgLTkuNywgLTguNCwgLTkuOCwgLTguMSwgLTguMiwgLTkuNywgLTkuNCwgLTUuMCwgLTguMCwgLTcuMiwgLTE1LjIsIC0xMi44LCAtMTQuOSwgLTEzLjgsIC02LjYsIC0xLjcsIC02LjgsIC00LjIsIC0zLjMsIC0wLjksIC0yLjAsIC0zLjAsIDkuNiwgMTIuOCwgOS43LCAxMC41LCAtOC41LCAtNS42LCAtOS4zLCAtNy44LCAtNTAuMCwgLTEyLjcsIC01MC4wLCAtMTMuOCwgLTYuOCwgLTUuMSwgLTUuMywgLTYuNSwgLTUwLjAsIC00LjEsIC0xMi44LCAtNS44LCAtMTQuNCwgLTE0LjEsIC0xMy42LCAtMTQuOCxdLFxuICAgICAgICAgICAgWy04LjIsIC00LjcsIC03LjEsIC01LjAsIC02LjUsIC03LjcsIC01LjUsIC02LjksIC00LjEsIC0wLjgsIC0xLjIsIC0wLjksIC0xMC41LCAtMTIuOCwgLTguMiwgLTEzLjAsIC03LjUsIC0xMC4wLCAtNy4yLCAtOS43LCAtOS4yLCAtOS40LCAtNy4zLCAtMTAuMiwgLTYuNSwgLTguMCwgLTQuMywgLTguMCwgLTEzLjEsIC0xNC4xLCAtMTIuMiwgLTEzLjgsIC0zLjcsIC01LjQsIC0yLjUsIC01LjQsIC0xLjgsIC0zLjEsIDAuMSwgLTMuMywgMTEuMSwgOS43LCAxMi45LCA5LjgsIC01LjUsIC04LjEsIC01LjQsIC03LjgsIC01MC4wLCAtMTYuNCwgLTUwLjAsIC0xNC44LCAtNS45LCAtNy4xLCAtNC43LCAtNy4yLCAtNTAuMCwgLTguNCwgLTYuNCwgLTguMSwgLTEyLjEsIC0xNi4yLCAtMTAuMywgLTE1LjgsXSxcbiAgICAgICAgICAgIFstOS4yLCAtMy4wLCAtOS45LCAtMS4yLCAtNi41LCAtNi4xLCAtNi44LCAtNC40LCAtNi40LCAwLjksIC03LjAsIDMuMCwgLTExLjgsIC0xMy4wLCAtMTEuMSwgLTEwLjQsIC05LjMsIC05LjIsIC05LjgsIC02LjQsIC05LjUsIC05LjUsIC05LjQsIC04LjAsIC04LjEsIC04LjIsIC05LjQsIC01LjIsIC0xNC4yLCAtMTQuOSwgLTE0LjksIC0xMi4zLCAtNS43LCAtMy43LCAtNi43LCAtMS4zLCAtMi40LCAtMy4wLCAtMi40LCAtMS4wLCAxMC4xLCAxMC41LCA5LjgsIDEzLjEsIC03LjIsIC04LjAsIC04LjQsIC01LjAsIC01MC4wLCAtMTQuNywgLTUwLjAsIC0xMS40LCAtNi4zLCAtNi43LCAtNS44LCAtNS4wLCAtNTAuMCwgLTYuMSwgLTEzLjQsIC0zLjYsIC0xMy4wLCAtMTYuMCwgLTEzLjcsIC0xMy4zLF0sXG4gICAgICAgICAgICBbLTguMiwgLTEwLjgsIC0xMC4xLCAtOS44LCAtMC40LCAtMy42LCAtMS43LCAtMi45LCAtNy45LCAtOC40LCAtOS44LCAtOC4yLCA2LjIsIDIuMywgMC42LCAyLjksIC03LjEsIC0xMS42LCAtOS4yLCAtMTEuMSwgLTUuNiwgLTguMywgLTcuMiwgLTguNCwgLTEwLjcsIC0xMy42LCAtMTEuNCwgLTEyLjAsIDAuMCwgLTIuOCwgLTEuOCwgLTIuNCwgLTYuMCwgLTExLjYsIC03LjUsIC0xMC44LCAxLjUsIC0yLjAsIDAuMCwgLTEuMSwgLTQuOCwgLTguNSwgLTUuNSwgLTcuMiwgMTEuOSwgOC42LCAxMC4wLCA5LjAsIC01MC4wLCAtMTQuMiwgLTUwLjAsIC0xMi44LCAtNC4xLCAtNy40LCAtNS43LCAtNi41LCAtNTAuMCwgLTExLjAsIC0xNC4zLCAtOS45LCAxLjQsIC03LjksIC0wLjcsIC02LjgsXSxcbiAgICAgICAgICAgIFstMTIuNSwgLTguNywgLTEzLjAsIC05LjksIC0zLjksIC0xLjAsIC0zLjQsIC0yLjksIC0xMi41LCAtNi4zLCAtMTEuNiwgLTguMSwgMy4zLCA2LjAsIC0xLjYsIDMuOCwgLTEwLjUsIC0xMC4xLCAtMTEuMSwgLTExLjEsIC05LjAsIC02LjksIC04LjIsIC05LjEsIC0xNC4wLCAtMTEuNCwgLTEyLjMsIC0xMi4xLCAtMy4xLCAwLjIsIC0zLjIsIC0yLjIsIC0xMC40LCAtOS4xLCAtMTAuNCwgLTExLjUsIC0yLjEsIDEuMiwgLTEuMSwgLTEuNCwgLTkuNCwgLTUuNiwgLTguMSwgLTguMCwgOC42LCAxMi40LCA4LjYsIDkuNSwgLTUwLjAsIC0xMC40LCAtNTAuMCwgLTExLjYsIC03LjIsIC01LjcsIC03LjUsIC03LjQsIC01MC4wLCAtOC42LCAtMTUuNywgLTkuNywgLTMuMCwgLTMuNywgLTMuMiwgLTUuOSxdLFxuICAgICAgICAgICAgWy0xMS4xLCAtMTEuOSwgLTEwLjYsIC0xMS4zLCAtMi42LCAtNC4xLCAtMS43LCAtMy41LCAtMTEuNCwgLTkuNiwgLTkuNiwgLTkuMiwgMy43LCAyLjUsIDEuNiwgMi41LCAtOS42LCAtMTIuMywgLTkuNSwgLTExLjgsIC04LjAsIC05LjQsIC03LjIsIC05LjMsIC0xMy4zLCAtMTIuOCwgLTEwLjksIC0xMi42LCAtMS44LCAtMi45LCAtMC44LCAtMi45LCAtOC42LCAtMTMuMCwgLTcuNCwgLTEyLjQsIC0wLjQsIC0yLjMsIDEuMywgLTIuMCwgLTguMSwgLTkuMywgLTUuNCwgLTguNCwgMTAuMCwgOC42LCAxMS40LCA4LjksIC01MC4wLCAtMTMuNywgLTUwLjAsIC0xMy4yLCAtNi4xLCAtOC4xLCAtNS41LCAtNy41LCAtNTAuMCwgLTExLjMsIC0xMi43LCAtMTAuMSwgLTEuNiwgLTcuOCwgLTAuMywgLTcuMixdLFxuICAgICAgICAgICAgWy0xMS40LCAtMTAuMCwgLTEyLjcsIC04LjIsIC0zLjEsIC0zLjEsIC0yLjgsIC0wLjksIC0xMS43LCAtNy4zLCAtMTIuMSwgLTUuOCwgMy42LCAzLjYsIC0xLjEsIDUuOCwgLTkuNCwgLTExLjksIC0xMC43LCAtMTAuMCwgLTguNSwgLTguOCwgLTguMiwgLTYuNSwgLTEzLjksIC0xMy4wLCAtMTIuOSwgLTEwLjksIC0zLjEsIC0yLjMsIC0zLjIsIC0wLjIsIC05LjUsIC0xMC44LCAtMTAuMiwgLTguMiwgLTEuMSwgLTEuMywgLTAuOCwgMS4yLCAtOC42LCAtNy44LCAtNy44LCAtNS4wLCA5LjAsIDkuNSwgOC45LCAxMi4wLCAtNTAuMCwgLTEzLjAsIC01MC4wLCAtMTAuMywgLTYuMiwgLTcuMCwgLTcuMSwgLTUuNCwgLTUwLjAsIC05LjMsIC0xNC4wLCAtOC4yLCAtMi40LCAtNi4zLCAtMi40LCAtMy45LF0sXG4gICAgICAgICAgICBbLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMzMuMywgLTUwLjAsIDMwLjYsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMjkuMiwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsXSxcbiAgICAgICAgICAgIFstMTQuOCwgLTYuMiwgLTE0LjksIC03LjYsIC0xNC42LCAtMTEuNiwgLTEzLjAsIC0xMi4yLCAtMTQuMCwgLTkuMCwgLTE0LjEsIC0xMC4xLCAtMTMuNiwgLTExLjIsIC0xMi40LCAtMTIuNSwgLTguMSwgMi4yLCAtOC43LCAwLjQsIC0xNS4zLCAtMTEuMywgLTEzLjIsIC0xMy4zLCAtMTEuOSwgLTcuMiwgLTExLjgsIC03LjksIC0xMC43LCAtNy40LCAtMTAuOCwgLTguOSwgLTE1LjUsIC0xMC4zLCAtMTUuNSwgLTEyLjUsIC0xNC41LCAtMTIuMSwgLTExLjksIC0xMi44LCAtMTguMywgLTEyLjcsIC0xNi40LCAtMTQuNywgLTE0LjIsIC0xMC40LCAtMTMuNywgLTEzLjAsIC01MC4wLCAxNS4xLCAtNTAuMCwgMTMuMywgLTkuOSwgLTUuOCwgLTguOSwgLTcuNiwgLTUwLjAsIC0xLjUsIC03LjgsIC0zLjAsIC04LjEsIDMuNiwgLTkuNCwgMi4wLF0sXG4gICAgICAgICAgICBbLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMzAuNiwgLTUwLjAsIDM1LjIsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgMjguNSwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsXSxcbiAgICAgICAgICAgIFstMTMuOCwgLTcuNSwgLTE0LjQsIC01LjEsIC0xMi42LCAtMTEuNiwgLTExLjUsIC0xMC4xLCAtMTMuMiwgLTkuNywgLTEyLjcsIC03LjQsIC0xMS45LCAtMTEuOSwgLTExLjUsIC0xMC4yLCAtNy4yLCAwLjksIC04LjYsIDIuNiwgLTE0LjEsIC0xMi44LCAtMTMuMywgLTExLjAsIC05LjcsIC04LjQsIC0xMS4yLCAtNS4zLCAtOS4zLCAtOC43LCAtOS45LCAtNy4xLCAtMTMuOSwgLTExLjIsIC0xNC4yLCAtOC45LCAtMTIuOSwgLTEyLjYsIC0xMi42LCAtMTAuOSwgLTE1LjQsIC0xMy44LCAtMTQuOCwgLTExLjQsIC0xMi44LCAtMTEuNiwgLTEzLjIsIC0xMC4zLCAtNTAuMCwgMTMuMywgLTUwLjAsIDE1LjIsIC04LjYsIC03LjAsIC04LjQsIC00LjgsIC01MC4wLCAtMy4wLCAtNy4xLCAtMC4xLCAtNy4zLCAyLjMsIC04LjcsIDMuOSxdLFxuICAgICAgICAgICAgWy03LjMsIC02LjMsIC04LjksIC01LjUsIDIuOSwgMC4yLCAxLjUsIDEuMiwgLTguNSwgLTIuMywgLTEwLjAsIC0xLjcsIC01LjYsIC0xMC41LCAtNS41LCAtOS42LCAtNC4zLCAtNy45LCAtNi4xLCAtNy4yLCAyLjMsIC0wLjYsIDAuNSwgLTAuMCwgLTguOSwgLTExLjAsIC05LjQsIC05LjMsIC00LjYsIC05LjQsIC03LjMsIC04LjEsIC03LjgsIC05LjgsIC04LjksIC05LjIsIDIuOCwgMC4xLCAxLjIsIDAuOCwgLTUuOSwgLTYuOCwgLTUuOSwgLTYuMywgLTQuMSwgLTcuMiwgLTYuMSwgLTYuMiwgLTUwLjAsIC05LjksIC01MC4wLCAtOC42LCAxMi41LCA5LjQsIDExLjAsIDkuOCwgLTUwLjAsIC00LjgsIC04LjcsIC0zLjUsIC0wLjAsIC04LjYsIC0yLjEsIC03LjAsXSxcbiAgICAgICAgICAgIFstMTAuMSwgLTQuMywgLTEwLjgsIC01LjgsIDAuMSwgMi4zLCAwLjcsIDAuNiwgLTEwLjQsIC0wLjIsIC0xMC44LCAtMi4wLCAtOC44LCAtOS4yLCAtOC4wLCAtOS43LCAtNi44LCAtNS45LCAtNy41LCAtNy4wLCAtMS40LCAyLjIsIC0wLjksIC0wLjQsIC0xMC44LCAtNy43LCAtOS44LCAtOC44LCAtOC45LCAtNy4zLCAtOS42LCAtOS4xLCAtMTAuNSwgLTguMywgLTEwLjIsIC0xMC4wLCAtMC4wLCAyLjUsIDAuNywgMC41LCAtNy41LCAtNS4xLCAtNy4xLCAtNi43LCAtNy40LCAtNS43LCAtOC4xLCAtNy4wLCAtNTAuMCwgLTUuOCwgLTUwLjAsIC03LjAsIDkuNCwgMTIuNywgMTAuMSwgMTAuMCwgLTUwLjAsIC0xLjUsIC0xMS4zLCAtMy4zLCAtNS40LCAtNC4yLCAtNS42LCAtNi44LF0sXG4gICAgICAgICAgICBbLTguNCwgLTYuMiwgLTguOSwgLTUuOSwgMS44LCAwLjQsIDIuNywgMS4yLCAtOS4xLCAtMS4yLCAtOC44LCAtMS41LCAtNy4yLCAtMTAuNSwgLTQuOSwgLTkuNiwgLTUuNywgLTcuNCwgLTUuNSwgLTcuNCwgMC4zLCAtMC4zLCAxLjgsIC0wLjQsIC05LjAsIC04LjcsIC03LjMsIC04LjksIC01LjksIC05LjQsIC02LjQsIC04LjcsIC04LjcsIC05LjEsIC04LjUsIC05LjQsIDEuNCwgMC43LCAzLjUsIDAuNywgLTYuNiwgLTUuMywgLTQuNywgLTUuOCwgLTUuNywgLTcuNSwgLTUuNSwgLTcuMSwgLTUwLjAsIC04LjksIC01MC4wLCAtOC40LCAxMS4wLCAxMC4xLCAxMy4yLCAxMC4yLCAtNTAuMCwgLTQuMiwgLTYuMSwgLTMuNiwgLTMuNSwgLTguNCwgLTEuMiwgLTYuOCxdLFxuICAgICAgICAgICAgWy05LjEsIC01LjQsIC0xMC40LCAtNC4yLCAxLjAsIDAuNSwgMC42LCAyLjQsIC05LjYsIC0xLjUsIC0xMC41LCAtMC41LCAtOC45LCAtMTAuNSwgLTcuMiwgLTguMywgLTYuMywgLTYuOSwgLTcuNywgLTUuMSwgLTAuNSwgMC4xLCAtMC42LCAyLjMsIC0xMS4xLCAtMTAuMiwgLTEwLjUsIC03LjAsIC04LjMsIC05LjQsIC05LjQsIC02LjYsIC05LjYsIC05LjcsIC0xMC4wLCAtNy45LCAwLjcsIDAuNiwgMC44LCAyLjMsIC03LjEsIC02LjUsIC03LjIsIC01LjAsIC02LjUsIC03LjQsIC03LjUsIC01LjQsIC01MC4wLCAtNy42LCAtNTAuMCwgLTQuOCwgOS44LCAxMC4wLCAxMC4yLCAxMi4xLCAtNTAuMCwgLTMuMSwgLTExLjQsIC0wLjcsIC00LjYsIC02LjYsIC00LjksIC0zLjksXSxcbiAgICAgICAgICAgIFstNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAyOS4yLCAtNTAuMCwgMjguNSwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAzMy4zLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCxdLFxuICAgICAgICAgICAgWy0xMy4wLCAtNy4wLCAtMTMuMSwgLTguMywgLTkuMiwgLTYuNSwgLTguOSwgLTcuNiwgLTkuOCwgLTAuNywgLTkuMiwgLTIuMSwgLTEyLjQsIC0xMC4zLCAtMTIuNCwgLTExLjYsIC05LjUsIC00LjYsIC0xMC40LCAtNS43LCAtMTMuNiwgLTEwLjEsIC0xMS40LCAtMTAuOSwgLTYuNSwgLTEuNSwgLTYuMiwgLTMuNiwgLTEyLjgsIC04LjAsIC0xMi4zLCAtOS43LCAtMTYuNSwgLTEyLjcsIC0xNS42LCAtMTQuMywgLTguNywgLTYuMCwgLTcuMSwgLTcuNSwgLTkuNSwgLTQuMSwgLTguNCwgLTYuMSwgLTExLjAsIC04LjYsIC0xMS4zLCAtOS4zLCAtNTAuMCwgLTEuNSwgLTUwLjAsIC0zLjAsIC00LjgsIC0xLjUsIC00LjIsIC0zLjEsIC01MC4wLCAxNi40LCAtNS4xLCAxNC4yLCAtMTAuMSwgLTQuMywgLTEwLjAsIC01LjQsXSxcbiAgICAgICAgICAgIFstMTMuNSwgLTE2LjMsIC0xMS44LCAtMTUuNSwgLTEzLjYsIC0xNS4zLCAtMTIuMSwgLTE2LjEsIC03LjcsIC0xMy4zLCAtNC4yLCAtMTIuNiwgLTE0LjEsIC0xNi4yLCAtMTAuMywgLTE1LjQsIC05LjYsIC0xMS42LCAtNy43LCAtOS44LCAtMTQuMywgLTE3LjUsIC0xMS4xLCAtMTcuMiwgLTUuMywgLTcuMSwgLTIuMiwgLTcuMSwgLTkuNiwgLTExLjksIC04LjcsIC0xMS40LCAtMTcuMSwgLTIwLjYsIC0xNS4zLCAtMTkuOSwgLTE0LjEsIC0xNC44LCAtMTIuNCwgLTE2LjUsIC0xMS43LCAtMTIuOCwgLTYuNCwgLTEzLjQsIC0xNC4zLCAtMTUuNywgLTEyLjcsIC0xNC4wLCAtNTAuMCwgLTcuOCwgLTUwLjAsIC03LjEsIC04LjcsIC0xMS4zLCAtNi4xLCAtMTEuNCwgLTUwLjAsIC01LjEsIDE4LjYsIC00LjgsIC04LjYsIC04LjEsIC00LjUsIC03LjMsXSxcbiAgICAgICAgICAgIFstMTIuNCwgLTguMiwgLTEzLjAsIC01LjksIC03LjcsIC03LjgsIC03LjQsIC01LjgsIC04LjgsIC0yLjAsIC05LjMsIC0wLjQsIC0xMS42LCAtMTEuMywgLTExLjYsIC05LjQsIC04LjksIC01LjYsIC0xMC4wLCAtMy4yLCAtMTEuNSwgLTExLjEsIC0xMC41LCAtOC4zLCAtNi4zLCAtNC45LCAtNi43LCAtMS4yLCAtMTAuNiwgLTkuNywgLTExLjMsIC04LjAsIC0xNC44LCAtMTMuMSwgLTE1LjUsIC0xMS40LCAtNy41LCAtNy41LCAtNy4xLCAtNS45LCAtOC40LCAtNS44LCAtOC4xLCAtMy42LCAtOS45LCAtOS43LCAtMTAuMSwgLTguMiwgLTUwLjAsIC0zLjAsIC01MC4wLCAtMC4xLCAtMy41LCAtMy4zLCAtMy42LCAtMC43LCAtNTAuMCwgMTQuMiwgLTQuOCwgMTYuNCwgLTguOSwgLTUuOCwgLTguOSwgLTMuNCxdLFxuICAgICAgICAgICAgWy0xMC43LCAtMTMuMiwgLTEyLjQsIC0xMS42LCAtNC44LCAtOC40LCAtNi4xLCAtNy4yLCAtMTAuMywgLTExLjgsIC0xMS4wLCAtMTEuNiwgMi44LCAtMS43LCAwLjcsIC0xLjEsIC02LjIsIC05LjcsIC03LjMsIC04LjQsIC01LjMsIC04LjYsIC02LjEsIC04LjMsIC0xMC41LCAtMTEuMiwgLTkuOCwgLTEwLjIsIDkuNSwgNi41LCA3LjYsIDYuOCwgLTEyLjEsIC0xNi4wLCAtMTMuMCwgLTE2LjIsIC01LjIsIC04LjYsIC03LjEsIC03LjgsIC0xMi41LCAtMTQuNCwgLTEyLjEsIC0xMy4wLCAxLjQsIC0zLjAsIC0xLjYsIC0yLjQsIC01MC4wLCAtOC4xLCAtNTAuMCwgLTcuMywgLTAuMCwgLTUuNCwgLTMuNSwgLTQuNiwgLTUwLjAsIC0xMC4xLCAtOC42LCAtOC45LCAxMy4yLCAtMC45LCA5LjcsIC0wLjMsXSxcbiAgICAgICAgICAgIFstMTguMSwgLTEyLjMsIC0xOS40LCAtMTQuMiwgLTEyLjIsIC05LjUsIC0xMS41LCAtMTAuOCwgLTE3LjksIC0xMS45LCAtMTguMiwgLTEzLjksIC02LjQsIC0zLjcsIC02LjgsIC01LjQsIC0xMi44LCAtNS45LCAtMTMuNiwgLTcuNCwgLTEzLjcsIC05LjksIC0xMi45LCAtMTIuNywgLTE2LjIsIC0xMS42LCAtMTUuMiwgLTEyLjcsIC0zLjIsIDAuNSwgLTMuMywgLTEuOCwgLTE4LjksIC0xNi42LCAtMTguOCwgLTE5LjIsIC0xMi41LCAtOS40LCAtMTAuNiwgLTExLjEsIC0xNy4zLCAtMTQuMSwgLTE2LjIsIC0xNi4wLCAtNy45LCAtMy43LCAtNy44LCAtNi4zLCAtNTAuMCwgMy42LCAtNTAuMCwgMi4zLCAtOC42LCAtNC4yLCAtOC40LCAtNi42LCAtNTAuMCwgLTQuMywgLTguMSwgLTUuOCwgLTAuOSwgMTQuMiwgLTEuOCwgMTEuNixdLFxuICAgICAgICAgICAgWy0xMS44LCAtMTMuMSwgLTExLjUsIC0xMi4wLCAtNi4yLCAtOC4zLCAtNS40LCAtNy40LCAtMTEuOCwgLTEyLjMsIC0xMS4xLCAtMTEuNCwgMC41LCAtMi41LCAyLjQsIC0xLjYsIC02LjgsIC05LjksIC02LjQsIC04LjksIC02LjEsIC04LjYsIC01LjAsIC03LjgsIC0xMC40LCAtMTEuNiwgLTguNSwgLTkuOSwgOC4yLCA2LjQsIDguNywgNi45LCAtMTIuNCwgLTE3LjAsIC0xMi42LCAtMTUuOCwgLTYuNSwgLTguNSwgLTUuMCwgLTcuOCwgLTEzLjIsIC0xMy42LCAtMTAuMywgLTEzLjcsIC0wLjcsIC0zLjIsIC0wLjMsIC0yLjQsIC01MC4wLCAtOS40LCAtNTAuMCwgLTguNywgLTIuMSwgLTUuNiwgLTEuMiwgLTQuOSwgLTUwLjAsIC0xMC4wLCAtNC41LCAtOC45LCA5LjcsIC0xLjgsIDExLjMsIC0wLjksXSxcbiAgICAgICAgICAgIFstMTcuMiwgLTEzLjMsIC0xNy44LCAtMTEuNiwgLTExLjAsIC0xMS4xLCAtMTAuNCwgLTkuMCwgLTE2LjAsIC0xMi43LCAtMTYuMSwgLTExLjEsIC01LjIsIC01LjQsIC02LjAsIC0zLjMsIC0xMS44LCAtNy4zLCAtMTMuMywgLTUuOSwgLTEyLjcsIC0xMS45LCAtMTEuOSwgLTkuMywgLTE1LjIsIC0xNS4wLCAtMTQuOSwgLTExLjAsIC0yLjgsIC0xLjgsIC0yLjksIDAuNCwgLTE3LjQsIC0xOC40LCAtMTguMywgLTE1LjksIC0xMC43LCAtMTEuMiwgLTEwLjYsIC05LjAsIC0xNS40LCAtMTQuOCwgLTE1LjgsIC0xMy4zLCAtNi44LCAtNS45LCAtNy4yLCAtMy45LCAtNTAuMCwgMi4wLCAtNTAuMCwgMy45LCAtNy4wLCAtNi44LCAtNi44LCAtMy45LCAtNTAuMCwgLTUuNCwgLTcuMywgLTMuNCwgLTAuMywgMTEuNiwgLTAuOSwgMTQuMSxdXTtcbiAgICAgICAgdGhpcy5UUkFOUyA9IFtbNSwgMCwgMCwgNF0sXG4gICAgICAgICAgICBbMCwgNSwgNCwgMF0sXG4gICAgICAgICAgICBbMCwgNCwgNSwgMF0sXG4gICAgICAgICAgICBbNCwgMCwgMCwgNV1dO1xuICAgICAgICB0aGlzLkNPTkJMTyA9IHsgJ0EnOiAwLCAnUic6IDEsICdOJzogMiwgJ0QnOiAzLCAnQyc6IDQsICdRJzogNSwgJ0UnOiA2LCAnRyc6IDcsICdIJzogOCwgJ0knOiA5LCAnTCc6IDEwLCAnSyc6IDExLCAnTSc6IDEyLCAnRic6IDEzLCAnUCc6IDE0LCAnUyc6IDE1LCAnVCc6IDE2LCAnVyc6IDE3LCAnWSc6IDE4LCAnVic6IDE5LCAnQic6IDIwLCAnWic6IDIxLCAnWCc6IDIyLCAnKic6IDIzIH07XG4gICAgICAgIHRoaXMuQ09OTlVDTCA9IHsgJ0EnOiAwLCAnVCc6IDEsICdDJzogMiwgJ0cnOiAzIH07XG4gICAgICAgIHRoaXMuQ09OU0NITiA9IHsgJ0FBQSc6IDAsICdBQUMnOiAxLCAnQUFHJzogMiwgJ0FBVCc6IDMsICdBQ0EnOiA0LCAnQUNDJzogNSwgJ0FDRyc6IDYsICdBQ1QnOiA3LCAnQUdBJzogOCwgJ0FHQyc6IDksICdBR0cnOiAxMCwgJ0FHVCc6IDExLCAnQVRBJzogMTIsICdBVEMnOiAxMywgJ0FURyc6IDE0LCAnQVRUJzogMTUsICdDQUEnOiAxNiwgJ0NBQyc6IDE3LCAnQ0FHJzogMTgsICdDQVQnOiAxOSwgJ0NDQSc6IDIwLCAnQ0NDJzogMjEsICdDQ0cnOiAyMiwgJ0NDVCc6IDIzLCAnQ0dBJzogMjQsICdDR0MnOiAyNSwgJ0NHRyc6IDI2LCAnQ0dUJzogMjcsICdDVEEnOiAyOCwgJ0NUQyc6IDI5LCAnQ1RHJzogMzAsICdDVFQnOiAzMSwgJ0dBQSc6IDMyLCAnR0FDJzogMzMsICdHQUcnOiAzNCwgJ0dBVCc6IDM1LCAnR0NBJzogMzYsICdHQ0MnOiAzNywgJ0dDRyc6IDM4LCAnR0NUJzogMzksICdHR0EnOiA0MCwgJ0dHQyc6IDQxLCAnR0dHJzogNDIsICdHR1QnOiA0MywgJ0dUQSc6IDQ0LCAnR1RDJzogNDUsICdHVEcnOiA0NiwgJ0dUVCc6IDQ3LCAnVEFBJzogNDgsICdUQUMnOiA0OSwgJ1RBRyc6IDUwLCAnVEFUJzogNTEsICdUQ0EnOiA1MiwgJ1RDQyc6IDUzLCAnVENHJzogNTQsICdUQ1QnOiA1NSwgJ1RHQSc6IDU2LCAnVEdDJzogNTcsICdUR0cnOiA1OCwgJ1RHVCc6IDU5LCAnVFRBJzogNjAsICdUVEMnOiA2MSwgJ1RURyc6IDYyLCAnVFRUJzogNjMgfTtcbiAgICAgICAgdGhpcy5zZXRNZXRob2QoYWxpZ25HcmlkXyk7XG4gICAgICAgIHRoaXMuc2V0U2VxdWVuY2VzKHNlcTFfLCBzZXEyXyk7XG4gICAgICAgIHRoaXMuc2V0R2FwKGdhcF8pO1xuICAgIH1cbiAgICBmaWxsTmVlZGxlbWFuKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLmxlbjE7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bMF0udmFsdWUgPSAtaSAqIHRoaXMuZ2FwO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bMF0ucGFyZW50SSA9IGkgLSAxO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bMF0ucGFyZW50SiA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5sZW4yOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkWzBdW2ldLnZhbHVlID0gLWkgKiB0aGlzLmdhcDtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkWzBdW2ldLnBhcmVudEkgPSAwO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbMF1baV0ucGFyZW50SiA9IGkgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbGxPbmUoaSwgaikge1xuICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZSA9IE1hdGgubWF4KHRoaXMuZHBHcmlkW2kgLSAxXVtqIC0gMV0udmFsdWUgKyB0aGlzLnNjb3Jlc1tpIC0gMV1baiAtIDFdLCBNYXRoLm1heCh0aGlzLmRwR3JpZFtpIC0gMV1bal0udmFsdWUgLSB0aGlzLmdhcCwgdGhpcy5kcEdyaWRbaV1baiAtIDFdLnZhbHVlIC0gdGhpcy5nYXApKTtcbiAgICAgICAgaWYgKHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID09IHRoaXMuZHBHcmlkW2kgLSAxXVtqIC0gMV0udmFsdWUgKyB0aGlzLnNjb3Jlc1tpIC0gMV1baiAtIDFdKSB7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID0gaSAtIDE7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID0gaiAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPT0gdGhpcy5kcEdyaWRbaSAtIDFdW2pdLnZhbHVlIC0gdGhpcy5nYXApIHtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEkgPSBpIC0gMTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSBqO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IGk7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID0gaiAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ3JpZEZyb21OYW1lKHBhdGgpIHtcbiAgICAgICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU00NSc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTQ1O1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkxPU1VNNTAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5CTE9TVU01MDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JMT1NVTTYyJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuQkxPU1VNNjI7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU04MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTgwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkxPU1VNOTAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5CTE9TVU05MDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BBTTMwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuUEFNMzA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQQU03MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLlBBTTcwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUEFNMjUwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuUEFNMjUwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTlVDTEVPVElERVMnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5OVUNMRU9USURFUztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05OVUNMO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdUUkFOUyc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLlRSQU5TO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTk5VQ0w7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1NDSE5FSURFUic6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLlNDSE5FSURFUjtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05TQ0hOO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxsU2NvcmVzKCk7XG4gICAgfVxuICAgIGNvbnN0cnVjdFJlc3VsdChpLCBqKSB7XG4gICAgICAgIGxldCByZXMxID0gXCJcIiwgcmVzMiA9IFwiXCIsIGdhcFMgPSBcIlwiO1xuICAgICAgICBsZXQgdG90YWwgPSB0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0ZXA7IGkrKykge1xuICAgICAgICAgICAgZ2FwUyArPSAnfCc7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9PSBpKSB7XG4gICAgICAgICAgICAgICAgcmVzMSA9IGdhcFMgKyByZXMxO1xuICAgICAgICAgICAgICAgIHJlczIgPSB0aGlzLnNlcTIuc3Vic3RyKChqIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SiA9PSBqKSB7XG4gICAgICAgICAgICAgICAgcmVzMiA9IGdhcFMgKyByZXMyO1xuICAgICAgICAgICAgICAgIHJlczEgPSB0aGlzLnNlcTEuc3Vic3RyKChpIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgLSAxID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJlczEgPSB0aGlzLnNlcTEuc3Vic3RyKChpIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMxO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzMSA9IGdhcFMgKyByZXMxO1xuICAgICAgICAgICAgICAgIGlmIChqIC0gMSA+PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXMyID0gdGhpcy5zZXEyLnN1YnN0cigoaiAtIDEpICogdGhpcy5zdGVwLCB0aGlzLnN0ZXApICsgcmVzMjtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlczIgPSBnYXBTICsgcmVzMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB0ZW1wSSA9IGk7XG4gICAgICAgICAgICBpID0gdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50STtcbiAgICAgICAgICAgIGogPSB0aGlzLmRwR3JpZFt0ZW1wSV1bal0ucGFyZW50SjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEFsaWduZWQocmVzMSwgcmVzMiwgdG90YWwpO1xuICAgIH1cbiAgICBmaWxsU2NvcmVzKCkge1xuICAgICAgICB0aGlzLnNjb3JlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuMTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnNjb3Jlcy5wdXNoKFtdKTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjb3Jlc1tpXS5wdXNoKHRoaXMuYWxpZ25HcmlkW3RoaXMuY29ubmVjdGlvbnNbdGhpcy5zZXExLnN1YnN0cihpICogdGhpcy5zdGVwLCB0aGlzLnN0ZXApXV1bdGhpcy5jb25uZWN0aW9uc1t0aGlzLnNlcTIuc3Vic3RyKGogKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCldXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHlwZVJlYygpIHtcbiAgICAgICAgaWYgKC9bQVRHQ10qLy50ZXN0KHRoaXMuc2VxMSkgJiYgL1tBVEdDXSovLnRlc3QodGhpcy5zZXEyKSlcbiAgICAgICAgICAgIHJldHVybiBcIk5VQ0xFT1RJREVTXCI7XG4gICAgICAgIGlmICgvW0FSTkRDUUVHSElMS01GUFNUV1lWQlpYKl0qLy50ZXN0KHRoaXMuc2VxMSkgJiYgL1tBUk5EQ1FFR0hJTEtNRlBTVFdZVkJaWCpdKi8udGVzdCh0aGlzLnNlcTIpKVxuICAgICAgICAgICAgcmV0dXJuIFwiQkxPU1VNNjJcIjtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDYW4ndCByZWNvZ25pemUgc2VxdWVuY2UgdHlwZVwiKTtcbiAgICB9XG4gICAgbmVlZGxlbWFuV3VuY2goKSB7XG4gICAgICAgIHRoaXMuZHBHcmlkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW4xICsgMTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcm93ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuMiArIDE7IGorKylcbiAgICAgICAgICAgICAgICByb3cucHVzaChuZXcgQ2VsbCgpKTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGxOZWVkbGVtYW4oKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5sZW4xOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IHRoaXMubGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsT25lKGksIGopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFJlc3VsdCh0aGlzLmxlbjEsIHRoaXMubGVuMik7XG4gICAgfVxuICAgIHNtaXRoV2F0ZXJtYW4oKSB7XG4gICAgICAgIHRoaXMuZHBHcmlkID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW4xICsgMTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcm93ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMubGVuMiArIDE7IGorKylcbiAgICAgICAgICAgICAgICByb3cucHVzaChuZXcgQ2VsbCgpKTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYmVzdFZhbCA9IDA7XG4gICAgICAgIGxldCBiZXN0SSA9IDAsIGJlc3RKID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5sZW4xOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDw9IHRoaXMubGVuMjsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsT25lKGksIGopO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRwR3JpZFt0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJXVt0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKXS52YWx1ZSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID4gYmVzdFZhbCkge1xuICAgICAgICAgICAgICAgICAgICBiZXN0VmFsID0gdGhpcy5kcEdyaWRbaV1bal0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RJID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEogPSBqO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RSZXN1bHQoYmVzdEksIGJlc3RKKTtcbiAgICB9XG4gICAgc2V0U2VxdWVuY2VzKHNlcTFfLCBzZXEyXykge1xuICAgICAgICB0aGlzLnNlcTEgPSBzZXExXztcbiAgICAgICAgdGhpcy5zZXEyID0gc2VxMl87XG4gICAgICAgIHRoaXMubGVuMSA9IHRoaXMuc2VxMS5sZW5ndGggLyB0aGlzLnN0ZXA7XG4gICAgICAgIHRoaXMubGVuMiA9IHRoaXMuc2VxMi5sZW5ndGggLyB0aGlzLnN0ZXA7XG4gICAgICAgIHRoaXMuZmlsbFNjb3JlcygpO1xuICAgIH1cbiAgICBzZXRHYXAoZ2FwXykge1xuICAgICAgICB0aGlzLmdhcCA9IGdhcF87XG4gICAgfVxuICAgIHNldE1ldGhvZChhbGlnbkdyaWRfID0gXCJcIikge1xuICAgICAgICBpZiAoYWxpZ25HcmlkXyA9PSBcIkFVVE9cIikge1xuICAgICAgICAgICAgYWxpZ25HcmlkXyA9IHRoaXMudHlwZVJlYygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZEZyb21OYW1lKGFsaWduR3JpZF8pO1xuICAgIH1cbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgY2F0ZWdvcnksIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IF90ZXN0UGFsZXR0ZU4sIF90ZXN0UGFsZXR0ZUFBIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3Rlc3RzL3BhbGV0dGVzLnRlc3QnO1xuY2F0ZWdvcnkoJ1BhbGV0dGVzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3Rlc3RQYWxldHRlTicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdFBhbGV0dGVOKCk7IH0pKTtcbiAgICB0ZXN0KCd0ZXN0UGFsZXR0ZUFBJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0UGFsZXR0ZUFBKCk7IH0pKTtcbn0pO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBjYXRlZ29yeSwgdGVzdCwgZXhwZWN0LCBleHBlY3RPYmplY3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBOdWNsZW90aWRlcywgTnVjbGVvdGlkZXNQYWxldHRlcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9udWNsZW90aWRlcyc7XG5pbXBvcnQgeyBBbWlub2FjaWRzUGFsZXR0ZXMgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvYW1pbm9hY2lkcyc7XG5pbXBvcnQgeyBXZWJMb2dvIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3ZpZXdlcnMvd2ViLWxvZ28nO1xuaW1wb3J0IHsgVW5rbm93blNlcVBhbGV0dGUgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdW5rbm93bic7XG5jYXRlZ29yeSgnV2ViTG9nbycsICgpID0+IHtcbiAgICBjb25zdCBjc3ZEZk4xID0gYHNlcVxuQUNHVENUXG5DQUdUR1RcblRUQ0FBQ1xuYDtcbiAgICAvKiogMiAtIGlzIGFuIGVycm9yIG1vbm9tZXJcbiAgICAgKiBUaGlzIHNlcXVlbmNlIHNldCBzaG91bGQgYmUgY2xhc3NpZmllZCBhcyBudWNsZW90aWRlcyBzZXF1ZW5jZXMuXG4gICAgICogU21hbGwgZXJyb3IsIG5vdCBzaW1pbGFyIHRvIGFtaW5vIGFjaWRzLlxuICAgICAqL1xuICAgIGNvbnN0IGNzdkRmTjFlID0gYHNlcVxuQUNHVEFUXG5DQUdUVEdcblRUQ0cyQ1xuYDtcbiAgICAvKiogUHVyZSBhbWlubyBhY2lkcyBzZXF1ZW5jZSAqL1xuICAgIGNvbnN0IGNzdkRmQUExID0gYHNlcVxuRldQSEVZVlxuWU5SUVdZVlxuTUtQU0VZVlxuYDtcbiAgICAvKiogQSAtIGFsYW5pbmUsIEcgLSBnbHljaW5lLCBUIC09IHRocmVvbmluZSwgQyAtIGN5c3RlaW5lLCBXIC0gdHJ5cHRvcGhhblxuICAgICAqIFRoaXMgc2VxdWVuY2Ugc2V0IHNob3VsZCBiZSBkZXRlY3RlZCBhcyBhbWlubyBhY2lkcyBtb3JlIHRoYW4gbnVjbGVvdGlkZXMuXG4gICAgICovXG4gICAgY29uc3QgY3N2RGZBQTIgPSBgc2VxXG5BR1RDQVRcbkFHVENHQ1xuQUdUQ0FUV1xuYDtcbiAgICAvKiogVGhpcyBzZXF1ZW5jZSBzZXQgc2hvdWxkIGJlIHJlY29nbml6ZWQgYXMgdW5rbm93bi4gKi9cbiAgICBjb25zdCBjc3ZEZlggPSBgc2VxXG5YWkp7fTJcbjVaNDczM1xuM1o2PjwvXG42NzU2ODdcbmA7XG4gICAgLy8gYW5vbnltb3VzIGZ1bmN0aW9ucyBzcGVjaWZpZWQgaW4gdGVzdCgpIHJlZ2lzdGVyaW5nIG11c3QgcmV0dXJuIFByb21pc2U8YW55PlxuICAgIHRlc3QoJ3Rlc3RHZXRTdGF0cycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdEdldFN0YXRzKGNzdkRmTjEpOyB9KSk7XG4gICAgdGVzdCgndGVzdEdldEFscGhhYmV0U2ltaWxhcml0eScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdEdldEFscGhhYmV0U2ltaWxhcml0eSgpOyB9KSk7XG4gICAgdGVzdCgndGVzdFBpY2t1cFBhbGV0dGVOMScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdFBpY2t1cFBhbGV0dGVOMShjc3ZEZk4xKTsgfSkpO1xuICAgIHRlc3QoJ3Rlc3RQaWNrdXBQYWxldHRlTjFlJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0UGlja3VwUGFsZXR0ZU4xZShjc3ZEZk4xZSk7IH0pKTtcbiAgICB0ZXN0KCd0ZXN0UGlja3VwUGFsZXR0ZUFBMScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdFBpY2t1cFBhbGV0dGVBQTEoY3N2RGZBQTEpOyB9KSk7XG4gICAgdGVzdCgndGVzdFBpY2t1cFBhbGV0dGVYJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0UGlja3VwUGFsZXR0ZVgoY3N2RGZYKTsgfSkpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RHZXRTdGF0cyhjc3ZEZk4xKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGZOMSA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGNzdkRmTjEpO1xuICAgICAgICBjb25zdCBzZXFDb2wgPSBkZk4xLmNvbCgnc2VxJyk7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gV2ViTG9nby5nZXRTdGF0cyhzZXFDb2wsIDUsIFdlYkxvZ28uc3BsaXR0ZXJBc0Zhc3RhKTtcbiAgICAgICAgZXhwZWN0T2JqZWN0KHN0YXRzLmZyZXEsIHtcbiAgICAgICAgICAgICdBJzogNCxcbiAgICAgICAgICAgICdDJzogNSxcbiAgICAgICAgICAgICdHJzogMyxcbiAgICAgICAgICAgICdUJzogNlxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KHN0YXRzLnNhbWVMZW5ndGgsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0R2V0QWxwaGFiZXRTaW1pbGFyaXR5KCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZyZXEgPSB7XG4gICAgICAgICAgICAnQSc6IDIwNDEsXG4gICAgICAgICAgICAnQyc6IDMwMTUsXG4gICAgICAgICAgICAnRyc6IDMwMTUsXG4gICAgICAgICAgICAnVCc6IDIwNDgsXG4gICAgICAgICAgICAnLSc6IDEwMDBcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXQgPSBuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IFdlYkxvZ28uZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KGZyZXEsIGFscGhhYmV0KTtcbiAgICAgICAgZXhwZWN0KHJlcyA+IDAuNiwgdHJ1ZSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RQaWNrdXBQYWxldHRlTjEoY3N2RGZOMSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoY3N2RGZOMSk7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbCgnc2VxJyk7XG4gICAgICAgIGNvbnN0IGNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKGNvbCk7XG4gICAgICAgIGV4cGVjdChjcCBpbnN0YW5jZW9mIE51Y2xlb3RpZGVzUGFsZXR0ZXMsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGlja3VwUGFsZXR0ZU4xZShjc3ZEZk4xZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoY3N2RGZOMWUpO1xuICAgICAgICBjb25zdCBjb2wgPSBkZi5jb2woJ3NlcScpO1xuICAgICAgICBjb25zdCBjcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZShjb2wpO1xuICAgICAgICBleHBlY3QoY3AgaW5zdGFuY2VvZiBOdWNsZW90aWRlc1BhbGV0dGVzLCB0cnVlKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfdGVzdFBpY2t1cFBhbGV0dGVBQTEoY3N2RGZBQTEpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZiA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGNzdkRmQUExKTtcbiAgICAgICAgY29uc3QgY29sID0gZGYuY29sKCdzZXEnKTtcbiAgICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoY29sKTtcbiAgICAgICAgZXhwZWN0KGNwIGluc3RhbmNlb2YgQW1pbm9hY2lkc1BhbGV0dGVzLCB0cnVlKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfdGVzdFBpY2t1cFBhbGV0dGVYKGNzdkRmWCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoY3N2RGZYKTtcbiAgICAgICAgY29uc3QgY29sID0gZGYuY29sKCdzZXEnKTtcbiAgICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoY29sKTtcbiAgICAgICAgZXhwZWN0KGNwIGluc3RhbmNlb2YgVW5rbm93blNlcVBhbGV0dGUsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGlja3VwUGFsZXR0ZUFBMihkZkFBMikge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHNlcUNvbCA9IGRmQUEyLmNvbCgnc2VxJyk7XG4gICAgICAgIGNvbnN0IGNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKHNlcUNvbCk7XG4gICAgICAgIGV4cGVjdChjcCBpbnN0YW5jZW9mIEFtaW5vYWNpZHNQYWxldHRlcywgdHJ1ZSk7XG4gICAgfSk7XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGFmdGVyLCBiZWZvcmUsIGNhdGVnb3J5LCBleHBlY3QsIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVZpZXcsIHJlYWREYXRhZnJhbWUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGdldEVtYmVkZGluZ0NvbHNOYW1lcywgc2VxdWVuY2VTcGFjZSB9IGZyb20gJy4uL3V0aWxzL3NlcXVlbmNlLXNwYWNlJztcbmltcG9ydCB7IGRyYXdUb29sdGlwLCBzZXF1ZW5jZUdldFNpbWlsYXJpdGllcyB9IGZyb20gJy4uL3V0aWxzL3NlcXVlbmNlLWFjdGl2aXR5LWNsaWZmcyc7XG5pbXBvcnQgeyBnZXRBY3Rpdml0eUNsaWZmcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3ZpZXdlcnMvYWN0aXZpdHktY2xpZmZzJztcbmNhdGVnb3J5KCdhY3Rpdml0eUNsaWZmcycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIGxldCBhY3RDbGlmZnNUYWJsZVZpZXc7XG4gICAgbGV0IGFjdENsaWZmc0RmO1xuICAgIGJlZm9yZSgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgYWN0Q2xpZmZzVGFibGVWaWV3ID0geWllbGQgY3JlYXRlVGFibGVWaWV3KCdzYW1wbGVfTVNBLmNzdicpO1xuICAgICAgICBhY3RDbGlmZnNEZiA9IHlpZWxkIHJlYWREYXRhZnJhbWUoJ3NhbXBsZV9NU0EuY3N2Jyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2FjdGl2aXR5Q2xpZmZzT3BlbicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBheGVzTmFtZXMgPSBnZXRFbWJlZGRpbmdDb2xzTmFtZXMoYWN0Q2xpZmZzRGYpO1xuICAgICAgICBjb25zdCB1bml0cyA9IGFjdENsaWZmc0RmLmNvbCgnTVNBJykudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICdTUEUnOiB7IGN5Y2xlczogMjAwMCwgbGFtYmRhOiAxLjAsIGRsYW1iZGE6IDAuMDAwNSB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzY2F0dGVyUGxvdCA9IHlpZWxkIGdldEFjdGl2aXR5Q2xpZmZzKGFjdENsaWZmc0RmLCBhY3RDbGlmZnNEZi5jb2woJ01TQScpLCBheGVzTmFtZXMsICdBY3Rpdml0eSBjbGlmZnMnLCBhY3RDbGlmZnNEZi5jb2woJ0FjdGl2aXR5JyksIDUwLCAnTGV2ZW5zaHRlaW4nLCAndC1TTkUnLCBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUsIHVuaXRzLCBzZXF1ZW5jZVNwYWNlLCBzZXF1ZW5jZUdldFNpbWlsYXJpdGllcywgZHJhd1Rvb2x0aXApO1xuICAgICAgICBleHBlY3Qoc2NhdHRlclBsb3QgIT0gbnVsbCwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGNsaWZmc0xpbmsgPSBBcnJheS5mcm9tKHNjYXR0ZXJQbG90LnJvb3QuY2hpbGRyZW4pXG4gICAgICAgICAgICAuZmlsdGVyKChpdCkgPT4gaXQuY2xhc3NOYW1lID09PSAndWktYnRuIHVpLWJ0bi1vaycpO1xuICAgICAgICBleHBlY3QoY2xpZmZzTGlua1swXS5pbm5lclRleHQsICcxMDEgY2xpZmZzJyk7XG4gICAgfSkpO1xuICAgIGFmdGVyKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBhY3RDbGlmZnNUYWJsZVZpZXcuY2xvc2UoKTtcbiAgICB9KSk7XG59KSk7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCBleHBlY3RBcnJheSwgdGVzdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgTm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tICcuLi91dGlscy9ub3RhdGlvbi1jb252ZXJ0ZXInO1xuLy8gaW1wb3J0IHttbVNlbVR5cGV9IGZyb20gJy4uL2NvbnN0Jztcbi8vIGltcG9ydCB7aW1wb3J0RmFzdGF9IGZyb20gJy4uL3BhY2thZ2UnO1xuY2F0ZWdvcnkoJ2NvbnZlcnRlcnMnLCAoKSA9PiB7XG4gICAgbGV0IFNhbXBsZXM7XG4gICAgKGZ1bmN0aW9uIChTYW1wbGVzKSB7XG4gICAgICAgIFNhbXBsZXNbXCJmYXN0YVB0XCJdID0gXCJmYXN0YVB0XCI7XG4gICAgICAgIFNhbXBsZXNbXCJzZXBhcmF0b3JQdFwiXSA9IFwic2VwYXJhdG9yUHRcIjtcbiAgICAgICAgU2FtcGxlc1tcImhlbG1QdFwiXSA9IFwiaGVsbVB0XCI7XG4gICAgICAgIFNhbXBsZXNbXCJmYXN0YURuYVwiXSA9IFwiZmFzdGFEbmFcIjtcbiAgICAgICAgU2FtcGxlc1tcInNlcGFyYXRvckRuYVwiXSA9IFwic2VwYXJhdG9yRG5hXCI7XG4gICAgICAgIFNhbXBsZXNbXCJoZWxtRG5hXCJdID0gXCJoZWxtRG5hXCI7XG4gICAgICAgIFNhbXBsZXNbXCJmYXN0YVJuYVwiXSA9IFwiZmFzdGFSbmFcIjtcbiAgICAgICAgU2FtcGxlc1tcInNlcGFyYXRvclJuYVwiXSA9IFwic2VwYXJhdG9yUm5hXCI7XG4gICAgICAgIFNhbXBsZXNbXCJoZWxtUm5hXCJdID0gXCJoZWxtUm5hXCI7XG4gICAgfSkoU2FtcGxlcyB8fCAoU2FtcGxlcyA9IHt9KSk7XG4gICAgY29uc3QgX2NzdlR4dHMgPSB7XG4gICAgICAgIGZhc3RhUHQ6IGBzZXFcbkZXUEhFWVxuWU5SUVdZVlxuTUtQU0VZVlxuYCxcbiAgICAgICAgc2VwYXJhdG9yUHQ6IGBzZXFcbkYtVy1QLUgtRS1ZXG5ZLU4tUi1RLVctWS1WXG5NLUstUC1TLUUtWS1WXG5gLFxuICAgICAgICBoZWxtUHQ6IGBzZXFcblBFUFRJREUxe0YuVy5QLkguRS5ZfSQkJFxuUEVQVElERTF7WS5OLlIuUS5XLlkuVn0kJCRcblBFUFRJREUxe00uSy5QLlMuRS5ZLlZ9JCQkXG5gLFxuICAgICAgICBmYXN0YURuYTogYHNlcVxuQUNHVENcbkNBR1RHVFxuVFRDQUFDXG5gLFxuICAgICAgICBzZXBhcmF0b3JEbmE6IGBzZXFcbkEvQy9HL1QvQ1xuQy9BL0cvVC9HL1RcblQvVC9DL0EvQS9DXG5gLFxuICAgICAgICBoZWxtRG5hOiBgc2VxXG5ETkExe0QoQSlQLkQoQylQLkQoRylQLkQoVClQLkQoQylQfSQkJFxuRE5BMXtEKEMpUC5EKEEpUC5EKEcpUC5EKFQpUC5EKEcpUC5EKFQpUH0kJCRcbkROQTF7RChUKVAuRChUKVAuRChDKVAuRChBKVAuRChBKVAuRChDKVB9JCQkXG5gLFxuICAgICAgICBmYXN0YVJuYTogYHNlcVxuQUNHVUNcbkNBR1VHVVxuVVVDQUFDXG5gLFxuICAgICAgICBzZXBhcmF0b3JSbmE6IGBzZXFcbkEqQypHKlUqQ1xuQypBKkcqVSpHKlVcblUqVSpDKkEqQSpDXG5gLFxuICAgICAgICBoZWxtUm5hOiBgc2VxXG5STkExe1IoQSlQLlIoQylQLlIoRylQLlIoVSlQLlIoQylQfSQkJFxuUk5BMXtSKEMpUC5SKEEpUC5SKEcpUC5SKFUpUC5SKEcpUC5SKFUpUH0kJCRcblJOQTF7UihVKVAuUihVKVAuUihDKVAuUihBKVAuUihBKVAuUihDKVB9JCQkXG5gLFxuICAgIH07XG4gICAgY29uc3QgX2NzdkRmcyA9IHt9O1xuICAgIC8qKiBBbHNvIGRldGVjdHMgc2VtYW50aWMgdHlwZXNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHJldHVybiB7UHJvbWlzZTxERy5EYXRhRnJhbWU+fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlYWRDc3Yoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBfY3N2RGZzKSkge1xuICAgICAgICAgICAgX2NzdkRmc1trZXldID0gKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjc3YgPSBfY3N2VHh0c1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoY3N2KTtcbiAgICAgICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRmO1xuICAgICAgICAgICAgfSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jc3ZEZnNba2V5XTtcbiAgICB9XG4gICAgO1xuICAgIGZ1bmN0aW9uIGNvbnZlcnRlcih0Z3ROb3RhdGlvbiwgdGd0U2VwYXJhdG9yID0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNyY0NvbCkge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gbmV3IE5vdGF0aW9uQ29udmVydGVyKHNyY0NvbCk7XG4gICAgICAgICAgICBjb25zdCByZXNDb2wgPSBjb252ZXJ0ZXIuY29udmVydCh0Z3ROb3RhdGlvbiwgdGd0U2VwYXJhdG9yKTtcbiAgICAgICAgICAgIHJldHVybiByZXNDb2w7XG4gICAgICAgIH07XG4gICAgfVxuICAgIDtcbiAgICBmdW5jdGlvbiBfdGVzdENvbnZlcnQoc3JjS2V5LCBjb252ZXJ0ZXIsIHRndEtleSkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3Qgc3JjRGYgPSB5aWVsZCByZWFkQ3N2KHNyY0tleSk7XG4gICAgICAgICAgICBjb25zdCBzcmNDb2wgPSBzcmNEZi5jb2woJ3NlcScpO1xuICAgICAgICAgICAgY29uc3QgcmVzQ29sID0gY29udmVydGVyKHNyY0NvbCk7XG4gICAgICAgICAgICBjb25zdCB0Z3REZiA9IHlpZWxkIHJlYWRDc3YodGd0S2V5KTtcbiAgICAgICAgICAgIGNvbnN0IHRndENvbCA9IHRndERmLmNvbCgnc2VxJyk7XG4gICAgICAgICAgICBleHBlY3RBcnJheShyZXNDb2wudG9MaXN0KCksIHRndENvbC50b0xpc3QoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0ZXN0KCd0ZXN0RmFzdGFQdFRvU2VwYXJhdG9yJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLmZhc3RhUHQsIGNvbnZlcnRlcihcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLywgJy0nKSwgU2FtcGxlcy5zZXBhcmF0b3JQdCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RGYXN0YURuYVRvU2VwYXJhdG9yJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLmZhc3RhRG5hLCBjb252ZXJ0ZXIoXCJTRVBBUkFUT1JcIiAvKiBOT1RBVElPTi5TRVBBUkFUT1IgKi8sICcvJyksIFNhbXBsZXMuc2VwYXJhdG9yRG5hKTtcbiAgICB9KSk7XG4gICAgdGVzdCgndGVzdEZhc3RhUm5hVG9TZXBhcmF0b3InLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuZmFzdGFSbmEsIGNvbnZlcnRlcihcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLywgJyonKSwgU2FtcGxlcy5zZXBhcmF0b3JSbmEpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0RmFzdGFQdFRvSGVsbScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdENvbnZlcnQoU2FtcGxlcy5mYXN0YVB0LCBjb252ZXJ0ZXIoXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyksIFNhbXBsZXMuaGVsbVB0KTtcbiAgICB9KSk7XG4gICAgdGVzdCgndGVzdEZhc3RhRG5hVG9IZWxtJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLmZhc3RhRG5hLCBjb252ZXJ0ZXIoXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyksIFNhbXBsZXMuaGVsbURuYSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RGYXN0YVJuYVRvSGVsbScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdENvbnZlcnQoU2FtcGxlcy5mYXN0YVJuYSwgY29udmVydGVyKFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi8pLCBTYW1wbGVzLmhlbG1SbmEpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0U2VwYXJhdG9yUHRUb0Zhc3RhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLnNlcGFyYXRvclB0LCBjb252ZXJ0ZXIoXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovKSwgU2FtcGxlcy5mYXN0YVB0KTtcbiAgICB9KSk7XG4gICAgdGVzdCgndGVzdFNlcGFyYXRvckRuYVRvRmFzdGEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuc2VwYXJhdG9yRG5hLCBjb252ZXJ0ZXIoXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovKSwgU2FtcGxlcy5mYXN0YURuYSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RTZXBhcmF0b3JSbmFUb0Zhc3RhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLnNlcGFyYXRvclJuYSwgY29udmVydGVyKFwiRkFTVEFcIiAvKiBOT1RBVElPTi5GQVNUQSAqLyksIFNhbXBsZXMuZmFzdGFSbmEpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0U2VwYXJhdG9yUHRUb0hlbG0nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuc2VwYXJhdG9yUHQsIGNvbnZlcnRlcihcIkhFTE1cIiAvKiBOT1RBVElPTi5IRUxNICovKSwgU2FtcGxlcy5oZWxtUHQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0U2VwYXJhdG9yRG5hVG9IZWxtJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLnNlcGFyYXRvckRuYSwgY29udmVydGVyKFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi8pLCBTYW1wbGVzLmhlbG1EbmEpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0U2VwYXJhdG9yUm5hVG9IZWxtJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLnNlcGFyYXRvclJuYSwgY29udmVydGVyKFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi8pLCBTYW1wbGVzLmhlbG1SbmEpO1xuICAgIH0pKTtcbn0pO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBjYXRlZ29yeSwgdGVzdCwgZXhwZWN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBpbXBvcnRGYXN0YSB9IGZyb20gJy4uL3BhY2thZ2UnO1xuY2F0ZWdvcnkoJ2RldGVjdG9ycycsICgpID0+IHtcbiAgICBjb25zdCBjc3ZEZjEgPSBgY29sMVxuMVxuMlxuM2A7XG4gICAgY29uc3QgY3N2RGYyID0gYGNvbDFcbjRcbjVcbjZcbjdgO1xuICAgIGNvbnN0IGNzdkRmMyA9IGBjb2wxXG44XG45XG4xMFxuMTFcbjEyYDtcbiAgICBjb25zdCBjc3ZEZlNtaWxlcyA9IGBjb2wxXG5DQ0NDTjFDKD1PKUNOPUMoYzJjYyhGKWNjYzEyKUMzQ0NDQ0MzXG5DMUNDQ0NDMVxuQ0NDQ0NDXG5gO1xuICAgIGNvbnN0IGNzdkRmRG5hMSA9IGBzZXFcbkFDR1RDXG5DQUdUR1RcblRUQ0FBQ1xuYDtcbiAgICBjb25zdCBjc3ZEZlJuYTEgPSBgc2VxXG5BQ0dVQ1xuQ0FHVUdVXG5VVUNBQUNcbmA7XG4gICAgLyoqIFB1cmUgYW1pbm8gYWNpZHMgc2VxdWVuY2UgKi9cbiAgICBjb25zdCBjc3ZEZlB0MSA9IGBzZXFcbkZXUEhFWVxuWU5SUVdZVlxuTUtQU0VZVlxuYDtcbiAgICBjb25zdCBjc3ZEZlNlcERuYSA9IGBzZXFcbkEqQypHKlQqQ1xuQypBKkcqVCpHKlRcblQqVCpDKkEqQSpDXG5gO1xuICAgIGNvbnN0IGNzdkRmU2VwUm5hID0gYHNlcVxuQSpDKkcqVSpDXG5DKkEqRypVKkcqVVxuVSpVKkMqQSpBKkNcbmA7XG4gICAgY29uc3QgY3N2RGZTZXBQdCA9IGBzZXFcbkYtVy1QLUgtRS1ZXG5ZLU4tUi1RLVctWS1WXG5NLUstUC1TLUUtWS1WXG5gO1xuICAgIGNvbnN0IGNzdkRmU2VwVW4xID0gYHNlcVxuYWJjLWRmZ2ctYWJjMS1jZnIzLXJ0eS13ZXJ0XG5ydXQxMi1oZXIyLXJ0eS13ZXJ0LWFiYy1hYmMxLWRmZ2dcbnJ1dDEyLXJ0eS1oZXIyLWFiYy1jZnIzLXdlcnQtcnV0MTJcbmA7XG4gICAgY29uc3QgY3N2RGZTZXBVbjIgPSBgc2VxXG5hYmMvZGZnZy9hYmMxL2NmcjMvcnR5L3dlcnRcbnJ1dDEyL2hlcjIvcnR5L3dlcnQvL2FiYy9hYmMxL2RmZ2dcbnJ1dDEyL3J0eS9oZXIyL2FiYy9jZnIzLy93ZXJ0L3J1dDEyXG5gO1xuICAgIGNvbnN0IGNzdkRmU2VwTXNhRG5hMSA9IGBzZXFcbkEtQy0tRy1ULS1DLVRcbkMtQS1DLS1ULS1HLVRcbkEtQy1DLUctVC1BLUMtVFxuYDtcbiAgICBjb25zdCBjc3ZEZk1zYURuYTEgPSBgc2VxXG5BQy1HVC1DVFxuQ0FDLVQtR1RcbkFDQ0dUQUNUXG5gO1xuICAgIGNvbnN0IGNzdkRmTXNhUHQxID0gYHNlcVxuRldSLVdZVi1LSFBcbllOUi1XWVYtS0hQXG5NV1JTV1ktQ0tIUFxuYDtcbiAgICBjb25zdCBzYW1wbGVzID0ge1xuICAgICAgICAncGVwdGlkZXNDb21wbGV4JzogJ1N5c3RlbTpBcHBEYXRhL0Jpby9zYW1wbGVzL3BlcHRpZGVzX2NvbXBsZXhfbXNhLmNzdicsXG4gICAgICAgICdmYXN0YUNzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9zYW1wbGVfRkFTVEEuY3N2JyxcbiAgICAgICAgJ2Zhc3RhRmFzdGEnOiAnU3lzdGVtOkFwcERhdGEvQmlvL3NhbXBsZXMvc2FtcGxlX0ZBU1RBLmZhc3RhJyxcbiAgICAgICAgJ21zYUNvbXBsZXgnOiAnU3lzdGVtOkFwcERhdGEvQmlvL3NhbXBsZXMvc2FtcGxlX01TQS5jc3YnLFxuICAgICAgICAnaGVsbUNzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9zYW1wbGVfSEVMTS5jc3YnLFxuICAgICAgICAndGVzdERlbW9nQ3N2JzogJ1N5c3RlbTpBcHBEYXRhL0Jpby9zYW1wbGVzL3Rlc3REZW1vZy5jc3YnLFxuICAgICAgICAndGVzdEhlbG1Dc3YnOiAnU3lzdGVtOkFwcERhdGEvQmlvL3NhbXBsZXMvdGVzdEhlbG0uY3N2JyxcbiAgICAgICAgJ3Rlc3RJZENzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9pZC5jc3YnLFxuICAgICAgICAndGVzdFNtaWxlc0Nzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy90ZXN0U21pbGVzLmNzdicsXG4gICAgICAgICd0ZXN0U21pbGVzMkNzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy90ZXN0U21pbGVzMi5jc3YnLFxuICAgIH07XG4gICAgY29uc3QgX3NhbXBsZXNEZnMgPSB7fTtcbiAgICBmdW5jdGlvbiByZWFkU2FtcGxlcyhrZXksIHJlYWRGaWxlID0gcmVhZEZpbGVDc3YpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBfc2FtcGxlc0RmcykpIHtcbiAgICAgICAgICAgICAgICBfc2FtcGxlc0Rmc1trZXldID0gKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGYgPSB5aWVsZCByZWFkRmlsZShzYW1wbGVzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZjtcbiAgICAgICAgICAgICAgICB9KSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfc2FtcGxlc0Rmc1trZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgO1xuICAgIGZ1bmN0aW9uIHJlYWRGaWxlQ3N2KGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzdiA9IHlpZWxkIGdyb2suZGFwaS5maWxlcy5yZWFkQXNUZXh0KGZpbGUpO1xuICAgICAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3YpO1xuICAgICAgICAgICAgcmV0dXJuIGRmO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEZpbGVGYXN0YShmaWxlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0eHQgPSB5aWVsZCBncm9rLmRhcGkuZmlsZXMucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IGRmID0gaW1wb3J0RmFzdGEodHh0KVswXTtcbiAgICAgICAgICAgIHJldHVybiBkZjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IF9jc3ZEZnMgPSB7fTtcbiAgICBjb25zdCByZWFkQ3N2ID0gKGtleSwgY3N2KSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBfY3N2RGZzKSkge1xuICAgICAgICAgICAgICAgIF9jc3ZEZnNba2V5XSA9ICgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3YpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZjtcbiAgICAgICAgICAgICAgICB9KSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY3N2RGZzW2tleV07XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdGVzdCgnTmVnYXRpdmUxJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0TmVnKHJlYWRDc3YoJ2NzdkRmMScsIGNzdkRmMSksICdjb2wxJyk7IH0pKTtcbiAgICB0ZXN0KCdOZWdhdGl2ZTInLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3ROZWcocmVhZENzdignY3N2RGYyJywgY3N2RGYyKSwgJ2NvbDEnKTsgfSkpO1xuICAgIHRlc3QoJ05lZ2F0aXZlMycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdE5lZyhyZWFkQ3N2KCdjc3ZEZjMnLCBjc3ZEZjMpLCAnY29sMScpOyB9KSk7XG4gICAgdGVzdCgnTmVnYXRpdmVTbWlsZXMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3ROZWcocmVhZENzdignY3N2RGZTbWlsZXMnLCBjc3ZEZlNtaWxlcyksICdjb2wxJyk7IH0pKTtcbiAgICB0ZXN0KCdEbmExJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRDc3YoJ2NzdkRmRG5hMScsIGNzdkRmRG5hMSksICdzZXEnLCAnZmFzdGE6U0VROkROQScpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdSbmExJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRDc3YoJ2NzdkRmUm5hMScsIGNzdkRmUm5hMSksICdzZXEnLCAnZmFzdGE6U0VROlJOQScpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdBQTEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZQdDEnLCBjc3ZEZlB0MSksICdzZXEnLCAnZmFzdGE6U0VROlBUJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ01zYURuYTEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZNc2FEbmExJywgY3N2RGZNc2FEbmExKSwgJ3NlcScsICdmYXN0YTpTRVEuTVNBOkROQScpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdNc2FBQTEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZNc2FQdDEnLCBjc3ZEZk1zYVB0MSksICdzZXEnLCAnZmFzdGE6U0VRLk1TQTpQVCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBEbmEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZTZXBEbmEnLCBjc3ZEZlNlcERuYSksICdzZXEnLCAnc2VwYXJhdG9yOlNFUTpETkEnLCAnKicpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBSbmEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZTZXBSbmEnLCBjc3ZEZlNlcFJuYSksICdzZXEnLCAnc2VwYXJhdG9yOlNFUTpSTkEnLCAnKicpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBQdCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkQ3N2KCdjc3ZEZlNlcFB0JywgY3N2RGZTZXBQdCksICdzZXEnLCAnc2VwYXJhdG9yOlNFUTpQVCcsICctJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1NlcFVuMScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkQ3N2KCdjc3ZEZlNlcFVuMScsIGNzdkRmU2VwVW4xKSwgJ3NlcScsICdzZXBhcmF0b3I6U0VROlVOJywgJy0nKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnU2VwVW4yJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRDc3YoJ2NzdkRmU2VwVW4yJywgY3N2RGZTZXBVbjIpLCAnc2VxJywgJ3NlcGFyYXRvcjpTRVE6VU4nLCAnLycpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBNc2FOMScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkQ3N2KCdjc3ZEZlNlcE1zYURuYTEnLCBjc3ZEZlNlcE1zYURuYTEpLCAnc2VxJywgJ3NlcGFyYXRvcjpTRVEuTVNBOkROQScsICctJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1NhbXBsZXNGYXN0YUNzdlB0JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRTYW1wbGVzKFwiZmFzdGFDc3ZcIiAvKiBTYW1wbGVzLmZhc3RhQ3N2ICovKSwgJ3NlcXVlbmNlJywgJ2Zhc3RhOlNFUTpQVCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTYW1wbGVzRmFzdGFDc3ZOZWdhdGl2ZUVudHJ5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwiZmFzdGFDc3ZcIiAvKiBTYW1wbGVzLmZhc3RhQ3N2ICovKSwgJ0VudHJ5Jyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1NhbXBsZXNGYXN0YUNzdk5lZ2F0aXZlTGVuZ3RoJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwiZmFzdGFDc3ZcIiAvKiBTYW1wbGVzLmZhc3RhQ3N2ICovKSwgJ0xlbmd0aCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTYW1wbGVzRmFzdGFDc3ZOZWdhdGl2ZVVuaVByb3RLQicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcImZhc3RhQ3N2XCIgLyogU2FtcGxlcy5mYXN0YUNzdiAqLyksICdVbmlQcm90S0InKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnU2FtcGxlc0Zhc3RhRmFzdGFQdCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkU2FtcGxlcyhcImZhc3RhRmFzdGFcIiAvKiBTYW1wbGVzLmZhc3RhRmFzdGEgKi8sIHJlYWRGaWxlRmFzdGEpLCAnc2VxdWVuY2UnLCAnZmFzdGE6U0VROlBUJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNQZXB0aWRlc0NvbXBsZXhOZWdhdGl2ZUlEJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwicGVwdGlkZXNDb21wbGV4XCIgLyogU2FtcGxlcy5wZXB0aWRlc0NvbXBsZXggKi8pLCAnSUQnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnU2FtcGxlc1BlcHRpZGVzQ29tcGxleE5lZ2F0aXZlTWVhc3VyZWQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJwZXB0aWRlc0NvbXBsZXhcIiAvKiBTYW1wbGVzLnBlcHRpZGVzQ29tcGxleCAqLyksICdNZWFzdXJlZCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTYW1wbGVzUGVwdGlkZXNDb21wbGV4TmVnYXRpdmVWYWx1ZScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInBlcHRpZGVzQ29tcGxleFwiIC8qIFNhbXBsZXMucGVwdGlkZXNDb21wbGV4ICovKSwgJ1ZhbHVlJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNNc2FDb21wbGV4VW4nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZFNhbXBsZXMoXCJtc2FDb21wbGV4XCIgLyogU2FtcGxlcy5tc2FDb21wbGV4ICovKSwgJ01TQScsICdzZXBhcmF0b3I6U0VRLk1TQTpVTicsICcvJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNNc2FDb21wbGV4TmVnYXRpdmVBY3Rpdml0eScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcIm1zYUNvbXBsZXhcIiAvKiBTYW1wbGVzLm1zYUNvbXBsZXggKi8pLCAnQWN0aXZpdHknKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0lkQ3N2TmVnYXRpdmVJRCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RJZENzdlwiIC8qIFNhbXBsZXMudGVzdElkQ3N2ICovKSwgJ0lEJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNTYXJTbWFsbENzdk5lZ2F0aXZlU21pbGVzJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwidGVzdFNtaWxlc0NzdlwiIC8qIFNhbXBsZXMudGVzdFNtaWxlc0NzdiAqLyksICdzbWlsZXMnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0hlbG1Dc3ZIRUxNJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRTYW1wbGVzKFwiaGVsbUNzdlwiIC8qIFNhbXBsZXMuaGVsbUNzdiAqLyksICdIRUxNJywgJ0hFTE0nLCBudWxsKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0hlbG1Dc3ZOZWdhdGl2ZUFjdGl2aXR5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwiaGVsbUNzdlwiIC8qIFNhbXBsZXMuaGVsbUNzdiAqLyksICdBY3Rpdml0eScpO1xuICAgIH0pKTtcbiAgICAvLyBzYW1wbGVfdGVzdEhlbG0uY3NiXG4gICAgLy8gY29sdW1uczogSUQsVGVzdCB0eXBlLEhFTE0gc3RyaW5nLFZhbGlkPyxNb2wgV2VpZ2h0LE1vbCBGb3JtdWxhLFNNSUxFU1xuICAgIHRlc3QoJ3NhbXBsZXNUZXN0SGVsbU5lZ2F0aXZlSUQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnSUQnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVUZXN0VHlwZScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RIZWxtQ3N2XCIgLyogU2FtcGxlcy50ZXN0SGVsbUNzdiAqLyksICdUZXN0IHR5cGUnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtUG9zaXRpdmVIZWxtU3RyaW5nJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRTYW1wbGVzKFwidGVzdEhlbG1Dc3ZcIiAvKiBTYW1wbGVzLnRlc3RIZWxtQ3N2ICovKSwgJ0hFTE0gc3RyaW5nJywgJ0hFTE0nKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVWYWxpZCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RIZWxtQ3N2XCIgLyogU2FtcGxlcy50ZXN0SGVsbUNzdiAqLyksICdWYWxpZD8nKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVNb2xXZWlnaHQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnTW9sIFdlaWdodCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdzYW1wbGVzVGVzdEhlbG1OZWdhdGl2ZU1vbEZvcm11bGEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnTW9sIEZvcm11bGEnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVTbWlsZXMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnU21pbGVzJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNUZXN0RGVtb2dOZWdhdGl2ZUFsbCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZkZ1bmMgPSByZWFkU2FtcGxlcyhcInRlc3REZW1vZ0NzdlwiIC8qIFNhbXBsZXMudGVzdERlbW9nQ3N2ICovKTtcbiAgICAgICAgY29uc3QgZGYgPSB5aWVsZCBkZkZ1bmMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGYuY29sdW1ucy50b0xpc3QoKSlcbiAgICAgICAgICAgIHlpZWxkIF90ZXN0TmVnKGRmRnVuYywgY29sLm5hbWUpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdzYW1wbGVzVGVzdFNtaWxlczJOZWdhdGl2ZVNtaWxlcycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RTbWlsZXMyQ3N2XCIgLyogU2FtcGxlcy50ZXN0U21pbGVzMkNzdiAqLyksICdTTUlMRVMnKTtcbiAgICB9KSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBfdGVzdE5lZyhyZWFkRGYsIGNvbE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZiA9IHlpZWxkIHJlYWREZigpO1xuICAgICAgICBjb25zdCBjb2wgPSBkZi5jb2woY29sTmFtZSk7XG4gICAgICAgIGV4cGVjdChjb2wuc2VtVHlwZSA9PT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFLCBmYWxzZSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RQb3MocmVhZERmLCBjb2xOYW1lLCB1bml0cywgc2VwYXJhdG9yID0gbnVsbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0geWllbGQgcmVhZERmKCk7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbChjb2xOYW1lKTtcbiAgICAgICAgZXhwZWN0KGNvbC5zZW1UeXBlID09PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUsIHRydWUpO1xuICAgICAgICBleHBlY3QoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSwgdW5pdHMpO1xuICAgICAgICBpZiAoc2VwYXJhdG9yKVxuICAgICAgICAgICAgZXhwZWN0KGNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpLCBzZXBhcmF0b3IpO1xuICAgIH0pO1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBjYXRlZ29yeSwgdGVzdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0IHsgX3Rlc3RNU0FJc0NvcnJlY3QsIF90ZXN0VGFibGVJc05vdEVtcHR5LCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuY2F0ZWdvcnkoJ01TQScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIC8vdGFibGUgPSBhd2FpdCBncm9rLmRhdGEuZmlsZXMub3BlblRhYmxlKCdEZW1vOkZpbGVzL2Jpby9wZXB0aWRlcy5jc3YnKTtcbiAgICBjb25zdCBmcm9tQ3N2ID0gYHNlcVxuICBGV1JXWVZLSFBcbiAgWU5SV1lWS0hQXG4gIE1XUlNXWUNLSFBgO1xuICAgIGNvbnN0IHRvQ3N2ID0gYHNlcVxuICAtRi1XLVItLVctWS1WLUstSC1QXG4gIC1ZLU4tUi0tVy1ZLVYtSy1ILVBcbiAgLU0tVy1SLVMtVy1ZLUMtSy1ILVBgO1xuICAgIGNvbnN0IHRhYmxlID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZnJvbUNzdik7XG4gICAgY29uc3QgdG9UYWJsZSA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KHRvQ3N2KTtcbiAgICBjb25zdCBhbGlnbmVkU2VxdWVuY2VzQ29sdW1uID0gdG9UYWJsZS5nZXRDb2woJ3NlcScpO1xuICAgIHRlc3QoJ3Rlc3RfdGFibGUuaXNfbm90X2VtcHR5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0VGFibGVJc05vdEVtcHR5KHRhYmxlKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaXNfY29ycmVjdCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE1TQUlzQ29ycmVjdChhbGlnbmVkU2VxdWVuY2VzQ29sdW1uKTtcbiAgICB9KSk7XG59KSk7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGFmdGVyLCBiZWZvcmUsIGNhdGVnb3J5LCB0ZXN0LCBleHBlY3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGltcG9ydEZhc3RhLCBtdWx0aXBsZVNlcXVlbmNlQWxpZ25tZW50QW55IH0gZnJvbSAnLi4vcGFja2FnZSc7XG5jYXRlZ29yeSgncmVuZGVyZXJzJywgKCkgPT4ge1xuICAgIGxldCB0dkxpc3Q7XG4gICAgYmVmb3JlKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0dkxpc3QgPSBbXTtcbiAgICB9KSk7XG4gICAgYWZ0ZXIoKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHR2TGlzdC5mb3JFYWNoKCh0dikgPT4gdHYuY2xvc2UoKSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2FmdGVyTXNhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0QWZ0ZXJNc2EoKTtcbiAgICB9KSk7XG4gICAgZnVuY3Rpb24gX3Rlc3RBZnRlck1zYSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhVHh0ID0geWllbGQgZ3Jvay5kYXBpLmZpbGVzLnJlYWRBc1RleHQoJ1N5c3RlbTpBcHBEYXRhL0Jpby9zYW1wbGVzL3NhbXBsZV9GQVNUQS5mYXN0YScpO1xuICAgICAgICAgICAgY29uc3QgZGYgPSBpbXBvcnRGYXN0YShmYXN0YVR4dClbMF07XG4gICAgICAgICAgICBjb25zdCBzcmNTZXFDb2wgPSBkZi5jb2woJ3NlcXVlbmNlJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3JjU2VxQ29sICE9PSBudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdCaW86IHRlc3RzL3JlbmRlcmVycy9hZnRlck1zYSwgc3JjIGRhdGEgbG9hZGVkJyk7XG4gICAgICAgICAgICBjb25zdCB0diA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdCaW86IHRlc3RzL3JlbmRlcmVycy9hZnRlck1zYSwgdGFibGUgdmlldycpO1xuICAgICAgICAgICAgeWllbGQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0JpbzogdGVzdHMvcmVuZGVyZXJzL2FmdGVyTXNhLCBkZXRlY3RTZW1hbnRpY1R5cGVzJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQmlvOiB0ZXN0cy9yZW5kZXJlcnMvYWZ0ZXJNc2EsIHNyYyBiZWZvcmUgdGVzdCBzZW1UeXBlJyArXG4gICAgICAgICAgICAgICAgYHNlbVR5cGU9XCIke3NyY1NlcUNvbC5zZW1UeXBlfVwiLCB1bml0cz1cIiR7c3JjU2VxQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKX1cIiwgYCArXG4gICAgICAgICAgICAgICAgYGNlbGwucmVuZGVyZXI9XCIke3NyY1NlcUNvbC5nZXRUYWcoJ2NlbGwucmVuZGVyZXInKX1cImApO1xuICAgICAgICAgICAgZXhwZWN0KHNyY1NlcUNvbC5zZW1UeXBlLCBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpO1xuICAgICAgICAgICAgZXhwZWN0KHNyY1NlcUNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyksICdmYXN0YTpTRVE6UFQnKTtcbiAgICAgICAgICAgIGV4cGVjdChzcmNTZXFDb2wuZ2V0VGFnKCdjZWxsLnJlbmRlcmVyJyksICdNYWNyb21vbGVjdWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQmlvOiB0ZXN0cy9yZW5kZXJlcnMvYWZ0ZXJNc2EsIHNyYyBzZW1UeXBlIHRlc3RlZCcpO1xuICAgICAgICAgICAgY29uc3QgbXNhU2VxQ29sID0geWllbGQgbXVsdGlwbGVTZXF1ZW5jZUFsaWdubWVudEFueShkZiwgc3JjU2VxQ29sKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdCaW86IHRlc3RzL3JlbmRlcmVycy9hZnRlck1zYSwgbXNhU2VxQ29sIGNyZWF0ZWQnKTtcbiAgICAgICAgICAgIHR2LmdyaWQuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0JpbzogdGVzdHMvcmVuZGVyZXJzL2FmdGVyTXNhLCB0di5ncmlkIGludmFsaWRhdGVkJyk7XG4gICAgICAgICAgICBleHBlY3QobXNhU2VxQ29sLnNlbVR5cGUsIERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSk7XG4gICAgICAgICAgICBleHBlY3QobXNhU2VxQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSwgJ2Zhc3RhOlNFUS5NU0E6UFQnKTtcbiAgICAgICAgICAgIGV4cGVjdChtc2FTZXFDb2wuZ2V0VGFnKCdjZWxsLnJlbmRlcmVyJyksICdNYWNyb21vbGVjdWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQmlvOiB0ZXN0cy9yZW5kZXJlcnMvYWZ0ZXJNc2EsIG1zYSBzZW1UeXBlIHRlc3RlZCcpO1xuICAgICAgICAgICAgdHZMaXN0LnB1c2godHYpO1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgYmVmb3JlLCBjYXRlZ29yeSwgdGVzdCwgZXhwZWN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgeyBzZXF1ZW5jZVNwYWNlIH0gZnJvbSAnLi4vdXRpbHMvc2VxdWVuY2Utc3BhY2UnO1xuaW1wb3J0IHsgcmVhZERhdGFmcmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuLy9pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmNhdGVnb3J5KCdzZXF1ZW5jZVNwYWNlJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IHRlc3RGYXN0YURmO1xuICAgIGJlZm9yZSgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdGVzdEZhc3RhRGYgPSB5aWVsZCByZWFkRGF0YWZyYW1lKCdzYW1wbGVfRkFTVEEuY3N2Jyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NlcXVlbmNlU3BhY2VPcGVucycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZVNwYWNlUGFyYW1zID0ge1xuICAgICAgICAgICAgc2VxQ29sOiB0ZXN0RmFzdGFEZi5jb2woJ1NlcXVlbmNlJyksXG4gICAgICAgICAgICBtZXRob2ROYW1lOiAndC1TTkUnLFxuICAgICAgICAgICAgc2ltaWxhcml0eU1ldHJpYzogJ0xldmVuc2h0ZWluJyxcbiAgICAgICAgICAgIGVtYmVkQXhlc05hbWVzOiBbJ0VtYmVkX1gnLCAnRW1iZWRfWSddXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHNlcXVlbmNlU3BhY2Uoc2VxdWVuY2VTcGFjZVBhcmFtcyk7XG4gICAgICAgIGV4cGVjdChyZXMuY29vcmRpbmF0ZXMgIT0gdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgZXhwZWN0KHJlcy5kaXN0YW5jZSAhPSB1bmRlZmluZWQsIHRydWUpO1xuICAgIH0pKTtcbn0pKTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgY2F0ZWdvcnksIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmNhdGVnb3J5KCdzcGxpdHRlcicsICgpID0+IHtcbiAgICBjb25zdCBoZWxtMSA9ICdQRVBUSURFMXttZUkuaEhpcy5BY2EuTi5ULmRFLlRocl9QTzNIMi5BY2EuRC1UeXJfRXQuVHlyX2FiLWRlaHlkcm9NZS5kVi5FLk4uRC1Pcm4uRC1hVGhyLlBoZV80TWV9JCQkJztcbiAgICBjb25zdCBoZWxtMiA9ICdQRVBUSURFMXttZUkuaEhpcy5IY3kuUS5ULlcuUS5QaGVfNE5IMi5ELVR5cl9FdC5UeXJfYWItZGVoeWRyb01lLmRWLkUuTi5OLm1lS30kJCQnO1xuICAgIHRlc3QoJ2hlbG0xJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0SGVsbVNwbGl0dGVyKGhlbG0xKTsgfSkpO1xuICAgIHRlc3QoJ2hlbG0yJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0SGVsbVNwbGl0dGVyKGhlbG0yKTsgfSkpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RIZWxtU3BsaXR0ZXIodHh0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY29uc3Qgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXJBc0hlbG0oKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gY29uc3QgbUxpc3Q6IHN0cmluZ1tdID0gc3BsaXR0ZXIodHh0KTtcbiAgICAgICAgLy8gZXhwZWN0KG1MaXN0Lmxlbmd0aCwgMTIpO1xuICAgIH0pO1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IHJ1bkthbGlnbiB9IGZyb20gJy4uL3V0aWxzL211bHRpcGxlLXNlcXVlbmNlLWFsaWdubWVudCc7XG5pbXBvcnQgeyBfcGFja2FnZSB9IGZyb20gJy4uL3BhY2thZ2UtdGVzdCc7XG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVBc1RleHQobmFtZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBfcGFja2FnZS5maWxlcy5yZWFkQXNUZXh0KG5hbWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREYXRhZnJhbWUodGFibGVOYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IHlpZWxkIGxvYWRGaWxlQXNUZXh0KHRhYmxlTmFtZSk7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZmlsZSk7XG4gICAgICAgIGRmLm5hbWUgPSB0YWJsZU5hbWUucmVwbGFjZSgnLmNzdicsICcnKTtcbiAgICAgICAgcmV0dXJuIGRmO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlldyh0YWJsZU5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZiA9IHlpZWxkIHJlYWREYXRhZnJhbWUodGFibGVOYW1lKTtcbiAgICAgICAgZGYubmFtZSA9IHRhYmxlTmFtZS5yZXBsYWNlKCcuY3N2JywgJycpO1xuICAgICAgICBjb25zdCB2aWV3ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9KTtcbn1cbi8qKlxuICogVGVzdHMgaWYgYSB0YWJsZSBoYXMgbm9uIHplcm8gcm93cyBhbmQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0ge0RHLkRhdGFGcmFtZX0gdGFibGUgVGFyZ2V0IHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RUYWJsZUlzTm90RW1wdHkodGFibGUpIHtcbiAgICBleHBlY3QodGFibGUuY29sdW1ucy5sZW5ndGggPiAwICYmIHRhYmxlLnJvd0NvdW50ID4gMCwgdHJ1ZSk7XG59XG4vKipcbiAqIFRlc3RzIGlmIE1TQSB3b3JrcyBhbmQgcmV0dXJucyBjb25zaXN0ZW50IHJlc3VsdC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge0RHLkNvbHVtbn0gY29sIEFsaWduZWQgc2VxdWVuY2VzIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0TVNBSXNDb3JyZWN0KGNvbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IG1zYUNvbCA9IHlpZWxkIHJ1bkthbGlnbihjb2wsIHRydWUpO1xuICAgICAgICBleHBlY3QobXNhQ29sLnRvTGlzdCgpLmV2ZXJ5KCh2LCBpKSA9PiAodiA9PSBjb2wuZ2V0KGkpIHx8IHYgPT0gbnVsbCkpLCB0cnVlKTtcbiAgICB9KTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFjcm9Nb2wobW9ub21lcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IG1vZHVsZVJka2l0ID0geWllbGQgZ3Jvay5mdW5jdGlvbnMuY2FsbCgnQ2hlbTpnZXRSZEtpdE1vZHVsZScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbm9tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9sID0gbW9kdWxlUmRraXQuZ2V0X21vbChtb25vbWVyc1tpXVtqXVsnbW9sZmlsZSddKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gbW9sLmdldF92M0ttb2xibG9jaygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBnZXRJbmRpY2VzKG1vbm9tZXJzW2ldW2pdLCBhKTtcbiAgICAgICAgICAgICAgICBtb25vbWVyc1tpXVtqXVsnaW5kaWNlcyddID0gaW5kaWNlcztcbiAgICAgICAgICAgICAgICBtb25vbWVyc1tpXVtqXVsnbW9sZmlsZSddID0geWllbGQgcm90YXRlQmFja2JvbmVWMzAwMChhLCBpbmRpY2VzKTtcbiAgICAgICAgICAgICAgICBtb2wgPT09IG51bGwgfHwgbW9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2wuZGVsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChsaW5rVjMwMDAobW9ub21lcnNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0SW5kaWNlcyhtb25vbWVyLCBtb2xWMzAwMCkge1xuICAgIGNvbnN0IG1vbGZpbGUgPSBtb25vbWVyW1wibW9sZmlsZVwiXTtcbiAgICBsZXQgaW5kZXhTdGFydCA9IG1vbGZpbGUuaW5kZXhPZignTSAgUkdQJywgMCkgKyA4O1xuICAgIGxldCBpbmRleEVuZCA9IG1vbGZpbGUuaW5kZXhPZignXFxuJywgaW5kZXhTdGFydCk7XG4gICAgY29uc3QgaW5kaWNlc0RhdGEgPSBtb2xmaWxlLnN1YnN0cmluZyhpbmRleFN0YXJ0LCBpbmRleEVuZCkucmVwbGFjZUFsbCgnICAnLCAnICcpLnJlcGxhY2VBbGwoJyAgJywgJyAnKTtcbiAgICBsZXQgcGFyc2VkRGF0YSA9IGluZGljZXNEYXRhLnNwbGl0KCcgJyk7XG4gICAgY29uc3QgcmVtRmlyc3QgPSBwYXJzZWREYXRhWzJdID09ICcxJyA/IHBhcnNlSW50KHBhcnNlZERhdGFbMV0pIDogcGFyc2VJbnQocGFyc2VkRGF0YVszXSk7XG4gICAgY29uc3QgcmVtTGFzdCA9IHBhcnNlZERhdGFbMl0gPT0gJzInID8gcGFyc2VJbnQocGFyc2VkRGF0YVsxXSkgOiBwYXJzZUludChwYXJzZWREYXRhWzNdKTtcbiAgICBjb25zdCBudW1iZXJzID0gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sVjMwMDApO1xuICAgIGxldCBpbmRleEJvbmRzID0gbW9sVjMwMDAuaW5kZXhPZignTSAgVjMwIEJFR0lOIEJPTkQnKTsgLy8gVjMwMDAgaW5kZXggZm9yIGJvbmRzXG4gICAgaW5kZXhCb25kcyA9IG1vbFYzMDAwLmluZGV4T2YoJ1xcbicsIGluZGV4Qm9uZHMpO1xuICAgIGluZGV4U3RhcnQgPSBpbmRleEJvbmRzO1xuICAgIGluZGV4RW5kID0gaW5kZXhCb25kcztcbiAgICBsZXQgZmlyc3QgPSAwO1xuICAgIGxldCBsYXN0ID0gMDtcbiAgICBsZXQgcmVtQm9uZEZpcnN0ID0gMDtcbiAgICBsZXQgcmVtQm9uZExhc3QgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVycy5uYm9uZDsgaisrKSB7XG4gICAgICAgIGlmIChmaXJzdCA9PSAwIHx8IGxhc3QgPT0gMCkge1xuICAgICAgICAgICAgaW5kZXhTdGFydCA9IG1vbFYzMDAwLmluZGV4T2YoJ1YzMCcsIGluZGV4U3RhcnQpICsgNDtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sVjMwMDAuaW5kZXhPZignXFxuJywgaW5kZXhTdGFydCk7XG4gICAgICAgICAgICBjb25zdCBib25kRGF0YSA9IG1vbFYzMDAwLnN1YnN0cmluZyhpbmRleFN0YXJ0LCBpbmRleEVuZCkucmVwbGFjZUFsbCgnICAnLCAnICcpLnJlcGxhY2VBbGwoJyAgJywgJyAnKTtcbiAgICAgICAgICAgIHBhcnNlZERhdGEgPSBib25kRGF0YS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbMl0pID09IHJlbUZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzNdKTtcbiAgICAgICAgICAgICAgICByZW1Cb25kRmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbM10pID09IHJlbUZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzJdKTtcbiAgICAgICAgICAgICAgICByZW1Cb25kRmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbMl0pID09IHJlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VJbnQocGFyc2VkRGF0YVszXSk7XG4gICAgICAgICAgICAgICAgcmVtQm9uZExhc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbM10pID09IHJlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VJbnQocGFyc2VkRGF0YVsyXSk7XG4gICAgICAgICAgICAgICAgcmVtQm9uZExhc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBmaXJzdCwgbGFzdCwgcmVtRmlyc3QsIHJlbUxhc3QsIHJlbUJvbmRGaXJzdCwgcmVtQm9uZExhc3QgfTtcbn1cbmZ1bmN0aW9uIHJvdGF0ZUJhY2tib25lVjMwMDAobW9sQmxvY2ssIGluZGljZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2NrKTtcbiAgICAgICAgY29uc3QgbmF0b20gPSBjb29yZGluYXRlcy5hdG9tSW5kZXgubGVuZ3RoO1xuICAgICAgICBjb25zdCBmaXJzdCA9IGluZGljZXNbJ2ZpcnN0J107XG4gICAgICAgIGNvbnN0IGxhc3QgPSBpbmRpY2VzWydsYXN0J107XG4gICAgICAgIGNvbnN0IHhDZW50ZXIgPSAoY29vcmRpbmF0ZXMueFtsYXN0XSArIGNvb3JkaW5hdGVzLnhbZmlyc3RdKSAvIDI7XG4gICAgICAgIGNvbnN0IHlDZW50ZXIgPSAoY29vcmRpbmF0ZXMueVtsYXN0XSArIGNvb3JkaW5hdGVzLnlbZmlyc3RdKSAvIDI7XG4gICAgICAgIC8vcGxhY2UgdG8gY2VudGVyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSAtPSB4Q2VudGVyO1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueVtpXSAtPSB5Q2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbmdsZSA9IDA7XG4gICAgICAgIGlmIChjb29yZGluYXRlcy54W2ZpcnN0XSA9PSAwKVxuICAgICAgICAgICAgYW5nbGUgPSBjb29yZGluYXRlcy55W2ZpcnN0XSA+IGNvb3JkaW5hdGVzLnlbbGFzdF0gPyBNYXRoLlBJIC8gMiA6IDMgKiBNYXRoLlBJIC8gMjtcbiAgICAgICAgZWxzZSBpZiAoY29vcmRpbmF0ZXMueVtmaXJzdF0gPT0gMClcbiAgICAgICAgICAgIGFuZ2xlID0gY29vcmRpbmF0ZXMueFtmaXJzdF0gPiBjb29yZGluYXRlcy54W2xhc3RdID8gTWF0aC5QSSA6IDA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZhdGl2ZSA9IGNvb3JkaW5hdGVzLnlbZmlyc3RdIC8gY29vcmRpbmF0ZXMueFtmaXJzdF07XG4gICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXMueFtmaXJzdF0gPCBjb29yZGluYXRlcy54W2xhc3RdKVxuICAgICAgICAgICAgICAgIGFuZ2xlID0gZGVyaXZhdGl2ZSA+IDAgPyBNYXRoLlBJIC0gTWF0aC5hdGFuKGRlcml2YXRpdmUpIDogTWF0aC5hdGFuKGRlcml2YXRpdmUpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFuZ2xlID0gZGVyaXZhdGl2ZSA+IDAgPyBNYXRoLmF0YW4oZGVyaXZhdGl2ZSkgOiBNYXRoLlBJIC0gTWF0aC5hdGFuKGRlcml2YXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHhBZGQgPSBjb29yZGluYXRlcy54W2ldO1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSA9IHhBZGQgKiBjb3MgLSBjb29yZGluYXRlcy55W2ldICogc2luO1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueVtpXSA9IHhBZGQgKiBzaW4gKyBjb29yZGluYXRlcy55W2ldICogY29zO1xuICAgICAgICB9XG4gICAgICAgIC8vcGxhY2UgdG8gcmlnaHRcbiAgICAgICAgY29uc3QgeFNoaWZ0ID0gY29vcmRpbmF0ZXMueFtmaXJzdF07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKylcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gLT0geFNoaWZ0O1xuICAgICAgICAvL3Jld3JpdGUgbW9sQmxvY2tcbiAgICAgICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpO1xuICAgICAgICBsZXQgaW5kZXhFbmQgPSBpbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleEVuZCk7XG4gICAgICAgICAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnNsaWNlKDAsIGluZGV4KSArXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSArICcgJyArIGNvb3JkaW5hdGVzLnlbaV0gK1xuICAgICAgICAgICAgICAgIG1vbEJsb2NrLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9sQmxvY2s7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jaykge1xuICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9jayk7XG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgY29uc3QgaW5kZXhlcyA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgY29uc3QgeCA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHkgPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubmF0b207IGkrKykge1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgaW5kZXhlc1tpXSA9IHBhcnNlSW50KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgdHlwZXNbaV0gPSBtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgeFtpXSA9IHBhcnNlRmxvYXQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICB5W2ldID0gcGFyc2VGbG9hdChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXRvbUluZGV4OiBpbmRleGVzLCBhdG9tVHlwZTogdHlwZXMsIHg6IHgsIHk6IHkgfTtcbn1cbmZ1bmN0aW9uIGxpbmtWMzAwMChtb25vbWVycykge1xuICAgIGxldCBtYWNyb01vbEJsb2NrID0gJ1xcbkRhdGFncm9rIG1hY3JvbW9sZWN1bGUgaGFuZGxlclxcblxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgOTk5IFYzMDAwXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ1RBQlxcbic7XG4gICAgbGV0IGF0b21CbG9jayA9ICcnO1xuICAgIGxldCBib25kQmxvY2sgPSAnJztcbiAgICBsZXQgY29sbGVjdGlvbkJsb2NrID0gJyc7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgIGxldCBuYXRvbSA9IDA7XG4gICAgbGV0IG5ib25kID0gMDtcbiAgICBsZXQgeFNoaWZ0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbm9tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBtb2xmaWxlID0gbW9ub21lcnNbaV1bJ21vbGZpbGUnXTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBtb25vbWVyc1tpXVsnaW5kaWNlcyddWydmaXJzdCddO1xuICAgICAgICBjb25zdCBsYXN0ID0gbW9ub21lcnNbaV1bJ2luZGljZXMnXVsnbGFzdCddO1xuICAgICAgICBjb25zdCByZW1GaXJzdCA9IG1vbm9tZXJzW2ldWydpbmRpY2VzJ11bJ3JlbUZpcnN0J107XG4gICAgICAgIGNvbnN0IHJlbUxhc3QgPSBtb25vbWVyc1tpXVsnaW5kaWNlcyddWydyZW1MYXN0J107XG4gICAgICAgIGNvbnN0IHJlbUJvbmRGaXJzdCA9IG1vbm9tZXJzW2ldWydpbmRpY2VzJ11bJ3JlbUJvbmRGaXJzdCddO1xuICAgICAgICBjb25zdCByZW1Cb25kTGFzdCA9IG1vbm9tZXJzW2ldWydpbmRpY2VzJ11bJ3JlbUJvbmRMYXN0J107XG4gICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnJlcGxhY2VBbGwoJygtXFxuTSAgVjMwICcsICcoJylcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCctXFxuTSAgVjMwICcsICcnKS5yZXBsYWNlQWxsKCcgKScsICcpJyk7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xmaWxlKTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xmaWxlKTtcbiAgICAgICAgbGV0IGluZGV4QXRvbXMgPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBBVE9NJyk7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBjb29yZGluYXRlc1xuICAgICAgICBpbmRleEF0b21zID0gbW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleEF0b21zKTtcbiAgICAgICAgbGV0IGluZGV4ID0gaW5kZXhBdG9tcztcbiAgICAgICAgbGV0IGluZGV4RW5kID0gaW5kZXhBdG9tcztcbiAgICAgICAgY29uc3QgdG90YWxTaGlmdCA9IHhTaGlmdCAtIGNvb3JkaW5hdGVzLnhbZmlyc3QgLSAxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1iZXJzLm5hdG9tOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb29yZGluYXRlcy5hdG9tSW5kZXhbal0gIT0gcmVtRmlyc3QgJiYgY29vcmRpbmF0ZXMuYXRvbUluZGV4W2pdICE9IHJlbUxhc3QpIHsgLy98fCBpID09IDApIHtcbiAgICAgICAgICAgICAgICAvL3Jld3JpdGUgYXRvbSBudW1iZXJcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbGZpbGUuaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbGZpbGUuc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICAgICAgICAgIGF0b21OdW1iZXIgPSAoYXRvbU51bWJlciA+IHJlbUZpcnN0ICYmIGF0b21OdW1iZXIgPiByZW1MYXN0KSA/IGF0b21OdW1iZXIgLSAyIDpcbiAgICAgICAgICAgICAgICAgICAgKGF0b21OdW1iZXIgPiByZW1GaXJzdCB8fCBhdG9tTnVtYmVyID4gcmVtTGFzdCkgPyBhdG9tTnVtYmVyIC0gMSA6IGF0b21OdW1iZXI7XG4gICAgICAgICAgICAgICAgYXRvbU51bWJlciArPSBuYXRvbTtcbiAgICAgICAgICAgICAgICBtb2xmaWxlID0gbW9sZmlsZS5zbGljZSgwLCBpbmRleCkgKyBhdG9tTnVtYmVyICsgbW9sZmlsZS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgLy9yZXdyaXRlIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgY29vcmRpbmF0ZSA9IE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xmaWxlLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIHRvdGFsU2hpZnQpKSAvIDEwMDAwO1xuICAgICAgICAgICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnNsaWNlKDAsIGluZGV4KSArIGNvb3JkaW5hdGUgKyBtb2xmaWxlLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZSA9IE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xmaWxlLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSkpIC8gMTAwMDA7XG4gICAgICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgY29vcmRpbmF0ZSArIG1vbGZpbGUuc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCcsIGluZGV4KSAtIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJ1xcbicsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgbW9sZmlsZS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhBdG9tc0VuZCA9IG1vbGZpbGUuaW5kZXhPZignTSAgVjMwIEVORCBBVE9NJyk7XG4gICAgICAgIGF0b21CbG9jayArPSBtb2xmaWxlLnN1YnN0cmluZyhpbmRleEF0b21zICsgMSwgaW5kZXhBdG9tc0VuZCk7XG4gICAgICAgIGxldCBpbmRleEJvbmRzID0gbW9sZmlsZS5pbmRleE9mKCdNICBWMzAgQkVHSU4gQk9ORCcpOyAvLyBWMzAwMCBpbmRleCBmb3IgYm9uZHNcbiAgICAgICAgaW5kZXhCb25kcyA9IG1vbGZpbGUuaW5kZXhPZignXFxuJywgaW5kZXhCb25kcyk7XG4gICAgICAgIGluZGV4ID0gaW5kZXhCb25kcztcbiAgICAgICAgaW5kZXhFbmQgPSBpbmRleEJvbmRzO1xuICAgICAgICBsZXQgYm9uZE51bWJlciA9IDA7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVycy5uYm9uZDsgaisrKSB7XG4gICAgICAgICAgICAvL3Jld3JpdGUgYm9uZCBudW1iZXJcbiAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBib25kTnVtYmVyID0gcGFyc2VJbnQobW9sZmlsZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgICAgICBpZiAoYm9uZE51bWJlciA9PSByZW1Cb25kRmlyc3QgfHwgYm9uZE51bWJlciA9PSByZW1Cb25kTGFzdCkge1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4IC09IDc7XG4gICAgICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgbW9sZmlsZS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib25kTnVtYmVyID0gKGJvbmROdW1iZXIgPiByZW1Cb25kRmlyc3QgJiYgYm9uZE51bWJlciA+IHJlbUJvbmRMYXN0KSA/IGJvbmROdW1iZXIgLSAyIDpcbiAgICAgICAgICAgICAgICAoYm9uZE51bWJlciA+IHJlbUJvbmRGaXJzdCB8fCBib25kTnVtYmVyID4gcmVtQm9uZExhc3QpID8gYm9uZE51bWJlciAtIDEgOiBib25kTnVtYmVyO1xuICAgICAgICAgICAgYm9uZE51bWJlciArPSBuYm9uZDtcbiAgICAgICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnNsaWNlKDAsIGluZGV4KSArIGJvbmROdW1iZXIgKyBtb2xmaWxlLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIC8vcmV3cml0ZSBhdG9tIHBhaXIgaW4gYm9uZFxuICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBsZXQgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbGZpbGUuc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICAgICAgYXRvbU51bWJlciA9IChhdG9tTnVtYmVyID4gcmVtRmlyc3QgJiYgYXRvbU51bWJlciA+IHJlbUxhc3QpID8gYXRvbU51bWJlciAtIDIgOlxuICAgICAgICAgICAgICAgIChhdG9tTnVtYmVyID4gcmVtRmlyc3QgfHwgYXRvbU51bWJlciA+IHJlbUxhc3QpID8gYXRvbU51bWJlciAtIDEgOiBhdG9tTnVtYmVyO1xuICAgICAgICAgICAgYXRvbU51bWJlciArPSBuYXRvbTtcbiAgICAgICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xmaWxlLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4RW5kID0gTWF0aC5taW4obW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleCksIG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KSk7XG4gICAgICAgICAgICBhdG9tTnVtYmVyID0gcGFyc2VJbnQobW9sZmlsZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgICAgICBhdG9tTnVtYmVyID0gKGF0b21OdW1iZXIgPiByZW1GaXJzdCAmJiBhdG9tTnVtYmVyID4gcmVtTGFzdCkgPyBhdG9tTnVtYmVyIC0gMiA6XG4gICAgICAgICAgICAgICAgKGF0b21OdW1iZXIgPiByZW1GaXJzdCB8fCBhdG9tTnVtYmVyID4gcmVtTGFzdCkgPyBhdG9tTnVtYmVyIC0gMSA6IGF0b21OdW1iZXI7XG4gICAgICAgICAgICBhdG9tTnVtYmVyICs9IG5hdG9tO1xuICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgYXRvbU51bWJlciArIG1vbGZpbGUuc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhCb25kRW5kID0gbW9sZmlsZS5pbmRleE9mKCdNICBWMzAgRU5EIEJPTkQnKTtcbiAgICAgICAgYm9uZEJsb2NrICs9IG1vbGZpbGUuc3Vic3RyaW5nKGluZGV4Qm9uZHMgKyAxLCBpbmRleEJvbmRFbmQpO1xuICAgICAgICAvL2xldCBpbmRleENvbGxlY3Rpb24gPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnKTsgLy8gVjMwMDAgaW5kZXggZm9yIGNvbGxlY3Rpb25zXG4gICAgICAgIC8vIHdoaWxlIChpbmRleENvbGxlY3Rpb24gIT0gLTEpIHtcbiAgICAgICAgLy8gICBpbmRleENvbGxlY3Rpb24gKz0gMjg7XG4gICAgICAgIC8vICAgY29uc3QgY29sbGVjdGlvbkVuZCA9IG1vbGZpbGUuaW5kZXhPZignKScsIGluZGV4Q29sbGVjdGlvbik7XG4gICAgICAgIC8vICAgY29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBtb2xmaWxlLnN1YnN0cmluZyhpbmRleENvbGxlY3Rpb24sIGNvbGxlY3Rpb25FbmQpLnNwbGl0KCcgJykuc2xpY2UoMSk7XG4gICAgICAgIC8vICAgY29sbGVjdGlvbkVudHJpZXMuZm9yRWFjaCgoZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vICAgICBjb2xsZWN0aW9uLnB1c2gocGFyc2VJbnQoZSkgKyBuYXRvbSk7XG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vICAgaW5kZXhDb2xsZWN0aW9uID0gY29sbGVjdGlvbkVuZDtcbiAgICAgICAgLy8gICBpbmRleENvbGxlY3Rpb24gPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnLCBpbmRleENvbGxlY3Rpb24pO1xuICAgICAgICAvLyB9XG4gICAgICAgIG5hdG9tICs9IG51bWJlcnMubmF0b20gLSAyO1xuICAgICAgICBuYm9uZCArPSBudW1iZXJzLm5ib25kIC0gMjtcbiAgICAgICAgeFNoaWZ0ICs9IGNvb3JkaW5hdGVzLnhbbGFzdF0gLSBjb29yZGluYXRlcy54W2ZpcnN0XSArIDE7XG4gICAgICAgIGlmIChpID09IG1vbm9tZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG5hdG9tKys7XG4gICAgICAgICAgICBjb25zdCBzaGlmdCA9IHhTaGlmdCArIDAuMjtcbiAgICAgICAgICAgIGF0b21CbG9jayArPSAnTSAgVjMwICcgKyBuYXRvbSArICcgTyAnICsgc2hpZnQgKyAnIDAgMC4wMDAwMDAgMFxcbic7XG4gICAgICAgIH1cbiAgICAgICAgbmJvbmQrKztcbiAgICAgICAgaWYgKGkgPT0gbW9ub21lcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmlnaHRUZXJtaW5hbCA9IChsYXN0ID4gcmVtRmlyc3QgJiYgbGFzdCA+IHJlbUxhc3QpID8gbGFzdCArIG5hdG9tIC0gKG51bWJlcnMubmF0b20gLSAyKSAtIDMgOlxuICAgICAgICAgICAgICAgIChsYXN0ID4gcmVtRmlyc3QgfHwgbGFzdCA+IHJlbUxhc3QpID8gbGFzdCArIG5hdG9tIC0gKG51bWJlcnMubmF0b20gLSAyKSAtIDIgOlxuICAgICAgICAgICAgICAgICAgICBsYXN0ICsgbmF0b20gLSAobnVtYmVycy5uYXRvbSAtIDIpIC0gMTtcbiAgICAgICAgICAgIGJvbmRCbG9jayArPSAnTSAgVjMwICcgKyBuYm9uZCArICcgMSAnICsgcmlnaHRUZXJtaW5hbCArICcgJyArIG5hdG9tICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByaWdodFRlcm1pbmFsID0gKGxhc3QgPiByZW1GaXJzdCAmJiBsYXN0ID4gcmVtTGFzdCkgPyBsYXN0ICsgbmF0b20gLSAobnVtYmVycy5uYXRvbSAtIDIpIC0gMiA6XG4gICAgICAgICAgICAgICAgKGxhc3QgPiByZW1GaXJzdCB8fCBsYXN0ID4gcmVtTGFzdCkgPyBsYXN0ICsgbmF0b20gLSAobnVtYmVycy5uYXRvbSAtIDIpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgKyBuYXRvbSAtIChudW1iZXJzLm5hdG9tIC0gMik7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gbW9ub21lcnNbaSArIDFdWydpbmRpY2VzJ107XG4gICAgICAgICAgICBjb25zdCBuZXh0Rmlyc3QgPSBuZXh0WydmaXJzdCddO1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlbUZpcnN0ID0gbmV4dFsncmVtRmlyc3QnXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZW1MYXN0ID0gbmV4dFsncmVtTGFzdCddO1xuICAgICAgICAgICAgY29uc3QgbGVmdFRlcm1pbmFsID0gKG5leHRGaXJzdCA+IG5leHRSZW1GaXJzdCAmJiBuZXh0Rmlyc3QgPiBuZXh0UmVtTGFzdCkgPyBuZXh0Rmlyc3QgKyBuYXRvbSAtIDIgOlxuICAgICAgICAgICAgICAgIChuZXh0Rmlyc3QgPiBuZXh0UmVtRmlyc3QgfHwgbmV4dEZpcnN0ID4gbmV4dFJlbUxhc3QpID8gbmV4dEZpcnN0ICsgbmF0b20gLSAxIDpcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZpcnN0ICsgbmF0b207XG4gICAgICAgICAgICBib25kQmxvY2sgKz0gJ00gIFYzMCAnICsgbmJvbmQgKyAnIDEgJyArIHJpZ2h0VGVybWluYWwgKyAnICcgKyBsZWZ0VGVybWluYWwgKyAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zdCBlbnRyaWVzID0gNDtcbiAgICAvLyBjb25zdCBjb2xsTnVtYmVyID0gTWF0aC5jZWlsKGNvbGxlY3Rpb24ubGVuZ3RoIC8gZW50cmllcyk7XG4gICAgLy8gY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyArIGNvbGxlY3Rpb24ubGVuZ3RoICsgJyAtXFxuJztcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxOdW1iZXI7IGkrKykge1xuICAgIC8vICAgY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgJztcbiAgICAvLyAgIGNvbnN0IGVudHJpZXNDdXJyZW50ID0gaSArIDEgPT0gY29sbE51bWJlciA/IGNvbGxlY3Rpb24ubGVuZ3RoIC0gKGNvbGxOdW1iZXIgLSAxKSplbnRyaWVzIDogZW50cmllcztcbiAgICAvLyAgIGZvciAobGV0IGogPSAwOyBqIDwgZW50cmllc0N1cnJlbnQ7IGorKykge1xuICAgIC8vICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gKGogKyAxID09IGVudHJpZXNDdXJyZW50KSA/XG4gICAgLy8gICAgICAgKGkgPT0gY29sbE51bWJlciAtIDEgPyBjb2xsZWN0aW9uW2VudHJpZXMqaSArIGpdICsgJylcXG4nIDogY29sbGVjdGlvbltlbnRyaWVzKmkgKyBqXSArICcgLVxcbicpIDpcbiAgICAvLyAgICAgICBjb2xsZWN0aW9uW2VudHJpZXMqaSArIGpdICsgJyAnO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvL2dlbmVyYXRlIGZpbGVcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQ09VTlRTICcgKyBuYXRvbSArICcgJyArIG5ib25kICsgJyAwIDAgMFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEFUT01cXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYXRvbUJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQVRPTVxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEJPTkRcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYm9uZEJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQk9ORFxcbic7XG4gICAgLy9tYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ09MTEVDVElPTlxcbic7XG4gICAgLy9tYWNyb01vbEJsb2NrICs9IGNvbGxlY3Rpb25CbG9jaztcbiAgICAvL21hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQ09MTEVDVElPTlxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBDVEFCXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBFTkRcXG4nO1xuICAgIHJldHVybiBtYWNyb01vbEJsb2NrO1xufVxuZnVuY3Rpb24gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sQmxvY2spIHtcbiAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnJlcGxhY2VBbGwoJ1xccicsICcnKTsgLy9lcXVhbGl6ZSBvbGQgYW5kIG5ldyBzZGYgc3RhbmRhcmRzXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignQ09VTlRTJykgKyA3OyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgYW5kIGJvbmRzIG51bWJlclxuICAgIGxldCBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgY29uc3QgYXRvbXNOdW1iZXIgPSBwYXJzZUludChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgIGNvbnN0IGJvbmRzTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgIHJldHVybiB7IG5hdG9tOiBhdG9tc051bWJlciwgbmJvbmQ6IGJvbmRzTnVtYmVyIH07XG59XG4iLCJpbXBvcnQgKiBhcyBDIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IEFtaW5vYWNpZHNQYWxldHRlcyB9IGZyb20gXCJAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvYW1pbm9hY2lkc1wiO1xuaW1wb3J0IHsgTnVjbGVvdGlkZXNQYWxldHRlcyB9IGZyb20gXCJAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvbnVjbGVvdGlkZXNcIjtcbmltcG9ydCB7IFVua25vd25TZXFQYWxldHRlcyB9IGZyb20gXCJAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdW5rbm93blwiO1xuaW1wb3J0IHsgV2ViTG9nbyB9IGZyb20gXCJAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nb1wiO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmNvbnN0IGxydSA9IG5ldyBERy5McnVDYWNoZSgpO1xuY29uc3QgdW5kZWZpbmVkQ29sb3IgPSAncmdiKDEwMCwxMDAsMTAwKSc7XG5mdW5jdGlvbiBnZXRQYWxsZXRlQnlUeXBlKHBhbGV0dGVUeXBlKSB7XG4gICAgc3dpdGNoIChwYWxldHRlVHlwZSkge1xuICAgICAgICBjYXNlICdQVCc6XG4gICAgICAgICAgICByZXR1cm4gQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHM7XG4gICAgICAgIGNhc2UgJ05UJzpcbiAgICAgICAgICAgIHJldHVybiBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbTtcbiAgICAgICAgLy8gb3RoZXJcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBVbmtub3duU2VxUGFsZXR0ZXMuQ29sb3I7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTZXF1ZW5jZShzdWJQYXJ0cykge1xuICAgIGNvbnN0IHNpbXBsaWZpZWQgPSAhc3ViUGFydHMuc29tZSgoYW1pbm8sIGluZGV4KSA9PiBhbWluby5sZW5ndGggPiAxICYmXG4gICAgICAgIGluZGV4ICE9IDAgJiZcbiAgICAgICAgaW5kZXggIT0gc3ViUGFydHMubGVuZ3RoIC0gMSk7XG4gICAgY29uc3QgdGV4dCA9IFtdO1xuICAgIGNvbnN0IGdhcCA9IHNpbXBsaWZpZWQgPyAnJyA6ICcgJztcbiAgICBzdWJQYXJ0cy5mb3JFYWNoKChhbWlubywgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4IDwgc3ViUGFydHMubGVuZ3RoKVxuICAgICAgICAgICAgYW1pbm8gKz0gYCR7YW1pbm8gPyAnJyA6ICctJ30ke2dhcH1gO1xuICAgICAgICB0ZXh0LnB1c2goYW1pbm8pO1xuICAgIH0pO1xuICAgIHJldHVybiBbdGV4dCwgc2ltcGxpZmllZF07XG59XG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBwcmludHMgYSBzdHJpbmcgYWxpZ25lZCB0byBsZWZ0IG9yIGNlbnRlcmVkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IHggY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB5IHkgY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3IFdpZHRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGggSGVpZ2h0LlxuICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGcgQ2FudmFzIHJlbmRlcmluZyBjb250ZXh0LlxuICogQHBhcmFtIHtzdHJpbmd9IHMgU3RyaW5nIHRvIHByaW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj11bmRlZmluZWRDb2xvcl0gU3RyaW5nIGNvbG9yLlxuICogQHBhcmFtIHtudW1iZXJ9IFtwaXZvdD0wXSBQaXJ2b3QuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWZ0PWZhbHNlXSBJcyBsZWZ0IGFsaWduZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtoaWRlTW9kPWZhbHNlXSBIaWRlIGFtaW5vIGFjaWQgcmVkaWR1ZSBtb2RpZmljYXRpb25zLlxuICogQHBhcmFtIHtudW1iZXJ9IFt0cmFuc3BhcmVuY3lSYXRlPTAuMF0gVHJhbnNwYXJlbmN5IHJhdGUgd2hlcmUgMS4wIGlzIGZ1bGx5IHRyYW5zcGFyZW50XG4gKiBAcmV0dXJuIHtudW1iZXJ9IHggY29vcmRpbmF0ZSB0byBzdGFydCBwcmludGluZyBhdC5cbiAqL1xuZnVuY3Rpb24gcHJpbnRMZWZ0T3JDZW50ZXJlZCh4LCB5LCB3LCBoLCBnLCBzLCBjb2xvciA9IHVuZGVmaW5lZENvbG9yLCBwaXZvdCA9IDAsIGxlZnQgPSBmYWxzZSwgaGlkZU1vZCA9IGZhbHNlLCB0cmFuc3BhcmVuY3lSYXRlID0gMS4wLCBzZXBhcmF0b3IgPSAnJywgbGFzdCA9IGZhbHNlKSB7XG4gICAgZy50ZXh0QWxpZ24gPSAnc3RhcnQnO1xuICAgIGxldCBjb2xvclBhcnQgPSBzLnN1YnN0cmluZygwKTtcbiAgICBsZXQgZ3JheVBhcnQgPSBzZXBhcmF0b3I7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgICAgZ3JheVBhcnQgPSAnJztcbiAgICB9XG4gICAgY29uc3QgdGV4dFNpemUgPSBnLm1lYXN1cmVUZXh0KGNvbG9yUGFydCArIGdyYXlQYXJ0KTtcbiAgICBjb25zdCBpbmRlbnQgPSA1O1xuICAgIGNvbnN0IGNvbG9yVGV4dFNpemUgPSBnLm1lYXN1cmVUZXh0KGNvbG9yUGFydCk7XG4gICAgY29uc3QgZHkgPSAodGV4dFNpemUuZm9udEJvdW5kaW5nQm94QXNjZW50ICsgdGV4dFNpemUuZm9udEJvdW5kaW5nQm94RGVzY2VudCkgLyAyO1xuICAgIGZ1bmN0aW9uIGRyYXcoZHgxLCBkeDIpIHtcbiAgICAgICAgZy5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgZy5nbG9iYWxBbHBoYSA9IHRyYW5zcGFyZW5jeVJhdGU7XG4gICAgICAgIGcuZmlsbFRleHQoY29sb3JQYXJ0LCB4ICsgZHgxLCB5ICsgZHkpO1xuICAgICAgICBnLmZpbGxTdHlsZSA9ICcjODA4MDgwJztcbiAgICAgICAgZy5maWxsVGV4dChncmF5UGFydCwgeCArIGR4MiwgeSArIGR5KTtcbiAgICB9XG4gICAgaWYgKGxlZnQgfHwgdGV4dFNpemUud2lkdGggPiB3KSB7XG4gICAgICAgIGRyYXcoaW5kZW50LCBpbmRlbnQgKyBjb2xvclRleHRTaXplLndpZHRoKTtcbiAgICAgICAgcmV0dXJuIHggKyBjb2xvclRleHRTaXplLndpZHRoICsgZy5tZWFzdXJlVGV4dChncmF5UGFydCkud2lkdGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBkeCA9ICh3IC0gdGV4dFNpemUud2lkdGgpIC8gMjtcbiAgICAgICAgZHJhdyhkeCwgZHggKyBjb2xvclRleHRTaXplLndpZHRoKTtcbiAgICAgICAgcmV0dXJuIHggKyBkeCArIGNvbG9yVGV4dFNpemUud2lkdGg7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE1hY3JvbW9sZWN1bGVTZXF1ZW5jZUNlbGxSZW5kZXJlciBleHRlbmRzIERHLkdyaWRDZWxsUmVuZGVyZXIge1xuICAgIGdldCBuYW1lKCkgeyByZXR1cm4gJ21hY3JvbW9sZWN1bGVTZXF1ZW5jZSc7IH1cbiAgICBnZXQgY2VsbFR5cGUoKSB7IHJldHVybiBDLlNFTV9UWVBFUy5NYWNyb19Nb2xlY3VsZTsgfVxuICAgIGdldCBkZWZhdWx0SGVpZ2h0KCkgeyByZXR1cm4gMzA7IH1cbiAgICBnZXQgZGVmYXVsdFdpZHRoKCkgeyByZXR1cm4gMjMwOyB9XG4gICAgLyoqXG4gICAgICogQ2VsbCByZW5kZXJlciBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfSBnIENhbnZhcyByZW5kZXJpbmcgY29udGV4dC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geCB4IGNvb3JkaW5hdGUgb24gdGhlIGNhbnZhcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0geSB5IGNvb3JkaW5hdGUgb24gdGhlIGNhbnZhcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdyB3aWR0aCBvZiB0aGUgY2VsbC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaCBoZWlnaHQgb2YgdGhlIGNlbGwuXG4gICAgICogQHBhcmFtIHtERy5HcmlkQ2VsbH0gZ3JpZENlbGwgR3JpZCBjZWxsLlxuICAgICAqIEBwYXJhbSB7REcuR3JpZENlbGxTdHlsZX0gY2VsbFN0eWxlIENlbGwgc3R5bGUuXG4gICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUNlbGxSZW5kZXJlclxuICAgICAqL1xuICAgIHJlbmRlcihnLCB4LCB5LCB3LCBoLCBncmlkQ2VsbCwgY2VsbFN0eWxlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IGdyaWQgPSBncmlkQ2VsbC5ncmlkO1xuICAgICAgICBjb25zdCBjZWxsID0gZ3JpZENlbGwuY2VsbDtcbiAgICAgICAgY29uc3QgdGFnID0gZ3JpZENlbGwuY2VsbC5jb2x1bW4uZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICBpZiAodGFnID09PSAnSEVMTScpIHtcbiAgICAgICAgICAgIGxldCBob3N0ID0gdWkuZGl2KFtdLCB7IHN0eWxlOiB7IHdpZHRoOiBgJHt3fXB4YCwgaGVpZ2h0OiBgJHtofXB4YCB9IH0pO1xuICAgICAgICAgICAgaG9zdC5zZXRBdHRyaWJ1dGUoJ2RhdGFmb3JtYXQnLCAnaGVsbScpO1xuICAgICAgICAgICAgaG9zdC5zZXRBdHRyaWJ1dGUoJ2RhdGEnLCBncmlkQ2VsbC5jZWxsLnZhbHVlKTtcbiAgICAgICAgICAgIGdyaWRDZWxsLmVsZW1lbnQgPSBob3N0O1xuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICB2YXIgY2FudmFzID0gbmV3IEpTRHJhdzIuRWRpdG9yKGhvc3QsIHsgd2lkdGg6IHcsIGhlaWdodDogaCwgc2tpbjogXCJ3OFwiLCB2aWV3b25seTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHZhciBmb3JtdWxhID0gY2FudmFzLmdldEZvcm11bGEodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZvcm11bGEpIHtcbiAgICAgICAgICAgICAgICBncmlkQ2VsbC5lbGVtZW50ID0gdWkuZGl2VGV4dChncmlkQ2VsbC5jZWxsLnZhbHVlLCB7IHN0eWxlOiB7IGNvbG9yOiAncmVkJyB9IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JpZENlbGwuZWxlbWVudCA9IGhvc3Q7XG4gICAgICAgICAgICAgICAgdmFyIG1vbFdlaWdodCA9IE1hdGgucm91bmQoY2FudmFzLmdldE1vbFdlaWdodCgpICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgICAgICB2YXIgY29lZiA9IE1hdGgucm91bmQoY2FudmFzLmdldEV4dGluY3Rpb25Db2VmZmljaWVudCh0cnVlKSAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICAgICAgdmFyIG1vbGZpbGUgPSBjYW52YXMuZ2V0TW9sZmlsZSgpO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmb3JtdWxhICsgJywgJyArIG1vbFdlaWdodCArICcsICcgKyBjb2VmICsgJywgJyArIG1vbGZpbGU7XG4gICAgICAgICAgICAgICAgbHJ1LnNldChncmlkQ2VsbC5jZWxsLnZhbHVlLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW3R5cGUsIHN1YnR5cGUsIHBhbGV0dGVUeXBlXSA9IGdyaWRDZWxsLmNlbGwuY29sdW1uLmdldFRhZyhERy5UQUdTLlVOSVRTKS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICB3ID0gZ3JpZCA/IE1hdGgubWluKGdyaWQuY2FudmFzLndpZHRoIC0geCwgdykgOiBnLmNhbnZhcy53aWR0aCAtIHg7XG4gICAgICAgICAgICBnLnNhdmUoKTtcbiAgICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICBnLnJlY3QoeCwgeSwgdywgaCk7XG4gICAgICAgICAgICBnLmNsaXAoKTtcbiAgICAgICAgICAgIGcuZm9udCA9ICcxMnB4IG1vbm9zcGFjZSc7XG4gICAgICAgICAgICBnLnRleHRCYXNlbGluZSA9ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgcyA9IChfYSA9IGNlbGwudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICAgICAgLy9UT0RPOiBjYW4gdGhpcyBiZSByZXBsYWNlZC9tZXJnZWQgd2l0aCBzcGxpdFNlcXVlbmNlP1xuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBncmlkQ2VsbC5jZWxsLmNvbHVtbi5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgICAgICAgICBjb25zdCBwYWxldHRlID0gZ2V0UGFsbGV0ZUJ5VHlwZShwYWxldHRlVHlwZSk7XG4gICAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSAoX2IgPSBncmlkQ2VsbC5jZWxsLmNvbHVtbi5nZXRUYWcoJ3NlcGFyYXRvcicpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVyRnVuYyA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXIodW5pdHMsIGdyaWRDZWxsLmNlbGwuY29sdW1uLmdldFRhZygnc2VwYXJhdG9yJykpOyAvLyBzcGxpdHRlcixcbiAgICAgICAgICAgIGNvbnN0IHN1YlBhcnRzID0gc3BsaXR0ZXJGdW5jKGNlbGwudmFsdWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3ViUGFydHMpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFNpemUgPSBnLm1lYXN1cmVUZXh0KHN1YlBhcnRzLmpvaW4oJycpKTtcbiAgICAgICAgICAgIGxldCB4MSA9IHg7XG4gICAgICAgICAgICBsZXQgY29sb3IgPSB1bmRlZmluZWRDb2xvcjtcbiAgICAgICAgICAgIHN1YlBhcnRzLmZvckVhY2goKGFtaW5vLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbG9yID0gcGFsZXR0ZS5nZXQoYW1pbm8pO1xuICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gdW5kZWZpbmVkQ29sb3I7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHN1YlBhcnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHgxID0gcHJpbnRMZWZ0T3JDZW50ZXJlZCh4MSwgeSwgdywgaCwgZywgYW1pbm8sIGNvbG9yLCAwLCB0cnVlLCBmYWxzZSwgMS4wLCBzZXBhcmF0b3IsIGxhc3QpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCB2YXIgQ09MVU1OU19OQU1FUztcbihmdW5jdGlvbiAoQ09MVU1OU19OQU1FUykge1xuICAgIENPTFVNTlNfTkFNRVNbXCJTUExJVF9DT0xcIl0gPSBcIn5zcGxpdFwiO1xuICAgIENPTFVNTlNfTkFNRVNbXCJBQ1RJVklUWVwiXSA9IFwifmFjdGl2aXR5XCI7XG4gICAgQ09MVU1OU19OQU1FU1tcIkFDVElWSVRZX1NDQUxFRFwiXSA9IFwiYWN0aXZpdHlfc2NhbGVkXCI7XG4gICAgQ09MVU1OU19OQU1FU1tcIkFMSUdORURfU0VRVUVOQ0VcIl0gPSBcIn5hbGlnbmVkX3NlcXVlbmNlXCI7XG4gICAgQ09MVU1OU19OQU1FU1tcIkFNSU5PX0FDSURfUkVTSURVRVwiXSA9IFwiQUFSXCI7XG4gICAgQ09MVU1OU19OQU1FU1tcIlBPU0lUSU9OXCJdID0gXCJQb3NcIjtcbiAgICBDT0xVTU5TX05BTUVTW1wiUF9WQUxVRVwiXSA9IFwicFZhbHVlXCI7XG4gICAgQ09MVU1OU19OQU1FU1tcIk1FQU5fRElGRkVSRU5DRVwiXSA9IFwiTWVhbiBkaWZmZXJlbmNlXCI7XG59KShDT0xVTU5TX05BTUVTIHx8IChDT0xVTU5TX05BTUVTID0ge30pKTtcbmV4cG9ydCB2YXIgQ0FURUdPUklFUztcbihmdW5jdGlvbiAoQ0FURUdPUklFUykge1xuICAgIENBVEVHT1JJRVNbXCJPVEhFUlwiXSA9IFwiT3RoZXJcIjtcbiAgICBDQVRFR09SSUVTW1wiQUxMXCJdID0gXCJBbGxcIjtcbn0pKENBVEVHT1JJRVMgfHwgKENBVEVHT1JJRVMgPSB7fSkpO1xuZXhwb3J0IHZhciBUQUdTO1xuKGZ1bmN0aW9uIChUQUdTKSB7XG4gICAgVEFHU1tcIkFBUlwiXSA9IFwiQUFSXCI7XG4gICAgVEFHU1tcIlBPU0lUSU9OXCJdID0gXCJQb3NcIjtcbiAgICBUQUdTW1wiU0VQQVJBVE9SXCJdID0gXCJtb25vbWVyLXNlcGFyYXRvclwiO1xuICAgIFRBR1NbXCJTRUxFQ1RJT05cIl0gPSBcInNlbGVjdGlvblwiO1xufSkoVEFHUyB8fCAoVEFHUyA9IHt9KSk7XG5leHBvcnQgdmFyIFNFTV9UWVBFUztcbihmdW5jdGlvbiAoU0VNX1RZUEVTKSB7XG4gICAgU0VNX1RZUEVTW1wiQU1JTk9fQUNJRFNcIl0gPSBcImFtaW5vQWNpZHNcIjtcbiAgICBTRU1fVFlQRVNbXCJBTElHTkVEX1NFUVVFTkNFXCJdID0gXCJhbGlnbmVkU2VxdWVuY2VcIjtcbiAgICBTRU1fVFlQRVNbXCJBTElHTkVEX1NFUVVFTkNFX0RJRkZFUkVOQ0VcIl0gPSBcImFsaWduZWRTZXF1ZW5jZURpZmZlcmVuY2VcIjtcbiAgICBTRU1fVFlQRVNbXCJBQ1RJVklUWVwiXSA9IFwiYWN0aXZpdHlcIjtcbiAgICBTRU1fVFlQRVNbXCJBQ1RJVklUWV9TQ0FMRURcIl0gPSBcImFjdGl2aXR5U2NhbGVkXCI7XG4gICAgU0VNX1RZUEVTW1wiTWFjcm9fTW9sZWN1bGVcIl0gPSBcIk1hY3JvbW9sZWN1bGVcIjtcbn0pKFNFTV9UWVBFUyB8fCAoU0VNX1RZUEVTID0ge30pKTtcbmV4cG9ydCBjb25zdCBTVEFUUyA9ICdzdGF0cyc7XG5leHBvcnQgY29uc3QgRU1CRURESU5HX1NUQVRVUyA9ICdlbWJlZGRpbmdTdGF0dXMnO1xuZXhwb3J0IGNvbnN0IFBFUFRJREVTX0FOQUxZU0lTID0gJ2lzUGVwdGlkZXNBbmFseXNpcyc7XG5leHBvcnQgdmFyIEZMQUdTO1xuKGZ1bmN0aW9uIChGTEFHUykge1xuICAgIEZMQUdTW1wiQ0VMTF9DSEFOR0lOR1wiXSA9IFwiaXNDZWxsQ2hhbmdpbmdcIjtcbn0pKEZMQUdTIHx8IChGTEFHUyA9IHt9KSk7XG5leHBvcnQgY29uc3QgYWFyR3JvdXBzID0ge1xuICAgICdSJzogJ1BDJywgJ0gnOiAnUEMnLCAnSyc6ICdQQycsXG4gICAgJ0QnOiAnTkMnLCAnRSc6ICdOQycsXG4gICAgJ1MnOiAnVScsICdUJzogJ1UnLCAnTic6ICdVJywgJ1EnOiAnVScsXG4gICAgJ0MnOiAnU0MnLCAnVSc6ICdTQycsICdHJzogJ1NDJywgJ1AnOiAnU0MnLFxuICAgICdBJzogJ0gnLCAnVic6ICdIJywgJ0knOiAnSCcsICdMJzogJ0gnLCAnTSc6ICdIJywgJ0YnOiAnSCcsICdZJzogJ0gnLCAnVyc6ICdIJyxcbiAgICAnLSc6ICctJyxcbn07XG5leHBvcnQgY29uc3QgZ3JvdXBEZXNjcmlwdGlvbiA9IHtcbiAgICAnUEMnOiB7ICdkZXNjcmlwdGlvbic6ICdQb3NpdGl2ZSBBbWlubyBBY2lkcywgd2l0aCBFbGVjdHJpY2FsbHkgQ2hhcmdlZCBTaWRlIENoYWlucycsICdhbWlub0FjaWRzJzogWydSJywgJ0gnLCAnSyddIH0sXG4gICAgJ05DJzogeyAnZGVzY3JpcHRpb24nOiAnTmVnYXRpdmUgQW1pbm8gQWNpZHMsIHdpdGggRWxlY3RyaWNhbGx5IENoYXJnZWQgU2lkZSBDaGFpbnMnLCAnYW1pbm9BY2lkcyc6IFsnRCcsICdFJ10gfSxcbiAgICAnVSc6IHsgJ2Rlc2NyaXB0aW9uJzogJ0FtaW5vIEFjaWRzIHdpdGggUG9sYXIgVW5jaGFyZ2VkIFNpZGUgQ2hhaW5zJywgJ2FtaW5vQWNpZHMnOiBbJ1MnLCAnVCcsICdOJywgJ1EnXSB9LFxuICAgICdTQyc6IHsgJ2Rlc2NyaXB0aW9uJzogJ1NwZWNpYWwgQ2FzZXMnLCAnYW1pbm9BY2lkcyc6IFsnQycsICdVJywgJ0cnLCAnUCddIH0sXG4gICAgJ0gnOiB7XG4gICAgICAgICdkZXNjcmlwdGlvbic6ICdBbWlubyBBY2lkcyB3aXRoIEh5ZHJvcGhvYmljIFNpZGUgQ2hhaW4nLFxuICAgICAgICAnYW1pbm9BY2lkcyc6IFsnQScsICdWJywgJ0knLCAnTCcsICdNJywgJ0YnLCAnWScsICdXJ10sXG4gICAgfSxcbiAgICAnLSc6IHsgJ2Rlc2NyaXB0aW9uJzogJ1Vua25vd24gQW1pbm8gQWNpZCcsICdhbWlub0FjaWRzJzogWyctJ10gfSxcbn07XG4iLCJpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHsgTm90YXRpb25Db252ZXJ0ZXIgfSBmcm9tICcuL25vdGF0aW9uLWNvbnZlcnRlcic7XG4vKipcbiAqIENvbnZlcnRzIG5vdGF0aW9ucyBvZiBhIE1hY3JvbW9sZWN1bGUgY29sdW1uXG4gKlxuICogQHBhcmFtIHtERy5jb2x1bW59IGNvbCBDb2x1bW4gd2l0aCAnTWFjcm9tb2xlY3VsZScgc2VtYW50aWMgdHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydChjb2wpIHtcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBuZXcgTm90YXRpb25Db252ZXJ0ZXIoY29sKTtcbiAgICBjb25zdCBjdXJyZW50ID0gY29udmVydGVyLnNvdXJjZU5vdGF0aW9uO1xuICAgIC8vVE9ETzogcmVhZCBhbGwgbm90YXRpb25zXG4gICAgY29uc3Qgbm90YXRpb25zID0gW1xuICAgICAgICBcIkZBU1RBXCIgLyogTk9UQVRJT04uRkFTVEEgKi8sXG4gICAgICAgIFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovLFxuICAgICAgICBcIkhFTE1cIiAvKiBOT1RBVElPTi5IRUxNICovXG4gICAgXTtcbiAgICBjb25zdCBzZXBhcmF0b3JBcnJheSA9IFsnLScsICcuJywgJy8nXTtcbiAgICBjb25zdCBmaWx0ZXJlZE5vdGF0aW9ucyA9IG5vdGF0aW9ucy5maWx0ZXIoKGUpID0+IGUgIT09IGN1cnJlbnQpO1xuICAgIGNvbnN0IHRhcmdldE5vdGF0aW9uSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnQ29udmVydCB0bycsIGZpbHRlcmVkTm90YXRpb25zWzBdLCBmaWx0ZXJlZE5vdGF0aW9ucyk7XG4gICAgY29uc3Qgc2VwYXJhdG9ySW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnQ2hvb3NlIHNlcGFyYXRvcicsIHNlcGFyYXRvckFycmF5WzBdLCBzZXBhcmF0b3JBcnJheSk7XG4gICAgdWkuZGlhbG9nKCdDb252ZXJ0IHNlcXVlbmNlIG5vdGF0aW9uJylcbiAgICAgICAgLmFkZCh1aS5kaXYoW1xuICAgICAgICB1aS5oMSgnQ3VycmVudCBub3RhdGlvbjogJyArIGN1cnJlbnQpLFxuICAgICAgICB0YXJnZXROb3RhdGlvbklucHV0LnJvb3QsXG4gICAgICAgIC8vIFRPRE86IGNvbmRpdGlvbmFsIHNlcGFyYXRvciBpbnB1dFxuICAgICAgICBzZXBhcmF0b3JJbnB1dC5yb290XG4gICAgXSkpXG4gICAgICAgIC5vbk9LKCgpID0+IHtcbiAgICAgICAgLy9UT0RPOiBjcmVhdGUgbmV3IGNvbnZlcnRlZCBjb2x1bW5cbiAgICAgICAgY29uc3QgdGFyZ2V0Tm90YXRpb24gPSB0YXJnZXROb3RhdGlvbklucHV0LnZhbHVlO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBzZXBhcmF0b3JJbnB1dC52YWx1ZTtcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uID0gY29udmVydGVyLmNvbnZlcnQodGFyZ2V0Tm90YXRpb24sIHNlcGFyYXRvcik7XG4gICAgICAgIGNvbC5kYXRhRnJhbWUuY29sdW1ucy5hZGQobmV3Q29sdW1uKTtcbiAgICB9KVxuICAgICAgICAuc2hvdygpO1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy9AdHMtaWdub3JlXG5pbXBvcnQgQWlvbGkgZnJvbSAnQGJpb3dhc20vYWlvbGknO1xuaW1wb3J0IHsgQWxpZ25lZFNlcXVlbmNlRW5jb2RlciB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9zZXF1ZW5jZS1lbmNvZGVyJztcbi8qKlxuICogQ29udmVydHMgYXJyYXkgb2Ygc2VxdWVuY2VzIGludG8gc2ltcGxlIGZhc3RhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBzZXF1ZW5jZXMgSW5wdXQgbGlzdCBvZiBzZXF1ZW5jZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IEZhc3RhLWZvcm1hdHRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIF9zdHJpbmdzVG9GYXN0YShzZXF1ZW5jZXMpIHtcbiAgICByZXR1cm4gc2VxdWVuY2VzLnJlZHVjZSgoYSwgdiwgaSkgPT4gYSArIGA+c2FtcGxlJHtpICsgMX1cXG4ke3Z9XFxuYCwgJycpO1xufVxuLyoqXG4gKiBFeHRyYWN0cyBhcnJheSBvZiBzZXF1ZW5jZXMgZnJvbSBzaW1wbGUgZmFzdGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmYXN0YSBGYXN0YS1mb3JtYXR0ZWQgc3RyaW5nLlxuICogQHJldHVybiB7c3RyaW5nW119IE91dHB1dCBsaXN0IG9mIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gX2Zhc3RhVG9TdHJpbmdzKGZhc3RhKSB7XG4gICAgcmV0dXJuIGZhc3RhLnJlcGxhY2UoLz5zYW1wbGVcXGQrKFxcclxcbnxcXHJ8XFxuKS9nLCAnJykuc3BsaXQoJ1xcbicpO1xufVxuLyoqXG4gKiBSdW5zIEFpb2xpIGVudmlyb25tZW50IHdpdGgga2FsaWduIHRvb2wuXG4gKlxuICogQHBhcmFtIHtERy5Db2x1bW59IHNyY0NvbCBDb2x1bW4gd2l0aCBzZXF1ZW5jZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzQWxpZ25lZCBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgYWxpZ25lZC5cbiAqIEByZXR1cm4ge1Byb21pc2U8REcuQ29sdW1uPn0gQWxpZ25lZCBzZXF1ZW5jZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5LYWxpZ24oc3JjQ29sLCBpc0FsaWduZWQgPSBmYWxzZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBzZXF1ZW5jZXMgPSBzcmNDb2wudG9MaXN0KCk7XG4gICAgICAgIGlmIChpc0FsaWduZWQpXG4gICAgICAgICAgICBzZXF1ZW5jZXMgPSBzZXF1ZW5jZXMubWFwKCh2LCBfKSA9PiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLmNsZWFuKHYpLnJlcGxhY2UoL1xcLS9nLCAnJykpO1xuICAgICAgICBjb25zdCBmYXN0YSA9IF9zdHJpbmdzVG9GYXN0YShzZXF1ZW5jZXMpO1xuICAgICAgICBjb25zdCBDTEkgPSB5aWVsZCBuZXcgQWlvbGkoe1xuICAgICAgICAgICAgdG9vbDogJ2thbGlnbicsXG4gICAgICAgICAgICB2ZXJzaW9uOiAnMy4zLjEnLFxuICAgICAgICAgICAgcmVpbml0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc29sZS5sb2coWydmYXN0YS5sZW5ndGggPScsIGZhc3RhLmxlbmd0aF0pO1xuICAgICAgICB5aWVsZCBDTEkuZnMud3JpdGVGaWxlKCdpbnB1dC5mYScsIGZhc3RhKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0geWllbGQgQ0xJLmV4ZWMoJ2thbGlnbiBpbnB1dC5mYSAtZiBmYXN0YSAtbyByZXN1bHQuZmFzdGEnKTtcbiAgICAgICAgY29uc29sZS53YXJuKG91dHB1dCk7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IHlpZWxkIENMSS5jYXQoJ3Jlc3VsdC5mYXN0YScpO1xuICAgICAgICBpZiAoIWJ1ZilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihga2FsaWduIG91dHB1dCBubyByZXN1bHRgKTtcbiAgICAgICAgY29uc3QgYWxpZ25lZCA9IF9mYXN0YVRvU3RyaW5ncyhidWYpLnNsaWNlKDAsIHNlcXVlbmNlcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCB0Z3RDb2wgPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoYG1zYSgke3NyY0NvbC5uYW1lfSlgLCBhbGlnbmVkKTtcbiAgICAgICAgLy8gdW5pdHNcbiAgICAgICAgY29uc3Qgc3JjVW5pdHMgPSBzcmNDb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICBjb25zdCB0Z3RVbml0cyA9IHNyY1VuaXRzLnNwbGl0KCc6JykubWFwKChwLCBpKSA9PiBpID09IDEgPyBwICsgJy5NU0EnIDogcCkuam9pbignOicpO1xuICAgICAgICB0Z3RDb2wuc2V0VGFnKERHLlRBR1MuVU5JVFMsIHRndFVuaXRzKTtcbiAgICAgICAgdGd0Q29sLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEU7XG4gICAgICAgIHJldHVybiB0Z3RDb2w7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdGVzdE1TQUVub3VnaE1lbW9yeShjb2wpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZXNDb3VudCA9IGNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gc2VxdWVuY2VzQ291bnQgLyAxMDA7XG4gICAgICAgIGZvciAobGV0IGkgPSBkZWx0YTsgaSA8IHNlcXVlbmNlc0NvdW50OyBpICs9IGRlbHRhKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJ1bkthbGlnbihERy5Db2x1bW4uZnJvbVN0cmluZ3MoY29sLm5hbWUsIGNvbC50b0xpc3QoKS5zbGljZSgwLCBNYXRoLnJvdW5kKGkpKSkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBydW5LYWxpZ24gc3VjY2VlZGVkIG9uICR7aX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBydW5LYWxpZ24gZmFpbGVkIG9uICR7aX0gd2l0aCAnJHtlcnJvcn0nYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBXZWJMb2dvIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3ZpZXdlcnMvd2ViLWxvZ28nO1xuLyoqIENsYXNzIGZvciBoYW5kbGluZyBjb252ZXJzaW9uIG9mIG5vdGF0aW9uIHN5c3RlbXMgaW4gTWFjcm9tb2xlY3VsZSBjb2x1bW5zICovXG5leHBvcnQgY2xhc3MgTm90YXRpb25Db252ZXJ0ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbCkge1xuICAgICAgICB0aGlzLl9zb3VyY2VDb2x1bW4gPSBjb2w7XG4gICAgICAgIHRoaXMuX3NvdXJjZVVuaXRzID0gdGhpcy5fc291cmNlQ29sdW1uLnRhZ3NbREcuVEFHUy5VTklUU107XG4gICAgICAgIHRoaXMuX3NvdXJjZU5vdGF0aW9uID0gdGhpcy5kZXRlcm1pbmVTb3VyY2VOb3RhdGlvbigpO1xuICAgIH1cbiAgICBnZXQgc291cmNlVW5pdHMoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VVbml0czsgfVxuICAgIGdldCBzb3VyY2VDb2x1bW4oKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDb2x1bW47IH1cbiAgICBnZXQgc291cmNlTm90YXRpb24oKSB7IHJldHVybiB0aGlzLl9zb3VyY2VOb3RhdGlvbjsgfVxuICAgIGlzRmFzdGEoKSB7IHJldHVybiB0aGlzLnNvdXJjZU5vdGF0aW9uID09PSBcIkZBU1RBXCIgLyogTk9UQVRJT04uRkFTVEEgKi87IH1cbiAgICBpc1NlcGFyYXRvcigpIHsgcmV0dXJuIHRoaXMuc291cmNlTm90YXRpb24gPT09IFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovOyB9XG4gICAgaXNIZWxtKCkgeyByZXR1cm4gdGhpcy5zb3VyY2VOb3RhdGlvbiA9PT0gXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLzsgfVxuICAgIHRvRmFzdGEodGFyZ2V0Tm90YXRpb24pIHsgcmV0dXJuIHRhcmdldE5vdGF0aW9uID09PSBcIkZBU1RBXCIgLyogTk9UQVRJT04uRkFTVEEgKi87IH1cbiAgICB0b1NlcGFyYXRvcih0YXJnZXROb3RhdGlvbikgeyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovOyB9XG4gICAgdG9IZWxtKHRhcmdldE5vdGF0aW9uKSB7IHJldHVybiB0YXJnZXROb3RhdGlvbiA9PT0gXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLzsgfVxuICAgIGlzUm5hKCkgeyByZXR1cm4gdGhpcy5zb3VyY2VVbml0cy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdybmEnKTsgfVxuICAgIGlzRG5hKCkgeyByZXR1cm4gdGhpcy5zb3VyY2VVbml0cy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdkbmEnKTsgfVxuICAgIGlzUGVwdGlkZSgpIHsgcmV0dXJuIHRoaXMuc291cmNlVW5pdHMudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncHQnKTsgfVxuICAgIC8qKiBBc3NvY2lhdGUgbm90YXRpb24gdHlwZXMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB1bml0cyAqL1xuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge05PVEFUSU9OfSAgICAgTm90YXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB1bml0cyB0eXBlXG4gICAgICovXG4gICAgZGV0ZXJtaW5lU291cmNlTm90YXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnNvdXJjZVVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZmFzdGEnKSlcbiAgICAgICAgICAgIHJldHVybiBcIkZBU1RBXCIgLyogTk9UQVRJT04uRkFTVEEgKi87XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc291cmNlVW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdzZXBhcmF0b3InKSlcbiAgICAgICAgICAgIHJldHVybiBcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGV4Y2VwdGlvbnNcbiAgICAgICAgICAgIHJldHVybiBcIkhFTE1cIiAvKiBOT1RBVElPTi5IRUxNICovO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgdGhlIHNlcGFyYXRvciB1c2VkIGluIFNFUEFSQVRPUiBjb2x1bW5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRldGVjdGVkIHNlcGFyYXRvclxuICAgICAqL1xuICAgIGRldGVybWluZVNlcGFyYXRvcigpIHtcbiAgICAgICAgLy8gICBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBkZXRlcm1pbmUgdGhlIHNlcGFyYXRvciBlZmZpY2llbnRseVxuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLnNvdXJjZUNvbHVtbjtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBjb25zdCByZSA9IC9bXmEtel0vO1xuICAgICAgICB3aGlsZSAoaSA8IGNvbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vbGVjdWxlID0gY29sLmdldChpKTtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kU2VwYXJhdG9yID0gbW9sZWN1bGUudG9Mb3dlckNhc2UoKS5tYXRjaChyZSk7XG4gICAgICAgICAgICBpZiAoZm91bmRTZXBhcmF0b3IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kU2VwYXJhdG9yWzBdO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2VwYXJhdG9ycyBmb3VuZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgZW1wdHkgY29sdW1uIG9mIHRoZSBzcGVjaWZpZWQgbm90YXRpb24gdHlwZSBhbmQgdGhlIHNhbWVcbiAgICAgKiBsZW5ndGggYXMgc291cmNlQ29sdW1uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge05PVEFUSU9OfSB0YXJnZXROb3RhdGlvblxuICAgICAqIEByZXR1cm4ge0RHLkNvbHVtbn1cbiAgICAgKi9cbiAgICBnZXROZXdDb2x1bW4odGFyZ2V0Tm90YXRpb24pIHtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5zb3VyY2VDb2x1bW47XG4gICAgICAgIGNvbnN0IGxlbiA9IGNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0YXJnZXROb3RhdGlvbiArICcoJyArIGNvbC5uYW1lICsgJyknO1xuICAgICAgICBjb25zdCBuZXdDb2xOYW1lID0gY29sLmRhdGFGcmFtZS5jb2x1bW5zLmdldFVudXNlZE5hbWUobmFtZSk7XG4gICAgICAgIC8vIGR1bW15IGNvZGVcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uID0gREcuQ29sdW1uLmZyb21MaXN0KCdzdHJpbmcnLCBuZXdDb2xOYW1lLCBuZXcgQXJyYXkobGVuKS5maWxsKCcnKSk7XG4gICAgICAgIG5ld0NvbHVtbi5zZW1UeXBlID0gJ01hY3JvbW9sZWN1bGUnO1xuICAgICAgICBuZXdDb2x1bW4uc2V0VGFnKERHLlRBR1MuVU5JVFMsIHRoaXMuc291cmNlVW5pdHMucmVwbGFjZSh0aGlzLnNvdXJjZU5vdGF0aW9uLnRvTG93ZXJDYXNlKCkudG9TdHJpbmcoKSwgdGFyZ2V0Tm90YXRpb24udG9Mb3dlckNhc2UoKS50b1N0cmluZygpKSk7XG4gICAgICAgIC8vIFRPRE86IHNwZWNpZnkgY2VsbCByZW5kZXJlcnMgZm9yIGFsbCBjYXNlc1xuICAgICAgICBpZiAodGhpcy50b0Zhc3RhKHRhcmdldE5vdGF0aW9uKSkge1xuICAgICAgICAgICAgbmV3Q29sdW1uLnNldFRhZyhERy5UQUdTLkNFTExfUkVOREVSRVIsICdNYWNyb21vbGVjdWxlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIE1hY3JvbW9sZWN1bGUgY29sdW1uIGZyb20gRkFTVEEgdG8gU0VQQVJBVE9SIG5vdGF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yICBBIHNwZWNpZmljIHNlcGFyYXRvciB0byBiZSB1c2VkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGdhcFN5bWJvbCAgR2FwIHN5bWJvbCBpbiBGQVNUQSwgJy0nIGJ5IGRlZmF1bHRcbiAgICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICAgICAgICBBIG5ldyBjb2x1bW4gaW4gU0VQQVJBVE9SIG5vdGF0aW9uXG4gICAgICovXG4gICAgY29udmVydEZhc3RhVG9TZXBhcmF0b3Ioc2VwYXJhdG9yLCBnYXBTeW1ib2wgPSAnLScpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBzcGxpdHRpbmcgRkFTVEEgc2VxdWVuY2UgaW50byBhbiBhcnJheSBvZiBtb25vbWVyczpcbiAgICAgICAgY29uc3Qgc3BsaXR0ZXJBc0Zhc3RhID0gV2ViTG9nby5zcGxpdHRlckFzRmFzdGE7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovKTtcbiAgICAgICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZW1wdHkgY29sdW1uXG4gICAgICAgIG5ld0NvbHVtbi5pbml0KChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhUG9seW1lciA9IHRoaXMuc291cmNlQ29sdW1uLmdldChpZHgpO1xuICAgICAgICAgICAgY29uc3QgZmFzdGFNb25vbWVyc0FycmF5ID0gc3BsaXR0ZXJBc0Zhc3RhKGZhc3RhUG9seW1lcik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZhc3RhTW9ub21lcnNBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChmYXN0YU1vbm9tZXJzQXJyYXlbaV0gPT09IGdhcFN5bWJvbClcbiAgICAgICAgICAgICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5W2ldID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFzdGFNb25vbWVyc0FycmF5LmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDb2x1bW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBNYWNyb21vbGVjdWxlIGNvbHVtbiBmcm9tIEZBU1RBIHRvIEhFTE1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmYXN0YUdhcFN5bWJvbCAgIE9wdGlvbmFsIGZhc3RhIGdhcCBzeW1ib2xcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGVsbUdhcFN5bWJvbCAgICBPcHRpb25hbCBoZWxtIGdhcCBzeW1ib2xcbiAgICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICAgICAgICAgICAgICBBIG5ldyBjb2x1bW4gaW4gSEVMTSBub3RhdGlvblxuICAgICAqL1xuICAgIGNvbnZlcnRGYXN0YVRvSGVsbShmYXN0YUdhcFN5bWJvbCA9ICctJywgaGVsbUdhcFN5bWJvbCA9ICcqJykge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHNwbGl0dGluZyBGQVNUQSBzZXF1ZW5jZSBpbnRvIGFuIGFycmF5IG9mIG1vbm9tZXJzXG4gICAgICAgIGNvbnN0IHNwbGl0dGVyQXNGYXN0YSA9IFdlYkxvZ28uc3BsaXR0ZXJBc0Zhc3RhO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAodGhpcy5pc0RuYSgpKSA/ICdETkExeycgOlxuICAgICAgICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUk5BMXsnIDpcbiAgICAgICAgICAgICAgICAodGhpcy5pc1BlcHRpZGUoKSkgPyAnUEVQVElERTF7JyA6XG4gICAgICAgICAgICAgICAgICAgICdVbmtub3duJzsgLy8gdGhpcyBjYXNlIHNob3VsZCBiZSBoYW5kbGVkIGFzIGV4Y2VwdGlvbmFsXG4gICAgICAgIGlmIChwcmVmaXggPT09ICdVbmtub3duJylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmVpdGhlciBwZXB0aWRlLCBub3IgbnVjbGVvdGlkZScpO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gJ30kJCQnO1xuICAgICAgICBjb25zdCBsZWZ0V3JhcHBlciA9ICh0aGlzLmlzRG5hKCkpID8gJ0QoJyA6XG4gICAgICAgICAgICAodGhpcy5pc1JuYSgpKSA/ICdSKCcgOiAnJzsgLy8gbm8gd3JhcHBlciBmb3IgcGVwdGlkZXNcbiAgICAgICAgY29uc3QgcmlnaHRXcmFwcGVyID0gKHRoaXMuaXNEbmEoKSB8fCB0aGlzLmlzUm5hKCkpID8gJylQJyA6ICcnOyAvLyBubyB3cmFwcGVyIGZvciBwZXB0aWRlc1xuICAgICAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldE5ld0NvbHVtbihcIkhFTE1cIiAvKiBOT1RBVElPTi5IRUxNICovKTtcbiAgICAgICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIGVtcHR5IGNvbHVtblxuICAgICAgICBuZXdDb2x1bW4uaW5pdCgoaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYXN0YVBvbHltZXIgPSB0aGlzLnNvdXJjZUNvbHVtbi5nZXQoaWR4KTtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhTW9ub21lcnNBcnJheSA9IHNwbGl0dGVyQXNGYXN0YShmYXN0YVBvbHltZXIpO1xuICAgICAgICAgICAgY29uc3QgaGVsbUFycmF5ID0gW3ByZWZpeF07XG4gICAgICAgICAgICBsZXQgZmlyc3RJdGVyYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmYXN0YU1vbm9tZXJzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmFzdGFNb25vbWVyc0FycmF5W2ldID09PSBmYXN0YUdhcFN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIGdhcCBzeW1ib2xzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgICAgIGhlbG1BcnJheS5wdXNoKGhlbG1HYXBTeW1ib2wpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90ID0gZmlyc3RJdGVyYXRpb24gPyAnJyA6ICcuJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IFtkb3QsIGxlZnRXcmFwcGVyLCBmYXN0YU1vbm9tZXJzQXJyYXlbaV0sIHJpZ2h0V3JhcHBlcl07XG4gICAgICAgICAgICAgICAgICAgIGhlbG1BcnJheS5wdXNoKGl0ZW0uam9pbignJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGVsbUFycmF5LnB1c2gocG9zdGZpeCk7XG4gICAgICAgICAgICByZXR1cm4gaGVsbUFycmF5LmpvaW4oJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgICB9XG4gICAgaGFuZGxlU2VwYXJhdG9ySXRlbUZvckZhc3RhKGlkeCwgc2VwYXJhdG9ySXRlbXNBcnJheSwgc2VwYXJhdG9yLCBnYXBTeW1ib2wsIGZhc3RhTW9ub21lcnNBcnJheSkge1xuICAgICAgICBjb25zdCBpdGVtID0gc2VwYXJhdG9ySXRlbXNBcnJheVtpZHhdO1xuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAvLyB0aGUgY2FzZSBvZiBhIG11bHRpLWNoYXJhY3RlciBtb25vbWVyXG4gICAgICAgICAgICBjb25zdCBtb25vbWVyID0gJ1snICsgaXRlbSArICddJztcbiAgICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKG1vbm9tZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtID09PSBzZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIGlmIChpZHggIT09IDAgJiYgc2VwYXJhdG9ySXRlbXNBcnJheVtpZHggLSAxXSA9PT0gc2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKGdhcFN5bWJvbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udmVydFNlcGFyYXRvclRvRmFzdGEoc2VwYXJhdG9yID0gbnVsbCwgZ2FwU3ltYm9sID0gJy0nKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudGF0aW9uXG4gICAgICAgIC8vICogc2ltaWxhcmx5IHRvIGZhc3RhMnNlcGFyYXRvciwgZGl2aWRlIHN0cmluZyBpbnRvIG1vbm9tZXJzXG4gICAgICAgIC8vICogYWRqYWNlbnQgc2VwYXJhdG9ycyBpcyBhIGdhcCAoc3ltYm9sIHRvIGJlIHNwZWNpZmllZClcbiAgICAgICAgLy8gKiB0aGUgbW9ub21lcnMgTVVTVCBiZSBzaW5nbGUtY2hhcmFjdGVyIG9ubGVzLCBvdGhlcndpc2UgZm9yYmlkXG4gICAgICAgIC8vICogTk8sIHRoZXkgY2FuIGJlIG11bHRpLWNoYXJhY3RlcnNcbiAgICAgICAgLy8gY29udmVyc2lvblxuICAgICAgICAvLyAqIGNvbnNpZGVyIGF1dG9tYXRpYyBkZXRlcm1pbmluZyB0aGUgc2VwYXJhdG9yXG4gICAgICAgIC8vIGlmIChzZXBhcmF0b3IgPT09IG51bGwpXG4gICAgICAgIC8vICAgc2VwYXJhdG9yID0gdGhpcy5kZXRlcm1pbmVTZXBhcmF0b3IoKTtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBzcGxpdHRpbmcgRkFTVEEgc2VxdWVuY2UgaW50byBhbiBhcnJheSBvZiBtb25vbWVyc1xuICAgICAgICAvL2NvbnN0IHNwbGl0dGVyQXNTZXBhcmF0b3IgPSBXZWJMb2dvLmdldFNwbGl0dGVyV2l0aFNlcGFyYXRvcihzZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBzcGxpdHRlciA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXJGb3JDb2x1bW4odGhpcy5fc291cmNlQ29sdW1uKTtcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4oXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovKTtcbiAgICAgICAgLy8gYXNzaWduIHRoZSB2YWx1ZXMgdG8gdGhlIGVtcHR5IGNvbHVtblxuICAgICAgICBuZXdDb2x1bW4uaW5pdCgoaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXBhcmF0b3JQb2x5bWVyID0gdGhpcy5zb3VyY2VDb2x1bW4uZ2V0KGlkeCk7XG4gICAgICAgICAgICAvLyBpdGVtcyBjYW4gYmUgbW9ub21lcnMgb3Igc2VwYXJhdG9yc1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9ySXRlbXNBcnJheSA9IHNwbGl0dGVyKHNlcGFyYXRvclBvbHltZXIpO1xuICAgICAgICAgICAgY29uc3QgZmFzdGFNb25vbWVyc0FycmF5ID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcGFyYXRvckl0ZW1zQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gc2VwYXJhdG9ySXRlbXNBcnJheVtpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5LnB1c2goZ2FwU3ltYm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjYXNlIG9mIGEgbXVsdGktY2hhcmFjdGVyIG1vbm9tZXJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9ub21lciA9ICdbJyArIGl0ZW0gKyAnXSc7XG4gICAgICAgICAgICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKG1vbm9tZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmFzdGFNb25vbWVyc0FycmF5LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhc3RhTW9ub21lcnNBcnJheS5qb2luKCcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDb2x1bW47XG4gICAgfVxuICAgIGNvbnZlcnRTZXBhcmF0b3JUb0hlbG0oZmFzdGFHYXBTeW1ib2wgPSAnLScsIGhlbG1HYXBTeW1ib2wgPSAnKicpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBzcGxpdHRpbmcgRkFTVEEgc2VxdWVuY2UgaW50byBhbiBhcnJheSBvZiBtb25vbWVyc1xuICAgICAgICBjb25zdCBzcGxpdHRlciA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXJGb3JDb2x1bW4odGhpcy5fc291cmNlQ29sdW1uKTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gKHRoaXMuaXNEbmEoKSkgPyAnRE5BMXsnIDpcbiAgICAgICAgICAgICh0aGlzLmlzUm5hKCkpID8gJ1JOQTF7JyA6XG4gICAgICAgICAgICAgICAgKHRoaXMuaXNQZXB0aWRlKCkpID8gJ1BFUFRJREUxeycgOlxuICAgICAgICAgICAgICAgICAgICAnVW5rbm93bic7IC8vIHRoaXMgY2FzZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBleGNlcHRpb25hbFxuICAgICAgICBpZiAocHJlZml4ID09PSAnVW5rbm93bicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgcGVwdGlkZSwgbm9yIG51Y2xlb3RpZGUnKTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9ICd9JCQkJztcbiAgICAgICAgY29uc3QgbGVmdFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpKSA/ICdEKCcgOlxuICAgICAgICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUignIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgICAgIGNvbnN0IHJpZ2h0V3JhcHBlciA9ICh0aGlzLmlzRG5hKCkgfHwgdGhpcy5pc1JuYSgpKSA/ICcpUCcgOiAnJzsgLy8gbm8gd3JhcHBlciBmb3IgcGVwdGlkZXNcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4oXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyk7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICAgICAgbmV3Q29sdW1uLmluaXQoKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmFzdGFQb2x5bWVyID0gdGhpcy5zb3VyY2VDb2x1bW4uZ2V0KGlkeCk7XG4gICAgICAgICAgICBjb25zdCBmYXN0YU1vbm9tZXJzQXJyYXkgPSBzcGxpdHRlcihmYXN0YVBvbHltZXIpO1xuICAgICAgICAgICAgY29uc3QgaGVsbUFycmF5ID0gW3ByZWZpeF07XG4gICAgICAgICAgICBsZXQgZmlyc3RJdGVyYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmYXN0YU1vbm9tZXJzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmFzdGFNb25vbWVyc0FycmF5W2ldID09PSBmYXN0YUdhcFN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIGdhcCBzeW1ib2xzIGhhbmRsaW5nXG4gICAgICAgICAgICAgICAgICAgIGhlbG1BcnJheS5wdXNoKGhlbG1HYXBTeW1ib2wpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90ID0gZmlyc3RJdGVyYXRpb24gPyAnJyA6ICcuJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IFtkb3QsIGxlZnRXcmFwcGVyLCBmYXN0YU1vbm9tZXJzQXJyYXlbaV0sIHJpZ2h0V3JhcHBlcl07XG4gICAgICAgICAgICAgICAgICAgIGhlbG1BcnJheS5wdXNoKGl0ZW0uam9pbignJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaGVsbUFycmF5LnB1c2gocG9zdGZpeCk7XG4gICAgICAgICAgICByZXR1cm4gaGVsbUFycmF5LmpvaW4oJycpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld0NvbHVtbjtcbiAgICB9XG4gICAgY29udmVydEhlbG1Ub0Zhc3RhKCkge1xuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnRhdGlvblxuICAgICAgICByZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovKTtcbiAgICB9XG4gICAgY29udmVydEhlbG1Ub1NlcGFyYXRvcigpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50YXRpb3JldHVybiB0aGlzLmdldE5ld0NvbHVtbigpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oXCJTRVBBUkFUT1JcIiAvKiBOT1RBVElPTi5TRVBBUkFUT1IgKi8pO1xuICAgIH1cbiAgICAvKiogRGlzcGF0Y2hlciBtZXRob2QgZm9yIG5vdGF0aW9uIGNvbnZlcnNpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Tk9UQVRJT059IHRhcmdldE5vdGF0aW9uICAgTm90YXRpb24gd2Ugd2FudCB0byBjb252ZXJ0IHRvXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0Z3RTZXBhcmF0b3IgICBQb3NzaWJsZSBzZXBhcmF0b3JcbiAgICAgKiBAcmV0dXJuIHtERy5Db2x1bW59ICAgICAgICAgICAgICAgIENvbnZlcnRlZCBjb2x1bW5cbiAgICAgKi9cbiAgICBjb252ZXJ0KHRhcmdldE5vdGF0aW9uLCB0Z3RTZXBhcmF0b3IgPSBudWxsKSB7XG4gICAgICAgIC8vIHBvc3NpYmxlIGV4Y2VwdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuc291cmNlTm90YXRpb24gPT09IHRhcmdldE5vdGF0aW9uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYXJnZXQgbm90YXRpb24gaXMgaW52YWxpZCcpO1xuICAgICAgICBpZiAodGhpcy50b1NlcGFyYXRvcih0YXJnZXROb3RhdGlvbikgJiYgdGd0U2VwYXJhdG9yID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYXJnZXQgc2VwYXJhdG9yIGlzIG5vdCBzcGVjaWZpZWQnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNGYXN0YSgpICYmIHRoaXMudG9TZXBhcmF0b3IodGFyZ2V0Tm90YXRpb24pICYmIHRndFNlcGFyYXRvciAhPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGYXN0YVRvU2VwYXJhdG9yKHRndFNlcGFyYXRvcik7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNGYXN0YSgpICYmIHRoaXMudG9IZWxtKHRhcmdldE5vdGF0aW9uKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRGYXN0YVRvSGVsbSgpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmlzU2VwYXJhdG9yKCkgJiYgdGhpcy50b0Zhc3RhKHRhcmdldE5vdGF0aW9uKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRTZXBhcmF0b3JUb0Zhc3RhKHRndFNlcGFyYXRvcik7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNTZXBhcmF0b3IoKSAmJiB0aGlzLnRvSGVsbSh0YXJnZXROb3RhdGlvbikpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0U2VwYXJhdG9yVG9IZWxtKCk7XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNIZWxtKCkgJiYgdGhpcy50b0Zhc3RhKHRhcmdldE5vdGF0aW9uKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRIZWxtVG9GYXN0YSgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGVsbVRvU2VwYXJhdG9yKCk7XG4gICAgfVxufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCB7IGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9zaW1pbGFyaXR5LW1ldHJpY3MnO1xuaW1wb3J0IHsgQXZhaWxhYmxlTWV0cmljcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MnO1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlR2V0U2ltaWxhcml0aWVzKGNvbCwgc2VxKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nQXJyYXkgPSBjb2wudG9MaXN0KCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlcyA9IG5ldyBBcnJheShzdHJpbmdBcnJheS5sZW5ndGgpLmZpbGwoMC4wKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdBcnJheS5sZW5ndGg7ICsraSlcbiAgICAgICAgICAgIGRpc3RhbmNlc1tpXSA9IGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoQXZhaWxhYmxlTWV0cmljc1snU3RyaW5nJ11bJ0xldmVuc2h0ZWluJ10oc3RyaW5nQXJyYXlbaV0sIHNlcSkpO1xuICAgICAgICByZXR1cm4gREcuQ29sdW1uLmZyb21MaXN0KERHLkNPTFVNTl9UWVBFLkZMT0FULCAnZGlzdGFuY2VzJywgZGlzdGFuY2VzKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkcmF3VG9vbHRpcChwYXJhbXMpIHtcbiAgICBwYXJhbXMudG9vbHRpcHNbcGFyYW1zLmxpbmUuaWRdID0gdWkuZGl2SChbXSk7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB1aS5kaXZWKFtcbiAgICAgICAgdWkuZGl2VGV4dCgnc2VxdWVuc2UnKSxcbiAgICAgICAgdWkuZGl2VGV4dChwYXJhbXMuYWN0aXZpdHkubmFtZSksXG4gICAgXSk7XG4gICAgY29sdW1uTmFtZXMuc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJztcbiAgICBjb2x1bW5OYW1lcy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIGNvbHVtbk5hbWVzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgIHBhcmFtcy50b29sdGlwc1twYXJhbXMubGluZS5pZF0uYXBwZW5kKGNvbHVtbk5hbWVzKTtcbiAgICBwYXJhbXMubGluZS5tb2xzLmZvckVhY2goKG1vbCkgPT4ge1xuICAgICAgICBjb25zdCBzZXEgPSB1aS5kaXZUZXh0KHBhcmFtcy5kZi5nZXQocGFyYW1zLnNlcUNvbC5uYW1lLCBtb2wpKTtcbiAgICAgICAgY29uc3QgYWN0aXZpdHkgPSB1aS5kaXZUZXh0KHBhcmFtcy5kZi5nZXQocGFyYW1zLmFjdGl2aXR5Lm5hbWUsIG1vbCkudG9GaXhlZCgyKSk7XG4gICAgICAgIGFjdGl2aXR5LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGFjdGl2aXR5LnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2xlZnQnO1xuICAgICAgICBhY3Rpdml0eS5zdHlsZS5wYWRkaW5nTGVmdCA9ICczMHB4JztcbiAgICAgICAgcGFyYW1zLnRvb2x0aXBzW3BhcmFtcy5saW5lLmlkXS5hcHBlbmQodWkuZGl2VihbXG4gICAgICAgICAgICBzZXEsXG4gICAgICAgICAgICBhY3Rpdml0eSxcbiAgICAgICAgXSwgeyBzdHlsZTogeyBwYWRkaW5nTGVmdDogJzVweCcgfSB9KSk7XG4gICAgfSk7XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBBdmFpbGFibGVNZXRyaWNzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdHlwZWQtbWV0cmljcyc7XG5pbXBvcnQgeyByZWR1Y2VEaW1lbnNpbmFsaXR5V2l0aE5vcm1hbGl6YXRpb24gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9zZXF1ZW5jZS1zcGFjZSc7XG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2VTcGFjZShzcGFjZVBhcmFtcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGxldCBwcmVwYXJlZERhdGE7XG4gICAgICAgIGlmICghKHNwYWNlUGFyYW1zLnNlcUNvbC50YWdzW0RHLlRBR1MuVU5JVFNdID09PSAnSEVMTScpKSB7XG4gICAgICAgICAgICBjb25zdCBzZXAgPSBzcGFjZVBhcmFtcy5zZXFDb2wuZ2V0VGFnKCdzZXBhcmF0b3InKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcEZpbmFsID0gc2VwID8gc2VwID09PSAnLicgPyAnXFxcXFxcLicgOiBzZXAgOiAnLSc7XG4gICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoc2VwRmluYWwsICdnJyk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1snU3RyaW5nJ10pLmluY2x1ZGVzKHNwYWNlUGFyYW1zLnNpbWlsYXJpdHlNZXRyaWMpKVxuICAgICAgICAgICAgICAgIHByZXBhcmVkRGF0YSA9IHNwYWNlUGFyYW1zLnNlcUNvbC50b0xpc3QoKS5tYXAoKHYpID0+IHYucmVwbGFjZShyZWdleCwgJycpKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwcmVwYXJlZERhdGEgPSBzcGFjZVBhcmFtcy5zZXFDb2wudG9MaXN0KCkubWFwKCh2KSA9PiB2LnJlcGxhY2UocmVnZXgsICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcmVwYXJlZERhdGEgPSBzcGFjZVBhcmFtcy5zZXFDb2wudG9MaXN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VxdWVuY2VTcGFjZVJlc3VsdCA9IHlpZWxkIHJlZHVjZURpbWVuc2luYWxpdHlXaXRoTm9ybWFsaXphdGlvbihwcmVwYXJlZERhdGEsIHNwYWNlUGFyYW1zLm1ldGhvZE5hbWUsIHNwYWNlUGFyYW1zLnNpbWlsYXJpdHlNZXRyaWMsIHNwYWNlUGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb2xzID0gc3BhY2VQYXJhbXMuZW1iZWRBeGVzTmFtZXMubWFwKChuYW1lLCBpbmRleCkgPT4gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkobmFtZSwgc2VxdWVuY2VTcGFjZVJlc3VsdC5lbWJlZGRpbmdbaW5kZXhdKSk7XG4gICAgICAgIHJldHVybiB7IGRpc3RhbmNlOiBzZXF1ZW5jZVNwYWNlUmVzdWx0LmRpc3RhbmNlLCBjb29yZGluYXRlczogbmV3IERHLkNvbHVtbkxpc3QoY29scykgfTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWJlZGRpbmdDb2xzTmFtZXMoZGYpIHtcbiAgICBjb25zdCBheGVzID0gWydFbWJlZF9YJywgJ0VtYmVkX1knXTtcbiAgICBjb25zdCBjb2xOYW1lSW5kID0gZGYuY29sdW1ucy5uYW1lcygpLmZpbHRlcigoaXQpID0+IGl0LmluY2x1ZGVzKGF4ZXNbMF0pKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBheGVzLm1hcCgoaXQpID0+IGAke2l0fV8ke2NvbE5hbWVJbmR9YCk7XG59XG4iLCJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgV2ViTG9nbyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92aWV3ZXJzL3dlYi1sb2dvJztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuZXhwb3J0IGNvbnN0IEhFTE1fQ09SRV9MSUJfRklMRU5BTUUgPSAnL3NhbXBsZXMvSEVMTUNvcmVMaWJyYXJ5Lmpzb24nO1xuZXhwb3J0IGNvbnN0IEhFTE1fQ09SRV9MSUJfTU9OT01FUl9TWU1CT0wgPSAnc3ltYm9sJztcbmV4cG9ydCBjb25zdCBIRUxNX0NPUkVfTElCX01PTEZJTEUgPSAnbW9sZmlsZSc7XG5leHBvcnQgY29uc3QgSEVMTV9DT1JFX0ZJRUxEUyA9IFsnc3ltYm9sJywgJ21vbGZpbGUnLCAncmdyb3VwcycsICduYW1lJ107XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9sZmlsZXNGcm9tU2VxKGNvbCwgbW9ub21lcnNMaWJPYmplY3QpIHtcbiAgICBjb25zdCB1bml0cyA9IGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICAgIGNvbnN0IHNlcCA9IGNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICAgIGNvbnN0IHNwbGl0dGVyRnVuYyA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcCk7XG4gICAgY29uc3QgbW9ub21lcnNEaWN0ID0gY3JlYXRlTW9tb21lcnNNb2xEaWN0KG1vbm9tZXJzTGliT2JqZWN0KTtcbiAgICBjb25zdCBtb2xGaWxlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IG1vbm9tZXJzID0gc3BsaXR0ZXJGdW5jKGNvbC5nZXQoaSkpO1xuICAgICAgICBjb25zdCBtb2xGaWxlc0ZvclNlcSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBpZiAobW9ub21lcnNbal0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1vbm9tZXJzRGljdFttb25vbWVyc1tqXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKGBNb25vbWVyICR7bW9ub21lcnNbal19IGlzIG1pc3NpbmcgaW4gSEVMTSBsaWJyYXJ5LiBTdHJ1Y3R1cmUgY2Fubm90IGJlIGNyZWF0ZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1vbEZpbGVzRm9yU2VxLnB1c2goSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG1vbEZpbGVzLnB1c2gobW9sRmlsZXNGb3JTZXEpO1xuICAgIH1cbiAgICByZXR1cm4gbW9sRmlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9tb21lcnNNb2xEaWN0KGxpYikge1xuICAgIGNvbnN0IGRpY3QgPSB7fTtcbiAgICBsaWIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgaWYgKGl0Wydwb2x5bWVyVHlwZSddID09PSAnUEVQVElERScpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vbm9tZXJPYmplY3QgPSB7fTtcbiAgICAgICAgICAgIEhFTE1fQ09SRV9GSUVMRFMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBtb25vbWVyT2JqZWN0W2ZpZWxkXSA9IGl0W2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGljdFtpdFtIRUxNX0NPUkVfTElCX01PTk9NRVJfU1lNQk9MXV0gPSBtb25vbWVyT2JqZWN0O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpY3Q7XG59XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgVmRSZWdpb25UeXBlIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3ZkLXJlZ2lvbnMnO1xuY29uc3QgdnJ0ID0gVmRSZWdpb25UeXBlO1xuLy8gUG9zaXRpb25zIG9mIHJlZ2lvbnMgZm9yIG51bWJlcmluZyBzY2hlbWVzXG4vLyBodHRwOi8vd3d3LmJpb2luZi5vcmcudWsvYWJzL2luZm8uaHRtbFxuLy8gY29uc3QgaW1ndFJlZ2lvbnM6IFZkUmVnaW9uW10gPSBbXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjEnLCAnTGlnaHQnLCAxLCAnMScsICcyNicpLFxuLy8gICBuZXcgVmRSZWdpb24odnJ0LkZSLCAnRlIxJywgJ0hlYXZ5JywgMSwgJzEnLCAnMjYnKSxcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuQ0RSLCAnQ0RSMScsICdMaWdodCcsIDIsICcyNycsICczOCcpLCAvLyAyNy0zMlxuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjEnLCAnSGVhdnknLCAyLCAnMjcnLCAnMzgnKSwgLy8gMjctMzJcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjInLCAnTGlnaHQnLCAzLCAnMzknLCAnNTUnKSxcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSMicsICdIZWF2eScsIDMsICczOScsICc1NScpLFxuLy9cbi8vICAgbmV3IFZkUmVnaW9uKHZydC5DRFIsICdDRFIyJywgJ0xpZ2h0JywgNCwgJzU2JywgJzY1JyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuQ0RSLCAnQ0RSMicsICdIZWF2eScsIDQsICc1NicsICc2NScpLFxuLy9cbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSMycsICdMaWdodCcsIDUsICc2NicsICcxMDQnKSxcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSMycsICdIZWF2eScsIDUsICc2NicsICcxMDQnKSxcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuQ0RSLCAnQ0RSMycsICdMaWdodCcsIDYsICcxMDUnLCAnMTE3JyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuQ0RSLCAnQ0RSMycsICdIZWF2eScsIDYsICcxMDUnLCAnMTE3JyksXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkZSLCAnRlI0JywgJ0xpZ2h0JywgNywgJzExOCcsIG51bGwvKjEyNyovKSxcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSNCcsICdIZWF2eScsIDcsICcxMTgnLCBudWxsLyoxMjgqLyksXG4vLyBdO1xuLyoqIFZpZXdlciB3aXRoIHRhYnMgYmFzZWQgb24gZGVzY3JpcHRpb24gb2YgY2hhaW4gcmVnaW9ucy5cbiAqICBVc2VkIHRvIGRlZmluZSByZWdpb25zIG9mIGFuIGltbXVub2dsb2J1bGluIExDLlxuICovXG5leHBvcnQgY2xhc3MgVmRSZWdpb25zVmlld2VyIGV4dGVuZHMgREcuSnNWaWV3ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICAvLyBwcml2YXRlIHJlZ2lvbnNEZjogREcuRGF0YUZyYW1lO1xuICAgICAgICB0aGlzLnJlZ2lvbnNGZyA9IG51bGw7XG4gICAgICAgIC8vIHByaXZhdGUgcmVnaW9uc1RWOiBERy5UYWJsZVZpZXc7XG4gICAgICAgIHRoaXMucmVnaW9uc1Jvb3QgPSBudWxsO1xuICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFuZWxOb2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWdpb25zID0gW107XG4gICAgICAgIC8vICNyZWdpb24gLS0gSGFuZGxlIGNvbnRyb2xzJyBldmVudHMgLS1cbiAgICAgICAgdGhpcy5yZXNpemluZyA9IGZhbHNlO1xuICAgICAgICAvLyAjZW5kcmVnaW9uXG4gICAgICAgIC8vI3JlZ2lvbiAtLSBWaWV3IC0tXG4gICAgICAgIHRoaXMuaG9zdCA9IG51bGw7XG4gICAgICAgIHRoaXMubWFpbkxheW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMubG9nb3MgPSBbXTtcbiAgICAgICAgLy8gVG8gcHJldmVudCBhbWJpZ3VvdXMgbnVtYmVyaW5nIHNjaGVtZSBpbiBNTEJcbiAgICAgICAgdGhpcy5yZWdpb25UeXBlcyA9IHRoaXMuc3RyaW5nTGlzdCgncmVnaW9uVHlwZXMnLCBbdnJ0LkNEUl0sIHsgY2hvaWNlczogT2JqZWN0LnZhbHVlcyh2cnQpLmZpbHRlcigodCkgPT4gdCAhPSB2cnQuVW5rbm93bikgfSk7XG4gICAgICAgIHRoaXMuY2hhaW5zID0gdGhpcy5zdHJpbmdMaXN0KCdjaGFpbnMnLCBbJ0hlYXZ5JywgJ0xpZ2h0J10sIHsgY2hvaWNlczogWydIZWF2eScsICdMaWdodCddIH0pO1xuICAgICAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZVBvc3RmaXggPSB0aGlzLnN0cmluZygnc2VxdWVuY2VDb2x1bW5OYW1lUG9zdGZpeCcsICdjaGFpbiBzZXF1ZW5jZScpO1xuICAgIH1cbiAgICBnZXQgZGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFGcmFtZTtcbiAgICB9XG4gICAgLy8gVE9ETzogLm9uVGFibGVBdHRhY2hlZCBpcyBub3QgY2FsbGluZyBvbiBkYXRhRnJhbWUgc2V0LCBvblByb3BlcnR5Q2hhbmdlZCAgYWxzbyBub3QgY2FsbGluZ1xuICAgIHNldERmKHZhbHVlLCByZWdpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdWZFJlZ2lvbnNWaWV3ZXIuc2V0RGYoKScpO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5kZXN0cm95VmlldygpO1xuICAgICAgICAgICAgdGhpcy5yZWdpb25zID0gcmVnaW9ucztcbiAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lID0gdmFsdWU7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmJ1aWxkVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIC8vI3JlZ2lvbiByZWdpb25zREYgd2l0aCBmaWx0ZXJcbiAgICAgICAgICAgIC8vIHRoaXMucmVnaW9uc0RmID0gREcuRGF0YUZyYW1lLmZyb21PYmplY3RzKHRoaXMucmVnaW9ucyk7XG4gICAgICAgICAgICAvLyB0aGlzLnJlZ2lvbnNEZi5yb3dzLmZpbHRlcigocm93KSA9PiByb3cubmFtZSA9PSAnQ0RSMScpO1xuICAgICAgICAgICAgLy8gLy8gVG8gYXZhaWxhYmxlIG9wdGlvbnMgL1xuICAgICAgICAgICAgLy8gdGhpcy5yZWdpb25zRmcgPSAoYXdhaXQgdGhpcy5yZWdpb25zRGYucGxvdC5mcm9tVHlwZShERy5WSUVXRVIuRklMVEVSUywge1xuICAgICAgICAgICAgLy8gICAvLyBjb2x1bW5OYW1lczogWyduYW1lJyxdLFxuICAgICAgICAgICAgLy8gICBzaG93RmlsdGVyQ291bnRzSW5kaWNhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAvLyAgIHNob3dIZWFkZXI6IGZhbHNlLFxuICAgICAgICAgICAgLy8gICBzaG93U2VhcmNoQm94OiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgZmlsdGVyczogW1xuICAgICAgICAgICAgLy8gICAgIHt0eXBlOiBERy5GSUxURVJfVFlQRS5DQVRFR09SSUNBTCwgY29sdW1uOiAndHlwZScsIGxhYmVsOiAnUmVnaW9uIG5hbWUnLCBzaG93SGlzdG9ncmFtOiBmYWxzZX0sXG4gICAgICAgICAgICAvLyAgICAge3R5cGU6IERHLkZJTFRFUl9UWVBFLkNBVEVHT1JJQ0FMLCBjb2x1bW46ICduYW1lJywgbGFiZWw6ICdSZWdpb24gdHlwZScsIHNob3dIaXN0b2dyYW06IGZhbHNlfSxcbiAgICAgICAgICAgIC8vICAgXSxcbiAgICAgICAgICAgIC8vICAgdGl0bGU6ICdSZWdpb25zIGZpbHRlcicsXG4gICAgICAgICAgICAvLyAgIHNob3dUaXRsZTogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgZGVzY3JpcHRpb246ICdGaWx0ZXIgZm9yIHJlZ2lvbnMgb2YgbXVsdGlwbGUgYWxpZ25tZW50IGJ5IElNR1Qgbm9tZW5jbGF0dXJlJyxcbiAgICAgICAgICAgIC8vICAgc29tZVByb3BlcnR5OiAnSGVsbG8nLFxuICAgICAgICAgICAgLy8gfSkpIGFzIERHLkZpbHRlckdyb3VwO1xuICAgICAgICAgICAgLy8jZW5kcmVnaW9uIHJlZ2lvbnNERiB3aXRoIGZpbHRlclxuICAgICAgICAgICAgLy8gdGhpcy5tbGJWaWV3LmRvY2tNYW5hZ2VyLmRvY2sodGhpcy5yZWdpb25zRmcucm9vdCwgREcuRE9DS19UWVBFLkxFRlQsIHJvb3ROb2RlLCAnRmlsdGVyIHJlZ2lvbnMnLCAwLjIpO1xuICAgICAgICAgICAgdGhpcy5zdWJzLnB1c2godWkub25TaXplQ2hhbmdlZCh0aGlzLnJvb3QpLnN1YnNjcmliZSh0aGlzLnJvb3RPblNpemVDaGFuZ2VkLmJpbmQodGhpcykpKTtcbiAgICAgICAgICAgIC8vIHJ4anMuZnJvbUV2ZW50KHRoaXMucm9vdCwgJ21vdXNlbW92ZScpLnN1YnNjcmliZSh0aGlzLm9uTW91c2VNb3ZlUm9vdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uTW91c2VNb3ZlUm9vdC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuYnVpbGRWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblRhYmxlQXR0YWNoZWQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmluaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgb25Qcm9wZXJ0eUNoYW5nZWQ6IHsgZ2V0OiAoKSA9PiBzdXBlci5vblByb3BlcnR5Q2hhbmdlZCB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgX3N1cGVyLm9uUHJvcGVydHlDaGFuZ2VkLmNhbGwodGhpcywgcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlZ2lvblR5cGVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjaGFpbnMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NlcXVlbmNlQ29sdW1uTmFtZVBvc3RmaXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvcGVuKG1sYlZpZXcpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxOb2RlID0gbWxiVmlldy5kb2NrTWFuYWdlci5kb2NrKHRoaXMucm9vdCwgREcuRE9DS19UWVBFLlRPUCwgbnVsbCwgJ1JlZ2lvbnMnLCAwLjIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2hvdyhtbGJWaWV3KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByb290T25TaXplQ2hhbmdlZChhcmdzKSB7XG4gICAgICAgIHRoaXMuY2FsY1NpemUoKTtcbiAgICB9XG4gICAgZGVzdHJveVZpZXcoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBVbnN1YnNjcmliZSBmcm9tIGFuZCByZW1vdmUgYWxsIHZpZXcgZWxlbWVudHNcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFZkUmVnaW9uc1ZpZXdlci5kZXN0cm95VmlldyggbWFpbkxheW91dCA9ICR7IXRoaXMubWFpbkxheW91dCA/ICdub25lJyA6ICd2YWx1ZSd9IClgKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1haW5MYXlvdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMucm9vdC5yZW1vdmVDaGlsZCh0aGlzLmhvc3QpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFpbkxheW91dC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5MYXlvdXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYnVpbGRWaWV3KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVmRSZWdpb25zVmlld2VyLmJ1aWxkVmlldygpIHN0YXJ0Jyk7XG4gICAgICAgICAgICBjb25zdCBjb2xOYW1lcyA9IE9iamVjdC5hc3NpZ24oe30sIC4uLnRoaXMuY2hhaW5zLm1hcCgoY2hhaW4pID0+ICh7IFtjaGFpbl06IGAke2NoYWlufSAke3RoaXMuc2VxdWVuY2VDb2x1bW5OYW1lUG9zdGZpeH1gIH0pKSk7XG4gICAgICAgICAgICBjb25zdCByZWdpb25zRmlsdGVyZWQgPSB0aGlzLnJlZ2lvbnMuZmlsdGVyKChyKSA9PiB0aGlzLnJlZ2lvblR5cGVzLmluY2x1ZGVzKHIudHlwZSkpO1xuICAgICAgICAgICAgY29uc3Qgb3JkZXJMaXN0ID0gQXJyYXkuZnJvbShuZXcgU2V0KHJlZ2lvbnNGaWx0ZXJlZC5tYXAoKHIpID0+IHIub3JkZXIpKSkuc29ydCgpO1xuICAgICAgICAgICAgdGhpcy5sb2dvcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgb3JkZXJJID0gMDsgb3JkZXJJIDwgb3JkZXJMaXN0Lmxlbmd0aDsgb3JkZXJJKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpb25DaGFpbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYWluIG9mIHRoaXMuY2hhaW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IHJlZ2lvbnNGaWx0ZXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKHIpID0+IHIub3JkZXIgPT0gb3JkZXJMaXN0W29yZGVySV0gJiYgci5jaGFpbiA9PSBjaGFpbik7XG4gICAgICAgICAgICAgICAgICAgIHJlZ2lvbkNoYWluc1tjaGFpbl0gPSAoeWllbGQgdGhpcy5kYXRhRnJhbWUucGxvdC5mcm9tVHlwZSgnV2ViTG9nbycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlQ29sdW1uTmFtZTogY29sTmFtZXNbY2hhaW5dLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbk5hbWU6IHJlZ2lvbi5wb3NpdGlvblN0YXJ0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uTmFtZTogcmVnaW9uLnBvc2l0aW9uRW5kTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpeFdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdlYkxvZ28gY3JlYXRpb24gZmlyZXMgb25Sb290U2l6ZUNoYW5nZWQgZXZlbnQgZXZlbiBiZWZvcmUgY29udHJvbCBiZWluZyBhZGRlZCB0byB0aGlzLmxvZ29zXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvc1tvcmRlckldID0gcmVnaW9uQ2hhaW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdWkudGFibGVGcm9tTWFwKClcbiAgICAgICAgICAgIC8vIERHLkh0bWxUYWJsZS5jcmVhdGUoKVxuICAgICAgICAgICAgdGhpcy5tYWluTGF5b3V0ID0gdWkudGFibGUodGhpcy5jaGFpbnMsIChjaGFpbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gW1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNoYWluIGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIC4uLihvcmRlckxpc3QubGVuZ3RoID4gMCA/IFt1aS5kaXYoY2hhaW4sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06ICdyb3RhdGUoLTkwZGVnKScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnMjRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQ6ICc2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXSA6IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gTGlzdCB3aXRoIGNvbnRyb2xzIGZvciByZWdpb25zXG4gICAgICAgICAgICAgICAgICAgIC4uLlsuLi5BcnJheShvcmRlckxpc3QubGVuZ3RoKS5rZXlzKCldLm1hcCgob3JkZXJJKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3bCA9IHRoaXMubG9nb3Nbb3JkZXJJXVtjaGFpbl07XG4gICAgICAgICAgICAgICAgICAgICAgICB3bC5yb290LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc0RpdiA9IHVpLmRpdihbd2wucm9vdF0gLypgJHtjaGFpbn0gJHtyZWdpb25zRmlsdGVyZWRbckldfWAqLywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Cb3R0b206ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc0RpdjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgIH0sIFsnJywgLi4uWy4uLkFycmF5KG9yZGVyTGlzdC5sZW5ndGgpLmtleXMoKV0ubWFwKChvcmRlckkpID0+IHJlZ2lvbnNGaWx0ZXJlZC5maW5kKChyKSA9PiByLm9yZGVyID09IG9yZGVyTGlzdFtvcmRlckldICYmIHIuY2hhaW4gPT0gdGhpcy5jaGFpbnNbMF0pLm5hbWUgfHwgJ05hbWUnKV0pO1xuICAgICAgICAgICAgdGhpcy5tYWluTGF5b3V0LmNsYXNzTmFtZSA9ICdtbGItdmQtcmVnaW9ucy12aWV3ZXItdGFibGUyJztcbiAgICAgICAgICAgIC8vIHRoaXMubWFpbkxheW91dC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNFRUVFRkYnO1xuICAgICAgICAgICAgLy8gdGhpcy5tYWluTGF5b3V0LnN0eWxlLmhlaWdodCA9ICcxMDAlJztcbiAgICAgICAgICAgIC8vIHRoaXMubWFpbkxheW91dC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gYCNmZmJiJHtNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDI1NSkudG9TdHJpbmcoMTYpfWA7XG4gICAgICAgICAgICB0aGlzLmhvc3QgPSB1aS5ib3godGhpcy5tYWluTGF5b3V0LCB7IC8qc3R5bGU6IHtiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yfSovfSk7XG4gICAgICAgICAgICB0aGlzLnJvb3QuYXBwZW5kQ2hpbGQodGhpcy5ob3N0KTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5zdHlsZS5vdmVyZmxvd1ggPSAnYXV0byc7XG4gICAgICAgICAgICB0aGlzLmNhbGNTaXplKCk7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdWZFJlZ2lvbnNWaWV3ZXIuYnVpbGRWaWV3KCkgZW5kJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYWxjU2l6ZSgpIHtcbiAgICAgICAgY29uc3QgbG9nb0hlaWdodCA9ICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IC0gNTQpIC8gdGhpcy5jaGFpbnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLm1pbihsb2dvSGVpZ2h0LCBNYXRoLm1heCguLi50aGlzLmxvZ29zLm1hcCgod2xEaWN0KSA9PiBNYXRoLm1heCguLi5PYmplY3QudmFsdWVzKHdsRGljdCkubWFwKCh3bCkgPT4gd2wubWF4SGVpZ2h0KSkpKSk7XG4gICAgICAgIGZvciAobGV0IG9yZGVySSA9IDA7IG9yZGVySSA8IHRoaXMubG9nb3MubGVuZ3RoOyBvcmRlckkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgY2hhaW5JID0gMDsgY2hhaW5JIDwgdGhpcy5jaGFpbnMubGVuZ3RoOyBjaGFpbkkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYWluID0gdGhpcy5jaGFpbnNbY2hhaW5JXTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ29zW29yZGVySV1bY2hhaW5dLnJvb3Quc3R5bGUuaGVpZ2h0ID0gYCR7bWF4SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyNlbmRyZWdpb24gLS0gVmlldyAtLVxuICAgIG9uTW91c2VNb3ZlUm9vdChlKSB7XG4gICAgICAgIC8vIHVpLnRvb2x0aXAuc2hvdygndGV4dCcsIGUueCArIDgsIGUueSArIDgsKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYG9uTW91c2VNb3ZlUm9vdC4oIHg6ICR7ZS54fSwgeTogJHtlLnl9IClgKTtcbiAgICB9XG59XG4iLCIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJ3dVwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJ3dVwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIChbXG4vKiAwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX3RvQ29uc3VtYWJsZUFycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9zbGljZWRUb0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSlbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfU3ltYm9sJGl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MilbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfZ2V0SXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9yZWdlbmVyYXRvclJ1bnRpbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9PYmplY3Qka2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oODApW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1NldCA9IF9fd2VicGFja19yZXF1aXJlX18oODQpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1Byb21pc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KVtcImRlZmF1bHRcIl07XG5cblx0dmFyIHd1ID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3dShpdGVyYWJsZSkge1xuXHQgIGlmICghaXNJdGVyYWJsZShpdGVyYWJsZSkpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcihcInd1OiBgXCIgKyBpdGVyYWJsZSArIFwiYCBpcyBub3QgaXRlcmFibGUhXCIpO1xuXHQgIH1cblx0ICByZXR1cm4gbmV3IFd1KGl0ZXJhYmxlKTtcblx0fTtcblxuXHRmdW5jdGlvbiBXdShpdGVyYWJsZSkge1xuXHQgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlKTtcblx0ICB0aGlzLm5leHQgPSBpdGVyYXRvci5uZXh0LmJpbmQoaXRlcmF0b3IpO1xuXHR9XG5cdHd1LnByb3RvdHlwZSA9IFd1LnByb3RvdHlwZTtcblxuXHR3dS5wcm90b3R5cGVbX1N5bWJvbCRpdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgcmV0dXJuIHRoaXM7XG5cdH07XG5cblx0Lypcblx0ICogSW50ZXJuYWwgdXRpbGl0aWVzXG5cdCAqL1xuXG5cdC8vIEFuIGludGVybmFsIHBsYWNlaG9sZGVyIHZhbHVlLlxuXHR2YXIgTUlTU0lORyA9IHt9O1xuXG5cdC8vIFJldHVybiB3aGV0aGVyIGEgdGhpbmcgaXMgaXRlcmFibGUuXG5cdHZhciBpc0l0ZXJhYmxlID0gZnVuY3Rpb24gaXNJdGVyYWJsZSh0aGluZykge1xuXHQgIHJldHVybiB0aGluZyAmJiB0eXBlb2YgdGhpbmdbX1N5bWJvbCRpdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXHQvLyBHZXQgdGhlIGl0ZXJhdG9yIGZvciB0aGUgdGhpbmcgb3IgdGhyb3cgYW4gZXJyb3IuXG5cdHZhciBnZXRJdGVyYXRvciA9IGZ1bmN0aW9uIGdldEl0ZXJhdG9yKHRoaW5nKSB7XG5cdCAgaWYgKGlzSXRlcmFibGUodGhpbmcpKSB7XG5cdCAgICByZXR1cm4gX2dldEl0ZXJhdG9yKHRoaW5nKTtcblx0ICB9XG5cdCAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBpdGVyYWJsZTogXCIgKyB0aGluZyk7XG5cdH07XG5cblx0Ly8gRGVmaW5lIGEgc3RhdGljIG1ldGhvZCBvbiBgd3VgIGFuZCBzZXQgaXRzIHByb3RvdHlwZSB0byB0aGUgc2hhcmVkXG5cdC8vIGBXdS5wcm90b3R5cGVgLlxuXHR2YXIgc3RhdGljTWV0aG9kID0gZnVuY3Rpb24gc3RhdGljTWV0aG9kKG5hbWUsIGZuKSB7XG5cdCAgZm4ucHJvdG90eXBlID0gV3UucHJvdG90eXBlO1xuXHQgIHd1W25hbWVdID0gZm47XG5cdH07XG5cblx0Ly8gRGVmaW5lIGEgZnVuY3Rpb24gdGhhdCBpcyBhdHRhY2hlZCBhcyBib3RoIGEgYFd1LnByb3RvdHlwZWAgbWV0aG9kIGFuZCBhXG5cdC8vIGN1cnJ5YWJsZSBzdGF0aWMgbWV0aG9kIG9uIGB3dWAgZGlyZWN0bHkgdGhhdCB0YWtlcyBhbiBpdGVyYWJsZSBhcyBpdHMgbGFzdFxuXHQvLyBwYXJhbWV0ZXIuXG5cdHZhciBwcm90b3R5cGVBbmRTdGF0aWMgPSBmdW5jdGlvbiBwcm90b3R5cGVBbmRTdGF0aWMobmFtZSwgZm4pIHtcblx0ICB2YXIgZXhwZWN0ZWRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gZm4ubGVuZ3RoIDogYXJndW1lbnRzWzJdO1xuXHQgIHJldHVybiAoZnVuY3Rpb24gKCkge1xuXHQgICAgZm4ucHJvdG90eXBlID0gV3UucHJvdG90eXBlO1xuXHQgICAgV3UucHJvdG90eXBlW25hbWVdID0gZm47XG5cblx0ICAgIC8vICsxIGZvciB0aGUgaXRlcmFibGUsIHdoaWNoIGlzIHRoZSBgdGhpc2AgdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHNvIGl0XG5cdCAgICAvLyBpc24ndCByZWZsZWN0ZWQgYnkgdGhlIGxlbmd0aCBwcm9wZXJ0eS5cblx0ICAgIGV4cGVjdGVkQXJncyArPSAxO1xuXG5cdCAgICB3dVtuYW1lXSA9IHd1LmN1cnJ5YWJsZShmdW5jdGlvbiAoKSB7XG5cdCAgICAgIHZhciBfd3U7XG5cblx0ICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcblx0ICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIGl0ZXJhYmxlID0gYXJncy5wb3AoKTtcblx0ICAgICAgcmV0dXJuIChfd3UgPSB3dShpdGVyYWJsZSkpW25hbWVdLmFwcGx5KF93dSwgYXJncyk7XG5cdCAgICB9LCBleHBlY3RlZEFyZ3MpO1xuXHQgIH0pKCk7XG5cdH07XG5cblx0Ly8gQSBkZWNvcmF0b3IgZm9yIHJld3JhcHBpbmcgYSBtZXRob2QncyByZXR1cm5lZCBpdGVyYWJsZSBpbiB3dSB0byBtYWludGFpblxuXHQvLyBjaGFpbmFiaWxpdHkuXG5cdHZhciByZXdyYXAgPSBmdW5jdGlvbiByZXdyYXAoZm4pIHtcblx0ICByZXR1cm4gZnVuY3Rpb24gKCkge1xuXHQgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcblx0ICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gd3UoZm4uY2FsbC5hcHBseShmbiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXHQgIH07XG5cdH07XG5cblx0dmFyIHJld3JhcFN0YXRpY01ldGhvZCA9IGZ1bmN0aW9uIHJld3JhcFN0YXRpY01ldGhvZChuYW1lLCBmbikge1xuXHQgIHJldHVybiBzdGF0aWNNZXRob2QobmFtZSwgcmV3cmFwKGZuKSk7XG5cdH07XG5cdHZhciByZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMgPSBmdW5jdGlvbiByZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMobmFtZSwgZm4sIGV4cGVjdGVkQXJncykge1xuXHQgIHJldHVybiBwcm90b3R5cGVBbmRTdGF0aWMobmFtZSwgcmV3cmFwKGZuKSwgZXhwZWN0ZWRBcmdzKTtcblx0fTtcblxuXHQvLyBSZXR1cm4gYSB3cmFwcGVkIHZlcnNpb24gb2YgYGZuYCBib3VuZCB3aXRoIHRoZSBpbml0aWFsIGFyZ3VtZW50c1xuXHQvLyBgLi4uYXJnc2AuXG5cdGZ1bmN0aW9uIGN1cnJ5KGZuLCBhcmdzKSB7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0ICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgbW9yZUFyZ3MgPSBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuXHQgICAgICBtb3JlQXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gZm4uY2FsbC5hcHBseShmbiwgW3RoaXNdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJncyksIG1vcmVBcmdzKSk7XG5cdCAgfTtcblx0fVxuXG5cdC8qXG5cdCAqIFB1YmxpYyB1dGlsaXRpZXNcblx0ICovXG5cblx0c3RhdGljTWV0aG9kKFwiY3VycnlhYmxlXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBleHBlY3RlZCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IGZuLmxlbmd0aCA6IGFyZ3VtZW50c1sxXTtcblx0ICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcblx0ICAgIHJldHVybiBmdW5jdGlvbiBmKCkge1xuXHQgICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuXHQgICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiBhcmdzLmxlbmd0aCA+PSBleHBlY3RlZCA/IGZuLmFwcGx5KHRoaXMsIGFyZ3MpIDogY3VycnkoZiwgYXJncyk7XG5cdCAgICB9O1xuXHQgIH0pKCk7XG5cdH0pO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcImVudHJpZXNcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAob2JqKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24sIF9kaWRJdGVyYXRvckVycm9yLCBfaXRlcmF0b3JFcnJvciwgX2l0ZXJhdG9yLCBfc3RlcCwgaztcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvciA9IF9nZXRJdGVyYXRvcihfT2JqZWN0JGtleXMob2JqKSk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgayA9IF9zdGVwLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiBbaywgb2JqW2tdXTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3JbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJrZXlzXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG9iaikge1xuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChfT2JqZWN0JGtleXMob2JqKSwgXCJ0MFwiLCAxKTtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwidmFsdWVzXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG9iaikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiwgX2RpZEl0ZXJhdG9yRXJyb3IyLCBfaXRlcmF0b3JFcnJvcjIsIF9pdGVyYXRvcjIsIF9zdGVwMiwgaztcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjIgPSBfZ2V0SXRlcmF0b3IoX09iamVjdCRrZXlzKG9iaikpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGsgPSBfc3RlcDIudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIG9ialtrXTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMiA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IyKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdC8qXG5cdCAqIEluZmluaXRlIGl0ZXJhdG9yc1xuXHQgKi9cblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJjeWNsZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc2F2ZWQsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zLCBfZGlkSXRlcmF0b3JFcnJvcjMsIF9pdGVyYXRvckVycm9yMywgX2l0ZXJhdG9yMywgX3N0ZXAzLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHNhdmVkID0gW107XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDtcblx0ICAgICAgICBfaXRlcmF0b3IzID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgPSAoX3N0ZXAzID0gX2l0ZXJhdG9yMy5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDMudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgc2F2ZWQucHVzaCh4KTtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMDtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNjtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNCk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IzID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjMgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjNbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjNbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMykge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMyk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIwKTtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIGlmICghc2F2ZWQpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKHNhdmVkLCBcInQxXCIsIDMwKTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDMyOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzQsIDE2LCAyMCwgMjhdLCBbMjEsLCAyMywgMjddXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJjb3VudFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc3RhcnQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAwIDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBzdGVwID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gMSA6IGFyZ3VtZW50c1sxXTtcblx0ICB2YXIgbjtcblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgbiA9IHN0YXJ0O1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgICBpZiAoZmFsc2UpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA3O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQ7XG5cdCAgICAgICAgcmV0dXJuIG47XG5cblx0ICAgICAgY2FzZSA0OlxuXHQgICAgICAgIG4gKz0gc3RlcDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwicmVwZWF0XCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKHRoaW5nKSB7XG5cdCAgdmFyIHRpbWVzID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gSW5maW5pdHkgOiBhcmd1bWVudHNbMV07XG5cdCAgdmFyIGk7XG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGlmICghKHRpbWVzID09PSBJbmZpbml0eSkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgICBpZiAoZmFsc2UpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQ7XG5cdCAgICAgICAgcmV0dXJuIHRoaW5nO1xuXG5cdCAgICAgIGNhc2UgNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgODpcblx0ICAgICAgICBpID0gMDtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgaWYgKCEoaSA8IHRpbWVzKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgIHJldHVybiB0aGluZztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGkrKztcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdC8qXG5cdCAqIEl0ZXJhdG9ycyB0aGF0IHRlcm1pbmF0ZSBvbmNlIHRoZSBpbnB1dCBzZXF1ZW5jZSBoYXMgYmVlbiBleGhhdXN0ZWRcblx0ICovXG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiY2hhaW5cIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240LFxuXHQgICAgICBfZGlkSXRlcmF0b3JFcnJvcjQsXG5cdCAgICAgIF9pdGVyYXRvckVycm9yNCxcblx0ICAgICAgX2xlbjUsXG5cdCAgICAgIGl0ZXJhYmxlcyxcblx0ICAgICAgX2tleTUsXG5cdCAgICAgIF9pdGVyYXRvcjQsXG5cdCAgICAgIF9zdGVwNCxcblx0ICAgICAgaXQsXG5cdCAgICAgIGFyZ3MkMSQwID0gYXJndW1lbnRzO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjQgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cblx0ICAgICAgICBmb3IgKF9sZW41ID0gYXJncyQxJDAubGVuZ3RoLCBpdGVyYWJsZXMgPSBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuXHQgICAgICAgICAgaXRlcmFibGVzW19rZXk1XSA9IGFyZ3MkMSQwW19rZXk1XTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfaXRlcmF0b3I0ID0gX2dldEl0ZXJhdG9yKGl0ZXJhYmxlcyk7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IChfc3RlcDQgPSBfaXRlcmF0b3I0Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaXQgPSBfc3RlcDQudmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoaXQsIFwidDBcIiwgOSk7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MSA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSBjb250ZXh0JDEkMC50MTtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ICYmIF9pdGVyYXRvcjRbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjRbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yNCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I0O1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJjaHVua1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDIgOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgaXRlbXMsIGluZGV4LCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSwgX2RpZEl0ZXJhdG9yRXJyb3I1LCBfaXRlcmF0b3JFcnJvcjUsIF9pdGVyYXRvcjUsIF9zdGVwNSwgaXRlbTtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpdGVtcyA9IFtdO1xuXHQgICAgICAgIGluZGV4ID0gMDtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I1ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I1ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA1O1xuXHQgICAgICAgIF9pdGVyYXRvcjUgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA3OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNSA9IChfc3RlcDUgPSBfaXRlcmF0b3I1Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaXRlbSA9IF9zdGVwNS52YWx1ZTtcblxuXHQgICAgICAgIGl0ZW1zW2luZGV4KytdID0gaXRlbTtcblxuXHQgICAgICAgIGlmICghKGluZGV4ID09PSBuKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgIHJldHVybiBpdGVtcztcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGl0ZW1zID0gW107XG5cdCAgICAgICAgaW5kZXggPSAwO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA3O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg1KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjUgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNSA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgJiYgX2l0ZXJhdG9yNVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yNVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNztcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I1KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjU7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI3KTtcblxuXHQgICAgICBjYXNlIDMxOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjQpO1xuXG5cdCAgICAgIGNhc2UgMzI6XG5cdCAgICAgICAgaWYgKCFpbmRleCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDM1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDM1O1xuXHQgICAgICAgIHJldHVybiBpdGVtcztcblxuXHQgICAgICBjYXNlIDM1OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzUsIDIwLCAyNCwgMzJdLCBbMjUsLCAyNywgMzFdXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJjb25jYXRNYXBcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYsIF9kaWRJdGVyYXRvckVycm9yNiwgX2l0ZXJhdG9yRXJyb3I2LCBfaXRlcmF0b3I2LCBfc3RlcDYsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3I2ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjYgPSAoX3N0ZXA2ID0gX2l0ZXJhdG9yNi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDYudmFsdWU7XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoZm4oeCksIFwidDBcIiwgOCk7XG5cblx0ICAgICAgY2FzZSA4OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxMztcblx0ICAgICAgICBjb250ZXh0JDEkMC50MSA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I2ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjYgPSBjb250ZXh0JDEkMC50MTtcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNztcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ICYmIF9pdGVyYXRvcjZbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjZbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yNikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I2O1xuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMCk7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE3KTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDEzLCAxNywgMjVdLCBbMTgsLCAyMCwgMjRdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJkcm9wXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG4pIHtcblx0ICB2YXIgaSwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcsIF9kaWRJdGVyYXRvckVycm9yNywgX2l0ZXJhdG9yRXJyb3I3LCBfaXRlcmF0b3I3LCBfc3RlcDcsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaSA9IDA7XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNyA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDtcblx0ICAgICAgICBfaXRlcmF0b3I3ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSAoX3N0ZXA3ID0gX2l0ZXJhdG9yNy5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDcudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIShpKysgPCBuKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImNvbnRpbnVlXCIsIDEzKTtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNik7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjI7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDQpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNyA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I3ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNyAmJiBfaXRlcmF0b3I3W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I3W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI1O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjcpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNztcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjUpO1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZCh0aGlzLCBcInQxXCIsIDMxKTtcblxuXHQgICAgICBjYXNlIDMxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzQsIDE4LCAyMiwgMzBdLCBbMjMsLCAyNSwgMjldXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJkcm9wV2hpbGVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCwgX2RpZEl0ZXJhdG9yRXJyb3I4LCBfaXRlcmF0b3JFcnJvcjgsIF9pdGVyYXRvcjgsIF9zdGVwOCwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I4ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I4ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjggPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCA9IChfc3RlcDggPSBfaXRlcmF0b3I4Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwOC52YWx1ZTtcblxuXHQgICAgICAgIGlmICghZm4oeCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImNvbnRpbnVlXCIsIDEyKTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDExO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDE1KTtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb244ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNztcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I4ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjggPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb244ICYmIF9pdGVyYXRvcjhbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjhbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjQ7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yOCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI3O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I4O1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNCk7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKHRoaXMsIFwidDFcIiwgMzApO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTcsIDIxLCAyOV0sIFsyMiwsIDI0LCAyOF1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcImVudW1lcmF0ZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX3ppcChbdGhpcywgd3UuY291bnQoKV0pLCBcInQwXCIsIDEpO1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJmaWx0ZXJcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSwgX2RpZEl0ZXJhdG9yRXJyb3I5LCBfaXRlcmF0b3JFcnJvcjksIF9pdGVyYXRvcjksIF9zdGVwOSwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I5ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I5ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjkgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSA9IChfc3RlcDkgPSBfaXRlcmF0b3I5Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwOS52YWx1ZTtcblxuXHQgICAgICAgIGlmICghZm4oeCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb245ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxOTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNTtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I5ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjkgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb245ICYmIF9pdGVyYXRvcjlbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjlbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yOSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I5O1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE5KTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE1LCAxOSwgMjddLCBbMjAsLCAyMiwgMjZdXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJmbGF0dGVuXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBzaGFsbG93ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwLCBfZGlkSXRlcmF0b3JFcnJvcjEwLCBfaXRlcmF0b3JFcnJvcjEwLCBfaXRlcmF0b3IxMCwgX3N0ZXAxMCwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTAgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTAgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEwID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjEwID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwID0gKF9zdGVwMTAgPSBfaXRlcmF0b3IxMC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDEwLnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKCEodHlwZW9mIHggIT09IFwic3RyaW5nXCIgJiYgaXNJdGVyYWJsZSh4KSkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKHNoYWxsb3cgPyB4IDogd3UoeCkuZmxhdHRlbigpLCBcInQwXCIsIDkpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTAgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTY6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIyO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQxID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEwID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEwID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTAgJiYgX2l0ZXJhdG9yMTBbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjEwW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI1O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjEwKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjEwO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNSk7XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE4LCAyMiwgMzBdLCBbMjMsLCAyNSwgMjldXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJpbnZva2VcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAobmFtZSkge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEsXG5cdCAgICAgIF9kaWRJdGVyYXRvckVycm9yMTEsXG5cdCAgICAgIF9pdGVyYXRvckVycm9yMTEsXG5cdCAgICAgIF9sZW42LFxuXHQgICAgICBhcmdzLFxuXHQgICAgICBfa2V5Nixcblx0ICAgICAgX2l0ZXJhdG9yMTEsXG5cdCAgICAgIF9zdGVwMTEsXG5cdCAgICAgIHgsXG5cdCAgICAgIGFyZ3MkMSQwID0gYXJndW1lbnRzO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTEgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cblx0ICAgICAgICBmb3IgKF9sZW42ID0gYXJncyQxJDAubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjYgPiAxID8gX2xlbjYgLSAxIDogMCksIF9rZXk2ID0gMTsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuXHQgICAgICAgICAgYXJnc1tfa2V5NiAtIDFdID0gYXJncyQxJDBbX2tleTZdO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9pdGVyYXRvcjExID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjExID0gKF9zdGVwMTEgPSBfaXRlcmF0b3IxMS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDExLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geFtuYW1lXS5hcHBseSh4LCBhcmdzKTtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTEgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTEgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMSAmJiBfaXRlcmF0b3IxMVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTFbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTEpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTE7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTkpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTUsIDE5LCAyN10sIFsyMCwsIDIyLCAyNl1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcIm1hcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTIsIF9kaWRJdGVyYXRvckVycm9yMTIsIF9pdGVyYXRvckVycm9yMTIsIF9pdGVyYXRvcjEyLCBfc3RlcDEyLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTIgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTIgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTIgPSAoX3N0ZXAxMiA9IF9pdGVyYXRvcjEyLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTIudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIGZuKHgpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTIgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEyID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEyID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTIgJiYgX2l0ZXJhdG9yMTJbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjEyW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjEyKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjEyO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJwbHVja1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChuYW1lKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMywgX2RpZEl0ZXJhdG9yRXJyb3IxMywgX2l0ZXJhdG9yRXJyb3IxMywgX2l0ZXJhdG9yMTMsIF9zdGVwMTMsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEzID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEzID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IxMyA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyA9IChfc3RlcDEzID0gX2l0ZXJhdG9yMTMubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxMy52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICByZXR1cm4geFtuYW1lXTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEzID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMyA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMyA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEzICYmIF9pdGVyYXRvcjEzW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxM1tcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxMykge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxMztcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwicmVkdWN0aW9uc1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChmbikge1xuXHQgIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuXG5cdCAgdmFyIHZhbCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE0LCBfZGlkSXRlcmF0b3JFcnJvcjE0LCBfaXRlcmF0b3JFcnJvcjE0LCBfaXRlcmF0b3IxNCwgX3N0ZXAxNCwgeCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE1LCBfZGlkSXRlcmF0b3JFcnJvcjE1LCBfaXRlcmF0b3JFcnJvcjE1LCBfaXRlcmF0b3IxNSwgX3N0ZXAxNTtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICB2YWwgPSBpbml0aWFsO1xuXG5cdCAgICAgICAgaWYgKCEodmFsID09PSB1bmRlZmluZWQpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTQgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTQgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE0ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA1O1xuXHQgICAgICAgIF9pdGVyYXRvcjE0ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNzpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE0ID0gKF9zdGVwMTQgPSBfaXRlcmF0b3IxNC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDE0LnZhbHVlO1xuXG5cdCAgICAgICAgdmFsID0geDtcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTQpO1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE0ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMDtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNjtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNSk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNCA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE0ICYmIF9pdGVyYXRvcjE0W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxNFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxNCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxNDtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjMpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMCk7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzA7XG5cdCAgICAgICAgcmV0dXJuIHZhbDtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDMzO1xuXHQgICAgICAgIF9pdGVyYXRvcjE1ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgMzU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNSA9IChfc3RlcDE1ID0gX2l0ZXJhdG9yMTUubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxNS52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzk7XG5cdCAgICAgICAgcmV0dXJuIHZhbCA9IGZuKHZhbCwgeCk7XG5cblx0ICAgICAgY2FzZSAzOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDQyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0ODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDQ0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0NDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MSA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMzMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTUgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTUgPSBjb250ZXh0JDEkMC50MTtcblxuXHQgICAgICBjYXNlIDQ4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0ODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNSAmJiBfaXRlcmF0b3IxNVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTVbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSA1MTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1NDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTU7XG5cblx0ICAgICAgY2FzZSA1NDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDUxKTtcblxuXHQgICAgICBjYXNlIDU1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goNDgpO1xuXG5cdCAgICAgIGNhc2UgNTY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcInJldHVyblwiLCB2YWwpO1xuXG5cdCAgICAgIGNhc2UgNTc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNSwgMTYsIDIwLCAyOF0sIFsyMSwsIDIzLCAyN10sIFszMywgNDQsIDQ4LCA1Nl0sIFs0OSwsIDUxLCA1NV1dKTtcblx0fSksIDIpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInJlamVjdFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiwgX2RpZEl0ZXJhdG9yRXJyb3IxNiwgX2l0ZXJhdG9yRXJyb3IxNiwgX2l0ZXJhdG9yMTYsIF9zdGVwMTYsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE2ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE2ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IxNiA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiA9IChfc3RlcDE2ID0gX2l0ZXJhdG9yMTYubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxNi52YWx1ZTtcblxuXHQgICAgICAgIGlmIChmbih4KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE2ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxOTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNTtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNiA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTk6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE2ICYmIF9pdGVyYXRvcjE2W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxNltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxNikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxNjtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOSk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNSwgMTksIDI3XSwgWzIwLCwgMjIsIDI2XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwic2xpY2VcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHN0YXJ0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICB2YXIgc3RvcCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogYXJndW1lbnRzWzFdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNywgX2RpZEl0ZXJhdG9yRXJyb3IxNywgX2l0ZXJhdG9yRXJyb3IxNywgX2l0ZXJhdG9yMTcsIF9zdGVwMTcsIF9zdGVwMTckdmFsdWUsIHgsIGk7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaWYgKCEoc3RvcCA8IHN0YXJ0KSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInBhcmFtZXRlciBgc3RvcGAgKD0gXCIgKyBzdG9wICsgXCIpIG11c3QgYmUgPj0gYHN0YXJ0YCAoPSBcIiArIHN0YXJ0ICsgXCIpXCIpO1xuXG5cdCAgICAgIGNhc2UgMjpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTcgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTcgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE3ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA1O1xuXHQgICAgICAgIF9pdGVyYXRvcjE3ID0gX2dldEl0ZXJhdG9yKHRoaXMuZW51bWVyYXRlKCkpO1xuXG5cdCAgICAgIGNhc2UgNzpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE3ID0gKF9zdGVwMTcgPSBfaXRlcmF0b3IxNy5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9zdGVwMTckdmFsdWUgPSBfc2xpY2VkVG9BcnJheShfc3RlcDE3LnZhbHVlLCAyKTtcblx0ICAgICAgICB4ID0gX3N0ZXAxNyR2YWx1ZVswXTtcblx0ICAgICAgICBpID0gX3N0ZXAxNyR2YWx1ZVsxXTtcblxuXHQgICAgICAgIGlmICghKGkgPCBzdGFydCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJjb250aW51ZVwiLCAxNyk7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBpZiAoIShpID49IHN0b3ApKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMjApO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE3O1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTc6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE3ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNSk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNyA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNyA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI2O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNztcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE3ICYmIF9pdGVyYXRvcjE3W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxN1tcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyOTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxNykge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxNztcblxuXHQgICAgICBjYXNlIDMyOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjkpO1xuXG5cdCAgICAgIGNhc2UgMzM6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNik7XG5cblx0ICAgICAgY2FzZSAzNDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s1LCAyMiwgMjYsIDM0XSwgWzI3LCwgMjksIDMzXV0pO1xuXHR9KSwgMik7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwic3ByZWFkTWFwXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGZuKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOCwgX2RpZEl0ZXJhdG9yRXJyb3IxOCwgX2l0ZXJhdG9yRXJyb3IxOCwgX2l0ZXJhdG9yMTgsIF9zdGVwMTgsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE4ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxOCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IxOCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOCA9IChfc3RlcDE4ID0gX2l0ZXJhdG9yMTgubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxOC52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICByZXR1cm4gZm4uYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoeCkpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTggPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE4ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE4ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTggJiYgX2l0ZXJhdG9yMThbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE4W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE4KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE4O1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJ0YWtlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG4pIHtcblx0ICB2YXIgaSwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5LCBfZGlkSXRlcmF0b3JFcnJvcjE5LCBfaXRlcmF0b3JFcnJvcjE5LCBfaXRlcmF0b3IxOSwgX3N0ZXAxOSwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpZiAoIShuIDwgMSkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcInJldHVyblwiKTtcblxuXHQgICAgICBjYXNlIDI6XG5cdCAgICAgICAgaSA9IDA7XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE5ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxOSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNjtcblx0ICAgICAgICBfaXRlcmF0b3IxOSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDg6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSA9IChfc3RlcDE5ID0gX2l0ZXJhdG9yMTkubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTc7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxOS52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBpZiAoISgrK2kgPj0gbikpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNyk7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTkgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTc6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIzO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTk6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg2KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE5ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE5ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI0O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTkgJiYgX2l0ZXJhdG9yMTlbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE5W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI2O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE5KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjk7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE5O1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNik7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIzKTtcblxuXHQgICAgICBjYXNlIDMxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzYsIDE5LCAyMywgMzFdLCBbMjQsLCAyNiwgMzBdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJ0YWtlV2hpbGVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjAsIF9kaWRJdGVyYXRvckVycm9yMjAsIF9pdGVyYXRvckVycm9yMjAsIF9pdGVyYXRvcjIwLCBfc3RlcDIwLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjAgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjAgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjAgPSAoX3N0ZXAyMCA9IF9pdGVyYXRvcjIwLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMjAudmFsdWU7XG5cblx0ICAgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDE0KTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDExO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMDtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNjtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMCA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwICYmIF9pdGVyYXRvcjIwW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyMFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IyMCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyMDtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjMpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMCk7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNiwgMjAsIDI4XSwgWzIxLCwgMjMsIDI3XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwidGFwXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkgOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIxLCBfZGlkSXRlcmF0b3JFcnJvcjIxLCBfaXRlcmF0b3JFcnJvcjIxLCBfaXRlcmF0b3IyMSwgX3N0ZXAyMSwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjEgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjEgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIxID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjIxID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIxID0gKF9zdGVwMjEgPSBfaXRlcmF0b3IyMS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDIxLnZhbHVlO1xuXG5cdCAgICAgICAgZm4oeCk7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIxID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxOTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNTtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMSA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTk6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIxICYmIF9pdGVyYXRvcjIxW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyMVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IyMSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyMTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOSk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNSwgMTksIDI3XSwgWzIwLCwgMjIsIDI2XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwidW5pcXVlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBzZWVuLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjIsIF9kaWRJdGVyYXRvckVycm9yMjIsIF9pdGVyYXRvckVycm9yMjIsIF9pdGVyYXRvcjIyLCBfc3RlcDIyLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHNlZW4gPSBuZXcgX1NldCgpO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjIgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjIgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjIgPSAoX3N0ZXAyMiA9IF9pdGVyYXRvcjIyLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMjIudmFsdWU7XG5cblx0ICAgICAgICBpZiAoc2Vlbi5oYXMoeCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIHNlZW4uYWRkKHgpO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNztcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNCk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMiA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMjtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyICYmIF9pdGVyYXRvcjIyW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyMltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNDtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IyMikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI3O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyMjtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjQpO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICBzZWVuLmNsZWFyKCk7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s0LCAxNywgMjEsIDI5XSwgWzIyLCwgMjQsIDI4XV0pO1xuXHR9KSk7XG5cblx0dmFyIF96aXAgPSByZXdyYXAoX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoaXRlcmFibGVzKSB7XG5cdCAgdmFyIGxvbmdlc3QgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IGFyZ3VtZW50c1sxXTtcblxuXHQgIHZhciBpdGVycywgbnVtSXRlcnMsIG51bUZpbmlzaGVkLCBmaW5pc2hlZCwgemlwcGVkLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMsIF9kaWRJdGVyYXRvckVycm9yMjMsIF9pdGVyYXRvckVycm9yMjMsIF9pdGVyYXRvcjIzLCBfc3RlcDIzLCBpdCwgX2l0JG5leHQsIHZhbHVlLCBkb25lO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGlmIChpdGVyYWJsZXMubGVuZ3RoKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIGl0ZXJzID0gaXRlcmFibGVzLm1hcChnZXRJdGVyYXRvcik7XG5cdCAgICAgICAgbnVtSXRlcnMgPSBpdGVyYWJsZXMubGVuZ3RoO1xuXHQgICAgICAgIG51bUZpbmlzaGVkID0gMDtcblx0ICAgICAgICBmaW5pc2hlZCA9IGZhbHNlO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoZmluaXNoZWQpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0NDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHppcHBlZCA9IFtdO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMyA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyMyA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDExO1xuXHQgICAgICAgIF9pdGVyYXRvcjIzID0gX2dldEl0ZXJhdG9yKGl0ZXJzKTtcblxuXHQgICAgICBjYXNlIDEzOlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMgPSAoX3N0ZXAyMyA9IF9pdGVyYXRvcjIzLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI2O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaXQgPSBfc3RlcDIzLnZhbHVlO1xuXHQgICAgICAgIF9pdCRuZXh0ID0gaXQubmV4dCgpO1xuXHQgICAgICAgIHZhbHVlID0gX2l0JG5leHQudmFsdWU7XG5cdCAgICAgICAgZG9uZSA9IF9pdCRuZXh0LmRvbmU7XG5cblx0ICAgICAgICBpZiAoIWRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChsb25nZXN0KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjE7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwicmV0dXJuXCIpO1xuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgaWYgKCsrbnVtRmluaXNoZWQgPT0gbnVtSXRlcnMpIHtcblx0ICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgLy8gTGVhdmUgYSBob2xlIGluIHRoZSBhcnJheSBzbyB0aGF0IHlvdSBjYW4gZGlzdGluZ3Vpc2ggYW4gaXRlcmFibGVcblx0ICAgICAgICAgIC8vIHRoYXQncyBkb25lICh2aWEgYGluZGV4IGluIGFycmF5ID09IGZhbHNlYCkgZnJvbSBhbiBpdGVyYWJsZVxuXHQgICAgICAgICAgLy8geWllbGRpbmcgYHVuZGVmaW5lZGAuXG5cdCAgICAgICAgICB6aXBwZWQubGVuZ3RoKys7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHppcHBlZC5wdXNoKHZhbHVlKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzMjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyODtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMTEpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjMgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjMgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDMyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzMjtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMzM7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMyAmJiBfaXRlcmF0b3IyM1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjNbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAzNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMzU7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjMpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjM7XG5cblx0ICAgICAgY2FzZSAzODpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDM1KTtcblxuXHQgICAgICBjYXNlIDM5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMzIpO1xuXG5cdCAgICAgIGNhc2UgNDA6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQyO1xuXHQgICAgICAgIHJldHVybiB6aXBwZWQ7XG5cblx0ICAgICAgY2FzZSA0Mjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDQ0OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzExLCAyOCwgMzIsIDQwXSwgWzMzLCwgMzUsIDM5XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiemlwXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlcmFibGVzID0gQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcblx0ICAgIGl0ZXJhYmxlc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuXHQgIH1cblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChfemlwKGl0ZXJhYmxlcyksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInppcExvbmdlc3RcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgZm9yICh2YXIgX2xlbjggPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVyYWJsZXMgPSBBcnJheShfbGVuOCksIF9rZXk4ID0gMDsgX2tleTggPCBfbGVuODsgX2tleTgrKykge1xuXHQgICAgaXRlcmFibGVzW19rZXk4XSA9IGFyZ3VtZW50c1tfa2V5OF07XG5cdCAgfVxuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKF96aXAoaXRlcmFibGVzLCB0cnVlKSwgXCJ0MFwiLCAxKTtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiemlwV2l0aFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChmbikge1xuXHQgIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlcmFibGVzID0gQXJyYXkoX2xlbjkgPiAxID8gX2xlbjkgLSAxIDogMCksIF9rZXk5ID0gMTsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuXHQgICAgaXRlcmFibGVzW19rZXk5IC0gMV0gPSBhcmd1bWVudHNbX2tleTldO1xuXHQgIH1cblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChfemlwKGl0ZXJhYmxlcykuc3ByZWFkTWFwKGZuKSwgXCJ0MFwiLCAxKTtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0Lypcblx0ICogRnVuY3Rpb25zIHRoYXQgZm9yY2UgaXRlcmF0aW9uIHRvIGNvbXBsZXRpb24gYW5kIHJldHVybiBhIHZhbHVlLlxuXHQgKi9cblxuXHQvLyBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHdlIHdpbGwgYmxvY2sgdGhlIG1haW4gdGhyZWFkIGF0IGEgdGltZVxuXHQvLyB3aGlsZSBpbiBgYXN5bmNFYWNoYC5cblx0d3UuTUFYX0JMT0NLID0gMTU7XG5cdC8vIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHlpZWxkIHRvIHRoZSBtYWluIHRocmVhZCBiZXR3ZWVuIGJ1cnN0cyBvZlxuXHQvLyB3b3JrLlxuXHR3dS5USU1FT1VUID0gMTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJhc3luY0VhY2hcIiwgZnVuY3Rpb24gKGZuKSB7XG5cdCAgdmFyIG1heEJsb2NrID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gd3UuTUFYX0JMT0NLIDogYXJndW1lbnRzWzFdO1xuXHQgIHZhciB0aW1lb3V0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gd3UuVElNRU9VVCA6IGFyZ3VtZW50c1syXTtcblxuXHQgIHZhciBpdGVyID0gZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICByZXR1cm4gbmV3IF9Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0ICAgIChmdW5jdGlvbiBsb29wKCkge1xuXHQgICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpO1xuXG5cdCAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjQgPSB0cnVlO1xuXHQgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyNCA9IGZhbHNlO1xuXHQgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IyNCA9IHVuZGVmaW5lZDtcblxuXHQgICAgICB0cnkge1xuXHQgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjI0ID0gX2dldEl0ZXJhdG9yKGl0ZXIpLCBfc3RlcDI0OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNCA9IChfc3RlcDI0ID0gX2l0ZXJhdG9yMjQubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI0ID0gdHJ1ZSkge1xuXHQgICAgICAgICAgdmFyIHggPSBfc3RlcDI0LnZhbHVlO1xuXG5cdCAgICAgICAgICB0cnkge1xuXHQgICAgICAgICAgICBmbih4KTtcblx0ICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblx0ICAgICAgICAgICAgcmVqZWN0KGUpO1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnQgPiBtYXhCbG9jaykge1xuXHQgICAgICAgICAgICBzZXRUaW1lb3V0KGxvb3AsIHRpbWVvdXQpO1xuXHQgICAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGNhdGNoIChlcnIpIHtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjI0ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjI0ID0gZXJyO1xuXHQgICAgICB9IGZpbmFsbHkge1xuXHQgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNCAmJiBfaXRlcmF0b3IyNFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgICBfaXRlcmF0b3IyNFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZmluYWxseSB7XG5cdCAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyNCkge1xuXHQgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI0O1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIHJlc29sdmUoKTtcblx0ICAgIH0pKCk7XG5cdCAgfSk7XG5cdH0sIDMpO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcImV2ZXJ5XCIsIGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjUgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI1ID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMjUgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjUgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMjU7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI1ID0gKF9zdGVwMjUgPSBfaXRlcmF0b3IyNS5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjUgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAyNS52YWx1ZTtcblxuXHQgICAgICBpZiAoIWZuKHgpKSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICBfZGlkSXRlcmF0b3JFcnJvcjI1ID0gdHJ1ZTtcblx0ICAgIF9pdGVyYXRvckVycm9yMjUgPSBlcnI7XG5cdCAgfSBmaW5hbGx5IHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI1ICYmIF9pdGVyYXRvcjI1W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjVbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfVxuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjUpIHtcblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI1O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHRydWU7XG5cdH0sIDEpO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcImZpbmRcIiwgZnVuY3Rpb24gKGZuKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNiA9IHRydWU7XG5cdCAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjYgPSBmYWxzZTtcblx0ICB2YXIgX2l0ZXJhdG9yRXJyb3IyNiA9IHVuZGVmaW5lZDtcblxuXHQgIHRyeSB7XG5cdCAgICBmb3IgKHZhciBfaXRlcmF0b3IyNiA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAyNjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjYgPSAoX3N0ZXAyNiA9IF9pdGVyYXRvcjI2Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNiA9IHRydWUpIHtcblx0ICAgICAgdmFyIHggPSBfc3RlcDI2LnZhbHVlO1xuXG5cdCAgICAgIGlmIChmbih4KSkge1xuXHQgICAgICAgIHJldHVybiB4O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICBfZGlkSXRlcmF0b3JFcnJvcjI2ID0gdHJ1ZTtcblx0ICAgIF9pdGVyYXRvckVycm9yMjYgPSBlcnI7XG5cdCAgfSBmaW5hbGx5IHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI2ICYmIF9pdGVyYXRvcjI2W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjZbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfVxuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjYpIHtcblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI2O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9KTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJmb3JFYWNoXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjcgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI3ID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMjcgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjcgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMjc7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ID0gKF9zdGVwMjcgPSBfaXRlcmF0b3IyNy5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjcgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAyNy52YWx1ZTtcblxuXHQgICAgICBmbih4KTtcblx0ICAgIH1cblx0ICB9IGNhdGNoIChlcnIpIHtcblx0ICAgIF9kaWRJdGVyYXRvckVycm9yMjcgPSB0cnVlO1xuXHQgICAgX2l0ZXJhdG9yRXJyb3IyNyA9IGVycjtcblx0ICB9IGZpbmFsbHkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjcgJiYgX2l0ZXJhdG9yMjdbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICBfaXRlcmF0b3IyN1tcInJldHVyblwiXSgpO1xuXHQgICAgICB9XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyNykge1xuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjc7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH0pO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcImhhc1wiLCBmdW5jdGlvbiAodGhpbmcpIHtcblx0ICByZXR1cm4gdGhpcy5zb21lKGZ1bmN0aW9uICh4KSB7XG5cdCAgICByZXR1cm4geCA9PT0gdGhpbmc7XG5cdCAgfSk7XG5cdH0pO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInJlZHVjZVwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcblxuXHQgIHZhciB2YWwgPSBpbml0aWFsO1xuXHQgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuXHQgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOCA9IHRydWU7XG5cdCAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyOCA9IGZhbHNlO1xuXHQgICAgdmFyIF9pdGVyYXRvckVycm9yMjggPSB1bmRlZmluZWQ7XG5cblx0ICAgIHRyeSB7XG5cdCAgICAgIGZvciAodmFyIF9pdGVyYXRvcjI4ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI4OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOCA9IChfc3RlcDI4ID0gX2l0ZXJhdG9yMjgubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI4ID0gdHJ1ZSkge1xuXHQgICAgICAgIHZhciB4ID0gX3N0ZXAyOC52YWx1ZTtcblxuXHQgICAgICAgIHZhbCA9IHg7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH1cblx0ICAgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgICBfZGlkSXRlcmF0b3JFcnJvcjI4ID0gdHJ1ZTtcblx0ICAgICAgX2l0ZXJhdG9yRXJyb3IyOCA9IGVycjtcblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjggJiYgX2l0ZXJhdG9yMjhbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjI4W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGZpbmFsbHkge1xuXHQgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI4KSB7XG5cdCAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI4O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjkgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI5ID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMjkgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjkgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMjk7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI5ID0gKF9zdGVwMjkgPSBfaXRlcmF0b3IyOS5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjkgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAyOS52YWx1ZTtcblxuXHQgICAgICB2YWwgPSBmbih2YWwsIHgpO1xuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IyOSA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjI5ID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOSAmJiBfaXRlcmF0b3IyOVtcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjI5W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI5KSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyOTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiB2YWw7XG5cdH0sIDIpO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInNvbWVcIiwgZnVuY3Rpb24gKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zMCA9IHRydWU7XG5cdCAgdmFyIF9kaWRJdGVyYXRvckVycm9yMzAgPSBmYWxzZTtcblx0ICB2YXIgX2l0ZXJhdG9yRXJyb3IzMCA9IHVuZGVmaW5lZDtcblxuXHQgIHRyeSB7XG5cdCAgICBmb3IgKHZhciBfaXRlcmF0b3IzMCA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAzMDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMzAgPSAoX3N0ZXAzMCA9IF9pdGVyYXRvcjMwLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zMCA9IHRydWUpIHtcblx0ICAgICAgdmFyIHggPSBfc3RlcDMwLnZhbHVlO1xuXG5cdCAgICAgIGlmIChmbih4KSkge1xuXHQgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICBfZGlkSXRlcmF0b3JFcnJvcjMwID0gdHJ1ZTtcblx0ICAgIF9pdGVyYXRvckVycm9yMzAgPSBlcnI7XG5cdCAgfSBmaW5hbGx5IHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMwICYmIF9pdGVyYXRvcjMwW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgX2l0ZXJhdG9yMzBbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfVxuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMzApIHtcblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjMwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGZhbHNlO1xuXHR9LCAxKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJ0b0FycmF5XCIsIGZ1bmN0aW9uICgpIHtcblx0ICByZXR1cm4gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0aGlzKSk7XG5cdH0pO1xuXG5cdC8qXG5cdCAqIE1ldGhvZHMgdGhhdCByZXR1cm4gYW4gYXJyYXkgb2YgaXRlcmFibGVzLlxuXHQgKi9cblxuXHR2YXIgTUFYX0NBQ0hFID0gNTAwO1xuXG5cdHZhciBfdGVlID0gcmV3cmFwKF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGl0ZXJhdG9yLCBjYWNoZSkge1xuXHQgIHZhciBpdGVtcywgaW5kZXgsIF9pdGVyYXRvciRuZXh0LCBkb25lLCB2YWx1ZTtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpdGVtcyA9IGNhY2hlLml0ZW1zO1xuXHQgICAgICAgIGluZGV4ID0gMDtcblxuXHQgICAgICBjYXNlIDI6XG5cdCAgICAgICAgaWYgKGZhbHNlKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAoIShpbmRleCA9PT0gaXRlbXMubGVuZ3RoKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX2l0ZXJhdG9yJG5leHQgPSBpdGVyYXRvci5uZXh0KCk7XG5cdCAgICAgICAgZG9uZSA9IF9pdGVyYXRvciRuZXh0LmRvbmU7XG5cdCAgICAgICAgdmFsdWUgPSBfaXRlcmF0b3IkbmV4dC52YWx1ZTtcblxuXHQgICAgICAgIGlmICghZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKGNhY2hlLnJldHVybmVkID09PSBNSVNTSU5HKSB7XG5cdCAgICAgICAgICBjYWNoZS5yZXR1cm5lZCA9IHZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMjUpO1xuXG5cdCAgICAgIGNhc2UgMTA6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgIHJldHVybiBpdGVtc1tpbmRleCsrXSA9IHZhbHVlO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIzO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgaWYgKCEoaW5kZXggPT09IGNhY2hlLnRhaWwpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjE7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB2YWx1ZSA9IGl0ZW1zW2luZGV4XTtcblxuXHQgICAgICAgIGlmIChpbmRleCA9PT0gTUFYX0NBQ0hFKSB7XG5cdCAgICAgICAgICBpdGVtcyA9IGNhY2hlLml0ZW1zID0gaXRlbXMuc2xpY2UoaW5kZXgpO1xuXHQgICAgICAgICAgaW5kZXggPSAwO1xuXHQgICAgICAgICAgY2FjaGUudGFpbCA9IDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGl0ZW1zW2luZGV4XSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIGNhY2hlLnRhaWwgPSArK2luZGV4O1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgcmV0dXJuIHZhbHVlO1xuXG5cdCAgICAgIGNhc2UgMTk6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIzO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIzO1xuXHQgICAgICAgIHJldHVybiBpdGVtc1tpbmRleCsrXTtcblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cblx0ICAgICAgICBpZiAoY2FjaGUudGFpbCA9PT0gaW5kZXgpIHtcblx0ICAgICAgICAgIGl0ZW1zLmxlbmd0aCA9IDA7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcInJldHVyblwiLCBjYWNoZS5yZXR1cm5lZCk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblx0X3RlZS5wcm90b3R5cGUgPSBXdS5wcm90b3R5cGU7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwidGVlXCIsIGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDIgOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgaXRlcmFibGVzID0gbmV3IEFycmF5KG4pO1xuXHQgIHZhciBjYWNoZSA9IHsgdGFpbDogMCwgaXRlbXM6IFtdLCByZXR1cm5lZDogTUlTU0lORyB9O1xuXG5cdCAgd2hpbGUgKG4tLSkge1xuXHQgICAgaXRlcmFibGVzW25dID0gX3RlZSh0aGlzLCBjYWNoZSk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGl0ZXJhYmxlcztcblx0fSwgMSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwidW56aXBcIiwgZnVuY3Rpb24gKCkge1xuXHQgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHJldHVybiB0aGlzLnRlZShuKS5tYXAoZnVuY3Rpb24gKGl0ZXIsIGkpIHtcblx0ICAgIHJldHVybiBpdGVyLnBsdWNrKGkpO1xuXHQgIH0pO1xuXHR9LCAxKTtcblxuXHQvKlxuXHQgKiBOdW1iZXIgb2YgY2hhbWJlcnMuXG5cdCAqL1xuXG5cdHd1LnRhbmcgPSB7IGNsYW46IDM2IH07XG5cblx0Ly8gV2UgZG9uJ3QgaGF2ZSBhIGNhY2hlZCBpdGVtIGZvciB0aGlzIGluZGV4LCB3ZSBuZWVkIHRvIGZvcmNlIGl0c1xuXHQvLyBldmFsdWF0aW9uLlxuXG5cdC8vIElmIHdlIGFyZSB0aGUgbGFzdCBpdGVyYXRvciB0byB1c2UgYSBjYWNoZWQgdmFsdWUsIGNsZWFuIHVwIGFmdGVyXG5cdC8vIG91cnNlbHZlcy5cblxuXHQvLyBXZSBoYXZlIGFuIGl0ZW0gaW4gdGhlIGNhY2hlIGZvciB0aGlzIGluZGV4LCBzbyB5aWVsZCBpdC5cblxuLyoqKi8gfSxcbi8qIDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfQXJyYXkkZnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMilbXCJkZWZhdWx0XCJdO1xuXG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZnVuY3Rpb24gKGFycikge1xuXHQgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcblx0ICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG5cblx0ICAgIHJldHVybiBhcnIyO1xuXHQgIH0gZWxzZSB7XG5cdCAgICByZXR1cm4gX0FycmF5JGZyb20oYXJyKTtcblx0ICB9XG5cdH07XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuLyoqKi8gfSxcbi8qIDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXygzKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXygyNik7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuQXJyYXkuZnJvbTtcblxuLyoqKi8gfSxcbi8qIDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICRhdCAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKHRydWUpO1xuXG5cdC8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4KShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG5cdCAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuXHQgIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG5cdC8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcblx0fSwgZnVuY3Rpb24oKXtcblx0ICB2YXIgTyAgICAgPSB0aGlzLl90XG5cdCAgICAsIGluZGV4ID0gdGhpcy5faVxuXHQgICAgLCBwb2ludDtcblx0ICBpZihpbmRleCA+PSBPLmxlbmd0aClyZXR1cm4ge3ZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWV9O1xuXHQgIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcblx0ICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcblx0ICByZXR1cm4ge3ZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2V9O1xuXHR9KTtcblxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIHRydWUgIC0+IFN0cmluZyNhdFxuXHQvLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcblx0dmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNilcblx0ICAsIGRlZmluZWQgICA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oVE9fU1RSSU5HKXtcblx0ICByZXR1cm4gZnVuY3Rpb24odGhhdCwgcG9zKXtcblx0ICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpXG5cdCAgICAgICwgaSA9IHRvSW50ZWdlcihwb3MpXG5cdCAgICAgICwgbCA9IHMubGVuZ3RoXG5cdCAgICAgICwgYSwgYjtcblx0ICAgIGlmKGkgPCAwIHx8IGkgPj0gbClyZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG5cdCAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuXHQgICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbFxuXHQgICAgICB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcblx0ICAgICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuXHQgICAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuXHQgIH07XG5cdH07XG5cbi8qKiovIH0sXG4vKiA2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyA3LjEuNCBUb0ludGVnZXJcblx0dmFyIGNlaWwgID0gTWF0aC5jZWlsXG5cdCAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciBMSUJSQVJZICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpXG5cdCAgLCAkZGVmICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgJHJlZGVmICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMylcblx0ICAsIGhpZGUgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cdCAgLCBoYXMgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXHQgICwgU1lNQk9MX0lURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJylcblx0ICAsIEl0ZXJhdG9ycyAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpXG5cdCAgLCBCVUdHWSAgICAgICAgICAgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSkgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuXHQgICwgRkZfSVRFUkFUT1IgICAgID0gJ0BAaXRlcmF0b3InXG5cdCAgLCBLRVlTICAgICAgICAgICAgPSAna2V5cydcblx0ICAsIFZBTFVFUyAgICAgICAgICA9ICd2YWx1ZXMnO1xuXHR2YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9O1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFKXtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cdCAgdmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uKGtpbmQpe1xuXHQgICAgc3dpdGNoKGtpbmQpe1xuXHQgICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG5cdCAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG5cdCAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG5cdCAgfTtcblx0ICB2YXIgVEFHICAgICAgPSBOQU1FICsgJyBJdGVyYXRvcidcblx0ICAgICwgcHJvdG8gICAgPSBCYXNlLnByb3RvdHlwZVxuXHQgICAgLCBfbmF0aXZlICA9IHByb3RvW1NZTUJPTF9JVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF1cblx0ICAgICwgX2RlZmF1bHQgPSBfbmF0aXZlIHx8IGNyZWF0ZU1ldGhvZChERUZBVUxUKVxuXHQgICAgLCBtZXRob2RzLCBrZXk7XG5cdCAgLy8gRml4IG5hdGl2ZVxuXHQgIGlmKF9uYXRpdmUpe1xuXHQgICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSkuZ2V0UHJvdG8oX2RlZmF1bHQuY2FsbChuZXcgQmFzZSkpO1xuXHQgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuXHQgICAgX193ZWJwYWNrX3JlcXVpcmVfXygyNSkoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG5cdCAgICAvLyBGRiBmaXhcblx0ICAgIGlmKCFMSUJSQVJZICYmIGhhcyhwcm90bywgRkZfSVRFUkFUT1IpKWhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIFNZTUJPTF9JVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG5cdCAgfVxuXHQgIC8vIERlZmluZSBpdGVyYXRvclxuXHQgIGlmKCFMSUJSQVJZIHx8IEZPUkNFKWhpZGUocHJvdG8sIFNZTUJPTF9JVEVSQVRPUiwgX2RlZmF1bHQpO1xuXHQgIC8vIFBsdWcgZm9yIGxpYnJhcnlcblx0ICBJdGVyYXRvcnNbTkFNRV0gPSBfZGVmYXVsdDtcblx0ICBJdGVyYXRvcnNbVEFHXSAgPSByZXR1cm5UaGlzO1xuXHQgIGlmKERFRkFVTFQpe1xuXHQgICAgbWV0aG9kcyA9IHtcblx0ICAgICAga2V5czogICAgSVNfU0VUICAgICAgICAgICAgPyBfZGVmYXVsdCA6IGNyZWF0ZU1ldGhvZChLRVlTKSxcblx0ICAgICAgdmFsdWVzOiAgREVGQVVMVCA9PSBWQUxVRVMgPyBfZGVmYXVsdCA6IGNyZWF0ZU1ldGhvZChWQUxVRVMpLFxuXHQgICAgICBlbnRyaWVzOiBERUZBVUxUICE9IFZBTFVFUyA/IF9kZWZhdWx0IDogY3JlYXRlTWV0aG9kKCdlbnRyaWVzJylcblx0ICAgIH07XG5cdCAgICBpZihGT1JDRSlmb3Ioa2V5IGluIG1ldGhvZHMpe1xuXHQgICAgICBpZighKGtleSBpbiBwcm90bykpJHJlZGVmKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG5cdCAgICB9IGVsc2UgJGRlZigkZGVmLlAgKyAkZGVmLkYgKiBCVUdHWSwgTkFNRSwgbWV0aG9kcyk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB0cnVlO1xuXG4vKioqLyB9LFxuLyogMTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBnbG9iYWwgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgY29yZSAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMilcblx0ICAsIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXHR2YXIgY3R4ID0gZnVuY3Rpb24oZm4sIHRoYXQpe1xuXHQgIHJldHVybiBmdW5jdGlvbigpe1xuXHQgICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG5cdCAgfTtcblx0fTtcblx0dmFyICRkZWYgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuXHQgIHZhciBrZXksIG93biwgb3V0LCBleHBcblx0ICAgICwgaXNHbG9iYWwgPSB0eXBlICYgJGRlZi5HXG5cdCAgICAsIGlzUHJvdG8gID0gdHlwZSAmICRkZWYuUFxuXHQgICAgLCB0YXJnZXQgICA9IGlzR2xvYmFsID8gZ2xvYmFsIDogdHlwZSAmICRkZWYuU1xuXHQgICAgICAgID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuXHQgICAgLCBleHBvcnRzICA9IGlzR2xvYmFsID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG5cdCAgaWYoaXNHbG9iYWwpc291cmNlID0gbmFtZTtcblx0ICBmb3Ioa2V5IGluIHNvdXJjZSl7XG5cdCAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcblx0ICAgIG93biA9ICEodHlwZSAmICRkZWYuRikgJiYgdGFyZ2V0ICYmIGtleSBpbiB0YXJnZXQ7XG5cdCAgICBpZihvd24gJiYga2V5IGluIGV4cG9ydHMpY29udGludWU7XG5cdCAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuXHQgICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcblx0ICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuXHQgICAgaWYoaXNHbG9iYWwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicpZXhwID0gc291cmNlW2tleV07XG5cdCAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuXHQgICAgZWxzZSBpZih0eXBlICYgJGRlZi5CICYmIG93billeHAgPSBjdHgob3V0LCBnbG9iYWwpO1xuXHQgICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcblx0ICAgIGVsc2UgaWYodHlwZSAmICRkZWYuVyAmJiB0YXJnZXRba2V5XSA9PSBvdXQpIWZ1bmN0aW9uKEMpe1xuXHQgICAgICBleHAgPSBmdW5jdGlvbihwYXJhbSl7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBDID8gbmV3IEMocGFyYW0pIDogQyhwYXJhbSk7XG5cdCAgICAgIH07XG5cdCAgICAgIGV4cFtQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuXHQgICAgfShvdXQpO1xuXHQgICAgZWxzZSBleHAgPSBpc1Byb3RvICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuXHQgICAgLy8gZXhwb3J0XG5cdCAgICBleHBvcnRzW2tleV0gPSBleHA7XG5cdCAgICBpZihpc1Byb3RvKShleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KSlba2V5XSA9IG91dDtcblx0ICB9XG5cdH07XG5cdC8vIHR5cGUgYml0bWFwXG5cdCRkZWYuRiA9IDE7ICAvLyBmb3JjZWRcblx0JGRlZi5HID0gMjsgIC8vIGdsb2JhbFxuXHQkZGVmLlMgPSA0OyAgLy8gc3RhdGljXG5cdCRkZWYuUCA9IDg7ICAvLyBwcm90b1xuXHQkZGVmLkIgPSAxNjsgLy8gYmluZFxuXHQkZGVmLlcgPSAzMjsgLy8gd3JhcFxuXHRtb2R1bGUuZXhwb3J0cyA9ICRkZWY7XG5cbi8qKiovIH0sXG4vKiAxMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcblx0dmFyIFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuXHR2YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9IFVOREVGSU5FRCAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG5cdCAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSBVTkRFRklORUQgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0aWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuLyoqKi8gfSxcbi8qIDEyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0ge3ZlcnNpb246ICcxLjIuMCd9O1xuXHRpZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuLyoqKi8gfSxcbi8qIDEzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG4vKioqLyB9LFxuLyogMTQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIGNyZWF0ZURlc2MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSA/IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG5cdCAgcmV0dXJuICQuc2V0RGVzYyhvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuXHR9IDogZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcblx0ICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuXHQgIHJldHVybiBvYmplY3Q7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyICRPYmplY3QgPSBPYmplY3Q7XG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIGNyZWF0ZTogICAgICRPYmplY3QuY3JlYXRlLFxuXHQgIGdldFByb3RvOiAgICRPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG5cdCAgaXNFbnVtOiAgICAge30ucHJvcGVydHlJc0VudW1lcmFibGUsXG5cdCAgZ2V0RGVzYzogICAgJE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdCAgc2V0RGVzYzogICAgJE9iamVjdC5kZWZpbmVQcm9wZXJ0eSxcblx0ICBzZXREZXNjczogICAkT2JqZWN0LmRlZmluZVByb3BlcnRpZXMsXG5cdCAgZ2V0S2V5czogICAgJE9iamVjdC5rZXlzLFxuXHQgIGdldE5hbWVzOiAgICRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxcblx0ICBnZXRTeW1ib2xzOiAkT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxcblx0ICBlYWNoOiAgICAgICBbXS5mb3JFYWNoXG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihiaXRtYXAsIHZhbHVlKXtcblx0ICByZXR1cm4ge1xuXHQgICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuXHQgICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuXHQgICAgd3JpdGFibGUgICAgOiAhKGJpdG1hcCAmIDQpLFxuXHQgICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuXHQgIH07XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxuXHRtb2R1bGUuZXhwb3J0cyA9ICFfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KShmdW5jdGlvbigpe1xuXHQgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG5cdH0pO1xuXG4vKioqLyB9LFxuLyogMTggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYyl7XG5cdCAgdHJ5IHtcblx0ICAgIHJldHVybiAhIWV4ZWMoKTtcblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgcmV0dXJuIHRydWU7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuXHQgIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBzdG9yZSAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKSgnd2tzJylcblx0ICAsIFN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpLlN5bWJvbDtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lKXtcblx0ICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cblx0ICAgIFN5bWJvbCAmJiBTeW1ib2xbbmFtZV0gfHwgKFN5bWJvbCB8fCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKSkoJ1N5bWJvbC4nICsgbmFtZSkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcblx0ICAsIHN0b3JlICA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuXHQgIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdHZhciBpZCA9IDBcblx0ICAsIHB4ID0gTWF0aC5yYW5kb20oKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuXHQgIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLyoqKi8gfSxcbi8qIDI0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cblx0Ly8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcblx0X193ZWJwYWNrX3JlcXVpcmVfXygxNCkoSXRlcmF0b3JQcm90b3R5cGUsIF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpLCBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCl7XG5cdCAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gJC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHtuZXh0OiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSgxLG5leHQpfSk7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNSkoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGhhcyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXHQgICwgaGlkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cdCAgLCBUQUcgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ3RvU3RyaW5nVGFnJyk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcblx0ICBpZihpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKWhpZGUoaXQsIFRBRywgdGFnKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciBjdHggICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cdCAgLCAkZGVmICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgLCB0b09iamVjdCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpXG5cdCAgLCBjYWxsICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzApXG5cdCAgLCBpc0FycmF5SXRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpXG5cdCAgLCB0b0xlbmd0aCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpXG5cdCAgLCBnZXRJdGVyRm4gICA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xuXHQkZGVmKCRkZWYuUyArICRkZWYuRiAqICFfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KShmdW5jdGlvbihpdGVyKXsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcblx0ICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG5cdCAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UvKiwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQqLyl7XG5cdCAgICB2YXIgTyAgICAgICA9IHRvT2JqZWN0KGFycmF5TGlrZSlcblx0ICAgICAgLCBDICAgICAgID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheVxuXHQgICAgICAsIG1hcGZuICAgPSBhcmd1bWVudHNbMV1cblx0ICAgICAgLCBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZFxuXHQgICAgICAsIGluZGV4ICAgPSAwXG5cdCAgICAgICwgaXRlckZuICA9IGdldEl0ZXJGbihPKVxuXHQgICAgICAsIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcblx0ICAgIGlmKG1hcHBpbmcpbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG5cdCAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2Vcblx0ICAgIGlmKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKXtcblx0ICAgICAgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4Kyspe1xuXHQgICAgICAgIHJlc3VsdFtpbmRleF0gPSBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuXHQgICAgICBmb3IocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuXHQgICAgICAgIHJlc3VsdFtpbmRleF0gPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG5cdCAgICByZXR1cm4gcmVzdWx0O1xuXHQgIH1cblx0fSk7XG5cblxuLyoqKi8gfSxcbi8qIDI3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcblx0dmFyIGFGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0aGF0LCBsZW5ndGgpe1xuXHQgIGFGdW5jdGlvbihmbik7XG5cdCAgaWYodGhhdCA9PT0gdW5kZWZpbmVkKXJldHVybiBmbjtcblx0ICBzd2l0Y2gobGVuZ3RoKXtcblx0ICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuXHQgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcblx0ICAgIH07XG5cdCAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcblx0ICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG5cdCAgICB9O1xuXHQgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuXHQgICAgfTtcblx0ICB9XG5cdCAgcmV0dXJuIGZ1bmN0aW9uKC8qIC4uLmFyZ3MgKi8pe1xuXHQgICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG5cdCAgfTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZih0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG5cdHZhciBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxuXHR2YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKXtcblx0ICB0cnkge1xuXHQgICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcblx0ICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuXHQgIH0gY2F0Y2goZSl7XG5cdCAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuXHQgICAgaWYocmV0ICE9PSB1bmRlZmluZWQpYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcblx0ICAgIHRocm93IGU7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMzEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZighaXNPYmplY3QoaXQpKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcblx0fTtcblxuLyoqKi8gfSxcbi8qIDMzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5cdHZhciBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXHQgICwgSVRFUkFUT1IgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiAoSXRlcmF0b3JzLkFycmF5IHx8IEFycmF5LnByb3RvdHlwZVtJVEVSQVRPUl0pID09PSBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyA3LjEuMTUgVG9MZW5ndGhcblx0dmFyIHRvSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oNilcblx0ICAsIG1pbiAgICAgICA9IE1hdGgubWluO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMzUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBjbGFzc29mICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KVxuXHQgICwgSVRFUkFUT1IgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJylcblx0ICAsIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24oaXQpe1xuXHQgIGlmKGl0ICE9IHVuZGVmaW5lZClyZXR1cm4gaXRbSVRFUkFUT1JdIHx8IGl0WydAQGl0ZXJhdG9yJ10gfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxuXHR2YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNylcblx0ICAsIFRBRyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCd0b1N0cmluZ1RhZycpXG5cdCAgLy8gRVMzIHdyb25nIGhlcmVcblx0ICAsIEFSRyA9IGNvZihmdW5jdGlvbigpeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciBPLCBULCBCO1xuXHQgIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuXHQgICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG5cdCAgICA6IHR5cGVvZiAoVCA9IChPID0gT2JqZWN0KGl0KSlbVEFHXSkgPT0gJ3N0cmluZycgPyBUXG5cdCAgICAvLyBidWlsdGluVGFnIGNhc2Vcblx0ICAgIDogQVJHID8gY29mKE8pXG5cdCAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG5cdCAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBTWU1CT0xfSVRFUkFUT1IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKVxuXHQgICwgU0FGRV9DTE9TSU5HICAgID0gZmFsc2U7XG5cdHRyeSB7XG5cdCAgdmFyIHJpdGVyID0gWzddW1NZTUJPTF9JVEVSQVRPUl0oKTtcblx0ICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbigpeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuXHQgIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uKCl7IHRocm93IDI7IH0pO1xuXHR9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZXhlYyl7XG5cdCAgaWYoIVNBRkVfQ0xPU0lORylyZXR1cm4gZmFsc2U7XG5cdCAgdmFyIHNhZmUgPSBmYWxzZTtcblx0ICB0cnkge1xuXHQgICAgdmFyIGFyciAgPSBbN11cblx0ICAgICAgLCBpdGVyID0gYXJyW1NZTUJPTF9JVEVSQVRPUl0oKTtcblx0ICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uKCl7IHNhZmUgPSB0cnVlOyB9O1xuXHQgICAgYXJyW1NZTUJPTF9JVEVSQVRPUl0gPSBmdW5jdGlvbigpeyByZXR1cm4gaXRlcjsgfTtcblx0ICAgIGV4ZWMoYXJyKTtcblx0ICB9IGNhdGNoKGUpeyAvKiBlbXB0eSAqLyB9XG5cdCAgcmV0dXJuIHNhZmU7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9nZXRJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNDApW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX2lzSXRlcmFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KVtcImRlZmF1bHRcIl07XG5cblx0ZXhwb3J0c1tcImRlZmF1bHRcIl0gPSAoZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIHNsaWNlSXRlcmF0b3IoYXJyLCBpKSB7XG5cdCAgICB2YXIgX2FyciA9IFtdO1xuXHQgICAgdmFyIF9uID0gdHJ1ZTtcblx0ICAgIHZhciBfZCA9IGZhbHNlO1xuXHQgICAgdmFyIF9lID0gdW5kZWZpbmVkO1xuXG5cdCAgICB0cnkge1xuXHQgICAgICBmb3IgKHZhciBfaSA9IF9nZXRJdGVyYXRvcihhcnIpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkge1xuXHQgICAgICAgIF9hcnIucHVzaChfcy52YWx1ZSk7XG5cblx0ICAgICAgICBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7XG5cdCAgICAgIH1cblx0ICAgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgICBfZCA9IHRydWU7XG5cdCAgICAgIF9lID0gZXJyO1xuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdKSBfaVtcInJldHVyblwiXSgpO1xuXHQgICAgICB9IGZpbmFsbHkge1xuXHQgICAgICAgIGlmIChfZCkgdGhyb3cgX2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIF9hcnI7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIChhcnIsIGkpIHtcblx0ICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcblx0ICAgICAgcmV0dXJuIGFycjtcblx0ICAgIH0gZWxzZSBpZiAoX2lzSXRlcmFibGUoT2JqZWN0KGFycikpKSB7XG5cdCAgICAgIHJldHVybiBzbGljZUl0ZXJhdG9yKGFyciwgaSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcblx0ICAgIH1cblx0ICB9O1xuXHR9KSgpO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiA0MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogNDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xuXG4vKioqLyB9LFxuLyogNDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xuXHR2YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cdEl0ZXJhdG9ycy5Ob2RlTGlzdCA9IEl0ZXJhdG9ycy5IVE1MQ29sbGVjdGlvbiA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLyoqKi8gfSxcbi8qIDQzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciBzZXRVbnNjb3BlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NClcblx0ICAsIHN0ZXAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KVxuXHQgICwgSXRlcmF0b3JzICA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpXG5cdCAgLCB0b0lPYmplY3QgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG5cblx0Ly8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuXHQvLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuXHQvLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG5cdC8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDgpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbihpdGVyYXRlZCwga2luZCl7XG5cdCAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuXHQgIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG5cdCAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcblx0Ly8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG5cdH0sIGZ1bmN0aW9uKCl7XG5cdCAgdmFyIE8gICAgID0gdGhpcy5fdFxuXHQgICAgLCBraW5kICA9IHRoaXMuX2tcblx0ICAgICwgaW5kZXggPSB0aGlzLl9pKys7XG5cdCAgaWYoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpe1xuXHQgICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcblx0ICAgIHJldHVybiBzdGVwKDEpO1xuXHQgIH1cblx0ICBpZihraW5kID09ICdrZXlzJyAgKXJldHVybiBzdGVwKDAsIGluZGV4KTtcblx0ICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcblx0ICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG5cdH0sICd2YWx1ZXMnKTtcblxuXHQvLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5cdEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cblx0c2V0VW5zY29wZSgna2V5cycpO1xuXHRzZXRVbnNjb3BlKCd2YWx1ZXMnKTtcblx0c2V0VW5zY29wZSgnZW50cmllcycpO1xuXG4vKioqLyB9LFxuLyogNDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTtcblxuLyoqKi8gfSxcbi8qIDQ1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGRvbmUsIHZhbHVlKXtcblx0ICByZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lfTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDQ2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcclxuXHR2YXIgSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpXHJcblx0ICAsIGRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xyXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xyXG5cdCAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xyXG5cdH07XG5cbi8qKiovIH0sXG4vKiA0NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gaW5kZXhlZCBvYmplY3QsIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xuXHR2YXIgY29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XG5cdG1vZHVsZS5leHBvcnRzID0gMCBpbiBPYmplY3QoJ3onKSA/IE9iamVjdCA6IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA0OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSlcblx0ICAsIGdldCAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbihpdCl7XG5cdCAgdmFyIGl0ZXJGbiA9IGdldChpdCk7XG5cdCAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuXHQgIHJldHVybiBhbk9iamVjdChpdGVyRm4uY2FsbChpdCkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg1MCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDUwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKTtcblxuLyoqKi8gfSxcbi8qIDUxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgY2xhc3NvZiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNilcblx0ICAsIElURVJBVE9SICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpXG5cdCAgLCBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5pc0l0ZXJhYmxlID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciBPID0gT2JqZWN0KGl0KTtcblx0ICByZXR1cm4gSVRFUkFUT1IgaW4gTyB8fCAnQEBpdGVyYXRvcicgaW4gTyB8fCBJdGVyYXRvcnMuaGFzT3duUHJvcGVydHkoY2xhc3NvZihPKSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA1MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogNTMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpO1xuXG4vKioqLyB9LFxuLyogNTQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwpIHsvLyBUaGlzIG1ldGhvZCBvZiBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QgbmVlZHMgdG8gYmVcblx0Ly8ga2VwdCBpZGVudGljYWwgdG8gdGhlIHdheSBpdCBpcyBvYnRhaW5lZCBpbiBydW50aW1lLmpzXG5cdHZhciBnID1cblx0ICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcblx0ICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcblx0ICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzO1xuXG5cdC8vIFVzZSBgZ2V0T3duUHJvcGVydHlOYW1lc2AgYmVjYXVzZSBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgY2FsbGluZ1xuXHQvLyBgaGFzT3duUHJvcGVydHlgIG9uIHRoZSBnbG9iYWwgYHNlbGZgIG9iamVjdCBpbiBhIHdvcmtlci4gU2VlICMxODMuXG5cdHZhciBoYWRSdW50aW1lID0gZy5yZWdlbmVyYXRvclJ1bnRpbWUgJiZcblx0ICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG5cblx0Ly8gU2F2ZSB0aGUgb2xkIHJlZ2VuZXJhdG9yUnVudGltZSBpbiBjYXNlIGl0IG5lZWRzIHRvIGJlIHJlc3RvcmVkIGxhdGVyLlxuXHR2YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG5cblx0Ly8gRm9yY2UgcmVldmFsdXRhdGlvbiBvZiBydW50aW1lLmpzLlxuXHRnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpO1xuXG5cdGlmIChoYWRSdW50aW1lKSB7XG5cdCAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcnVudGltZS5cblx0ICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7XG5cdH0gZWxzZSB7XG5cdCAgLy8gUmVtb3ZlIHRoZSBnbG9iYWwgcHJvcGVydHkgYWRkZWQgYnkgcnVudGltZS5qcy5cblx0ICB0cnkge1xuXHQgICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuXHQgIH0gY2F0Y2goZSkge1xuXHQgICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cdCAgfVxuXHR9XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBtb2R1bGUuZXhwb3J0cywgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG5cdC8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCAoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KCkpKSlcblxuLyoqKi8gfSxcbi8qIDU1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsLCBwcm9jZXNzKSB7LyoqXG5cdCAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cblx0ICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cblx0ICpcblx0ICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG5cdCAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cblx0ICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG5cdCAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cblx0ICovXG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9TeW1ib2wkaXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9PYmplY3QkY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MylbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfUHJvbWlzZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpW1wiZGVmYXVsdFwiXTtcblxuXHQhKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0ICBcInVzZSBzdHJpY3RcIjtcblxuXHQgIHZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXHQgIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuXHQgIHZhciBpdGVyYXRvclN5bWJvbCA9IHR5cGVvZiBfU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX1N5bWJvbCRpdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcblxuXHQgIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG5cdCAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuXHQgIGlmIChydW50aW1lKSB7XG5cdCAgICBpZiAoaW5Nb2R1bGUpIHtcblx0ICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuXHQgICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuXHQgICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG5cdCAgICB9XG5cdCAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG5cdCAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG5cdCAgICByZXR1cm47XG5cdCAgfVxuXG5cdCAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG5cdCAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuXHQgIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG5cdCAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuXHQgICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cblx0ICAgIHZhciBnZW5lcmF0b3IgPSBfT2JqZWN0JGNyZWF0ZSgob3V0ZXJGbiB8fCBHZW5lcmF0b3IpLnByb3RvdHlwZSk7XG5cblx0ICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmIHx8IG51bGwsIG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKSk7XG5cblx0ICAgIHJldHVybiBnZW5lcmF0b3I7XG5cdCAgfVxuXHQgIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cblx0ICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cblx0ICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcblx0ICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcblx0ICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG5cdCAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuXHQgIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcblx0ICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuXHQgIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuXHQgIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcblx0ICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG5cdCAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG5cdCAgICB0cnkge1xuXHQgICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG5cdCAgICB9IGNhdGNoIChlcnIpIHtcblx0ICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuXHQgIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuXHQgIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG5cdCAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuXHQgIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcblx0ICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG5cdCAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuXHQgIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuXHQgIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuXHQgIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG5cdCAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cblx0ICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuXHQgIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cblx0ICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cblx0ICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPSBHZW5lcmF0b3IucHJvdG90eXBlO1xuXHQgIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG5cdCAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcblx0ICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuXHQgIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG5cdCAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cblx0ICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG5cdCAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbiAobWV0aG9kKSB7XG5cdCAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuXHQgICAgICB9O1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuXHQgICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuXHQgICAgcmV0dXJuIGN0b3IgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuXHQgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuXHQgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuXHQgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiIDogZmFsc2U7XG5cdCAgfTtcblxuXHQgIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcblx0ICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcblx0ICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBfT2JqZWN0JGNyZWF0ZShHcCk7XG5cdCAgICByZXR1cm4gZ2VuRnVuO1xuXHQgIH07XG5cblx0ICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cblx0ICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuXHQgIC8vIGB2YWx1ZSBpbnN0YW5jZW9mIEF3YWl0QXJndW1lbnRgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuXHQgIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuIFNvbWUgbWF5IGNvbnNpZGVyIHRoZSBuYW1lIG9mIHRoaXMgbWV0aG9kIHRvb1xuXHQgIC8vIGN1dGVzeSwgYnV0IHRoZXkgYXJlIGN1cm11ZGdlb25zLlxuXHQgIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICByZXR1cm4gbmV3IEF3YWl0QXJndW1lbnQoYXJnKTtcblx0ICB9O1xuXG5cdCAgZnVuY3Rpb24gQXdhaXRBcmd1bWVudChhcmcpIHtcblx0ICAgIHRoaXMuYXJnID0gYXJnO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG5cdCAgICAvLyBUaGlzIGludm9rZSBmdW5jdGlvbiBpcyB3cml0dGVuIGluIGEgc3R5bGUgdGhhdCBhc3N1bWVzIHNvbWVcblx0ICAgIC8vIGNhbGxpbmcgZnVuY3Rpb24gKG9yIFByb21pc2UpIHdpbGwgaGFuZGxlIGV4Y2VwdGlvbnMuXG5cdCAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcblx0ICAgICAgdmFyIHJlc3VsdCA9IGdlbmVyYXRvclttZXRob2RdKGFyZyk7XG5cdCAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblx0ICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQXdhaXRBcmd1bWVudCA/IF9Qcm9taXNlLnJlc29sdmUodmFsdWUuYXJnKS50aGVuKGludm9rZU5leHQsIGludm9rZVRocm93KSA6IF9Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuXHQgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG5cdCAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG5cdCAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcblx0ICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuXHQgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG5cdCAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuXHQgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cblx0ICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcblx0ICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcblx0ICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuXHQgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuXHQgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcblx0ICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG5cdCAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG5cdCAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG5cdCAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuXHQgICAgICAgIHJldHVybiByZXN1bHQ7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy5kb21haW4pIHtcblx0ICAgICAgaW52b2tlID0gcHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuXHQgICAgfVxuXG5cdCAgICB2YXIgaW52b2tlTmV4dCA9IGludm9rZS5iaW5kKGdlbmVyYXRvciwgXCJuZXh0XCIpO1xuXHQgICAgdmFyIGludm9rZVRocm93ID0gaW52b2tlLmJpbmQoZ2VuZXJhdG9yLCBcInRocm93XCIpO1xuXHQgICAgdmFyIGludm9rZVJldHVybiA9IGludm9rZS5iaW5kKGdlbmVyYXRvciwgXCJyZXR1cm5cIik7XG5cdCAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG5cdCAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG5cdCAgICAgIHZhciBlbnF1ZXVlUmVzdWx0ID1cblx0ICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuXHQgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcblx0ICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuXHQgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuXHQgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcblx0ICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cblx0ICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuXHQgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuXHQgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuXHQgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuXHQgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuXHQgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG5cdCAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gaW52b2tlKG1ldGhvZCwgYXJnKTtcblx0ICAgICAgfSkgOiBuZXcgX1Byb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0ICAgICAgICByZXNvbHZlKGludm9rZShtZXRob2QsIGFyZykpO1xuXHQgICAgICB9KTtcblxuXHQgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBlbnF1ZXVlUmVzdWx0IGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5XG5cdCAgICAgIC8vIGxhdGVyIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cblx0ICAgICAgcHJldmlvdXNQcm9taXNlID0gZW5xdWV1ZVJlc3VsdFtcImNhdGNoXCJdKGZ1bmN0aW9uIChpZ25vcmVkKSB7fSk7XG5cblx0ICAgICAgcmV0dXJuIGVucXVldWVSZXN1bHQ7XG5cdCAgICB9XG5cblx0ICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG5cdCAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cblx0ICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG5cdCAgfVxuXG5cdCAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcblxuXHQgIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2Zcblx0ICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2Zcblx0ICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cblx0ICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24gKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG5cdCAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpKTtcblxuXHQgICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKSA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuXHQgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcblx0ICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG5cdCAgICB9KTtcblx0ICB9O1xuXG5cdCAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG5cdCAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG5cdCAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG5cdCAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcblx0ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuXHQgICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgICAgdGhyb3cgYXJnO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG5cdCAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuXHQgICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG5cdCAgICAgIH1cblxuXHQgICAgICB3aGlsZSAodHJ1ZSkge1xuXHQgICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG5cdCAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG5cdCAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJldHVyblwiIHx8IG1ldGhvZCA9PT0gXCJ0aHJvd1wiICYmIGRlbGVnYXRlLml0ZXJhdG9yW21ldGhvZF0gPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAvLyBBIHJldHVybiBvciB0aHJvdyAod2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIHRocm93XG5cdCAgICAgICAgICAgIC8vIG1ldGhvZCkgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuXHQgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuXHQgICAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG5cdCAgICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cblx0ICAgICAgICAgICAgdmFyIHJldHVybk1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW1wicmV0dXJuXCJdO1xuXHQgICAgICAgICAgICBpZiAocmV0dXJuTWV0aG9kKSB7XG5cdCAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKHJldHVybk1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG5cdCAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXR1cm4gbWV0aG9kIHRocmV3IGFuIGV4Y2VwdGlvbiwgbGV0IHRoYXRcblx0ICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBwcmV2YWlsIG92ZXIgdGhlIG9yaWdpbmFsIHJldHVybiBvciB0aHJvdy5cblx0ICAgICAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcblx0ICAgICAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBpZiAobWV0aG9kID09PSBcInJldHVyblwiKSB7XG5cdCAgICAgICAgICAgICAgLy8gQ29udGludWUgd2l0aCB0aGUgb3V0ZXIgcmV0dXJuLCBub3cgdGhhdCB0aGUgZGVsZWdhdGVcblx0ICAgICAgICAgICAgICAvLyBpdGVyYXRvciBoYXMgYmVlbiB0ZXJtaW5hdGVkLlxuXHQgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2RdLCBkZWxlZ2F0ZS5pdGVyYXRvciwgYXJnKTtcblxuXHQgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgLy8gTGlrZSByZXR1cm5pbmcgZ2VuZXJhdG9yLnRocm93KHVuY2F1Z2h0KSwgYnV0IHdpdGhvdXQgdGhlXG5cdCAgICAgICAgICAgIC8vIG92ZXJoZWFkIG9mIGFuIGV4dHJhIGZ1bmN0aW9uIGNhbGwuXG5cdCAgICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcblx0ICAgICAgICAgICAgYXJnID0gcmVjb3JkLmFyZztcblx0ICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIC8vIERlbGVnYXRlIGdlbmVyYXRvciByYW4gYW5kIGhhbmRsZWQgaXRzIG93biBleGNlcHRpb25zIHNvXG5cdCAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIG1ldGhvZCB3YXMsIHdlIGNvbnRpbnVlIGFzIGlmIGl0IGlzXG5cdCAgICAgICAgICAvLyBcIm5leHRcIiB3aXRoIGFuIHVuZGVmaW5lZCBhcmcuXG5cdCAgICAgICAgICBtZXRob2QgPSBcIm5leHRcIjtcblx0ICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcblxuXHQgICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXHQgICAgICAgICAgaWYgKGluZm8uZG9uZSkge1xuXHQgICAgICAgICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblx0ICAgICAgICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblx0ICAgICAgICAgICAgcmV0dXJuIGluZm87XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChtZXRob2QgPT09IFwibmV4dFwiKSB7XG5cdCAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkWWllbGQpIHtcblx0ICAgICAgICAgICAgY29udGV4dC5zZW50ID0gYXJnO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgY29udGV4dC5zZW50ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuXHQgICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuXHQgICAgICAgICAgICB0aHJvdyBhcmc7XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGlmIChjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykpIHtcblx0ICAgICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcblx0ICAgICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cblx0ICAgICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG5cdCAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuXHQgICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgYXJnKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG5cdCAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXHQgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuXHQgICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuXHQgICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuXHQgICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBHZW5TdGF0ZUNvbXBsZXRlZCA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cblx0ICAgICAgICAgIHZhciBpbmZvID0ge1xuXHQgICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcblx0ICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG5cdCAgICAgICAgICB9O1xuXG5cdCAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuXHQgICAgICAgICAgICBpZiAoY29udGV4dC5kZWxlZ2F0ZSAmJiBtZXRob2QgPT09IFwibmV4dFwiKSB7XG5cdCAgICAgICAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3Rcblx0ICAgICAgICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG5cdCAgICAgICAgICAgICAgYXJnID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICByZXR1cm4gaW5mbztcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG5cdCAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG5cdCAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGFyZykgY2FsbCBhYm92ZS5cblx0ICAgICAgICAgIG1ldGhvZCA9IFwidGhyb3dcIjtcblx0ICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgIH1cblxuXHQgIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG5cdCAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuXHQgIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cblx0ICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICByZXR1cm4gdGhpcztcblx0ICB9O1xuXG5cdCAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcblx0ICB9O1xuXG5cdCAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcblx0ICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cblx0ICAgIGlmICgxIGluIGxvY3MpIHtcblx0ICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoMiBpbiBsb2NzKSB7XG5cdCAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuXHQgICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG5cdCAgICB9XG5cblx0ICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG5cdCAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcblx0ICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcblx0ICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuXHQgICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG5cdCAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcblx0ICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cblx0ICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cblx0ICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG5cdCAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG5cdCAgICB0aGlzLnJlc2V0KHRydWUpO1xuXHQgIH1cblxuXHQgIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcblx0ICAgIHZhciBrZXlzID0gW107XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG5cdCAgICAgIGtleXMucHVzaChrZXkpO1xuXHQgICAgfVxuXHQgICAga2V5cy5yZXZlcnNlKCk7XG5cblx0ICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG5cdCAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuXHQgICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG5cdCAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuXHQgICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuXHQgICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG5cdCAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuXHQgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG5cdCAgICAgICAgICByZXR1cm4gbmV4dDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcblx0ICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcblx0ICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG5cdCAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cdCAgICAgIHJldHVybiBuZXh0O1xuXHQgICAgfTtcblx0ICB9O1xuXG5cdCAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG5cdCAgICBpZiAoaXRlcmFibGUpIHtcblx0ICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuXHQgICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcblx0ICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuXHQgICAgICAgIHJldHVybiBpdGVyYWJsZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuXHQgICAgICAgIHZhciBpID0gLTEsXG5cdCAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuXHQgICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuXHQgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG5cdCAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuXHQgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuXHQgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG5cdCAgICAgICAgICByZXR1cm4gbmV4dDtcblx0ICAgICAgICB9O1xuXG5cdCAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuXHQgICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuXHQgIH1cblx0ICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuXHQgIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG5cdCAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG5cdCAgfVxuXG5cdCAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG5cdCAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuXHQgICAgcmVzZXQ6IGZ1bmN0aW9uIHJlc2V0KHNraXBUZW1wUmVzZXQpIHtcblx0ICAgICAgdGhpcy5wcmV2ID0gMDtcblx0ICAgICAgdGhpcy5uZXh0ID0gMDtcblx0ICAgICAgdGhpcy5zZW50ID0gdW5kZWZpbmVkO1xuXHQgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcblx0ICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cblx0ICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cblx0ICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG5cdCAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG5cdCAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuXHQgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG5cdCAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuXHQgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG5cdCAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG5cdCAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG5cdCAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIHRoaXMucnZhbDtcblx0ICAgIH0sXG5cblx0ICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbiBkaXNwYXRjaEV4Y2VwdGlvbihleGNlcHRpb24pIHtcblx0ICAgICAgaWYgKHRoaXMuZG9uZSkge1xuXHQgICAgICAgIHRocm93IGV4Y2VwdGlvbjtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcblx0ICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG5cdCAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG5cdCAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcblx0ICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cdCAgICAgICAgcmV0dXJuICEhY2F1Z2h0O1xuXHQgICAgICB9XG5cblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHQgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblx0ICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuXHQgICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG5cdCAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuXHQgICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG5cdCAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuXHQgICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuXHQgICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG5cdCAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cblx0ICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuXHQgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuXHQgICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHR5cGUsIGFyZykge1xuXHQgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuXHQgICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiYgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuXHQgICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG5cdCAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuXHQgICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cblx0ICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG5cdCAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcblx0ICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuXHQgICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG5cdCAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG5cdCAgICB9LFxuXG5cdCAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuXHQgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgIHRocm93IHJlY29yZC5hcmc7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fCByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG5cdCAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcblx0ICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuXHQgICAgICAgIHRoaXMucnZhbCA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcblx0ICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuXHQgICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG5cdCAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG5cdCAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcblx0ICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuXHQgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG5cdCAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24gX2NhdGNoKHRyeUxvYykge1xuXHQgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuXHQgICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuXHQgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cdCAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuXHQgICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcblx0ICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICByZXR1cm4gdGhyb3duO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuXHQgICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG5cdCAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcblx0ICAgIH0sXG5cblx0ICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcblx0ICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcblx0ICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcblx0ICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuXHQgICAgICAgIG5leHRMb2M6IG5leHRMb2Ncblx0ICAgICAgfTtcblxuXHQgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcblx0ICAgIH1cblx0ICB9O1xuXHR9KShcblx0Ly8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuXHQvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3Rcblx0Ly8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cblx0dHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB1bmRlZmluZWQpO1xuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSgpKSwgX193ZWJwYWNrX3JlcXVpcmVfXyg1NikpKVxuXG4vKioqLyB9LFxuLyogNTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG5cdHZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblx0dmFyIHF1ZXVlID0gW107XG5cdHZhciBkcmFpbmluZyA9IGZhbHNlO1xuXHR2YXIgY3VycmVudFF1ZXVlO1xuXHR2YXIgcXVldWVJbmRleCA9IC0xO1xuXG5cdGZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcblx0ICAgIGRyYWluaW5nID0gZmFsc2U7XG5cdCAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuXHQgICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcblx0ICAgIH1cblx0ICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcblx0ICAgICAgICBkcmFpblF1ZXVlKCk7XG5cdCAgICB9XG5cdH1cblxuXHRmdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuXHQgICAgaWYgKGRyYWluaW5nKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgICAgdmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG5cdCAgICBkcmFpbmluZyA9IHRydWU7XG5cblx0ICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG5cdCAgICB3aGlsZShsZW4pIHtcblx0ICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcblx0ICAgICAgICBxdWV1ZSA9IFtdO1xuXHQgICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcblx0ICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuXHQgICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcblx0ICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG5cdCAgICB9XG5cdCAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuXHQgICAgZHJhaW5pbmcgPSBmYWxzZTtcblx0ICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0fVxuXG5cdHByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG5cdCAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG5cdCAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcblx0ICAgICAgICB9XG5cdCAgICB9XG5cdCAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuXHQgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcblx0ICAgICAgICBzZXRUaW1lb3V0KGRyYWluUXVldWUsIDApO1xuXHQgICAgfVxuXHR9O1xuXG5cdC8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcblx0ZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG5cdCAgICB0aGlzLmZ1biA9IGZ1bjtcblx0ICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcblx0fVxuXHRJdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcblx0fTtcblx0cHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcblx0cHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcblx0cHJvY2Vzcy5lbnYgPSB7fTtcblx0cHJvY2Vzcy5hcmd2ID0gW107XG5cdHByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xuXHRwcm9jZXNzLnZlcnNpb25zID0ge307XG5cblx0ZnVuY3Rpb24gbm9vcCgpIHt9XG5cblx0cHJvY2Vzcy5vbiA9IG5vb3A7XG5cdHByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xuXHRwcm9jZXNzLm9uY2UgPSBub29wO1xuXHRwcm9jZXNzLm9mZiA9IG5vb3A7XG5cdHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xuXHRwcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5cdHByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cblx0cHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcblx0fTtcblxuXHRwcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xuXHRwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuXHQgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcblx0fTtcblx0cHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG4vKioqLyB9LFxuLyogNTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg1OCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDU4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5TeW1ib2w7XG5cbi8qKiovIH0sXG4vKiA1OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHQvLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG5cdHZhciAkICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBnbG9iYWwgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cdCAgLCBoYXMgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpXG5cdCAgLCBTVVBQT1JUX0RFU0MgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpXG5cdCAgLCAkZGVmICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgLCAkcmVkZWYgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpXG5cdCAgLCAkZmFpbHMgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpXG5cdCAgLCBzaGFyZWQgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpXG5cdCAgLCBzZXRUYWcgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpXG5cdCAgLCB1aWQgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpXG5cdCAgLCB3a3MgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApXG5cdCAgLCBrZXlPZiAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjApXG5cdCAgLCAkbmFtZXMgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpXG5cdCAgLCBlbnVtS2V5cyAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpXG5cdCAgLCBpc09iamVjdCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpXG5cdCAgLCBhbk9iamVjdCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpXG5cdCAgLCB0b0lPYmplY3QgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpXG5cdCAgLCBjcmVhdGVEZXNjICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpXG5cdCAgLCBnZXREZXNjICAgICAgICA9ICQuZ2V0RGVzY1xuXHQgICwgc2V0RGVzYyAgICAgICAgPSAkLnNldERlc2Ncblx0ICAsIF9jcmVhdGUgICAgICAgID0gJC5jcmVhdGVcblx0ICAsIGdldE5hbWVzICAgICAgID0gJG5hbWVzLmdldFxuXHQgICwgJFN5bWJvbCAgICAgICAgPSBnbG9iYWwuU3ltYm9sXG5cdCAgLCBzZXR0ZXIgICAgICAgICA9IGZhbHNlXG5cdCAgLCBISURERU4gICAgICAgICA9IHdrcygnX2hpZGRlbicpXG5cdCAgLCBpc0VudW0gICAgICAgICA9ICQuaXNFbnVtXG5cdCAgLCBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jylcblx0ICAsIEFsbFN5bWJvbHMgICAgID0gc2hhcmVkKCdzeW1ib2xzJylcblx0ICAsIHVzZU5hdGl2ZSAgICAgID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJ1xuXHQgICwgT2JqZWN0UHJvdG8gICAgPSBPYmplY3QucHJvdG90eXBlO1xuXG5cdC8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xuXHR2YXIgc2V0U3ltYm9sRGVzYyA9IFNVUFBPUlRfREVTQyAmJiAkZmFpbHMoZnVuY3Rpb24oKXtcblx0ICByZXR1cm4gX2NyZWF0ZShzZXREZXNjKHt9LCAnYScsIHtcblx0ICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIHNldERlc2ModGhpcywgJ2EnLCB7dmFsdWU6IDd9KS5hOyB9XG5cdCAgfSkpLmEgIT0gNztcblx0fSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcblx0ICB2YXIgcHJvdG9EZXNjID0gZ2V0RGVzYyhPYmplY3RQcm90bywga2V5KTtcblx0ICBpZihwcm90b0Rlc2MpZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG5cdCAgc2V0RGVzYyhpdCwga2V5LCBEKTtcblx0ICBpZihwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKXNldERlc2MoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcblx0fSA6IHNldERlc2M7XG5cblx0dmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuXHQgIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2wucHJvdG90eXBlKTtcblx0ICBzeW0uX2sgPSB0YWc7XG5cdCAgU1VQUE9SVF9ERVNDICYmIHNldHRlciAmJiBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHtcblx0ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0ICAgIHNldDogZnVuY3Rpb24odmFsdWUpe1xuXHQgICAgICBpZihoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKXRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG5cdCAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG5cdCAgICB9XG5cdCAgfSk7XG5cdCAgcmV0dXJuIHN5bTtcblx0fTtcblxuXHR2YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCl7XG5cdCAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSl7XG5cdCAgICBpZighRC5lbnVtZXJhYmxlKXtcblx0ICAgICAgaWYoIWhhcyhpdCwgSElEREVOKSlzZXREZXNjKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcblx0ICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGlmKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0paXRbSElEREVOXVtrZXldID0gZmFsc2U7XG5cdCAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuXHQgICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcblx0ICB9IHJldHVybiBzZXREZXNjKGl0LCBrZXksIEQpO1xuXHR9O1xuXHR2YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKXtcblx0ICBhbk9iamVjdChpdCk7XG5cdCAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKVxuXHQgICAgLCBpICAgID0gMFxuXHQgICAgLCBsID0ga2V5cy5sZW5ndGhcblx0ICAgICwga2V5O1xuXHQgIHdoaWxlKGwgPiBpKSRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblx0dmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApe1xuXHQgIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcblx0fTtcblx0dmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSl7XG5cdCAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkpO1xuXHQgIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV1cblx0ICAgID8gRSA6IHRydWU7XG5cdH07XG5cdHZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuXHQgIHZhciBEID0gZ2V0RGVzYyhpdCA9IHRvSU9iamVjdChpdCksIGtleSk7XG5cdCAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKUQuZW51bWVyYWJsZSA9IHRydWU7XG5cdCAgcmV0dXJuIEQ7XG5cdH07XG5cdHZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuXHQgIHZhciBuYW1lcyAgPSBnZXROYW1lcyh0b0lPYmplY3QoaXQpKVxuXHQgICAgLCByZXN1bHQgPSBbXVxuXHQgICAgLCBpICAgICAgPSAwXG5cdCAgICAsIGtleTtcblx0ICB3aGlsZShuYW1lcy5sZW5ndGggPiBpKWlmKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTilyZXN1bHQucHVzaChrZXkpO1xuXHQgIHJldHVybiByZXN1bHQ7XG5cdH07XG5cdHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KXtcblx0ICB2YXIgbmFtZXMgID0gZ2V0TmFtZXModG9JT2JqZWN0KGl0KSlcblx0ICAgICwgcmVzdWx0ID0gW11cblx0ICAgICwgaSAgICAgID0gMFxuXHQgICAgLCBrZXk7XG5cdCAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkpcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdC8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuXHRpZighdXNlTmF0aXZlKXtcblx0ICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG5cdCAgICBpZih0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCl0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xuXHQgICAgcmV0dXJuIHdyYXAodWlkKGFyZ3VtZW50c1swXSkpO1xuXHQgIH07XG5cdCAgJHJlZGVmKCRTeW1ib2wucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpe1xuXHQgICAgcmV0dXJuIHRoaXMuX2s7XG5cdCAgfSk7XG5cblx0ICAkLmNyZWF0ZSAgICAgPSAkY3JlYXRlO1xuXHQgICQuaXNFbnVtICAgICA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0ICAkLmdldERlc2MgICAgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXHQgICQuc2V0RGVzYyAgICA9ICRkZWZpbmVQcm9wZXJ0eTtcblx0ICAkLnNldERlc2NzICAgPSAkZGVmaW5lUHJvcGVydGllcztcblx0ICAkLmdldE5hbWVzICAgPSAkbmFtZXMuZ2V0ID0gJGdldE93blByb3BlcnR5TmFtZXM7XG5cdCAgJC5nZXRTeW1ib2xzID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuXHQgIGlmKFNVUFBPUlRfREVTQyAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXyg5KSl7XG5cdCAgICAkcmVkZWYoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG5cdCAgfVxuXHR9XG5cblx0Ly8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cblx0aWYoIXVzZU5hdGl2ZSB8fCAkZmFpbHMoZnVuY3Rpb24oKXtcblx0ICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyRTeW1ib2woKV0pICE9ICdbbnVsbF0nO1xuXHR9KSkkcmVkZWYoJFN5bWJvbC5wcm90b3R5cGUsICd0b0pTT04nLCBmdW5jdGlvbiB0b0pTT04oKXtcblx0ICBpZih1c2VOYXRpdmUgJiYgaXNPYmplY3QodGhpcykpcmV0dXJuIHRoaXM7XG5cdH0pO1xuXG5cdHZhciBzeW1ib2xTdGF0aWNzID0ge1xuXHQgIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuXHQgICdmb3InOiBmdW5jdGlvbihrZXkpe1xuXHQgICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuXHQgICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cblx0ICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuXHQgIH0sXG5cdCAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG5cdCAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioa2V5KXtcblx0ICAgIHJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcblx0ICB9LFxuXHQgIHVzZVNldHRlcjogZnVuY3Rpb24oKXsgc2V0dGVyID0gdHJ1ZTsgfSxcblx0ICB1c2VTaW1wbGU6IGZ1bmN0aW9uKCl7IHNldHRlciA9IGZhbHNlOyB9XG5cdH07XG5cdC8vIDE5LjQuMi4yIFN5bWJvbC5oYXNJbnN0YW5jZVxuXHQvLyAxOS40LjIuMyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlXG5cdC8vIDE5LjQuMi40IFN5bWJvbC5pdGVyYXRvclxuXHQvLyAxOS40LjIuNiBTeW1ib2wubWF0Y2hcblx0Ly8gMTkuNC4yLjggU3ltYm9sLnJlcGxhY2Vcblx0Ly8gMTkuNC4yLjkgU3ltYm9sLnNlYXJjaFxuXHQvLyAxOS40LjIuMTAgU3ltYm9sLnNwZWNpZXNcblx0Ly8gMTkuNC4yLjExIFN5bWJvbC5zcGxpdFxuXHQvLyAxOS40LjIuMTIgU3ltYm9sLnRvUHJpbWl0aXZlXG5cdC8vIDE5LjQuMi4xMyBTeW1ib2wudG9TdHJpbmdUYWdcblx0Ly8gMTkuNC4yLjE0IFN5bWJvbC51bnNjb3BhYmxlc1xuXHQkLmVhY2guY2FsbCgoXG5cdCAgICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLCcgK1xuXHQgICAgJ3NwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG5cdCAgKS5zcGxpdCgnLCcpLCBmdW5jdGlvbihpdCl7XG5cdCAgICB2YXIgc3ltID0gd2tzKGl0KTtcblx0ICAgIHN5bWJvbFN0YXRpY3NbaXRdID0gdXNlTmF0aXZlID8gc3ltIDogd3JhcChzeW0pO1xuXHQgIH1cblx0KTtcblxuXHRzZXR0ZXIgPSB0cnVlO1xuXG5cdCRkZWYoJGRlZi5HICsgJGRlZi5XLCB7U3ltYm9sOiAkU3ltYm9sfSk7XG5cblx0JGRlZigkZGVmLlMsICdTeW1ib2wnLCBzeW1ib2xTdGF0aWNzKTtcblxuXHQkZGVmKCRkZWYuUyArICRkZWYuRiAqICF1c2VOYXRpdmUsICdPYmplY3QnLCB7XG5cdCAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuXHQgIGNyZWF0ZTogJGNyZWF0ZSxcblx0ICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcblx0ICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuXHQgIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG5cdCAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG5cdCAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuXHQgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcblx0ICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuXHQgIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuXHQgIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcblx0ICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcblx0fSk7XG5cblx0Ly8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuXHRzZXRUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuXHQvLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5cdHNldFRhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuXHQvLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuXHRzZXRUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG5cbi8qKiovIH0sXG4vKiA2MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyICQgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIGVsKXtcblx0ICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcblx0ICAgICwga2V5cyAgID0gJC5nZXRLZXlzKE8pXG5cdCAgICAsIGxlbmd0aCA9IGtleXMubGVuZ3RoXG5cdCAgICAsIGluZGV4ICA9IDBcblx0ICAgICwga2V5O1xuXHQgIHdoaWxlKGxlbmd0aCA+IGluZGV4KWlmKE9ba2V5ID0ga2V5c1tpbmRleCsrXV0gPT09IGVsKXJldHVybiBrZXk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA2MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xuXHR2YXIgdG9TdHJpbmcgID0ge30udG9TdHJpbmdcblx0ICAsIHRvSU9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpXG5cdCAgLCBnZXROYW1lcyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KS5nZXROYW1lcztcblxuXHR2YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG5cdCAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cblx0dmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHRyeSB7XG5cdCAgICByZXR1cm4gZ2V0TmFtZXMoaXQpO1xuXHQgIH0gY2F0Y2goZSl7XG5cdCAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcblx0ICB9XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG5cdCAgaWYod2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScpcmV0dXJuIGdldFdpbmRvd05hbWVzKGl0KTtcblx0ICByZXR1cm4gZ2V0TmFtZXModG9JT2JqZWN0KGl0KSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA2MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcblx0dmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgdmFyIGtleXMgICAgICAgPSAkLmdldEtleXMoaXQpXG5cdCAgICAsIGdldFN5bWJvbHMgPSAkLmdldFN5bWJvbHM7XG5cdCAgaWYoZ2V0U3ltYm9scyl7XG5cdCAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpXG5cdCAgICAgICwgaXNFbnVtICA9ICQuaXNFbnVtXG5cdCAgICAgICwgaSAgICAgICA9IDBcblx0ICAgICAgLCBrZXk7XG5cdCAgICB3aGlsZShzeW1ib2xzLmxlbmd0aCA+IGkpaWYoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpa2V5cy5wdXNoKGtleSk7XG5cdCAgfVxuXHQgIHJldHVybiBrZXlzO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg2NCksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDY0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZShQLCBEKXtcblx0ICByZXR1cm4gJC5jcmVhdGUoUCwgRCk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA2NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogNjYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuUHJvbWlzZTtcblxuLyoqKi8gfSxcbi8qIDY3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRcblxuLyoqKi8gfSxcbi8qIDY4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIExJQlJBUlkgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpXG5cdCAgLCBnbG9iYWwgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIGN0eCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgY2xhc3NvZiAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpXG5cdCAgLCAkZGVmICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAsIGlzT2JqZWN0ICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKVxuXHQgICwgYW5PYmplY3QgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpXG5cdCAgLCBhRnVuY3Rpb24gID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOClcblx0ICAsIHN0cmljdE5ldyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KVxuXHQgICwgZm9yT2YgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzApXG5cdCAgLCBzZXRQcm90byAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MSkuc2V0XG5cdCAgLCBzYW1lICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Milcblx0ICAsIHNwZWNpZXMgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKVxuXHQgICwgU1BFQ0lFUyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdzcGVjaWVzJylcblx0ICAsIFJFQ09SRCAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKSgncmVjb3JkJylcblx0ICAsIGFzYXAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KVxuXHQgICwgUFJPTUlTRSAgICA9ICdQcm9taXNlJ1xuXHQgICwgcHJvY2VzcyAgICA9IGdsb2JhbC5wcm9jZXNzXG5cdCAgLCBpc05vZGUgICAgID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcydcblx0ICAsIFAgICAgICAgICAgPSBnbG9iYWxbUFJPTUlTRV1cblx0ICAsIFdyYXBwZXI7XG5cblx0dmFyIHRlc3RSZXNvbHZlID0gZnVuY3Rpb24oc3ViKXtcblx0ICB2YXIgdGVzdCA9IG5ldyBQKGZ1bmN0aW9uKCl7fSk7XG5cdCAgaWYoc3ViKXRlc3QuY29uc3RydWN0b3IgPSBPYmplY3Q7XG5cdCAgcmV0dXJuIFAucmVzb2x2ZSh0ZXN0KSA9PT0gdGVzdDtcblx0fTtcblxuXHR2YXIgdXNlTmF0aXZlID0gZnVuY3Rpb24oKXtcblx0ICB2YXIgd29ya3MgPSBmYWxzZTtcblx0ICBmdW5jdGlvbiBQMih4KXtcblx0ICAgIHZhciBzZWxmID0gbmV3IFAoeCk7XG5cdCAgICBzZXRQcm90byhzZWxmLCBQMi5wcm90b3R5cGUpO1xuXHQgICAgcmV0dXJuIHNlbGY7XG5cdCAgfVxuXHQgIHRyeSB7XG5cdCAgICB3b3JrcyA9IFAgJiYgUC5yZXNvbHZlICYmIHRlc3RSZXNvbHZlKCk7XG5cdCAgICBzZXRQcm90byhQMiwgUCk7XG5cdCAgICBQMi5wcm90b3R5cGUgPSAkLmNyZWF0ZShQLnByb3RvdHlwZSwge2NvbnN0cnVjdG9yOiB7dmFsdWU6IFAyfX0pO1xuXHQgICAgLy8gYWN0dWFsIEZpcmVmb3ggaGFzIGJyb2tlbiBzdWJjbGFzcyBzdXBwb3J0LCB0ZXN0IHRoYXRcblx0ICAgIGlmKCEoUDIucmVzb2x2ZSg1KS50aGVuKGZ1bmN0aW9uKCl7fSkgaW5zdGFuY2VvZiBQMikpe1xuXHQgICAgICB3b3JrcyA9IGZhbHNlO1xuXHQgICAgfVxuXHQgICAgLy8gYWN0dWFsIFY4IGJ1ZywgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxNjJcblx0ICAgIGlmKHdvcmtzICYmIF9fd2VicGFja19yZXF1aXJlX18oMTcpKXtcblx0ICAgICAgdmFyIHRoZW5hYmxlVGhlbkdvdHRlbiA9IGZhbHNlO1xuXHQgICAgICBQLnJlc29sdmUoJC5zZXREZXNjKHt9LCAndGhlbicsIHtcblx0ICAgICAgICBnZXQ6IGZ1bmN0aW9uKCl7IHRoZW5hYmxlVGhlbkdvdHRlbiA9IHRydWU7IH1cblx0ICAgICAgfSkpO1xuXHQgICAgICB3b3JrcyA9IHRoZW5hYmxlVGhlbkdvdHRlbjtcblx0ICAgIH1cblx0ICB9IGNhdGNoKGUpeyB3b3JrcyA9IGZhbHNlOyB9XG5cdCAgcmV0dXJuIHdvcmtzO1xuXHR9KCk7XG5cblx0Ly8gaGVscGVyc1xuXHR2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBpc09iamVjdChpdCkgJiYgKHVzZU5hdGl2ZSA/IGNsYXNzb2YoaXQpID09ICdQcm9taXNlJyA6IFJFQ09SRCBpbiBpdCk7XG5cdH07XG5cdHZhciBzYW1lQ29uc3RydWN0b3IgPSBmdW5jdGlvbihhLCBiKXtcblx0ICAvLyBsaWJyYXJ5IHdyYXBwZXIgc3BlY2lhbCBjYXNlXG5cdCAgaWYoTElCUkFSWSAmJiBhID09PSBQICYmIGIgPT09IFdyYXBwZXIpcmV0dXJuIHRydWU7XG5cdCAgcmV0dXJuIHNhbWUoYSwgYik7XG5cdH07XG5cdHZhciBnZXRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKEMpe1xuXHQgIHZhciBTID0gYW5PYmplY3QoQylbU1BFQ0lFU107XG5cdCAgcmV0dXJuIFMgIT0gdW5kZWZpbmVkID8gUyA6IEM7XG5cdH07XG5cdHZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciB0aGVuO1xuXHQgIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcblx0fTtcblx0dmFyIG5vdGlmeSA9IGZ1bmN0aW9uKHJlY29yZCwgaXNSZWplY3Qpe1xuXHQgIGlmKHJlY29yZC5uKXJldHVybjtcblx0ICByZWNvcmQubiA9IHRydWU7XG5cdCAgdmFyIGNoYWluID0gcmVjb3JkLmM7XG5cdCAgYXNhcChmdW5jdGlvbigpe1xuXHQgICAgdmFyIHZhbHVlID0gcmVjb3JkLnZcblx0ICAgICAgLCBvayAgICA9IHJlY29yZC5zID09IDFcblx0ICAgICAgLCBpICAgICA9IDA7XG5cdCAgICB2YXIgcnVuID0gZnVuY3Rpb24ocmVhY3Qpe1xuXHQgICAgICB2YXIgY2IgPSBvayA/IHJlYWN0Lm9rIDogcmVhY3QuZmFpbFxuXHQgICAgICAgICwgcmV0LCB0aGVuO1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgIGlmKGNiKXtcblx0ICAgICAgICAgIGlmKCFvaylyZWNvcmQuaCA9IHRydWU7XG5cdCAgICAgICAgICByZXQgPSBjYiA9PT0gdHJ1ZSA/IHZhbHVlIDogY2IodmFsdWUpO1xuXHQgICAgICAgICAgaWYocmV0ID09PSByZWFjdC5QKXtcblx0ICAgICAgICAgICAgcmVhY3QucmVqKFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcblx0ICAgICAgICAgIH0gZWxzZSBpZih0aGVuID0gaXNUaGVuYWJsZShyZXQpKXtcblx0ICAgICAgICAgICAgdGhlbi5jYWxsKHJldCwgcmVhY3QucmVzLCByZWFjdC5yZWopO1xuXHQgICAgICAgICAgfSBlbHNlIHJlYWN0LnJlcyhyZXQpO1xuXHQgICAgICAgIH0gZWxzZSByZWFjdC5yZWoodmFsdWUpO1xuXHQgICAgICB9IGNhdGNoKGVycil7XG5cdCAgICAgICAgcmVhY3QucmVqKGVycik7XG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgICB3aGlsZShjaGFpbi5sZW5ndGggPiBpKXJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcblx0ICAgIGNoYWluLmxlbmd0aCA9IDA7XG5cdCAgICByZWNvcmQubiA9IGZhbHNlO1xuXHQgICAgaWYoaXNSZWplY3Qpc2V0VGltZW91dChmdW5jdGlvbigpe1xuXHQgICAgICB2YXIgcHJvbWlzZSA9IHJlY29yZC5wXG5cdCAgICAgICAgLCBoYW5kbGVyLCBjb25zb2xlO1xuXHQgICAgICBpZihpc1VuaGFuZGxlZChwcm9taXNlKSl7XG5cdCAgICAgICAgaWYoaXNOb2RlKXtcblx0ICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuXHQgICAgICAgIH0gZWxzZSBpZihoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKXtcblx0ICAgICAgICAgIGhhbmRsZXIoe3Byb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWV9KTtcblx0ICAgICAgICB9IGVsc2UgaWYoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcil7XG5cdCAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IHJlY29yZC5hID0gdW5kZWZpbmVkO1xuXHQgICAgfSwgMSk7XG5cdCAgfSk7XG5cdH07XG5cdHZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uKHByb21pc2Upe1xuXHQgIHZhciByZWNvcmQgPSBwcm9taXNlW1JFQ09SRF1cblx0ICAgICwgY2hhaW4gID0gcmVjb3JkLmEgfHwgcmVjb3JkLmNcblx0ICAgICwgaSAgICAgID0gMFxuXHQgICAgLCByZWFjdDtcblx0ICBpZihyZWNvcmQuaClyZXR1cm4gZmFsc2U7XG5cdCAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSl7XG5cdCAgICByZWFjdCA9IGNoYWluW2krK107XG5cdCAgICBpZihyZWFjdC5mYWlsIHx8ICFpc1VuaGFuZGxlZChyZWFjdC5QKSlyZXR1cm4gZmFsc2U7XG5cdCAgfSByZXR1cm4gdHJ1ZTtcblx0fTtcblx0dmFyICRyZWplY3QgPSBmdW5jdGlvbih2YWx1ZSl7XG5cdCAgdmFyIHJlY29yZCA9IHRoaXM7XG5cdCAgaWYocmVjb3JkLmQpcmV0dXJuO1xuXHQgIHJlY29yZC5kID0gdHJ1ZTtcblx0ICByZWNvcmQgPSByZWNvcmQuciB8fCByZWNvcmQ7IC8vIHVud3JhcFxuXHQgIHJlY29yZC52ID0gdmFsdWU7XG5cdCAgcmVjb3JkLnMgPSAyO1xuXHQgIHJlY29yZC5hID0gcmVjb3JkLmMuc2xpY2UoKTtcblx0ICBub3RpZnkocmVjb3JkLCB0cnVlKTtcblx0fTtcblx0dmFyICRyZXNvbHZlID0gZnVuY3Rpb24odmFsdWUpe1xuXHQgIHZhciByZWNvcmQgPSB0aGlzXG5cdCAgICAsIHRoZW47XG5cdCAgaWYocmVjb3JkLmQpcmV0dXJuO1xuXHQgIHJlY29yZC5kID0gdHJ1ZTtcblx0ICByZWNvcmQgPSByZWNvcmQuciB8fCByZWNvcmQ7IC8vIHVud3JhcFxuXHQgIHRyeSB7XG5cdCAgICBpZih0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpe1xuXHQgICAgICBhc2FwKGZ1bmN0aW9uKCl7XG5cdCAgICAgICAgdmFyIHdyYXBwZXIgPSB7cjogcmVjb3JkLCBkOiBmYWxzZX07IC8vIHdyYXBcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuXHQgICAgICAgIH0gY2F0Y2goZSl7XG5cdCAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJlY29yZC52ID0gdmFsdWU7XG5cdCAgICAgIHJlY29yZC5zID0gMTtcblx0ICAgICAgbm90aWZ5KHJlY29yZCwgZmFsc2UpO1xuXHQgICAgfVxuXHQgIH0gY2F0Y2goZSl7XG5cdCAgICAkcmVqZWN0LmNhbGwoe3I6IHJlY29yZCwgZDogZmFsc2V9LCBlKTsgLy8gd3JhcFxuXHQgIH1cblx0fTtcblxuXHQvLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuXHRpZighdXNlTmF0aXZlKXtcblx0ICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuXHQgIFAgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKXtcblx0ICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG5cdCAgICB2YXIgcmVjb3JkID0ge1xuXHQgICAgICBwOiBzdHJpY3ROZXcodGhpcywgUCwgUFJPTUlTRSksICAgICAgICAgLy8gPC0gcHJvbWlzZVxuXHQgICAgICBjOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG5cdCAgICAgIGE6IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuXHQgICAgICBzOiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcblx0ICAgICAgZDogZmFsc2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGRvbmVcblx0ICAgICAgdjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG5cdCAgICAgIGg6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBoYW5kbGVkIHJlamVjdGlvblxuXHQgICAgICBuOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gbm90aWZ5XG5cdCAgICB9O1xuXHQgICAgdGhpc1tSRUNPUkRdID0gcmVjb3JkO1xuXHQgICAgdHJ5IHtcblx0ICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCByZWNvcmQsIDEpLCBjdHgoJHJlamVjdCwgcmVjb3JkLCAxKSk7XG5cdCAgICB9IGNhdGNoKGVycil7XG5cdCAgICAgICRyZWplY3QuY2FsbChyZWNvcmQsIGVycik7XG5cdCAgICB9XG5cdCAgfTtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KShQLnByb3RvdHlwZSwge1xuXHQgICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcblx0ICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpe1xuXHQgICAgICB2YXIgUyA9IGFuT2JqZWN0KGFuT2JqZWN0KHRoaXMpLmNvbnN0cnVjdG9yKVtTUEVDSUVTXTtcblx0ICAgICAgdmFyIHJlYWN0ID0ge1xuXHQgICAgICAgIG9rOiAgIHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlLFxuXHQgICAgICAgIGZhaWw6IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgID8gb25SZWplY3RlZCAgOiBmYWxzZVxuXHQgICAgICB9O1xuXHQgICAgICB2YXIgcHJvbWlzZSA9IHJlYWN0LlAgPSBuZXcgKFMgIT0gdW5kZWZpbmVkID8gUyA6IFApKGZ1bmN0aW9uKHJlcywgcmVqKXtcblx0ICAgICAgICByZWFjdC5yZXMgPSByZXM7XG5cdCAgICAgICAgcmVhY3QucmVqID0gcmVqO1xuXHQgICAgICB9KTtcblx0ICAgICAgYUZ1bmN0aW9uKHJlYWN0LnJlcyk7XG5cdCAgICAgIGFGdW5jdGlvbihyZWFjdC5yZWopO1xuXHQgICAgICB2YXIgcmVjb3JkID0gdGhpc1tSRUNPUkRdO1xuXHQgICAgICByZWNvcmQuYy5wdXNoKHJlYWN0KTtcblx0ICAgICAgaWYocmVjb3JkLmEpcmVjb3JkLmEucHVzaChyZWFjdCk7XG5cdCAgICAgIGlmKHJlY29yZC5zKW5vdGlmeShyZWNvcmQsIGZhbHNlKTtcblx0ICAgICAgcmV0dXJuIHByb21pc2U7XG5cdCAgICB9LFxuXHQgICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcblx0ICAgICdjYXRjaCc6IGZ1bmN0aW9uKG9uUmVqZWN0ZWQpe1xuXHQgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG5cdCAgICB9XG5cdCAgfSk7XG5cdH1cblxuXHQvLyBleHBvcnRcblx0JGRlZigkZGVmLkcgKyAkZGVmLlcgKyAkZGVmLkYgKiAhdXNlTmF0aXZlLCB7UHJvbWlzZTogUH0pO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KShQLCBQUk9NSVNFKTtcblx0c3BlY2llcyhQKTtcblx0c3BlY2llcyhXcmFwcGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMilbUFJPTUlTRV0pO1xuXG5cdC8vIHN0YXRpY3Ncblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhdXNlTmF0aXZlLCBQUk9NSVNFLCB7XG5cdCAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3Qocilcblx0ICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKXtcblx0ICAgIHJldHVybiBuZXcgdGhpcyhmdW5jdGlvbihyZXMsIHJlail7IHJlaihyKTsgfSk7XG5cdCAgfVxuXHR9KTtcblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAoIXVzZU5hdGl2ZSB8fCB0ZXN0UmVzb2x2ZSh0cnVlKSksIFBST01JU0UsIHtcblx0ICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcblx0ICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpe1xuXHQgICAgcmV0dXJuIGlzUHJvbWlzZSh4KSAmJiBzYW1lQ29uc3RydWN0b3IoeC5jb25zdHJ1Y3RvciwgdGhpcylcblx0ICAgICAgPyB4IDogbmV3IHRoaXMoZnVuY3Rpb24ocmVzKXsgcmVzKHgpOyB9KTtcblx0ICB9XG5cdH0pO1xuXHQkZGVmKCRkZWYuUyArICRkZWYuRiAqICEodXNlTmF0aXZlICYmIF9fd2VicGFja19yZXF1aXJlX18oMzgpKGZ1bmN0aW9uKGl0ZXIpe1xuXHQgIFAuYWxsKGl0ZXIpWydjYXRjaCddKGZ1bmN0aW9uKCl7fSk7XG5cdH0pKSwgUFJPTUlTRSwge1xuXHQgIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuXHQgIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKXtcblx0ICAgIHZhciBDICAgICAgPSBnZXRDb25zdHJ1Y3Rvcih0aGlzKVxuXHQgICAgICAsIHZhbHVlcyA9IFtdO1xuXHQgICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uKHJlcywgcmVqKXtcblx0ICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCB2YWx1ZXMucHVzaCwgdmFsdWVzKTtcblx0ICAgICAgdmFyIHJlbWFpbmluZyA9IHZhbHVlcy5sZW5ndGhcblx0ICAgICAgICAsIHJlc3VsdHMgICA9IEFycmF5KHJlbWFpbmluZyk7XG5cdCAgICAgIGlmKHJlbWFpbmluZykkLmVhY2guY2FsbCh2YWx1ZXMsIGZ1bmN0aW9uKHByb21pc2UsIGluZGV4KXtcblx0ICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbih2YWx1ZSl7XG5cdCAgICAgICAgICByZXN1bHRzW2luZGV4XSA9IHZhbHVlO1xuXHQgICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzKHJlc3VsdHMpO1xuXHQgICAgICAgIH0sIHJlaik7XG5cdCAgICAgIH0pO1xuXHQgICAgICBlbHNlIHJlcyhyZXN1bHRzKTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cdCAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuXHQgIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpe1xuXHQgICAgdmFyIEMgPSBnZXRDb25zdHJ1Y3Rvcih0aGlzKTtcblx0ICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbihyZXMsIHJlail7XG5cdCAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24ocHJvbWlzZSl7XG5cdCAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4ocmVzLCByZWopO1xuXHQgICAgICB9KTtcblx0ICAgIH0pO1xuXHQgIH1cblx0fSk7XG5cbi8qKiovIH0sXG4vKiA2OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgQ29uc3RydWN0b3IsIG5hbWUpe1xuXHQgIGlmKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpdGhyb3cgVHlwZUVycm9yKG5hbWUgKyBcIjogdXNlIHRoZSAnbmV3JyBvcGVyYXRvciFcIik7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBjdHggICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cdCAgLCBjYWxsICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzApXG5cdCAgLCBpc0FycmF5SXRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpXG5cdCAgLCBhbk9iamVjdCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpXG5cdCAgLCB0b0xlbmd0aCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpXG5cdCAgLCBnZXRJdGVyRm4gICA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCl7XG5cdCAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihpdGVyYWJsZSlcblx0ICAgICwgZiAgICAgID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpXG5cdCAgICAsIGluZGV4ICA9IDBcblx0ICAgICwgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvcjtcblx0ICBpZih0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG5cdCAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG5cdCAgaWYoaXNBcnJheUl0ZXIoaXRlckZuKSlmb3IobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4Kyspe1xuXHQgICAgZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuXHQgIH0gZWxzZSBmb3IoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgKXtcblx0ICAgIGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDcxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cblx0LyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblx0dmFyIGdldERlc2MgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSkuZ2V0RGVzY1xuXHQgICwgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKVxuXHQgICwgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcblx0dmFyIGNoZWNrID0gZnVuY3Rpb24oTywgcHJvdG8pe1xuXHQgIGFuT2JqZWN0KE8pO1xuXHQgIGlmKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xuXHR9O1xuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cdCAgICBmdW5jdGlvbih0ZXN0LCBidWdneSwgc2V0KXtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KShGdW5jdGlvbi5jYWxsLCBnZXREZXNjKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuXHQgICAgICAgIHNldCh0ZXN0LCBbXSk7XG5cdCAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG5cdCAgICAgIH0gY2F0Y2goZSl7IGJ1Z2d5ID0gdHJ1ZTsgfVxuXHQgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pe1xuXHQgICAgICAgIGNoZWNrKE8sIHByb3RvKTtcblx0ICAgICAgICBpZihidWdneSlPLl9fcHJvdG9fXyA9IHByb3RvO1xuXHQgICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcblx0ICAgICAgICByZXR1cm4gTztcblx0ICAgICAgfTtcblx0ICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG5cdCAgY2hlY2s6IGNoZWNrXG5cdH07XG5cbi8qKiovIH0sXG4vKiA3MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSl7XG5cdCAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBTUEVDSUVTID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ3NwZWNpZXMnKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihDKXtcblx0ICBpZihfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSAmJiAhKFNQRUNJRVMgaW4gQykpJC5zZXREZXNjKEMsIFNQRUNJRVMsIHtcblx0ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0ICAgIGdldDogZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH1cblx0ICB9KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDc0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgZ2xvYmFsICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcclxuXHQgICwgbWFjcm90YXNrID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSkuc2V0XHJcblx0ICAsIE9ic2VydmVyICA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyXHJcblx0ICAsIHByb2Nlc3MgICA9IGdsb2JhbC5wcm9jZXNzXHJcblx0ICAsIGlzTm9kZSAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpKHByb2Nlc3MpID09ICdwcm9jZXNzJ1xyXG5cdCAgLCBoZWFkLCBsYXN0LCBub3RpZnk7XHJcblxyXG5cdHZhciBmbHVzaCA9IGZ1bmN0aW9uKCl7XHJcblx0ICB2YXIgcGFyZW50LCBkb21haW47XHJcblx0ICBpZihpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSl7XHJcblx0ICAgIHByb2Nlc3MuZG9tYWluID0gbnVsbDtcclxuXHQgICAgcGFyZW50LmV4aXQoKTtcclxuXHQgIH1cclxuXHQgIHdoaWxlKGhlYWQpe1xyXG5cdCAgICBkb21haW4gPSBoZWFkLmRvbWFpbjtcclxuXHQgICAgaWYoZG9tYWluKWRvbWFpbi5lbnRlcigpO1xyXG5cdCAgICBoZWFkLmZuLmNhbGwoKTsgLy8gPC0gY3VycmVudGx5IHdlIHVzZSBpdCBvbmx5IGZvciBQcm9taXNlIC0gdHJ5IC8gY2F0Y2ggbm90IHJlcXVpcmVkXHJcblx0ICAgIGlmKGRvbWFpbilkb21haW4uZXhpdCgpO1xyXG5cdCAgICBoZWFkID0gaGVhZC5uZXh0O1xyXG5cdCAgfSBsYXN0ID0gdW5kZWZpbmVkO1xyXG5cdCAgaWYocGFyZW50KXBhcmVudC5lbnRlcigpO1xyXG5cdH1cclxuXHJcblx0Ly8gTm9kZS5qc1xyXG5cdGlmKGlzTm9kZSl7XHJcblx0ICBub3RpZnkgPSBmdW5jdGlvbigpe1xyXG5cdCAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcclxuXHQgIH07XHJcblx0Ly8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyXHJcblx0fSBlbHNlIGlmKE9ic2VydmVyKXtcclxuXHQgIHZhciB0b2dnbGUgPSAxXHJcblx0ICAgICwgbm9kZSAgID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xyXG5cdCAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XHJcblx0ICBub3RpZnkgPSBmdW5jdGlvbigpe1xyXG5cdCAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAtdG9nZ2xlO1xyXG5cdCAgfTtcclxuXHQvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxyXG5cdC8vIC0gc2V0SW1tZWRpYXRlXHJcblx0Ly8gLSBNZXNzYWdlQ2hhbm5lbFxyXG5cdC8vIC0gd2luZG93LnBvc3RNZXNzYWdcclxuXHQvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxyXG5cdC8vIC0gc2V0VGltZW91dFxyXG5cdH0gZWxzZSB7XHJcblx0ICBub3RpZnkgPSBmdW5jdGlvbigpe1xyXG5cdCAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXHJcblx0ICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xyXG5cdCAgfTtcclxuXHR9XHJcblxyXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNhcChmbil7XHJcblx0ICB2YXIgdGFzayA9IHtmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCwgZG9tYWluOiBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW59O1xyXG5cdCAgaWYobGFzdClsYXN0Lm5leHQgPSB0YXNrO1xyXG5cdCAgaWYoIWhlYWQpe1xyXG5cdCAgICBoZWFkID0gdGFzaztcclxuXHQgICAgbm90aWZ5KCk7XHJcblx0ICB9IGxhc3QgPSB0YXNrO1xyXG5cdH07XG5cbi8qKiovIH0sXG4vKiA3NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgY3R4ICAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNylcblx0ICAsIGludm9rZSAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpXG5cdCAgLCBodG1sICAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KVxuXHQgICwgY2VsICAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OClcblx0ICAsIGdsb2JhbCAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cdCAgLCBwcm9jZXNzICAgICAgICAgICAgPSBnbG9iYWwucHJvY2Vzc1xuXHQgICwgc2V0VGFzayAgICAgICAgICAgID0gZ2xvYmFsLnNldEltbWVkaWF0ZVxuXHQgICwgY2xlYXJUYXNrICAgICAgICAgID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlXG5cdCAgLCBNZXNzYWdlQ2hhbm5lbCAgICAgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWxcblx0ICAsIGNvdW50ZXIgICAgICAgICAgICA9IDBcblx0ICAsIHF1ZXVlICAgICAgICAgICAgICA9IHt9XG5cdCAgLCBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJ1xuXHQgICwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cdHZhciBydW4gPSBmdW5jdGlvbigpe1xuXHQgIHZhciBpZCA9ICt0aGlzO1xuXHQgIGlmKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSl7XG5cdCAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG5cdCAgICBkZWxldGUgcXVldWVbaWRdO1xuXHQgICAgZm4oKTtcblx0ICB9XG5cdH07XG5cdHZhciBsaXN0bmVyID0gZnVuY3Rpb24oZXZlbnQpe1xuXHQgIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xuXHR9O1xuXHQvLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5cdGlmKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spe1xuXHQgIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pe1xuXHQgICAgdmFyIGFyZ3MgPSBbXSwgaSA9IDE7XG5cdCAgICB3aGlsZShhcmd1bWVudHMubGVuZ3RoID4gaSlhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuXHQgICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uKCl7XG5cdCAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcblx0ICAgIH07XG5cdCAgICBkZWZlcihjb3VudGVyKTtcblx0ICAgIHJldHVybiBjb3VudGVyO1xuXHQgIH07XG5cdCAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpe1xuXHQgICAgZGVsZXRlIHF1ZXVlW2lkXTtcblx0ICB9O1xuXHQgIC8vIE5vZGUuanMgMC44LVxuXHQgIGlmKF9fd2VicGFja19yZXF1aXJlX18oMzcpKHByb2Nlc3MpID09ICdwcm9jZXNzJyl7XG5cdCAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcblx0ICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuXHQgICAgfTtcblx0ICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG5cdCAgfSBlbHNlIGlmKE1lc3NhZ2VDaGFubmVsKXtcblx0ICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWw7XG5cdCAgICBwb3J0ICAgID0gY2hhbm5lbC5wb3J0Mjtcblx0ICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdG5lcjtcblx0ICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuXHQgIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuXHQgIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG5cdCAgfSBlbHNlIGlmKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0KXtcblx0ICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuXHQgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcblx0ICAgIH07XG5cdCAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RuZXIsIGZhbHNlKTtcblx0ICAvLyBJRTgtXG5cdCAgfSBlbHNlIGlmKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKXtcblx0ICAgIGRlZmVyID0gZnVuY3Rpb24oaWQpe1xuXHQgICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbigpe1xuXHQgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG5cdCAgICAgICAgcnVuLmNhbGwoaWQpO1xuXHQgICAgICB9O1xuXHQgICAgfTtcblx0ICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuXHQgIH0gZWxzZSB7XG5cdCAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcblx0ICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuXHQgICAgfTtcblx0ICB9XG5cdH1cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgc2V0OiAgIHNldFRhc2ssXG5cdCAgY2xlYXI6IGNsZWFyVGFza1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCBhcmdzLCB0aGF0KXtcblx0ICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG5cdCAgc3dpdGNoKGFyZ3MubGVuZ3RoKXtcblx0ICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuXHQgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuXHQgICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuXHQgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuXHQgICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuXHQgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuXHQgICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuXHQgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuXHQgICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuXHQgICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuXHQgIH0gcmV0dXJuICAgICAgICAgICAgICBmbi5hcHBseSh0aGF0LCBhcmdzKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDc3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpLmRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuLyoqKi8gfSxcbi8qIDc4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKVxuXHQgICwgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5kb2N1bWVudFxuXHQgIC8vIGluIG9sZCBJRSB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0J1xuXHQgICwgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyICRyZWRlZiA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHRhcmdldCwgc3JjKXtcblx0ICBmb3IodmFyIGtleSBpbiBzcmMpJHJlZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG5cdCAgcmV0dXJuIHRhcmdldDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDgwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oODEpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA4MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuT2JqZWN0LmtleXM7XG5cbi8qKiovIH0sXG4vKiA4MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG5cdHZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oODMpKCdrZXlzJywgZnVuY3Rpb24oJGtleXMpe1xuXHQgIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KXtcblx0ICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuXHQgIH07XG5cdH0pO1xuXG4vKioqLyB9LFxuLyogODMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKEtFWSwgZXhlYyl7XG5cdCAgdmFyICRkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICAgLCBmbiAgID0gKF9fd2VicGFja19yZXF1aXJlX18oMTIpLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXVxuXHQgICAgLCBleHAgID0ge307XG5cdCAgZXhwW0tFWV0gPSBleGVjKGZuKTtcblx0ICAkZGVmKCRkZWYuUyArICRkZWYuRiAqIF9fd2VicGFja19yZXF1aXJlX18oMTgpKGZ1bmN0aW9uKCl7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA4NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogODUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oODkpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLlNldDtcblxuLyoqKi8gfSxcbi8qIDg2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciBzdHJvbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KTtcblxuXHQvLyAyMy4yIFNldCBPYmplY3RzXG5cdF9fd2VicGFja19yZXF1aXJlX18oODgpKCdTZXQnLCBmdW5jdGlvbihnZXQpe1xuXHQgIHJldHVybiBmdW5jdGlvbiBTZXQoKXsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHNbMF0pOyB9O1xuXHR9LCB7XG5cdCAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG5cdCAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpe1xuXHQgICAgcmV0dXJuIHN0cm9uZy5kZWYodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuXHQgIH1cblx0fSwgc3Ryb25nKTtcblxuLyoqKi8gfSxcbi8qIDg3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgaGlkZSAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNClcblx0ICAsIGN0eCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cdCAgLCBzcGVjaWVzICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKVxuXHQgICwgc3RyaWN0TmV3ICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSlcblx0ICAsIGRlZmluZWQgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNylcblx0ICAsIGZvck9mICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzApXG5cdCAgLCBzdGVwICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KVxuXHQgICwgSUQgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMikoJ2lkJylcblx0ICAsICRoYXMgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpXG5cdCAgLCBpc09iamVjdCAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKVxuXHQgICwgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBpc09iamVjdFxuXHQgICwgU1VQUE9SVF9ERVNDID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNylcblx0ICAsIFNJWkUgICAgICAgICA9IFNVUFBPUlRfREVTQyA/ICdfcycgOiAnc2l6ZSdcblx0ICAsIGlkICAgICAgICAgICA9IDA7XG5cblx0dmFyIGZhc3RLZXkgPSBmdW5jdGlvbihpdCwgY3JlYXRlKXtcblx0ICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG5cdCAgaWYoIWlzT2JqZWN0KGl0KSlyZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuXHQgIGlmKCEkaGFzKGl0LCBJRCkpe1xuXHQgICAgLy8gY2FuJ3Qgc2V0IGlkIHRvIGZyb3plbiBvYmplY3Rcblx0ICAgIGlmKCFpc0V4dGVuc2libGUoaXQpKXJldHVybiAnRic7XG5cdCAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBpZFxuXHQgICAgaWYoIWNyZWF0ZSlyZXR1cm4gJ0UnO1xuXHQgICAgLy8gYWRkIG1pc3Npbmcgb2JqZWN0IGlkXG5cdCAgICBoaWRlKGl0LCBJRCwgKytpZCk7XG5cdCAgLy8gcmV0dXJuIG9iamVjdCBpZCB3aXRoIHByZWZpeFxuXHQgIH0gcmV0dXJuICdPJyArIGl0W0lEXTtcblx0fTtcblxuXHR2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbih0aGF0LCBrZXkpe1xuXHQgIC8vIGZhc3QgY2FzZVxuXHQgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KSwgZW50cnk7XG5cdCAgaWYoaW5kZXggIT09ICdGJylyZXR1cm4gdGhhdC5faVtpbmRleF07XG5cdCAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG5cdCAgZm9yKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG5cdCAgICBpZihlbnRyeS5rID09IGtleSlyZXR1cm4gZW50cnk7XG5cdCAgfVxuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKXtcblx0ICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbih0aGF0LCBpdGVyYWJsZSl7XG5cdCAgICAgIHN0cmljdE5ldyh0aGF0LCBDLCBOQU1FKTtcblx0ICAgICAgdGhhdC5faSA9ICQuY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuXHQgICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAgIC8vIGZpcnN0IGVudHJ5XG5cdCAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgICAgLy8gbGFzdCBlbnRyeVxuXHQgICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAgIC8vIHNpemVcblx0ICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcblx0ICAgIH0pO1xuXHQgICAgX193ZWJwYWNrX3JlcXVpcmVfXyg3OSkoQy5wcm90b3R5cGUsIHtcblx0ICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG5cdCAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuXHQgICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKXtcblx0ICAgICAgICBmb3IodmFyIHRoYXQgPSB0aGlzLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKXtcblx0ICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuXHQgICAgICAgICAgaWYoZW50cnkucCllbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIHRoYXRbU0laRV0gPSAwO1xuXHQgICAgICB9LFxuXHQgICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG5cdCAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuXHQgICAgICAnZGVsZXRlJzogZnVuY3Rpb24oa2V5KXtcblx0ICAgICAgICB2YXIgdGhhdCAgPSB0aGlzXG5cdCAgICAgICAgICAsIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcblx0ICAgICAgICBpZihlbnRyeSl7XG5cdCAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5cblx0ICAgICAgICAgICAgLCBwcmV2ID0gZW50cnkucDtcblx0ICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuXHQgICAgICAgICAgZW50cnkuciA9IHRydWU7XG5cdCAgICAgICAgICBpZihwcmV2KXByZXYubiA9IG5leHQ7XG5cdCAgICAgICAgICBpZihuZXh0KW5leHQucCA9IHByZXY7XG5cdCAgICAgICAgICBpZih0aGF0Ll9mID09IGVudHJ5KXRoYXQuX2YgPSBuZXh0O1xuXHQgICAgICAgICAgaWYodGhhdC5fbCA9PSBlbnRyeSl0aGF0Ll9sID0gcHJldjtcblx0ICAgICAgICAgIHRoYXRbU0laRV0tLTtcblx0ICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuXHQgICAgICB9LFxuXHQgICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcblx0ICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG5cdCAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiwgdGhhdCA9IHVuZGVmaW5lZCAqLyl7XG5cdCAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdLCAzKVxuXHQgICAgICAgICAgLCBlbnRyeTtcblx0ICAgICAgICB3aGlsZShlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2Ype1xuXHQgICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcblx0ICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuXHQgICAgICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG5cdCAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuXHQgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpe1xuXHQgICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgaWYoU1VQUE9SVF9ERVNDKSQuc2V0RGVzYyhDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24oKXtcblx0ICAgICAgICByZXR1cm4gZGVmaW5lZCh0aGlzW1NJWkVdKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gQztcblx0ICB9LFxuXHQgIGRlZjogZnVuY3Rpb24odGhhdCwga2V5LCB2YWx1ZSl7XG5cdCAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpXG5cdCAgICAgICwgcHJldiwgaW5kZXg7XG5cdCAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcblx0ICAgIGlmKGVudHJ5KXtcblx0ICAgICAgZW50cnkudiA9IHZhbHVlO1xuXHQgICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuXHQgICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuXHQgICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcblx0ICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcblx0ICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcblx0ICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuXHQgICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG5cdCAgICAgIH07XG5cdCAgICAgIGlmKCF0aGF0Ll9mKXRoYXQuX2YgPSBlbnRyeTtcblx0ICAgICAgaWYocHJldilwcmV2Lm4gPSBlbnRyeTtcblx0ICAgICAgdGhhdFtTSVpFXSsrO1xuXHQgICAgICAvLyBhZGQgdG8gaW5kZXhcblx0ICAgICAgaWYoaW5kZXggIT09ICdGJyl0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuXHQgICAgfSByZXR1cm4gdGhhdDtcblx0ICB9LFxuXHQgIGdldEVudHJ5OiBnZXRFbnRyeSxcblx0ICBzZXRTdHJvbmc6IGZ1bmN0aW9uKEMsIE5BTUUsIElTX01BUCl7XG5cdCAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cblx0ICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcblx0ICAgIF9fd2VicGFja19yZXF1aXJlX18oOCkoQywgTkFNRSwgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuXHQgICAgICB0aGlzLl90ID0gaXRlcmF0ZWQ7ICAvLyB0YXJnZXRcblx0ICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgLy8ga2luZFxuXHQgICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAvLyBwcmV2aW91c1xuXHQgICAgfSwgZnVuY3Rpb24oKXtcblx0ICAgICAgdmFyIHRoYXQgID0gdGhpc1xuXHQgICAgICAgICwga2luZCAgPSB0aGF0Ll9rXG5cdCAgICAgICAgLCBlbnRyeSA9IHRoYXQuX2w7XG5cdCAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuXHQgICAgICB3aGlsZShlbnRyeSAmJiBlbnRyeS5yKWVudHJ5ID0gZW50cnkucDtcblx0ICAgICAgLy8gZ2V0IG5leHQgZW50cnlcblx0ICAgICAgaWYoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSl7XG5cdCAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cblx0ICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIHJldHVybiBzdGVwKDEpO1xuXHQgICAgICB9XG5cdCAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcblx0ICAgICAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcblx0ICAgICAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcblx0ICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcblx0ICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnICwgIUlTX01BUCwgdHJ1ZSk7XG5cblx0ICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG5cdCAgICBzcGVjaWVzKEMpO1xuXHQgICAgc3BlY2llcyhfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKVtOQU1FXSk7IC8vIGZvciB3cmFwcGVyXG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogODggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICQgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgJGRlZiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgLCBoaWRlICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNClcblx0ICAsIGZvck9mICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKVxuXHQgICwgc3RyaWN0TmV3ICA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspe1xuXHQgIHZhciBCYXNlICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpW05BTUVdXG5cdCAgICAsIEMgICAgID0gQmFzZVxuXHQgICAgLCBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCdcblx0ICAgICwgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlXG5cdCAgICAsIE8gICAgID0ge307XG5cdCAgaWYoIV9fd2VicGFja19yZXF1aXJlX18oMTcpIHx8IHR5cGVvZiBDICE9ICdmdW5jdGlvbidcblx0ICAgIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KShmdW5jdGlvbigpeyBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7IH0pKVxuXHQgICl7XG5cdCAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuXHQgICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcblx0ICAgIF9fd2VicGFja19yZXF1aXJlX18oNzkpKEMucHJvdG90eXBlLCBtZXRob2RzKTtcblx0ICB9IGVsc2Uge1xuXHQgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24odGFyZ2V0LCBpdGVyYWJsZSl7XG5cdCAgICAgIHN0cmljdE5ldyh0YXJnZXQsIEMsIE5BTUUpO1xuXHQgICAgICB0YXJnZXQuX2MgPSBuZXcgQmFzZTtcblx0ICAgICAgaWYoaXRlcmFibGUgIT0gdW5kZWZpbmVkKWZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRhcmdldFtBRERFUl0sIHRhcmdldCk7XG5cdCAgICB9KTtcblx0ICAgICQuZWFjaC5jYWxsKCdhZGQsY2xlYXIsZGVsZXRlLGZvckVhY2gsZ2V0LGhhcyxzZXQsa2V5cyx2YWx1ZXMsZW50cmllcycuc3BsaXQoJywnKSxmdW5jdGlvbihLRVkpe1xuXHQgICAgICB2YXIgY2hhaW4gPSBLRVkgPT0gJ2FkZCcgfHwgS0VZID09ICdzZXQnO1xuXHQgICAgICBpZihLRVkgaW4gcHJvdG8gJiYgIShJU19XRUFLICYmIEtFWSA9PSAnY2xlYXInKSloaWRlKEMucHJvdG90eXBlLCBLRVksIGZ1bmN0aW9uKGEsIGIpe1xuXHQgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9jW0tFWV0oYSA9PT0gMCA/IDAgOiBhLCBiKTtcblx0ICAgICAgICByZXR1cm4gY2hhaW4gPyB0aGlzIDogcmVzdWx0O1xuXHQgICAgICB9KTtcblx0ICAgIH0pO1xuXHQgICAgaWYoJ3NpemUnIGluIHByb3RvKSQuc2V0RGVzYyhDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24oKXtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fYy5zaXplO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KShDLCBOQU1FKTtcblxuXHQgIE9bTkFNRV0gPSBDO1xuXHQgICRkZWYoJGRlZi5HICsgJGRlZi5XICsgJGRlZi5GLCBPKTtcblxuXHQgIGlmKCFJU19XRUFLKWNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuXHQgIHJldHVybiBDO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogODkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cblx0dmFyICRkZWYgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0JGRlZigkZGVmLlAsICdTZXQnLCB7dG9KU09OOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDkwKSgnU2V0Jyl9KTtcblxuLyoqKi8gfSxcbi8qIDkwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG5cdHZhciBmb3JPZiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MClcblx0ICAsIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihOQU1FKXtcblx0ICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCl7XG5cdCAgICBpZihjbGFzc29mKHRoaXMpICE9IE5BTUUpdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcblx0ICAgIHZhciBhcnIgPSBbXTtcblx0ICAgIGZvck9mKHRoaXMsIGZhbHNlLCBhcnIucHVzaCwgYXJyKTtcblx0ICAgIHJldHVybiBhcnI7XG5cdCAgfTtcblx0fTtcblxuLyoqKi8gfVxuLyoqKioqKi8gXSlcbn0pO1xuOyIsIm1vZHVsZS5leHBvcnRzID0gREc7IiwibW9kdWxlLmV4cG9ydHMgPSBncm9rOyIsIm1vZHVsZS5leHBvcnRzID0gcnhqczsiLCJtb2R1bGUuZXhwb3J0cyA9IHVpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmNcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSBzY3JpcHRVcmwgPSBzY3JpcHRzW3NjcmlwdHMubGVuZ3RoIC0gMV0uc3JjXG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdFwidGVzdFwiOiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvcGFja2FnZS10ZXN0LnRzXCIpO1xuIiwiIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9
12231
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDak9LO0FBQ3pDLGtDQUFrQyx5REFBYztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7Ozs7Ozs7Ozs7Ozs7O0FDMUJwQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQzhCO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdCQUFnQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTCxJQUFJLHdFQUFJO0FBQ1I7QUFDQSxLQUFLO0FBQ0wsQ0FBQztBQUNNO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsUUFBUSwwRUFBTSxpQkFBaUIsa0VBQXdCO0FBQ3ZELEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsUUFBUSwwRUFBTSxpQkFBaUIsa0VBQXdCO0FBQ3ZELFFBQVEsMEVBQU0sWUFBWSx1REFBYTtBQUN2QztBQUNBLFlBQVksMEVBQU07QUFDbEIsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25SQSxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDb0U7QUFDRDtBQUM3QjtBQUN0QztBQUNPLHFCQUFxQixvREFBVTtBQUN0Qyw0RUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw4REFBb0I7QUFDdEMsb0JBQW9CLDhEQUFvQjtBQUN4QztBQUNBLElBQUksd0VBQUk7QUFDUixjQUFjLDREQUFvQjtBQUNsQyxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSLGNBQWMseURBQWlCO0FBQy9CLEtBQUs7QUFDTCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakNELGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUMyRjtBQUNqRDtBQUNKO0FBQ2lDO0FBQ3ZFLDRFQUFRO0FBQ1I7QUFDQSxJQUFJLDBFQUFNO0FBQ1Y7QUFDQSxLQUFLO0FBQ0wsSUFBSSx5RUFBSztBQUNUO0FBQ0EsS0FBSztBQUNMLElBQUksd0VBQUk7QUFDUjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUNBQW1DLG9FQUEwQjtBQUM3RCx1QkFBdUIscURBQVc7QUFDbEM7QUFDQSxZQUFZLDBFQUFNO0FBQ2xCO0FBQ0EsdUJBQXVCLGlFQUF1QjtBQUM5QztBQUNBLGtCQUFrQix1RUFBNkI7QUFDL0M7QUFDQTtBQUNBLDRCQUE0QixrQkFBa0IsWUFBWSxpQkFBaUIsdURBQWEsRUFBRTtBQUMxRixrQ0FBa0Msa0NBQWtDO0FBQ3BFLFlBQVksMEVBQU0sb0JBQW9CLGtFQUF3QjtBQUM5RCxZQUFZLDBFQUFNLGtCQUFrQix1REFBYTtBQUNqRCxZQUFZLDBFQUFNO0FBQ2xCO0FBQ0Esb0NBQW9DLHNFQUE0QjtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDBFQUFNLG9CQUFvQixrRUFBd0I7QUFDOUQsWUFBWSwwRUFBTSxrQkFBa0IsdURBQWE7QUFDakQsWUFBWSwwRUFBTTtBQUNsQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQ3JERCxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDb0Y7QUFDNUI7QUFDaEI7QUFDeEM7QUFDQSw0RUFBUTtBQUNSO0FBQ0EsSUFBSSwwRUFBTTtBQUNWLDRCQUE0QixxREFBYTtBQUN6QyxLQUFLO0FBQ0wsSUFBSSx3RUFBSTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixvRUFBYTtBQUN2QyxRQUFRLDBFQUFNO0FBQ2QsUUFBUSwwRUFBTTtBQUNkLEtBQUs7QUFDTCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzdCRCxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDb0U7QUFDcEUsNEVBQVE7QUFDUiw0QkFBNEIsd0ZBQXdGO0FBQ3BILDRCQUE0QixxRUFBcUU7QUFDakcsSUFBSSx3RUFBSSxpRUFBaUUsaUNBQWlDO0FBQzFHLElBQUksd0VBQUksaUVBQWlFLGlDQUFpQztBQUMxRyxDQUFDO0FBQ007QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2QkEsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ3NDO0FBQ0k7QUFDa0I7QUFDSztBQUN0QjtBQUNwQztBQUNQO0FBQ0EscUJBQXFCLG9FQUF5QjtBQUM5QyxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQSxtQkFBbUIsOERBQW9CO0FBQ3ZDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpRUFBdUI7QUFDNUM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDTztBQUNQLElBQUksMEVBQU07QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCO0FBQ087QUFDUDtBQUNBLDZCQUE2Qiw2RUFBUztBQUN0QyxRQUFRLDBFQUFNO0FBQ2QsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0REEsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQzBDO0FBQ25DO0FBQ1A7QUFDQTtBQUNBLGtDQUFrQyw2REFBbUI7QUFDckQsd0JBQXdCLHFCQUFxQjtBQUM3Qyw0QkFBNEIsd0JBQXdCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFdBQVc7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQSwyREFBMkQ7QUFDM0Q7QUFDQTtBQUNBLHdCQUF3QixXQUFXO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IscUJBQXFCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDLCtGQUErRjtBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQkFBbUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRkFBaUY7QUFDakY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQSx5QkFBeUIsb0JBQW9CO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QyxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyVWlDO0FBQ0s7QUFDc0M7QUFDRTtBQUNMO0FBQ0Y7QUFDakM7QUFDdEMsZ0JBQWdCLHFEQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGlHQUE2QjtBQUNoRDtBQUNBLG1CQUFtQixxR0FBZ0M7QUFDbkQ7QUFDQSxtQkFBbUIscUdBQWdDO0FBQ25EO0FBQ0EsbUJBQW1CLHFHQUFnQztBQUNuRDtBQUNBO0FBQ0EsbUJBQW1CLHlGQUF3QjtBQUMzQztBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpQkFBaUIsRUFBRSxJQUFJO0FBQy9DO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVywwQkFBMEI7QUFDckMsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkIsV0FBVyxTQUFTO0FBQ3BCLFdBQVcsU0FBUztBQUNwQixXQUFXLFFBQVE7QUFDbkIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxnREFBZ0QsNkRBQW1CO0FBQzFFLGlCQUFpQjtBQUNqQixxQkFBcUIsT0FBTyxnRUFBMEI7QUFDdEQsMEJBQTBCO0FBQzFCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxlQUFlLDBCQUEwQjtBQUN6QyxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZUFBZSxhQUFhO0FBQzVCLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCx1REFBYTtBQUM3RDtBQUNBLHVCQUF1QixnREFBTSxPQUFPLFNBQVMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE9BQU87QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsaURBQWlEO0FBQ3JHO0FBQ0E7QUFDQSxtQ0FBbUMsb0RBQVUsd0JBQXdCLFNBQVMsZ0JBQWdCO0FBQzlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsdURBQWE7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELHVEQUFhO0FBQ25FO0FBQ0E7QUFDQSxpQ0FBaUMsNkZBQW1CLG1EQUFtRDtBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzNKTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0NBQXNDO0FBQ2hDO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxnQ0FBZ0M7QUFDMUI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxvQkFBb0I7QUFDZDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyw4QkFBOEI7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0EsQ0FBQyxzQkFBc0I7QUFDaEI7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsWUFBWSw2R0FBNkc7QUFDekgsWUFBWSx3R0FBd0c7QUFDcEgsV0FBVyxtR0FBbUc7QUFDOUcsWUFBWSxvRUFBb0U7QUFDaEY7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFdBQVcsMERBQTBEO0FBQ3JFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekRzQztBQUNtQjtBQUN6RDtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEI7QUFDTztBQUNQLDBCQUEwQixrRUFBaUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLHdEQUFjO0FBQzlDLDJCQUEyQix3REFBYztBQUN6QyxJQUFJLG1EQUFTO0FBQ2IsYUFBYSxnREFBTTtBQUNuQixRQUFRLCtDQUFLO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25DQSxpQkFBaUIsU0FBSSxJQUFJLFNBQUk7QUFDN0IsNEJBQTRCLCtEQUErRCxpQkFBaUI7QUFDNUc7QUFDQSxvQ0FBb0MsTUFBTSwrQkFBK0IsWUFBWTtBQUNyRixtQ0FBbUMsTUFBTSxtQ0FBbUMsWUFBWTtBQUN4RixnQ0FBZ0M7QUFDaEM7QUFDQSxLQUFLO0FBQ0w7QUFDc0M7QUFDdEM7QUFDbUM7QUFDbUQ7QUFDdEY7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0EsdURBQXVELE1BQU0sSUFBSSxFQUFFO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLFNBQVM7QUFDcEIsWUFBWSxvQkFBb0I7QUFDaEM7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxzR0FBNEI7QUFDNUU7QUFDQSw4QkFBOEIsdURBQUs7QUFDbkM7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsK0RBQXFCLFFBQVEsWUFBWTtBQUNoRTtBQUNBLHVDQUF1Qyx1REFBYTtBQUNwRDtBQUNBLHNCQUFzQix1REFBYTtBQUNuQyx5QkFBeUIsa0VBQXdCO0FBQ2pEO0FBQ0EsS0FBSztBQUNMO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsb0JBQW9CO0FBQ2hEO0FBQ0EsZ0NBQWdDLCtEQUFxQjtBQUNyRCxzREFBc0QsRUFBRTtBQUN4RDtBQUNBO0FBQ0EsbURBQW1ELEdBQUcsUUFBUSxNQUFNO0FBQ3BFO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRnNDO0FBQ2lDO0FBQ3ZFO0FBQ087QUFDUDtBQUNBO0FBQ0Esb0RBQW9ELHVEQUFhO0FBQ2pFO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCLDJCQUEyQjtBQUMzQixnQkFBZ0I7QUFDaEIsb0JBQW9CO0FBQ3BCLGVBQWU7QUFDZiw4QkFBOEI7QUFDOUIsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3QixjQUFjO0FBQ2QsY0FBYztBQUNkLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0EsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNERBQWtCO0FBQzVDO0FBQ0EseUJBQXlCLHVEQUFhO0FBQ3RDO0FBQ0E7QUFDQSw2QkFBNkIsK0RBQXFCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QixlQUFlLFFBQVE7QUFDdkIsZ0JBQWdCLGtCQUFrQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsaUdBQXVCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsK0JBQStCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkIsZUFBZSxRQUFRO0FBQ3ZCLGdCQUFnQix3QkFBd0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLGlHQUF1QjtBQUN2RCw4Q0FBOEM7QUFDOUMsbUNBQW1DO0FBQ25DLCtDQUErQztBQUMvQywrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLHdDQUF3QztBQUN4Qyx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsK0JBQStCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsc0dBQTRCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGdDQUFnQztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLHNHQUE0QjtBQUNyRCw4Q0FBOEM7QUFDOUMsbUNBQW1DO0FBQ25DLCtDQUErQztBQUMvQywrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBLHdDQUF3QztBQUN4Qyx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsK0JBQStCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QixlQUFlLGVBQWU7QUFDOUIsZ0JBQWdCLDBCQUEwQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdFFBLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNzQztBQUNBO0FBQ3VEO0FBQ2pCO0FBQ3JFO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHdCQUF3QjtBQUNoRCwyQkFBMkIsMkdBQXlCLENBQUMseUdBQXlDO0FBQzlGLGVBQWUsNERBQWtCLENBQUMsOERBQW9CO0FBQ3RELEtBQUs7QUFDTDtBQUNPO0FBQ1Asc0NBQXNDLGlEQUFPO0FBQzdDLHdCQUF3QixpREFBTztBQUMvQixRQUFRLG9EQUFVO0FBQ2xCLFFBQVEsb0RBQVU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG9EQUFVO0FBQzlCLHlCQUF5QixvREFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsaURBQU87QUFDdEQ7QUFDQTtBQUNBLGFBQWEsU0FBUyxzQkFBc0I7QUFDNUMsS0FBSztBQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ0EsaUJBQWlCLFNBQUksSUFBSSxTQUFJO0FBQzdCLDRCQUE0QiwrREFBK0QsaUJBQWlCO0FBQzVHO0FBQ0Esb0NBQW9DLE1BQU0sK0JBQStCLFlBQVk7QUFDckYsbUNBQW1DLE1BQU0sbUNBQW1DLFlBQVk7QUFDeEYsZ0NBQWdDO0FBQ2hDO0FBQ0EsS0FBSztBQUNMO0FBQ3NDO0FBQ3NDO0FBQ3FCO0FBQzFGO0FBQ1A7QUFDQTtBQUNBLHNDQUFzQyx1REFBYTtBQUNuRDtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsNkZBQTBCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLCtHQUFvQztBQUM5RSxxRUFBcUUsb0VBQTBCO0FBQy9GLGlCQUFpQix5REFBeUQsdURBQWE7QUFDdkYsS0FBSztBQUNMO0FBQ087QUFDUDtBQUNBO0FBQ0EsK0JBQStCLEdBQUcsR0FBRyxXQUFXO0FBQ2hEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BDc0M7QUFDaUM7QUFDN0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNQLDJCQUEyQix1REFBYTtBQUN4QztBQUNBLHlCQUF5Qiw2RkFBbUI7QUFDNUM7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBLG9CQUFvQiw0REFBa0IsWUFBWSxhQUFhO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekNBLGlCQUFpQixTQUFJLElBQUksU0FBSTtBQUM3Qiw0QkFBNEIsK0RBQStELGlCQUFpQjtBQUM1RztBQUNBLG9DQUFvQyxNQUFNLCtCQUErQixZQUFZO0FBQ3JGLG1DQUFtQyxNQUFNLG1DQUFtQyxZQUFZO0FBQ3hGLGdDQUFnQztBQUNoQztBQUNBLEtBQUs7QUFDTDtBQUNzQztBQUNBO0FBQ2dDO0FBQ3RFLFlBQVksZ0ZBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sOEJBQThCLHFEQUFXO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsNkRBQTZEO0FBQ3BJLHNFQUFzRSw2QkFBNkI7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsNkZBQTZGO0FBQ2pILG9CQUFvQiw2RkFBNkY7QUFDakg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsMkJBQTJCLDBEQUFnQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxRUFBcUUsMERBQWdCO0FBQ3JGO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RSxxQ0FBcUM7QUFDNUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsbUNBQW1DLFlBQVksT0FBTyxFQUFFLCtCQUErQixHQUFHO0FBQ3ZJO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQywyQkFBMkI7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixrREFBUTtBQUN0QztBQUNBO0FBQ0EsZ0RBQWdELGdEQUFNO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZ0RBQU0sZ0JBQWdCLE9BQU8sRUFBRSxvQkFBb0I7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDRDQUE0QztBQUM5RSx3QkFBd0IsZ0RBQU0sb0JBQW9CLFVBQVUsdUJBQXVCLEdBQUc7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsNEJBQTRCO0FBQ3pELGlDQUFpQyw2QkFBNkI7QUFDOUQ7QUFDQSxpRUFBaUUsVUFBVTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsSUFBSSxPQUFPLEtBQUs7QUFDL0Q7QUFDQTs7Ozs7Ozs7Ozs7QUM5T0E7QUFDQSxJQUFJLElBQXlEO0FBQzdEO0FBQ0EsTUFBTSxFQUttQjtBQUN6QixDQUFDO0FBQ0QscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsOEJBQW1COztBQUV0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwRUFBMEUsOEJBQW1COztBQUU3RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxVQUFVLDhCQUFtQjs7QUFFN0I7QUFDQSxVQUFVLDhCQUFtQjs7QUFFN0I7QUFDQSxVQUFVLDhCQUFtQjs7QUFFN0I7QUFDQSxpQkFBaUIsOEJBQW1CO0FBQ3BDLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsK0JBQW1COztBQUVuRDs7QUFFQSwwQkFBMEIsK0JBQW1COztBQUU3QyxzQkFBc0IsK0JBQW1COztBQUV6Qyx3QkFBd0IsK0JBQW1COztBQUUzQyxvQkFBb0IsK0JBQW1COztBQUV2QywyQkFBMkIsK0JBQW1COztBQUU5QyxvQkFBb0IsK0JBQW1COztBQUV2QyxZQUFZLCtCQUFtQjs7QUFFL0IsZ0JBQWdCLCtCQUFtQjs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsZUFBZTtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0RUFBNEUsZUFBZTtBQUMzRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEUsZUFBZTtBQUN6RjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxLQUFLLEVBQUUsRUFHVjs7QUFFVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLEtBQUssRUFBRSxFQUdWOztBQUVWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRFQUE0RSxlQUFlO0FBQzNGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJGQUEyRixlQUFlO0FBQzFHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0EsMkVBQTJFLGVBQWU7QUFDMUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0EsMkVBQTJFLGVBQWU7QUFDMUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0EsK0ZBQStGLGVBQWU7QUFDOUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2REFBNkQsc0VBQXNFO0FBQ25JOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSixFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsc0VBQXNFO0FBQy9IOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsc0VBQXNFO0FBQy9IOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsc0VBQXNFO0FBQy9IOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQsc0VBQXNFO0FBQ2pJOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQsc0VBQXNFO0FBQy9IOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseURBQXlELHNFQUFzRTtBQUMvSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLEtBQUssRUFBRSxFQUdWOztBQUVWO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTtBQUNGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7QUFDQTtBQUNBOztBQUVBLGFBQWE7O0FBRWI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EOztBQUVBLG1CQUFtQixnQ0FBbUI7O0FBRXRDO0FBQ0E7QUFDQSwrQ0FBK0MsZ0JBQWdCOztBQUUvRDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsb0JBQW9CLFdBQVcsZ0NBQW1COztBQUVsRCxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxDQUFDLGdDQUFtQjtBQUNwQixDQUFDLGdDQUFtQjtBQUNwQixrQkFBa0IsZ0NBQW1COztBQUVyQyxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLFlBQVksZ0NBQW1COztBQUUvQjtBQUNBLENBQUMsZ0NBQW1CO0FBQ3BCLCtCQUErQjtBQUMvQiwrQkFBK0I7QUFDL0I7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBO0FBQ0EsaUJBQWlCLGdDQUFtQjtBQUNwQyxpQkFBaUIsZ0NBQW1CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQ7QUFDQSx1QkFBdUIsZ0NBQW1CO0FBQzFDLHVCQUF1QixnQ0FBbUI7QUFDMUMsdUJBQXVCLGdDQUFtQjtBQUMxQyx1QkFBdUIsZ0NBQW1CO0FBQzFDLHVCQUF1QixnQ0FBbUI7QUFDMUMsdUJBQXVCLGdDQUFtQjtBQUMxQyx1QkFBdUIsZ0NBQW1CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0EsR0FBRyxnQ0FBbUI7QUFDdEI7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyw4Q0FBOEM7QUFDOUMsT0FBTywyQkFBMkI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixnQ0FBbUI7QUFDaEQ7QUFDQSxLQUFLLGdDQUFtQjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5ELGlCQUFpQixnQ0FBbUI7QUFDcEMsaUJBQWlCLGdDQUFtQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLGtFQUFrRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZDs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekMsT0FBTztBQUNQO0FBQ0E7O0FBRUEsOEJBQThCO0FBQzlCLHVDQUF1Qzs7QUFFdkMsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsa0JBQWtCLGdDQUFtQjs7QUFFckMsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsa0JBQWtCLGdDQUFtQjtBQUNyQyxrQkFBa0IsZ0NBQW1CO0FBQ3JDLGtCQUFrQixnQ0FBbUI7QUFDckM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLG1CQUFtQixnQ0FBbUI7QUFDdEMsa0NBQWtDLFFBQVEsaUJBQWlCLFlBQVk7QUFDdkUsRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsY0FBYyxnQ0FBbUI7QUFDakMsY0FBYyxnQ0FBbUI7QUFDakM7QUFDQTtBQUNBLDBDQUEwQyxnQ0FBbUI7QUFDN0Q7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsY0FBYyxnQ0FBbUI7QUFDakM7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLFNBQVMsZ0NBQW1CO0FBQzVCOztBQUVBO0FBQ0EsQ0FBQyxnQ0FBbUIsd0JBQXdCLGdDQUFtQiw4QkFBOEIsY0FBYzs7QUFFM0c7QUFDQSx3REFBd0QsTUFBTSxnQ0FBbUIsYUFBYTtBQUM5RixHQUFHLGdDQUFtQjtBQUN0Qjs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxZQUFZLGdDQUFtQjtBQUMvQixZQUFZLGdDQUFtQjtBQUMvQixZQUFZLGdDQUFtQjs7QUFFL0I7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EO0FBQ0EsbUJBQW1CLGdDQUFtQjtBQUN0QyxtQkFBbUIsZ0NBQW1CO0FBQ3RDLG1CQUFtQixnQ0FBbUI7QUFDdEMsbUJBQW1CLGdDQUFtQjtBQUN0QyxtQkFBbUIsZ0NBQW1CO0FBQ3RDLG1CQUFtQixnQ0FBbUI7QUFDdEMsbUJBQW1CLGdDQUFtQjtBQUN0Qyx5QkFBeUIsZ0NBQW1CLHFCQUFxQixtQkFBbUI7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELGdDQUFnQztBQUN0RjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRixPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLGlCQUFpQixnQ0FBbUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EO0FBQ0EsZUFBZSxnQ0FBbUI7QUFDbEM7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EO0FBQ0EsZ0JBQWdCLGdDQUFtQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5ELGdCQUFnQixnQ0FBbUI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EO0FBQ0EsaUJBQWlCLGdDQUFtQjtBQUNwQyxpQkFBaUIsZ0NBQW1CO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLGlCQUFpQixnQ0FBbUI7QUFDcEM7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxpQkFBaUIsZ0NBQW1CO0FBQ3BDLGlCQUFpQixnQ0FBbUI7QUFDcEMsaUJBQWlCLGdDQUFtQjtBQUNwQyxrQkFBa0IsZ0NBQW1CO0FBQ3JDO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQ7QUFDQSxXQUFXLGdDQUFtQjtBQUM5QixXQUFXLGdDQUFtQjtBQUM5QjtBQUNBLDJCQUEyQixtQkFBbUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGtCQUFrQjs7QUFFbEI7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5ELHVCQUF1QixnQ0FBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLGlDQUFpQyxVQUFVO0FBQzNDLEdBQUcsVUFBVTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix3Q0FBd0M7QUFDeEM7QUFDQSxLQUFLLFVBQVU7QUFDZjtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EOztBQUVBLG9CQUFvQixnQ0FBbUI7O0FBRXZDLG1CQUFtQixnQ0FBbUI7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QywrQkFBK0I7QUFDM0U7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsb0JBQW9CLFdBQVcsZ0NBQW1COztBQUVsRCxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxDQUFDLGdDQUFtQjtBQUNwQixDQUFDLGdDQUFtQjtBQUNwQixrQkFBa0IsZ0NBQW1COztBQUVyQyxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxDQUFDLGdDQUFtQjtBQUNwQixpQkFBaUIsZ0NBQW1CO0FBQ3BDOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5EO0FBQ0Esa0JBQWtCLGdDQUFtQjtBQUNyQyxrQkFBa0IsZ0NBQW1CO0FBQ3JDLGtCQUFrQixnQ0FBbUI7QUFDckMsa0JBQWtCLGdDQUFtQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLGdDQUFtQjtBQUNwQixrQ0FBa0M7QUFDbEMsa0NBQWtDO0FBQ2xDLGtDQUFrQztBQUNsQztBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLFdBQVc7QUFDWDs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLGVBQWUsZ0NBQW1CO0FBQ2xDLGVBQWUsZ0NBQW1CO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRDtBQUNBLFdBQVcsZ0NBQW1CO0FBQzlCO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxnQkFBZ0IsZ0NBQW1CO0FBQ25DLGdCQUFnQixnQ0FBbUI7QUFDbkMsa0JBQWtCLGdDQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCxvQkFBb0IsV0FBVyxnQ0FBbUI7O0FBRWxELE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5ELENBQUMsZ0NBQW1CO0FBQ3BCLENBQUMsZ0NBQW1CO0FBQ3BCLGtCQUFrQixnQ0FBbUI7O0FBRXJDLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5ELGlCQUFpQixnQ0FBbUI7QUFDcEMsaUJBQWlCLGdDQUFtQjtBQUNwQyxpQkFBaUIsZ0NBQW1CO0FBQ3BDLGtCQUFrQixnQ0FBbUI7QUFDckM7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBLGdDQUFnQyxnQ0FBbUI7O0FBRW5ELG9CQUFvQixXQUFXLGdDQUFtQjs7QUFFbEQsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsQ0FBQyxnQ0FBbUI7QUFDcEIsQ0FBQyxnQ0FBbUI7QUFDcEIsa0JBQWtCLGdDQUFtQjs7QUFFckMsT0FBTztBQUNQO0FBQ0EsZ0NBQWdDLGdDQUFtQjs7QUFFbkQsK0NBQStDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtCQUFrQixnQ0FBbUI7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLG9CQUFvQjs7QUFFcEIsNkJBQTZCLDZCQUE2QixjQUFjOztBQUV4RSxPQUFPO0FBQ1A7QUFDQSxnQ0FBZ0MsZ0NBQW1COztBQUVuRCx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLGdDQUFtQjs7QUFFbEMsd0JBQXdCLGdDQUFtQjs7QUFFM0Msc0JBQXNCLGdDQUFtQjs7QUFFekMsZ0JBQWdCLGdDQUFtQjs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLE9BQU87QUFDUCxnQkFBZ0I7QUFDaEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFdBQVc7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBLHFFQUFxRTs7QUFFckU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLG1CQUFtQjtBQUNyRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQkFBZ0I7QUFDMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsZ0RBQWdELFFBQVE7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGlDQUFpQyxXQUFXO1dBQzVDO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOzs7OztXQ0pBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EsR0FBRztXQUNIO1dBQ0E7V0FDQSxDQUFDOzs7OztXQ1BEOzs7OztXQ0FBO1dBQ0E7V0FDQTtXQUNBLHVEQUF1RCxpQkFBaUI7V0FDeEU7V0FDQSxnREFBZ0QsYUFBYTtXQUM3RDs7Ozs7V0NOQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7Ozs7V0NmQTs7V0FFQTtXQUNBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7O1dBRUE7Ozs7O1VFckJBO1VBQ0E7VUFDQTtVQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BiaW93YXNtL2Fpb2xpL2Rpc3QvYWlvbGkuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9hbWlub2FjaWRzLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvbnVjbGVvdGlkZXMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9zZXEtcGFsZXR0ZXMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9zZXF1ZW5jZS1lbmNvZGVyLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdGVzdHMvcGFsZXR0ZXMudGVzdC5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3Vua25vd24uanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92ZC1yZWdpb25zLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nby5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvc2VxdWVuY2Utc3BhY2UuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3ZpZXdlcnMvYWN0aXZpdHktY2xpZmZzLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy93b3JrZXJzL2RpbWVuc2lvbmFsaXR5LXJlZHVjaW5nLXdvcmtlci1jcmVhdG9yLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3NpbWlsYXJpdHktbWV0cmljcy5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdC5qcyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdHlwZS1kZWNsYXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vYmlvLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zLmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9mYXN0ZXN0LWxldmVuc2h0ZWluL2luZGV4LmpzIiwid2VicGFjazovL2Jpby8uL25vZGVfbW9kdWxlcy9qYXJvLXdpbmtsZXItdHlwZXNjcmlwdC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3BhY2thZ2UtdGVzdC50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvcGFja2FnZS50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvc2VxX2FsaWduLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9QYWxldHRlcy10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9XZWJMb2dvLXRlc3QudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3Rlc3RzL2FjdGl2aXR5LWNsaWZmcy10ZXN0cy50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdGVzdHMvY29udmVydC10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9kZXRlY3RvcnMtdGVzdC50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdGVzdHMvbXNhLXRlc3RzLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9yZW5kZXJlci10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9zZXF1ZW5jZS1zcGFjZS10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy9zcGxpdHRlci10ZXN0LnRzIiwid2VicGFjazovL2Jpby8uL3NyYy90ZXN0cy91dGlscy50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdXRpbHMvYXRvbWljLXdvcmtzLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy9jZWxsLXJlbmRlcmVyLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy9jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3V0aWxzL2NvbnZlcnQudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3V0aWxzL211bHRpcGxlLXNlcXVlbmNlLWFsaWdubWVudC50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdXRpbHMvbm90YXRpb24tY29udmVydGVyLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy9zZXF1ZW5jZS1hY3Rpdml0eS1jbGlmZnMudHMiLCJ3ZWJwYWNrOi8vYmlvLy4vc3JjL3V0aWxzL3NlcXVlbmNlLXNwYWNlLnRzIiwid2VicGFjazovL2Jpby8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9iaW8vLi9zcmMvdmlld2Vycy92ZC1yZWdpb25zLXZpZXdlci50cyIsIndlYnBhY2s6Ly9iaW8vLi9ub2RlX21vZHVsZXMvd3UvZGlzdC93dS5qcyIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwiREdcIiIsIndlYnBhY2s6Ly9iaW8vZXh0ZXJuYWwgdmFyIFwiZ3Jva1wiIiwid2VicGFjazovL2Jpby9leHRlcm5hbCB2YXIgXCJyeGpzXCIiLCJ3ZWJwYWNrOi8vYmlvL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vYmlvL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2Jpby93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9iZWZvcmUtc3RhcnR1cCIsIndlYnBhY2s6Ly9iaW8vd2VicGFjay9zdGFydHVwIiwid2VicGFjazovL2Jpby93ZWJwYWNrL2FmdGVyLXN0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5BaW9saSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbmFtZSA9IFwiQGJpb3dhc20vYWlvbGlcIjtcbiAgdmFyIHZlcnNpb24gPSBcIjIuNC4wLXJjMlwiO1xuICB2YXIgZGVzY3JpcHRpb24gPSBcIkEgZnJhbWV3b3JrIGZvciBidWlsZGluZyBXZWJBc3NlbWJseS1iYXNlZCBnZW5vbWljcyB0b29sc1wiO1xuICB2YXIgYnJvd3NlciA9IFwiZGlzdC9haW9saS5qc1wiO1xuICB2YXIgd29ya2VyID0gXCJkaXN0L2Fpb2xpLndvcmtlci5qc1wiO1xuICB2YXIgbWFpbiA9IFwiYWlvbGkuanNcIjtcbiAgdmFyIHJlcG9zaXRvcnkgPSB7XG4gIFx0dHlwZTogXCJnaXRcIixcbiAgXHR1cmw6IFwiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9iaW93YXNtL2Fpb2xpLmdpdFwiXG4gIH07XG4gIHZhciBhdXRob3IgPSBcIlJvYmVydCBBYm91a2hhbGlsXCI7XG4gIHZhciBsaWNlbnNlID0gXCJNSVRcIjtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHtcbiAgXHRjb21saW5rOiBcIl40LjMuMVwiLFxuICBcdFwid2FzbS1mZWF0dXJlLWRldGVjdFwiOiBcIl4xLjIuMTFcIlxuICB9O1xuICB2YXIgZGV2RGVwZW5kZW5jaWVzID0ge1xuICBcdFwiQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIjogXCJeMTEuMC4xXCIsXG4gIFx0XCJAcm9sbHVwL3BsdWdpbi1qc29uXCI6IFwiXjQuMS4wXCIsXG4gIFx0XCJAcm9sbHVwL3BsdWdpbi1ub2RlLXJlc29sdmVcIjogXCJeNy4wLjBcIixcbiAgXHRjeXByZXNzOiBcIl44LjAuMFwiLFxuICBcdHJvbGx1cDogXCJeMS4yOS4wXCIsXG4gIFx0XCJyb2xsdXAtcGx1Z2luLXRlcnNlclwiOiBcIl43LjAuMlwiXG4gIH07XG4gIHZhciBzY3JpcHRzID0ge1xuICBcdGJ1aWxkOiBcInJvbGx1cCAtY1wiLFxuICBcdGRldjogXCJyb2xsdXAgLWMgLXdcIixcbiAgXHR0ZXN0OiBcImN5cHJlc3MgcnVuXCIsXG4gIFx0XCJ0ZXN0LW9wZW5cIjogXCJjeXByZXNzIG9wZW5cIlxuICB9O1xuICB2YXIgZmlsZXMgPSBbXG4gIFx0XCJkaXN0XCJcbiAgXTtcbiAgdmFyIHBrZyA9IHtcbiAgXHRuYW1lOiBuYW1lLFxuICBcdHZlcnNpb246IHZlcnNpb24sXG4gIFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICBcdGJyb3dzZXI6IGJyb3dzZXIsXG4gIFx0d29ya2VyOiB3b3JrZXIsXG4gIFx0bWFpbjogbWFpbixcbiAgXHRyZXBvc2l0b3J5OiByZXBvc2l0b3J5LFxuICBcdGF1dGhvcjogYXV0aG9yLFxuICBcdGxpY2Vuc2U6IGxpY2Vuc2UsXG4gIFx0ZGVwZW5kZW5jaWVzOiBkZXBlbmRlbmNpZXMsXG4gIFx0ZGV2RGVwZW5kZW5jaWVzOiBkZXZEZXBlbmRlbmNpZXMsXG4gIFx0c2NyaXB0czogc2NyaXB0cyxcbiAgXHRmaWxlczogZmlsZXNcbiAgfTtcblxuICAvKipcclxuICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XHJcbiAgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gICAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXHJcbiAgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxyXG4gICAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcclxuICAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuICAgKi9cclxuICBjb25zdCBwcm94eU1hcmtlciA9IFN5bWJvbChcIkNvbWxpbmsucHJveHlcIik7XHJcbiAgY29uc3QgY3JlYXRlRW5kcG9pbnQgPSBTeW1ib2woXCJDb21saW5rLmVuZHBvaW50XCIpO1xyXG4gIGNvbnN0IHJlbGVhc2VQcm94eSA9IFN5bWJvbChcIkNvbWxpbmsucmVsZWFzZVByb3h5XCIpO1xyXG4gIGNvbnN0IHRocm93TWFya2VyID0gU3ltYm9sKFwiQ29tbGluay50aHJvd25cIik7XHJcbiAgY29uc3QgaXNPYmplY3QgPSAodmFsKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiAmJiB2YWwgIT09IG51bGwpIHx8IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIjtcclxuICAvKipcclxuICAgKiBJbnRlcm5hbCB0cmFuc2ZlciBoYW5kbGUgdG8gaGFuZGxlIG9iamVjdHMgbWFya2VkIHRvIHByb3h5LlxyXG4gICAqL1xyXG4gIGNvbnN0IHByb3h5VHJhbnNmZXJIYW5kbGVyID0ge1xyXG4gICAgICBjYW5IYW5kbGU6ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgdmFsW3Byb3h5TWFya2VyXSxcclxuICAgICAgc2VyaWFsaXplKG9iaikge1xyXG4gICAgICAgICAgY29uc3QgeyBwb3J0MSwgcG9ydDIgfSA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xyXG4gICAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDEpO1xyXG4gICAgICAgICAgcmV0dXJuIFtwb3J0MiwgW3BvcnQyXV07XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc2VyaWFsaXplKHBvcnQpIHtcclxuICAgICAgICAgIHBvcnQuc3RhcnQoKTtcclxuICAgICAgICAgIHJldHVybiB3cmFwKHBvcnQpO1xyXG4gICAgICB9LFxyXG4gIH07XHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgdHJhbnNmZXIgaGFuZGxlciB0byBoYW5kbGUgdGhyb3duIGV4Y2VwdGlvbnMuXHJcbiAgICovXHJcbiAgY29uc3QgdGhyb3dUcmFuc2ZlckhhbmRsZXIgPSB7XHJcbiAgICAgIGNhbkhhbmRsZTogKHZhbHVlKSA9PiBpc09iamVjdCh2YWx1ZSkgJiYgdGhyb3dNYXJrZXIgaW4gdmFsdWUsXHJcbiAgICAgIHNlcmlhbGl6ZSh7IHZhbHVlIH0pIHtcclxuICAgICAgICAgIGxldCBzZXJpYWxpemVkO1xyXG4gICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHtcclxuICAgICAgICAgICAgICBzZXJpYWxpemVkID0ge1xyXG4gICAgICAgICAgICAgICAgICBpc0Vycm9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogdmFsdWUubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdGFjazogdmFsdWUuc3RhY2ssXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlcmlhbGl6ZWQgPSB7IGlzRXJyb3I6IGZhbHNlLCB2YWx1ZSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIFtzZXJpYWxpemVkLCBbXV07XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpIHtcclxuICAgICAgICAgIGlmIChzZXJpYWxpemVkLmlzRXJyb3IpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihzZXJpYWxpemVkLnZhbHVlLm1lc3NhZ2UpLCBzZXJpYWxpemVkLnZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRocm93IHNlcmlhbGl6ZWQudmFsdWU7XHJcbiAgICAgIH0sXHJcbiAgfTtcclxuICAvKipcclxuICAgKiBBbGxvd3MgY3VzdG9taXppbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgY2VydGFpbiB2YWx1ZXMuXHJcbiAgICovXHJcbiAgY29uc3QgdHJhbnNmZXJIYW5kbGVycyA9IG5ldyBNYXAoW1xyXG4gICAgICBbXCJwcm94eVwiLCBwcm94eVRyYW5zZmVySGFuZGxlcl0sXHJcbiAgICAgIFtcInRocm93XCIsIHRocm93VHJhbnNmZXJIYW5kbGVyXSxcclxuICBdKTtcclxuICBmdW5jdGlvbiBleHBvc2Uob2JqLCBlcCA9IHNlbGYpIHtcclxuICAgICAgZXAuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgZnVuY3Rpb24gY2FsbGJhY2soZXYpIHtcclxuICAgICAgICAgIGlmICghZXYgfHwgIWV2LmRhdGEpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCB7IGlkLCB0eXBlLCBwYXRoIH0gPSBPYmplY3QuYXNzaWduKHsgcGF0aDogW10gfSwgZXYuZGF0YSk7XHJcbiAgICAgICAgICBjb25zdCBhcmd1bWVudExpc3QgPSAoZXYuZGF0YS5hcmd1bWVudExpc3QgfHwgW10pLm1hcChmcm9tV2lyZVZhbHVlKTtcclxuICAgICAgICAgIGxldCByZXR1cm5WYWx1ZTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gcGF0aC5zbGljZSgwLCAtMSkucmVkdWNlKChvYmosIHByb3ApID0+IG9ialtwcm9wXSwgb2JqKTtcclxuICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHBhdGgucmVkdWNlKChvYmosIHByb3ApID0+IG9ialtwcm9wXSwgb2JqKTtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIkdFVFwiIC8qIEdFVCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJhd1ZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJTRVRcIiAvKiBTRVQgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50W3BhdGguc2xpY2UoLTEpWzBdXSA9IGZyb21XaXJlVmFsdWUoZXYuZGF0YS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJBUFBMWVwiIC8qIEFQUExZICovOlxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmF3VmFsdWUuYXBwbHkocGFyZW50LCBhcmd1bWVudExpc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJDT05TVFJVQ1RcIiAvKiBDT05TVFJVQ1QgKi86XHJcbiAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgcmF3VmFsdWUoLi4uYXJndW1lbnRMaXN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHByb3h5KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiRU5EUE9JTlRcIiAvKiBFTkRQT0lOVCAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3NlKG9iaiwgcG9ydDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdHJhbnNmZXIocG9ydDEsIFtwb3J0MV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJSRUxFQVNFXCIgLyogUkVMRUFTRSAqLzpcclxuICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVyblZhbHVlID0geyB2YWx1ZSwgW3Rocm93TWFya2VyXTogMCB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJldHVyblZhbHVlKVxyXG4gICAgICAgICAgICAgIC5jYXRjaCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgW3Rocm93TWFya2VyXTogMCB9O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAudGhlbigocmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBbd2lyZVZhbHVlLCB0cmFuc2ZlcmFibGVzXSA9IHRvV2lyZVZhbHVlKHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICBlcC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHdpcmVWYWx1ZSksIHsgaWQgfSksIHRyYW5zZmVyYWJsZXMpO1xyXG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSBcIlJFTEVBU0VcIiAvKiBSRUxFQVNFICovKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRldGFjaCBhbmQgZGVhY3RpdmUgYWZ0ZXIgc2VuZGluZyByZWxlYXNlIHJlc3BvbnNlIGFib3ZlLlxyXG4gICAgICAgICAgICAgICAgICBlcC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgICAgICAgIGNsb3NlRW5kUG9pbnQoZXApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGVwLnN0YXJ0KSB7XHJcbiAgICAgICAgICBlcC5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGlzTWVzc2FnZVBvcnQoZW5kcG9pbnQpIHtcclxuICAgICAgcmV0dXJuIGVuZHBvaW50LmNvbnN0cnVjdG9yLm5hbWUgPT09IFwiTWVzc2FnZVBvcnRcIjtcclxuICB9XHJcbiAgZnVuY3Rpb24gY2xvc2VFbmRQb2ludChlbmRwb2ludCkge1xyXG4gICAgICBpZiAoaXNNZXNzYWdlUG9ydChlbmRwb2ludCkpXHJcbiAgICAgICAgICBlbmRwb2ludC5jbG9zZSgpO1xyXG4gIH1cclxuICBmdW5jdGlvbiB3cmFwKGVwLCB0YXJnZXQpIHtcclxuICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBbXSwgdGFyZ2V0KTtcclxuICB9XHJcbiAgZnVuY3Rpb24gdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNSZWxlYXNlZCkge1xyXG4gICAgICBpZiAoaXNSZWxlYXNlZCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlXCIpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KGVwLCBwYXRoID0gW10sIHRhcmdldCA9IGZ1bmN0aW9uICgpIHsgfSkge1xyXG4gICAgICBsZXQgaXNQcm94eVJlbGVhc2VkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCwge1xyXG4gICAgICAgICAgZ2V0KF90YXJnZXQsIHByb3ApIHtcclxuICAgICAgICAgICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpO1xyXG4gICAgICAgICAgICAgIGlmIChwcm9wID09PSByZWxlYXNlUHJveHkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJSRUxFQVNFXCIgLyogUkVMRUFTRSAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRW5kUG9pbnQoZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJveHlSZWxlYXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHByb3AgPT09IFwidGhlblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdGhlbjogKCkgPT4gcHJveHkgfTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCByID0gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJHRVRcIiAvKiBHRVQgKi8sXHJcbiAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgfSkudGhlbihmcm9tV2lyZVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHIudGhlbi5iaW5kKHIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIFsuLi5wYXRoLCBwcm9wXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2V0KF90YXJnZXQsIHByb3AsIHJhd1ZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTtcclxuICAgICAgICAgICAgICAvLyBGSVhNRTogRVM2IFByb3h5IEhhbmRsZXIgYHNldGAgbWV0aG9kcyBhcmUgc3VwcG9zZWQgdG8gcmV0dXJuIGFcclxuICAgICAgICAgICAgICAvLyBib29sZWFuLiBUbyBzaG93IGdvb2Qgd2lsbCwgd2UgcmV0dXJuIHRydWUgYXN5bmNocm9ub3VzbHkgwq9cXF8o44OEKV8vwq9cclxuICAgICAgICAgICAgICBjb25zdCBbdmFsdWUsIHRyYW5zZmVyYWJsZXNdID0gdG9XaXJlVmFsdWUocmF3VmFsdWUpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiU0VUXCIgLyogU0VUICovLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoOiBbLi4ucGF0aCwgcHJvcF0ubWFwKChwKSA9PiBwLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFwcGx5KF90YXJnZXQsIF90aGlzQXJnLCByYXdBcmd1bWVudExpc3QpIHtcclxuICAgICAgICAgICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgaWYgKGxhc3QgPT09IGNyZWF0ZUVuZHBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkVORFBPSU5UXCIgLyogRU5EUE9JTlQgKi8sXHJcbiAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnJvbVdpcmVWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIFdlIGp1c3QgcHJldGVuZCB0aGF0IGBiaW5kKClgIGRpZG7igJl0IGhhcHBlbi5cclxuICAgICAgICAgICAgICBpZiAobGFzdCA9PT0gXCJiaW5kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBwYXRoLnNsaWNlKDAsIC0xKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiQVBQTFlcIiAvKiBBUFBMWSAqLyxcclxuICAgICAgICAgICAgICAgICAgcGF0aDogcGF0aC5tYXAoKHApID0+IHAudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TGlzdCxcclxuICAgICAgICAgICAgICB9LCB0cmFuc2ZlcmFibGVzKS50aGVuKGZyb21XaXJlVmFsdWUpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbnN0cnVjdChfdGFyZ2V0LCByYXdBcmd1bWVudExpc3QpIHtcclxuICAgICAgICAgICAgICB0aHJvd0lmUHJveHlSZWxlYXNlZChpc1Byb3h5UmVsZWFzZWQpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpO1xyXG4gICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiQ09OU1RSVUNUXCIgLyogQ09OU1RSVUNUICovLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoOiBwYXRoLm1hcCgocCkgPT4gcC50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgYXJndW1lbnRMaXN0LFxyXG4gICAgICAgICAgICAgIH0sIHRyYW5zZmVyYWJsZXMpLnRoZW4oZnJvbVdpcmVWYWx1ZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHByb3h5O1xyXG4gIH1cclxuICBmdW5jdGlvbiBteUZsYXQoYXJyKSB7XHJcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIpO1xyXG4gIH1cclxuICBmdW5jdGlvbiBwcm9jZXNzQXJndW1lbnRzKGFyZ3VtZW50TGlzdCkge1xyXG4gICAgICBjb25zdCBwcm9jZXNzZWQgPSBhcmd1bWVudExpc3QubWFwKHRvV2lyZVZhbHVlKTtcclxuICAgICAgcmV0dXJuIFtwcm9jZXNzZWQubWFwKCh2KSA9PiB2WzBdKSwgbXlGbGF0KHByb2Nlc3NlZC5tYXAoKHYpID0+IHZbMV0pKV07XHJcbiAgfVxyXG4gIGNvbnN0IHRyYW5zZmVyQ2FjaGUgPSBuZXcgV2Vha01hcCgpO1xyXG4gIGZ1bmN0aW9uIHRyYW5zZmVyKG9iaiwgdHJhbnNmZXJzKSB7XHJcbiAgICAgIHRyYW5zZmVyQ2FjaGUuc2V0KG9iaiwgdHJhbnNmZXJzKTtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICB9XHJcbiAgZnVuY3Rpb24gcHJveHkob2JqKSB7XHJcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9iaiwgeyBbcHJveHlNYXJrZXJdOiB0cnVlIH0pO1xyXG4gIH1cclxuICBmdW5jdGlvbiB0b1dpcmVWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBoYW5kbGVyXSBvZiB0cmFuc2ZlckhhbmRsZXJzKSB7XHJcbiAgICAgICAgICBpZiAoaGFuZGxlci5jYW5IYW5kbGUodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgW3NlcmlhbGl6ZWRWYWx1ZSwgdHJhbnNmZXJhYmxlc10gPSBoYW5kbGVyLnNlcmlhbGl6ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJIQU5ETEVSXCIgLyogSEFORExFUiAqLyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2VyaWFsaXplZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2ZlcmFibGVzLFxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBcIlJBV1wiIC8qIFJBVyAqLyxcclxuICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB0cmFuc2ZlckNhY2hlLmdldCh2YWx1ZSkgfHwgW10sXHJcbiAgICAgIF07XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIGZyb21XaXJlVmFsdWUodmFsdWUpIHtcclxuICAgICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XHJcbiAgICAgICAgICBjYXNlIFwiSEFORExFUlwiIC8qIEhBTkRMRVIgKi86XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVySGFuZGxlcnMuZ2V0KHZhbHVlLm5hbWUpLmRlc2VyaWFsaXplKHZhbHVlLnZhbHVlKTtcclxuICAgICAgICAgIGNhc2UgXCJSQVdcIiAvKiBSQVcgKi86XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIGZ1bmN0aW9uIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIG1zZywgdHJhbnNmZXJzKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaWQgPSBnZW5lcmF0ZVVVSUQoKTtcclxuICAgICAgICAgIGVwLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIGZ1bmN0aW9uIGwoZXYpIHtcclxuICAgICAgICAgICAgICBpZiAoIWV2LmRhdGEgfHwgIWV2LmRhdGEuaWQgfHwgZXYuZGF0YS5pZCAhPT0gaWQpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlcC5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBsKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKGV2LmRhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoZXAuc3RhcnQpIHtcclxuICAgICAgICAgICAgICBlcC5zdGFydCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZXAucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7IGlkIH0sIG1zZyksIHRyYW5zZmVycyk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQXJyYXkoNClcclxuICAgICAgICAgIC5maWxsKDApXHJcbiAgICAgICAgICAubWFwKCgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpXHJcbiAgICAgICAgICAuam9pbihcIi1cIik7XHJcbiAgfVxuICAvLyMgc291cmNlTWFwcGluZ1VSTD1jb21saW5rLm1qcy5tYXBcblxuICAvLyBDb25zdGFudHNcbiAgY29uc3QgVVJMX0NETl9ST09UID0gXCJodHRwczovL2Nkbi5iaW93YXNtLmNvbS92MlwiO1xuICBjb25zdCBDT05GSUdfREVGQVVMVFMgPSB7XG4gIFx0Ly8gQmlvd2FzbSBDRE4gVVJMc1xuICBcdHVybENETjogVVJMX0NETl9ST09ULFxuICBcdC8vIEdldCB0aGUgV29ya2VyIGNvZGUgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBBaW9saSB2ZXJzaW9uXG4gIFx0dXJsQWlvbGk6IGAke1VSTF9DRE5fUk9PVH0vYWlvbGkvJHtwa2cudmVyc2lvbn0vYWlvbGkud29ya2VyLmpzYCxcbiAgXHQvLyBXaGVyZSB3ZSBjYW4gZmluZCB0aGUgYmFzZSBiaW93YXNtIG1vZHVsZSAob25seSBtb2RpZnkgdGhpcyBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQpXG4gIFx0dXJsQmFzZU1vZHVsZTogbnVsbCxcblxuICBcdC8vIEZvbGRlciB0byB1c2UgZm9yIG1vdW50aW5nIHRoZSBzaGFyZWQgZmlsZXN5c3RlbVxuICBcdGRpclNoYXJlZDogXCIvc2hhcmVkXCIsXG4gIFx0Ly8gRm9sZGVyIHRvIHVzZSBmb3IgbW91bnRpbmcgRmlsZS9CbG9iIG9iamVjdHMgdG8gdGhlIHZpcnR1YWwgZmlsZSBzeXN0ZW1cbiAgXHRkaXJNb3VudGVkOiBcIi9tbnRcIixcbiAgXHQvLyBGb2xkZXIgdG8gdXNlIGZvciBzeW1saW5rcyAoYmFzaWNhbGx5LCB3ZSBtYWtlIGEgc3ltbGluayB0byBlYWNoIGZpbGUgbW91bnRlZCBvbiBXT1JLRVJGU1xuICBcdC8vIHNvIHRoYXQgb3BlcmF0aW9ucyBsaWtlIFwic2FtdG9vbHMgaW5kZXhcIiBkb24ndCBjcmFzaCBkdWUgdG8gdGhlIHJlYWQtb25seSBuYXR1cmUgb2YgV09SS0VSUykuXG4gIFx0Ly8gQWxzbyBtb3VudCBVUkxzIGxhemlseSBpbiB0aGF0IGZvbGRlci5cbiAgXHRkaXJEYXRhOiBcIi9kYXRhXCIsXG4gIFx0Ly8gSW50ZXJsZWF2ZSBzdGRvdXQvc3RkZXJyLiBJZiBzZXQgdG8gZmFsc2UsIGAuZXhlYygpYCByZXR1cm5zIGFuIG9iamVjdCB7IFwic3Rkb3V0XCI6IDx0ZXh0PiwgXCJzdGRlcnJcIjogPHRleHQ+IH1cbiAgXHRwcmludEludGVybGVhdmVkOiB0cnVlLFxuXG4gIFx0Ly8gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gcnVuIHdoZW5ldmVyIHdlIHJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIFdlYldvcmtlciB3aXRoIHBheWxvYWQgeyB0eXBlOiBcImJpb3dhc21cIiwgdmFsdWU6IC4uLiB9LlxuICBcdC8vIFNlZSA8aHR0cHM6Ly9naXRodWIuY29tL2Jpb3dhc20vYmlvd2FzbS90cmVlL21haW4vdG9vbHMvYmh0c25lPiBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBjYW4gYmUgdXNlZCB0byBzZW5kIHJlZ3VsYXIgdXBkYXRlc1xuICBcdC8vIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBjYWxsTWFpbigpIGlzIGRvbmUgcnVubmluZy5cbiAgXHRjYWxsYmFjazogbnVsbCxcblxuICBcdC8vIERlYnVnZ2luZ1xuICBcdGRlYnVnOiBmYWxzZSxcbiAgXHRlbnY6IFwicHJkXCJcbiAgfTtcblxuICAvLyBDbGFzczogMSBvYmplY3QgPSAxIHdvcmtlcjsgdXNlciBjYW4gZGVjaWRlIGlmIHRoZXkgd2FudCB0b29scyBydW5uaW5nIGluIHNlcGFyYXRlIHRocmVhZHMgb3IgYWxsIG9mIHRoZW0gaW4gb25lXG4gIGNsYXNzIEFpb2xpXG4gIHtcbiAgXHRjb25zdHJ1Y3Rvcih0b29scywgY29uZmlnPXt9KVxuICBcdHtcbiAgXHRcdGlmKHRvb2xzID09IG51bGwpXG4gIFx0XHRcdHRocm93IFwiRXhwZWN0aW5nIGFycmF5IG9mIHRvb2xzIGFzIGlucHV0IHRvIEFpb2xpIGNvbnN0cnVjdG9yLlwiO1xuXG4gIFx0XHQvLyBQYXJzZSB1c2VyIGlucHV0XG4gIFx0XHRpZighQXJyYXkuaXNBcnJheSh0b29scykpXG4gIFx0XHRcdHRvb2xzID0gWyB0b29scyBdO1xuICBcdFx0Ly8gT3ZlcndyaXRlIGRlZmF1bHQgY29uZmlnIGlmIHNwZWNpZmllZFxuICBcdFx0Y29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgQ09ORklHX0RFRkFVTFRTLCBjb25maWcpO1xuICBcdFx0Ly8gRm9yIGNvbnZlbmllbmNlLCBzdXBwb3J0IFwiPHRvb2w+Lzx2ZXJzaW9uPlwiIG9yIFwiPHRvb2w+Lzxwcm9ncmFtPi88dmVyc2lvbj5cIiBpbnN0ZWFkIG9mIG9iamVjdCBjb25maWdcbiAgXHRcdHRvb2xzID0gdG9vbHMubWFwKHRoaXMuX3BhcnNlVG9vbCk7XG4gIFx0XHQvLyBJZiB0ZXN0aW5nIHdpdGggZGlmZmVyZW50IGVudmlyb25tZW50IGUuZy4gY2RuLXN0Zy5iaW93YXNtLmNvbVxuICBcdFx0aWYoY29uZmlnLmVudiAhPSBcInByZFwiKSB7XG4gIFx0XHRcdGNvbmZpZy51cmxDRE4gPSBjb25maWcudXJsQ0ROLnJlcGxhY2UoXCJjZG5cIiwgYGNkbi0ke2NvbmZpZy5lbnZ9YCk7XG4gIFx0XHRcdGNvbmZpZy51cmxBaW9saSA9IGNvbmZpZy51cmxBaW9saS5yZXBsYWNlKFwiY2RuXCIsIGBjZG4tJHtjb25maWcuZW52fWApO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBBZGQgYmlvd2FzbSBiYXNlIG1vZHVsZSB0byBsaXN0IG9mIHRvb2xzIHRvIGluaXRpYWxpemUgKG5lZWQgdGhpcyBmb3IgdGhlIHNoYXJlZCB2aXJ0dWFsIGZpbGVzeXN0ZW0pXG4gIFx0XHR0b29scyA9IFt7XG4gIFx0XHRcdHRvb2w6IFwiYmFzZVwiLFxuICBcdFx0XHR2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgXHRcdFx0dXJsUHJlZml4OiBjb25maWcudXJsQmFzZU1vZHVsZVxuICBcdFx0fSwgLi4udG9vbHNdO1xuXG4gIFx0XHQvLyBTZXQgc3RhdGVcbiAgXHRcdHRoaXMudG9vbHMgPSB0b29scztcbiAgXHRcdHRoaXMuY29uZmlnID0gY29uZmlnO1xuXG4gIFx0XHQvLyBIYW5kbGUgY2FsbGJhY2sgKGRlbGV0ZSBpdCBiZWNhdXNlIHdlIGNhbid0IHNlbmQgYSBmdW5jdGlvbiB0byB0aGUgV2ViV29ya2VyKVxuICBcdFx0aWYodGhpcy5jb25maWcuY2FsbGJhY2sgIT0gbnVsbClcbiAgXHRcdFx0dGhpcy5jYWxsYmFjayA9IHRoaXMuY29uZmlnLmNhbGxiYWNrO1xuICBcdFx0ZGVsZXRlIHRoaXMuY29uZmlnLmNhbGxiYWNrO1xuXG4gIFx0XHRyZXR1cm4gdGhpcy5pbml0KCk7XG4gIFx0fVxuXG4gIFx0Ly8gSW5pdGlhbGl6ZSB0aGUgV2ViV29ya2VyIGFuZCB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlcyB3aXRoaW4gaXRcbiAgXHRhc3luYyBpbml0KCkge1xuICBcdFx0Ly8gTm90ZTogV2UgY2FuIG9ubHkgY3JlYXRlIGEgV2ViV29ya2VyIHVzaW5nIGEgVVJMIHRoYXQgaGFzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgYXBwIHJ1bm5pbmcgaXQsIGkuZS4gd2VcbiAgXHRcdC8vIGNhbid0IGRvIGBuZXcgV29ya2VyKFwiaHR0cHM6Ly9jZG4uYmlvd2FzbS5jb20vdjIvLi4uXCIpYCwgc28gaW5zdGVhZCB3ZSBuZWVkIHRvIGZldGNoIHRoZSBjb250ZW50cyBvZiB0aGF0XG4gIFx0XHQvLyBVUkwgZmlyc3QsIGFuZCB0aGVuIGNyZWF0ZSB0aGUgV2ViV29ya2VyLiBTZWUgPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MDAxNTg5OD4uXG4gIFx0XHRjb25zdCBtb2R1bGVKUyA9IGF3YWl0IChhd2FpdCBmZXRjaCh0aGlzLmNvbmZpZy51cmxBaW9saSkpLnRleHQoKTtcbiAgXHRcdGNvbnN0IG1vZHVsZUJsb2IgPSBuZXcgQmxvYihbbW9kdWxlSlNdLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIH0pO1xuXG4gIFx0XHQvLyBDcmVhdGUgdGhlIFdlYldvcmtlclxuICBcdFx0Y29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihVUkwuY3JlYXRlT2JqZWN0VVJMKG1vZHVsZUJsb2IpKTtcbiAgXHRcdC8vIExpc3RlbiBmb3IgXCJiaW93YXNtXCIgbWVzc2FnZXMgZnJvbSB0aGUgV2ViV29ya2VyXG4gIFx0XHRpZih0aGlzLmNhbGxiYWNrKVxuICBcdFx0XHR3b3JrZXIub25tZXNzYWdlID0gZSA9PiB7XG4gIFx0XHRcdFx0aWYoZS5kYXRhLnR5cGUgPT0gXCJiaW93YXNtXCIpXG4gIFx0XHRcdFx0XHR0aGlzLmNhbGxiYWNrKGUuZGF0YS52YWx1ZSk7XG4gIFx0XHRcdH07XG5cbiAgXHRcdGNvbnN0IGFpb2xpID0gd3JhcCh3b3JrZXIpO1xuICBcdFx0YWlvbGkudG9vbHMgPSB0aGlzLnRvb2xzO1xuICBcdFx0YWlvbGkuY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgXHRcdC8vIEluaXRpYWxpemUgdGhlIHRvb2xzIGluc2lkZSB0aGUgV2ViV29ya2VyXG4gIFx0XHRhd2FpdCBhaW9saS5pbml0KCk7XG5cbiAgXHRcdHJldHVybiBhaW9saTtcbiAgXHR9XG5cbiAgXHQvLyBQYXJzZSBcIjx0b29sPi88dmVyc2lvbj5cIiBhbmQgXCI8dG9vbD4vPHByb2dyYW0+Lzx2ZXJzaW9uPlwiIGludG8geyBcInRvb2xcIjogPHRvb2w+LCBcInByb2dyYW1cIjogPHByb2dyYW0+LCBcInZlcnNpb25cIjogPHZlcnNpb24+IH1cbiAgXHRfcGFyc2VUb29sKHRvb2wpXG4gIFx0e1xuICBcdFx0Ly8gSWYgbm90IGEgc3RyaW5nLCBsZWF2ZSBpdCBhcyBpc1xuICBcdFx0aWYodHlwZW9mIHRvb2wgIT09IFwic3RyaW5nXCIpXG4gIFx0XHRcdHJldHVybiB0b29sO1xuXG4gIFx0XHQvLyBTdXBwb3J0IFwiPHRvb2w+Lzx2ZXJzaW9uPlwiIGFuZCBcIjx0b29sPi88cHJvZ3JhbT4vPHZlcnNpb24+XCJcbiAgXHRcdGNvbnN0IHRvb2xTcGxpdCA9IHRvb2wuc3BsaXQoXCIvXCIpO1xuICBcdFx0aWYodG9vbFNwbGl0Lmxlbmd0aCAhPSAyICYmIHRvb2xTcGxpdC5sZW5ndGggIT0gMylcbiAgXHRcdFx0dGhyb3cgXCJFeHBlY3RpbmcgJzx0b29sPi88dmVyc2lvbj4nIG9yICc8dG9vbD4vPHByb2dyYW0+Lzx2ZXJzaW9uPidcIjtcblxuICBcdFx0cmV0dXJuIHtcbiAgXHRcdFx0dG9vbDogdG9vbFNwbGl0WzBdLFxuICBcdFx0XHRwcm9ncmFtOiB0b29sU3BsaXQubGVuZ3RoID09IDMgPyB0b29sU3BsaXRbMV0gOiB0b29sU3BsaXRbMF0sXG4gIFx0XHRcdHZlcnNpb246IHRvb2xTcGxpdFt0b29sU3BsaXQubGVuZ3RoIC0gMV1cbiAgXHRcdH07XG4gIFx0fVxuICB9XG5cbiAgcmV0dXJuIEFpb2xpO1xuXG59KSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWlvbGkuanMubWFwXG4iLCJpbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBBbWlub2FjaWRzUGFsZXR0ZXMgZXh0ZW5kcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgc3RhdGljIGdldCBMZXNrKCkge1xuICAgICAgICBpZiAodGhpcy5sZXNrID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMubGVzayA9IHRoaXMubWFrZVBhbGV0dGUoW1xuICAgICAgICAgICAgICAgIFtbJ0cnLCAnQScsICdTJywgJ1QnXSwgJ29yYW5nZSddLFxuICAgICAgICAgICAgICAgIFtbJ0MnLCAnVicsICdJJywgJ0wnLCAnUCcsICdGJywgJ1knLCAnTScsICdXJ10sICdhbGxfZ3JlZW4nXSxcbiAgICAgICAgICAgICAgICBbWydOJywgJ1EnLCAnSCddLCAnbWFnZW50YSddLFxuICAgICAgICAgICAgICAgIFtbJ0QnLCAnRSddLCAncmVkJ10sXG4gICAgICAgICAgICAgICAgW1snSycsICdSJ10sICdhbGxfYmx1ZSddLFxuICAgICAgICAgICAgXSwgZmFsc2UsIEFtaW5vYWNpZHNQYWxldHRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGVzaztcbiAgICB9XG4gICAgc3RhdGljIGdldCBHcm9rR3JvdXBzKCkge1xuICAgICAgICBpZiAodGhpcy5ncm9rR3JvdXBzID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHRoaXMuZ3Jva0dyb3VwcyA9IHRoaXMubWFrZVBhbGV0dGUoW1xuICAgICAgICAgICAgICAgIFtbJ0MnLCAnVSddLCAneWVsbG93J10sXG4gICAgICAgICAgICAgICAgW1snRycsICdQJ10sICdyZWQnXSxcbiAgICAgICAgICAgICAgICBbWydBJywgJ1YnLCAnSScsICdMJywgJ00nLCAnRicsICdZJywgJ1cnXSwgJ2FsbF9ncmVlbiddLFxuICAgICAgICAgICAgICAgIFtbJ1InLCAnSCcsICdLJ10sICdsaWdodF9ibHVlJ10sXG4gICAgICAgICAgICAgICAgW1snRCcsICdFJ10sICdkYXJrX2JsdWUnXSxcbiAgICAgICAgICAgICAgICBbWydTJywgJ1QnLCAnTicsICdRJ10sICdvcmFuZ2UnXSxcbiAgICAgICAgICAgIF0sIGZhbHNlLCBBbWlub2FjaWRzUGFsZXR0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdyb2tHcm91cHM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgUmFzTW9sKCkge1xuICAgICAgICBpZiAodGhpcy5yYXNNb2wgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5yYXNNb2wgPSBuZXcgQW1pbm9hY2lkc1BhbGV0dGVzKHtcbiAgICAgICAgICAgICAgICAvLyBodHRwOi8vYWNjZXMuZW5zLWx5b24uZnIvYmlvdGljL3Jhc3RvcC9oZWxwL2NvbG91ci5odG1cbiAgICAgICAgICAgICAgICAnRCc6ICcjRTYwQTBBJyxcbiAgICAgICAgICAgICAgICAnRSc6ICcjRTYwQTBBJyxcbiAgICAgICAgICAgICAgICAnQyc6ICcjRTZFNjAwJyxcbiAgICAgICAgICAgICAgICAnTSc6ICcjRTZFNjAwJyxcbiAgICAgICAgICAgICAgICAnSyc6ICcjMTQ1QUZGJyxcbiAgICAgICAgICAgICAgICAnUic6ICcjMTQ1QUZGJyxcbiAgICAgICAgICAgICAgICAnUyc6ICcjRkE5NjAwJyxcbiAgICAgICAgICAgICAgICAnVCc6ICcjRkE5NjAwJyxcbiAgICAgICAgICAgICAgICAnRic6ICcjMzIzMkFBJyxcbiAgICAgICAgICAgICAgICAnWSc6ICcjMzIzMkFBJyxcbiAgICAgICAgICAgICAgICAnTic6ICcjMDBEQ0RDJyxcbiAgICAgICAgICAgICAgICAnUSc6ICcjMDBEQ0RDJyxcbiAgICAgICAgICAgICAgICAnRyc6ICcjRUJFQkVCJyxcbiAgICAgICAgICAgICAgICAnTCc6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnVic6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnSSc6ICcjMEY4MjBGJyxcbiAgICAgICAgICAgICAgICAnQSc6ICcjQzhDOEM4JyxcbiAgICAgICAgICAgICAgICAnVyc6ICcjQjQ1QUI0JyxcbiAgICAgICAgICAgICAgICAnSCc6ICcjODI4MkQyJyxcbiAgICAgICAgICAgICAgICAnUCc6ICcjREM5NjgyJyxcbiAgICAgICAgICAgICAgICAnb3RoZXJzJzogJyNCRUEwNkUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmFzTW9sO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbWlub2FjaWRzIHtcbiAgICBzdGF0aWMgZ2V0UGFsZXR0ZShzY2hlbWUgPSAnZ3JvaycpIHtcbiAgICAgICAgc3dpdGNoIChzY2hlbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2dyb2snOlxuICAgICAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcztcbiAgICAgICAgICAgIGNhc2UgJ2xlc2snOlxuICAgICAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuTGVzaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDaGVtUGFsZXR0ZTogc2NoZW1lIFxcYCR7c2NoZW1lfVxcYCBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZGl2aWRlZCBhbWlubyBhY2lkIHdpdGggaXRzIGNvbnRlbnQgaW4gdGhlIGJyYWNrZXQsIGlmIHRoZSBjb250ZW50IGlzIG51bWJlciwgdGhlbiBpdHMgb21pdHRlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGMgcmF3IGFtaW5vXG4gICAgICogQHJldHVybiB7W3N0cmluZywgc3RyaW5nXX0gb3V0ZXIgYW5kIGlubmVyIGNvbnRlbnRcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SW5uZXJPdXRlcihjKSB7XG4gICAgICAgIGxldCBpc0lubmVyID0gMDtcbiAgICAgICAgbGV0IGlubmVyID0gJyc7XG4gICAgICAgIGxldCBvdXRlciA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXIgb2YgYykge1xuICAgICAgICAgICAgaWYgKGNoYXIgPT0gJygnKVxuICAgICAgICAgICAgICAgIGlzSW5uZXIrKztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoYXIgPT0gJyknKVxuICAgICAgICAgICAgICAgIGlzSW5uZXItLTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5uZXIpXG4gICAgICAgICAgICAgICAgaW5uZXIgKz0gY2hhcjtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBvdXRlciArPSBjaGFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VJbnQoaW5uZXIpKSA/IFtvdXRlciwgJyddIDogW291dGVyLCBpbm5lcl07XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDb2xvckFBUGl2b3QobW9ub21lciA9ICcnLCBzY2hlbWUgPSAnZ3JvaycpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgIC8vY29uc3QgY2hlbVBhbGV0dGVJbnN0YW5jZSA9IEFBUGFsZXR0ZXMuR3Jva0dyb3VwcygpO1xuICAgICAgICBjb25zdCBjaGVtUGFsZXR0ZUluc3RhbmNlID0gdGhpcy5nZXRQYWxldHRlKHNjaGVtZSk7XG4gICAgICAgIGxldCBbb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXJdID0gdGhpcy5nZXRJbm5lck91dGVyKG1vbm9tZXIpO1xuICAgICAgICBvdXRlck1vbm9tZXIgPSAob3V0ZXJNb25vbWVyLmxlbmd0aCA+IDYgPyBgJHtvdXRlck1vbm9tZXIuc2xpY2UoMCwgMyl9Li4uYCA6IG91dGVyTW9ub21lcik7XG4gICAgICAgIGlubmVyTW9ub21lciA9IChpbm5lck1vbm9tZXIubGVuZ3RoID4gNiA/IGAke2lubmVyTW9ub21lci5zbGljZSgwLCAzKX0uLi5gIDogaW5uZXJNb25vbWVyKTtcbiAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDEgfHwgbW9ub21lclsxXSA9PSAnKCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFtaW5vID0gKF9hID0gbW9ub21lclswXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMV0gOlxuICAgICAgICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgMV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbm9tZXJbMF0gPT0gJ2QnICYmIG1vbm9tZXJbMV0gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIubGVuZ3RoID09IDIgfHwgbW9ub21lclsyXSA9PSAnKCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IChfYiA9IG1vbm9tZXJbMV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbWlubyBpbiBjaGVtUGFsZXR0ZUluc3RhbmNlID9cbiAgICAgICAgICAgICAgICAgICAgW2NoZW1QYWxldHRlSW5zdGFuY2UuZ2V0KGFtaW5vKSwgYW1pbm8sIGlubmVyTW9ub21lciwgMl0gOlxuICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb25vbWVyLnN1YnN0cmluZygwLCAzKSBpbiB0aGlzLkFBRnVsbE5hbWVzKSB7XG4gICAgICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gMyB8fCBtb25vbWVyWzNdID09ICcoJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFtaW5vID0gdGhpcy5BQUZ1bGxOYW1lc1ttb25vbWVyLnN1YnN0cmluZygwLCAzKV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFtaW5vIGluIGNoZW1QYWxldHRlSW5zdGFuY2UgP1xuICAgICAgICAgICAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCAzXSA6XG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnVuZGVmaW5lZENvbG9yLCBvdXRlck1vbm9tZXIsIGlubmVyTW9ub21lciwgM107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoX2MgPSBtb25vbWVyWzBdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9Mb3dlckNhc2UoKSkgPT0gbW9ub21lclswXSkge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXIuc3Vic3RyaW5nKDEsIDMpIGluIHRoaXMuQUFGdWxsTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9ub21lci5sZW5ndGggPT0gNCB8fCBtb25vbWVyWzRdID09ICcoJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbWlubyA9IHRoaXMuQUFGdWxsTmFtZXNbbW9ub21lci5zdWJzdHJpbmcoMSwgMyldO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW1pbm8gaW4gY2hlbVBhbGV0dGVJbnN0YW5jZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlbVBhbGV0dGVJbnN0YW5jZS5nZXQoYW1pbm8pLCBhbWlubywgaW5uZXJNb25vbWVyLCA0XSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy51bmRlZmluZWRDb2xvciwgb3V0ZXJNb25vbWVyLCBpbm5lck1vbm9tZXIsIDRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3RoaXMudW5kZWZpbmVkQ29sb3IsIG91dGVyTW9ub21lciwgaW5uZXJNb25vbWVyLCAwXTtcbiAgICB9XG59XG5BbWlub2FjaWRzLlNlbVR5cGUgPSAnQW1pbm9hY2lkcyc7XG5BbWlub2FjaWRzLlNlbVR5cGVNdWx0aXBsZUFsaWdubWVudCA9ICdBbWlub2FjaWRzTXVsdGlwbGVBbGlnbm1lbnQnO1xuQW1pbm9hY2lkcy51bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbkFtaW5vYWNpZHMuTmFtZXMgPSB7XG4gICAgJ0cnOiAnR2x5Y2luZScsXG4gICAgJ0wnOiAnTGV1Y2luZScsXG4gICAgJ1knOiAnVHlyb3NpbmUnLFxuICAgICdTJzogJ1NlcmluZScsXG4gICAgJ0UnOiAnR2x1dGFtaWMgYWNpZCcsXG4gICAgJ1EnOiAnR2x1dGFtaW5lJyxcbiAgICAnRCc6ICdBc3BhcnRpYyBhY2lkJyxcbiAgICAnTic6ICdBc3BhcmFnaW5lJyxcbiAgICAnRic6ICdQaGVueWxhbGFuaW5lJyxcbiAgICAnQSc6ICdBbGFuaW5lJyxcbiAgICAnSyc6ICdMeXNpbmUnLFxuICAgICdSJzogJ0FyZ2luaW5lJyxcbiAgICAnSCc6ICdIaXN0aWRpbmUnLFxuICAgICdDJzogJ0N5c3RlaW5lJyxcbiAgICAnVic6ICdWYWxpbmUnLFxuICAgICdQJzogJ1Byb2xpbmUnLFxuICAgICdXJzogJ1RyeXB0b3BoYW4nLFxuICAgICdJJzogJ0lzb2xldWNpbmUnLFxuICAgICdNJzogJ01ldGhpb25pbmUnLFxuICAgICdUJzogJ1RocmVvbmluZScsXG59O1xuQW1pbm9hY2lkcy5BQVNtaWxlcyA9IHtcbiAgICAnRyc6ICdOQ0MoPU8pTycsXG4gICAgJ0wnOiAnTltDQEhdKENDKEMpQylDKD1PKU8nLFxuICAgICdZJzogJ05DKENDMT1DQz1DKE8pQz1DMSlDKD1PKU8nLFxuICAgICdTJzogJ05DKENPKUMoPU8pTycsXG4gICAgJ0UnOiAnTltDQEBIXShDQ0MoTyk9TylDKD1PKU8nLFxuICAgICdRJzogJ05bQ0BASF0oQ0NDKE4pPU8pQyg9TylPJyxcbiAgICAnRCc6ICdOW0NAQEhdKENDKE8pPU8pQyg9TylPJyxcbiAgICAnTic6ICdOW0NAQEhdKENDKE4pPU8pQyg9TylPJyxcbiAgICAnRic6ICdOQyhDQzE9Q0M9Q0M9QzEpQyg9TylPJyxcbiAgICAnQSc6ICdOW0NASF0oQylDKD1PKU8nLFxuICAgICdLJzogJ05DKENDQ0NOKUMoPU8pTycsXG4gICAgJ1InOiAnTltDQEhdKENDQ05DKD1OKUMpQyg9TylPJyxcbiAgICAnSCc6ICdOQyhDQzE9Q049Q1tOXTEpQyg9TylPJyxcbiAgICAnQyc6ICdOW0NAQEhdKENTKUMoPU8pTycsXG4gICAgJ1YnOiAnTkMoQyhDKUMpQyg9TylPJyxcbiAgICAnUCc6ICdOKENDQzEpQzFDKD1PKU8nLFxuICAgICdXJzogJ05bQ0BASF0oQ2MxYzJjY2NjYzJuKFtIXSljMSlDKD1PKU8nLFxuICAgICdJJzogJ05bQ0BIXShbQ0BIXShDKUNDKUMoPU8pTycsXG4gICAgJ00nOiAnTkMoQ0NTQylDKD1PKU8nLFxuICAgICdUJzogJ05DKEMoTylDKUMoPU8pTycsXG59O1xuQW1pbm9hY2lkcy5BQVNtaWxlc1RydW5jYXRlZCA9IHtcbiAgICAnRyc6ICcqQyonLFxuICAgICdMJzogJ0NDKEMpQ1tDQEhdKCopKicsXG4gICAgJ1knOiAnQzE9Q0MoPUNDPUMxQ0MoKikqKU8nLFxuICAgICdTJzogJ09DQygqKUMqJyxcbiAgICAnRSc6ICcqW0NAQEhdKENDQyhPKT1PKSonLFxuICAgICdRJzogJypOW0NAQEhdKENDQyhOKT1PKSonLFxuICAgICdEJzogJypbQ0BASF0oQ0MoTyk9TykqJyxcbiAgICAnTic6ICcqW0NAQEhdKENDKE4pPU8pKicsXG4gICAgJ0YnOiAnQzE9Q0M9QyhDPUMxKUNDKCopKicsXG4gICAgJ0EnOiAnQ1tDQEhdKCopKicsXG4gICAgJ0snOiAnQyhDQ04pQ0MoKikqJyxcbiAgICAnUic6ICcqW0NASF0oQ0NDTkMoPU4pQykqJyxcbiAgICAnSCc6ICdDMT1DKE5DPU4xKUNDKCopKicsXG4gICAgJ0MnOiAnQyhbQ0BASF0oKikqKVMnLFxuICAgICdWJzogJ0NDKEMpQygqKSonLFxuICAgICdQJzogJ0MxQ0NOKCopQzEqJyxcbiAgICAnVyc6ICcqW0NAQEhdKENjMWMyY2NjY2MybihbSF0pYzEpKicsXG4gICAgJ0knOiAnQ0NbQ0BIXShDKVtDQEhdKCopKicsXG4gICAgJ00nOiAnQ1NDQ0MoKikqJyxcbiAgICAnVCc6ICdDQyhPKUMoKikqJyxcbn07XG4vKiogVE9ETzogRnVsbD9cbiAqL1xuQW1pbm9hY2lkcy5BQUZ1bGxOYW1lcyA9IHtcbiAgICAnQWxhJzogJ0EnLFxuICAgICdBcmcnOiAnUicsXG4gICAgJ0Fzbic6ICdOJyxcbiAgICAnQXNwJzogJ0QnLFxuICAgICdDeXMnOiAnQycsXG4gICAgJ0dsbic6ICdRJyxcbiAgICAnR2x1JzogJ0UnLFxuICAgICdHbHknOiAnRycsXG4gICAgJ0hpcyc6ICdIJyxcbiAgICAnSWxlJzogJ0knLFxuICAgICdMZXUnOiAnTCcsXG4gICAgJ0x5cyc6ICdLJyxcbiAgICAnTWV0JzogJ00nLFxuICAgICdQaGUnOiAnRicsXG4gICAgJ1Bybyc6ICdQJyxcbiAgICAnU2VyJzogJ1MnLFxuICAgICdUaHInOiAnVCcsXG4gICAgJ1RycCc6ICdXJyxcbiAgICAnVHlyJzogJ1knLFxuICAgICdWYWwnOiAnVicsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVcxcGJtOWhZMmxrY3k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbUZ0YVc1dllXTnBaSE11ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlMwRXNUMEZCVHl4RlFVRmhMR05CUVdNc1JVRkJReXhOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlRGRUxFMUJRVTBzVDBGQlR5eHJRa0ZCYlVJc1UwRkJVU3hqUVVGak8wbEJSemRETEUxQlFVMHNTMEZCU3l4SlFVRkpPMUZCUTNCQ0xFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTMEZCU3l4TFFVRkxMRU5CUVVNc1JVRkJSVHRaUVVONFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU03WjBKQlEyaERMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF6dG5Ra0ZETlVRc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1UwRkJVeXhEUVVGRE8yZENRVU0xUWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXp0blFrRkRia0lzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU03WVVGRGVrSXNSVUZCUlN4TFFVRkxMRVZCUVVVc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0VFFVTXZRanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0SlFVTnVRaXhEUVVGRE8wbEJTVTBzVFVGQlRTeExRVUZMTEZWQlFWVTdVVUZETVVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVRkZPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJRenRuUWtGRGFrTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTTdaMEpCUTNSQ0xFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRE8yZENRVU51UWl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJRenRuUWtGRGRrUXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNXVUZCV1N4RFFVRkRPMmRDUVVNdlFpeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF6dG5Ra0ZEZWtJc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGRkxGRkJRVkVzUTBGQlF6dGhRVU5xUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hyUWtGQmEwSXNRMEZCUXl4RFFVRkRPMU5CUXk5Q08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGSlRTeE5RVUZOTEV0QlFVc3NUVUZCVFR0UlFVTjBRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEV0QlFVc3NTMEZCU3l4RFFVRkRMRVZCUVVVN1dVRkRNVUlzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMR3RDUVVGclFpeERRVUZETzJkQ1FVTnVReXg1UkVGQmVVUTdaMEpCUTNwRUxFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEVkQlFVY3NSVUZCUlN4VFFVRlRPMmRDUVVOa0xFZEJRVWNzUlVGQlJTeFRRVUZUTzJkQ1FVTmtMRWRCUVVjc1JVRkJSU3hUUVVGVE8yZENRVU5rTEZGQlFWRXNSVUZCUlN4VFFVRlRPMkZCUTNCQ0xFTkJRVU1zUTBGQlF6dFRRVU5LTzFGQlEwUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wbEJRM0pDTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1QwRkJUeXhWUVVGVk8wbEJjVWRrTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJhVUlzVFVGQlRUdFJRVU01UXl4UlFVRlJMRTFCUVUwc1JVRkJSVHRaUVVOb1FpeExRVUZMTEUxQlFVMDdaMEpCUTFRc1QwRkJUeXhyUWtGQmEwSXNRMEZCUXl4VlFVRlZMRU5CUVVNN1dVRkRka01zUzBGQlN5eE5RVUZOTzJkQ1FVTlVMRTlCUVU4c2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTJwRE8yZENRVU5GTEUxQlFVMHNTVUZCU1N4TFFVRkxMRU5CUVVNc2VVSkJRWGxDTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dFRRVU55UlR0SlFVTklMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSkxFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCVXp0UlFVTnVReXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYUVJc1NVRkJTU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEyWXNTVUZCU1N4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSV1lzUzBGQlN5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRVZCUVVVN1dVRkRjRUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NSMEZCUnp0blFrRkRZaXhQUVVGUExFVkJRVVVzUTBGQlF6dHBRa0ZEVUN4SlFVRkpMRWxCUVVrc1NVRkJTU3hIUVVGSE8yZENRVU5zUWl4UFFVRlBMRVZCUVVVc1EwRkJRenRwUWtGRFVDeEpRVUZKTEU5QlFVODdaMEpCUTJRc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF6czdaMEpCUldRc1MwRkJTeXhKUVVGSkxFbEJRVWtzUTBGQlF6dFRRVU5xUWp0UlFVVkVMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0SlFVTm9SU3hEUVVGRE8wbEJSVTBzVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUXl4VlFVRnJRaXhGUVVGRkxFVkJRVVVzVTBGQmFVSXNUVUZCVFRzN1VVRkRla1VzYzBSQlFYTkVPMUZCUTNSRUxFMUJRVTBzYlVKQlFXMUNMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTndSQ3hKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEZsQlFWa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETDBRc1dVRkJXU3hIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzV1VGQldTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1VVRkRNMFlzV1VGQldTeEhRVUZITEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NXVUZCV1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03VVVGRk0wWXNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRelZETEUxQlFVMHNTMEZCU3l4SFFVRkhMRTFCUVVFc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5d3dRMEZCUlN4WFFVRlhMRVZCUVVjc1EwRkJRenRaUVVONlF5eFBRVUZQTEV0QlFVc3NTVUZCU1N4dFFrRkJiVUlzUTBGQlF5eERRVUZETzJkQ1FVTnVReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkVMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM2hFTzFGQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVVc1NVRkJTU3h0UWtGQmJVSXNSVUZCUlR0WlFVTXpSQ3hKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVTdaMEpCUXpWRExFMUJRVTBzUzBGQlN5eEhRVUZITEUxQlFVRXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXd3UTBGQlJTeFhRVUZYTEVWQlFVY3NRMEZCUXp0blFrRkRla01zVDBGQlR5eExRVUZMTEVsQlFVa3NiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dHZRa0ZEYmtNc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU14UkN4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVVzV1VGQldTeEZRVUZGTEZsQlFWa3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRoUVVONFJEdFRRVU5HTzFGQlJVUXNTVUZCU1N4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRk8xbEJReTlETEVsQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSVHRuUWtGRE5VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTjRSQ3hQUVVGUExFdEJRVXNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJReXhEUVVGRE8yOUNRVU51UXl4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRekZFTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1JVRkJSU3haUVVGWkxFVkJRVVVzV1VGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTNoRU8xTkJRMFk3VVVGRlJDeEpRVUZKTEVOQlFVRXNUVUZCUVN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExEQkRRVUZGTEZkQlFWY3NSVUZCUlN4TFFVRkpMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdFpRVU16UXl4SlFVRkpMRTlCUVU4c1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3WjBKQlF5OURMRWxCUVVrc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUlVGQlJUdHZRa0ZETlVNc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVONFJDeFBRVUZQTEV0QlFVc3NTVUZCU1N4dFFrRkJiVUlzUTBGQlF5eERRVUZETzNkQ1FVTnVReXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlF6RkVMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVWQlFVVXNXVUZCV1N4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU40UkR0aFFVTkdPMU5CUTBZN1VVRkZSQ3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4WlFVRlpMRVZCUVVVc1dVRkJXU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6bEVMRU5CUVVNN08wRkJjRXhsTEd0Q1FVRlBMRWRCUVZjc1dVRkJXU3hEUVVGRE8wRkJSUzlDTEcxRFFVRjNRaXhIUVVGWExEWkNRVUUyUWl4RFFVRkRPMEZCUlRGRkxIbENRVUZqTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU03UVVGRk4wSXNaMEpCUVVzc1IwRkJjVUk3U1VGRGRFTXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVTBGQlV6dEpRVU5rTEVkQlFVY3NSVUZCUlN4VlFVRlZPMGxCUTJZc1IwRkJSeXhGUVVGRkxGRkJRVkU3U1VGRFlpeEhRVUZITEVWQlFVVXNaVUZCWlR0SlFVTndRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1pVRkJaVHRKUVVOd1FpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzWlVGQlpUdEpRVU53UWl4SFFVRkhMRVZCUVVVc1UwRkJVenRKUVVOa0xFZEJRVWNzUlVGQlJTeFJRVUZSTzBsQlEySXNSMEZCUnl4RlFVRkZMRlZCUVZVN1NVRkRaaXhIUVVGSExFVkJRVVVzVjBGQlZ6dEpRVU5vUWl4SFFVRkhMRVZCUVVVc1ZVRkJWVHRKUVVObUxFZEJRVWNzUlVGQlJTeFJRVUZSTzBsQlEySXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzV1VGQldUdEpRVU5xUWl4SFFVRkhMRVZCUVVVc1dVRkJXVHRKUVVOcVFpeEhRVUZITEVWQlFVVXNXVUZCV1R0SlFVTnFRaXhIUVVGSExFVkJRVVVzVjBGQlZ6dERRVU5xUWl4RFFVRkRPMEZCUlZrc2JVSkJRVkVzUjBGQmNVSTdTVUZEZWtNc1IwRkJSeXhGUVVGRkxGVkJRVlU3U1VGRFppeEhRVUZITEVWQlFVVXNjMEpCUVhOQ08wbEJRek5DTEVkQlFVY3NSVUZCUlN3eVFrRkJNa0k3U1VGRGFFTXNSMEZCUnl4RlFVRkZMR05CUVdNN1NVRkRia0lzUjBGQlJ5eEZRVUZGTEhsQ1FVRjVRanRKUVVNNVFpeEhRVUZITEVWQlFVVXNlVUpCUVhsQ08wbEJRemxDTEVkQlFVY3NSVUZCUlN4M1FrRkJkMEk3U1VGRE4wSXNSMEZCUnl4RlFVRkZMSGRDUVVGM1FqdEpRVU0zUWl4SFFVRkhMRVZCUVVVc2QwSkJRWGRDTzBsQlF6ZENMRWRCUVVjc1JVRkJSU3hwUWtGQmFVSTdTVUZEZEVJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0SlFVTjBRaXhIUVVGSExFVkJRVVVzTUVKQlFUQkNPMGxCUXk5Q0xFZEJRVWNzUlVGQlJTeDNRa0ZCZDBJN1NVRkROMElzUjBGQlJ5eEZRVUZGTEcxQ1FVRnRRanRKUVVONFFpeEhRVUZITEVWQlFVVXNhVUpCUVdsQ08wbEJRM1JDTEVkQlFVY3NSVUZCUlN4cFFrRkJhVUk3U1VGRGRFSXNSMEZCUnl4RlFVRkZMRzlEUVVGdlF6dEpRVU42UXl4SFFVRkhMRVZCUVVVc01FSkJRVEJDTzBsQlF5OUNMRWRCUVVjc1JVRkJSU3huUWtGQlowSTdTVUZEY2tJc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0RFFVTjJRaXhEUVVGRE8wRkJSVmtzTkVKQlFXbENMRWRCUVhGQ08wbEJRMnhFTEVkQlFVY3NSVUZCUlN4TFFVRkxPMGxCUTFZc1IwRkJSeXhGUVVGRkxHbENRVUZwUWp0SlFVTjBRaXhIUVVGSExFVkJRVVVzYzBKQlFYTkNPMGxCUXpOQ0xFZEJRVWNzUlVGQlJTeFZRVUZWTzBsQlEyWXNSMEZCUnl4RlFVRkZMRzlDUVVGdlFqdEpRVU42UWl4SFFVRkhMRVZCUVVVc2NVSkJRWEZDTzBsQlF6RkNMRWRCUVVjc1JVRkJSU3h0UWtGQmJVSTdTVUZEZUVJc1IwRkJSeXhGUVVGRkxHMUNRVUZ0UWp0SlFVTjRRaXhIUVVGSExFVkJRVVVzY1VKQlFYRkNPMGxCUXpGQ0xFZEJRVWNzUlVGQlJTeFpRVUZaTzBsQlEycENMRWRCUVVjc1JVRkJSU3hqUVVGak8wbEJRMjVDTEVkQlFVY3NSVUZCUlN4eFFrRkJjVUk3U1VGRE1VSXNSMEZCUnl4RlFVRkZMRzFDUVVGdFFqdEpRVU40UWl4SFFVRkhMRVZCUVVVc1owSkJRV2RDTzBsQlEzSkNMRWRCUVVjc1JVRkJSU3haUVVGWk8wbEJRMnBDTEVkQlFVY3NSVUZCUlN4aFFVRmhPMGxCUTJ4Q0xFZEJRVWNzUlVGQlJTd3JRa0ZCSzBJN1NVRkRjRU1zUjBGQlJ5eEZRVUZGTEhGQ1FVRnhRanRKUVVNeFFpeEhRVUZITEVWQlFVVXNWMEZCVnp0SlFVTm9RaXhIUVVGSExFVkJRVVVzV1VGQldUdERRVU5zUWl4RFFVRkRPMEZCUlVZN1IwRkRSenRCUVVOWExITkNRVUZYTEVkQlFYRkNPMGxCUXpWRExFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1NVRkRWaXhMUVVGTExFVkJRVVVzUjBGQlJ6dEpRVU5XTEV0QlFVc3NSVUZCUlN4SFFVRkhPMGxCUTFZc1MwRkJTeXhGUVVGRkxFZEJRVWM3U1VGRFZpeExRVUZMTEVWQlFVVXNSMEZCUnp0SlFVTldMRXRCUVVzc1JVRkJSU3hIUVVGSE8wbEJRMVlzUzBGQlN5eEZRVUZGTEVkQlFVYzdTVUZEVml4TFFVRkxMRVZCUVVVc1IwRkJSenRKUVVOV0xFdEJRVXNzUlVGQlJTeEhRVUZITzBsQlExWXNTMEZCU3l4RlFVRkZMRWRCUVVjN1EwRkRXQ3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWjNKdmF5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaM0p2YXljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JseHVhVzF3YjNKMElIdFRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMU5sY1ZCaGJHVjBkR1VzSUZObGNWQmhiR1YwZEdWQ1lYTmxmU0JtY205dElDY3VMM05sY1Mxd1lXeGxkSFJsY3ljN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNZ1pYaDBaVzVrY3lCVFpYRlFZV3hsZEhSbFFtRnpaU0I3WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUd4bGMyczZJRk5sY1ZCaGJHVjBkR1U3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUWdUR1Z6YXlncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXNaWE5ySUQwOVBTQjJiMmxrSURBcElIdGNiaUFnSUNBZ0lIUm9hWE11YkdWemF5QTlJSFJvYVhNdWJXRnJaVkJoYkdWMGRHVW9XMXh1SUNBZ0lDQWdJQ0JiV3lkSEp5d2dKMEVuTENBblV5Y3NJQ2RVSjEwc0lDZHZjbUZ1WjJVblhTeGNiaUFnSUNBZ0lDQWdXMXNuUXljc0lDZFdKeXdnSjBrbkxDQW5UQ2NzSUNkUUp5d2dKMFluTENBbldTY3NJQ2ROSnl3Z0oxY25YU3dnSjJGc2JGOW5jbVZsYmlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRPSnl3Z0oxRW5MQ0FuU0NkZExDQW5iV0ZuWlc1MFlTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkRUp5d2dKMFVuWFN3Z0ozSmxaQ2RkTEZ4dUlDQWdJQ0FnSUNCYld5ZExKeXdnSjFJblhTd2dKMkZzYkY5aWJIVmxKMTBzWEc0Z0lDQWdJQ0JkTENCbVlXeHpaU3dnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YkdWemF6dGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHZHliMnRIY205MWNITTZJRk5sY1ZCaGJHVjBkR1U3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUWdSM0p2YTBkeWIzVndjeWdwT2lCVFpYRlFZV3hsZEhSbElIdGNiaUFnSUNCcFppQW9kR2hwY3k1bmNtOXJSM0p2ZFhCeklEMDlQU0IyYjJsa0lEQXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVozSnZhMGR5YjNWd2N5QTlJSFJvYVhNdWJXRnJaVkJoYkdWMGRHVW9XMXh1SUNBZ0lDQWdJQ0JiV3lkREp5d2dKMVVuWFN3Z0ozbGxiR3h2ZHlkZExGeHVJQ0FnSUNBZ0lDQmJXeWRISnl3Z0oxQW5YU3dnSjNKbFpDZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkQkp5d2dKMVluTENBblNTY3NJQ2RNSnl3Z0owMG5MQ0FuUmljc0lDZFpKeXdnSjFjblhTd2dKMkZzYkY5bmNtVmxiaWRkTEZ4dUlDQWdJQ0FnSUNCYld5ZFNKeXdnSjBnbkxDQW5TeWRkTENBbmJHbG5hSFJmWW14MVpTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkRUp5d2dKMFVuWFN3Z0oyUmhjbXRmWW14MVpTZGRMRnh1SUNBZ0lDQWdJQ0JiV3lkVEp5d2dKMVFuTENBblRpY3NJQ2RSSjEwc0lDZHZjbUZ1WjJVblhTeGNiaUFnSUNBZ0lGMHNJR1poYkhObExDQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXBPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NW5jbTlyUjNKdmRYQnpPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdjbUZ6VFc5c09pQlRaWEZRWVd4bGRIUmxPMXh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMElGSmhjMDF2YkNncE9pQlRaWEZRWVd4bGRIUmxJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXlZWE5OYjJ3Z1BUMDlJSFp2YVdRZ01Da2dlMXh1SUNBZ0lDQWdkR2hwY3k1eVlYTk5iMndnUFNCdVpYY2dRVzFwYm05aFkybGtjMUJoYkdWMGRHVnpLSHRjYmlBZ0lDQWdJQ0FnTHk4Z2FIUjBjRG92TDJGalkyVnpMbVZ1Y3kxc2VXOXVMbVp5TDJKcGIzUnBZeTl5WVhOMGIzQXZhR1ZzY0M5amIyeHZkWEl1YUhSdFhHNGdJQ0FnSUNBZ0lDZEVKem9nSnlORk5qQkJNRUVuTENBdkx5QmhjM0FzSUdGemNHRnlkR2xqSUdGamFXUXNJR0Z6Y0Z4dUlDQWdJQ0FnSUNBblJTYzZJQ2NqUlRZd1FUQkJKeXdnTHk4Z1oyeDFMQ0JuYkhWMFlXMXBZeUJoWTJsa1hHNGdJQ0FnSUNBZ0lDZERKem9nSnlORk5rVTJNREFuTENBdkx5QmplWE1zSUdONWMzUmxhVzVsWEc0Z0lDQWdJQ0FnSUNkTkp6b2dKeU5GTmtVMk1EQW5MQ0F2THlCdFpYUXNJRzFsZEdocGIyNXBibVZjYmlBZ0lDQWdJQ0FnSjBzbk9pQW5JekUwTlVGR1JpY3NJQzh2SUd4NWN5d2diSGx6YVc1bFhHNGdJQ0FnSUNBZ0lDZFNKem9nSnlNeE5EVkJSa1luTENBdkx5QmhjbWNzSUdGeVoybHVhVzVsWEc0Z0lDQWdJQ0FnSUNkVEp6b2dKeU5HUVRrMk1EQW5MQ0F2THlCelpYSXNJSE5sY21sdVpWeHVJQ0FnSUNBZ0lDQW5WQ2M2SUNjalJrRTVOakF3Snl3Z0x5OGdkR2h5TENCMGFISmxiMjVwYm1WY2JpQWdJQ0FnSUNBZ0owWW5PaUFuSXpNeU16SkJRU2NzSUM4dklIQm9aU3dnY0dobGJubHNZV3hoYm1sdVpWeHVJQ0FnSUNBZ0lDQW5XU2M2SUNjak16SXpNa0ZCSnl3Z0x5OGdkSGx5TENCMGVYSnZjMmx1WlZ4dUlDQWdJQ0FnSUNBblRpYzZJQ2NqTURCRVEwUkRKeXdnTHk4Z1lYTnVMQ0JoYzNCaGNtRm5hVzVsWEc0Z0lDQWdJQ0FnSUNkUkp6b2dKeU13TUVSRFJFTW5MQ0F2THlCbmJHNHNJR2RzZFhSaGJXbHVaVnh1SUNBZ0lDQWdJQ0FuUnljNklDY2pSVUpGUWtWQ0p5d2dMeThnWjJ4NUxDQm5iSGxqYVc1bFhHNGdJQ0FnSUNBZ0lDZE1Kem9nSnlNd1JqZ3lNRVluTENBdkx5QnNaWFVzSUd4bGRXTnBibVZjYmlBZ0lDQWdJQ0FnSjFZbk9pQW5JekJHT0RJd1JpY3NJQzh2SUhaaGJDd2dkbUZzYVc1bFhHNGdJQ0FnSUNBZ0lDZEpKem9nSnlNd1JqZ3lNRVluTENBdkx5QnBiR1VzSUdsemIyeGxkV05wYm1WY2JpQWdJQ0FnSUNBZ0owRW5PaUFuSTBNNFF6aERPQ2NzSUM4dklHRnNZU3dnWVd4aGJtbHVaVnh1SUNBZ0lDQWdJQ0FuVnljNklDY2pRalExUVVJMEp5d2dMeThnZEhKd0xDQjBjbmx3ZEc5d2FHRnVYRzRnSUNBZ0lDQWdJQ2RJSnpvZ0p5TTRNamd5UkRJbkxDQXZMeUJvYVhNc0lHaHBjM1JwWkdsdVpWeHVJQ0FnSUNBZ0lDQW5VQ2M2SUNjalJFTTVOamd5Snl3Z0x5OGdjSEp2TENCd2NtOXNhVzVsWEc0Z0lDQWdJQ0FnSUNkdmRHaGxjbk1uT2lBbkkwSkZRVEEyUlNjc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtRnpUVzlzTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJCYldsdWIyRmphV1J6SUh0Y2JpQWdjM1JoZEdsaklISmxZV1J2Ym14NUlGTmxiVlI1Y0dVNklITjBjbWx1WnlBOUlDZEJiV2x1YjJGamFXUnpKenRjYmx4dUlDQnpkR0YwYVdNZ2NtVmhaRzl1YkhrZ1UyVnRWSGx3WlUxMWJIUnBjR3hsUVd4cFoyNXRaVzUwT2lCemRISnBibWNnUFNBblFXMXBibTloWTJsa2MwMTFiSFJwY0d4bFFXeHBaMjV0Wlc1MEp6dGNibHh1SUNCemRHRjBhV01nZFc1a1pXWnBibVZrUTI5c2IzSWdQU0FuY21kaUtERXdNQ3d4TURBc01UQXdLU2M3WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCT1lXMWxjem9nVTNSeWFXNW5SR2xqZEdsdmJtRnllU0E5SUh0Y2JpQWdJQ0FuUnljNklDZEhiSGxqYVc1bEp5eGNiaUFnSUNBblRDYzZJQ2RNWlhWamFXNWxKeXhjYmlBZ0lDQW5XU2M2SUNkVWVYSnZjMmx1WlNjc1hHNGdJQ0FnSjFNbk9pQW5VMlZ5YVc1bEp5eGNiaUFnSUNBblJTYzZJQ2RIYkhWMFlXMXBZeUJoWTJsa0p5eGNiaUFnSUNBblVTYzZJQ2RIYkhWMFlXMXBibVVuTEZ4dUlDQWdJQ2RFSnpvZ0owRnpjR0Z5ZEdsaklHRmphV1FuTEZ4dUlDQWdJQ2RPSnpvZ0owRnpjR0Z5WVdkcGJtVW5MRnh1SUNBZ0lDZEdKem9nSjFCb1pXNTViR0ZzWVc1cGJtVW5MRnh1SUNBZ0lDZEJKem9nSjBGc1lXNXBibVVuTEZ4dUlDQWdJQ2RMSnpvZ0oweDVjMmx1WlNjc1hHNGdJQ0FnSjFJbk9pQW5RWEpuYVc1cGJtVW5MRnh1SUNBZ0lDZElKem9nSjBocGMzUnBaR2x1WlNjc1hHNGdJQ0FnSjBNbk9pQW5RM2x6ZEdWcGJtVW5MRnh1SUNBZ0lDZFdKem9nSjFaaGJHbHVaU2NzWEc0Z0lDQWdKMUFuT2lBblVISnZiR2x1WlNjc1hHNGdJQ0FnSjFjbk9pQW5WSEo1Y0hSdmNHaGhiaWNzWEc0Z0lDQWdKMGtuT2lBblNYTnZiR1YxWTJsdVpTY3NYRzRnSUNBZ0owMG5PaUFuVFdWMGFHbHZibWx1WlNjc1hHNGdJQ0FnSjFRbk9pQW5WR2h5Wlc5dWFXNWxKeXhjYmlBZ2ZUdGNibHh1SUNCd2RXSnNhV01nYzNSaGRHbGpJRUZCVTIxcGJHVnpPaUJUZEhKcGJtZEVhV04wYVc5dVlYSjVJRDBnZTF4dUlDQWdJQ2RISnpvZ0owNURReWc5VHlsUEp5eGNiaUFnSUNBblRDYzZJQ2RPVzBOQVNGMG9RME1vUXlsREtVTW9QVThwVHljc1hHNGdJQ0FnSjFrbk9pQW5Ua01vUTBNeFBVTkRQVU1vVHlsRFBVTXhLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxTW5PaUFuVGtNb1EwOHBReWc5VHlsUEp5eGNiaUFnSUNBblJTYzZJQ2RPVzBOQVFFaGRLRU5EUXloUEtUMVBLVU1vUFU4cFR5Y3NYRzRnSUNBZ0oxRW5PaUFuVGx0RFFFQklYU2hEUTBNb1RpazlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZEVKem9nSjA1YlEwQkFTRjBvUTBNb1R5azlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZE9Kem9nSjA1YlEwQkFTRjBvUTBNb1RpazlUeWxES0QxUEtVOG5MRnh1SUNBZ0lDZEdKem9nSjA1REtFTkRNVDFEUXoxRFF6MURNU2xES0QxUEtVOG5MRnh1SUNBZ0lDZEJKem9nSjA1YlEwQklYU2hES1VNb1BVOHBUeWNzWEc0Z0lDQWdKMHNuT2lBblRrTW9RME5EUTA0cFF5ZzlUeWxQSnl4Y2JpQWdJQ0FuVWljNklDZE9XME5BU0Ywb1EwTkRUa01vUFU0cFF5bERLRDFQS1U4bkxGeHVJQ0FnSUNkSUp6b2dKMDVES0VORE1UMURUajFEVzA1ZE1TbERLRDFQS1U4bkxGeHVJQ0FnSUNkREp6b2dKMDViUTBCQVNGMG9RMU1wUXlnOVR5bFBKeXhjYmlBZ0lDQW5WaWM2SUNkT1F5aERLRU1wUXlsREtEMVBLVThuTEZ4dUlDQWdJQ2RRSnpvZ0owNG9RME5ETVNsRE1VTW9QVThwVHljc1hHNGdJQ0FnSjFjbk9pQW5UbHREUUVCSVhTaERZekZqTW1OalkyTmpNbTRvVzBoZEtXTXhLVU1vUFU4cFR5Y3NYRzRnSUNBZ0owa25PaUFuVGx0RFFFaGRLRnREUUVoZEtFTXBRME1wUXlnOVR5bFBKeXhjYmlBZ0lDQW5UU2M2SUNkT1F5aERRMU5ES1VNb1BVOHBUeWNzWEc0Z0lDQWdKMVFuT2lBblRrTW9ReWhQS1VNcFF5ZzlUeWxQSnl4Y2JpQWdmVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUVGQlUyMXBiR1Z6VkhKMWJtTmhkR1ZrT2lCVGRISnBibWRFYVdOMGFXOXVZWEo1SUQwZ2UxeHVJQ0FnSUNkSEp6b2dKeXBES2ljc1hHNGdJQ0FnSjB3bk9pQW5RME1vUXlsRFcwTkFTRjBvS2lrcUp5eGNiaUFnSUNBbldTYzZJQ2RETVQxRFF5ZzlRME05UXpGRFF5Z3FLU29wVHljc1hHNGdJQ0FnSjFNbk9pQW5UME5ES0NvcFF5b25MRnh1SUNBZ0lDZEZKem9nSnlwYlEwQkFTRjBvUTBOREtFOHBQVThwS2ljc1hHNGdJQ0FnSjFFbk9pQW5LazViUTBCQVNGMG9RME5ES0U0cFBVOHBLaWNzWEc0Z0lDQWdKMFFuT2lBbktsdERRRUJJWFNoRFF5aFBLVDFQS1NvbkxGeHVJQ0FnSUNkT0p6b2dKeXBiUTBCQVNGMG9RME1vVGlrOVR5a3FKeXhjYmlBZ0lDQW5SaWM2SUNkRE1UMURRejFES0VNOVF6RXBRME1vS2lrcUp5eGNiaUFnSUNBblFTYzZJQ2REVzBOQVNGMG9LaWtxSnl4Y2JpQWdJQ0FuU3ljNklDZERLRU5EVGlsRFF5Z3FLU29uTEZ4dUlDQWdJQ2RTSnpvZ0p5cGJRMEJJWFNoRFEwTk9ReWc5VGlsREtTb25MRnh1SUNBZ0lDZElKem9nSjBNeFBVTW9Ua005VGpFcFEwTW9LaWtxSnl4Y2JpQWdJQ0FuUXljNklDZERLRnREUUVCSVhTZ3FLU29wVXljc1hHNGdJQ0FnSjFZbk9pQW5RME1vUXlsREtDb3BLaWNzWEc0Z0lDQWdKMUFuT2lBblF6RkRRMDRvS2lsRE1Tb25MRnh1SUNBZ0lDZFhKem9nSnlwYlEwQkFTRjBvUTJNeFl6SmpZMk5qWXpKdUtGdElYU2xqTVNrcUp5eGNiaUFnSUNBblNTYzZJQ2REUTF0RFFFaGRLRU1wVzBOQVNGMG9LaWtxSnl4Y2JpQWdJQ0FuVFNjNklDZERVME5EUXlncUtTb25MRnh1SUNBZ0lDZFVKem9nSjBOREtFOHBReWdxS1NvbkxGeHVJQ0I5TzF4dVhHNGdJQzhxS2lCVVQwUlBPaUJHZFd4c1AxeHVJQ0FnS2k5Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCQlFVWjFiR3hPWVcxbGN6b2dVM1J5YVc1blJHbGpkR2x2Ym1GeWVTQTlJSHRjYmlBZ0lDQW5RV3hoSnpvZ0owRW5MRnh1SUNBZ0lDZEJjbWNuT2lBblVpY3NYRzRnSUNBZ0owRnpiaWM2SUNkT0p5eGNiaUFnSUNBblFYTndKem9nSjBRbkxGeHVJQ0FnSUNkRGVYTW5PaUFuUXljc1hHNGdJQ0FnSjBkc2JpYzZJQ2RSSnl4Y2JpQWdJQ0FuUjJ4MUp6b2dKMFVuTEZ4dUlDQWdJQ2RIYkhrbk9pQW5SeWNzWEc0Z0lDQWdKMGhwY3ljNklDZElKeXhjYmlBZ0lDQW5TV3hsSnpvZ0owa25MRnh1SUNBZ0lDZE1aWFVuT2lBblRDY3NYRzRnSUNBZ0oweDVjeWM2SUNkTEp5eGNiaUFnSUNBblRXVjBKem9nSjAwbkxGeHVJQ0FnSUNkUWFHVW5PaUFuUmljc1hHNGdJQ0FnSjFCeWJ5YzZJQ2RRSnl4Y2JpQWdJQ0FuVTJWeUp6b2dKMU1uTEZ4dUlDQWdJQ2RVYUhJbk9pQW5WQ2NzWEc0Z0lDQWdKMVJ5Y0NjNklDZFhKeXhjYmlBZ0lDQW5WSGx5SnpvZ0oxa25MRnh1SUNBZ0lDZFdZV3duT2lBblZpY3NYRzRnSUgwN1hHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5Qm5aWFJRWVd4bGRIUmxLSE5qYUdWdFpUb2djM1J5YVc1bklEMGdKMmR5YjJzbktUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdjM2RwZEdOb0lDaHpZMmhsYldVcElIdGNiaUFnSUNCallYTmxJQ2RuY205ckp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVIzSnZhMGR5YjNWd2N6dGNiaUFnSUNCallYTmxJQ2RzWlhOckp6cGNiaUFnSUNBZ0lISmxkSFZ5YmlCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVRHVnphenRjYmlBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCRGFHVnRVR0ZzWlhSMFpUb2djMk5vWlcxbElGeGNZQ1I3YzJOb1pXMWxmVnhjWUNCa2IyVnpJRzV2ZENCbGVHbHpkR0FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCU1pYUjFjbTV6SUdScGRtbGtaV1FnWVcxcGJtOGdZV05wWkNCM2FYUm9JR2wwY3lCamIyNTBaVzUwSUdsdUlIUm9aU0JpY21GamEyVjBMQ0JwWmlCMGFHVWdZMjl1ZEdWdWRDQnBjeUJ1ZFcxaVpYSXNJSFJvWlc0Z2FYUnpJRzl0YVhSMFpXUmNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJR01nY21GM0lHRnRhVzV2WEc0Z0lDQXFJRUJ5WlhSMWNtNGdlMXR6ZEhKcGJtY3NJSE4wY21sdVoxMTlJRzkxZEdWeUlHRnVaQ0JwYm01bGNpQmpiMjUwWlc1MFhHNGdJQ0FxTDF4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdkbGRFbHVibVZ5VDNWMFpYSW9Zem9nYzNSeWFXNW5LVG9nVzNOMGNtbHVaeXdnYzNSeWFXNW5YU0I3WEc0Z0lDQWdiR1YwSUdselNXNXVaWElnUFNBd08xeHVJQ0FnSUd4bGRDQnBibTVsY2lBOUlDY25PMXh1SUNBZ0lHeGxkQ0J2ZFhSbGNpQTlJQ2NuTzF4dVhHNGdJQ0FnWm05eUlDaGpiMjV6ZENCamFHRnlJRzltSUdNcElIdGNiaUFnSUNBZ0lHbG1JQ2hqYUdGeUlEMDlJQ2NvSnlsY2JpQWdJQ0FnSUNBZ2FYTkpibTVsY2lzck8xeHVJQ0FnSUNBZ1pXeHpaU0JwWmlBb1kyaGhjaUE5UFNBbktTY3BYRzRnSUNBZ0lDQWdJR2x6U1c1dVpYSXRMVHRjYmlBZ0lDQWdJR1ZzYzJVZ2FXWWdLR2x6U1c1dVpYSXBYRzRnSUNBZ0lDQWdJR2x1Ym1WeUlDczlJR05vWVhJN1hHNGdJQ0FnSUNCbGJITmxYRzRnSUNBZ0lDQWdJRzkxZEdWeUlDczlJR05vWVhJN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJQ0ZwYzA1aFRpaHdZWEp6WlVsdWRDaHBibTVsY2lrcElEOGdXMjkxZEdWeUxDQW5KMTBnT2lCYmIzVjBaWElzSUdsdWJtVnlYVHRjYmlBZ2ZWeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwUTI5c2IzSkJRVkJwZG05MEtHMXZibTl0WlhJNklITjBjbWx1WnlBOUlDY25MQ0J6WTJobGJXVTZJQ2RuY205ckp5QTlJQ2RuY205ckp5azZJRnR6ZEhKcGJtY3NJSE4wY21sdVp5d2djM1J5YVc1bkxDQnVkVzFpWlhKZElIdGNiaUFnSUNBdkwyTnZibk4wSUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1BTQkJRVkJoYkdWMGRHVnpMa2R5YjJ0SGNtOTFjSE1vS1R0Y2JpQWdJQ0JqYjI1emRDQmphR1Z0VUdGc1pYUjBaVWx1YzNSaGJtTmxJRDBnZEdocGN5NW5aWFJRWVd4bGRIUmxLSE5qYUdWdFpTazdYRzRnSUNBZ2JHVjBJRnR2ZFhSbGNrMXZibTl0WlhJc0lHbHVibVZ5VFc5dWIyMWxjbDBnUFNCMGFHbHpMbWRsZEVsdWJtVnlUM1YwWlhJb2JXOXViMjFsY2lrN1hHNGdJQ0FnYjNWMFpYSk5iMjV2YldWeUlEMGdLRzkxZEdWeVRXOXViMjFsY2k1c1pXNW5kR2dnUGlBMklEOGdZQ1I3YjNWMFpYSk5iMjV2YldWeUxuTnNhV05sS0RBc0lETXBmUzR1TG1BZ09pQnZkWFJsY2sxdmJtOXRaWElwTzF4dUlDQWdJR2x1Ym1WeVRXOXViMjFsY2lBOUlDaHBibTVsY2sxdmJtOXRaWEl1YkdWdVozUm9JRDRnTmlBL0lHQWtlMmx1Ym1WeVRXOXViMjFsY2k1emJHbGpaU2d3TENBektYMHVMaTVnSURvZ2FXNXVaWEpOYjI1dmJXVnlLVHRjYmx4dUlDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBeElIeDhJRzF2Ym05dFpYSmJNVjBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmhiV2x1YnlBOUlHMXZibTl0WlhKYk1GMC9MblJ2VlhCd1pYSkRZWE5sS0NraE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdGdGFXNXZJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1AxeHVJQ0FnSUNBZ0lDQmJZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaUzVuWlhRb1lXMXBibThwTENCaGJXbHVieXdnYVc1dVpYSk5iMjV2YldWeUxDQXhYU0E2WEc0Z0lDQWdJQ0FnSUZ0MGFHbHpMblZ1WkdWbWFXNWxaRU52Ykc5eUxDQnZkWFJsY2sxdmJtOXRaWElzSUdsdWJtVnlUVzl1YjIxbGNpd2dNVjA3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0cxdmJtOXRaWEpiTUYwZ1BUMGdKMlFuSUNZbUlHMXZibTl0WlhKYk1WMGhJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVcElIdGNiaUFnSUNBZ0lHbG1JQ2h0YjI1dmJXVnlMbXhsYm1kMGFDQTlQU0F5SUh4OElHMXZibTl0WlhKYk1sMGdQVDBnSnlnbktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHRnRhVzV2SUQwZ2JXOXViMjFsY2xzeFhUOHVkRzlWY0hCbGNrTmhjMlVvS1NFN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCaGJXbHVieUJwYmlCamFHVnRVR0ZzWlhSMFpVbHVjM1JoYm1ObElEOWNiaUFnSUNBZ0lDQWdJQ0JiWTJobGJWQmhiR1YwZEdWSmJuTjBZVzVqWlM1blpYUW9ZVzFwYm04cExDQmhiV2x1Ynl3Z2FXNXVaWEpOYjI1dmJXVnlMQ0F5WFNBNlhHNGdJQ0FnSUNBZ0lDQWdXM1JvYVhNdWRXNWtaV1pwYm1Wa1EyOXNiM0lzSUc5MWRHVnlUVzl1YjIxbGNpd2dhVzV1WlhKTmIyNXZiV1Z5TENBeVhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9iVzl1YjIxbGNpNXpkV0p6ZEhKcGJtY29NQ3dnTXlrZ2FXNGdkR2hwY3k1QlFVWjFiR3hPWVcxbGN5a2dlMXh1SUNBZ0lDQWdhV1lnS0cxdmJtOXRaWEl1YkdWdVozUm9JRDA5SURNZ2ZId2diVzl1YjIxbGNsc3pYU0E5UFNBbktDY3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZVzFwYm04Z1BTQjBhR2x6TGtGQlJuVnNiRTVoYldWelcyMXZibTl0WlhJdWMzVmljM1J5YVc1bktEQXNJRE1wWFR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGdGFXNXZJR2x1SUdOb1pXMVFZV3hsZEhSbFNXNXpkR0Z1WTJVZ1AxeHVJQ0FnSUNBZ0lDQWdJRnRqYUdWdFVHRnNaWFIwWlVsdWMzUmhibU5sTG1kbGRDaGhiV2x1Ynlrc0lHRnRhVzV2TENCcGJtNWxjazF2Ym05dFpYSXNJRE5kSURwY2JpQWdJQ0FnSUNBZ0lDQmJkR2hwY3k1MWJtUmxabWx1WldSRGIyeHZjaXdnYjNWMFpYSk5iMjV2YldWeUxDQnBibTVsY2sxdmJtOXRaWElzSUROZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRiMjV2YldWeVd6QmRQeTUwYjB4dmQyVnlRMkZ6WlNncElEMDlJRzF2Ym05dFpYSmJNRjBwSUh0Y2JpQWdJQ0FnSUdsbUlDaHRiMjV2YldWeUxuTjFZbk4wY21sdVp5Z3hMQ0F6S1NCcGJpQjBhR2x6TGtGQlJuVnNiRTVoYldWektTQjdYRzRnSUNBZ0lDQWdJR2xtSUNodGIyNXZiV1Z5TG14bGJtZDBhQ0E5UFNBMElIeDhJRzF2Ym05dFpYSmJORjBnUFQwZ0p5Z25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWVcxcGJtOGdQU0IwYUdsekxrRkJSblZzYkU1aGJXVnpXMjF2Ym05dFpYSXVjM1ZpYzNSeWFXNW5LREVzSURNcFhUdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZVzFwYm04Z2FXNGdZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaU0EvWEc0Z0lDQWdJQ0FnSUNBZ0lDQmJZMmhsYlZCaGJHVjBkR1ZKYm5OMFlXNWpaUzVuWlhRb1lXMXBibThwTENCaGJXbHVieXdnYVc1dVpYSk5iMjV2YldWeUxDQTBYU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQmJkR2hwY3k1MWJtUmxabWx1WldSRGIyeHZjaXdnYjNWMFpYSk5iMjV2YldWeUxDQnBibTVsY2sxdmJtOXRaWElzSURSZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUZ0MGFHbHpMblZ1WkdWbWFXNWxaRU52Ykc5eUxDQnZkWFJsY2sxdmJtOXRaWElzSUdsdWJtVnlUVzl1YjIxbGNpd2dNRjA3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJpbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBOdWNsZW90aWRlc1BhbGV0dGVzIGV4dGVuZHMgU2VxUGFsZXR0ZUJhc2Uge1xuICAgIHN0YXRpYyBnZXQgQ2hyb21hdG9ncmFtKCkge1xuICAgICAgICBpZiAodGhpcy5jaHJvbWF0b2dyYW0gPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgdGhpcy5jaHJvbWF0b2dyYW0gPSBuZXcgTnVjbGVvdGlkZXNQYWxldHRlcyh7XG4gICAgICAgICAgICAgICAgJ0EnOiAnZ3JlZW4nLFxuICAgICAgICAgICAgICAgICdDJzogJ2JsdWUnLFxuICAgICAgICAgICAgICAgICdHJzogJ2JsYWNrJyxcbiAgICAgICAgICAgICAgICAnVCc6ICdyZWQnLCAnVSc6ICdyZWQnLFxuICAgICAgICAgICAgICAgICdvdGhlcnMnOiAnZ3JheScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaHJvbWF0b2dyYW07XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE51Y2xlb3RpZGVzIHtcbn1cbk51Y2xlb3RpZGVzLlNlbVR5cGUgPSAnTnVjbGVvdGlkZXMnO1xuTnVjbGVvdGlkZXMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50ID0gJ051Y2xlb3RpZGVzTXVsdGlwbGVBbGlnbm1lbnQnO1xuTnVjbGVvdGlkZXMuTmFtZXMgPSB7XG4gICAgJ0EnOiAnQWRlbmluZScsXG4gICAgJ0MnOiAnQ3l0b3NpbmUnLFxuICAgICdHJzogJ0d1YW5pbmUnLFxuICAgICdUJzogJ1RoeW1pbmUnLFxuICAgICdVJzogJ1VyYWNpbCcsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYm5WamJHVnZkR2xrWlhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUp1ZFdOc1pXOTBhV1JsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkxRU3hQUVVGUExFVkJRV0VzWTBGQll5eEZRVUZETEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRk1VUXNUVUZCVFN4UFFVRlBMRzFDUVVGdlFpeFRRVUZSTEdOQlFXTTdTVUZIT1VNc1RVRkJUU3hMUVVGTExGbEJRVms3VVVGRE5VSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1dVRkJXU3hMUVVGTExFdEJRVXNzUTBGQlF5eEZRVUZGTzFsQlEyaERMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzU1VGQlNTeHRRa0ZCYlVJc1EwRkJRenRuUWtGRE1VTXNSMEZCUnl4RlFVRkZMRTlCUVU4N1owSkJRMW9zUjBGQlJ5eEZRVUZGTEUxQlFVMDdaMEpCUTFnc1IwRkJSeXhGUVVGRkxFOUJRVTg3WjBKQlExb3NSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN6dG5Ra0ZEZEVJc1VVRkJVU3hGUVVGRkxFMUJRVTA3WVVGRGFrSXNRMEZCUXl4RFFVRkRPMU5CUTBvN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdTVUZETTBJc1EwRkJRenREUVVOR08wRkJSVVFzVFVGQlRTeFBRVUZQTEZkQlFWYzdPMEZCUTA0c2JVSkJRVThzUjBGQlZ5eGhRVUZoTEVOQlFVTTdRVUZGYUVNc2IwTkJRWGRDTEVkQlFWY3NPRUpCUVRoQ0xFTkJRVU03UVVGRmNFVXNhVUpCUVVzc1IwRkJjVUk3U1VGRGRFTXNSMEZCUnl4RlFVRkZMRk5CUVZNN1NVRkRaQ3hIUVVGSExFVkJRVVVzVlVGQlZUdEpRVU5tTEVkQlFVY3NSVUZCUlN4VFFVRlRPMGxCUTJRc1IwRkJSeXhGUVVGRkxGTkJRVk03U1VGRFpDeEhRVUZITEVWQlFVVXNVVUZCVVR0RFFVTmtMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dVhHNXBiWEJ2Y25RZ2UxTjBjbWx1WjBScFkzUnBiMjVoY25sOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdVMlZ4VUdGc1pYUjBaU3dnVTJWeFVHRnNaWFIwWlVKaGMyVjlJR1p5YjIwZ0p5NHZjMlZ4TFhCaGJHVjBkR1Z6Snp0Y2JseHVaWGh3YjNKMElHTnNZWE56SUU1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhNZ1pYaDBaVzVrY3lCVFpYRlFZV3hsZEhSbFFtRnpaU0I3WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOb2NtOXRZWFJ2WjNKaGJUb2dVMlZ4VUdGc1pYUjBaVHRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUdkbGRDQkRhSEp2YldGMGIyZHlZVzBvS1RvZ1UyVnhVR0ZzWlhSMFpTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyaHliMjFoZEc5bmNtRnRJRDA5UFNCMmIybGtJREFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0SUQwZ2JtVjNJRTUxWTJ4bGIzUnBaR1Z6VUdGc1pYUjBaWE1vZTF4dUlDQWdJQ0FnSUNBblFTYzZJQ2RuY21WbGJpY3NYRzRnSUNBZ0lDQWdJQ2RESnpvZ0oySnNkV1VuTEZ4dUlDQWdJQ0FnSUNBblJ5YzZJQ2RpYkdGamF5Y3NJQzh2SUc5eVlXNW5aU0EvWEc0Z0lDQWdJQ0FnSUNkVUp6b2dKM0psWkNjc0lDZFZKem9nSjNKbFpDY3NYRzRnSUNBZ0lDQWdJQ2R2ZEdobGNuTW5PaUFuWjNKaGVTY3NYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMmh5YjIxaGRHOW5jbUZ0TzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJPZFdOc1pXOTBhV1JsY3lCN1hHNGdJSE4wWVhScFl5QnlaV0ZrYjI1c2VTQlRaVzFVZVhCbE9pQnpkSEpwYm1jZ1BTQW5UblZqYkdWdmRHbGtaWE1uTzF4dVhHNGdJSE4wWVhScFl5QnlaV0ZrYjI1c2VTQlRaVzFVZVhCbFRYVnNkR2x3YkdWQmJHbG5ibTFsYm5RNklITjBjbWx1WnlBOUlDZE9kV05zWlc5MGFXUmxjMDExYkhScGNHeGxRV3hwWjI1dFpXNTBKenRjYmx4dUlDQndkV0pzYVdNZ2MzUmhkR2xqSUU1aGJXVnpPaUJUZEhKcGJtZEVhV04wYVc5dVlYSjVJRDBnZTF4dUlDQWdJQ2RCSnpvZ0owRmtaVzVwYm1VbkxGeHVJQ0FnSUNkREp6b2dKME41ZEc5emFXNWxKeXhjYmlBZ0lDQW5SeWM2SUNkSGRXRnVhVzVsSnl4Y2JpQWdJQ0FuVkNjNklDZFVhSGx0YVc1bEp5eGNiaUFnSUNBblZTYzZJQ2RWY21GamFXd25MRnh1SUNCOU8xeHVmVnh1SWwxOSIsImV4cG9ydCBjbGFzcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgY29uc3RydWN0b3IocGFsZXR0ZSkge1xuICAgICAgICB0aGlzLl9wYWxldHRlID0gcGFsZXR0ZTtcbiAgICB9XG4gICAgc3RhdGljIG1ha2VQYWxldHRlKGR0LCBzaW1wbGlmaWVkID0gZmFsc2UsIFBhbGV0dGVUeXBlID0gU2VxUGFsZXR0ZUJhc2UpIHtcbiAgICAgICAgY29uc3QgcGFsZXR0ZSA9IHt9O1xuICAgICAgICBkdC5mb3JFYWNoKChjcCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqTGlzdCA9IGNwWzBdO1xuICAgICAgICAgICAgY29uc3QgY29sb3VyID0gY3BbMV07XG4gICAgICAgICAgICBvYmpMaXN0LmZvckVhY2goKG9iaiwgaW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgcGFsZXR0ZVtvYmpdID0gdGhpcy5jb2xvdXJQYWxldHRlW2NvbG91cl1bc2ltcGxpZmllZCA/IDAgOiBpbmRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFBhbGV0dGVUeXBlKHBhbGV0dGUpO1xuICAgIH1cbiAgICBnZXQobSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFsZXR0ZVttXTtcbiAgICB9XG59XG5TZXFQYWxldHRlQmFzZS51bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbi8qKiBQYWxldHRlIHdpdGggc2hhZGVzIG9mIHByaW1hcnkgY29sb3JzICovXG5TZXFQYWxldHRlQmFzZS5jb2xvdXJQYWxldHRlID0ge1xuICAgICdvcmFuZ2UnOiBbJ3JnYigyNTUsMTg3LDEyMCknLCAncmdiKDI0NSwxNjcsMTAwKScsICdyZ2IoMjM1LDEzNyw3MCknLCAncmdiKDIwNSwgMTExLCA3MSknXSxcbiAgICAnYWxsX2dyZWVuJzogWydyZ2IoNDQsMTYwLDQ0KScsICdyZ2IoNzQsMTYwLDc0KScsICdyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsXG4gICAgICAgICdyZ2IoMjQsMTEwLDc5KScsICdyZ2IoMTUyLDIyMywxMzgpJywgJ3JnYigxODIsIDIyMywgMTM4KScsICdyZ2IoMTUyLCAxOTMsIDEzOCknXSxcbiAgICAnYWxsX2JsdWUnOiBbJ3JnYigzMSwxMTksMTgwKScsICdyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDEyMiwgMTAyLCAxODkpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDE0MSwgMTI0LCAyMTcpJyxcbiAgICAgICAgJ3JnYigzMSwgMTIwLCAxNTApJ10sXG4gICAgJ21hZ2VudGEnOiBbJ3JnYigxNjIsMTA2LDE5MiknLCAncmdiKDE5NywxNjUsMjI0KScsICdyZ2IoMjA4LDExMywyMTgpJ10sXG4gICAgJ3JlZCc6IFsncmdiKDIxNCwzOSw0MCknLCAncmdiKDI1NSwxNTIsMTUwKSddLFxuICAgICdzdF9ibHVlJzogWydyZ2IoMjMsMTkwLDIwNyknLCAncmdiKDE1OCwyMTgsMjI5KScsICdyZ2IoMzEsMTE5LDE4MCknXSxcbiAgICAnZGFya19ibHVlJzogWydyZ2IoMzEsMTE5LDE4MCknLCAncmdiKDMxLCAxMjAsIDE1MCknXSxcbiAgICAnbGlnaHRfYmx1ZSc6IFsncmdiKDIzLDE5MCwyMDcpJywgJ3JnYigxNTgsMjE4LDIyOSknLCAncmdiKDEwOCwgMjE4LCAyMjkpJywgJ3JnYigyMywxOTAsMjI3KSddLFxuICAgICdsaWxhY19ibHVlJzogWydyZ2IoMTI0LDEwMiwyMTEpJywgJ3JnYigxNDksMTM0LDIxNyknLCAncmdiKDk3LCA4MSwgMTUwKSddLFxuICAgICdkYXJrX2dyZWVuJzogWydyZ2IoMjMsMTAzLDU3KScsICdyZ2IoMzAsMTEwLDk2KScsICdyZ2IoNjAsMTMxLDk1KScsICdyZ2IoMjQsMTEwLDc5KSddLFxuICAgICdncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDc0LDE2MCw3NCknXSxcbiAgICAnbGlnaHRfZ3JlZW4nOiBbJ3JnYigxNTIsMjIzLDEzOCknLCAncmdiKDE4MiwgMjIzLCAxMzgpJywgJ3JnYigxNTIsIDE5MywgMTM4KSddLFxuICAgICdzdF9ncmVlbic6IFsncmdiKDQ0LDE2MCw0NCknLCAncmdiKDE1MiwyMjMsMTM4KScsICdyZ2IoMzksIDE3NCwgOTYpJywgJ3JnYig3NCwxNjAsNzQpJ10sXG4gICAgJ3BpbmsnOiBbJ3JnYigyNDcsMTgyLDIxMCknXSxcbiAgICAnYnJvd24nOiBbJ3JnYigxNDAsODYsNzUpJywgJ3JnYigxMDIsIDYyLCA1NCknXSxcbiAgICAnZ3JheSc6IFsncmdiKDEyNywxMjcsMTI3KScsICdyZ2IoMTk5LDE5OSwxOTkpJywgJ3JnYigxOTYsMTU2LDE0OCknLCAncmdiKDIyMiwgMjIyLCAxODApJ10sXG4gICAgJ3llbGxvdyc6IFsncmdiKDE4OCwxODksMzQpJ10sXG4gICAgJ3doaXRlJzogWydyZ2IoMjMwLDIzMCwyMzApJ10sXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWeExYQmhiR1YwZEdWekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYzJWeExYQmhiR1YwZEdWekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRV2xDUVN4TlFVRk5MRTlCUVU4c1kwRkJZenRKUVRKRGVrSXNXVUZCV1N4UFFVRm5RenRSUVVNeFF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVNeFFpeERRVUZETzBsQmJFSlRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQmQwSXNSVUZEYmtRc1ZVRkJWU3hIUVVGSExFdEJRVXNzUlVGQlJTeGpRVUZ4UXl4alFVRmpPMUZCUlhaRkxFMUJRVTBzVDBGQlR5eEhRVUU0UWl4RlFVRkZMRU5CUVVNN1VVRkRPVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRk8xbEJRMmhDTEUxQlFVMHNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU4wUWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tJc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSVHRuUWtGRE0wSXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnhGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTB3c1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeFBRVUZQTEVsQlFVa3NWMEZCVnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRMnhETEVOQlFVTTdTVUZSVFN4SFFVRkhMRU5CUVVNc1EwRkJVenRSUVVOc1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE1VSXNRMEZCUXpzN1FVRm9SR0VzTmtKQlFXTXNSMEZCUnl4clFrRkJhMElzUTBGQlF6dEJRVVZzUkN3MFEwRkJORU03UVVGRE9VSXNORUpCUVdFc1IwRkJaME03U1VGRGVrUXNVVUZCVVN4RlFVRkZMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzYVVKQlFXbENMRVZCUVVVc2JVSkJRVzFDTEVOQlFVTTdTVUZETVVZc1YwRkJWeXhGUVVGRkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENMRVZCUVVVc1owSkJRV2RDTzFGQlEzQkhMR2RDUVVGblFpeEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHOUNRVUZ2UWl4RlFVRkZMRzlDUVVGdlFpeERRVUZETzBsQlEyNUdMRlZCUVZVc1JVRkJSU3hEUVVGRExHbENRVUZwUWl4RlFVRkZMR2xDUVVGcFFpeEZRVUZGTEc5Q1FVRnZRaXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMRzlDUVVGdlFqdFJRVU12Unl4dFFrRkJiVUlzUTBGQlF6dEpRVU4wUWl4VFFVRlRMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1EwRkJRenRKUVVOMlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4blFrRkJaMElzUlVGQlJTeHJRa0ZCYTBJc1EwRkJRenRKUVVNM1F5eFRRVUZUTEVWQlFVVXNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXp0SlFVTnlSU3hYUVVGWExFVkJRVVVzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXp0SlFVTnlSQ3haUVVGWkxFVkJRVVVzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4dlFrRkJiMElzUlVGQlJTeHBRa0ZCYVVJc1EwRkJRenRKUVVNNVJpeFpRVUZaTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hyUWtGQmEwSXNRMEZCUXp0SlFVTXhSU3haUVVGWkxFVkJRVVVzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJRenRKUVVOMFJpeFBRVUZQTEVWQlFVVXNRMEZCUXl4blFrRkJaMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJRenRKUVVNM1F5eGhRVUZoTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3h2UWtGQmIwSXNRMEZCUXp0SlFVTXZSU3hWUVVGVkxFVkJRVVVzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeG5Ra0ZCWjBJc1EwRkJRenRKUVVONFJpeE5RVUZOTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlF6dEpRVU0xUWl4UFFVRlBMRVZCUVVVc1EwRkJReXhuUWtGQlowSXNSVUZCUlN4clFrRkJhMElzUTBGQlF6dEpRVU12UXl4TlFVRk5MRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4clFrRkJhMElzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3h2UWtGQmIwSXNRMEZCUXp0SlFVTXhSaXhSUVVGUkxFVkJRVVVzUTBGQlF5eHBRa0ZCYVVJc1EwRkJRenRKUVVNM1FpeFBRVUZQTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlF6dERRVU01UWl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJQ29nWVhNZ1ozSnZheUJtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2WjNKdmF5YzdYRzVwYlhCdmNuUWdLaUJoY3lCMWFTQm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZkV2tuTzF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibHh1Wlhod2IzSjBJR2x1ZEdWeVptRmpaU0JUWlhGUVlXeGxkSFJsSUh0Y2JpQWdMeThnVkdobGNtVWdZWEpsSUhSdmJ5QnRkV05vSUhCeWIySnNaVzBnZDJsMGFDQnBibVJsZUdWeUlIQnliM0JsY25SNUlHbHVJSFI1Y0dWelkzSnBjSFF1WEc0Z0lDOHZJQzhxS2x4dUlDQXZMeUFnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYlNCTmIyNXZiV1Z5SUdOb1lYSmhZM1JsY2x4dUlDQXZMeUFnS2lCQWNtVjBkWEp1SUh0emRISnBibWQ5SUVOdmJHOXlYRzRnSUM4dklDQXFMMXh1SUNBdkx5QmJiVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5PMXh1SUNBdktpb2dUVzl1YjIxbGNpQmpiMnh2Y2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdiU0JOYjI1dmJXVnlYRzRnSUNBcUwxeHVJQ0JuWlhRb2JUb2djM1J5YVc1bktUb2djM1J5YVc1bk8xeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdVMlZ4VUdGc1pYUjBaVUpoYzJVZ2FXMXdiR1Z0Wlc1MGN5QlRaWEZRWVd4bGRIUmxJSHRjYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUIxYm1SbFptbHVaV1JEYjJ4dmNpQTlJQ2R5WjJJb01UQXdMREV3TUN3eE1EQXBKenRjYmx4dUlDQXZLaW9nVUdGc1pYUjBaU0IzYVhSb0lITm9ZV1JsY3lCdlppQndjbWx0WVhKNUlHTnZiRzl5Y3lBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHTnZiRzkxY2xCaGJHVjBkR1U2SUhzZ1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTBnZlNBOUlIdGNiaUFnSUNBbmIzSmhibWRsSnpvZ1d5ZHlaMklvTWpVMUxERTROeXd4TWpBcEp5d2dKM0puWWlneU5EVXNNVFkzTERFd01Da25MQ0FuY21kaUtESXpOU3d4TXpjc056QXBKeXdnSjNKbllpZ3lNRFVzSURFeE1Td2dOekVwSjEwc1hHNGdJQ0FnSjJGc2JGOW5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RjMExERTJNQ3czTkNrbkxDQW5jbWRpS0RJekxERXdNeXcxTnlrbkxDQW5jbWRpS0RNd0xERXhNQ3c1TmlrbkxDQW5jbWRpS0RZd0xERXpNU3c1TlNrbkxGeHVJQ0FnSUNBZ0ozSm5ZaWd5TkN3eE1UQXNOemtwSnl3Z0ozSm5ZaWd4TlRJc01qSXpMREV6T0NrbkxDQW5jbWRpS0RFNE1pd2dNakl6TENBeE16Z3BKeXdnSjNKbllpZ3hOVElzSURFNU15d2dNVE00S1NkZExGeHVJQ0FnSUNkaGJHeGZZbXgxWlNjNklGc25jbWRpS0RNeExERXhPU3d4T0RBcEp5d2dKM0puWWlneU15d3hPVEFzTWpBM0tTY3NJQ2R5WjJJb01USXlMQ0F4TURJc0lERTRPU2tuTENBbmNtZGlLREUxT0N3eU1UZ3NNakk1S1Njc0lDZHlaMklvTVRReExDQXhNalFzSURJeE55a25MRnh1SUNBZ0lDQWdKM0puWWlnek1Td2dNVEl3TENBeE5UQXBKMTBzWEc0Z0lDQWdKMjFoWjJWdWRHRW5PaUJiSjNKbllpZ3hOaklzTVRBMkxERTVNaWtuTENBbmNtZGlLREU1Tnl3eE5qVXNNakkwS1Njc0lDZHlaMklvTWpBNExERXhNeXd5TVRncEoxMHNYRzRnSUNBZ0ozSmxaQ2M2SUZzbmNtZGlLREl4TkN3ek9TdzBNQ2tuTENBbmNtZGlLREkxTlN3eE5USXNNVFV3S1NkZExGeHVJQ0FnSUNkemRGOWliSFZsSnpvZ1d5ZHlaMklvTWpNc01Ua3dMREl3TnlrbkxDQW5jbWRpS0RFMU9Dd3lNVGdzTWpJNUtTY3NJQ2R5WjJJb016RXNNVEU1TERFNE1Da25YU3hjYmlBZ0lDQW5aR0Z5YTE5aWJIVmxKem9nV3lkeVoySW9NekVzTVRFNUxERTRNQ2tuTENBbmNtZGlLRE14TENBeE1qQXNJREUxTUNrblhTeGNiaUFnSUNBbmJHbG5hSFJmWW14MVpTYzZJRnNuY21kaUtESXpMREU1TUN3eU1EY3BKeXdnSjNKbllpZ3hOVGdzTWpFNExESXlPU2tuTENBbmNtZGlLREV3T0N3Z01qRTRMQ0F5TWprcEp5d2dKM0puWWlneU15d3hPVEFzTWpJM0tTZGRMRnh1SUNBZ0lDZHNhV3hoWTE5aWJIVmxKem9nV3lkeVoySW9NVEkwTERFd01pd3lNVEVwSnl3Z0ozSm5ZaWd4TkRrc01UTTBMREl4TnlrbkxDQW5jbWRpS0RrM0xDQTRNU3dnTVRVd0tTZGRMRnh1SUNBZ0lDZGtZWEpyWDJkeVpXVnVKem9nV3lkeVoySW9Nak1zTVRBekxEVTNLU2NzSUNkeVoySW9NekFzTVRFd0xEazJLU2NzSUNkeVoySW9OakFzTVRNeExEazFLU2NzSUNkeVoySW9NalFzTVRFd0xEYzVLU2RkTEZ4dUlDQWdJQ2RuY21WbGJpYzZJRnNuY21kaUtEUTBMREUyTUN3ME5Da25MQ0FuY21kaUtEYzBMREUyTUN3M05Da25YU3hjYmlBZ0lDQW5iR2xuYUhSZlozSmxaVzRuT2lCYkozSm5ZaWd4TlRJc01qSXpMREV6T0NrbkxDQW5jbWRpS0RFNE1pd2dNakl6TENBeE16Z3BKeXdnSjNKbllpZ3hOVElzSURFNU15d2dNVE00S1NkZExGeHVJQ0FnSUNkemRGOW5jbVZsYmljNklGc25jbWRpS0RRMExERTJNQ3cwTkNrbkxDQW5jbWRpS0RFMU1pd3lNak1zTVRNNEtTY3NJQ2R5WjJJb016a3NJREUzTkN3Z09UWXBKeXdnSjNKbllpZzNOQ3d4TmpBc056UXBKMTBzWEc0Z0lDQWdKM0JwYm1zbk9pQmJKM0puWWlneU5EY3NNVGd5TERJeE1Da25YU3hjYmlBZ0lDQW5Zbkp2ZDI0bk9pQmJKM0puWWlneE5EQXNPRFlzTnpVcEp5d2dKM0puWWlneE1ESXNJRFl5TENBMU5Da25YU3hjYmlBZ0lDQW5aM0poZVNjNklGc25jbWRpS0RFeU55d3hNamNzTVRJM0tTY3NJQ2R5WjJJb01UazVMREU1T1N3eE9Ua3BKeXdnSjNKbllpZ3hPVFlzTVRVMkxERTBPQ2tuTENBbmNtZGlLREl5TWl3Z01qSXlMQ0F4T0RBcEoxMHNYRzRnSUNBZ0ozbGxiR3h2ZHljNklGc25jbWRpS0RFNE9Dd3hPRGtzTXpRcEoxMHNYRzRnSUNBZ0ozZG9hWFJsSnpvZ1d5ZHlaMklvTWpNd0xESXpNQ3d5TXpBcEoxMHNYRzRnSUgwN1hHNWNiaUFnY0hKdmRHVmpkR1ZrSUhOMFlYUnBZeUJ0WVd0bFVHRnNaWFIwWlNoa2REb2dXM04wY21sdVoxdGRMQ0J6ZEhKcGJtZGRXMTBzWEc0Z0lDQWdjMmx0Y0d4cFptbGxaQ0E5SUdaaGJITmxMQ0JRWVd4bGRIUmxWSGx3WlRvZ2RIbHdaVzltSUZObGNWQmhiR1YwZEdWQ1lYTmxJRDBnVTJWeFVHRnNaWFIwWlVKaGMyVmNiaUFnS1NCN1hHNGdJQ0FnWTI5dWMzUWdjR0ZzWlhSMFpUb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQnpkSEpwYm1jZ2ZTQTlJSHQ5TzF4dUlDQWdJR1IwTG1admNrVmhZMmdvS0dOd0tTQTlQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnZZbXBNYVhOMElEMGdZM0JiTUYwN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJ4dmRYSWdQU0JqY0ZzeFhUdGNiaUFnSUNBZ0lHOWlha3hwYzNRdVptOXlSV0ZqYUNnb2IySnFMQ0JwYm1RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnY0dGc1pYUjBaVnR2WW1wZElEMGdkR2hwY3k1amIyeHZkWEpRWVd4bGRIUmxXMk52Ykc5MWNsMWJjMmx0Y0d4cFptbGxaQ0EvSURBZ09pQnBibVJkTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCUVlXeGxkSFJsVkhsd1pTaHdZV3hsZEhSbEtUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2dYM0JoYkdWMGRHVTZJSHNnVzIwNklITjBjbWx1WjEwNklITjBjbWx1WnlCOU8xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtIQmhiR1YwZEdVNklIc2dXMjA2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5S1NCN1hHNGdJQ0FnZEdocGN5NWZjR0ZzWlhSMFpTQTlJSEJoYkdWMGRHVTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzQmhiR1YwZEdWYmJWMDdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3ZlY3Rvci1vcGVyYXRpb25zJztcbmNsYXNzIFNpZGVDaGFpblNjYWxlcyB7XG4gICAgc3RhdGljIGdldEF2YWlsYWJsZVNjYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NhbGVzKS5tYXAoKFtrLCBfXSkgPT4gayk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTY2FsZShuYW1lKSB7XG4gICAgICAgIGFzc2VydCghKHRoaXMuc2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQpLCBgU2NhbGUgJyR7bmFtZX0nIHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNjYWxlc1tuYW1lXTtcbiAgICB9XG59XG5TaWRlQ2hhaW5TY2FsZXMuc2NhbGVzID0ge1xuICAgIC8vIFdpbWxleS1XaGl0ZSBpbnRlcmZhY2lhbCBoeWRyb3Bob2JpY2l0eSBzY2FsZVxuICAgICdXaW1sZXlXaGl0ZSc6IHtcbiAgICAgICAgJy0nOiAwLFxuICAgICAgICAnQSc6IDAuMTcsXG4gICAgICAgICdDJzogLTAuMjQsXG4gICAgICAgICdEJzogLTAuMDcsXG4gICAgICAgICdFJzogLTAuMDEsXG4gICAgICAgICdGJzogLTEuMTMsXG4gICAgICAgICdHJzogMC4wMSxcbiAgICAgICAgJ0gnOiAwLjE3LFxuICAgICAgICAnSSc6IC0wLjMxLFxuICAgICAgICAnSyc6IDAuOTksXG4gICAgICAgICdMJzogLTAuNTYsXG4gICAgICAgICdNJzogLTAuMjMsXG4gICAgICAgICdOJzogMC40MixcbiAgICAgICAgJ1AnOiAwLjQ1LFxuICAgICAgICAnUSc6IDAuNTgsXG4gICAgICAgICdSJzogMC44MSxcbiAgICAgICAgJ1MnOiAwLjEzLFxuICAgICAgICAnVCc6IDAuMTQsXG4gICAgICAgICdWJzogMC4wNyxcbiAgICAgICAgJ1cnOiAtMS44NSxcbiAgICAgICAgJ1knOiAtMC45NCxcbiAgICB9LFxuICAgICdjYXRlZ29yaWFsJzoge1xuICAgICAgICAnLSc6IDAsXG4gICAgICAgICdBJzogMSxcbiAgICAgICAgJ0MnOiAyLFxuICAgICAgICAnRCc6IDMsXG4gICAgICAgICdFJzogNCxcbiAgICAgICAgJ0YnOiA1LFxuICAgICAgICAnRyc6IDYsXG4gICAgICAgICdIJzogNyxcbiAgICAgICAgJ0knOiA4LFxuICAgICAgICAnSyc6IDksXG4gICAgICAgICdMJzogMTAsXG4gICAgICAgICdNJzogMTEsXG4gICAgICAgICdOJzogMTIsXG4gICAgICAgICdQJzogMTMsXG4gICAgICAgICdRJzogMTQsXG4gICAgICAgICdSJzogMTUsXG4gICAgICAgICdTJzogMTYsXG4gICAgICAgICdUJzogMTcsXG4gICAgICAgICdWJzogMTgsXG4gICAgICAgICdXJzogMTksXG4gICAgICAgICdZJzogMjAsXG4gICAgfSxcbn07XG4vKipcbiAqIENsYXNzIHRvIGNhdGVnb3JpYWwgZW5jb2RlL2RlY29kZSBhbGlnbmVkIGFtaW5vIGFjaWQgcmVzaWR1ZXMgc2VxdWVuY2UuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWduZWRTZXF1ZW5jZUVuY29kZXIge1xuICAgIGNvbnN0cnVjdG9yKHNjYWxlID0gJ2NhdGVnb3JpYWwnKSB7XG4gICAgICAgIHRoaXMuYWEybnVtID0gU2lkZUNoYWluU2NhbGVzLmdldFNjYWxlKHNjYWxlKTtcbiAgICAgICAgdGhpcy5udW0yYWEgPSB7fTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5hYTJudW0pLmZvckVhY2goKFtrLCB2XSkgPT4gKHRoaXMubnVtMmFhW3ZdID0gaykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgICAqIFRydW5jYXRlIE5IMiBhbmQgLUNPT0ggdGVybWluYWxzIG9mIHRoZSBnaXZlbiBzZXF1ZW5jZS5cbiAgICAgICAqXG4gICAgICAgKiBAc3RhdGljXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFRoZSBzZXF1ZW5jZSBwcm92aWRlZC5cbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVHJ1bmNhdGVkIHNlcXVlbmNlLlxuICAgICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgICAqL1xuICAgIHN0YXRpYyBfdHJ1bmNhdGVTZXF1ZW5jZShzZXEpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gMDtcbiAgICAgICAgbGV0IGVuZCA9IHNlcS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRlcm1pbmEgPSBbJ05IMicsICdDT09IJ107XG4gICAgICAgIGlmIChzZXEuc3RhcnRzV2l0aCh0ZXJtaW5hWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMF0ubGVuZ3RoOyAvLyBDdXQgb25seSAnTkgyJyB3aXRob3V0IGZvbGxvd2luZyAnLScuXG4gICAgICAgICAgICBhc3NlcnQoc2VxW2xdID09ICctJywgYFdyb25nIHNlcXVlbmNlIGZvcm1hdDogJHt0ZXJtaW5hWzBdfSB3aXRob3V0IGZvbGxvd2luZyAnLScgaW4gJyR7c2VxfScuYCk7XG4gICAgICAgICAgICBzdGFydCA9IGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcS5lbmRzV2l0aCh0ZXJtaW5hWzFdKSkge1xuICAgICAgICAgICAgY29uc3QgbCA9IHRlcm1pbmFbMV0ubGVuZ3RoICsgMTsgLy8gQ3V0IGJvdGggJ0NPT0gnIGFuZCBwcmVjZW5kaW5nICctJy5cbiAgICAgICAgICAgIGFzc2VydChzZXFbZW5kIC0gbF0gPT0gJy0nLCBgV3Jvbmcgc2VxdWVuY2UgZm9ybWF0OiAke3Rlcm1pbmFbMV19IHdpdGhvdXQgJy0nIHByZWNlbmRpbmcgaW4gJyR7c2VxfScuYCk7XG4gICAgICAgICAgICBlbmQgLT0gbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VxLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICAgKiBDdXRzIGF1eGlsaWFyeSBkZWZpc2VzIGJlZm9yZSBhIHJlc2lkdWUuXG4gICAgICAgKlxuICAgICAgICogQHN0YXRpY1xuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcSBUaGUgc2VxdWVuY2UgdG8gcHJvY2Vzcy5cbiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gUHJvY2Vzc2VkIHNlcXVlbmNlLlxuICAgICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgICAqL1xuICAgIHN0YXRpYyBfZHJvcERlZmlzZXMoc2VxKSB7XG4gICAgICAgIHJldHVybiBzZXEucmVwbGFjZSgvKC0pKFteLV0rKS9nLCAnJDInKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICAgKiBQZXJmb3JtcyB0cnVuY2F0aW9uIGFuZCBjdXR0aW5nIGF1eGlsaWFyeSBkZWZpc2VzLlxuICAgICAgICpcbiAgICAgICAqIEBzdGF0aWNcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXF1ZW5jZSBUaGUgc2VxdWVuY2Ugd29yayB1bmRlciBwcm9jZXNzLlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBSZXN1bHQgb2YgY2xlYW5pbmcuXG4gICAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICAgICAgICovXG4gICAgc3RhdGljIGNsZWFuKHNlcXVlbmNlKSB7XG4gICAgICAgIHJldHVybiBBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl9kcm9wRGVmaXNlcyhBbGlnbmVkU2VxdWVuY2VFbmNvZGVyLl90cnVuY2F0ZVNlcXVlbmNlKHNlcXVlbmNlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAgICogQ2F0ZWdvcmlhbCBlbmNvZGUgb2YgdGhlIHNlcXVlbmNlIHByb3ZpZGVkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXF1ZW5jZSBUaGUgc2VxdWVuY2UuXG4gICAgICAgKiBAcmV0dXJuIHtudW1iZXJbXX0gRW5jb2RlZCB2ZWN0b3IuXG4gICAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlRW5jb2RlclxuICAgICAgICovXG4gICAgZW5jb2RlKHNlcXVlbmNlKSB7XG4gICAgICAgIGNvbnN0IG5JdGVtcyA9IHNlcXVlbmNlLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gbmV3IEFycmF5KG5JdGVtcykuZmlsbCgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHNlcXVlbmNlW2ldO1xuICAgICAgICAgICAgYXNzZXJ0KGNoYXIgaW4gdGhpcy5hYTJudW0sIGBVbmtub3duIGNoYXIgJyR7Y2hhcn0nIGZvdW5kIGluIHNlcXVlbmNlICcke3NlcXVlbmNlfSdgKTtcbiAgICAgICAgICAgIHZhbHVlc1tpXSA9IHRoaXMuZW5jb2RlTGV0dHRlcihjaGFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cbiAgICBlbmNvZGVMZXR0dGVyKGxldHRlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hYTJudW1bbGV0dGVyXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICAgKiBEZWNvZGUgdGhlIGVuY29kZWQgdmVjdG9yIGludG8gdGhlIHNlcXVlbmNlIGJhY2suXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtudW1iZXJbXX0gdmFsdWUgVGhlIHZlY3RvciBlbmNvZGVkLlxuICAgICAgICogQHJldHVybiB7c3RyaW5nfSBEZWNvZGVkIHNlcXVlbmNlLlxuICAgICAgICogQG1lbWJlcm9mIEFsaWduZWRTZXF1ZW5jZUVuY29kZXJcbiAgICAgICAqL1xuICAgIGRlY29kZSh2YWx1ZSkge1xuICAgICAgICBsZXQgcyA9ICcnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdmFsdWVbaV07XG4gICAgICAgICAgICBhc3NlcnQoY29kZSBpbiB0aGlzLm51bTJhYSwgYFVua25vd24gY29kZSAnJHtjb2RlfScgZm91bmQgaW4gdmVjdG9yICcke3ZhbHVlfSdgKTtcbiAgICAgICAgICAgIHMgKz0gdGhpcy5udW0yYWFbY29kZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYzJWeGRXVnVZMlV0Wlc1amIyUmxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluTmxjWFZsYm1ObExXVnVZMjlrWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eEZRVUZETEUxQlFVMHNSVUZCUXl4TlFVRk5MR2xFUVVGcFJDeERRVUZETzBGQlMzWkZMRTFCUVUwc1pVRkJaVHRKUVcxRWJrSXNUVUZCVFN4RFFVRkRMR3RDUVVGclFqdFJRVU4yUWl4UFFVRlBMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UkN4RFFVRkRPMGxCUlVRc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZaTzFGQlF6RkNMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhUUVVGVExFTkJRVU1zUlVGQlJTeFZRVUZWTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dFJRVU0zUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETTBJc1EwRkJRenM3UVVGNlJFMHNjMEpCUVUwc1IwRkJOa0k3U1VGRGVFTXNaMFJCUVdkRU8wbEJRMmhFTEdGQlFXRXNSVUZCUlR0UlFVTmlMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMDRzUjBGQlJ5eEZRVUZGTEVsQlFVazdVVUZEVkN4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSk8xRkJRMVlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1R0UlFVTldMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRFZpeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpPMUZCUTFZc1IwRkJSeXhGUVVGRkxFbEJRVWs3VVVGRFZDeEhRVUZITEVWQlFVVXNTVUZCU1R0UlFVTlVMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRFZpeEhRVUZITEVWQlFVVXNTVUZCU1R0UlFVTlVMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWs3VVVGRFZpeEhRVUZITEVWQlFVVXNRMEZCUXl4SlFVRkpPMUZCUTFZc1IwRkJSeXhGUVVGRkxFbEJRVWs3VVVGRFZDeEhRVUZITEVWQlFVVXNTVUZCU1R0UlFVTlVMRWRCUVVjc1JVRkJSU3hKUVVGSk8xRkJRMVFzUjBGQlJ5eEZRVUZGTEVsQlFVazdVVUZEVkN4SFFVRkhMRVZCUVVVc1NVRkJTVHRSUVVOVUxFZEJRVWNzUlVGQlJTeEpRVUZKTzFGQlExUXNSMEZCUnl4RlFVRkZMRWxCUVVrN1VVRkRWQ3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTzFGQlExWXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTVHRMUVVOWU8wbEJRMFFzV1VGQldTeEZRVUZGTzFGQlExb3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRUaXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5PTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTA0c1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRFRpeEhRVUZITEVWQlFVVXNRMEZCUXp0UlFVTk9MRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMDRzUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZEVGl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVOT0xFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEwNHNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRUaXhIUVVGSExFVkJRVVVzUlVGQlJUdFJRVU5RTEVkQlFVY3NSVUZCUlN4RlFVRkZPMUZCUTFBc1IwRkJSeXhGUVVGRkxFVkJRVVU3VVVGRFVDeEhRVUZITEVWQlFVVXNSVUZCUlR0UlFVTlFMRWRCUVVjc1JVRkJSU3hGUVVGRk8xRkJRMUFzUjBGQlJ5eEZRVUZGTEVWQlFVVTdVVUZEVUN4SFFVRkhMRVZCUVVVc1JVRkJSVHRSUVVOUUxFZEJRVWNzUlVGQlJTeEZRVUZGTzFGQlExQXNSMEZCUnl4RlFVRkZMRVZCUVVVN1VVRkRVQ3hIUVVGSExFVkJRVVVzUlVGQlJUdFJRVU5RTEVkQlFVY3NSVUZCUlN4RlFVRkZPMHRCUTFJN1EwRkRSaXhEUVVGRE8wRkJXVW83T3pzN08wZEJTMGM3UVVGRFNDeE5RVUZOTEU5QlFVOHNjMEpCUVhOQ08wbEJTV3BETEZsQlFWa3NVVUZCWjBJc1dVRkJXVHRSUVVOMFF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZET1VNc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdVVUZEYWtJc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaEZMRU5CUVVNN1NVRkZSRHM3T3pzN096dFRRVTlMTzBsQlEwd3NUVUZCVFN4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVkQlFWYzdVVUZEYkVNc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF6dFJRVU55UWl4TlFVRk5MRTlCUVU4c1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVm9ReXhKUVVGSkxFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3V1VGRE9VSXNUVUZCVFN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMSGREUVVGM1F6dFpRVU55UlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN3d1FrRkJNRUlzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl3NFFrRkJPRUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTnFSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFOQlExZzdVVUZEUkN4SlFVRkpMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1dVRkROVUlzVFVGQlRTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4elEwRkJjME03V1VGRGNrVXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMREJDUVVFd1FpeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMQ3RDUVVFclFpeEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTNSSExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdVMEZEVmp0UlFVTkVMRTlCUVU4c1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRia01zUTBGQlF6dEpRVVZFT3pzN096czdPMU5CVDBzN1NVRkRUQ3hOUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEVkQlFWYzdVVUZETjBJc1QwRkJUeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNeFF5eERRVUZETzBsQlJVUTdPenM3T3pzN1UwRlBTenRKUVVOTUxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCWjBJN1VVRkRNMElzVDBGQlR5eHpRa0ZCYzBJc1EwRkJReXhaUVVGWkxFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOcVJ5eERRVUZETzBsQlJVUTdPenM3T3p0VFFVMUxPMGxCUTBVc1RVRkJUU3hEUVVGRExGRkJRV2RDTzFGQlF6VkNMRTFCUVUwc1RVRkJUU3hIUVVGSExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZETDBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYcERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGREwwSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJYcENMRTFCUVUwc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4cFFrRkJhVUlzU1VGQlNTeDNRa0ZCZDBJc1VVRkJVU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVVYwUml4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOMFF6dFJRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMGxCUTJoQ0xFTkJRVU03U1VGRlRTeGhRVUZoTEVOQlFVTXNUVUZCWXp0UlFVTnFReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkROMElzUTBGQlF6dEpRVVZFT3pzN096czdVMEZOU3p0SlFVTkZMRTFCUVUwc1EwRkJReXhMUVVGbE8xRkJRek5DTEVsQlFVa3NRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJRenRSUVVWdVFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOeVF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRmRFSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEdsQ1FVRnBRaXhKUVVGSkxITkNRVUZ6UWl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJSV3BHTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEzaENPMUZCUTBRc1QwRkJUeXhEUVVGRExFTkJRVU03U1VGRFdDeERRVUZETzBOQlEwWWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMkZ6YzJWeWRIMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTW5PMXh1WEc1MGVYQmxJRk5wWkdWRGFHRnBibE5qWVd4bElEMGdlMXR1WVcxbE9pQnpkSEpwYm1kZE9pQnVkVzFpWlhKOU8xeHVkSGx3WlNCVGFXUmxRMmhoYVc1VFkyRnNaVU52Ykd4bFkzUnBiMjRnUFNCN1cyNWhiV1U2SUhOMGNtbHVaMTA2SUZOcFpHVkRhR0ZwYmxOallXeGxmVHRjYmx4dVkyeGhjM01nVTJsa1pVTm9ZV2x1VTJOaGJHVnpJSHRjYmlBZ2MzUmhkR2xqSUhOallXeGxjem9nVTJsa1pVTm9ZV2x1VTJOaGJHVkRiMnhzWldOMGFXOXVJRDBnZTF4dUlDQWdJQzh2SUZkcGJXeGxlUzFYYUdsMFpTQnBiblJsY21aaFkybGhiQ0JvZVdSeWIzQm9iMkpwWTJsMGVTQnpZMkZzWlZ4dUlDQWdJQ2RYYVcxc1pYbFhhR2wwWlNjNklIdGNiaUFnSUNBZ0lDY3RKem9nTUN4Y2JpQWdJQ0FnSUNkQkp6b2dNQzR4Tnl4Y2JpQWdJQ0FnSUNkREp6b2dMVEF1TWpRc1hHNGdJQ0FnSUNBblJDYzZJQzB3TGpBM0xDQXZMeUJCYzNBdE9pQXhMakl6WEc0Z0lDQWdJQ0FuUlNjNklDMHdMakF4TENBdkx5QkhiSFV0T2lBeUxqQXlYRzRnSUNBZ0lDQW5SaWM2SUMweExqRXpMQ0F2TDF4dUlDQWdJQ0FnSjBjbk9pQXdMakF4TEZ4dUlDQWdJQ0FnSjBnbk9pQXdMakUzTENBdkx5QklhWE1yT2lBd0xqazJYRzRnSUNBZ0lDQW5TU2M2SUMwd0xqTXhMRnh1SUNBZ0lDQWdKMHNuT2lBd0xqazVMQ0F2THlCTWVYTXJYRzRnSUNBZ0lDQW5UQ2M2SUMwd0xqVTJMRnh1SUNBZ0lDQWdKMDBuT2lBdE1DNHlNeXhjYmlBZ0lDQWdJQ2RPSnpvZ01DNDBNaXhjYmlBZ0lDQWdJQ2RRSnpvZ01DNDBOU3hjYmlBZ0lDQWdJQ2RSSnpvZ01DNDFPQ3hjYmlBZ0lDQWdJQ2RTSnpvZ01DNDRNU3dnTHk4Z1FYSm5LMXh1SUNBZ0lDQWdKMU1uT2lBd0xqRXpMRnh1SUNBZ0lDQWdKMVFuT2lBd0xqRTBMRnh1SUNBZ0lDQWdKMVluT2lBd0xqQTNMRnh1SUNBZ0lDQWdKMWNuT2lBdE1TNDROU3hjYmlBZ0lDQWdJQ2RaSnpvZ0xUQXVPVFFzWEc0Z0lDQWdmU3hjYmlBZ0lDQW5ZMkYwWldkdmNtbGhiQ2M2SUh0Y2JpQWdJQ0FnSUNjdEp6b2dNQ3hjYmlBZ0lDQWdJQ2RCSnpvZ01TeGNiaUFnSUNBZ0lDZERKem9nTWl4Y2JpQWdJQ0FnSUNkRUp6b2dNeXhjYmlBZ0lDQWdJQ2RGSnpvZ05DeGNiaUFnSUNBZ0lDZEdKem9nTlN4Y2JpQWdJQ0FnSUNkSEp6b2dOaXhjYmlBZ0lDQWdJQ2RJSnpvZ055eGNiaUFnSUNBZ0lDZEpKem9nT0N4Y2JpQWdJQ0FnSUNkTEp6b2dPU3hjYmlBZ0lDQWdJQ2RNSnpvZ01UQXNYRzRnSUNBZ0lDQW5UU2M2SURFeExGeHVJQ0FnSUNBZ0owNG5PaUF4TWl4Y2JpQWdJQ0FnSUNkUUp6b2dNVE1zWEc0Z0lDQWdJQ0FuVVNjNklERTBMRnh1SUNBZ0lDQWdKMUluT2lBeE5TeGNiaUFnSUNBZ0lDZFRKem9nTVRZc1hHNGdJQ0FnSUNBblZDYzZJREUzTEZ4dUlDQWdJQ0FnSjFZbk9pQXhPQ3hjYmlBZ0lDQWdJQ2RYSnpvZ01Ua3NYRzRnSUNBZ0lDQW5XU2M2SURJd0xGeHVJQ0FnSUgwc1hHNGdJSDA3WEc1Y2JpQWdjM1JoZEdsaklHZGxkRUYyWVdsc1lXSnNaVk5qWVd4bGN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0hSb2FYTXVjMk5oYkdWektTNXRZWEFvS0Z0ckxDQmZYU2tnUFQ0Z2F5azdYRzRnSUgxY2JseHVJQ0J6ZEdGMGFXTWdaMlYwVTJOaGJHVW9ibUZ0WlRvZ2MzUnlhVzVuS1RvZ1UybGtaVU5vWVdsdVUyTmhiR1VnZTF4dUlDQWdJR0Z6YzJWeWRDZ2hLSFJvYVhNdWMyTmhiR1Z6VzI1aGJXVmRJRDA5UFNCMWJtUmxabWx1WldRcExDQmdVMk5oYkdVZ0p5UjdibUZ0WlgwbklIZGhjeUJ1YjNRZ1ptOTFibVF1WUNrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWMyTmhiR1Z6VzI1aGJXVmRPMXh1SUNCOVhHNTlYRzVjYmk4cUtseHVJQ29nUTJ4aGMzTWdkRzhnWTJGMFpXZHZjbWxoYkNCbGJtTnZaR1V2WkdWamIyUmxJR0ZzYVdkdVpXUWdZVzFwYm04Z1lXTnBaQ0J5WlhOcFpIVmxjeUJ6WlhGMVpXNWpaUzVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQVkyeGhjM01nUVd4cFoyNWxaRk5sY1hWbGJtTmxSVzVqYjJSbGNseHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdRV3hwWjI1bFpGTmxjWFZsYm1ObFJXNWpiMlJsY2lCN1hHNGdJSEJ5YjNSbFkzUmxaQ0JoWVRKdWRXMDZJRk5wWkdWRGFHRnBibE5qWVd4bE8xeHVJQ0J3Y205MFpXTjBaV1FnYm5WdE1tRmhPaUI3VzJOdlpHVTZJRzUxYldKbGNsMDZJSE4wY21sdVozMDdYRzVjYmlBZ1kyOXVjM1J5ZFdOMGIzSW9jMk5oYkdVNklITjBjbWx1WnlBOUlDZGpZWFJsWjI5eWFXRnNKeWtnZTF4dUlDQWdJSFJvYVhNdVlXRXliblZ0SUQwZ1UybGtaVU5vWVdsdVUyTmhiR1Z6TG1kbGRGTmpZV3hsS0hOallXeGxLVHRjYmlBZ0lDQjBhR2x6TG01MWJUSmhZU0E5SUh0OU8xeHVJQ0FnSUU5aWFtVmpkQzVsYm5SeWFXVnpLSFJvYVhNdVlXRXliblZ0S1M1bWIzSkZZV05vS0NoYmF5d2dkbDBwSUQwK0lDaDBhR2x6TG01MWJUSmhZVnQyWFNBOUlHc3BLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnSUNBcUlGUnlkVzVqWVhSbElFNUlNaUJoYm1RZ0xVTlBUMGdnZEdWeWJXbHVZV3h6SUc5bUlIUm9aU0JuYVhabGJpQnpaWEYxWlc1alpTNWNiaUFnSUNBZ0tseHVJQ0FnSUNBcUlFQnpkR0YwYVdOY2JpQWdJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYzJWeElGUm9aU0J6WlhGMVpXNWpaU0J3Y205MmFXUmxaQzVjYmlBZ0lDQWdLaUJBY21WMGRYSnVJSHR6ZEhKcGJtZDlJRlJ5ZFc1allYUmxaQ0J6WlhGMVpXNWpaUzVjYmlBZ0lDQWdLaUJBYldWdFltVnliMllnUVd4cFoyNWxaRk5sY1hWbGJtTmxSVzVqYjJSbGNseHVJQ0FnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdYM1J5ZFc1allYUmxVMlZ4ZFdWdVkyVW9jMlZ4T2lCemRISnBibWNwT2lCemRISnBibWNnZTF4dUlDQWdJR3hsZENCemRHRnlkQ0E5SURBN1hHNGdJQ0FnYkdWMElHVnVaQ0E5SUhObGNTNXNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdkR1Z5YldsdVlTQTlJRnNuVGtneUp5d2dKME5QVDBnblhUdGNibHh1SUNBZ0lHbG1JQ2h6WlhFdWMzUmhjblJ6VjJsMGFDaDBaWEp0YVc1aFd6QmRLU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdiQ0E5SUhSbGNtMXBibUZiTUYwdWJHVnVaM1JvT3lBdkx5QkRkWFFnYjI1c2VTQW5Ua2d5SnlCM2FYUm9iM1YwSUdadmJHeHZkMmx1WnlBbkxTY3VYRzRnSUNBZ0lDQmhjM05sY25Rb2MyVnhXMnhkSUQwOUlDY3RKeXdnWUZkeWIyNW5JSE5sY1hWbGJtTmxJR1p2Y20xaGREb2dKSHQwWlhKdGFXNWhXekJkZlNCM2FYUm9iM1YwSUdadmJHeHZkMmx1WnlBbkxTY2dhVzRnSnlSN2MyVnhmU2N1WUNrN1hHNGdJQ0FnSUNCemRHRnlkQ0E5SUd3N1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNoelpYRXVaVzVrYzFkcGRHZ29kR1Z5YldsdVlWc3hYU2twSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR3dnUFNCMFpYSnRhVzVoV3pGZExteGxibWQwYUNzeE95QXZMeUJEZFhRZ1ltOTBhQ0FuUTA5UFNDY2dZVzVrSUhCeVpXTmxibVJwYm1jZ0p5MG5MbHh1SUNBZ0lDQWdZWE56WlhKMEtITmxjVnRsYm1RdGJGMGdQVDBnSnkwbkxDQmdWM0p2Ym1jZ2MyVnhkV1Z1WTJVZ1ptOXliV0YwT2lBa2UzUmxjbTFwYm1GYk1WMTlJSGRwZEdodmRYUWdKeTBuSUhCeVpXTmxibVJwYm1jZ2FXNGdKeVI3YzJWeGZTY3VZQ2s3WEc0Z0lDQWdJQ0JsYm1RZ0xUMGdiRHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUhObGNTNXpkV0p6ZEhKcGJtY29jM1JoY25Rc0lHVnVaQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNBZ0tpQkRkWFJ6SUdGMWVHbHNhV0Z5ZVNCa1pXWnBjMlZ6SUdKbFptOXlaU0JoSUhKbGMybGtkV1V1WEc0Z0lDQWdJQ3BjYmlBZ0lDQWdLaUJBYzNSaGRHbGpYRzRnSUNBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlITmxjU0JVYUdVZ2MyVnhkV1Z1WTJVZ2RHOGdjSEp2WTJWemN5NWNiaUFnSUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlGQnliMk5sYzNObFpDQnpaWEYxWlc1alpTNWNiaUFnSUNBZ0tpQkFiV1Z0WW1WeWIyWWdRV3hwWjI1bFpGTmxjWFZsYm1ObFJXNWpiMlJsY2x4dUlDQWdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1gyUnliM0JFWldacGMyVnpLSE5sY1RvZ2MzUnlhVzVuS1RvZ2MzUnlhVzVuSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjMlZ4TG5KbGNHeGhZMlVvTHlndEtTaGJYaTFkS3lrdlp5d2dKeVF5SnlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDQWdLaUJRWlhKbWIzSnRjeUIwY25WdVkyRjBhVzl1SUdGdVpDQmpkWFIwYVc1bklHRjFlR2xzYVdGeWVTQmtaV1pwYzJWekxseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FITjBZWFJwWTF4dUlDQWdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J6WlhGMVpXNWpaU0JVYUdVZ2MyVnhkV1Z1WTJVZ2QyOXlheUIxYm1SbGNpQndjbTlqWlhOekxseHVJQ0FnSUNBcUlFQnlaWFIxY200Z2UzTjBjbWx1WjMwZ1VtVnpkV3gwSUc5bUlHTnNaV0Z1YVc1bkxseHVJQ0FnSUNBcUlFQnRaVzFpWlhKdlppQkJiR2xuYm1Wa1UyVnhkV1Z1WTJWRmJtTnZaR1Z5WEc0Z0lDQWdJQ292WEc0Z0lITjBZWFJwWXlCamJHVmhiaWh6WlhGMVpXNWpaVG9nYzNSeWFXNW5LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQnlaWFIxY200Z1FXeHBaMjVsWkZObGNYVmxibU5sUlc1amIyUmxjaTVmWkhKdmNFUmxabWx6WlhNb1FXeHBaMjVsWkZObGNYVmxibU5sUlc1amIyUmxjaTVmZEhKMWJtTmhkR1ZUWlhGMVpXNWpaU2h6WlhGMVpXNWpaU2twTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBZ0lDb2dRMkYwWldkdmNtbGhiQ0JsYm1OdlpHVWdiMllnZEdobElITmxjWFZsYm1ObElIQnliM1pwWkdWa0xseHVJQ0FnSUNBcVhHNGdJQ0FnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUhObGNYVmxibU5sSUZSb1pTQnpaWEYxWlc1alpTNWNiaUFnSUNBZ0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKYlhYMGdSVzVqYjJSbFpDQjJaV04wYjNJdVhHNGdJQ0FnSUNvZ1FHMWxiV0psY205bUlFRnNhV2R1WldSVFpYRjFaVzVqWlVWdVkyOWtaWEpjYmlBZ0lDQWdLaTljYmlBZ2NIVmliR2xqSUdWdVkyOWtaU2h6WlhGMVpXNWpaVG9nYzNSeWFXNW5LVG9nYm5WdFltVnlXMTBnZTF4dUlDQWdJR052Ym5OMElHNUpkR1Z0Y3lBOUlITmxjWFZsYm1ObExteGxibWQwYUR0Y2JpQWdJQ0JqYjI1emRDQjJZV3gxWlhNZ1BTQnVaWGNnUVhKeVlYa29ia2wwWlcxektTNW1hV3hzS0RBcE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnVTWFJsYlhNN0lDc3JhU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdZMmhoY2lBOUlITmxjWFZsYm1ObFcybGRPMXh1WEc0Z0lDQWdJQ0JoYzNObGNuUW9ZMmhoY2lCcGJpQjBhR2x6TG1GaE1tNTFiU3dnWUZWdWEyNXZkMjRnWTJoaGNpQW5KSHRqYUdGeWZTY2dabTkxYm1RZ2FXNGdjMlZ4ZFdWdVkyVWdKeVI3YzJWeGRXVnVZMlY5SjJBcE8xeHVYRzRnSUNBZ0lDQjJZV3gxWlhOYmFWMGdQU0IwYUdsekxtVnVZMjlrWlV4bGRIUjBaWElvWTJoaGNpazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUIyWVd4MVpYTTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaVzVqYjJSbFRHVjBkSFJsY2loc1pYUjBaWEk2SUhOMGNtbHVaeWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WVdFeWJuVnRXMnhsZEhSbGNsMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ0FnS2lCRVpXTnZaR1VnZEdobElHVnVZMjlrWldRZ2RtVmpkRzl5SUdsdWRHOGdkR2hsSUhObGNYVmxibU5sSUdKaFkyc3VYRzRnSUNBZ0lDcGNiaUFnSUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY2x0ZGZTQjJZV3gxWlNCVWFHVWdkbVZqZEc5eUlHVnVZMjlrWldRdVhHNGdJQ0FnSUNvZ1FISmxkSFZ5YmlCN2MzUnlhVzVuZlNCRVpXTnZaR1ZrSUhObGNYVmxibU5sTGx4dUlDQWdJQ0FxSUVCdFpXMWlaWEp2WmlCQmJHbG5ibVZrVTJWeGRXVnVZMlZGYm1OdlpHVnlYRzRnSUNBZ0lDb3ZYRzRnSUhCMVlteHBZeUJrWldOdlpHVW9kbUZzZFdVNklHNTFiV0psY2x0ZEtUb2djM1J5YVc1bklIdGNiaUFnSUNCc1pYUWdjem9nYzNSeWFXNW5JRDBnSnljN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIWmhiSFZsTG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyUmxJRDBnZG1Gc2RXVmJhVjA3WEc1Y2JpQWdJQ0FnSUdGemMyVnlkQ2hqYjJSbElHbHVJSFJvYVhNdWJuVnRNbUZoTENCZ1ZXNXJibTkzYmlCamIyUmxJQ2NrZTJOdlpHVjlKeUJtYjNWdVpDQnBiaUIyWldOMGIzSWdKeVI3ZG1Gc2RXVjlKMkFwTzF4dVhHNGdJQ0FnSUNCeklDczlJSFJvYVhNdWJuVnRNbUZoVzJOdlpHVmRPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnY3p0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGV4cGVjdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0IHsgQW1pbm9hY2lkc1BhbGV0dGVzIH0gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4uL3NlcS1wYWxldHRlcyc7XG5pbXBvcnQgeyBOdWNsZW90aWRlc1BhbGV0dGVzIH0gZnJvbSAnLi4vbnVjbGVvdGlkZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGFsZXR0ZU4oKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgY3BDaHJvbWF0b2dyYW0gPSBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbTtcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgcGFsZXR0ZXMgaW1wbGVtZW50IFNlcVBhbGV0dGUgaW50ZXJmYWNlXG4gICAgICAgIC8vIGV4cGVjdChjcENocm9tYXRvZ3JhbSBpbnN0YW5jZW9mIFNlcVBhbGV0dGUsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BDaHJvbWF0b2dyYW0gaW5zdGFuY2VvZiBTZXFQYWxldHRlQmFzZSwgdHJ1ZSk7XG4gICAgICAgIGV4cGVjdChjcENocm9tYXRvZ3JhbSBpbnN0YW5jZW9mIE51Y2xlb3RpZGVzUGFsZXR0ZXMsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGFsZXR0ZUFBKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGNwTGVzdCA9IEFtaW5vYWNpZHNQYWxldHRlcy5MZXNrO1xuICAgICAgICBjb25zdCBjcFJhc01vbCA9IEFtaW5vYWNpZHNQYWxldHRlcy5SYXNNb2w7XG4gICAgICAgIGNvbnN0IGNwR3Jva0dyb3VwcyA9IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzO1xuICAgICAgICAvLyBUT0RPOiBDaGVjayBwYWxldHRlcyBpbXBsZW1lbnQgU2VxUGFsZXR0ZSBpbnRlcmZhY2VcbiAgICAgICAgLy8gZXhwZWN0KGNwTGVzdCBpbnN0YW5jZW9mIFNlcVBhbGV0dGUsIHRydWUpO1xuICAgICAgICAvLyBleHBlY3QoY3BSYXNNb2wgaW5zdGFuY2VvZiBTZXFQYWxldHRlLCB0cnVlKTtcbiAgICAgICAgLy8gZXhwZWN0KGNwR3Jva0dyb3VwcyBpbnN0YW5jZW9mIFNlcVBhbGV0dGUsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BMZXN0IGluc3RhbmNlb2YgU2VxUGFsZXR0ZUJhc2UsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BSYXNNb2wgaW5zdGFuY2VvZiBTZXFQYWxldHRlQmFzZSwgdHJ1ZSk7XG4gICAgICAgIGV4cGVjdChjcEdyb2tHcm91cHMgaW5zdGFuY2VvZiBTZXFQYWxldHRlQmFzZSwgdHJ1ZSk7XG4gICAgICAgIGV4cGVjdChjcExlc3QgaW5zdGFuY2VvZiBBbWlub2FjaWRzUGFsZXR0ZXMsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BSYXNNb2wgaW5zdGFuY2VvZiBBbWlub2FjaWRzUGFsZXR0ZXMsIHRydWUpO1xuICAgICAgICBleHBlY3QoY3BHcm9rR3JvdXBzIGluc3RhbmNlb2YgQW1pbm9hY2lkc1BhbGV0dGVzLCB0cnVlKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNHRnNaWFIwWlhNdWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluQmhiR1YwZEdWekxuUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlNVRXNUMEZCVHl4RlFVRm5ReXhOUVVGTkxFVkJRV1VzVFVGQlRTeHZRMEZCYjBNc1EwRkJRenRCUVVWMlJ5eFBRVUZQTEVWQlFVTXNhMEpCUVd0Q0xFVkJRVU1zVFVGQlRTeGxRVUZsTEVOQlFVTTdRVUZEYWtRc1QwRkJUeXhGUVVGRExHTkJRV01zUlVGQlF5eE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJReTlETEU5QlFVOHNSVUZCUXl4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEdkQ1FVRm5RaXhEUVVGRE8wRkJSVzVFTEUxQlFVMHNWVUZCWjBJc1lVRkJZVHM3VVVGRGFrTXNUVUZCVFN4alFVRmpMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNXVUZCV1N4RFFVRkRPMUZCUlhoRUxITkVRVUZ6UkR0UlFVTjBSQ3h6UkVGQmMwUTdVVUZGZEVRc1RVRkJUU3hEUVVGRExHTkJRV01zV1VGQldTeGpRVUZqTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZka1FzVFVGQlRTeERRVUZETEdOQlFXTXNXVUZCV1N4dFFrRkJiVUlzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTVSQ3hEUVVGRE8wTkJRVUU3UVVGRlJDeE5RVUZOTEZWQlFXZENMR05CUVdNN08xRkJRMnhETEUxQlFVMHNUVUZCVFN4SFFVRkhMR3RDUVVGclFpeERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTjJReXhOUVVGTkxGRkJRVkVzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE0wTXNUVUZCVFN4WlFVRlpMRWRCUVVjc2EwSkJRV3RDTEVOQlFVTXNWVUZCVlN4RFFVRkRPMUZCUlc1RUxITkVRVUZ6UkR0UlFVTjBSQ3c0UTBGQk9FTTdVVUZET1VNc1owUkJRV2RFTzFGQlEyaEVMRzlFUVVGdlJEdFJRVVZ3UkN4TlFVRk5MRU5CUVVNc1RVRkJUU3haUVVGWkxHTkJRV01zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTXZReXhOUVVGTkxFTkJRVU1zVVVGQlVTeFpRVUZaTEdOQlFXTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOcVJDeE5RVUZOTEVOQlFVTXNXVUZCV1N4WlFVRlpMR05CUVdNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVZ5UkN4TlFVRk5MRU5CUVVNc1RVRkJUU3haUVVGWkxHdENRVUZyUWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMjVFTEUxQlFVMHNRMEZCUXl4UlFVRlJMRmxCUVZrc2EwSkJRV3RDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeERRVUZETEZsQlFWa3NXVUZCV1N4clFrRkJhMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpSQ3hEUVVGRE8wTkJRVUVpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1WEc1cGJYQnZjblFnZTJGbWRHVnlMQ0JpWldadmNtVXNJR05oZEdWbmIzSjVMQ0IwWlhOMExDQmxlSEJsWTNRc0lHVjRjR1ZqZEU5aWFtVmpkSDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEdWemRDYzdYRzVjYm1sdGNHOXlkQ0I3UVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6ZlNCbWNtOXRJQ2N1TGk5aGJXbHViMkZqYVdSekp6dGNibWx0Y0c5eWRDQjdVMlZ4VUdGc1pYUjBaVUpoYzJWOUlHWnliMjBnSnk0dUwzTmxjUzF3WVd4bGRIUmxjeWM3WEc1cGJYQnZjblFnZTA1MVkyeGxiM1JwWkdWelVHRnNaWFIwWlhOOUlHWnliMjBnSnk0dUwyNTFZMnhsYjNScFpHVnpKenRjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJRjkwWlhOMFVHRnNaWFIwWlU0b0tTQjdYRzRnSUdOdmJuTjBJR053UTJoeWIyMWhkRzluY21GdElEMGdUblZqYkdWdmRHbGtaWE5RWVd4bGRIUmxjeTVEYUhKdmJXRjBiMmR5WVcwN1hHNWNiaUFnTHk4Z1ZFOUVUem9nUTJobFkyc2djR0ZzWlhSMFpYTWdhVzF3YkdWdFpXNTBJRk5sY1ZCaGJHVjBkR1VnYVc1MFpYSm1ZV05sWEc0Z0lDOHZJR1Y0Y0dWamRDaGpjRU5vY205dFlYUnZaM0poYlNCcGJuTjBZVzVqWlc5bUlGTmxjVkJoYkdWMGRHVXNJSFJ5ZFdVcE8xeHVYRzRnSUdWNGNHVmpkQ2hqY0VOb2NtOXRZWFJ2WjNKaGJTQnBibk4wWVc1alpXOW1JRk5sY1ZCaGJHVjBkR1ZDWVhObExDQjBjblZsS1R0Y2JseHVJQ0JsZUhCbFkzUW9ZM0JEYUhKdmJXRjBiMmR5WVcwZ2FXNXpkR0Z1WTJWdlppQk9kV05zWlc5MGFXUmxjMUJoYkdWMGRHVnpMQ0IwY25WbEtUdGNibjFjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJRjkwWlhOMFVHRnNaWFIwWlVGQktDa2dlMXh1SUNCamIyNXpkQ0JqY0V4bGMzUWdQU0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE11VEdWemF6dGNiaUFnWTI5dWMzUWdZM0JTWVhOTmIyd2dQU0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE11VW1GelRXOXNPMXh1SUNCamIyNXpkQ0JqY0VkeWIydEhjbTkxY0hNZ1BTQkJiV2x1YjJGamFXUnpVR0ZzWlhSMFpYTXVSM0p2YTBkeWIzVndjenRjYmx4dUlDQXZMeUJVVDBSUE9pQkRhR1ZqYXlCd1lXeGxkSFJsY3lCcGJYQnNaVzFsYm5RZ1UyVnhVR0ZzWlhSMFpTQnBiblJsY21aaFkyVmNiaUFnTHk4Z1pYaHdaV04wS0dOd1RHVnpkQ0JwYm5OMFlXNWpaVzltSUZObGNWQmhiR1YwZEdVc0lIUnlkV1VwTzF4dUlDQXZMeUJsZUhCbFkzUW9ZM0JTWVhOTmIyd2dhVzV6ZEdGdVkyVnZaaUJUWlhGUVlXeGxkSFJsTENCMGNuVmxLVHRjYmlBZ0x5OGdaWGh3WldOMEtHTndSM0p2YTBkeWIzVndjeUJwYm5OMFlXNWpaVzltSUZObGNWQmhiR1YwZEdVc0lIUnlkV1VwTzF4dVhHNGdJR1Y0Y0dWamRDaGpjRXhsYzNRZ2FXNXpkR0Z1WTJWdlppQlRaWEZRWVd4bGRIUmxRbUZ6WlN3Z2RISjFaU2s3WEc0Z0lHVjRjR1ZqZENoamNGSmhjMDF2YkNCcGJuTjBZVzVqWlc5bUlGTmxjVkJoYkdWMGRHVkNZWE5sTENCMGNuVmxLVHRjYmlBZ1pYaHdaV04wS0dOd1IzSnZhMGR5YjNWd2N5QnBibk4wWVc1alpXOW1JRk5sY1ZCaGJHVjBkR1ZDWVhObExDQjBjblZsS1R0Y2JseHVJQ0JsZUhCbFkzUW9ZM0JNWlhOMElHbHVjM1JoYm1ObGIyWWdRVzFwYm05aFkybGtjMUJoYkdWMGRHVnpMQ0IwY25WbEtUdGNiaUFnWlhod1pXTjBLR053VW1GelRXOXNJR2x1YzNSaGJtTmxiMllnUVcxcGJtOWhZMmxrYzFCaGJHVjBkR1Z6TENCMGNuVmxLVHRjYmlBZ1pYaHdaV04wS0dOd1IzSnZhMGR5YjNWd2N5QnBibk4wWVc1alpXOW1JRUZ0YVc1dllXTnBaSE5RWVd4bGRIUmxjeXdnZEhKMVpTazdYRzU5WEc0aVhYMD0iLCJleHBvcnQgY2xhc3MgU3RyaW5nVXRpbHMge1xuICAgIHN0YXRpYyBoYXNoQ29kZShzKSB7XG4gICAgICAgIGxldCBoYXNoID0gMDtcbiAgICAgICAgaWYgKHMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hyID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hyO1xuICAgICAgICAgICAgaGFzaCB8PSAwOyAvLyBDb252ZXJ0IHRvIDMyYml0IGludGVnZXJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzaDtcbiAgICB9XG59XG5pbXBvcnQgeyBTZXFQYWxldHRlQmFzZSB9IGZyb20gJy4vc2VxLXBhbGV0dGVzJztcbmV4cG9ydCBjbGFzcyBVbmtub3duU2VxUGFsZXR0ZSB7XG59XG5leHBvcnQgY2xhc3MgR3JheUFsbFBhbGV0dGUgZXh0ZW5kcyBVbmtub3duU2VxUGFsZXR0ZSB7XG4gICAgZ2V0KG0pIHtcbiAgICAgICAgcmV0dXJuICcjNjY2NjY2JztcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVW5rbm93bkNvbG9yUGFsZXR0ZSBleHRlbmRzIFVua25vd25TZXFQYWxldHRlIHtcbiAgICBzdGF0aWMgYnVpbGRQYWxldHRlKCkge1xuICAgICAgICBjb25zdCByZXMgPSBbXS5jb25jYXQoLi4uT2JqZWN0LnZhbHVlcyhTZXFQYWxldHRlQmFzZS5jb2xvdXJQYWxldHRlKSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGdldChtKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBTdHJpbmdVdGlscy5oYXNoQ29kZShtKTtcbiAgICAgICAgY29uc3QgcEkgPSBoYXNoICUgVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIFVua25vd25Db2xvclBhbGV0dGUucGFsZXR0ZVtwSV07XG4gICAgfVxufVxuVW5rbm93bkNvbG9yUGFsZXR0ZS5wYWxldHRlID0gVW5rbm93bkNvbG9yUGFsZXR0ZS5idWlsZFBhbGV0dGUoKTtcbmV4cG9ydCBjbGFzcyBVbmtub3duU2VxUGFsZXR0ZXMgZXh0ZW5kcyBTZXFQYWxldHRlQmFzZSB7XG4gICAgc3RhdGljIGdldCBHcmF5KCkge1xuICAgICAgICBpZiAodGhpcy5ncmF5ID09PSB2b2lkIDApXG4gICAgICAgICAgICB0aGlzLmdyYXkgPSBuZXcgR3JheUFsbFBhbGV0dGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JheTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBDb2xvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sb3IgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHRoaXMuY29sb3IgPSBuZXcgVW5rbm93bkNvbG9yUGFsZXR0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkVzVyYm05M2JpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5WdWEyNXZkMjR1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlNVRXNUVUZCVFN4UFFVRlBMRmRCUVZjN1NVRkRaaXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFWTTdVVUZET1VJc1NVRkJTU3hKUVVGSkxFZEJRVmNzUTBGQlF5eERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETzFsQlEyaENMRTlCUVU4c1NVRkJTU3hEUVVGRE8xRkJRMlFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRla01zVFVGQlRTeEhRVUZITEVkQlFWY3NRMEZCUXl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU53UXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRGJFTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExESkNRVUV5UWp0VFFVTjJRenRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0RFFVTkdPMEZCUlVRc1QwRkJUeXhGUVVGaExHTkJRV01zUlVGQlF5eE5RVUZOTEdkQ1FVRm5RaXhEUVVGRE8wRkJSVEZFTEUxQlFVMHNUMEZCWjBJc2FVSkJRV2xDTzBOQlJYUkRPMEZCUlVRc1RVRkJUU3hQUVVGUExHTkJRV1VzVTBGQlVTeHBRa0ZCYVVJN1NVRkROVU1zUjBGQlJ5eERRVUZETEVOQlFWTTdVVUZEYkVJc1QwRkJUeXhUUVVGVExFTkJRVU03U1VGRGJrSXNRMEZCUXp0RFFVTkdPMEZCUjBRc1RVRkJUU3hQUVVGUExHMUNRVUZ2UWl4VFFVRlJMR2xDUVVGcFFqdEpRVWRvUkN4TlFVRk5MRU5CUVVNc1dVRkJXVHRSUVVONlFpeE5RVUZOTEVkQlFVY3NSMEZCU1N4RlFVRmxMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4alFVRmpMRU5CUVVNc1lVRkJZU3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53Uml4UFFVRlBMRWRCUVVjc1EwRkJRenRKUVVOaUxFTkJRVU03U1VGRlRTeEhRVUZITEVOQlFVTXNRMEZCVXp0UlFVTnNRaXhOUVVGTkxFbEJRVWtzUjBGQlZ5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRemRETEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRM0pFTEU5QlFVOHNiVUpCUVcxQ0xFTkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUTNwRExFTkJRVU03TzBGQldHRXNNa0pCUVU4c1IwRkJZU3h0UWtGQmJVSXNRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJRenRCUVdOMlJTeE5RVUZOTEU5QlFVOHNhMEpCUVcxQ0xGTkJRVkVzWTBGQll6dEpRVWMzUXl4TlFVRk5MRXRCUVVzc1NVRkJTVHRSUVVOd1FpeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRXRCUVVzc1MwRkJTeXhEUVVGRE8xbEJRM1JDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hqUVVGakxFVkJRVVVzUTBGQlF6dFJRVU51UXl4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU03U1VGRGJrSXNRMEZCUXp0SlFVbE5MRTFCUVUwc1MwRkJTeXhMUVVGTE8xRkJRM0pDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1MwRkJTeXhMUVVGTExFTkJRVU03V1VGRGRrSXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxHMUNRVUZ0UWl4RlFVRkZMRU5CUVVNN1VVRkRla01zVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMGxCUTNCQ0xFTkJRVU03UTBGRFJpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQXFJR0Z6SUdkeWIyc2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMmR5YjJzbk8xeHVhVzF3YjNKMElDb2dZWE1nZFdrZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwzVnBKenRjYm1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVGRISnBibWRWZEdsc2N5QjdYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdhR0Z6YUVOdlpHVW9jem9nYzNSeWFXNW5LVG9nYm5WdFltVnlJSHRjYmlBZ0lDQnNaWFFnYUdGemFEb2diblZ0WW1WeUlEMGdNRHRjYmlBZ0lDQnBaaUFvY3k1c1pXNW5kR2dnUFQwOUlEQXBYRzRnSUNBZ0lDQnlaWFIxY200Z2FHRnphRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBPaUJ1ZFcxaVpYSWdQU0F3T3lCcElEd2djeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWTJoeU9pQnVkVzFpWlhJZ1BTQnpMbU5vWVhKRGIyUmxRWFFvYVNrN1hHNGdJQ0FnSUNCb1lYTm9JRDBnS0Nob1lYTm9JRHc4SURVcElDMGdhR0Z6YUNrZ0t5QmphSEk3WEc0Z0lDQWdJQ0JvWVhOb0lIdzlJREE3SUM4dklFTnZiblpsY25RZ2RHOGdNekppYVhRZ2FXNTBaV2RsY2x4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2FHRnphRHRjYmlBZ2ZWeHVmVnh1WEc1cGJYQnZjblFnZTFObGNWQmhiR1YwZEdVc0lGTmxjVkJoYkdWMGRHVkNZWE5sZlNCbWNtOXRJQ2N1TDNObGNTMXdZV3hsZEhSbGN5YzdYRzVjYm1WNGNHOXlkQ0JoWW5OMGNtRmpkQ0JqYkdGemN5QlZibXR1YjNkdVUyVnhVR0ZzWlhSMFpTQnBiWEJzWlcxbGJuUnpJRk5sY1ZCaGJHVjBkR1VnZTF4dUlDQndkV0pzYVdNZ1lXSnpkSEpoWTNRZ1oyVjBLRzA2SUhOMGNtbHVaeWs2SUhOMGNtbHVaenRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUVkeVlYbEJiR3hRWVd4bGRIUmxJR1Y0ZEdWdVpITWdWVzVyYm05M2JsTmxjVkJoYkdWMGRHVWdlMXh1SUNCd2RXSnNhV01nWjJWMEtHMDZJSE4wY21sdVp5azZJSE4wY21sdVp5QjdYRzRnSUNBZ2NtVjBkWEp1SUNjak5qWTJOalkySnp0Y2JpQWdmVnh1ZlZ4dVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVmJtdHViM2R1UTI5c2IzSlFZV3hsZEhSbElHVjRkR1Z1WkhNZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdVZ2UxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklIQmhiR1YwZEdVNklITjBjbWx1WjF0ZElEMGdWVzVyYm05M2JrTnZiRzl5VUdGc1pYUjBaUzVpZFdsc1pGQmhiR1YwZEdVb0tUdGNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJpZFdsc1pGQmhiR1YwZEdVb0tUb2djM1J5YVc1blcxMGdlMXh1SUNBZ0lHTnZibk4wSUhKbGN5QTlJQ2hiWFNCaGN5QnpkSEpwYm1kYlhTa3VZMjl1WTJGMEtDNHVMazlpYW1WamRDNTJZV3gxWlhNb1UyVnhVR0ZzWlhSMFpVSmhjMlV1WTI5c2IzVnlVR0ZzWlhSMFpTa3BPMXh1SUNBZ0lISmxkSFZ5YmlCeVpYTTdYRzRnSUgxY2JseHVJQ0J3ZFdKc2FXTWdaMlYwS0cwNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnWTI5dWMzUWdhR0Z6YURvZ2JuVnRZbVZ5SUQwZ1UzUnlhVzVuVlhScGJITXVhR0Z6YUVOdlpHVW9iU2s3WEc0Z0lDQWdZMjl1YzNRZ2NFa2dQU0JvWVhOb0lDVWdWVzVyYm05M2JrTnZiRzl5VUdGc1pYUjBaUzV3WVd4bGRIUmxMbXhsYm1kMGFEdGNiaUFnSUNCeVpYUjFjbTRnVlc1cmJtOTNia052Ykc5eVVHRnNaWFIwWlM1d1lXeGxkSFJsVzNCSlhUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZXNXJibTkzYmxObGNWQmhiR1YwZEdWeklHVjRkR1Z1WkhNZ1UyVnhVR0ZzWlhSMFpVSmhjMlVnZTF4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCbmNtRjVPaUJUWlhGUVlXeGxkSFJsTzF4dVhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ1oyVjBJRWR5WVhrb0tUb2dVMlZ4VUdGc1pYUjBaU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVaM0poZVNBOVBUMGdkbTlwWkNBd0tWeHVJQ0FnSUNBZ2RHaHBjeTVuY21GNUlEMGdibVYzSUVkeVlYbEJiR3hRWVd4bGRIUmxLQ2s3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjNKaGVUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHTnZiRzl5T2lCVFpYRlFZV3hsZEhSbE8xeHVYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwSUVOdmJHOXlLQ2s2SUZObGNWQmhiR1YwZEdVZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJHOXlJRDA5UFNCMmIybGtJREFwWEc0Z0lDQWdJQ0IwYUdsekxtTnZiRzl5SUQwZ2JtVjNJRlZ1YTI1dmQyNURiMnh2Y2xCaGJHVjBkR1VvS1R0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1amIyeHZjanRjYmlBZ2ZWeHVmVnh1SWwxOSIsIi8vIERhdGEgc3RydWN0dXJlcyBmb3IgVi1Eb21haW4gcmVnaW9ucyBvZiBhbnRpYm9kaWVzXG5leHBvcnQgdmFyIFZkUmVnaW9uVHlwZTtcbihmdW5jdGlvbiAoVmRSZWdpb25UeXBlKSB7XG4gICAgVmRSZWdpb25UeXBlW1wiVW5rbm93blwiXSA9IFwidW5rbm93blwiO1xuICAgIFZkUmVnaW9uVHlwZVtcIkZSXCJdID0gXCJmcmFtZXdvcmtcIjtcbiAgICBWZFJlZ2lvblR5cGVbXCJDRFJcIl0gPSBcImNkclwiO1xufSkoVmRSZWdpb25UeXBlIHx8IChWZFJlZ2lvblR5cGUgPSB7fSkpO1xuLyoqIERlc2NyaWJlcyBWLURPTUFJTiAoSUcgYW5kIFRSKSByZWdpb24gKG9mIG11bHRpcGxlIGFsaWdubWVudClcbiAqIGh0dHBzOi8vd3d3LmltZ3Qub3JnL0lNR1RTY2llbnRpZmljQ2hhcnQvTnVtYmVyaW5nL0lNR1RJR1ZMc3VwZXJmYW1pbHkuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgVmRSZWdpb24ge1xuICAgIC8qKlxuICAgICAqIHN0YXJ0IGFuZCBwb3NpdGlvbiBhcmUgc3RyaW5ncyBiZWNhdXNlIHRoZXkgY29ycmVzcG9uZCB0byBwb3NpdGlvbiBuYW1lcyBhcyBjb2x1bW4gbmFtZXMgaW4gQU5BUkNJIG91dHB1dFxuICAgICAqIEBwYXJhbSB7VmRSZWdpb25UeXBlfSB0eXBlICBUeXBlIG9mIHRoZSByZWdpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgTmFtZSBvZiB0aGUgcmVnaW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNoYWluXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9yZGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uU3RhcnROYW1lICBSZWdpb24gc3RhcnQgcG9zaXRpb24gKGluY2x1c2l2ZSlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb25FbmROYW1lICBSZWdpb24gZW5kIHBvc2l0aW9uIChpbmNsdXNpdmUpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZSwgbmFtZSwgY2hhaW4sIG9yZGVyLCBwb3NpdGlvblN0YXJ0TmFtZSwgcG9zaXRpb25FbmROYW1lKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuY2hhaW4gPSBjaGFpbjtcbiAgICAgICAgdGhpcy5vcmRlciA9IG9yZGVyO1xuICAgICAgICB0aGlzLnBvc2l0aW9uU3RhcnROYW1lID0gcG9zaXRpb25TdGFydE5hbWU7XG4gICAgICAgIHRoaXMucG9zaXRpb25FbmROYW1lID0gcG9zaXRpb25FbmROYW1lO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRtUXRjbVZuYVc5dWN5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW5aa0xYSmxaMmx2Ym5NdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzY1VSQlFYRkVPMEZCUlhKRUxFMUJRVTBzUTBGQlRpeEpRVUZaTEZsQlNWZzdRVUZLUkN4WFFVRlpMRmxCUVZrN1NVRkRkRUlzYlVOQlFXMUNMRU5CUVVFN1NVRkRia0lzWjBOQlFXZENMRU5CUVVFN1NVRkRhRUlzTWtKQlFWY3NRMEZCUVR0QlFVTmlMRU5CUVVNc1JVRktWeXhaUVVGWkxFdEJRVm9zV1VGQldTeFJRVWwyUWp0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZGQlFWRTdTVUZSYmtJN096czdPenM3TzA5QlVVYzdTVUZEU0N4WlFVRlpMRWxCUVd0Q0xFVkJRVVVzU1VGQldTeEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmhMRVZCUTNoRkxHbENRVUY1UWl4RlFVRkZMR1ZCUVhWQ08xRkJRMnhFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMjVDTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMjVDTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eHBRa0ZCYVVJc1EwRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4SFFVRkhMR1ZCUVdVc1EwRkJRenRKUVVONlF5eERRVUZETzBOQlEwWWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2THlCRVlYUmhJSE4wY25WamRIVnlaWE1nWm05eUlGWXRSRzl0WVdsdUlISmxaMmx2Ym5NZ2IyWWdZVzUwYVdKdlpHbGxjMXh1WEc1bGVIQnZjblFnWlc1MWJTQldaRkpsWjJsdmJsUjVjR1VnZTF4dUlDQlZibXR1YjNkdUlEMGdKM1Z1YTI1dmQyNG5MRnh1SUNCR1VpQTlJQ2RtY21GdFpYZHZjbXNuTEZ4dUlDQkRSRklnUFNBblkyUnlKeXhjYm4xY2JseHVMeW9xSUVSbGMyTnlhV0psY3lCV0xVUlBUVUZKVGlBb1NVY2dZVzVrSUZSU0tTQnlaV2RwYjI0Z0tHOW1JRzExYkhScGNHeGxJR0ZzYVdkdWJXVnVkQ2xjYmlBcUlHaDBkSEJ6T2k4dmQzZDNMbWx0WjNRdWIzSm5MMGxOUjFSVFkybGxiblJwWm1salEyaGhjblF2VG5WdFltVnlhVzVuTDBsTlIxUkpSMVpNYzNWd1pYSm1ZVzFwYkhrdWFIUnRiRnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVm1SU1pXZHBiMjRnZTF4dUlDQjBlWEJsT2lCV1pGSmxaMmx2YmxSNWNHVTdYRzRnSUc1aGJXVTZJSE4wY21sdVp6dGNiaUFnWTJoaGFXNDZJSE4wY21sdVp6dGNiaUFnYjNKa1pYSTZJRzUxYldKbGNqdGNiaUFnY0c5emFYUnBiMjVUZEdGeWRFNWhiV1U2SUhOMGNtbHVaenRjYmlBZ2NHOXphWFJwYjI1RmJtUk9ZVzFsT2lCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJSE4wWVhKMElHRnVaQ0J3YjNOcGRHbHZiaUJoY21VZ2MzUnlhVzVuY3lCaVpXTmhkWE5sSUhSb1pYa2dZMjl5Y21WemNHOXVaQ0IwYnlCd2IzTnBkR2x2YmlCdVlXMWxjeUJoY3lCamIyeDFiVzRnYm1GdFpYTWdhVzRnUVU1QlVrTkpJRzkxZEhCMWRGeHVJQ0FnS2lCQWNHRnlZVzBnZTFaa1VtVm5hVzl1Vkhsd1pYMGdkSGx3WlNBZ1ZIbHdaU0J2WmlCMGFHVWdjbVZuYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElDQk9ZVzFsSUc5bUlIUm9aU0J5WldkcGIyNWNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUdOb1lXbHVYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCdmNtUmxjbHh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2NHOXphWFJwYjI1VGRHRnlkRTVoYldVZ0lGSmxaMmx2YmlCemRHRnlkQ0J3YjNOcGRHbHZiaUFvYVc1amJIVnphWFpsS1Z4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjRzl6YVhScGIyNUZibVJPWVcxbElDQlNaV2RwYjI0Z1pXNWtJSEJ2YzJsMGFXOXVJQ2hwYm1Oc2RYTnBkbVVwWEc0Z0lDQXFMMXh1SUNCamIyNXpkSEoxWTNSdmNpaDBlWEJsT2lCV1pGSmxaMmx2YmxSNWNHVXNJRzVoYldVNklITjBjbWx1Wnl3Z1kyaGhhVzQ2SUhOMGNtbHVaeXdnYjNKa1pYSTZJRzUxYldKbGNpeGNiaUFnSUNCd2IzTnBkR2x2YmxOMFlYSjBUbUZ0WlRvZ2MzUnlhVzVuTENCd2IzTnBkR2x2YmtWdVpFNWhiV1U2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSFJvYVhNdWRIbHdaU0E5SUhSNWNHVTdYRzRnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0IwYUdsekxtTm9ZV2x1SUQwZ1kyaGhhVzQ3WEc0Z0lDQWdkR2hwY3k1dmNtUmxjaUE5SUc5eVpHVnlPMXh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjVUZEdGeWRFNWhiV1VnUFNCd2IzTnBkR2x2YmxOMFlYSjBUbUZ0WlR0Y2JpQWdJQ0IwYUdsekxuQnZjMmwwYVc5dVJXNWtUbUZ0WlNBOUlIQnZjMmwwYVc5dVJXNWtUbUZ0WlR0Y2JpQWdmVnh1ZlZ4dUlsMTkiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHd1IGZyb20gJ3d1JztcbmltcG9ydCAqIGFzIHJ4anMgZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWZWN0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyB2ZWN0b3JMZW5ndGgsIHZlY3RvckRvdFByb2R1Y3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBBbWlub2FjaWRzLCBBbWlub2FjaWRzUGFsZXR0ZXMgfSBmcm9tICcuLi9hbWlub2FjaWRzJztcbmltcG9ydCB7IE51Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzIH0gZnJvbSAnLi4vbnVjbGVvdGlkZXMnO1xuaW1wb3J0IHsgVW5rbm93blNlcVBhbGV0dGVzIH0gZnJvbSAnLi4vdW5rbm93bic7XG5IVE1MQ2FudmFzRWxlbWVudC5wcm90b3R5cGUuZ2V0Q3Vyc29yUG9zaXRpb24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gbmV3IERHLlBvaW50KGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQsIGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcCk7XG59O1xuREcuUmVjdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgIHJldHVybiB0aGlzLmxlZnQgPD0geCAmJiB4IDw9IHRoaXMucmlnaHQgJiYgdGhpcy50b3AgPD0geSAmJiB5IDw9IHRoaXMuYm90dG9tO1xufTtcbmV4cG9ydCBjbGFzcyBQb3NpdGlvbk1vbm9tZXJJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHRoaXMuYm91bmRzID0gbmV3IERHLlJlY3QoMCwgMCwgMCwgMCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uSW5mbyB7XG4gICAgLyoqIGZyZXEgPSB7fSwgcm93Q291bnQgPSAwXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBwb3NpdGlvbiAoJzExMUEnLCAnMTExLjEnLCBldGMpXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZyZXEgPSB7fTtcbiAgICAgICAgdGhpcy5yb3dDb3VudCA9IDA7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYkxvZ28gZXh0ZW5kcyBERy5Kc1ZpZXdlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMudmlld2VySWQgPSAtMTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAvLyBwcml2YXRlIHJlYWRvbmx5IGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZSA9IENvbG9yU2NoZW1lc1tOdWNsZW90aWRlc1dlYkxvZ28ucmVzaWR1ZXNTZXRdO1xuICAgICAgICB0aGlzLmNwID0gbnVsbDtcbiAgICAgICAgdGhpcy5heGlzSGVpZ2h0ID0gMTI7XG4gICAgICAgIHRoaXMuc2VxQ29sID0gbnVsbDtcbiAgICAgICAgdGhpcy5zcGxpdHRlciA9IG51bGw7XG4gICAgICAgIC8vIHByaXZhdGUgbWF4TGVuZ3RoOiBudW1iZXIgPSAxMDA7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gW107XG4gICAgICAgIHRoaXMucm93c01hc2tlZCA9IDA7XG4gICAgICAgIHRoaXMucm93c051bGwgPSAwO1xuICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gLTE7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAtMTtcbiAgICAgICAgdGhpcy52aWV3U3VicyA9IFtdO1xuICAgICAgICB0aGlzLnZpZXdlcklkID0gV2ViTG9nby52aWV3ZXJDb3VudDtcbiAgICAgICAgV2ViTG9nby52aWV3ZXJDb3VudCArPSAxO1xuICAgICAgICB0aGlzLnRleHRCYXNlbGluZSA9ICd0b3AnO1xuICAgICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoID0gdGhpcy5mbG9hdCgncG9zaXRpb25XaWR0aCcsIDE2IC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDQsIG1heDogNjQsIHBvc3RmaXg6ICdweCd9Ki8pO1xuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMuZmxvYXQoJ21pbkhlaWdodCcsIDUwIC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDI1LCBtYXg6IDI1MCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgICAgIHRoaXMubWF4SGVpZ2h0ID0gdGhpcy5mbG9hdCgnbWF4SGVpZ2h0JywgMTAwIC8qLFxuICAgICAgICAgIHtlZGl0b3I6ICdzbGlkZXInLCBtaW46IDI1LCBtYXg6IDUwMCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgICAgIHRoaXMuY29uc2lkZXJOdWxsU2VxdWVuY2VzID0gdGhpcy5ib29sKCdjb25zaWRlck51bGxTZXF1ZW5jZXMnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID0gdGhpcy5zdHJpbmcoJ3NlcXVlbmNlQ29sdW1uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ3N0YXJ0UG9zaXRpb25OYW1lJywgbnVsbCk7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb25OYW1lID0gdGhpcy5zdHJpbmcoJ2VuZFBvc2l0aW9uTmFtZScsIG51bGwpO1xuICAgICAgICB0aGlzLmZpeFdpZHRoID0gdGhpcy5ib29sKCdmaXhXaWR0aCcsIGZhbHNlKTtcbiAgICAgICAgdGhpcy52ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCd2ZXJ0aWNhbEFsaWdubWVudCcsICdtaWRkbGUnLCB7IGNob2ljZXM6IFsndG9wJywgJ21pZGRsZScsICdib3R0b20nXSB9KTtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy5zdHJpbmcoJ2hvcml6b250YWxBbGlnbm1lbnQnLCAnY2VudGVyJywgeyBjaG9pY2VzOiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10gfSk7XG4gICAgICAgIHRoaXMuZml0QXJlYSA9IHRoaXMuYm9vbCgnZml0QXJlYScsIHRydWUpO1xuICAgICAgICB0aGlzLnNocmlua0VtcHR5VGFpbCA9IHRoaXMuYm9vbCgnc2hyaW5rRW1wdHlUYWlsJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuc2tpcEVtcHR5UG9zaXRpb25zID0gdGhpcy5ib29sKCdza2lwRW1wdHlQb3NpdGlvbnMnLCBmYWxzZSk7XG4gICAgfVxuICAgIC8qKiBGb3Igc3RhcnRQb3NpdGlvbiBlcXVhbHMgdG8gZW5kUG9zaXRpb24gTGVuZ3RoIGlzIDEgKi9cbiAgICBnZXQgTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBvc2l0aW9uIDw9IHRoaXMuZW5kUG9zaXRpb24gPyB0aGlzLmVuZFBvc2l0aW9uIC0gdGhpcy5zdGFydFBvc2l0aW9uICsgMSA6IDA7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dlYkxvZ28gc2Vjb25kIGluaXRpYWxpemF0aW9uIScpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5oZWxwVXJsID0gJy9oZWxwL3Zpc3VhbGl6ZS92aWV3ZXJzL3dlYi1sb2dvLm1kJztcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdCA9IHVpLmRpdignTm8gbWVzc2FnZScpO1xuICAgICAgICAgICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHVpLmNhbnZhcygpO1xuICAgICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICB0aGlzLmhvc3QgPSB1aS5kaXYoW3RoaXMubXNnSG9zdCwgdGhpcy5jYW52YXNdKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyID0gdWkucmFuZ2VTbGlkZXIoMCwgMjAsIDIsIDUpO1xuICAgICAgICAgICAgLy8gdGhpcy5zbGlkZXIucm9vdC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgIC8vIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzEycHgnO1xuICAgICAgICAgICAgY29uc3QgZ2V0TW9ub21lciA9IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgalBvcyA9IE1hdGguZmxvb3IocC54IC8gdGhpcy5fcG9zaXRpb25XaWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb25vbWVyID0gT2JqZWN0LmtleXMocG9zaXRpb24uZnJlcSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoKG0pID0+IHBvc2l0aW9uLmZyZXFbbV0uYm91bmRzLmNvbnRhaW5zKHAueCwgcC55KSk7XG4gICAgICAgICAgICAgICAgaWYgKG1vbm9tZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW2pQb3MsIG1vbm9tZXIsIHBvc2l0aW9uLmZyZXFbbW9ub21lcl1dO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHRoaXMuc3Vicy5wdXNoKHJ4anMuZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2VvdmVyJykuc3Vic2NyaWJlKChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyB9KSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdWJzLnB1c2gocnhqcy5mcm9tRXZlbnQodGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FudmFzKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IGU7XG4gICAgICAgICAgICAgICAgY29uc3QgW2pQb3MsIG1vbm9tZXJdID0gZ2V0TW9ub21lcih0aGlzLmNhbnZhcy5nZXRDdXJzb3JQb3NpdGlvbihhcmdzKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICYmIHRoaXMuc2VxQ29sICYmIHRoaXMuc3BsaXR0ZXIgJiYgbW9ub21lcikge1xuICAgICAgICAgICAgICAgICAgICB1aS50b29sdGlwLnNob3dSb3dHcm91cCh0aGlzLmRhdGFGcmFtZSwgKGlSb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcSA9IHRoaXMuc2VxQ29sLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcU0gPSBzZXEgPyB0aGlzLnNwbGl0dGVyKHNlcSlbdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcU0gPT09IG1vbm9tZXIgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgYXJncy54ICsgMTYsIGFyZ3MueSArIDE2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMucHVzaChyeGpzLmZyb21FdmVudCh0aGlzLmNhbnZhcywgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgZS5idXR0b24gIT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncykpO1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnRzIGRlc2VsZWN0IGFsbCByb3dzIGlmIHdlIG1pc3MgbW9ub21lciBib3VuZHNcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgdGhpcy5zcGxpdHRlciAmJiBtb25vbWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5pbml0KChpUm93KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXEgPSB0aGlzLnNlcUNvbC5nZXQoaVJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXFNID0gc2VxID8gdGhpcy5zcGxpdHRlcihzZXEpW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXFNID09PSBtb25vbWVyICYmIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXQoaVJvdyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMucHVzaCh1aS5vblNpemVDaGFuZ2VkKHRoaXMucm9vdCkuc3Vic2NyaWJlKHRoaXMucm9vdE9uU2l6ZUNoYW5nZWQuYmluZCh0aGlzKSkpO1xuICAgICAgICAgICAgdGhpcy5yb290LmFwcGVuZCh0aGlzLmhvc3QpO1xuICAgICAgICAgICAgLy8gdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuc2xpZGVyLnJvb3QpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByb290T25TaXplQ2hhbmdlZChhcmdzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKGBXZWJMb2dvLm9uUm9vdFNpemVDaGFuZ2VkKCkgYCArXG4gICAgICAgIC8vICAgYHJvb3Qud2lkdGg9JHt0aGlzLnJvb3QuY2xpZW50V2lkdGh9LCByb290LmhlaWdodD0ke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9LCBgICtcbiAgICAgICAgLy8gICBgY2FudmFzLndpZHRoPSR7dGhpcy5jYW52YXMud2lkdGh9LCBjYW52YXMuaGVpZ2h0PSR7dGhpcy5jYW52YXMuaGVpZ2h0fSAuYCk7XG4gICAgfVxuICAgIC8qKiBBc3NpZ25zIHtAbGluayBzZXFDb2x9IGFuZCB7QGxpbmsgY3B9IGJhc2VkIG9uIHtAbGluayBzZXF1ZW5jZUNvbHVtbk5hbWV9IGFuZCBjYWxscyB7QGxpbmsgcmVuZGVyfSgpLlxuICAgICAqL1xuICAgIHVwZGF0ZVNlcUNvbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnNlcUNvbCA9IHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID8gdGhpcy5kYXRhRnJhbWUuY29sKHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VxQ29sID0gV2ViTG9nby5waWNrVXBTZXFDb2wyKHRoaXMuZGF0YUZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc2VxQ29sID8gdGhpcy5zZXFDb2wubmFtZSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0cyA9IHRoaXMuc2VxQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSB0aGlzLnNlcUNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXR0ZXIgPSBXZWJMb2dvLmdldFNwbGl0dGVyKHVuaXRzLCBzZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZSh0aGlzLnNlcUNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0dGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAtMTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFBvc2l0aW9uID0gLTE7XG4gICAgICAgICAgICAgICAgdGhpcy5jcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gICAgdXBkYXRlUG9zaXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2VxQ29sKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgY2F0ZWdvcmllcztcbiAgICAgICAgaWYgKHRoaXMuc2hyaW5rRW1wdHlUYWlsKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgICAgICAgY2F0ZWdvcmllcyA9IEFycmF5LmZyb20obmV3IFNldChBcnJheS5mcm9tKEFycmF5KGluZGljZXMubGVuZ3RoKS5rZXlzKCkpLm1hcCgoaSkgPT4gdGhpcy5zZXFDb2wuZ2V0KGluZGljZXNbaV0pKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2F0ZWdvcmllcyA9IHRoaXMuc2VxQ29sLmNhdGVnb3JpZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gY2F0ZWdvcmllcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4uY2F0ZWdvcmllcy5tYXAoKHMpID0+IHMgIT09IG51bGwgPyB0aGlzLnNwbGl0dGVyKHMpLmxlbmd0aCA6IDApKSA6IDA7XG4gICAgICAgIC8vIEdldCBwb3NpdGlvbiBuYW1lcyBmcm9tIGRhdGEgY29sdW1uIHRhZyAncG9zaXRpb25OYW1lcydcbiAgICAgICAgY29uc3QgcG9zaXRpb25OYW1lc1R4dCA9IHRoaXMuc2VxQ29sLmdldFRhZygncG9zaXRpb25OYW1lcycpO1xuICAgICAgICAvLyBGYWxsYmFjayBpZiAncG9zaXRpb25OYW1lcycgdGFnIGlzIG5vdCBwcm92aWRlZFxuICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBwb3NpdGlvbk5hbWVzVHh0ID8gcG9zaXRpb25OYW1lc1R4dC5zcGxpdCgnLCAnKS5tYXAoKG4pID0+IG4udHJpbSgpKSA6XG4gICAgICAgICAgICBbLi4uQXJyYXkobWF4TGVuZ3RoKS5rZXlzKCldLm1hcCgoalBvcykgPT4gYCR7alBvcyArIDF9YCk7XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9ICh0aGlzLnN0YXJ0UG9zaXRpb25OYW1lICYmIHRoaXMucG9zaXRpb25OYW1lcyAmJlxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluY2x1ZGVzKHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLnN0YXJ0UG9zaXRpb25OYW1lKSA6IDA7XG4gICAgICAgIHRoaXMuZW5kUG9zaXRpb24gPSAodGhpcy5lbmRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5lbmRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLmVuZFBvc2l0aW9uTmFtZSkgOiAobWF4TGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIG9uUHJvcGVydHlDaGFuZ2VkKHByb3BlcnR5KSB7XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoYFdlYkxvZ28ub25Qcm9wZXJ0eUNoYW5nZWQoICR7cHJvcGVydHkubmFtZX0gPSAnJyB9KWApO1xuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSk7XG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkubmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnY29uc2lkZXJOdWxsU2VxdWVuY2VzJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlcXVlbmNlQ29sdW1uTmFtZSc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0UG9zaXRpb25OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kUG9zaXRpb25OYW1lJzpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncG9zaXRpb25XaWR0aCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbkhlaWdodCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYXhIZWlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZml4V2lkdGgnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmVydGljYWxBbGlnbm1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKHRydWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbEFsaWdubWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmaXRBcmVhJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3Nocmlua0VtcHR5VGFpbCc6XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblRhYmxlQXR0YWNoZWQoKSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgb25UYWJsZUF0dGFjaGVkOiB7IGdldDogKCkgPT4gc3VwZXIub25UYWJsZUF0dGFjaGVkIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSB0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJztcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoIGRhdGFGcmFtZSA9ICR7ZGF0YUZyYW1lVHh0fSApIHN0YXJ0YCk7XG4gICAgICAgICAgICBfc3VwZXIub25UYWJsZUF0dGFjaGVkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlcUNvbCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnMucHVzaCh0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24ub25DaGFuZ2VkLnN1YnNjcmliZSgoXykgPT4gdGhpcy5yZW5kZXIoKSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHRoaXMuZGF0YUZyYW1lLmZpbHRlci5vbkNoYW5nZWQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0KCk7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCkgZW5kYCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZXRhY2goKSB7XG4gICAgICAgIGNvbnN0IF9zdXBlciA9IE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgICAgICAgZGV0YWNoOiB7IGdldDogKCkgPT4gc3VwZXIuZGV0YWNoIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhRnJhbWVUeHQgPSBgJHt0aGlzLmRhdGFGcmFtZSA/ICdkYXRhJyA6ICdudWxsJ31gO1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHtkYXRhRnJhbWVUeHR9ICkgc3RhcnRgKTtcbiAgICAgICAgICAgIF9zdXBlci5kZXRhY2guY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmlld1N1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICB0aGlzLmhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubXNnSG9zdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYGJpbzogV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5vblRhYmxlQXR0YWNoZWQoKSBlbmRgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9udWxsU2VxdWVuY2UoZmlsbGVyUmVzaWR1ZSA9ICdYJykge1xuICAgICAgICBpZiAodGhpcy5jb25zaWRlck51bGxTZXF1ZW5jZXMpXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIF9jYWxjdWxhdGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuaG9zdCB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNhbGNTaXplKCk7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NOYW1lID0gdGhpcy5wb3NpdGlvbk5hbWVzW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10gPSBuZXcgUG9zaXRpb25JbmZvKHBvc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIDIwMjItMDUtMDUgYXNrYWxraW4gaW5zdHJ1Y3RlZCB0byBzaG93IFdlYkxvZ28gYmFzZWQgb24gZmlsdGVyIChub3Qgc2VsZWN0aW9uKVxuICAgICAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldFNlbGVjdGVkSW5kZXhlcygpO1xuICAgICAgICAvLyBjb25zdCBpbmRpY2VzID0gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLnRydWVDb3VudCA+IDAgPyB0aGlzLmRhdGFGcmFtZS5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRJbmRleGVzKCkgOlxuICAgICAgICAvLyAgIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgICAgdGhpcy5yb3dzTWFza2VkID0gaW5kaWNlcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucm93c051bGwgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5kaWNlcykge1xuICAgICAgICAgICAgbGV0IHMgPSAodGhpcy5zZXFDb2wuZ2V0KGkpKTtcbiAgICAgICAgICAgIGlmICghcykge1xuICAgICAgICAgICAgICAgIHMgPSB0aGlzLl9udWxsU2VxdWVuY2UoKTtcbiAgICAgICAgICAgICAgICArK3RoaXMucm93c051bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZXFNID0gdGhpcy5zcGxpdHRlcihzKTtcbiAgICAgICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBtSW5mbyA9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXE7XG4gICAgICAgICAgICAgICAgY29uc3QgbSA9IHNlcU1bdGhpcy5zdGFydFBvc2l0aW9uICsgalBvc10gfHwgJy0nO1xuICAgICAgICAgICAgICAgIGlmICghKG0gaW4gcG1JbmZvKSlcbiAgICAgICAgICAgICAgICAgICAgcG1JbmZvW21dID0gbmV3IFBvc2l0aW9uTW9ub21lckluZm8oKTtcbiAgICAgICAgICAgICAgICBwbUluZm9bbV0uY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyNyZWdpb24gUG9saXNoIGZyZXEgY291bnRzXG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgLy8gZGVsZXRlIHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXFbJy0nXTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbSBpbiB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKVxuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25zW2pQb3NdLnJvd0NvdW50ICs9IHRoaXMucG9zaXRpb25zW2pQb3NdLmZyZXFbbV0uY291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8jZW5kcmVnaW9uXG4gICAgICAgIGNvbnN0IHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gdGhpcy5jYW52YXMuaGVpZ2h0IC0gdGhpcy5heGlzSGVpZ2h0ICogcjtcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZyhgV2ViTG9nbzwke3RoaXMudmlld2VySWR9Pi5fY2FsY3VsYXRlKCkgbWF4SGVpZ2h0PSR7bWF4SGVpZ2h0fS5gKTtcbiAgICAgICAgLy8jcmVnaW9uIENhbGN1bGF0ZSBzY3JlZW5cbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBmcmVxID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgICAgICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQ7XG4gICAgICAgICAgICBsZXQgeSA9IHRoaXMuYXhpc0hlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhmcmVxKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFbMF0gIT09ICctJyAmJiBiWzBdICE9PSAnLScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiWzFdLmNvdW50IC0gYVsxXS5jb3VudDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScgJiYgYlswXSA9PT0gJy0nKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICBlbHNlIC8qIChiWzBdID09PSAnLScpICovXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiArMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG1JbmZvID0gZW50cnlbMV07XG4gICAgICAgICAgICAgICAgLy8gY29uc3QgbTogc3RyaW5nID0gZW50cnlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IG1heEhlaWdodCAqIHBtSW5mby5jb3VudCAvIHJvd0NvdW50O1xuICAgICAgICAgICAgICAgIHBtSW5mby5ib3VuZHMgPSBuZXcgREcuUmVjdChqUG9zICogdGhpcy5fcG9zaXRpb25XaWR0aCwgeSwgdGhpcy5fcG9zaXRpb25XaWR0aCwgaCk7XG4gICAgICAgICAgICAgICAgeSArPSBoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vI2VuZHJlZ2lvblxuICAgIH1cbiAgICAvLyByZWZsZWN0IGNoYW5nZXMgbWFkZSB0byBmaWx0ZXIvc2VsZWN0aW9uXG4gICAgcmVuZGVyKHJlY2FsYyA9IHRydWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5tc2dIb3N0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXFDb2wgJiYgIXRoaXMuY3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZ0hvc3QuaW5uZXJUZXh0ID0gYFVua25vd24gcGFsZXR0ZSAoY29sdW1uIHNlbVR5cGU6ICcke3RoaXMuc2VxQ29sLnNlbVR5cGV9JykuYDtcbiAgICAgICAgICAgICAgICB0aGlzLm1zZ0hvc3Quc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tc2dIb3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5zZXFDb2wgfHwgIXRoaXMuZGF0YUZyYW1lIHx8ICF0aGlzLmNwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBnID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgaWYgKCFnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAocmVjYWxjKVxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlKCk7XG4gICAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgZy5maWxsU3R5bGUgPSAnd2hpdGUnO1xuICAgICAgICBnLmZpbGxSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBnLnRleHRCYXNlbGluZSA9IHRoaXMudGV4dEJhc2VsaW5lO1xuICAgICAgICAvLyBQcmV2ZW50cyBkaXZpc2lvbiBieSB6ZXJvIG9uIExlbmd0aCA9IDBcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRQb3NpdGlvbiA9PT0gLTEgfHwgdGhpcy5lbmRQb3NpdGlvbiA9PT0gLTEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vI3JlZ2lvbiBQbG90IHBvc2l0aW9uTmFtZXNcbiAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICBnLmZpbGxTdHlsZSA9ICdibGFjayc7XG4gICAgICAgIGcudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgIGcuZm9udCA9ICcxMHB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgY29uc3QgcG9zTmFtZU1heFdpZHRoID0gTWF0aC5tYXgoLi4udGhpcy5wb3NpdGlvbnMubWFwKChwb3MpID0+IGcubWVhc3VyZVRleHQocG9zLm5hbWUpLndpZHRoKSk7XG4gICAgICAgIGNvbnN0IGhTY2FsZSA9IHBvc05hbWVNYXhXaWR0aCA8ICh0aGlzLl9wb3NpdGlvbldpZHRoIC0gMikgPyAxIDogKHRoaXMuX3Bvc2l0aW9uV2lkdGggLSAyKSAvIHBvc05hbWVNYXhXaWR0aDtcbiAgICAgICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgICAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKGhTY2FsZSwgMCwgMCwgMSwgalBvcyAqIHRoaXMuX3Bvc2l0aW9uV2lkdGggKyB0aGlzLl9wb3NpdGlvbldpZHRoIC8gMiwgMCk7XG4gICAgICAgICAgICBnLmZpbGxUZXh0KHBvcy5uYW1lLCAwLCAwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyNlbmRyZWdpb24gUGxvdCBwb3NpdGlvbk5hbWVzXG4gICAgICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbbW9ub21lciwgcG1JbmZvXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKSkge1xuICAgICAgICAgICAgICAgIGlmIChtb25vbWVyICE9PSAnLScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYiA9IHBtSW5mby5ib3VuZHM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9ICcxNnB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmJztcbiAgICAgICAgICAgICAgICAgICAgLy8gSGFja3MgdG8gc2NhbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gdGFyZ2V0IHJlY3RhbmdsZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJBc2NlbnQgPSAwLjI1O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQgPSAxMi4yO1xuICAgICAgICAgICAgICAgICAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnbGlnaHRncmF5JztcbiAgICAgICAgICAgICAgICAgICAgZy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICBnLnJlY3QoYi5sZWZ0LCBiLnRvcCwgYi53aWR0aCwgYi5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICBnLmZpbGxTdHlsZSA9IChfYSA9IHRoaXMuY3AuZ2V0KG1vbm9tZXIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmNwLmdldCgnb3RoZXInKTtcbiAgICAgICAgICAgICAgICAgICAgZy50ZXh0QWxpZ24gPSAnbGVmdCc7XG4gICAgICAgICAgICAgICAgICAgIGcuZm9udCA9IGZvbnRTdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgLy9nLmZpbGxSZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbVRtID0gZy5tZWFzdXJlVGV4dChtb25vbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKG1NLmFjdHVhbEJvdW5kaW5nQm94QXNjZW50ICE9IDApXG4gICAgICAgICAgICAgICAgICAgIC8vICAgY29uc29sZS5kZWJ1ZyhgbTogJHttfSwgbU0uYWN0dWFsQm91bmRpbmdCb3hBc2NlbnQ6ICR7bU0uYWN0dWFsQm91bmRpbmdCb3hBc2NlbnR9YCk7XG4gICAgICAgICAgICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKGIud2lkdGggLyBtVG0ud2lkdGgsIDAsIDAsIGIuaGVpZ2h0IC8gdXBwZXJjYXNlTGV0dGVySGVpZ2h0LCBiLmxlZnQsIGIudG9wKTtcbiAgICAgICAgICAgICAgICAgICAgZy5maWxsVGV4dChtb25vbWVyLCAwLCAtdXBwZXJjYXNlTGV0dGVyQXNjZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FsY1NpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuaG9zdClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHdpZHRoID0gdGhpcy5MZW5ndGggKiB0aGlzLnBvc2l0aW9uV2lkdGg7XG4gICAgICAgIGxldCBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQpKTtcbiAgICAgICAgaWYgKHRoaXMuZml0QXJlYSkge1xuICAgICAgICAgICAgY29uc3QgeFNjYWxlID0gdGhpcy5yb290LmNsaWVudEhlaWdodCAvIGhlaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHlTY2FsZSA9IHRoaXMucm9vdC5jbGllbnRXaWR0aCAvIHdpZHRoO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heCgxLCBNYXRoLm1pbih4U2NhbGUsIHlTY2FsZSkpO1xuICAgICAgICAgICAgd2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgICAgICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoICogc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoICogcjtcbiAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICAgIC8vIGNvbnN0IGNhbnZhc0hlaWdodDogbnVtYmVyID0gd2lkdGggPiB0aGlzLnJvb3QuY2xpZW50V2lkdGggPyBoZWlnaHQgLSA4IDogaGVpZ2h0O1xuICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ2hlaWdodCcsIGAke2hlaWdodH1weGApO1xuICAgICAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmhvc3QuY2xpZW50SGVpZ2h0O1xuICAgICAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQgKiByO1xuICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7Y2FudmFzSGVpZ2h0fXB4YCk7XG4gICAgICAgIC8vIEFkanVzdCBob3N0IGFuZCByb290IHdpZHRoXG4gICAgICAgIGlmICh0aGlzLmZpeFdpZHRoKSB7XG4gICAgICAgICAgICAvLyBmdWxsIHdpZHRoIGZvciBjYW52YXMgaG9zdCBhbmQgcm9vdFxuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgJ2hpZGRlbicsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93JywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ3RleHQtYWxpZ24nLCB0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpO1xuICAgICAgICAgICAgLy8gdmVydGljYWwgYWxpZ25tZW50XG4gICAgICAgICAgICBsZXQgaG9zdFRvcE1hcmdpbiA9IDA7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgICAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IC0gaGVpZ2h0KSAvIDIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgdGhpcy5yb290LmNsaWVudEhlaWdodCAtIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgYCR7aG9zdFRvcE1hcmdpbn1weGAsICdpbXBvcnRhbnQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3QuY2xpZW50SGVpZ2h0IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdoZWlnaHQnLCBgJHt0aGlzLnJvb3QuY2xpZW50SGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdy15JywgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCAnaGlkZGVuJywgJ2ltcG9ydGFudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXG4gICAgICAgIC8vICAgYHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgPSAke3RoaXMucm9vdC5zdHlsZS5oZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPSAke3RoaXMucm9vdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMuaG9zdC5zdHlsZS5oZWlnaHQgPSAke3RoaXMuaG9zdC5zdHlsZS5oZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgYHRoaXMuaG9zdC5jbGllbnRIZWlnaHQgPSAke3RoaXMuaG9zdC5jbGllbnRIZWlnaHR9XFxuYCArXG4gICAgICAgIC8vICAgJ1xcbicgK1xuICAgICAgICAvLyAgIGB0aGlzLmNhbnZhcy5oZWlnaHQgICAgICAgPSAke3RoaXMuY2FudmFzLmhlaWdodH1cXG5gICtcbiAgICAgICAgLy8gICBgdGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gJHt0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHR9YCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSAgbWluTGVuZ3RoIG1pbmltdW0gbGVuZ3RoIG9mIHNlcXVlbmNlIHRvIGRldGVjdCBwYWxldHRlIChlbXB0eSBzdHJpbmdzIGFyZSBhbGxvd2VkKVxuICAgICAqIEByZXR1cm4ge1NlcVBhbGV0dGV9IFBhbGV0dGUgY29ycmVzcG9uZGluZyB0byB0aGUgYWxwaGFiZXQgb2YgdGhlIHNlcXVlbmNlcyBpbiB0aGUgY29sdW1uXG4gICAgICovXG4gICAgc3RhdGljIHBpY2tVcFBhbGV0dGUoc2VxQ29sLCBtaW5MZW5ndGggPSA1KSB7XG4gICAgICAgIGxldCByZXMgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKHNlcUNvbC5zZW1UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFtaW5vYWNpZHMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgICAgICAgICAgIHJlcyA9IEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBOdWNsZW90aWRlcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQ6XG4gICAgICAgICAgICAgICAgcmVzID0gTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdHMgPSBXZWJMb2dvLmdldFN0YXRzKHNlcUNvbCwgbWluTGVuZ3RoLCBXZWJMb2dvLnNwbGl0dGVyQXNGYXN0YSk7XG4gICAgICAgIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlcyA9IFtcbiAgICAgICAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSksIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtXSxcbiAgICAgICAgICAgIFtuZXcgU2V0KE9iamVjdC5rZXlzKEFtaW5vYWNpZHMuTmFtZXMpKSwgQW1pbm9hY2lkc1BhbGV0dGVzLkdyb2tHcm91cHNdLFxuICAgICAgICBdO1xuICAgICAgICAvLyBDYWxjdWxhdGUgbGlrZWxpaG9vZHMgZm9yIGFscGhhYmV0X2NhbmRpZGF0ZXNcbiAgICAgICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzU2ltID0gYWxwaGFiZXRDYW5kaWRhdGVzXG4gICAgICAgICAgICAubWFwKChjKSA9PiBXZWJMb2dvLmdldEFscGhhYmV0U2ltaWxhcml0eShzdGF0cy5mcmVxLCBjWzBdKSk7XG4gICAgICAgIGNvbnN0IG1heENvcyA9IE1hdGgubWF4KC4uLmFscGhhYmV0Q2FuZGlkYXRlc1NpbSk7XG4gICAgICAgIGlmIChtYXhDb3MgPiAwLjY1KVxuICAgICAgICAgICAgcmVzID0gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzFdO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSBVbmtub3duU2VxUGFsZXR0ZXMuQ29sb3I7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8qKiBTdGF0cyBvZiBzZXF1ZW5jZXMgd2l0aCBzcGVjaWZpZWQgc3BsaXR0ZXIgZnVuYywgcmV0dXJucyB7IGZyZXEsIHNhbWVMZW5ndGggfS5cbiAgICAgKiBAcGFyYW0ge0RHLkNvbHVtbn0gc2VxQ29sXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbkxlbmd0aFxuICAgICAqIEBwYXJhbSB7U3BsaXR0ZXJGdW5jfSBzcGxpdHRlclxuICAgICAqIEByZXR1cm4geyBTZXFDb2xTdGF0cyB9LCBzYW1lTGVuZ3RoOiBib29sZWFuIH0gc3RhdHMgb2YgY29sdW1uIHNlcXVlbmNlc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTdGF0cyhzZXFDb2wsIG1pbkxlbmd0aCwgc3BsaXR0ZXIpIHtcbiAgICAgICAgY29uc3QgZnJlcSA9IHt9O1xuICAgICAgICBsZXQgc2FtZUxlbmd0aCA9IHRydWU7XG4gICAgICAgIGxldCBmaXJzdExlbmd0aCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIHNlcUNvbC5jYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBtU2VxID0gc3BsaXR0ZXIoc2VxKTtcbiAgICAgICAgICAgIGlmIChmaXJzdExlbmd0aCA9PSBudWxsKVxuICAgICAgICAgICAgICAgIGZpcnN0TGVuZ3RoID0gbVNlcS5sZW5ndGg7XG4gICAgICAgICAgICBlbHNlIGlmIChtU2VxLmxlbmd0aCAhPT0gZmlyc3RMZW5ndGgpXG4gICAgICAgICAgICAgICAgc2FtZUxlbmd0aCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKG1TZXEubGVuZ3RoID4gbWluTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1TZXEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEobSBpbiBmcmVxKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyZXFbbV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBmcmVxW21dICs9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGZyZXE6IGZyZXEsIHNhbWVMZW5ndGg6IHNhbWVMZW5ndGggfTtcbiAgICB9XG4gICAgc3RhdGljIGdldEFscGhhYmV0U2ltaWxhcml0eShmcmVxLCBhbHBoYWJldCwgZ2FwU3ltYm9sID0gJy0nKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKGZyZXEpKSwgLi4uYWxwaGFiZXRdKTtcbiAgICAgICAga2V5cy5kZWxldGUoZ2FwU3ltYm9sKTtcbiAgICAgICAgY29uc3QgZnJlcUEgPSBbXTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRBID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBmcmVxQS5wdXNoKG0gaW4gZnJlcSA/IGZyZXFbbV0gOiAwKTtcbiAgICAgICAgICAgIGFscGhhYmV0QS5wdXNoKGFscGhhYmV0LmhhcyhtKSA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBUaGVyZSB3ZXJlIGEgZmV3IGlkZWFzOiBjaGktc3F1YXJlZCwgcGVhcnNvbiBjb3JyZWxhdGlvbiAodmFyaWFuY2U/KSwgc2NhbGFyIHByb2R1Y3QgKi9cbiAgICAgICAgY29uc3QgZnJlcVYgPSBuZXcgVmVjdG9yKGZyZXFBKTtcbiAgICAgICAgY29uc3QgYWxwaGFiZXRWID0gbmV3IFZlY3RvcihhbHBoYWJldEEpO1xuICAgICAgICBjb25zdCBjb3MgPSB2ZWN0b3JEb3RQcm9kdWN0KGZyZXFWLCBhbHBoYWJldFYpIC8gKHZlY3Rvckxlbmd0aChmcmVxVikgKiB2ZWN0b3JMZW5ndGgoYWxwaGFiZXRWKSk7XG4gICAgICAgIHJldHVybiBjb3M7XG4gICAgfVxuICAgIC8vIC8qKiBGaXJzdCB0cnkgdG8gZmluZCBjb2x1bW4gd2l0aCBzZW1UeXBlICdhbGlnbmVkU2VxdWVuY2UnLlxuICAgIC8vICAqIE5leHQgbG9vayBmb3IgY29sdW1uIHdpdGggZGF0YSBhbHBoYWJldCBjb3JyZXNwb25kaW5nIHRvIGFueSBvZiB0aGUga25vd24gcGFsZXR0ZXMuXG4gICAgLy8gICogQHBhcmFtIHtERy5EYXRhRnJhbWV9IGRhdGFGcmFtZVxuICAgIC8vICAqIEByZXR1cm4ge0RHLkNvbHVtbn0gVGhlIGNvbHVtbiB3ZSB3ZXJlIGxvb2tpbmcgZm9yIG9yIG51bGxcbiAgICAvLyAgKi9cbiAgICAvLyBwcml2YXRlIHBpY2tVcFNlcUNvbChkYXRhRnJhbWU6IERHLkRhdGFGcmFtZSk6IERHLkNvbHVtbiB8IG51bGwge1xuICAgIC8vICAgbGV0IHJlczogREcuQ29sdW1uIHwgbnVsbCA9IGRhdGFGcmFtZS5jb2x1bW5zLmJ5U2VtVHlwZSgnYWxpZ25lZFNlcXVlbmNlJyk7XG4gICAgLy8gICBpZiAocmVzID09IG51bGwpIHtcbiAgICAvLyAgICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUZyYW1lLmNvbHVtbnMpIHtcbiAgICAvLyAgICAgICBjb25zdCBjcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZShjb2wgYXMgREcuQ29sdW1uLCA1KTtcbiAgICAvLyAgICAgICBpZiAoY3AgIT09IG51bGwgJiYgIShjcCBpbnN0YW5jZW9mIFVua25vd25TZXFQYWxldHRlKSkge1xuICAgIC8vICAgICAgICAgcmVzID0gY29sO1xuICAgIC8vICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gICByZXR1cm4gcmVzO1xuICAgIC8vIH1cbiAgICBzdGF0aWMgcGlja1VwU2VxQ29sMihkZikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IHNlbVR5cGVDb2xMaXN0ID0gZGYuY29sdW1ucy5ieVNlbVR5cGVBbGwoREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKTtcbiAgICAgICAgbGV0IHJlc0NvbCA9IChfYSA9IHNlbVR5cGVDb2xMaXN0LmZpbmQoKGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdW5pdHMgPSBjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICAgICAgcmV0dXJuIHVuaXRzID8gdW5pdHMuaW5kZXhPZignTVNBJykgIT09IC0xIDogZmFsc2U7XG4gICAgICAgIH0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICBpZiAoIXJlc0NvbCAmJiBzZW1UeXBlQ29sTGlzdC5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmVzQ29sID0gc2VtVHlwZUNvbExpc3RbMF07XG4gICAgICAgIHJldHVybiByZXNDb2w7XG4gICAgfVxuICAgIC8qKiBTcGxpdCBzZXF1ZW5jZSBmb3Igc2luZ2xlIGNoYXJhY3RlciBtb25vbWVycywgc3F1YXJlIGJyYWNrZXRzIG11bHRpY2hhciBtb25vbWVyIG5hbWVzIG9yIGdhcCBzeW1ib2wuXG4gICAgICogQHBhcmFtIHthbnl9IHNlcSBvYmplY3Qgd2l0aCBzZXF1ZW5jZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBhcnJheSBvZiBtb25vbWVyc1xuICAgICAqL1xuICAgIHN0YXRpYyBzcGxpdHRlckFzRmFzdGEoc2VxKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHd1KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKFdlYkxvZ28ubW9ub21lclJlKSlcbiAgICAgICAgICAgIC5tYXAoKG1hKSA9PiB7XG4gICAgICAgICAgICBsZXQgbVJlcztcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtYVswXTtcbiAgICAgICAgICAgIGlmIChtLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAobSBpbiBXZWJMb2dvLmFhU3lub255bXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbVJlcyA9IFdlYkxvZ28uYWFTeW5vbnltc1ttXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1SZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhgTG9uZyBtb25vbWVyICcke219JyBoYXMgbm90IGEgc2hvcnQgc3lub255bS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtUmVzID0gbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtUmVzO1xuICAgICAgICB9KS50b0FycmF5KCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIC8qKiBHZXRzIG1ldGhvZCB0byBzcGxpdCBzZXF1ZW5jZSBieSBzZXBhcmF0b3JcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAgICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTcGxpdHRlcldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAoc2VxKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc2VxLnNwbGl0KHNlcGFyYXRvcik7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBHZXQgc3BsaXR0ZXIgbWV0aG9kIHRvIHNwbGl0IHNlcXVlbmNlcyB0byBtb25vbWVyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0c1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAgICAgKiBAcmV0dXJuIHtTcGxpdHRlckZ1bmN9XG4gICAgICovXG4gICAgc3RhdGljIGdldFNwbGl0dGVyKHVuaXRzLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgaWYgKHVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnZmFzdGEnKSlcbiAgICAgICAgICAgIHJldHVybiBXZWJMb2dvLnNwbGl0dGVyQXNGYXN0YTtcbiAgICAgICAgZWxzZSBpZiAodW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdzZXBhcmF0b3InKSlcbiAgICAgICAgICAgIHJldHVybiBXZWJMb2dvLmdldFNwbGl0dGVyV2l0aFNlcGFyYXRvcihzZXBhcmF0b3IpO1xuICAgICAgICAvKlxuICAgICAgICBlbHNlIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2hlbG0nKSlcbiAgICAgICAgICByZXR1cm4gV2ViTG9nby5zcGxpdHRlckFzSGVsbTtcbiAgICAgICAgLyoqL1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdW5pdHMgJHt1bml0c30gLmApO1xuICAgICAgICAvLyBUT0RPOiBTcGxpdHRlciBmb3IgSEVMTVxuICAgIH1cbiAgICBzdGF0aWMgZ2V0U3BsaXR0ZXJGb3JDb2x1bW4oY29sKSB7XG4gICAgICAgIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHZXQgc3BsaXR0ZXIgZm9yIHNlbVR5cGUgXCIke0RHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRX1cIiBvbmx5LmApO1xuICAgICAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IGNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpO1xuICAgICAgICByZXR1cm4gV2ViTG9nby5nZXRTcGxpdHRlcih1bml0cywgc2VwYXJhdG9yKTtcbiAgICB9XG59XG5XZWJMb2dvLnJlc2lkdWVzU2V0ID0gJ251Y2xlb3RpZGVzJztcbldlYkxvZ28udmlld2VyQ291bnQgPSAtMTtcbldlYkxvZ28ubW9ub21lclJlID0gL1xcWyhcXHcrKVxcXXwoXFx3KXwoLSkvZztcbi8qKiBPbmx5IHNvbWUgb2YgdGhlIHN5bm9ueW1zLiBUaGVzZSB3ZXJlIG9idGFpbmVkIGZyb20gdGhlIGNsdXN0ZXJlZCBvbGlnb3BlcHRpZGUgZGF0YXNldC4gKi9cbldlYkxvZ28uYWFTeW5vbnltcyA9IHtcbiAgICAnW01lTmxlXSc6ICdMJyxcbiAgICAnW01lQV0nOiAnQScsXG4gICAgJ1tNZUddJzogJ0cnLFxuICAgICdbTWVGXSc6ICdGJyxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkMlZpTFd4dloyOHVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKM1pXSXRiRzluYnk1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkRRU3hQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNTMEZCU3l4RlFVRkZMRTFCUVUwc2FVSkJRV2xDTEVOQlFVTTdRVUZGZEVNc1QwRkJUeXhGUVVGRkxFMUJRVTBzU1VGQlNTeERRVUZETzBGQlEzQkNMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzVFVGQlRTeERRVUZETzBGQlJUZENMRTlCUVU4c1JVRkJReXhOUVVGTkxFVkJRVU1zVFVGQlRTeHBSRUZCYVVRc1EwRkJRenRCUVVOMlJTeFBRVUZQTEVWQlFVTXNXVUZCV1N4RlFVRkZMR2RDUVVGblFpeEZRVUZETEUxQlFVMHNhVVJCUVdsRUxFTkJRVU03UVVGREwwWXNUMEZCVHl4RlFVRkRMRlZCUVZVc1JVRkJSU3hyUWtGQmEwSXNSVUZCUXl4TlFVRk5MR1ZCUVdVc1EwRkJRenRCUVVNM1JDeFBRVUZQTEVWQlFVTXNWMEZCVnl4RlFVRkZMRzFDUVVGdFFpeEZRVUZETEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRGFFVXNUMEZCVHl4RlFVRnZRaXhyUWtGQmEwSXNSVUZCUXl4TlFVRk5MRmxCUVZrc1EwRkJRenRCUVc5Q2FrVXNhVUpCUVdsQ0xFTkJRVU1zVTBGQlV5eERRVUZETEdsQ1FVRnBRaXhIUVVGSExGVkJRVk1zUzBGQmFVSTdTVUZEZUVVc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03U1VGRE1VTXNUMEZCVHl4SlFVRkpMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRek5GTEVOQlFVTXNRMEZCUXp0QlFVVkdMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZGQlFWRXNSMEZCUnl4VlFVRlRMRU5CUVZNc1JVRkJSU3hEUVVGVE8wbEJRM2hFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRGFFWXNRMEZCUXl4RFFVRkRPMEZCUlVZc1RVRkJUU3hQUVVGUExHMUNRVUZ0UWp0SlFWTTVRanRSUVVORkxFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTJZc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zUTBGQlF6dERRVU5HTzBGQlJVUXNUVUZCVFN4UFFVRlBMRmxCUVZrN1NVRkxka0k3TzA5QlJVYzdTVUZEU0N4WlFVRlpMRWxCUVZrN1VVRkRkRUlzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRha0lzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRaaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVTndRaXhEUVVGRE8wTkJRMFk3UVVGRlJDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRVZCUVVVc1EwRkJReXhSUVVGUk8wbEJkVVIwUXp0UlFVTkZMRXRCUVVzc1JVRkJSU3hEUVVGRE8xRkJjRVJHTEdGQlFWRXNSMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFFpeG5Ra0ZCVnl4SFFVRlpMRXRCUVVzc1EwRkJRenRSUVVWeVF5dzBSa0ZCTkVZN1VVRkRiRVlzVDBGQlJTeEhRVUZ6UWl4SlFVRkpMRU5CUVVNN1VVRlJMMElzWlVGQlZTeEhRVUZYTEVWQlFVVXNRMEZCUXp0UlFVVjRRaXhYUVVGTkxFZEJRVFpDTEVsQlFVa3NRMEZCUXp0UlFVTjRReXhoUVVGUkxFZEJRWGRDTEVsQlFVa3NRMEZCUXp0UlFVTTNReXh0UTBGQmJVTTdVVUZETTBJc1kwRkJVeXhIUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZGTDBJc1pVRkJWU3hIUVVGWExFTkJRVU1zUTBGQlF6dFJRVU4yUWl4aFFVRlJMRWRCUVZjc1EwRkJReXhEUVVGRE8xRkJhMEp5UWl4clFrRkJZU3hIUVVGaExFVkJRVVVzUTBGQlF6dFJRVVUzUWl4clFrRkJZU3hIUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJUTkNMR2RDUVVGWExFZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZQZWtJc1lVRkJVU3hIUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZMY0VNc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRPMUZCUTNCRExFOUJRVThzUTBGQlF5eFhRVUZYTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlhwQ0xFbEJRVWtzUTBGQlF5eFpRVUZaTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUlRGQ0xFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSVUZCUlN4RlFVRkZMRU5CUVVFN09FUkJRMjVDTEVOQlFVTXNRMEZCUXp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFVkJRVVVzUTBGQlFUdG5SVUZEWVN4RFFVRkRMRU5CUVVNN1VVRkRNVVFzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGZEJRVmNzUlVGQlJTeEhRVUZITEVOQlFVRTdaMFZCUTFrc1EwRkJReXhEUVVGRE8xRkJSVEZFTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMSFZDUVVGMVFpeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNaRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEc5Q1FVRnZRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJXeEZMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHMUNRVUZ0UWl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8xRkJRMmhGTEVsQlFVa3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVVUxUkN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVGRETEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEZGQlFWRXNSVUZEYUVVc1JVRkJReXhQUVVGUExFVkJRVVVzUTBGQlF5eExRVUZMTEVWQlFVVXNVVUZCVVN4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXh4UWtGQmNVSXNSVUZCUlN4UlFVRlJMRVZCUTNCRkxFVkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRkZCUVZFc1JVRkJSU3hQUVVGUExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZETVVRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zYjBKQlFXOUNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRGJrVXNRMEZCUXp0SlFYSkRSQ3d3UkVGQk1FUTdTVUZETVVRc1NVRkJXU3hOUVVGTk8xRkJRMmhDTEU5QlFVOHNTVUZCU1N4RFFVRkRMR0ZCUVdFc1NVRkJTU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGFFY3NRMEZCUXp0SlFXOURZU3hKUVVGSk96dFpRVU5vUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3WjBKQlEzQkNMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1EwRkJRenRuUWtGRGFFUXNUMEZCVHp0aFFVTlNPMWxCUlVRc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdXVUZEZUVJc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eHhRMEZCY1VNc1EwRkJRenRaUVVWeVJDeEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZEY0VNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenRaUVVWd1F5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU14UWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRPMWxCUldwRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRmFFUXNOa05CUVRaRE8xbEJRemRETEhsRFFVRjVRenRaUVVONlF5d3dRMEZCTUVNN1dVRkZNVU1zVFVGQlRTeFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRlhMRVZCUVhWRUxFVkJRVVU3WjBKQlEzUkdMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdaMEpCUTI1RUxFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlJYUkRMRWxCUVVrc1VVRkJVU3hMUVVGTExFdEJRVXNzUTBGQlF6dHZRa0ZEY2tJc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1owSkJSVFZDTEUxQlFVMHNUMEZCVHl4SFFVRjFRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNN2NVSkJRek5FTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpORUxFbEJRVWtzVDBGQlR5eExRVUZMTEZOQlFWTTdiMEpCUTNaQ0xFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVVUxUWl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFrUXNRMEZCUXl4RFFVRkRPMWxCUjBZc2NVZEJRWEZITzFsQlEzSkhMRTlCUVU4N1dVRkZVQ3hKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGaExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNWMEZCVnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQllTeEZRVUZGTEVWQlFVVTdaMEpCUTJ4SExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFR0dlFrRkRaQ3hQUVVGUE8yZENRVVZVTEUxQlFVMHNTVUZCU1N4SFFVRkhMRU5CUVdVc1EwRkJRenRuUWtGRE4wSXNUVUZCVFN4RFFVRkRMRWxCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVVY0UlN4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4SlFVRkpMRU5CUVVNc1VVRkJVU3hKUVVGSkxFOUJRVThzUlVGQlJUdHZRa0ZETjBRc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZGTzNkQ1FVTXZReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dDNRa0ZEYmtNc1RVRkJUU3hKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRla1VzVDBGQlR5eEpRVUZKTEV0QlFVc3NUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenR2UWtGRE4wUXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU03YVVKQlF6bENPM0ZDUVVGTk8yOUNRVU5NTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03YVVKQlEyNUNPMWxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVVZLTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFXRXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRmhMRVZCUVVVc1JVRkJSVHRuUWtGRGJFY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4RFFVRkRPMjlDUVVNdlFpeFBRVUZQTzJkQ1FVVlVMRTFCUVUwc1NVRkJTU3hIUVVGSExFTkJRV1VzUTBGQlF6dG5Ra0ZETjBJc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNSMEZCUnl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVVjRSU3gxUkVGQmRVUTdaMEpCUTNaRUxFbEJRVWtzU1VGQlNTeERRVUZETEZOQlFWTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NUMEZCVHl4RlFVRkZPMjlDUVVNM1JDeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0M1FrRkRja01zVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdkMEpCUTI1RExFMUJRVTBzU1VGQlNTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN2QwSkJRM3BGTEU5QlFVOHNTVUZCU1N4TFFVRkxMRTlCUVU4c1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03YjBKQlF6ZEVMRU5CUVVNc1EwRkJReXhEUVVGRE8ybENRVU5LTzFsQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVWS0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVTNSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRE5VSXNNa05CUVRKRE8xbEJSVE5ETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGNFSXNRMEZCUXp0TFFVRkJPMGxCUlU4c2FVSkJRV2xDTEVOQlFVTXNTVUZCVXp0UlFVTnFReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUld4Q0xHbEVRVUZwUkR0UlFVTnFSQ3h4UmtGQmNVWTdVVUZEY2tZc2FVWkJRV2xHTzBsQlEyNUdMRU5CUVVNN1NVRkZSRHRQUVVOSE8wbEJRMHNzV1VGQldUdFJRVU5zUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhUUVVGVExFVkJRVVU3V1VGRGJFSXNTVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUlVGQlJUdG5Ra0ZEZGtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dG5Ra0ZEY0VRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdZVUZEYWtVN1dVRkRSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdaMEpCUTJZc1RVRkJUU3hMUVVGTExFZEJRVmNzU1VGQlNTeERRVUZETEUxQlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0blFrRkRla1FzVFVGQlRTeFRRVUZUTEVkQlFWY3NTVUZCU1N4RFFVRkRMRTFCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdaMEpCUXpORUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdaMEpCUlhSRUxFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0aFFVTTVRenRwUWtGQlRUdG5Ra0ZEVEN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF6dG5Ra0ZEY2tJc1NVRkJTU3hEUVVGRExHRkJRV0VzUjBGQlJ5eEZRVUZGTEVOQlFVTTdaMEpCUTNoQ0xFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM2hDTEVsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzUkNMRWxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETzJGQlEyaENPMU5CUTBZN1VVRkRSQ3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdTVUZEYUVJc1EwRkJRenRKUVVWUExHVkJRV1U3VVVGRGNrSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTk8xbEJRMlFzVDBGQlR6dFJRVVZVTEVsQlFVa3NWVUZCT0VJc1EwRkJRenRSUVVOdVF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4bFFVRmxMRVZCUVVVN1dVRkRlRUlzVFVGQlRTeFBRVUZQTEVkQlFXVXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zYTBKQlFXdENMRVZCUVVVc1EwRkJRenRaUVVOMlJTeFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGRE4wSXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTXZSanRoUVVGTk8xbEJRMHdzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRE8xTkJRM0pETzFGQlEwUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1ZVRkJWU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVTnNSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVY2UkN3d1JFRkJNRVE3VVVGRE1VUXNUVUZCVFN4blFrRkJaMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRVU1zUTBGQlF6dFJRVU0zUkN4clJFRkJhMFE3VVVGRGJFUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjZSaXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUlRWRUxFbEJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVsQlFVa3NTVUZCU1N4RFFVRkRMR0ZCUVdFN1dVRkRhRVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JFTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtRc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4bFFVRmxMRWxCUVVrc1NVRkJTU3hEUVVGRExHRkJRV0U3V1VGRE5VUXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1JDeEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzWkZMRU5CUVVNN1NVRkZaU3hwUWtGQmFVSXNRMEZCUXl4UlFVRnhRanRSUVVOeVJDeDNSVUZCZDBVN1VVRkRlRVVzUzBGQlN5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzFGQlJXeERMRkZCUVZFc1VVRkJVU3hEUVVGRExFbEJRVWtzUlVGQlJUdFpRVU4yUWl4TFFVRkxMSFZDUVVGMVFqdG5Ra0ZETVVJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRiRUlzVFVGQlRUdFpRVU5TTEV0QlFVc3NiMEpCUVc5Q08yZENRVU4yUWl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRTFCUVUwN1dVRkRVaXhMUVVGTExHMUNRVUZ0UWp0blFrRkRkRUlzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeE5RVUZOTzFsQlExSXNTMEZCU3l4cFFrRkJhVUk3WjBKQlEzQkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dG5Ra0ZEY0VJc1RVRkJUVHRaUVVOU0xFdEJRVXNzWlVGQlpUdG5Ra0ZEYkVJc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRPMmRDUVVONlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhYUVVGWE8yZENRVU5rTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExGZEJRVmM3WjBKQlEyUXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZEYkVJc1RVRkJUVHRaUVVOU0xFdEJRVXNzVlVGQlZUdG5Ra0ZEWWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTnNRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eHRRa0ZCYlVJN1owSkJRM1JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEyeENMRTFCUVUwN1dVRkRVaXhMUVVGTExIRkNRVUZ4UWp0blFrRkRlRUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0WlFVTlNMRXRCUVVzc1UwRkJVenRuUWtGRFdpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yZENRVU5zUWl4TlFVRk5PMWxCUTFJc1MwRkJTeXhwUWtGQmFVSTdaMEpCUTNCQ0xFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVXNRMEZCUXp0blFrRkRka0lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGJFSXNUVUZCVFR0VFFVTlFPMGxCUTBnc1EwRkJRenRKUVVWeFFpeGxRVUZsT3pzN096dFpRVU51UXl4TlFVRk5MRmxCUVZrc1IwRkJWeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dFpRVU01UkN4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hyUTBGQmEwTXNXVUZCV1N4VlFVRlZMRU5CUVVNc1EwRkJRenRaUVVOeVJ5eFBRVUZOTEdWQlFXVXNXVUZCUnp0WlFVVjRRaXhKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTEVOQlFVTTdXVUZGY0VJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eExRVUZMTEV0QlFVc3NRMEZCUXl4RlFVRkZPMmRDUVVNM1FpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTnVSaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3YjBKQlF6ZEVMRWxCUVVrc1EwRkJReXhsUVVGbExFVkJRVVVzUTBGQlF6dHZRa0ZEZGtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzJkQ1FVTm9RaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEwdzdXVUZGUkN4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU5zUWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFTkJRVU03UzBGQlFUdEpRVVZ4UWl4TlFVRk5PenM3T3p0WlFVTXhRaXhOUVVGTkxGbEJRVmtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1dVRkRNMFFzVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4blFrRkJaMElzU1VGQlNTeERRVUZETEZGQlFWRXNhME5CUVd0RExGbEJRVmtzVlVGQlZTeERRVUZETEVOQlFVTTdXVUZEY2tjc1QwRkJUU3hOUVVGTkxGbEJRVWM3V1VGRlppeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGRGJFUXNTVUZCU1N4RFFVRkRMRWxCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU53UWl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExGTkJRVk1zUTBGQlF6dFpRVU40UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExGTkJRVk1zUTBGQlF6dFpRVU42UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hIUVVGSExGTkJRVk1zUTBGQlF6dFpRVVYwUWl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU42UWl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3g1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMUZCUTNoRkxFTkJRVU03UzBGQlFUdEpRVVZUTEdGQlFXRXNRMEZCUXl4aFFVRmhMRWRCUVVjc1IwRkJSenRSUVVONlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUk3V1VGRE5VSXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVTNSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5hTEVOQlFVTTdTVUZGVXl4VlFVRlZPMUZCUTJ4Q0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV6dFpRVU12UkN4UFFVRlBPMUZCUlZRc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETzFGQlJXaENMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRM2hETEV0QlFVc3NTVUZCU1N4SlFVRkpMRWRCUVVjc1EwRkJReXhGUVVGRkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hGUVVGRk8xbEJRemRETEUxQlFVMHNUMEZCVHl4SFFVRlhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOMFJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzV1VGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMU5CUTJ4RU8xRkJSVVFzYVVaQlFXbEdPMUZCUTJwR0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExHdENRVUZyUWl4RlFVRkZMRU5CUVVNN1VVRkRNMFFzTWtkQlFUSkhPMUZCUXpOSExHZEVRVUZuUkR0UlFVVm9SQ3hKUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNN1VVRkRha01zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkZiRUlzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4UFFVRlBMRVZCUVVVN1dVRkRka0lzU1VGQlNTeERRVUZETEVkQlFXMUNMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVVM1F5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOT0xFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RlFVRkZMRU5CUVVNN1owSkJRM3BDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJRenRoUVVOcVFqdFpRVVZFTEUxQlFVMHNTVUZCU1N4SFFVRmhMRWxCUVVrc1EwRkJReXhSUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZWtNc1MwRkJTeXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVTdaMEpCUXpkRExFMUJRVTBzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzJkQ1FVTjZReXhOUVVGTkxFTkJRVU1zUjBGQlZ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTTdaMEpCUTNwRUxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNN2IwSkJRMmhDTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxHMUNRVUZ0UWl4RlFVRkZMRU5CUVVNN1owSkJRM2hETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dGhRVU51UWp0VFFVTkdPMUZCUlVRc05FSkJRVFJDTzFGQlF6VkNMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlF6ZERMSGxEUVVGNVF6dFpRVVY2UXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRiRU1zUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVazdaMEpCUTNaRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1VVRkJVU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0VFFVTjJSVHRSUVVORUxGbEJRVms3VVVGRldpeE5RVUZOTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTTdVVUZEYkVNc1RVRkJUU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZETTBRc2JVWkJRVzFHTzFGQlJXNUdMREJDUVVFd1FqdFJRVU14UWl4TFFVRkxMRWxCUVVrc1NVRkJTU3hIUVVGSExFTkJRVU1zUlVGQlJTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU0zUXl4TlFVRk5MRWxCUVVrc1IwRkJlVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE4wVXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNN1dVRkZMME1zU1VGQlNTeERRVUZETEVkQlFWY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJRenRaUVVWb1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEYWtRc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEhRVUZITzI5Q1FVTTVRaXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXp0eFFrRkROVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhPMjlDUVVOdVF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0eFFrRkRUaXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhPMjlDUVVOdVFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPM0ZDUVVOUUxHOUNRVUZ2UWp0dlFrRkRka0lzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTmtMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzUzBGQlN5eE5RVUZOTEV0QlFVc3NTVUZCU1N4UFFVRlBMRVZCUVVVN1owSkJRek5DTEUxQlFVMHNUVUZCVFN4SFFVRjNRaXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpkRExEaENRVUU0UWp0blFrRkRPVUlzVFVGQlRTeERRVUZETEVkQlFWY3NVMEZCVXl4SFFVRkhMRTFCUVUwc1EwRkJReXhMUVVGTExFZEJRVWNzVVVGQlVTeERRVUZETzJkQ1FVVjBSQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRia1lzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0aFFVTlNPMU5CUTBZN1VVRkRSQ3haUVVGWk8wbEJRMlFzUTBGQlF6dEpRVVZFTERKRFFVRXlRenRKUVVNelF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrN08xRkJRMnhDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRaUVVOb1FpeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTXpRaXhKUVVGSkxFTkJRVU1zVDBGQlVTeERRVUZETEZOQlFWTXNSMEZCUnl4eFEwRkJjVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRXRCUVVzc1EwRkJRenRuUWtGRGVFWXNTVUZCU1N4RFFVRkRMRTlCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXp0aFFVTnNRenRwUWtGQlRUdG5Ra0ZEVEN4SlFVRkpMRU5CUVVNc1QwRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMkZCUTNSRE8xTkJRMFk3VVVGRlJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdXVUZETjBRc1QwRkJUenRSUVVWVUxFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEzWkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRVVVzVDBGQlR6dFJRVVZtTEVsQlFVa3NUVUZCVFR0WlFVTlNMRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF6dFJRVVZ3UWl4RFFVRkRMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU03VVVGRGJrSXNRMEZCUXl4RFFVRkRMRk5CUVZNc1IwRkJSeXhQUVVGUExFTkJRVU03VVVGRGRFSXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRlRVFzUTBGQlF5eERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRE8xRkJSVzVETERCRFFVRXdRenRSUVVNeFF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4aFFVRmhMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRkRVFzVDBGQlR6dFJRVVZVTERSQ1FVRTBRanRSUVVNMVFpeERRVUZETEVOQlFVTXNZMEZCWXl4RlFVRkZMRU5CUVVNN1VVRkRia0lzUTBGQlF5eERRVUZETEZOQlFWTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1VVRkRkRUlzUTBGQlF5eERRVUZETEZOQlFWTXNSMEZCUnl4UlFVRlJMRU5CUVVNN1VVRkRka0lzUTBGQlF5eERRVUZETEVsQlFVa3NSMEZCUnl4MVEwRkJkVU1zUTBGQlF6dFJRVU5xUkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGFFY3NUVUZCVFN4TlFVRk5MRWRCUVVjc1pVRkJaU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhqUVVGakxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NaVUZCWlN4RFFVRkRPMUZCUlRkSExFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZPMWxCUXpkRExFMUJRVTBzUjBGQlJ5eEhRVUZwUWl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFsQlF5OURMRU5CUVVNc1EwRkJReXhqUVVGakxFVkJRVVVzUTBGQlF6dFpRVU51UWl4RFFVRkRMRU5CUVVNc1dVRkJXU3hEUVVOYUxFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkRaaXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXpSQ3hEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzFOQlF6VkNPMUZCUTBRc0swSkJRU3RDTzFGQlJTOUNMRXRCUVVzc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTzFsQlF6ZERMRXRCUVVzc1RVRkJUU3hEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlEzcEZMRWxCUVVrc1QwRkJUeXhMUVVGTExFZEJRVWNzUlVGQlJUdHZRa0ZEYmtJc1RVRkJUU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXp0dlFrRkZlRUlzVFVGQlRTeFRRVUZUTEVkQlFVY3NkVU5CUVhWRExFTkJRVU03YjBKQlF6RkVMREJFUVVFd1JEdHZRa0ZETVVRc1RVRkJUU3h4UWtGQmNVSXNSMEZCUnl4SlFVRkpMRU5CUVVNN2IwSkJRMjVETEUxQlFVMHNjVUpCUVhGQ0xFZEJRVWNzU1VGQlNTeERRVUZETzI5Q1FVVnVReXhEUVVGRExFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTTdiMEpCUTI1Q0xFTkJRVU1zUTBGQlF5eFhRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRPMjlDUVVNMVFpeERRVUZETEVOQlFVTXNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGFFSXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN2IwSkJRM3BETEVOQlFVTXNRMEZCUXl4VFFVRlRMRWRCUVVjc1RVRkJRU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc2JVTkJRVWtzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03YjBKQlF6TkVMRU5CUVVNc1EwRkJReXhUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETzI5Q1FVTnlRaXhEUVVGRExFTkJRVU1zU1VGQlNTeEhRVUZITEZOQlFWTXNRMEZCUXp0dlFrRkRia0lzSzBOQlFTdERPMjlDUVVNdlF5eE5RVUZOTEVkQlFVY3NSMEZCWjBJc1EwRkJReXhEUVVGRExGZEJRVmNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0dlFrRkZhRVFzZFVOQlFYVkRPMjlDUVVOMlF5eDVSa0ZCZVVZN2IwSkJSWHBHTEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUTFvc1EwRkJReXhEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4eFFrRkJjVUlzUlVGRE0wUXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUTJwQ0xFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNN2FVSkJRMmhFTzJGQlEwWTdVMEZEUmp0SlFVTklMRU5CUVVNN1NVRkZUeXhSUVVGUk8xRkJRMlFzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNUdFpRVU0xUWl4UFFVRlBPMUZCUlZRc1NVRkJTU3hMUVVGTExFZEJRVmNzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRE8xRkJRM0pFTEVsQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYaEdMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJUdFpRVU5vUWl4TlFVRk5MRTFCUVUwc1IwRkJWeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4TlFVRk5MRU5CUVVNN1dVRkRka1FzVFVGQlRTeE5RVUZOTEVkQlFWY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzUzBGQlN5eERRVUZETzFsQlEzSkVMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRjRVFzUzBGQlN5eEhRVUZITEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRkRUlzVFVGQlRTeEhRVUZITEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRlRUlzU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hIUVVGSExFdEJRVXNzUTBGQlF6dFRRVU5zUkR0UlFVVkVMRTFCUVUwc1EwRkJReXhIUVVGSExFMUJRVTBzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJRenRSUVVOc1F5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRXRCUVVzc1NVRkJTU3hEUVVGRE8xRkJSWFpETEc5R1FVRnZSanRSUVVOd1JpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zVVVGQlVTeEZRVUZGTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOeVJDeE5RVUZOTEZsQlFWa3NSMEZCVnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU53UkN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUjBGQlJ5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUkxFVkJRVVVzUjBGQlJ5eFpRVUZaTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUlRkRUxEWkNRVUUyUWp0UlFVTTNRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdXVUZEYWtJc2MwTkJRWE5ETzFsQlEzUkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NSMEZCUnl4TFFVRkxMRWxCUVVrc1EwRkJRenRaUVVNM1JDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXp0WlFVTjJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1ZVRkJWU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0VFFVTm9SVHRoUVVGTk8xbEJRMHdzT0VKQlFUaENPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRE8xbEJRM1pFTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGTkJRVk1zUjBGQlJ5eG5Ra0ZCWjBJc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUlRsRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFTkJRVU03V1VGRmNFVXNjVUpCUVhGQ08xbEJRM0pDTEVsQlFVa3NZVUZCWVN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMFFpeFJRVUZSTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUlVGQlJUdG5Ra0ZEYUVNc1MwRkJTeXhMUVVGTE8yOUNRVU5TTEdGQlFXRXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRMnhDTEUxQlFVMDdaMEpCUTFJc1MwRkJTeXhSUVVGUk8yOUNRVU5ZTEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOdVJTeE5RVUZOTzJkQ1FVTlNMRXRCUVVzc1VVRkJVVHR2UWtGRFdDeGhRVUZoTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU03YjBKQlF6ZEVMRTFCUVUwN1lVRkRVRHRaUVVORUxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhaUVVGWkxFVkJRVVVzUjBGQlJ5eGhRVUZoTEVsQlFVa3NSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenRaUVVVM1JTeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFMUJRVTBzUlVGQlJUdG5Ra0ZEYmtNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRkZCUVZFc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4SlFVRkpMRU5CUVVNc1EwRkJRenRuUWtGRGNrVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eERRVUZETEZsQlFWa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRoUVVOcVJEdHBRa0ZCVFR0blFrRkRUQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1dVRkJXU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFhRVUZYTEVOQlFVTXNRMEZCUXp0aFFVTnNSVHRUUVVOR08xRkJSVVFzYVVKQlFXbENPMUZCUTJwQ0xEWkVRVUUyUkR0UlFVTTNSQ3cyUkVGQk5rUTdVVUZETjBRc05rUkJRVFpFTzFGQlF6ZEVMRFpFUVVFMlJEdFJRVU0zUkN4WFFVRlhPMUZCUTFnc01rUkJRVEpFTzFGQlF6TkVMQ3RFUVVFclJEdEpRVU5xUlN4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTkpMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQmFVSXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRMnhGTEVsQlFVa3NSMEZCUnl4SFFVRnpRaXhKUVVGSkxFTkJRVU03VVVGRGJFTXNVVUZCVVN4TlFVRk5MRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRM2hDTEV0QlFVc3NWVUZCVlN4RFFVRkRMSGRDUVVGM1FqdG5Ra0ZEZEVNc1IwRkJSeXhIUVVGSExHdENRVUZyUWl4RFFVRkRMRlZCUVZVc1EwRkJRenRuUWtGRGNFTXNUVUZCVFR0WlFVTlNMRXRCUVVzc1YwRkJWeXhEUVVGRExIZENRVUYzUWp0blFrRkRka01zUjBGQlJ5eEhRVUZITEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGQlF6dG5Ra0ZEZGtNc1RVRkJUVHRUUVVOUU8xRkJRMFFzVFVGQlRTeExRVUZMTEVkQlFXZENMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU03VVVGRmVFWXNUVUZCVFN4clFrRkJhMElzUjBGQlowTTdXVUZEZEVRc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGQlF6dFpRVU16UlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzYTBKQlFXdENMRU5CUVVNc1ZVRkJWU3hEUVVGRE8xTkJRM2hGTEVOQlFVTTdVVUZEUml4blJFRkJaMFE3VVVGRGFFUXNUVUZCVFN4eFFrRkJjVUlzUjBGQllTeHJRa0ZCYTBJN1lVRkRka1FzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlFTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8xRkJRMnhFTEVsQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrN1dVRkRaaXhIUVVGSExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMWxCUlc1RkxFZEJRVWNzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRmFrTXNUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVdsQ0xFVkJRVVVzVTBGQmFVSXNSVUZCUlN4UlFVRnpRanRSUVVNeFJTeE5RVUZOTEVsQlFVa3NSMEZCTkVJc1JVRkJSU3hEUVVGRE8xRkJRM3BETEVsQlFVa3NWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOMFFpeEpRVUZKTEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkZka0lzUzBGQlN5eE5RVUZOTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRk8xbEJRMjVETEUxQlFVMHNTVUZCU1N4SFFVRkhMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVVV6UWl4SlFVRkpMRmRCUVZjc1NVRkJTU3hKUVVGSk8yZENRVU55UWl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dHBRa0ZEZGtJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeExRVUZMTEZkQlFWYzdaMEpCUTJ4RExGVkJRVlVzUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZGY2tJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEZOQlFWTXNSVUZCUlR0blFrRkRNMElzUzBGQlN5eE5RVUZOTEVOQlFVTXNTVUZCU1N4SlFVRkpMRVZCUVVVN2IwSkJRM0JDTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU03ZDBKQlEyUXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZEWkN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJsQ1FVTmtPMkZCUTBZN1UwRkRSanRSUVVORUxFOUJRVThzUlVGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRlZCUVZVc1JVRkJSU3hWUVVGVkxFVkJRVU1zUTBGQlF6dEpRVU01UXl4RFFVRkRPMGxCUlUwc1RVRkJUU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRWxCUVd0Q0xFVkJRVVVzVVVGQmNVSXNSVUZCUlN4WlFVRnZRaXhIUVVGSE8xRkJRM0JITEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGVExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRek5GTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03VVVGRmRrSXNUVUZCVFN4TFFVRkxMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRek5DTEUxQlFVMHNVMEZCVXl4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVNdlFpeExRVUZMTEUxQlFVMHNRMEZCUXl4SlFVRkpMRWxCUVVrc1JVRkJSVHRaUVVOd1FpeExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY0VNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM3BETzFGQlEwUXNNRVpCUVRCR08xRkJRekZHTEUxQlFVMHNTMEZCU3l4SFFVRlhMRWxCUVVrc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEzaERMRTFCUVUwc1UwRkJVeXhIUVVGWExFbEJRVWtzVFVGQlRTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTJoRUxFMUJRVTBzUjBGQlJ5eEhRVUZYTEdkQ1FVRm5RaXhEUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eFpRVUZaTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlJ5eFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRU5CUVVNN1NVRkZSQ3dyUkVGQkswUTdTVUZETDBRc2VVWkJRWGxHTzBsQlEzcEdMSEZEUVVGeFF6dEpRVU55UXl4blJVRkJaMFU3U1VGRGFFVXNUVUZCVFR0SlFVTk9MRzlGUVVGdlJUdEpRVU53UlN4blJrRkJaMFk3U1VGRGFFWXNkVUpCUVhWQ08wbEJRM1pDTERaRFFVRTJRenRKUVVNM1F5d3JSRUZCSzBRN1NVRkRMMFFzYVVWQlFXbEZPMGxCUTJwRkxIRkNRVUZ4UWp0SlFVTnlRaXhwUWtGQmFVSTdTVUZEYWtJc1ZVRkJWVHRKUVVOV0xGRkJRVkU3U1VGRFVpeE5RVUZOTzBsQlEwNHNaMEpCUVdkQ08wbEJRMmhDTEVsQlFVazdTVUZGUnl4TlFVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRV2RDT3p0UlFVTXhReXhOUVVGTkxHTkJRV01zUjBGQlJ5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMUZCUTNwRkxFbEJRVWtzVFVGQlRTeEhRVUZ4UWl4TlFVRkJMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlR0WlFVTjZSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdXVUZEZUVNc1QwRkJUeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOeVJDeERRVUZETEVOQlFVTXNiVU5CUVVrc1NVRkJTU3hEUVVGRE8xRkJRMWdzU1VGQlNTeERRVUZETEUxQlFVMHNTVUZCU1N4alFVRmpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU03V1VGRGRFTXNUVUZCVFN4SFFVRkhMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU0zUWl4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBsQlNVUTdPenRQUVVkSE8wbEJRMGtzVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRlJPMUZCUTNCRExFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCYlVJc1IwRkJSeXhEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03WVVGRGJrWXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJiMElzUlVGQlJTeEZRVUZGTzFsQlF6VkNMRWxCUVVrc1NVRkJXU3hEUVVGRE8xbEJRMnBDTEUxQlFVMHNRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU40UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzJkQ1FVTm9RaXhKUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNWVUZCVlN4RlFVRkZPMjlDUVVNelFpeEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZET1VJN2NVSkJRVTA3YjBKQlEwd3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenR2UWtGRFZpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMR2xDUVVGcFFpeERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03YVVKQlF5OUVPMkZCUTBZN2FVSkJRVTA3WjBKQlEwd3NTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRoUVVOV08xbEJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTTdVVUZEWkN4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVVZtTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenRKUVVWRU96czdUMEZIUnp0SlFVTkpMRTFCUVUwc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4VFFVRnBRanRSUVVOMFJDeFBRVUZQTEVOQlFVTXNSMEZCVnl4RlFVRkZMRVZCUVVVN1dVRkRja0lzVDBGQlR5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJRemxDTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBrc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZoTEVWQlFVVXNVMEZCYVVJN1VVRkRlRVFzU1VGQlNTeExRVUZMTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRVThzUTBGQlF6dFpRVU42UXl4UFFVRlBMRTlCUVU4c1EwRkJReXhsUVVGbExFTkJRVU03WVVGRE5VSXNTVUZCU1N4TFFVRkxMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEZkQlFWY3NRMEZCUXp0WlFVTnNSQ3hQUVVGUExFOUJRVThzUTBGQlF5eDNRa0ZCZDBJc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU55UkRzN08xbEJSMGs3TzFsQlJVWXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh2UWtGQmIwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWcVJDd3dRa0ZCTUVJN1NVRkROVUlzUTBGQlF6dEpRVVZOTEUxQlFVMHNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eEhRVUZqTzFGQlF5OURMRWxCUVVrc1IwRkJSeXhEUVVGRExFOUJRVThzUzBGQlN5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFN1dVRkRNVU1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl3MlFrRkJOa0lzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4aFFVRmhMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJSV3hHTEUxQlFVMHNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFF5eE5RVUZOTEZOQlFWTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlF6RkRMRTlCUVU4c1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVWQlFVVXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkRMME1zUTBGQlF6czdRVUYyZEVKaExHMUNRVUZYTEVkQlFVY3NZVUZCWVN4RFFVRkRPMEZCUXpOQ0xHMUNRVUZYTEVkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRnpjRUo2UWl4cFFrRkJVeXhIUVVGSExIRkNRVUZ4UWl4RFFVRkRPMEZCYTBWcVJDdzRSa0ZCT0VZN1FVRkRMMFVzYTBKQlFWVXNSMEZCSzBJN1NVRkRkRVFzVTBGQlV5eEZRVUZGTEVkQlFVYzdTVUZEWkN4UFFVRlBMRVZCUVVVc1IwRkJSenRKUVVOYUxFOUJRVThzUlVGQlJTeEhRVUZITzBsQlExb3NUMEZCVHl4RlFVRkZMRWRCUVVjN1EwRkRZaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nWjNKdmF5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaM0p2YXljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJQ29nWVhNZ1JFY2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMMlJuSnp0Y2JseHVhVzF3YjNKMElIZDFJR1p5YjIwZ0ozZDFKenRjYm1sdGNHOXlkQ0FxSUdGeklISjRhbk1nWm5KdmJTQW5jbmhxY3ljN1hHNWNibWx0Y0c5eWRDQjdWbVZqZEc5eWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlM1psWTNSdmNreGxibWQwYUN3Z2RtVmpkRzl5Ukc5MFVISnZaSFZqZEgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRtVmpkRzl5TFc5d1pYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdEJiV2x1YjJGamFXUnpMQ0JCYldsdWIyRmphV1J6VUdGc1pYUjBaWE45SUdaeWIyMGdKeTR1TDJGdGFXNXZZV05wWkhNbk8xeHVhVzF3YjNKMElIdE9kV05zWlc5MGFXUmxjeXdnVG5WamJHVnZkR2xrWlhOUVlXeGxkSFJsYzMwZ1puSnZiU0FuTGk0dmJuVmpiR1Z2ZEdsa1pYTW5PMXh1YVcxd2IzSjBJSHRWYm10dWIzZHVVMlZ4VUdGc1pYUjBaU3dnVlc1cmJtOTNibE5sY1ZCaGJHVjBkR1Z6ZlNCbWNtOXRJQ2N1TGk5MWJtdHViM2R1Snp0Y2JtbHRjRzl5ZENCN1UyVnhVR0ZzWlhSMFpYMGdabkp2YlNBbkxpNHZjMlZ4TFhCaGJHVjBkR1Z6Snp0Y2JtbHRjRzl5ZENCN1UzVmljMk55YVhCMGFXOXVmU0JtY205dElDZHllR3B6Snp0Y2JseHVaR1ZqYkdGeVpTQnRiMlIxYkdVZ0oyUmhkR0ZuY205ckxXRndhUzl6Y21NdlozSnBaQ2NnZTF4dUlDQnBiblJsY21aaFkyVWdVbVZqZENCN1hHNGdJQ0FnWTI5dWRHRnBibk1vZURvZ2JuVnRZbVZ5TENCNU9pQnVkVzFpWlhJcE9pQmliMjlzWldGdU8xeHVJQ0I5WEc1OVhHNWNibVJsWTJ4aGNtVWdaMnh2WW1Gc0lIdGNiaUFnYVc1MFpYSm1ZV05sSUVoVVRVeERZVzUyWVhORmJHVnRaVzUwSUh0Y2JpQWdJQ0JuWlhSRGRYSnpiM0pRYjNOcGRHbHZiaWhsZG1WdWREb2dUVzkxYzJWRmRtVnVkQ2s2SUVSSExsQnZhVzUwTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCMGVYQmxJRTF2Ym05dFpYSkdjbVZ4Y3lBOUlIc2dXMjA2SUhOMGNtbHVaMTA2SUc1MWJXSmxjaUI5TzF4dVpYaHdiM0owSUhSNWNHVWdVMlZ4UTI5c1UzUmhkSE1nUFNCN0lHWnlaWEU2SUUxdmJtOXRaWEpHY21WeGN5d2djMkZ0WlV4bGJtZDBhRG9nWW05dmJHVmhiaUI5WEc1bGVIQnZjblFnZEhsd1pTQlRjR3hwZEhSbGNrWjFibU1nUFNBb2MyVnhPaUJ6ZEhKcGJtY3BJRDArSUhOMGNtbHVaMXRkTzF4dVhHNUlWRTFNUTJGdWRtRnpSV3hsYldWdWRDNXdjbTkwYjNSNWNHVXVaMlYwUTNWeWMyOXlVRzl6YVhScGIyNGdQU0JtZFc1amRHbHZiaWhsZG1WdWREb2dUVzkxYzJWRmRtVnVkQ2s2SUVSSExsQnZhVzUwSUh0Y2JpQWdZMjl1YzNRZ2NtVmpkQ0E5SUhSb2FYTXVaMlYwUW05MWJtUnBibWREYkdsbGJuUlNaV04wS0NrN1hHNGdJSEpsZEhWeWJpQnVaWGNnUkVjdVVHOXBiblFvWlhabGJuUXVZMnhwWlc1MFdDQXRJSEpsWTNRdWJHVm1kQ3dnWlhabGJuUXVZMnhwWlc1MFdTQXRJSEpsWTNRdWRHOXdLVHRjYm4wN1hHNWNia1JITGxKbFkzUXVjSEp2ZEc5MGVYQmxMbU52Ym5SaGFXNXpJRDBnWm5WdVkzUnBiMjRvZURvZ2JuVnRZbVZ5TENCNU9pQnVkVzFpWlhJcE9pQmliMjlzWldGdUlIdGNiaUFnY21WMGRYSnVJSFJvYVhNdWJHVm1kQ0E4UFNCNElDWW1JSGdnUEQwZ2RHaHBjeTV5YVdkb2RDQW1KaUIwYUdsekxuUnZjQ0E4UFNCNUlDWW1JSGtnUEQwZ2RHaHBjeTVpYjNSMGIyMDdYRzU5TzF4dVhHNWxlSEJ2Y25RZ1kyeGhjM01nVUc5emFYUnBiMjVOYjI1dmJXVnlTVzVtYnlCN1hHNGdJQzhxS2lCVFpYRjFaVzVqWlhNZ1kyOTFiblFnZDJsMGFDQnRiMjV2YldWeUlHbHVJSEJ2YzJsMGFXOXVYRzRnSUNBcUwxeHVJQ0JqYjNWdWREb2diblZ0WW1WeU8xeHVYRzRnSUM4cUtpQlNaVzFsYldKbGNpQnpZM0psWlc0Z1kyOXZjbVJ6SUhKbFkzUmNiaUFnSUNvdlhHNGdJR0p2ZFc1a2N6b2dSRWN1VW1WamREdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQjBhR2x6TG1OdmRXNTBJRDBnTUR0Y2JpQWdJQ0IwYUdsekxtSnZkVzVrY3lBOUlHNWxkeUJFUnk1U1pXTjBLREFzSURBc0lEQXNJREFwTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJRYjNOcGRHbHZia2x1Wm04Z2UxeHVJQ0J3ZFdKc2FXTWdjbVZoWkc5dWJIa2dibUZ0WlRvZ2MzUnlhVzVuTzF4dUlDQm1jbVZ4T2lCN0lGdHRPaUJ6ZEhKcGJtZGRPaUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUgwN1hHNGdJSEp2ZDBOdmRXNTBPaUJ1ZFcxaVpYSTdYRzVjYmlBZ0x5b3FJR1p5WlhFZ1BTQjdmU3dnY205M1EyOTFiblFnUFNBd1hHNGdJQ0FxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J1WVcxbElFNWhiV1VnYjJZZ2NHOXphWFJwYjI0Z0tDY3hNVEZCSnl3Z0p6RXhNUzR4Snl3Z1pYUmpLVnh1SUNBZ0tpOWNiaUFnWTI5dWMzUnlkV04wYjNJb2JtRnRaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdkR2hwY3k1dVlXMWxJRDBnYm1GdFpUdGNiaUFnSUNCMGFHbHpMbVp5WlhFZ1BTQjdmVHRjYmlBZ0lDQjBhR2x6TG5KdmQwTnZkVzUwSUQwZ01EdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1YyVmlURzluYnlCbGVIUmxibVJ6SUVSSExrcHpWbWxsZDJWeUlIdGNiaUFnY0hWaWJHbGpJSE4wWVhScFl5QnlaWE5wWkhWbGMxTmxkQ0E5SUNkdWRXTnNaVzkwYVdSbGN5YzdYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJSFpwWlhkbGNrTnZkVzUwT2lCdWRXMWlaWElnUFNBdE1UdGNibHh1SUNCd2NtbDJZWFJsSUhacFpYZGxja2xrT2lCdWRXMWlaWElnUFNBdE1UdGNiaUFnY0hKcGRtRjBaU0JwYm1sMGFXRnNhWHBsWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dVhHNGdJQzh2SUhCeWFYWmhkR1VnY21WaFpHOXViSGtnWTI5c2IzSlRZMmhsYldVNklFTnZiRzl5VTJOb1pXMWxJRDBnUTI5c2IzSlRZMmhsYldWelcwNTFZMnhsYjNScFpHVnpWMlZpVEc5bmJ5NXlaWE5wWkhWbGMxTmxkRjA3WEc0Z0lIQnliM1JsWTNSbFpDQmpjRG9nVTJWeFVHRnNaWFIwWlNCOElHNTFiR3dnUFNCdWRXeHNPMXh1WEc0Z0lIQnlhWFpoZEdVZ2FHOXpkRDg2SUVoVVRVeEVhWFpGYkdWdFpXNTBPMXh1SUNCd2NtbDJZWFJsSUcxelowaHZjM1EvT2lCSVZFMU1SV3hsYldWdWREdGNiaUFnY0hKcGRtRjBaU0JqWVc1MllYTS9PaUJJVkUxTVEyRnVkbUZ6Uld4bGJXVnVkRHRjYmlBZ2NISnBkbUYwWlNCemJHbGtaWEkvT2lCRVJ5NVNZVzVuWlZOc2FXUmxjanRjYmlBZ2NISnBkbUYwWlNCMFpYaDBRbUZ6Wld4cGJtVTZJRU5oYm5aaGMxUmxlSFJDWVhObGJHbHVaVHRjYmx4dUlDQndjbWwyWVhSbElHRjRhWE5JWldsbmFIUTZJRzUxYldKbGNpQTlJREV5TzF4dVhHNGdJSEJ5YVhaaGRHVWdjMlZ4UTI5c09pQkVSeTVEYjJ4MWJXNDhjM1J5YVc1blBpQjhJRzUxYkd3Z1BTQnVkV3hzTzF4dUlDQndjbWwyWVhSbElITndiR2wwZEdWeU9pQlRjR3hwZEhSbGNrWjFibU1nZkNCdWRXeHNJRDBnYm5Wc2JEdGNiaUFnTHk4Z2NISnBkbUYwWlNCdFlYaE1aVzVuZEdnNklHNTFiV0psY2lBOUlERXdNRHRjYmlBZ2NISnBkbUYwWlNCd2IzTnBkR2x2Ym5NNklGQnZjMmwwYVc5dVNXNW1iMXRkSUQwZ1cxMDdYRzVjYmlBZ2NISnBkbUYwWlNCeWIzZHpUV0Z6YTJWa09pQnVkVzFpWlhJZ1BTQXdPMXh1SUNCd2NtbDJZWFJsSUhKdmQzTk9kV3hzT2lCdWRXMWlaWElnUFNBd08xeHVYRzRnSUM4dklGWnBaWGRsY2lkeklIQnliM0JsY25ScFpYTWdLR3hwYTJWc2VTQjBhR1Y1SUhOb2IzVnNaQ0JpWlNCd2RXSnNhV01nYzI4Z2RHaGhkQ0IwYUdWNUlHTmhiaUJpWlNCelpYUWdiM1YwYzJsa1pTbGNiaUFnY0hKcGRtRjBaU0JmY0c5emFYUnBiMjVYYVdSMGFEb2diblZ0WW1WeU8xeHVJQ0J3ZFdKc2FXTWdjRzl6YVhScGIyNVhhV1IwYURvZ2JuVnRZbVZ5TzF4dUlDQndkV0pzYVdNZ2JXbHVTR1ZwWjJoME9pQnVkVzFpWlhJN1hHNGdJSEIxWW14cFl5QnRZWGhJWldsbmFIUTZJRzUxYldKbGNqdGNiaUFnY0hWaWJHbGpJR052Ym5OcFpHVnlUblZzYkZObGNYVmxibU5sY3pvZ1ltOXZiR1ZoYmp0Y2JpQWdjSFZpYkdsaklITmxjWFZsYm1ObFEyOXNkVzF1VG1GdFpUb2djM1J5YVc1bklId2diblZzYkR0Y2JpQWdjSFZpYkdsaklITjBZWEowVUc5emFYUnBiMjVPWVcxbE9pQnpkSEpwYm1jZ2ZDQnVkV3hzTzF4dUlDQndkV0pzYVdNZ1pXNWtVRzl6YVhScGIyNU9ZVzFsT2lCemRISnBibWNnZkNCdWRXeHNPMXh1SUNCd2RXSnNhV01nWm1sNFYybGtkR2c2SUdKdmIyeGxZVzQ3WEc0Z0lIQjFZbXhwWXlCMlpYSjBhV05oYkVGc2FXZHViV1Z1ZERvZ2MzUnlhVzVuSUh3Z2JuVnNiRHRjYmlBZ2NIVmliR2xqSUdodmNtbDZiMjUwWVd4QmJHbG5ibTFsYm5RNklITjBjbWx1WnlCOElHNTFiR3c3WEc0Z0lIQjFZbXhwWXlCbWFYUkJjbVZoT2lCaWIyOXNaV0Z1TzF4dUlDQndkV0pzYVdNZ2MyaHlhVzVyUlcxd2RIbFVZV2xzT2lCaWIyOXNaV0Z1TzF4dUlDQndkV0pzYVdNZ2MydHBjRVZ0Y0hSNVVHOXphWFJwYjI1ek9pQmliMjlzWldGdU8xeHVYRzRnSUhCeWFYWmhkR1VnY0c5emFYUnBiMjVPWVcxbGN6b2djM1J5YVc1blcxMGdQU0JiWFR0Y2JseHVJQ0J3Y21sMllYUmxJSE4wWVhKMFVHOXphWFJwYjI0NklHNTFiV0psY2lBOUlDMHhPMXh1WEc0Z0lIQnlhWFpoZEdVZ1pXNWtVRzl6YVhScGIyNDZJRzUxYldKbGNpQTlJQzB4TzF4dVhHNGdJQzhxS2lCR2IzSWdjM1JoY25SUWIzTnBkR2x2YmlCbGNYVmhiSE1nZEc4Z1pXNWtVRzl6YVhScGIyNGdUR1Z1WjNSb0lHbHpJREVnS2k5Y2JpQWdjSEpwZG1GMFpTQm5aWFFnVEdWdVozUm9LQ2s2SUc1MWJXSmxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJpQThQU0IwYUdsekxtVnVaRkJ2YzJsMGFXOXVJRDhnZEdocGN5NWxibVJRYjNOcGRHbHZiaUF0SUhSb2FYTXVjM1JoY25SUWIzTnBkR2x2YmlBcklERWdPaUF3TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCMmFXVjNVM1ZpY3pvZ1UzVmljMk55YVhCMGFXOXVXMTBnUFNCYlhUdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpZ3BJSHRjYmlBZ0lDQnpkWEJsY2lncE8xeHVYRzRnSUNBZ2RHaHBjeTUyYVdWM1pYSkpaQ0E5SUZkbFlreHZaMjh1ZG1sbGQyVnlRMjkxYm5RN1hHNGdJQ0FnVjJWaVRHOW5ieTUyYVdWM1pYSkRiM1Z1ZENBclBTQXhPMXh1WEc0Z0lDQWdkR2hwY3k1MFpYaDBRbUZ6Wld4cGJtVWdQU0FuZEc5d0p6dGNibHh1SUNBZ0lIUm9hWE11WDNCdmMybDBhVzl1VjJsa2RHZ2dQU0IwYUdsekxuQnZjMmwwYVc5dVYybGtkR2dnUFNCMGFHbHpMbVpzYjJGMEtDZHdiM05wZEdsdmJsZHBaSFJvSnl3Z01UWXZLaXhjYmlBZ0lDQWdJSHRsWkdsMGIzSTZJQ2R6Ykdsa1pYSW5MQ0J0YVc0NklEUXNJRzFoZURvZ05qUXNJSEJ2YzNSbWFYZzZJQ2R3ZUNkOUtpOHBPMXh1SUNBZ0lIUm9hWE11YldsdVNHVnBaMmgwSUQwZ2RHaHBjeTVtYkc5aGRDZ25iV2x1U0dWcFoyaDBKeXdnTlRBdktpeGNiaUFnSUNBZ0lIdGxaR2wwYjNJNklDZHpiR2xrWlhJbkxDQnRhVzQ2SURJMUxDQnRZWGc2SURJMU1Dd2djRzl6ZEdacGVEb2dKM0I0SjMwcUx5azdYRzRnSUNBZ2RHaHBjeTV0WVhoSVpXbG5hSFFnUFNCMGFHbHpMbVpzYjJGMEtDZHRZWGhJWldsbmFIUW5MQ0F4TURBdktpeGNiaUFnSUNBZ0lIdGxaR2wwYjNJNklDZHpiR2xrWlhJbkxDQnRhVzQ2SURJMUxDQnRZWGc2SURVd01Dd2djRzl6ZEdacGVEb2dKM0I0SjMwcUx5azdYRzVjYmlBZ0lDQjBhR2x6TG1OdmJuTnBaR1Z5VG5Wc2JGTmxjWFZsYm1ObGN5QTlJSFJvYVhNdVltOXZiQ2duWTI5dWMybGtaWEpPZFd4c1UyVnhkV1Z1WTJWekp5d2dabUZzYzJVcE8xeHVJQ0FnSUhSb2FYTXVjMlZ4ZFdWdVkyVkRiMngxYlc1T1lXMWxJRDBnZEdocGN5NXpkSEpwYm1jb0ozTmxjWFZsYm1ObFEyOXNkVzF1VG1GdFpTY3NJRzUxYkd3cE8xeHVYRzRnSUNBZ2RHaHBjeTV6ZEdGeWRGQnZjMmwwYVc5dVRtRnRaU0E5SUhSb2FYTXVjM1J5YVc1bktDZHpkR0Z5ZEZCdmMybDBhVzl1VG1GdFpTY3NJRzUxYkd3cE8xeHVJQ0FnSUhSb2FYTXVaVzVrVUc5emFYUnBiMjVPWVcxbElEMGdkR2hwY3k1emRISnBibWNvSjJWdVpGQnZjMmwwYVc5dVRtRnRaU2NzSUc1MWJHd3BPMXh1WEc0Z0lDQWdkR2hwY3k1bWFYaFhhV1IwYUNBOUlIUm9hWE11WW05dmJDZ25abWw0VjJsa2RHZ25MQ0JtWVd4elpTazdYRzVjYmlBZ0lDQjBhR2x6TG5abGNuUnBZMkZzUVd4cFoyNXRaVzUwSUQwZ2RHaHBjeTV6ZEhKcGJtY29KM1psY25ScFkyRnNRV3hwWjI1dFpXNTBKeXdnSjIxcFpHUnNaU2NzWEc0Z0lDQWdJQ0I3WTJodmFXTmxjem9nV3lkMGIzQW5MQ0FuYldsa1pHeGxKeXdnSjJKdmRIUnZiU2RkZlNrN1hHNGdJQ0FnZEdocGN5NW9iM0pwZW05dWRHRnNRV3hwWjI1dFpXNTBJRDBnZEdocGN5NXpkSEpwYm1jb0oyaHZjbWw2YjI1MFlXeEJiR2xuYm0xbGJuUW5MQ0FuWTJWdWRHVnlKeXhjYmlBZ0lDQWdJSHRqYUc5cFkyVnpPaUJiSjJ4bFpuUW5MQ0FuWTJWdWRHVnlKeXdnSjNKcFoyaDBKMTE5S1R0Y2JpQWdJQ0IwYUdsekxtWnBkRUZ5WldFZ1BTQjBhR2x6TG1KdmIyd29KMlpwZEVGeVpXRW5MQ0IwY25WbEtUdGNiaUFnSUNCMGFHbHpMbk5vY21sdWEwVnRjSFI1VkdGcGJDQTlJSFJvYVhNdVltOXZiQ2duYzJoeWFXNXJSVzF3ZEhsVVlXbHNKeXdnZEhKMVpTazdYRzRnSUNBZ2RHaHBjeTV6YTJsd1JXMXdkSGxRYjNOcGRHbHZibk1nUFNCMGFHbHpMbUp2YjJ3b0ozTnJhWEJGYlhCMGVWQnZjMmwwYVc5dWN5Y3NJR1poYkhObEtUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdZWE41Ym1NZ2FXNXBkQ2dwT2lCUWNtOXRhWE5sUEhadmFXUStJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXBibWwwYVdGc2FYcGxaQ2tnZTF4dUlDQWdJQ0FnWTI5dWMyOXNaUzVsY25KdmNpZ25WMlZpVEc5bmJ5QnpaV052Ym1RZ2FXNXBkR2xoYkdsNllYUnBiMjRoSnlrN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBhV0ZzYVhwbFpDQTlJSFJ5ZFdVN1hHNGdJQ0FnZEdocGN5NW9aV3h3VlhKc0lEMGdKeTlvWld4d0wzWnBjM1ZoYkdsNlpTOTJhV1YzWlhKekwzZGxZaTFzYjJkdkxtMWtKenRjYmx4dUlDQWdJSFJvYVhNdWJYTm5TRzl6ZENBOUlIVnBMbVJwZGlnblRtOGdiV1Z6YzJGblpTY3BPMXh1SUNBZ0lIUm9hWE11YlhOblNHOXpkQzV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTWdQU0IxYVM1allXNTJZWE1vS1R0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3k1emRIbHNaUzUzYVdSMGFDQTlJQ2N4TURBbEp6dGNibHh1SUNBZ0lIUm9hWE11YUc5emRDQTlJSFZwTG1ScGRpaGJkR2hwY3k1dGMyZEliM04wTENCMGFHbHpMbU5oYm5aaGMxMHBPMXh1WEc0Z0lDQWdMeThnZEdocGN5NXpiR2xrWlhJZ1BTQjFhUzV5WVc1blpWTnNhV1JsY2lnd0xDQXlNQ3dnTWl3Z05TazdYRzRnSUNBZ0x5OGdkR2hwY3k1emJHbGtaWEl1Y205dmRDNXpkSGxzWlM1M2FXUjBhQ0E5SUNjeE1EQWxKenRjYmlBZ0lDQXZMeUIwYUdsekxuTnNhV1JsY2k1eWIyOTBMbk4wZVd4bExtaGxhV2RvZENBOUlDY3hNbkI0Snp0Y2JseHVJQ0FnSUdOdmJuTjBJR2RsZEUxdmJtOXRaWElnUFNBb2NEb2dSRWN1VUc5cGJuUXBPaUJiYm5WdFltVnlMQ0J6ZEhKcGJtY2dmQ0J1ZFd4c0xDQlFiM05wZEdsdmJrMXZibTl0WlhKSmJtWnZJSHdnYm5Wc2JGMGdQVDRnZTF4dUlDQWdJQ0FnWTI5dWMzUWdhbEJ2Y3lBOUlFMWhkR2d1Wm14dmIzSW9jQzU0SUM4Z2RHaHBjeTVmY0c5emFYUnBiMjVYYVdSMGFDazdYRzRnSUNBZ0lDQmpiMjV6ZENCd2IzTnBkR2x2YmlBOUlIUm9hWE11Y0c5emFYUnBiMjV6VzJwUWIzTmRPMXh1WEc0Z0lDQWdJQ0JwWmlBb2NHOXphWFJwYjI0Z1BUMDlJSFp2YVdRZ01DbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGdHFVRzl6TENCdWRXeHNMQ0J1ZFd4c1hUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2JXOXViMjFsY2pvZ2MzUnlhVzVuSUh3Z2RXNWtaV1pwYm1Wa0lEMGdUMkpxWldOMExtdGxlWE1vY0c5emFYUnBiMjR1Wm5KbGNTbGNiaUFnSUNBZ0lDQWdMbVpwYm1Rb0tHMHBJRDArSUhCdmMybDBhVzl1TG1aeVpYRmJiVjB1WW05MWJtUnpMbU52Ym5SaGFXNXpLSEF1ZUN3Z2NDNTVLU2s3WEc0Z0lDQWdJQ0JwWmlBb2JXOXViMjFsY2lBOVBUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdXMnBRYjNNc0lHNTFiR3dzSUc1MWJHeGRPMXh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdXMnBRYjNNc0lHMXZibTl0WlhJc0lIQnZjMmwwYVc5dUxtWnlaWEZiYlc5dWIyMWxjbDFkTzF4dUlDQWdJSDA3WEc1Y2JseHVJQ0FnSUM4dklIUm9hWE11YzNWaWN5NXdkWE5vS0hKNGFuTXVabkp2YlVWMlpXNTBQRTF2ZFhObFJYWmxiblErS0hSb2FYTXVZMkZ1ZG1GekxDQW5iVzkxYzJWdmRtVnlKeWt1YzNWaWMyTnlhV0psS0NobE9pQk5iM1Z6WlVWMlpXNTBLU0E5UGlCN1hHNGdJQ0FnTHk4Z2ZTa3BPMXh1WEc0Z0lDQWdkR2hwY3k1MmFXVjNVM1ZpY3k1d2RYTm9LSEo0YW5NdVpuSnZiVVYyWlc1MFBFMXZkWE5sUlhabGJuUStLSFJvYVhNdVkyRnVkbUZ6TENBbmJXOTFjMlZ0YjNabEp5a3VjM1ZpYzJOeWFXSmxLQ2hsT2lCTmIzVnpaVVYyWlc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11WTJGdWRtRnpLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQWdJR052Ym5OMElHRnlaM01nUFNCbElHRnpJRTF2ZFhObFJYWmxiblE3WEc0Z0lDQWdJQ0JqYjI1emRDQmJhbEJ2Y3l3Z2JXOXViMjFsY2wwZ1BTQm5aWFJOYjI1dmJXVnlLSFJvYVhNdVkyRnVkbUZ6TG1kbGRFTjFjbk52Y2xCdmMybDBhVzl1S0dGeVozTXBLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WkdGMFlVWnlZVzFsSUNZbUlIUm9hWE11YzJWeFEyOXNJQ1ltSUhSb2FYTXVjM0JzYVhSMFpYSWdKaVlnYlc5dWIyMWxjaWtnZTF4dUlDQWdJQ0FnSUNCMWFTNTBiMjlzZEdsd0xuTm9iM2RTYjNkSGNtOTFjQ2gwYUdsekxtUmhkR0ZHY21GdFpTd2dLR2xTYjNjcElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6WlhFZ1BTQjBhR2x6TG5ObGNVTnZiQ0V1WjJWMEtHbFNiM2NwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhObGNVMGdQU0J6WlhFZ1B5QjBhR2x6TG5Od2JHbDBkR1Z5SVNoelpYRXBXM1JvYVhNdWMzUmhjblJRYjNOcGRHbHZiaUFySUdwUWIzTmRJRG9nYm5Wc2JEdGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMlZ4VFNBOVBUMGdiVzl1YjIxbGNpQW1KaUIwYUdsekxtUmhkR0ZHY21GdFpTNW1hV3gwWlhJdVoyVjBLR2xTYjNjcE8xeHVJQ0FnSUNBZ0lDQjlMQ0JoY21kekxuZ2dLeUF4Tml3Z1lYSm5jeTU1SUNzZ01UWXBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkV2t1ZEc5dmJIUnBjQzVvYVdSbEtDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTa3BPMXh1WEc0Z0lDQWdkR2hwY3k1MmFXVjNVM1ZpY3k1d2RYTm9LSEo0YW5NdVpuSnZiVVYyWlc1MFBFMXZkWE5sUlhabGJuUStLSFJvYVhNdVkyRnVkbUZ6TENBbmJXOTFjMlZrYjNkdUp5a3VjM1ZpYzJOeWFXSmxLQ2hsT2lCTmIzVnpaVVYyWlc1MEtTQTlQaUI3WEc0Z0lDQWdJQ0JwWmlBb0lYUm9hWE11WTJGdWRtRnpJSHg4SUdVdVluVjBkRzl1SUNFOUlEQXBYRzRnSUNBZ0lDQWdJSEpsZEhWeWJqdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ1lYSm5jeUE5SUdVZ1lYTWdUVzkxYzJWRmRtVnVkRHRjYmlBZ0lDQWdJR052Ym5OMElGdHFVRzl6TENCdGIyNXZiV1Z5WFNBOUlHZGxkRTF2Ym05dFpYSW9kR2hwY3k1allXNTJZWE11WjJWMFEzVnljMjl5VUc5emFYUnBiMjRvWVhKbmN5a3BPMXh1WEc0Z0lDQWdJQ0F2THlCd2NtVjJaVzUwY3lCa1pYTmxiR1ZqZENCaGJHd2djbTkzY3lCcFppQjNaU0J0YVhOeklHMXZibTl0WlhJZ1ltOTFibVJ6WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVrWVhSaFJuSmhiV1VnSmlZZ2RHaHBjeTV6WlhGRGIyd2dKaVlnZEdocGN5NXpjR3hwZEhSbGNpQW1KaUJ0YjI1dmJXVnlLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR0YwWVVaeVlXMWxMbk5sYkdWamRHbHZiaTVwYm1sMEtDaHBVbTkzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ4SUQwZ2RHaHBjeTV6WlhGRGIyd2hMbWRsZENocFVtOTNLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J6WlhGTklEMGdjMlZ4SUQ4Z2RHaHBjeTV6Y0d4cGRIUmxjaUVvYzJWeEtWdDBhR2x6TG5OMFlYSjBVRzl6YVhScGIyNGdLeUJxVUc5elhTQTZJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlITmxjVTBnUFQwOUlHMXZibTl0WlhJZ0ppWWdkR2hwY3k1a1lYUmhSbkpoYldVdVptbHNkR1Z5TG1kbGRDaHBVbTkzS1R0Y2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTa3BPMXh1WEc0Z0lDQWdkR2hwY3k1MmFXVjNVM1ZpY3k1d2RYTm9LSFZwTG05dVUybDZaVU5vWVc1blpXUW9kR2hwY3k1eWIyOTBLUzV6ZFdKelkzSnBZbVVvZEdocGN5NXliMjkwVDI1VGFYcGxRMmhoYm1kbFpDNWlhVzVrS0hSb2FYTXBLU2s3WEc1Y2JpQWdJQ0IwYUdsekxuSnZiM1F1WVhCd1pXNWtLSFJvYVhNdWFHOXpkQ2s3WEc0Z0lDQWdMeThnZEdocGN5NXliMjkwTG1Gd2NHVnVaRU5vYVd4a0tIUm9hWE11YzJ4cFpHVnlMbkp2YjNRcE8xeHVYRzRnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9kSEoxWlNrN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElISnZiM1JQYmxOcGVtVkRhR0Z1WjJWa0tHRnlaM002SUdGdWVTa2dlMXh1SUNBZ0lIUm9hWE11Y21WdVpHVnlLSFJ5ZFdVcE8xeHVYRzRnSUNBZ0x5OGdZMjl1YzI5c1pTNWtaV0oxWnloZ1YyVmlURzluYnk1dmJsSnZiM1JUYVhwbFEyaGhibWRsWkNncElHQWdLMXh1SUNBZ0lDOHZJQ0FnWUhKdmIzUXVkMmxrZEdnOUpIdDBhR2x6TG5KdmIzUXVZMnhwWlc1MFYybGtkR2g5TENCeWIyOTBMbWhsYVdkb2REMGtlM1JvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhSOUxDQmdJQ3RjYmlBZ0lDQXZMeUFnSUdCallXNTJZWE11ZDJsa2RHZzlKSHQwYUdsekxtTmhiblpoY3k1M2FXUjBhSDBzSUdOaGJuWmhjeTVvWldsbmFIUTlKSHQwYUdsekxtTmhiblpoY3k1b1pXbG5hSFI5SUM1Z0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCQmMzTnBaMjV6SUh0QWJHbHVheUJ6WlhGRGIyeDlJR0Z1WkNCN1FHeHBibXNnWTNCOUlHSmhjMlZrSUc5dUlIdEFiR2x1YXlCelpYRjFaVzVqWlVOdmJIVnRiazVoYldWOUlHRnVaQ0JqWVd4c2N5QjdRR3hwYm1zZ2NtVnVaR1Z5ZlNncExseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQjFjR1JoZEdWVFpYRkRiMndvS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVaR0YwWVVaeVlXMWxLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuTmxjVU52YkNBOUlIUm9hWE11YzJWeGRXVnVZMlZEYjJ4MWJXNU9ZVzFsSUQ4Z2RHaHBjeTVrWVhSaFJuSmhiV1V1WTI5c0tIUm9hWE11YzJWeGRXVnVZMlZEYjJ4MWJXNU9ZVzFsS1NBNklHNTFiR3c3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV6WlhGRGIyd2dQVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuTmxjVU52YkNBOUlGZGxZa3h2WjI4dWNHbGphMVZ3VTJWeFEyOXNNaWgwYUdsekxtUmhkR0ZHY21GdFpTazdYRzRnSUNBZ0lDQWdJSFJvYVhNdWMyVnhkV1Z1WTJWRGIyeDFiVzVPWVcxbElEMGdkR2hwY3k1elpYRkRiMndnUHlCMGFHbHpMbk5sY1VOdmJDNXVZVzFsSURvZ2JuVnNiRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbk5sY1VOdmJDa2dlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQjFibWwwY3pvZ2MzUnlhVzVuSUQwZ2RHaHBjeTV6WlhGRGIyd2hMbWRsZEZSaFp5aEVSeTVVUVVkVExsVk9TVlJUS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYzJWd1lYSmhkRzl5T2lCemRISnBibWNnUFNCMGFHbHpMbk5sY1VOdmJDRXVaMlYwVkdGbktDZHpaWEJoY21GMGIzSW5LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXpjR3hwZEhSbGNpQTlJRmRsWWt4dloyOHVaMlYwVTNCc2FYUjBaWElvZFc1cGRITXNJSE5sY0dGeVlYUnZjaWs3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxY0dSaGRHVlFiM05wZEdsdmJuTW9LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpjQ0E5SUZkbFlreHZaMjh1Y0dsamExVndVR0ZzWlhSMFpTaDBhR2x6TG5ObGNVTnZiQ2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxuTndiR2wwZEdWeUlEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWeklEMGdXMTA3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjM1JoY25SUWIzTnBkR2x2YmlBOUlDMHhPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtVnVaRkJ2YzJsMGFXOXVJRDBnTFRFN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTNBZ1BTQnVkV3hzTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TG5KbGJtUmxjaWdwTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCMWNHUmhkR1ZRYjNOcGRHbHZibk1vS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbk5sY1VOdmJDbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUd4bGRDQmpZWFJsWjI5eWFXVnpPaUFvYzNSeWFXNW5JSHdnYm5Wc2JDa2dXMTA3WEc0Z0lDQWdhV1lnS0hSb2FYTXVjMmh5YVc1clJXMXdkSGxVWVdsc0tTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6T2lCSmJuUXpNa0Z5Y21GNUlEMGdkR2hwY3k1a1lYUmhSbkpoYldVdVptbHNkR1Z5TG1kbGRGTmxiR1ZqZEdWa1NXNWtaWGhsY3lncE8xeHVJQ0FnSUNBZ1kyRjBaV2R2Y21sbGN5QTlJRUZ5Y21GNUxtWnliMjBvYm1WM0lGTmxkQ2hjYmlBZ0lDQWdJQ0FnUVhKeVlYa3Vabkp2YlNoQmNuSmhlU2hwYm1ScFkyVnpMbXhsYm1kMGFDa3VhMlY1Y3lncEtTNXRZWEFvS0drNklHNTFiV0psY2lrZ1BUNGdkR2hwY3k1elpYRkRiMndoTG1kbGRDaHBibVJwWTJWelcybGRLU2twS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdZMkYwWldkdmNtbGxjeUE5SUhSb2FYTXVjMlZ4UTI5c0xtTmhkR1ZuYjNKcFpYTTdYRzRnSUNBZ2ZWeHVJQ0FnSUdOdmJuTjBJRzFoZUV4bGJtZDBhQ0E5SUdOaGRHVm5iM0pwWlhNdWJHVnVaM1JvSUQ0Z01DQS9JRTFoZEdndWJXRjRLQzR1TG1OaGRHVm5iM0pwWlhNdWJXRndLRnh1SUNBZ0lDQWdLSE1wSUQwK0lITWdJVDA5SUc1MWJHd2dQeUIwYUdsekxuTndiR2wwZEdWeUlTaHpLUzVzWlc1bmRHZ2dPaUF3S1NrZ09pQXdPMXh1WEc0Z0lDQWdMeThnUjJWMElIQnZjMmwwYVc5dUlHNWhiV1Z6SUdaeWIyMGdaR0YwWVNCamIyeDFiVzRnZEdGbklDZHdiM05wZEdsdmJrNWhiV1Z6SjF4dUlDQWdJR052Ym5OMElIQnZjMmwwYVc5dVRtRnRaWE5VZUhRZ1BTQjBhR2x6TG5ObGNVTnZiQzVuWlhSVVlXY29KM0J2YzJsMGFXOXVUbUZ0WlhNbktUdGNiaUFnSUNBdkx5QkdZV3hzWW1GamF5QnBaaUFuY0c5emFYUnBiMjVPWVcxbGN5Y2dkR0ZuSUdseklHNXZkQ0J3Y205MmFXUmxaRnh1SUNBZ0lIUm9hWE11Y0c5emFYUnBiMjVPWVcxbGN5QTlJSEJ2YzJsMGFXOXVUbUZ0WlhOVWVIUWdQeUJ3YjNOcGRHbHZiazVoYldWelZIaDBMbk53YkdsMEtDY3NJQ2NwTG0xaGNDZ29iaWtnUFQ0Z2JpNTBjbWx0S0NrcElEcGNiaUFnSUNBZ0lGc3VMaTVCY25KaGVTaHRZWGhNWlc1bmRHZ3BMbXRsZVhNb0tWMHViV0Z3S0NocVVHOXpLU0E5UGlCZ0pIdHFVRzl6SUNzZ01YMWdLVHRjYmx4dUlDQWdJSFJvYVhNdWMzUmhjblJRYjNOcGRHbHZiaUE5SUNoMGFHbHpMbk4wWVhKMFVHOXphWFJwYjI1T1lXMWxJQ1ltSUhSb2FYTXVjRzl6YVhScGIyNU9ZVzFsY3lBbUpseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOcGRHbHZiazVoYldWekxtbHVZMngxWkdWektIUm9hWE11YzNSaGNuUlFiM05wZEdsdmJrNWhiV1VwS1NBL1hHNGdJQ0FnSUNCMGFHbHpMbkJ2YzJsMGFXOXVUbUZ0WlhNdWFXNWtaWGhQWmloMGFHbHpMbk4wWVhKMFVHOXphWFJwYjI1T1lXMWxLU0E2SURBN1hHNGdJQ0FnZEdocGN5NWxibVJRYjNOcGRHbHZiaUE5SUNoMGFHbHpMbVZ1WkZCdmMybDBhVzl1VG1GdFpTQW1KaUIwYUdsekxuQnZjMmwwYVc5dVRtRnRaWE1nSmlaY2JpQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNU9ZVzFsY3k1cGJtTnNkV1JsY3loMGFHbHpMbVZ1WkZCdmMybDBhVzl1VG1GdFpTa3BJRDljYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI1T1lXMWxjeTVwYm1SbGVFOW1LSFJvYVhNdVpXNWtVRzl6YVhScGIyNU9ZVzFsS1NBNklDaHRZWGhNWlc1bmRHZ2dMU0F4S1R0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCdmRtVnljbWxrWlNCdmJsQnliM0JsY25SNVEyaGhibWRsWkNod2NtOXdaWEowZVRvZ1JFY3VVSEp2Y0dWeWRIa3BPaUIyYjJsa0lIdGNiaUFnSUNBdkx5QmpiMjV6YjJ4bExtUmxZblZuS0dCWFpXSk1iMmR2TG05dVVISnZjR1Z5ZEhsRGFHRnVaMlZrS0NBa2UzQnliM0JsY25SNUxtNWhiV1Y5SUQwZ0p5Y2dmU2xnS1R0Y2JpQWdJQ0J6ZFhCbGNpNXZibEJ5YjNCbGNuUjVRMmhoYm1kbFpDaHdjbTl3WlhKMGVTazdYRzVjYmlBZ0lDQnpkMmwwWTJnZ0tIQnliM0JsY25SNUxtNWhiV1VwSUh0Y2JpQWdJQ0JqWVhObElDZGpiMjV6YVdSbGNrNTFiR3hUWlhGMVpXNWpaWE1uT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2R6WlhGMVpXNWpaVU52YkhWdGJrNWhiV1VuT2x4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVFpYRkRiMndvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjNOMFlYSjBVRzl6YVhScGIyNU9ZVzFsSnpwY2JpQWdJQ0FnSUhSb2FYTXVkWEJrWVhSbFUyVnhRMjlzS0NrN1hHNGdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQmpZWE5sSUNkbGJtUlFiM05wZEdsdmJrNWhiV1VuT2x4dUlDQWdJQ0FnZEdocGN5NTFjR1JoZEdWVFpYRkRiMndvS1R0Y2JpQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lHTmhjMlVnSjNCdmMybDBhVzl1VjJsa2RHZ25PbHh1SUNBZ0lDQWdkR2hwY3k1ZmNHOXphWFJwYjI1WGFXUjBhQ0E5SUhSb2FYTXVjRzl6YVhScGIyNVhhV1IwYUR0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuYldsdVNHVnBaMmgwSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuYldGNFNHVnBaMmgwSnpwY2JpQWdJQ0FnSUhSb2FYTXVjbVZ1WkdWeUtIUnlkV1VwTzF4dUlDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ1kyRnpaU0FuWm1sNFYybGtkR2duT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2QyWlhKMGFXTmhiRUZzYVdkdWJXVnVkQ2M2WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2loMGNuVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUdOaGMyVWdKMmh2Y21sNmIyNTBZV3hCYkdsbmJtMWxiblFuT2x4dUlDQWdJQ0FnZEdocGN5NXlaVzVrWlhJb2RISjFaU2s3WEc0Z0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNCallYTmxJQ2RtYVhSQmNtVmhKenBjYmlBZ0lDQWdJSFJvYVhNdWNtVnVaR1Z5S0hSeWRXVXBPMXh1SUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnWTJGelpTQW5jMmh5YVc1clJXMXdkSGxVWVdsc0p6cGNiaUFnSUNBZ0lIUm9hWE11ZFhCa1lYUmxVRzl6YVhScGIyNXpLQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuSmxibVJsY2loMGNuVmxLVHRjYmlBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCdmRtVnljbWxrWlNCaGMzbHVZeUJ2YmxSaFlteGxRWFIwWVdOb1pXUW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZVVp5WVcxbFZIaDBPaUJ6ZEhKcGJtY2dQU0IwYUdsekxtUmhkR0ZHY21GdFpTQS9JQ2RrWVhSaEp5QTZJQ2R1ZFd4c0p6dGNiaUFnSUNCamIyNXpiMnhsTG1SbFluVm5LR0JpYVc4NklGZGxZa3h2WjI4OEpIdDBhR2x6TG5acFpYZGxja2xrZlQ0dWIyNVVZV0pzWlVGMGRHRmphR1ZrS0NCa1lYUmhSbkpoYldVZ1BTQWtlMlJoZEdGR2NtRnRaVlI0ZEgwZ0tTQnpkR0Z5ZEdBcE8xeHVJQ0FnSUhOMWNHVnlMbTl1VkdGaWJHVkJkSFJoWTJobFpDZ3BPMXh1WEc0Z0lDQWdkR2hwY3k1MWNHUmhkR1ZUWlhGRGIyd29LVHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbVJoZEdGR2NtRnRaU0FoUFQwZ2RtOXBaQ0F3S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbk4xWW5NdWNIVnphQ2gwYUdsekxtUmhkR0ZHY21GdFpTNXpaV3hsWTNScGIyNHViMjVEYUdGdVoyVmtMbk4xWW5OamNtbGlaU2dvWHlrZ1BUNGdkR2hwY3k1eVpXNWtaWElvS1NrcE8xeHVJQ0FnSUNBZ2RHaHBjeTV6ZFdKekxuQjFjMmdvZEdocGN5NWtZWFJoUm5KaGJXVXVabWxzZEdWeUxtOXVRMmhoYm1kbFpDNXpkV0p6WTNKcFltVW9LRjhwSUQwK0lIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MWNHUmhkR1ZRYjNOcGRHbHZibk1vS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSW9LVHRjYmlBZ0lDQWdJSDBwS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG1sdWFYUW9LVHRjYmlBZ0lDQmpiMjV6YjJ4bExtUmxZblZuS0dCaWFXODZJRmRsWWt4dloyODhKSHQwYUdsekxuWnBaWGRsY2tsa2ZUNHViMjVVWVdKc1pVRjBkR0ZqYUdWa0tDa2daVzVrWUNrN1hHNGdJSDFjYmx4dUlDQndkV0pzYVdNZ2IzWmxjbkpwWkdVZ1lYTjVibU1nWkdWMFlXTm9LQ2tnZTF4dUlDQWdJR052Ym5OMElHUmhkR0ZHY21GdFpWUjRkQ0E5SUdBa2UzUm9hWE11WkdGMFlVWnlZVzFsSUQ4Z0oyUmhkR0VuSURvZ0oyNTFiR3duZldBN1hHNGdJQ0FnWTI5dWMyOXNaUzVrWldKMVp5aGdZbWx2T2lCWFpXSk1iMmR2UENSN2RHaHBjeTUyYVdWM1pYSkpaSDArTG05dVZHRmliR1ZCZEhSaFkyaGxaQ2dnWkdGMFlVWnlZVzFsSUQwZ0pIdGtZWFJoUm5KaGJXVlVlSFI5SUNrZ2MzUmhjblJnS1R0Y2JpQWdJQ0J6ZFhCbGNpNWtaWFJoWTJnb0tUdGNibHh1SUNBZ0lIUm9hWE11ZG1sbGQxTjFZbk11Wm05eVJXRmphQ2dvYzNWaUtTQTlQaUJ6ZFdJdWRXNXpkV0p6WTNKcFltVW9LU2s3WEc0Z0lDQWdkR2hwY3k1b2IzTjBJUzV5WlcxdmRtVW9LVHRjYmlBZ0lDQjBhR2x6TG1OaGJuWmhjeUE5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0IwYUdsekxtMXpaMGh2YzNRZ1BTQjFibVJsWm1sdVpXUTdYRzRnSUNBZ2RHaHBjeTVvYjNOMElEMGdkVzVrWldacGJtVmtPMXh1WEc0Z0lDQWdkR2hwY3k1cGJtbDBhV0ZzYVhwbFpDQTlJR1poYkhObE8xeHVJQ0FnSUdOdmJuTnZiR1V1WkdWaWRXY29ZR0pwYnpvZ1YyVmlURzluYnp3a2UzUm9hWE11ZG1sbGQyVnlTV1I5UGk1dmJsUmhZbXhsUVhSMFlXTm9aV1FvS1NCbGJtUmdLVHRjYmlBZ2ZWeHVYRzRnSUhCeWIzUmxZM1JsWkNCZmJuVnNiRk5sY1hWbGJtTmxLR1pwYkd4bGNsSmxjMmxrZFdVZ1BTQW5XQ2NwT2lCemRISnBibWNnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym5OcFpHVnlUblZzYkZObGNYVmxibU5sY3lsY2JpQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1FYSnlZWGtvZEdocGN5NU1aVzVuZEdncExtWnBiR3dvWm1sc2JHVnlVbVZ6YVdSMVpTa3VhbTlwYmlnbkp5azdYRzVjYmlBZ0lDQnlaWFIxY200Z0p5YzdYRzRnSUgxY2JseHVJQ0J3Y205MFpXTjBaV1FnWDJOaGJHTjFiR0YwWlNncElIdGNiaUFnSUNCcFppQW9JWFJvYVhNdVkyRnVkbUZ6SUh4OElDRjBhR2x6TG1odmMzUWdmSHdnSVhSb2FYTXVjMlZ4UTI5c0lIeDhJQ0YwYUdsekxtUmhkR0ZHY21GdFpTbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUhSb2FYTXVZMkZzWTFOcGVtVW9LVHRjYmx4dUlDQWdJSFJvYVhNdWNHOXphWFJwYjI1eklEMGdibVYzSUVGeWNtRjVLSFJvYVhNdVRHVnVaM1JvS1R0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JxVUc5eklEMGdNRHNnYWxCdmN5QThJSFJvYVhNdVRHVnVaM1JvT3lCcVVHOXpLeXNwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSEJ2YzA1aGJXVTZJSE4wY21sdVp5QTlJSFJvYVhNdWNHOXphWFJwYjI1T1lXMWxjMXQwYUdsekxuTjBZWEowVUc5emFYUnBiMjRnS3lCcVVHOXpYVHRjYmlBZ0lDQWdJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kSUQwZ2JtVjNJRkJ2YzJsMGFXOXVTVzVtYnlod2IzTk9ZVzFsS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0F2THlBeU1ESXlMVEExTFRBMUlHRnphMkZzYTJsdUlHbHVjM1J5ZFdOMFpXUWdkRzhnYzJodmR5QlhaV0pNYjJkdklHSmhjMlZrSUc5dUlHWnBiSFJsY2lBb2JtOTBJSE5sYkdWamRHbHZiaWxjYmlBZ0lDQmpiMjV6ZENCcGJtUnBZMlZ6SUQwZ2RHaHBjeTVrWVhSaFJuSmhiV1V1Wm1sc2RHVnlMbWRsZEZObGJHVmpkR1ZrU1c1a1pYaGxjeWdwTzF4dUlDQWdJQzh2SUdOdmJuTjBJR2x1WkdsalpYTWdQU0IwYUdsekxtUmhkR0ZHY21GdFpTNXpaV3hsWTNScGIyNHVkSEoxWlVOdmRXNTBJRDRnTUNBL0lIUm9hWE11WkdGMFlVWnlZVzFsTG5ObGJHVmpkR2x2Ymk1blpYUlRaV3hsWTNSbFpFbHVaR1Y0WlhNb0tTQTZYRzRnSUNBZ0x5OGdJQ0IwYUdsekxtUmhkR0ZHY21GdFpTNW1hV3gwWlhJdVoyVjBVMlZzWldOMFpXUkpibVJsZUdWektDazdYRzVjYmlBZ0lDQjBhR2x6TG5KdmQzTk5ZWE5yWldRZ1BTQnBibVJwWTJWekxteGxibWQwYUR0Y2JpQWdJQ0IwYUdsekxuSnZkM05PZFd4c0lEMGdNRHRjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnYVNCdlppQnBibVJwWTJWektTQjdYRzRnSUNBZ0lDQnNaWFFnY3pvZ2MzUnlhVzVuSUQwZ1BITjBjbWx1Wno0b2RHaHBjeTV6WlhGRGIyd3VaMlYwS0drcEtUdGNibHh1SUNBZ0lDQWdhV1lnS0NGektTQjdYRzRnSUNBZ0lDQWdJSE1nUFNCMGFHbHpMbDl1ZFd4c1UyVnhkV1Z1WTJVb0tUdGNiaUFnSUNBZ0lDQWdLeXQwYUdsekxuSnZkM05PZFd4c08xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQmpiMjV6ZENCelpYRk5PaUJ6ZEhKcGJtZGJYU0E5SUhSb2FYTXVjM0JzYVhSMFpYSWhLSE1wTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYWxCdmN5QTlJREE3SUdwUWIzTWdQQ0IwYUdsekxreGxibWQwYURzZ2FsQnZjeXNyS1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhCdFNXNW1ieUE5SUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEU3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzA2SUhOMGNtbHVaeUE5SUhObGNVMWJkR2hwY3k1emRHRnlkRkJ2YzJsMGFXOXVJQ3NnYWxCdmMxMGdmSHdnSnkwbk8xeHVJQ0FnSUNBZ0lDQnBaaUFvSVNodElHbHVJSEJ0U1c1bWJ5a3BYRzRnSUNBZ0lDQWdJQ0FnY0cxSmJtWnZXMjFkSUQwZ2JtVjNJRkJ2YzJsMGFXOXVUVzl1YjIxbGNrbHVabThvS1R0Y2JpQWdJQ0FnSUNBZ2NHMUpibVp2VzIxZExtTnZkVzUwS3lzN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4amNtVm5hVzl1SUZCdmJHbHphQ0JtY21WeElHTnZkVzUwYzF4dUlDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnTHk4Z1pHVnNaWFJsSUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEZiSnkwblhUdGNibHh1SUNBZ0lDQWdkR2hwY3k1d2IzTnBkR2x2Ym5OYmFsQnZjMTB1Y205M1EyOTFiblFnUFNBd08xeHVJQ0FnSUNBZ1ptOXlJQ2hqYjI1emRDQnRJR2x1SUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExtWnlaWEVwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjRzl6YVhScGIyNXpXMnBRYjNOZExuSnZkME52ZFc1MElDczlJSFJvYVhNdWNHOXphWFJwYjI1elcycFFiM05kTG1aeVpYRmJiVjB1WTI5MWJuUTdYRzRnSUNBZ2ZWeHVJQ0FnSUM4dkkyVnVaSEpsWjJsdmJseHVYRzRnSUNBZ1kyOXVjM1FnY2lBOUlIZHBibVJ2ZHk1a1pYWnBZMlZRYVhobGJGSmhkR2x2TzF4dUlDQWdJR052Ym5OMElHMWhlRWhsYVdkb2RDQTlJSFJvYVhNdVkyRnVkbUZ6TG1obGFXZG9kQ0F0SUhSb2FYTXVZWGhwYzBobGFXZG9kQ0FxSUhJN1hHNGdJQ0FnTHk4Z1kyOXVjMjlzWlM1a1pXSjFaeWhnVjJWaVRHOW5iendrZTNSb2FYTXVkbWxsZDJWeVNXUjlQaTVmWTJGc1kzVnNZWFJsS0NrZ2JXRjRTR1ZwWjJoMFBTUjdiV0Y0U0dWcFoyaDBmUzVnS1R0Y2JseHVJQ0FnSUM4dkkzSmxaMmx2YmlCRFlXeGpkV3hoZEdVZ2MyTnlaV1Z1WEc0Z0lDQWdabTl5SUNoc1pYUWdhbEJ2Y3lBOUlEQTdJR3BRYjNNZ1BDQjBhR2x6TGt4bGJtZDBhRHNnYWxCdmN5c3JLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQm1jbVZ4T2lCN0lGdGpPaUJ6ZEhKcGJtZGRPaUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUgwZ1BTQjBhR2x6TG5CdmMybDBhVzl1YzF0cVVHOXpYUzVtY21WeE8xeHVJQ0FnSUNBZ1kyOXVjM1FnY205M1EyOTFiblFnUFNCMGFHbHpMbkJ2YzJsMGFXOXVjMXRxVUc5elhTNXliM2REYjNWdWREdGNibHh1SUNBZ0lDQWdiR1YwSUhrNklHNTFiV0psY2lBOUlIUm9hWE11WVhocGMwaGxhV2RvZER0Y2JseHVJQ0FnSUNBZ1kyOXVjM1FnWlc1MGNtbGxjeUE5SUU5aWFtVmpkQzVsYm5SeWFXVnpLR1p5WlhFcExuTnZjblFvS0dFc0lHSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR0ZiTUYwZ0lUMDlJQ2N0SnlBbUppQmlXekJkSUNFOVBTQW5MU2NwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdKYk1WMHVZMjkxYm5RZ0xTQmhXekZkTG1OdmRXNTBPMXh1SUNBZ0lDQWdJQ0JsYkhObElHbG1JQ2hoV3pCZElEMDlQU0FuTFNjZ0ppWWdZbHN3WFNBOVBUMGdKeTBuS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBd08xeHVJQ0FnSUNBZ0lDQmxiSE5sSUdsbUlDaGhXekJkSUQwOVBTQW5MU2NwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUMweE8xeHVJQ0FnSUNBZ0lDQmxiSE5sSUM4cUlDaGlXekJkSUQwOVBTQW5MU2NwSUNvdlhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDc3hPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0JtYjNJZ0tHTnZibk4wSUdWdWRISjVJRzltSUdWdWRISnBaWE1wSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY0cxSmJtWnZPaUJRYjNOcGRHbHZiazF2Ym05dFpYSkpibVp2SUQwZ1pXNTBjbmxiTVYwN1hHNGdJQ0FnSUNBZ0lDOHZJR052Ym5OMElHMDZJSE4wY21sdVp5QTlJR1Z1ZEhKNVd6QmRPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQm9PaUJ1ZFcxaVpYSWdQU0J0WVhoSVpXbG5hSFFnS2lCd2JVbHVabTh1WTI5MWJuUWdMeUJ5YjNkRGIzVnVkRHRjYmx4dUlDQWdJQ0FnSUNCd2JVbHVabTh1WW05MWJtUnpJRDBnYm1WM0lFUkhMbEpsWTNRb2FsQnZjeUFxSUhSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnc0lIa3NJSFJvYVhNdVgzQnZjMmwwYVc5dVYybGtkR2dzSUdncE8xeHVJQ0FnSUNBZ0lDQjVJQ3M5SUdnN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJQzh2STJWdVpISmxaMmx2Ymx4dUlDQjlYRzVjYmlBZ0x5OGdjbVZtYkdWamRDQmphR0Z1WjJWeklHMWhaR1VnZEc4Z1ptbHNkR1Z5TDNObGJHVmpkR2x2Ymx4dUlDQnlaVzVrWlhJb2NtVmpZV3hqSUQwZ2RISjFaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbTF6WjBodmMzUXBJSHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbk5sY1VOdmJDQW1KaUFoZEdocGN5NWpjQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTF6WjBodmMzUWhMbWx1Ym1WeVZHVjRkQ0E5SUdCVmJtdHViM2R1SUhCaGJHVjBkR1VnS0dOdmJIVnRiaUJ6WlcxVWVYQmxPaUFuSkh0MGFHbHpMbk5sY1VOdmJDNXpaVzFVZVhCbGZTY3BMbUE3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViWE5uU0c5emRDRXVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDY25PMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1dGMyZEliM04wSVM1emRIbHNaUzVrYVhOd2JHRjVJRDBnSjI1dmJtVW5PMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWpZVzUyWVhNZ2ZId2dJWFJvYVhNdWMyVnhRMjlzSUh4OElDRjBhR2x6TG1SaGRHRkdjbUZ0WlNCOGZDQWhkR2hwY3k1amNDbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JseHVJQ0FnSUdOdmJuTjBJR2NnUFNCMGFHbHpMbU5oYm5aaGN5NW5aWFJEYjI1MFpYaDBLQ2N5WkNjcE8xeHVJQ0FnSUdsbUlDZ2haeWtnY21WMGRYSnVPMXh1WEc0Z0lDQWdhV1lnS0hKbFkyRnNZeWxjYmlBZ0lDQWdJSFJvYVhNdVgyTmhiR04xYkdGMFpTZ3BPMXh1WEc0Z0lDQWdaeTV5WlhObGRGUnlZVzV6Wm05eWJTZ3BPMXh1SUNBZ0lHY3VabWxzYkZOMGVXeGxJRDBnSjNkb2FYUmxKenRjYmlBZ0lDQm5MbVpwYkd4U1pXTjBLREFzSURBc0lIUm9hWE11WTJGdWRtRnpMbmRwWkhSb0xDQjBhR2x6TG1OaGJuWmhjeTVvWldsbmFIUXBPMXh1SUNBZ0lHY3VkR1Y0ZEVKaGMyVnNhVzVsSUQwZ2RHaHBjeTUwWlhoMFFtRnpaV3hwYm1VN1hHNWNiaUFnSUNBdkx5QlFjbVYyWlc1MGN5QmthWFpwYzJsdmJpQmllU0I2WlhKdklHOXVJRXhsYm1kMGFDQTlJREJjYmlBZ0lDQnBaaUFvZEdocGN5NXpkR0Z5ZEZCdmMybDBhVzl1SUQwOVBTQXRNU0I4ZkNCMGFHbHpMbVZ1WkZCdmMybDBhVzl1SUQwOVBTQXRNU2xjYmlBZ0lDQWdJSEpsZEhWeWJqdGNibHh1SUNBZ0lDOHZJM0psWjJsdmJpQlFiRzkwSUhCdmMybDBhVzl1VG1GdFpYTmNiaUFnSUNCbkxuSmxjMlYwVkhKaGJuTm1iM0p0S0NrN1hHNGdJQ0FnWnk1bWFXeHNVM1I1YkdVZ1BTQW5ZbXhoWTJzbk8xeHVJQ0FnSUdjdWRHVjRkRUZzYVdkdUlEMGdKMk5sYm5SbGNpYzdYRzRnSUNBZ1p5NW1iMjUwSUQwZ0p6RXdjSGdnVW05aWIzUnZMQ0JTYjJKdmRHOGdURzlqWVd3c0lITmhibk10YzJWeWFXWW5PMXh1SUNBZ0lHTnZibk4wSUhCdmMwNWhiV1ZOWVhoWGFXUjBhQ0E5SUUxaGRHZ3ViV0Y0S0M0dUxuUm9hWE11Y0c5emFYUnBiMjV6TG0xaGNDZ29jRzl6S1NBOVBpQm5MbTFsWVhOMWNtVlVaWGgwS0hCdmN5NXVZVzFsS1M1M2FXUjBhQ2twTzF4dUlDQWdJR052Ym5OMElHaFRZMkZzWlNBOUlIQnZjMDVoYldWTllYaFhhV1IwYUNBOElDaDBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JQzBnTWlrZ1B5QXhJRG9nS0hSb2FYTXVYM0J2YzJsMGFXOXVWMmxrZEdnZ0xTQXlLU0F2SUhCdmMwNWhiV1ZOWVhoWGFXUjBhRHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjRzl6T2lCUWIzTnBkR2x2YmtsdVptOGdQU0IwYUdsekxuQnZjMmwwYVc5dWMxdHFVRzl6WFR0Y2JpQWdJQ0FnSUdjdWNtVnpaWFJVY21GdWMyWnZjbTBvS1R0Y2JpQWdJQ0FnSUdjdWMyVjBWSEpoYm5ObWIzSnRLRnh1SUNBZ0lDQWdJQ0JvVTJOaGJHVXNJREFzSURBc0lERXNYRzRnSUNBZ0lDQWdJR3BRYjNNZ0tpQjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JQ3NnZEdocGN5NWZjRzl6YVhScGIyNVhhV1IwYUNBdklESXNJREFwTzF4dUlDQWdJQ0FnWnk1bWFXeHNWR1Y0ZENod2IzTXVibUZ0WlN3Z01Dd2dNQ2s3WEc0Z0lDQWdmVnh1SUNBZ0lDOHZJMlZ1WkhKbFoybHZiaUJRYkc5MElIQnZjMmwwYVc5dVRtRnRaWE5jYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR3BRYjNNZ1BTQXdPeUJxVUc5eklEd2dkR2hwY3k1TVpXNW5kR2c3SUdwUWIzTXJLeWtnZTF4dUlDQWdJQ0FnWm05eUlDaGpiMjV6ZENCYmJXOXViMjFsY2l3Z2NHMUpibVp2WFNCdlppQlBZbXBsWTNRdVpXNTBjbWxsY3loMGFHbHpMbkJ2YzJsMGFXOXVjMXRxVUc5elhTNW1jbVZ4S1NrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYlc5dWIyMWxjaUFoUFQwZ0p5MG5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWWlBOUlIQnRTVzVtYnk1aWIzVnVaSE03WEc1Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbWIyNTBVM1I1YkdVZ1BTQW5NVFp3ZUNCU2IySnZkRzhzSUZKdlltOTBieUJNYjJOaGJDd2djMkZ1Y3kxelpYSnBaaWM3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdTR0ZqYTNNZ2RHOGdjMk5oYkdVZ2RYQndaWEpqWVhObElHTm9ZWEpoWTNSbGNuTWdkRzhnZEdGeVoyVjBJSEpsWTNSaGJtZHNaVnh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFZ3Y0dWeVkyRnpaVXhsZEhSbGNrRnpZMlZ1ZENBOUlEQXVNalU3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZFhCd1pYSmpZWE5sVEdWMGRHVnlTR1ZwWjJoMElEMGdNVEl1TWp0Y2JseHVJQ0FnSUNBZ0lDQWdJR2N1Y21WelpYUlVjbUZ1YzJadmNtMG9LVHRjYmlBZ0lDQWdJQ0FnSUNCbkxuTjBjbTlyWlZOMGVXeGxJRDBnSjJ4cFoyaDBaM0poZVNjN1hHNGdJQ0FnSUNBZ0lDQWdaeTVzYVc1bFYybGtkR2dnUFNBeE8xeHVJQ0FnSUNBZ0lDQWdJR2N1Y21WamRDaGlMbXhsWm5Rc0lHSXVkRzl3TENCaUxuZHBaSFJvTENCaUxtaGxhV2RvZENrN1hHNGdJQ0FnSUNBZ0lDQWdaeTVtYVd4c1UzUjViR1VnUFNCMGFHbHpMbU53TG1kbGRDaHRiMjV2YldWeUtTQS9QeUIwYUdsekxtTndMbWRsZENnbmIzUm9aWEluS1R0Y2JpQWdJQ0FnSUNBZ0lDQm5MblJsZUhSQmJHbG5iaUE5SUNkc1pXWjBKenRjYmlBZ0lDQWdJQ0FnSUNCbkxtWnZiblFnUFNCbWIyNTBVM1I1YkdVN1hHNGdJQ0FnSUNBZ0lDQWdMeTluTG1acGJHeFNaV04wS0dJdWJHVm1kQ3dnWWk1MGIzQXNJR0l1ZDJsa2RHZ3NJR0l1YUdWcFoyaDBLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0VkcwNklGUmxlSFJOWlhSeWFXTnpJRDBnWnk1dFpXRnpkWEpsVkdWNGRDaHRiMjV2YldWeUtUdGNibHh1SUNBZ0lDQWdJQ0FnSUM4dklHbG1JQ2h0VFM1aFkzUjFZV3hDYjNWdVpHbHVaMEp2ZUVGelkyVnVkQ0FoUFNBd0tWeHVJQ0FnSUNBZ0lDQWdJQzh2SUNBZ1kyOXVjMjlzWlM1a1pXSjFaeWhnYlRvZ0pIdHRmU3dnYlUwdVlXTjBkV0ZzUW05MWJtUnBibWRDYjNoQmMyTmxiblE2SUNSN2JVMHVZV04wZFdGc1FtOTFibVJwYm1kQ2IzaEJjMk5sYm5SOVlDazdYRzVjYmlBZ0lDQWdJQ0FnSUNCbkxuTmxkRlJ5WVc1elptOXliU2hjYmlBZ0lDQWdJQ0FnSUNBZ0lHSXVkMmxrZEdnZ0x5QnRWRzB1ZDJsa2RHZ3NJREFzSURBc0lHSXVhR1ZwWjJoMElDOGdkWEJ3WlhKallYTmxUR1YwZEdWeVNHVnBaMmgwTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdZaTVzWldaMExDQmlMblJ2Y0NrN1hHNGdJQ0FnSUNBZ0lDQWdaeTVtYVd4c1ZHVjRkQ2h0YjI1dmJXVnlMQ0F3TENBdGRYQndaWEpqWVhObFRHVjBkR1Z5UVhOalpXNTBLVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnWTJGc1kxTnBlbVVvS1NCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1OaGJuWmhjeUI4ZkNBaGRHaHBjeTVvYjNOMEtWeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJQ0FnYkdWMElIZHBaSFJvT2lCdWRXMWlaWElnUFNCMGFHbHpMa3hsYm1kMGFDQXFJSFJvYVhNdWNHOXphWFJwYjI1WGFXUjBhRHRjYmlBZ0lDQnNaWFFnYUdWcFoyaDBJRDBnVFdGMGFDNXRhVzRvZEdocGN5NXRZWGhJWldsbmFIUXNJRTFoZEdndWJXRjRLSFJvYVhNdWJXbHVTR1ZwWjJoMExDQjBhR2x6TG5KdmIzUXVZMnhwWlc1MFNHVnBaMmgwS1NrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1bWFYUkJjbVZoS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0I0VTJOaGJHVTZJRzUxYldKbGNpQTlJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUklaV2xuYUhRZ0x5Qm9aV2xuYUhRN1hHNGdJQ0FnSUNCamIyNXpkQ0I1VTJOaGJHVTZJRzUxYldKbGNpQTlJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUlhhV1IwYUNBdklIZHBaSFJvTzF4dUlDQWdJQ0FnWTI5dWMzUWdjMk5oYkdVZ1BTQk5ZWFJvTG0xaGVDZ3hMQ0JOWVhSb0xtMXBiaWg0VTJOaGJHVXNJSGxUWTJGc1pTa3BPMXh1SUNBZ0lDQWdkMmxrZEdnZ1BTQjNhV1IwYUNBcUlITmpZV3hsTzF4dUlDQWdJQ0FnYUdWcFoyaDBJRDBnYUdWcFoyaDBJQ29nYzJOaGJHVTdYRzRnSUNBZ0lDQjBhR2x6TGw5d2IzTnBkR2x2YmxkcFpIUm9JRDBnZEdocGN5NXdiM05wZEdsdmJsZHBaSFJvSUNvZ2MyTmhiR1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2NpQTlJSGRwYm1SdmR5NWtaWFpwWTJWUWFYaGxiRkpoZEdsdk8xeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuZHBaSFJvSUQwZ2QybGtkR2dnS2lCeU8xeHVJQ0FnSUhSb2FYTXVZMkZ1ZG1GekxuTjBlV3hsTG5kcFpIUm9JRDBnWUNSN2QybGtkR2g5Y0hoZ08xeHVYRzRnSUNBZ0x5OGdZMjl1YzNRZ1kyRnVkbUZ6U0dWcFoyaDBPaUJ1ZFcxaVpYSWdQU0IzYVdSMGFDQStJSFJvYVhNdWNtOXZkQzVqYkdsbGJuUlhhV1IwYUNBL0lHaGxhV2RvZENBdElEZ2dPaUJvWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZG9aV2xuYUhRbkxDQmdKSHRvWldsbmFIUjljSGhnS1R0Y2JpQWdJQ0JqYjI1emRDQmpZVzUyWVhOSVpXbG5hSFE2SUc1MWJXSmxjaUE5SUhSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUTdYRzRnSUNBZ2RHaHBjeTVqWVc1MllYTXVhR1ZwWjJoMElEMGdZMkZ1ZG1GelNHVnBaMmgwSUNvZ2NqdGNiaUFnSUNCMGFHbHpMbU5oYm5aaGN5NXpkSGxzWlM1elpYUlFjbTl3WlhKMGVTZ25hR1ZwWjJoMEp5d2dZQ1I3WTJGdWRtRnpTR1ZwWjJoMGZYQjRZQ2s3WEc1Y2JpQWdJQ0F2THlCQlpHcDFjM1FnYUc5emRDQmhibVFnY205dmRDQjNhV1IwYUZ4dUlDQWdJR2xtSUNoMGFHbHpMbVpwZUZkcFpIUm9LU0I3WEc0Z0lDQWdJQ0F2THlCbWRXeHNJSGRwWkhSb0lHWnZjaUJqWVc1MllYTWdhRzl6ZENCaGJtUWdjbTl2ZEZ4dUlDQWdJQ0FnZEdocGN5NXliMjkwTG5OMGVXeGxMbmRwWkhSb0lEMGdkR2hwY3k1b2IzTjBMbk4wZVd4bExuZHBaSFJvSUQwZ1lDUjdkMmxrZEdoOWNIaGdPMXh1SUNBZ0lDQWdkR2hwY3k1eWIyOTBMbk4wZVd4bExtaGxhV2RvZENBOUlHQWtlMmhsYVdkb2RIMXdlR0E3WEc0Z0lDQWdJQ0IwYUdsekxtaHZjM1F1YzNSNWJHVXVjMlYwVUhKdmNHVnlkSGtvSjI5MlpYSm1iRzkzSnl3Z0oyaHBaR1JsYmljc0lDZHBiWEJ2Y25SaGJuUW5LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0x5OGdZV3hzYjNjZ2MyTnliMnhzSUdOaGJuWmhjeUJwYmlCeWIyOTBYRzRnSUNBZ0lDQjBhR2x6TG5KdmIzUXVjM1I1YkdVdWQybGtkR2dnUFNCMGFHbHpMbWh2YzNRdWMzUjViR1V1ZDJsa2RHZ2dQU0FuTVRBd0pTYzdYRzRnSUNBZ0lDQjBhR2x6TG1odmMzUXVjM1I1YkdVdWIzWmxjbVpzYjNkWUlEMGdKMkYxZEc4aGFXMXdiM0owWVc1MEp6dGNiaUFnSUNBZ0lIUm9hWE11YUc5emRDNXpkSGxzWlM1elpYUlFjbTl3WlhKMGVTZ25iM1psY21ac2IzY25MQ0J1ZFd4c0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1b2IzTjBMbk4wZVd4bExuTmxkRkJ5YjNCbGNuUjVLQ2QwWlhoMExXRnNhV2R1Snl3Z2RHaHBjeTVvYjNKcGVtOXVkR0ZzUVd4cFoyNXRaVzUwS1R0Y2JseHVJQ0FnSUNBZ0x5OGdkbVZ5ZEdsallXd2dZV3hwWjI1dFpXNTBYRzRnSUNBZ0lDQnNaWFFnYUc5emRGUnZjRTFoY21kcGJpQTlJREE3WEc0Z0lDQWdJQ0J6ZDJsMFkyZ2dLSFJvYVhNdWRtVnlkR2xqWVd4QmJHbG5ibTFsYm5RcElIdGNiaUFnSUNBZ0lHTmhjMlVnSjNSdmNDYzZYRzRnSUNBZ0lDQWdJR2h2YzNSVWIzQk5ZWEpuYVc0Z1BTQXdPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lHTmhjMlVnSjIxcFpHUnNaU2M2WEc0Z0lDQWdJQ0FnSUdodmMzUlViM0JOWVhKbmFXNGdQU0JOWVhSb0xtMWhlQ2d3TENBb2RHaHBjeTV5YjI5MExtTnNhV1Z1ZEVobGFXZG9kQ0F0SUdobGFXZG9kQ2tnTHlBeUtUdGNiaUFnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNCallYTmxJQ2RpYjNSMGIyMG5PbHh1SUNBZ0lDQWdJQ0JvYjNOMFZHOXdUV0Z5WjJsdUlEMGdUV0YwYUM1dFlYZ29NQ3dnZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RDQXRJR2hsYVdkb2RDazdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZHRZWEpuYVc0dGRHOXdKeXdnWUNSN2FHOXpkRlJ2Y0UxaGNtZHBibjF3ZUdBc0lDZHBiWEJ2Y25SaGJuUW5LVHRjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Y205dmRDNWpiR2xsYm5SSVpXbG5hSFFnUENCb1pXbG5hSFFwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZG9aV2xuYUhRbkxDQmdKSHQwYUdsekxuSnZiM1F1WTJ4cFpXNTBTR1ZwWjJoMGZYQjRZQ2s3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVhRzl6ZEM1emRIbHNaUzV6WlhSUWNtOXdaWEowZVNnbmIzWmxjbVpzYjNjdGVTY3NJRzUxYkd3cE8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVvYjNOMExuTjBlV3hsTG5ObGRGQnliM0JsY25SNUtDZHZkbVZ5Wm14dmR5MTVKeXdnSjJocFpHUmxiaWNzSUNkcGJYQnZjblJoYm5RbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QmpiMjV6YjJ4bExtUmxZblZuS0Z4dUlDQWdJQzh2SUNBZ1lIUm9hWE11Y205dmRDNXpkSGxzWlM1b1pXbG5hSFFnUFNBa2UzUm9hWE11Y205dmRDNXpkSGxzWlM1b1pXbG5hSFI5WEZ4dVlDQXJYRzRnSUNBZ0x5OGdJQ0JnZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RDQTlJQ1I3ZEdocGN5NXliMjkwTG1Oc2FXVnVkRWhsYVdkb2RIMWNYRzVnSUN0Y2JpQWdJQ0F2THlBZ0lHQjBhR2x6TG1odmMzUXVjM1I1YkdVdWFHVnBaMmgwSUQwZ0pIdDBhR2x6TG1odmMzUXVjM1I1YkdVdWFHVnBaMmgwZlZ4Y2JtQWdLMXh1SUNBZ0lDOHZJQ0FnWUhSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUWdQU0FrZTNSb2FYTXVhRzl6ZEM1amJHbGxiblJJWldsbmFIUjlYRnh1WUNBclhHNGdJQ0FnTHk4Z0lDQW5YRnh1SnlBclhHNGdJQ0FnTHk4Z0lDQmdkR2hwY3k1allXNTJZWE11YUdWcFoyaDBJQ0FnSUNBZ0lEMGdKSHQwYUdsekxtTmhiblpoY3k1b1pXbG5hSFI5WEZ4dVlDQXJYRzRnSUNBZ0x5OGdJQ0JnZEdocGN5NWpZVzUyWVhNdWMzUjViR1V1YUdWcFoyaDBJRDBnSkh0MGFHbHpMbU5oYm5aaGN5NXpkSGxzWlM1b1pXbG5hSFI5WUNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRSEJoY21GdElIdEVSeTVEYjJ4MWJXNTlJSE5sY1VOdmJDQkRiMngxYlc0Z2RHOGdiRzl2YXlCbWIzSWdZU0J3WVd4bGRIUmxYRzRnSUNBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNBZ2JXbHVUR1Z1WjNSb0lHMXBibWx0ZFcwZ2JHVnVaM1JvSUc5bUlITmxjWFZsYm1ObElIUnZJR1JsZEdWamRDQndZV3hsZEhSbElDaGxiWEIwZVNCemRISnBibWR6SUdGeVpTQmhiR3h2ZDJWa0tWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0VFpYRlFZV3hsZEhSbGZTQlFZV3hsZEhSbElHTnZjbkpsYzNCdmJtUnBibWNnZEc4Z2RHaGxJR0ZzY0doaFltVjBJRzltSUhSb1pTQnpaWEYxWlc1alpYTWdhVzRnZEdobElHTnZiSFZ0Ymx4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJ3YVdOclZYQlFZV3hsZEhSbEtITmxjVU52YkRvZ1JFY3VRMjlzZFcxdUxDQnRhVzVNWlc1bmRHZzZJRzUxYldKbGNpQTlJRFVwT2lCVFpYRlFZV3hsZEhSbElIdGNiaUFnSUNCc1pYUWdjbVZ6T2lCVFpYRlFZV3hsZEhSbElId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdjM2RwZEdOb0lDaHpaWEZEYjJ3dWMyVnRWSGx3WlNrZ2UxeHVJQ0FnSUdOaGMyVWdRVzFwYm05aFkybGtjeTVUWlcxVWVYQmxUWFZzZEdsd2JHVkJiR2xuYm0xbGJuUTZYRzRnSUNBZ0lDQnlaWE1nUFNCQmJXbHViMkZqYVdSelVHRnNaWFIwWlhNdVIzSnZhMGR5YjNWd2N6dGNiaUFnSUNBZ0lHSnlaV0ZyTzF4dUlDQWdJR05oYzJVZ1RuVmpiR1Z2ZEdsa1pYTXVVMlZ0Vkhsd1pVMTFiSFJwY0d4bFFXeHBaMjV0Wlc1ME9seHVJQ0FnSUNBZ2NtVnpJRDBnVG5WamJHVnZkR2xrWlhOUVlXeGxkSFJsY3k1RGFISnZiV0YwYjJkeVlXMDdYRzRnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0I5WEc0Z0lDQWdZMjl1YzNRZ2MzUmhkSE02SUZObGNVTnZiRk4wWVhSeklEMGdWMlZpVEc5bmJ5NW5aWFJUZEdGMGN5aHpaWEZEYjJ3c0lHMXBia3hsYm1kMGFDd2dWMlZpVEc5bmJ5NXpjR3hwZEhSbGNrRnpSbUZ6ZEdFcE8xeHVYRzRnSUNBZ1kyOXVjM1FnWVd4d2FHRmlaWFJEWVc1a2FXUmhkR1Z6T2lCYlUyVjBQSE4wY21sdVp6NHNJRk5sY1ZCaGJHVjBkR1ZkVzEwZ1BTQmJYRzRnSUNBZ0lDQmJibVYzSUZObGRDaFBZbXBsWTNRdWEyVjVjeWhPZFdOc1pXOTBhV1JsY3k1T1lXMWxjeWtwTENCT2RXTnNaVzkwYVdSbGMxQmhiR1YwZEdWekxrTm9jbTl0WVhSdlozSmhiVjBzWEc0Z0lDQWdJQ0JiYm1WM0lGTmxkQ2hQWW1wbFkzUXVhMlY1Y3loQmJXbHViMkZqYVdSekxrNWhiV1Z6S1Nrc0lFRnRhVzV2WVdOcFpITlFZV3hsZEhSbGN5NUhjbTlyUjNKdmRYQnpYU3hjYmlBZ0lDQmRPMXh1SUNBZ0lDOHZJRU5oYkdOMWJHRjBaU0JzYVd0bGJHbG9iMjlrY3lCbWIzSWdZV3h3YUdGaVpYUmZZMkZ1Wkdsa1lYUmxjMXh1SUNBZ0lHTnZibk4wSUdGc2NHaGhZbVYwUTJGdVpHbGtZWFJsYzFOcGJUb2diblZ0WW1WeVcxMGdQU0JoYkhCb1lXSmxkRU5oYm1ScFpHRjBaWE5jYmlBZ0lDQWdJQzV0WVhBb0tHTXBJRDArSUZkbFlreHZaMjh1WjJWMFFXeHdhR0ZpWlhSVGFXMXBiR0Z5YVhSNUtITjBZWFJ6TG1aeVpYRXNJR05iTUYwcEtUdGNiaUFnSUNCamIyNXpkQ0J0WVhoRGIzTWdQU0JOWVhSb0xtMWhlQ2d1TGk1aGJIQm9ZV0psZEVOaGJtUnBaR0YwWlhOVGFXMHBPMXh1SUNBZ0lHbG1JQ2h0WVhoRGIzTWdQaUF3TGpZMUtWeHVJQ0FnSUNBZ2NtVnpJRDBnWVd4d2FHRmlaWFJEWVc1a2FXUmhkR1Z6VzJGc2NHaGhZbVYwUTJGdVpHbGtZWFJsYzFOcGJTNXBibVJsZUU5bUtHMWhlRU52Y3lsZFd6RmRPMXh1SUNBZ0lHVnNjMlZjYmlBZ0lDQWdJSEpsY3lBOUlGVnVhMjV2ZDI1VFpYRlFZV3hsZEhSbGN5NURiMnh2Y2p0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5WlhNN1hHNGdJSDFjYmx4dUlDQXZLaW9nVTNSaGRITWdiMllnYzJWeGRXVnVZMlZ6SUhkcGRHZ2djM0JsWTJsbWFXVmtJSE53YkdsMGRHVnlJR1oxYm1Nc0lISmxkSFZ5Ym5NZ2V5Qm1jbVZ4TENCellXMWxUR1Z1WjNSb0lIMHVYRzRnSUNBcUlFQndZWEpoYlNCN1JFY3VRMjlzZFcxdWZTQnpaWEZEYjJ4Y2JpQWdJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRzFwYmt4bGJtZDBhRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxTndiR2wwZEdWeVJuVnVZMzBnYzNCc2FYUjBaWEpjYmlBZ0lDb2dRSEpsZEhWeWJpQjdJRk5sY1VOdmJGTjBZWFJ6SUgwc0lITmhiV1ZNWlc1bmRHZzZJR0p2YjJ4bFlXNGdmU0J6ZEdGMGN5QnZaaUJqYjJ4MWJXNGdjMlZ4ZFdWdVkyVnpYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaMlYwVTNSaGRITW9jMlZ4UTI5c09pQkVSeTVEYjJ4MWJXNHNJRzFwYmt4bGJtZDBhRG9nYm5WdFltVnlMQ0J6Y0d4cGRIUmxjam9nVTNCc2FYUjBaWEpHZFc1aktUb2dVMlZ4UTI5c1UzUmhkSE1nZTF4dUlDQWdJR052Ym5OMElHWnlaWEU2SUhzZ1cyMDZJSE4wY21sdVoxMDZJRzUxYldKbGNpQjlJRDBnZTMwN1hHNGdJQ0FnYkdWMElITmhiV1ZNWlc1bmRHZ2dQU0IwY25WbE8xeHVJQ0FnSUd4bGRDQm1hWEp6ZEV4bGJtZDBhQ0E5SUc1MWJHdzdYRzVjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJSE5sY1NCdlppQnpaWEZEYjJ3dVkyRjBaV2R2Y21sbGN5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JWTmxjU0E5SUhOd2JHbDBkR1Z5S0hObGNTazdYRzVjYmlBZ0lDQWdJR2xtSUNobWFYSnpkRXhsYm1kMGFDQTlQU0J1ZFd4c0tWeHVJQ0FnSUNBZ0lDQm1hWEp6ZEV4bGJtZDBhQ0E5SUcxVFpYRXViR1Z1WjNSb08xeHVJQ0FnSUNBZ1pXeHpaU0JwWmlBb2JWTmxjUzVzWlc1bmRHZ2dJVDA5SUdacGNuTjBUR1Z1WjNSb0tWeHVJQ0FnSUNBZ0lDQnpZVzFsVEdWdVozUm9JRDBnWm1Gc2MyVTdYRzVjYmlBZ0lDQWdJR2xtSUNodFUyVnhMbXhsYm1kMGFDQStJRzFwYmt4bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNCbWIzSWdLR052Ym5OMElHMGdiMllnYlZObGNTa2dlMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDZ2hLRzBnYVc0Z1puSmxjU2twWEc0Z0lDQWdJQ0FnSUNBZ0lDQm1jbVZ4VzIxZElEMGdNRHRjYmlBZ0lDQWdJQ0FnSUNCbWNtVnhXMjFkSUNzOUlERTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUh0bWNtVnhPaUJtY21WeExDQnpZVzFsVEdWdVozUm9PaUJ6WVcxbFRHVnVaM1JvZlR0Y2JpQWdmVnh1WEc0Z0lIQjFZbXhwWXlCemRHRjBhV01nWjJWMFFXeHdhR0ZpWlhSVGFXMXBiR0Z5YVhSNUtHWnlaWEU2SUUxdmJtOXRaWEpHY21WeGN5d2dZV3h3YUdGaVpYUTZJRk5sZER4emRISnBibWMrTENCbllYQlRlVzFpYjJ3NklITjBjbWx1WnlBOUlDY3RKeWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdZMjl1YzNRZ2EyVjVjeUE5SUc1bGR5QlRaWFE4YzNSeWFXNW5QaWhiTGk0dWJtVjNJRk5sZENoUFltcGxZM1F1YTJWNWN5aG1jbVZ4S1Nrc0lDNHVMbUZzY0doaFltVjBYU2s3WEc0Z0lDQWdhMlY1Y3k1a1pXeGxkR1VvWjJGd1UzbHRZbTlzS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR1p5WlhGQk9pQnVkVzFpWlhKYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElHRnNjR2hoWW1WMFFUb2diblZ0WW1WeVcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUcwZ2IyWWdhMlY1Y3lrZ2UxeHVJQ0FnSUNBZ1puSmxjVUV1Y0hWemFDaHRJR2x1SUdaeVpYRWdQeUJtY21WeFcyMWRJRG9nTUNrN1hHNGdJQ0FnSUNCaGJIQm9ZV0psZEVFdWNIVnphQ2hoYkhCb1lXSmxkQzVvWVhNb2JTa2dQeUF4SURvZ01DazdYRzRnSUNBZ2ZWeHVJQ0FnSUM4cUlGUm9aWEpsSUhkbGNtVWdZU0JtWlhjZ2FXUmxZWE02SUdOb2FTMXpjWFZoY21Wa0xDQndaV0Z5YzI5dUlHTnZjbkpsYkdGMGFXOXVJQ2gyWVhKcFlXNWpaVDhwTENCelkyRnNZWElnY0hKdlpIVmpkQ0FxTDF4dUlDQWdJR052Ym5OMElHWnlaWEZXT2lCV1pXTjBiM0lnUFNCdVpYY2dWbVZqZEc5eUtHWnlaWEZCS1R0Y2JpQWdJQ0JqYjI1emRDQmhiSEJvWVdKbGRGWTZJRlpsWTNSdmNpQTlJRzVsZHlCV1pXTjBiM0lvWVd4d2FHRmlaWFJCS1R0Y2JpQWdJQ0JqYjI1emRDQmpiM002SUc1MWJXSmxjaUE5SUhabFkzUnZja1J2ZEZCeWIyUjFZM1FvWm5KbGNWWXNJR0ZzY0doaFltVjBWaWtnTHlBb2RtVmpkRzl5VEdWdVozUm9LR1p5WlhGV0tTQXFJSFpsWTNSdmNreGxibWQwYUNoaGJIQm9ZV0psZEZZcEtUdGNiaUFnSUNCeVpYUjFjbTRnWTI5ek8xeHVJQ0I5WEc1Y2JpQWdMeThnTHlvcUlFWnBjbk4wSUhSeWVTQjBieUJtYVc1a0lHTnZiSFZ0YmlCM2FYUm9JSE5sYlZSNWNHVWdKMkZzYVdkdVpXUlRaWEYxWlc1alpTY3VYRzRnSUM4dklDQXFJRTVsZUhRZ2JHOXZheUJtYjNJZ1kyOXNkVzF1SUhkcGRHZ2daR0YwWVNCaGJIQm9ZV0psZENCamIzSnlaWE53YjI1a2FXNW5JSFJ2SUdGdWVTQnZaaUIwYUdVZ2EyNXZkMjRnY0dGc1pYUjBaWE11WEc0Z0lDOHZJQ0FxSUVCd1lYSmhiU0I3UkVjdVJHRjBZVVp5WVcxbGZTQmtZWFJoUm5KaGJXVmNiaUFnTHk4Z0lDb2dRSEpsZEhWeWJpQjdSRWN1UTI5c2RXMXVmU0JVYUdVZ1kyOXNkVzF1SUhkbElIZGxjbVVnYkc5dmEybHVaeUJtYjNJZ2IzSWdiblZzYkZ4dUlDQXZMeUFnS2k5Y2JpQWdMeThnY0hKcGRtRjBaU0J3YVdOclZYQlRaWEZEYjJ3b1pHRjBZVVp5WVcxbE9pQkVSeTVFWVhSaFJuSmhiV1VwT2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUh0Y2JpQWdMeThnSUNCc1pYUWdjbVZ6T2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUQwZ1pHRjBZVVp5WVcxbExtTnZiSFZ0Ym5NdVlubFRaVzFVZVhCbEtDZGhiR2xuYm1Wa1UyVnhkV1Z1WTJVbktUdGNiaUFnTHk4Z0lDQnBaaUFvY21WeklEMDlJRzUxYkd3cElIdGNiaUFnTHk4Z0lDQWdJR1p2Y2lBb1kyOXVjM1FnWTI5c0lHOW1JR1JoZEdGR2NtRnRaUzVqYjJ4MWJXNXpLU0I3WEc0Z0lDOHZJQ0FnSUNBZ0lHTnZibk4wSUdOd0lEMGdWMlZpVEc5bmJ5NXdhV05yVlhCUVlXeGxkSFJsS0dOdmJDQmhjeUJFUnk1RGIyeDFiVzRzSURVcE8xeHVJQ0F2THlBZ0lDQWdJQ0JwWmlBb1kzQWdJVDA5SUc1MWJHd2dKaVlnSVNoamNDQnBibk4wWVc1alpXOW1JRlZ1YTI1dmQyNVRaWEZRWVd4bGRIUmxLU2tnZTF4dUlDQXZMeUFnSUNBZ0lDQWdJSEpsY3lBOUlHTnZiRHRjYmlBZ0x5OGdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdMeThnSUNBZ0lDQWdmVnh1SUNBdkx5QWdJQ0FnZlZ4dUlDQXZMeUFnSUgxY2JpQWdMeThnSUNCeVpYUjFjbTRnY21Wek8xeHVJQ0F2THlCOVhHNWNiaUFnY0hWaWJHbGpJSE4wWVhScFl5QndhV05yVlhCVFpYRkRiMnd5S0dSbU9pQkVSeTVFWVhSaFJuSmhiV1VwT2lCRVJ5NURiMngxYlc0Z2ZDQnVkV3hzSUh0Y2JpQWdJQ0JqYjI1emRDQnpaVzFVZVhCbFEyOXNUR2x6ZENBOUlHUm1MbU52YkhWdGJuTXVZbmxUWlcxVWVYQmxRV3hzS0VSSExsTkZUVlJaVUVVdVRVRkRVazlOVDB4RlExVk1SU2s3WEc0Z0lDQWdiR1YwSUhKbGMwTnZiRG9nUkVjdVEyOXNkVzF1SUh3Z2JuVnNiQ0E5SUhObGJWUjVjR1ZEYjJ4TWFYTjBMbVpwYm1Rb0tHTnZiQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZFc1cGRITWdQU0JqYjJ3dVoyVjBWR0ZuS0VSSExsUkJSMU11VlU1SlZGTXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIVnVhWFJ6SUQ4Z2RXNXBkSE11YVc1a1pYaFBaaWduVFZOQkp5a2dJVDA5SUMweElEb2dabUZzYzJVN1hHNGdJQ0FnZlNrZ1B6OGdiblZzYkR0Y2JpQWdJQ0JwWmlBb0lYSmxjME52YkNBbUppQnpaVzFVZVhCbFEyOXNUR2x6ZEM1c1pXNW5kR2dnUGlBd0tWeHVJQ0FnSUNBZ2NtVnpRMjlzSUQwZ2MyVnRWSGx3WlVOdmJFeHBjM1JiTUYwN1hHNGdJQ0FnY21WMGRYSnVJSEpsYzBOdmJEdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHMXZibTl0WlhKU1pTQTlJQzljWEZzb1hGeDNLeWxjWEYxOEtGeGNkeWw4S0MwcEwyYzdYRzVjYmlBZ0x5b3FJRk53YkdsMElITmxjWFZsYm1ObElHWnZjaUJ6YVc1bmJHVWdZMmhoY21GamRHVnlJRzF2Ym05dFpYSnpMQ0J6Y1hWaGNtVWdZbkpoWTJ0bGRITWdiWFZzZEdsamFHRnlJRzF2Ym05dFpYSWdibUZ0WlhNZ2IzSWdaMkZ3SUhONWJXSnZiQzVjYmlBZ0lDb2dRSEJoY21GdElIdGhibmw5SUhObGNTQnZZbXBsWTNRZ2QybDBhQ0J6WlhGMVpXNWpaVnh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kYlhYMGdZWEp5WVhrZ2IyWWdiVzl1YjIxbGNuTmNiaUFnSUNvdlhHNGdJSEIxWW14cFl5QnpkR0YwYVdNZ2MzQnNhWFIwWlhKQmMwWmhjM1JoS0hObGNUb2dZVzU1S1RvZ2MzUnlhVzVuVzEwZ2UxeHVJQ0FnSUdOdmJuTjBJSEpsY3pvZ2MzUnlhVzVuVzEwZ1BTQjNkVHhTWldkRmVIQk5ZWFJqYUVGeWNtRjVQaWh6WlhFdWRHOVRkSEpwYm1jb0tTNXRZWFJqYUVGc2JDaFhaV0pNYjJkdkxtMXZibTl0WlhKU1pTa3BYRzRnSUNBZ0lDQXViV0Z3S0NodFlUb2dVbVZuUlhod1RXRjBZMmhCY25KaGVTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCc1pYUWdiVkpsY3pvZ2MzUnlhVzVuTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J0T2lCemRISnBibWNnUFNCdFlWc3dYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHMHViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h0SUdsdUlGZGxZa3h2WjI4dVlXRlRlVzV2Ym5sdGN5a2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JWSmxjeUE5SUZkbFlreHZaMjh1WVdGVGVXNXZibmx0YzF0dFhUdGNiaUFnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2JWSmxjeUE5SUNjbk8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMyOXNaUzVrWldKMVp5aGdURzl1WnlCdGIyNXZiV1Z5SUNja2UyMTlKeUJvWVhNZ2JtOTBJR0VnYzJodmNuUWdjM2x1YjI1NWJTNWdLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdiVkpsY3lBOUlHMDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJRzFTWlhNN1hHNGdJQ0FnSUNCOUtTNTBiMEZ5Y21GNUtDazdYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVnpPMXh1SUNCOVhHNWNiaUFnTHlvcUlFZGxkSE1nYldWMGFHOWtJSFJ2SUhOd2JHbDBJSE5sY1hWbGJtTmxJR0o1SUhObGNHRnlZWFJ2Y2x4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdjMlZ3WVhKaGRHOXlYRzRnSUNBcUlFQnlaWFIxY200Z2UxTndiR2wwZEdWeVJuVnVZMzFjYmlBZ0lDb3ZYRzRnSUhCMVlteHBZeUJ6ZEdGMGFXTWdaMlYwVTNCc2FYUjBaWEpYYVhSb1UyVndZWEpoZEc5eUtITmxjR0Z5WVhSdmNqb2djM1J5YVc1bktUb2dVM0JzYVhSMFpYSkdkVzVqSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLSE5sY1RvZ2MzUnlhVzVuS1NBOVBpQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MyVnhMbk53YkdsMEtITmxjR0Z5WVhSdmNpazdYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCSFpYUWdjM0JzYVhSMFpYSWdiV1YwYUc5a0lIUnZJSE53YkdsMElITmxjWFZsYm1ObGN5QjBieUJ0YjI1dmJXVnljMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2RXNXBkSE5jYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlITmxjR0Z5WVhSdmNseHVJQ0FnS2lCQWNtVjBkWEp1SUh0VGNHeHBkSFJsY2taMWJtTjlYRzRnSUNBcUwxeHVJQ0J3ZFdKc2FXTWdjM1JoZEdsaklHZGxkRk53YkdsMGRHVnlLSFZ1YVhSek9pQnpkSEpwYm1jc0lITmxjR0Z5WVhSdmNqb2djM1J5YVc1bktUb2dVM0JzYVhSMFpYSkdkVzVqSUh0Y2JpQWdJQ0JwWmlBb2RXNXBkSE11ZEc5TWIzZGxja05oYzJVb0tTNXpkR0Z5ZEhOWGFYUm9LQ2RtWVhOMFlTY3BLVnh1SUNBZ0lDQWdjbVYwZFhKdUlGZGxZa3h2WjI4dWMzQnNhWFIwWlhKQmMwWmhjM1JoTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLSFZ1YVhSekxuUnZURzkzWlhKRFlYTmxLQ2t1YzNSaGNuUnpWMmwwYUNnbmMyVndZWEpoZEc5eUp5a3BYRzRnSUNBZ0lDQnlaWFIxY200Z1YyVmlURzluYnk1blpYUlRjR3hwZEhSbGNsZHBkR2hUWlhCaGNtRjBiM0lvYzJWd1lYSmhkRzl5S1R0Y2JpQWdJQ0F2S2x4dUlDQWdJR1ZzYzJVZ2FXWWdLSFZ1YVhSekxuUnZURzkzWlhKRFlYTmxLQ2t1YzNSaGNuUnpWMmwwYUNnbmFHVnNiU2NwS1Z4dUlDQWdJQ0FnY21WMGRYSnVJRmRsWWt4dloyOHVjM0JzYVhSMFpYSkJjMGhsYkcwN1hHNGdJQ0FnTHlvcUwxeHVJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ1ZXNWxlSEJsWTNSbFpDQjFibWwwY3lBa2UzVnVhWFJ6ZlNBdVlDazdYRzVjYmlBZ0lDQXZMeUJVVDBSUE9pQlRjR3hwZEhSbGNpQm1iM0lnU0VWTVRWeHVJQ0I5WEc1Y2JpQWdjSFZpYkdsaklITjBZWFJwWXlCblpYUlRjR3hwZEhSbGNrWnZja052YkhWdGJpaGpiMnc2SUVSSExrTnZiSFZ0YmlrNklGTndiR2wwZEdWeVJuVnVZeUI3WEc0Z0lDQWdhV1lnS0dOdmJDNXpaVzFVZVhCbElDRTlQU0JFUnk1VFJVMVVXVkJGTGsxQlExSlBUVTlNUlVOVlRFVXBYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1lFZGxkQ0J6Y0d4cGRIUmxjaUJtYjNJZ2MyVnRWSGx3WlNCY0lpUjdSRWN1VTBWTlZGbFFSUzVOUVVOU1QwMVBURVZEVlV4RmZWd2lJRzl1YkhrdVlDazdYRzVjYmlBZ0lDQmpiMjV6ZENCMWJtbDBjeUE5SUdOdmJDNW5aWFJVWVdjb1JFY3VWRUZIVXk1VlRrbFVVeWs3WEc0Z0lDQWdZMjl1YzNRZ2MyVndZWEpoZEc5eUlEMGdZMjlzTG1kbGRGUmhaeWduYzJWd1lYSmhkRzl5SnlrN1hHNGdJQ0FnY21WMGRYSnVJRmRsWWt4dloyOHVaMlYwVTNCc2FYUjBaWElvZFc1cGRITXNJSE5sY0dGeVlYUnZjaWs3WEc0Z0lIMWNibHh1SUNBdktpb2dUMjVzZVNCemIyMWxJRzltSUhSb1pTQnplVzV2Ym5sdGN5NGdWR2hsYzJVZ2QyVnlaU0J2WW5SaGFXNWxaQ0JtY205dElIUm9aU0JqYkhWemRHVnlaV1FnYjJ4cFoyOXdaWEIwYVdSbElHUmhkR0Z6WlhRdUlDb3ZYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR0ZoVTNsdWIyNTViWE02SUhzZ1cyNWhiV1U2SUhOMGNtbHVaMTA2SUhOMGNtbHVaeUI5SUQwZ2UxeHVJQ0FnSUNkYlRXVk9iR1ZkSnpvZ0owd25MQ0F2THlCT2JHVWdMU0J1YjNKc1pYVmphVzVsWEc0Z0lDQWdKMXROWlVGZEp6b2dKMEVuTEZ4dUlDQWdJQ2RiVFdWSFhTYzZJQ2RISnl4Y2JpQWdJQ0FuVzAxbFJsMG5PaUFuUmljc1hHNGdJSDA3WEc1OVhHNGlYWDA9IiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBjcmVhdGVEaW1lbnNpbmFsaXR5UmVkdWNpbmdXb3JrZXIgfSBmcm9tICcuL3dvcmtlcnMvZGltZW5zaW9uYWxpdHktcmVkdWNpbmctd29ya2VyLWNyZWF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZURpbWVuc2luYWxpdHlXaXRoTm9ybWFsaXphdGlvbihkYXRhQ29sLCBtZXRob2ROYW1lLCBzaW1pbGFyaXR5TWV0cmljLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uYWxpdHlSZWR1Y2VSZXMgPSB5aWVsZCBjcmVhdGVEaW1lbnNpbmFsaXR5UmVkdWNpbmdXb3JrZXIoeyBkYXRhOiBkYXRhQ29sLCBtZXRyaWM6IHNpbWlsYXJpdHlNZXRyaWMgfSwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLmVtYmVkZGluZyA9IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLmVtYmVkZGluZy5tYXAoaXQgPT4gbm9ybWFsaXplKGl0KSk7XG4gICAgICAgIHJldHVybiBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcztcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWMyVnhkV1Z1WTJVdGMzQmhZMlV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SnpaWEYxWlc1alpTMXpjR0ZqWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkZRU3hQUVVGUExFVkJRVVVzVTBGQlV5eEZRVUZGTEUxQlFVMHNhVVJCUVdsRUxFTkJRVU03UVVGSE5VVXNUMEZCVHl4RlFVRkZMR2xEUVVGcFF5eEZRVUVyUWl4TlFVRk5MR3RFUVVGclJDeERRVUZETzBGQlIyeEpMRTFCUVUwc1ZVRkJaMElzYjBOQlFXOURMRU5CUTNSRUxFOUJRWEZETEVWQlEzSkRMRlZCUVd0Q0xFVkJRMnhDTEdkQ1FVRTJSQ3hGUVVNM1JDeFBRVUZoT3p0UlFVVmlMRTFCUVUwc2RVSkJRWFZDTEVkQlEzcENMRTFCUVUwc2FVTkJRV2xETEVOQlEyNURMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNaMEpCUVdkQ0xFVkJRV2RDTEVWQlEzcEVMRlZCUVZVc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dFJRVVUzUWl4MVFrRkJkVUlzUTBGQlF5eFRRVUZUTEVkQlFVY3NkVUpCUVhWQ0xFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXk5R0xFOUJRVThzZFVKQlFYVkNMRU5CUVVNN1NVRkRia01zUTBGQlF6dERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUVKcGRFRnljbUY1SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDJKcGRDMWhjbkpoZVNjN1hHNXBiWEJ2Y25RZ2V5Qk5ZWFJ5YVhnc0lGWmxZM1J2Y2lCOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdJRzV2Y20xaGJHbDZaU0I5SUdaeWIyMGdKMEJrWVhSaFozSnZheTFzYVdKeVlYSnBaWE12ZFhScGJITXZjM0pqTDNabFkzUnZjaTF2Y0dWeVlYUnBiMjV6Snp0Y2JtbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVwYlhCdmNuUWdleUJDYVhSQmNuSmhlVTFsZEhKcFkzTXNJRk4wY21sdVowMWxkSEpwWTNNc0lGWmhiR2xrVkhsd1pYTXNJRlpsWTNSdmNrMWxkSEpwWTNNZ2ZTQm1jbTl0SUNjdUwzUjVjR1ZrTFcxbGRISnBZM01uTzF4dWFXMXdiM0owSUhzZ1kzSmxZWFJsUkdsdFpXNXphVzVoYkdsMGVWSmxaSFZqYVc1blYyOXlhMlZ5TENCSlVtVmtkV05sUkdsdFpXNXphVzl1WVd4cGRIbFNaWE4xYkhRZ2ZTQm1jbTl0SUNjdUwzZHZjbXRsY25NdlpHbHRaVzV6YVc5dVlXeHBkSGt0Y21Wa2RXTnBibWN0ZDI5eWEyVnlMV055WldGMGIzSW5PMXh1WEc1Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJ5WldSMVkyVkVhVzFsYm5OcGJtRnNhWFI1VjJsMGFFNXZjbTFoYkdsNllYUnBiMjRvWEc0Z0lDQWdaR0YwWVVOdmJEb2dRbWwwUVhKeVlYbGJYWHhXWldOMGIzSmJYWHh6ZEhKcGJtZGJYU3dnWEc0Z0lDQWdiV1YwYUc5a1RtRnRaVG9nYzNSeWFXNW5MQ0JjYmlBZ0lDQnphVzFwYkdGeWFYUjVUV1YwY21sak9pQkNhWFJCY25KaGVVMWxkSEpwWTNOOFZtVmpkRzl5VFdWMGNtbGpjM3hUZEhKcGJtZE5aWFJ5YVdOekxGeHVJQ0FnSUc5d2RHbHZibk0vT2lCaGJua3BPaUJRY205dGFYTmxQRWxTWldSMVkyVkVhVzFsYm5OcGIyNWhiR2wwZVZKbGMzVnNkRDRnZTF4dVhHNGdJQ0FnWTI5dWMzUWdaR2x0Wlc1emFXOXVZV3hwZEhsU1pXUjFZMlZTWlhNNklFbFNaV1IxWTJWRWFXMWxibk5wYjI1aGJHbDBlVkpsYzNWc2RDQTlYRzRnSUNBZ0lDQWdJR0YzWVdsMElHTnlaV0YwWlVScGJXVnVjMmx1WVd4cGRIbFNaV1IxWTJsdVoxZHZjbXRsY2loY2JpQWdJQ0FnSUNBZ0lDQWdJSHNnWkdGMFlUb2daR0YwWVVOdmJDd2diV1YwY21sak9pQnphVzFwYkdGeWFYUjVUV1YwY21saklIMGdZWE1nVm1Gc2FXUlVlWEJsY3l4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFsZEdodlpFNWhiV1VzSUc5d2RHbHZibk1wTzF4dVhHNGdJQ0FnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTXVaVzFpWldSa2FXNW5JRDBnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTXVaVzFpWldSa2FXNW5MbTFoY0NocGRDQTlQaUJ1YjNKdFlXeHBlbVVvYVhRcEtUdGNiaUFnSUNCeVpYUjFjbTRnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTTdYRzU5SWwxOSIsImltcG9ydCAqIGFzIGZsIGZyb20gJ2Zhc3Rlc3QtbGV2ZW5zaHRlaW4nO1xuaW1wb3J0IHsgamFyb1dpbmtsZXIgfSBmcm9tICdqYXJvLXdpbmtsZXItdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBkaXN0YW5jZU1ldHJpY3MgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9zaW1pbGFyaXR5LW1ldHJpY3MnO1xuaW1wb3J0IHsgY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5leHBvcnQgY29uc3QgQXZhaWxhYmxlTWV0cmljcyA9IHtcbiAgICAnVmVjdG9yJzoge1xuICAgICAgICAnRXVjbGlkZWFuRGlzdGFuY2UnOiBjYWxjdWxhdGVFdWNsaWRlYW5EaXN0YW5jZSxcbiAgICB9LFxuICAgICdTdHJpbmcnOiB7XG4gICAgICAgICdMZXZlbnNodGVpbic6IGZsLmRpc3RhbmNlLFxuICAgICAgICAnSmFyby1XaW5rbGVyJzogamFyb1dpbmtsZXIsXG4gICAgfSxcbiAgICAnQml0QXJyYXknOiB7XG4gICAgICAgICdUYW5pbW90byc6IGRpc3RhbmNlTWV0cmljc1snVGFuaW1vdG8nXSxcbiAgICAgICAgJ0RpY2UnOiBkaXN0YW5jZU1ldHJpY3NbJ0RpY2UnXSxcbiAgICAgICAgJ0FzeW1tZXRyaWMnOiBkaXN0YW5jZU1ldHJpY3NbJ0FzeW1tZXRyaWMnXSxcbiAgICAgICAgJ0JyYXVuLUJsYW5xdWV0JzogZGlzdGFuY2VNZXRyaWNzWydCcmF1bi1CbGFucXVldCddLFxuICAgICAgICAnQ29zaW5lJzogZGlzdGFuY2VNZXRyaWNzWydDb3NpbmUnXSxcbiAgICAgICAgJ0t1bGN6eW5za2knOiBkaXN0YW5jZU1ldHJpY3NbJ0t1bGN6eW5za2knXSxcbiAgICAgICAgJ01jLUNvbm5hdWdoZXknOiBkaXN0YW5jZU1ldHJpY3NbJ01jLUNvbm5hdWdoZXknXSxcbiAgICAgICAgJ1JvZ290LUdvbGRiZXJnJzogZGlzdGFuY2VNZXRyaWNzWydSb2dvdC1Hb2xkYmVyZyddLFxuICAgICAgICAnUnVzc2VsJzogZGlzdGFuY2VNZXRyaWNzWydSdXNzZWwnXSxcbiAgICAgICAgJ1Nva2FsJzogZGlzdGFuY2VNZXRyaWNzWydTb2thbCddLFxuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IE1ldHJpY1RvRGF0YVR5cGUgPSBPYmplY3Qua2V5cyhBdmFpbGFibGVNZXRyaWNzKVxuICAgIC5yZWR1Y2UoKHJldCwga2V5KSA9PiB7XG4gICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1trZXldKSkge1xuICAgICAgICByZXRbdmFsXSA9IGtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn0sIHt9KTtcbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ01ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaXRBcnJheU1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ0JpdEFycmF5Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlY3Rvck1ldHJpYyhuYW1lKSB7XG4gICAgcmV0dXJuIE1ldHJpY1RvRGF0YVR5cGVbbmFtZV0gPT0gJ1ZlY3Rvcic7XG59XG4vKiogVW5pZmllZCBjbGFzcyBpbXBsZW1lbnRpbmcgZGlmZmVyZW50IHN0cmluZyBtZWFzdXJlcy4gKi9cbmV4cG9ydCBjbGFzcyBNZWFzdXJlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIE1lYXN1cmUgd2l0aCAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZCBNZXRob2QgdG8gY2FsY3VsYXRlIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXRob2QpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHRoaXMuZGF0YVR5cGUgPSBNZXRyaWNUb0RhdGFUeXBlW21ldGhvZF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgY3VzdG9tIHN0cmluZyBkaXN0YW5jZSBmdW5jdGlvbiBzcGVjaWZpZWQuXG4gICAgICogQHJldHVybiB7RGlzdGFuY2VNZXRyaWN9IENhbGxiYWNrIG9mIHRoZSBtZWFzdXJlIGNob3Nlbi5cbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBnZXRNZWFzdXJlKCkge1xuICAgICAgICBjb25zdCBkaWN0ID0gQXZhaWxhYmxlTWV0cmljcztcbiAgICAgICAgcmV0dXJuIGRpY3RbdGhpcy5kYXRhVHlwZV1bdGhpcy5tZXRob2RdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGN1c3RvbSBzdHJpbmcgZGlzdGFuY2UgYnkgdGhlIGdpdmVuIGRhdGEgdHlwZS5cbiAgICAgKiBAcGFyYW0ge0F2YWlsYWJsZURhdGFUeXBlc30gZGF0YVR5cGUgTWV0cmljJ3MgZGF0YSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nW119IE1ldHJpYyBuYW1lcyB3aGljaCBleHBlY3RzIHRoZSBnaXZlbiBkYXRhIHR5cGVcbiAgICAgKiBAbWVtYmVyb2YgTWVhc3VyZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TWV0cmljQnlEYXRhVHlwZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoQXZhaWxhYmxlTWV0cmljc1tkYXRhVHlwZV0pO1xuICAgIH1cbiAgICAvKiogUmV0dXJucyBtZXRyaWMgbmFtZXMgYXZhaWxhYmxlLlxuICAgICAqIEBtZW1iZXJvZiBNZWFzdXJlclxuICAgICovXG4gICAgc3RhdGljIGdldCBhdmFpbGFibGVNZWFzdXJlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaV1F0YldWMGNtbGpjeTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUjVjR1ZrTFcxbGRISnBZM011ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3h4UWtGQmNVSXNRMEZCUXp0QlFVTXhReXhQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZETEUxQlFVMHNlVUpCUVhsQ0xFTkJRVU03UVVGRmNFUXNUMEZCVHl4RlFVRkRMR1ZCUVdVc1JVRkJReXhOUVVGTkxHdEVRVUZyUkN4RFFVRkRPMEZCUTJwR0xFOUJRVThzUlVGQlF5d3dRa0ZCTUVJc1JVRkJReXhOUVVGTkxHbEVRVUZwUkN4RFFVRkRPMEZCU1ROR0xFMUJRVTBzUTBGQlF5eE5RVUZOTEdkQ1FVRm5RaXhIUVVGSE8wbEJRemxDTEZGQlFWRXNSVUZCUlR0UlFVTlNMRzFDUVVGdFFpeEZRVUZGTERCQ1FVRXdRanRMUVVOb1JEdEpRVU5FTEZGQlFWRXNSVUZCUlR0UlFVTlNMR0ZCUVdFc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVUdFJRVU14UWl4alFVRmpMRVZCUVVVc1YwRkJWenRMUVVNMVFqdEpRVU5FTEZWQlFWVXNSVUZCUlR0UlFVTldMRlZCUVZVc1JVRkJSU3hsUVVGbExFTkJRVU1zVlVGQlZTeERRVUZETzFGQlEzWkRMRTFCUVUwc1JVRkJSU3hsUVVGbExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlF5OUNMRmxCUVZrc1JVRkJSU3hsUVVGbExFTkJRVU1zV1VGQldTeERRVUZETzFGQlF6TkRMR2RDUVVGblFpeEZRVUZGTEdWQlFXVXNRMEZCUXl4blFrRkJaMElzUTBGQlF6dFJRVU51UkN4UlFVRlJMRVZCUVVVc1pVRkJaU3hEUVVGRExGRkJRVkVzUTBGQlF6dFJRVU51UXl4WlFVRlpMRVZCUVVVc1pVRkJaU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVU16UXl4bFFVRmxMRVZCUVVVc1pVRkJaU3hEUVVGRExHVkJRV1VzUTBGQlF6dFJRVU5xUkN4blFrRkJaMElzUlVGQlJTeGxRVUZsTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03VVVGRGJrUXNVVUZCVVN4RlFVRkZMR1ZCUVdVc1EwRkJReXhSUVVGUkxFTkJRVU03VVVGRGJrTXNUMEZCVHl4RlFVRkZMR1ZCUVdVc1EwRkJReXhQUVVGUExFTkJRVU03UzBGRGJFTTdRMEZEUml4RFFVRkRPMEZCUlVZc1RVRkJUU3hEUVVGRExFMUJRVTBzWjBKQlFXZENMRWRCUVhGQ0xFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU03UzBGRE5VVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1IwRkJjVUlzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlR0SlFVTnlReXhMUVVGTExFMUJRVTBzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCZVVJc1EwRkJReXhEUVVGRExFVkJRVVU3VVVGRE1VVXNSMEZCUnl4RFFVRkRMRWRCUVhsQ0xFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTTdTMEZEZEVNN1NVRkRSQ3hQUVVGUExFZEJRVWNzUTBGQlF6dEJRVU5pTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVZkVUxFMUJRVTBzVlVGQlZTeGpRVUZqTEVOQlFVTXNTVUZCYTBJN1NVRkRMME1zVDBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTTdRVUZETlVNc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeG5Ra0ZCWjBJc1EwRkJReXhKUVVGclFqdEpRVU5xUkN4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRlZCUVZVc1EwRkJRenRCUVVNNVF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR05CUVdNc1EwRkJReXhKUVVGclFqdEpRVU12UXl4UFFVRlBMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRkZCUVZFc1EwRkJRenRCUVVNMVF5eERRVUZETzBGQlJVUXNORVJCUVRSRU8wRkJRelZFTEUxQlFVMHNUMEZCVHl4UFFVRlBPMGxCU1d4Q096czdPMDlCU1VjN1NVRkRTQ3haUVVGWkxFMUJRVzlDTzFGQlF6bENMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzFGQlEzSkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGMVFpeERRVUZETzBsQlEycEZMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBrc1ZVRkJWVHRSUVVObUxFMUJRVTBzU1VGQlNTeEhRVUZ6UkN4blFrRkJaMElzUTBGQlF6dFJRVU5xUml4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJRekZETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTkpMRTFCUVUwc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4UlFVRTBRanRSUVVNMVJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOcVJDeERRVUZETzBsQlJVUTdPMDFCUlVVN1NVRkRSaXhOUVVGTkxFdEJRVXNzYVVKQlFXbENPMUZCUXpGQ0xFOUJRVThzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzBsQlEzWkRMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHWnNJR1p5YjIwZ0oyWmhjM1JsYzNRdGJHVjJaVzV6YUhSbGFXNG5PMXh1YVcxd2IzSjBJSHRxWVhKdlYybHVhMnhsY24wZ1puSnZiU0FuYW1GeWJ5MTNhVzVyYkdWeUxYUjVjR1Z6WTNKcGNIUW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVTFsZEhKcFkzMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRrYVhOMFlXNWpaVTFsZEhKcFkzTjlJR1p5YjIwZ0owQmtZWFJoWjNKdmF5MXNhV0p5WVhKcFpYTXZkWFJwYkhNdmMzSmpMM05wYldsc1lYSnBkSGt0YldWMGNtbGpjeWM3WEc1cGJYQnZjblFnZTJOaGJHTjFiR0YwWlVWMVkyeHBaR1ZoYmtScGMzUmhibU5sZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5MlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3ljN1hHNXBiWEJ2Y25RZ1FtbDBRWEp5WVhrZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdlltbDBMV0Z5Y21GNUp6dGNibWx0Y0c5eWRDQjdWbVZqZEc5eUxDQlRkSEpwYm1kRWFXTjBhVzl1WVhKNWZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQkJkbUZwYkdGaWJHVk5aWFJ5YVdOeklEMGdlMXh1SUNBblZtVmpkRzl5SnpvZ2UxeHVJQ0FnSUNkRmRXTnNhV1JsWVc1RWFYTjBZVzVqWlNjNklHTmhiR04xYkdGMFpVVjFZMnhwWkdWaGJrUnBjM1JoYm1ObExGeHVJQ0I5TEZ4dUlDQW5VM1J5YVc1bkp6b2dlMXh1SUNBZ0lDZE1aWFpsYm5Ob2RHVnBiaWM2SUdac0xtUnBjM1JoYm1ObExGeHVJQ0FnSUNkS1lYSnZMVmRwYm10c1pYSW5PaUJxWVhKdlYybHVhMnhsY2l4Y2JpQWdmU3hjYmlBZ0owSnBkRUZ5Y21GNUp6b2dlMXh1SUNBZ0lDZFVZVzVwYlc5MGJ5YzZJR1JwYzNSaGJtTmxUV1YwY21samMxc25WR0Z1YVcxdmRHOG5YU3hjYmlBZ0lDQW5SR2xqWlNjNklHUnBjM1JoYm1ObFRXVjBjbWxqYzFzblJHbGpaU2RkTEZ4dUlDQWdJQ2RCYzNsdGJXVjBjbWxqSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkQmMzbHRiV1YwY21sakoxMHNYRzRnSUNBZ0owSnlZWFZ1TFVKc1lXNXhkV1YwSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkQ2NtRjFiaTFDYkdGdWNYVmxkQ2RkTEZ4dUlDQWdJQ2REYjNOcGJtVW5PaUJrYVhOMFlXNWpaVTFsZEhKcFkzTmJKME52YzJsdVpTZGRMRnh1SUNBZ0lDZExkV3hqZW5sdWMydHBKem9nWkdsemRHRnVZMlZOWlhSeWFXTnpXeWRMZFd4amVubHVjMnRwSjEwc1hHNGdJQ0FnSjAxakxVTnZibTVoZFdkb1pYa25PaUJrYVhOMFlXNWpaVTFsZEhKcFkzTmJKMDFqTFVOdmJtNWhkV2RvWlhrblhTeGNiaUFnSUNBblVtOW5iM1F0UjI5c1pHSmxjbWNuT2lCa2FYTjBZVzVqWlUxbGRISnBZM05iSjFKdloyOTBMVWR2YkdSaVpYSm5KMTBzWEc0Z0lDQWdKMUoxYzNObGJDYzZJR1JwYzNSaGJtTmxUV1YwY21samMxc25VblZ6YzJWc0oxMHNYRzRnSUNBZ0oxTnZhMkZzSnpvZ1pHbHpkR0Z1WTJWTlpYUnlhV056V3lkVGIydGhiQ2RkTEZ4dUlDQjlMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUUxbGRISnBZMVJ2UkdGMFlWUjVjR1U2SUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCUFltcGxZM1F1YTJWNWN5aEJkbUZwYkdGaWJHVk5aWFJ5YVdOektWeHVJQ0F1Y21Wa2RXTmxLQ2h5WlhRNklGTjBjbWx1WjBScFkzUnBiMjVoY25rc0lHdGxlU2tnUFQ0Z2UxeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2RtRnNJRzltSUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYmEyVjVJR0Z6SUVGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzEwcEtTQjdYRzRnSUNBZ0lDQnlaWFJiZG1Gc0lHRnpJRUYyWVdsc1lXSnNaVVJoZEdGVWVYQmxjMTBnUFNCclpYazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBzSUh0OUtUdGNibHh1Wlhod2IzSjBJSFI1Y0dVZ1FYWmhhV3hoWW14bFJHRjBZVlI1Y0dWeklEMGdhMlY1YjJZZ2RIbHdaVzltSUVGMllXbHNZV0pzWlUxbGRISnBZM003WEc1bGVIQnZjblFnZEhsd1pTQlRkSEpwYm1kTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMU4wY21sdVp5ZGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1FtbDBRWEp5WVhsTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMEpwZEVGeWNtRjVKMTA3WEc1bGVIQnZjblFnZEhsd1pTQldaV04wYjNKTlpYUnlhV056SUQwZ2EyVjViMllnZEhsd1pXOW1JRUYyWVdsc1lXSnNaVTFsZEhKcFkzTmJKMVpsWTNSdmNpZGRPMXh1Wlhod2IzSjBJSFI1Y0dVZ1MyNXZkMjVOWlhSeWFXTnpJRDBnVTNSeWFXNW5UV1YwY21samN5QjhJRUpwZEVGeWNtRjVUV1YwY21samN5QjhJRlpsWTNSdmNrMWxkSEpwWTNNN1hHNWNibVY0Y0c5eWRDQjBlWEJsSUZaaGJHbGtWSGx3WlhNZ1BTQjdaR0YwWVRvZ2MzUnlhVzVuVzEwc0lHMWxkSEpwWXpvZ1UzUnlhVzVuVFdWMGNtbGpjMzBnZkNCN1pHRjBZVG9nVm1WamRHOXlXMTBzSUcxbGRISnBZem9nVm1WamRHOXlUV1YwY21samMzMGdmRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHRrWVhSaE9pQkNhWFJCY25KaGVWdGRMQ0J0WlhSeWFXTTZJRUpwZEVGeWNtRjVUV1YwY21samMzMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYzFOMGNtbHVaMDFsZEhKcFl5aHVZVzFsT2lCTGJtOTNiazFsZEhKcFkzTXBJSHRjYmlBZ2NtVjBkWEp1SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYm1GdFpWMGdQVDBnSjFOMGNtbHVaeWM3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBjMEpwZEVGeWNtRjVUV1YwY21saktHNWhiV1U2SUV0dWIzZHVUV1YwY21samN5a2dlMXh1SUNCeVpYUjFjbTRnVFdWMGNtbGpWRzlFWVhSaFZIbHdaVnR1WVcxbFhTQTlQU0FuUW1sMFFYSnlZWGtuTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhWE5XWldOMGIzSk5aWFJ5YVdNb2JtRnRaVG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUhKbGRIVnliaUJOWlhSeWFXTlViMFJoZEdGVWVYQmxXMjVoYldWZElEMDlJQ2RXWldOMGIzSW5PMXh1ZlZ4dVhHNHZLaW9nVlc1cFptbGxaQ0JqYkdGemN5QnBiWEJzWlcxbGJuUnBibWNnWkdsbVptVnlaVzUwSUhOMGNtbHVaeUJ0WldGemRYSmxjeTRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWldGemRYSmxJSHRjYmlBZ2NISnZkR1ZqZEdWa0lHMWxkR2h2WkRvZ1MyNXZkMjVOWlhSeWFXTnpPMXh1SUNCd2NtOTBaV04wWldRZ1pHRjBZVlI1Y0dVNklFRjJZV2xzWVdKc1pVUmhkR0ZVZVhCbGN6dGNibHh1SUNBdktpcGNiaUFnSUNvZ1EzSmxZWFJsY3lCaGJpQnBibk4wWVc1alpTQnZaaUJOWldGemRYSmxJSGRwZEdnZ0xseHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnYldWMGFHOWtJRTFsZEdodlpDQjBieUJqWVd4amRXeGhkR1VnWkdsemRHRnVZMlVnWW1WMGQyVmxiaUJ6ZEhKcGJtZHpMbHh1SUNBZ0tpQkFiV1Z0WW1WeWIyWWdUV1ZoYzNWeVpYSmNiaUFnSUNvdlhHNGdJR052Ym5OMGNuVmpkRzl5S0cxbGRHaHZaRG9nUzI1dmQyNU5aWFJ5YVdOektTQjdYRzRnSUNBZ2RHaHBjeTV0WlhSb2IyUWdQU0J0WlhSb2IyUTdYRzRnSUNBZ2RHaHBjeTVrWVhSaFZIbHdaU0E5SUUxbGRISnBZMVJ2UkdGMFlWUjVjR1ZiYldWMGFHOWtYU0JoY3lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dVbVYwZFhKdWN5QmpkWE4wYjIwZ2MzUnlhVzVuSUdScGMzUmhibU5sSUdaMWJtTjBhVzl1SUhOd1pXTnBabWxsWkM1Y2JpQWdJQ29nUUhKbGRIVnliaUI3UkdsemRHRnVZMlZOWlhSeWFXTjlJRU5oYkd4aVlXTnJJRzltSUhSb1pTQnRaV0Z6ZFhKbElHTm9iM05sYmk1Y2JpQWdJQ29nUUcxbGJXSmxjbTltSUUxbFlYTjFjbVZ5WEc0Z0lDQXFMMXh1SUNCd2RXSnNhV01nWjJWMFRXVmhjM1Z5WlNncE9pQkVhWE4wWVc1alpVMWxkSEpwWXlCN1hHNGdJQ0FnWTI5dWMzUWdaR2xqZERvZ2UxdHJaWGs2SUhOMGNtbHVaMTA2SUh0YmEyVjVNam9nYzNSeWFXNW5YVG9nUkdsemRHRnVZMlZOWlhSeWFXTjlmU0E5SUVGMllXbHNZV0pzWlUxbGRISnBZM003WEc0Z0lDQWdjbVYwZFhKdUlHUnBZM1JiZEdocGN5NWtZWFJoVkhsd1pWMWJkR2hwY3k1dFpYUm9iMlJkTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxkSFZ5Ym5NZ1kzVnpkRzl0SUhOMGNtbHVaeUJrYVhOMFlXNWpaU0JpZVNCMGFHVWdaMmwyWlc0Z1pHRjBZU0IwZVhCbExseHVJQ0FnS2lCQWNHRnlZVzBnZTBGMllXbHNZV0pzWlVSaGRHRlVlWEJsYzMwZ1pHRjBZVlI1Y0dVZ1RXVjBjbWxqSjNNZ1pHRjBZU0IwZVhCbFhHNGdJQ0FxSUVCeVpYUjFjbTRnZTNOMGNtbHVaMXRkZlNCTlpYUnlhV01nYm1GdFpYTWdkMmhwWTJnZ1pYaHdaV04wY3lCMGFHVWdaMmwyWlc0Z1pHRjBZU0IwZVhCbFhHNGdJQ0FxSUVCdFpXMWlaWEp2WmlCTlpXRnpkWEpsY2x4dUlDQWdLaTljYmlBZ2NIVmliR2xqSUhOMFlYUnBZeUJuWlhSTlpYUnlhV05DZVVSaGRHRlVlWEJsS0dSaGRHRlVlWEJsT2lCQmRtRnBiR0ZpYkdWRVlYUmhWSGx3WlhNcE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVyWlhsektFRjJZV2xzWVdKc1pVMWxkSEpwWTNOYlpHRjBZVlI1Y0dWZEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCU1pYUjFjbTV6SUcxbGRISnBZeUJ1WVcxbGN5QmhkbUZwYkdGaWJHVXVYRzRnSUNBcUlFQnRaVzFpWlhKdlppQk5aV0Z6ZFhKbGNseHVJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBJR0YyWVdsc1lXSnNaVTFsWVhOMWNtVnpLQ2s2SUhOMGNtbHVaMXRkSUh0Y2JpQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtdGxlWE1vUVhaaGFXeGhZbXhsVFdWMGNtbGpjeWs3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgeyBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvc2ltaWxhcml0eS1tZXRyaWNzJztcbmxldCB6b29tID0gZmFsc2U7XG4vLyBTZWFyY2hlcyBmb3IgYWN0aXZpdHkgY2xpZmZzIGluIGEgY2hlbWljYWwgZGF0YXNldCBieSBzZWxlY3RlZCBjdXRvZmZcbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpdml0eUNsaWZmcyhkZiwgc2VxQ29sLCBheGVzTmFtZXMsIHNjYXR0ZXJUaXRsZSwgYWN0aXZpdGllcywgc2ltaWxhcml0eSwgc2ltaWxhcml0eU1ldHJpYywgbWV0aG9kTmFtZSwgc2VtVHlwZSwgdW5pdHMsIHNlcVNwYWNlRnVuYywgc2ltRnVuYywgdG9vbHRpcERyYXdGdW5jLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgYXV0b21hdGljU2ltaWxhcml0eUxpbWl0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IE1JTl9TSU1JTEFSSVRZID0gODA7XG4gICAgICAgIGNvbnN0IGluaXRpYWxTaW1pbGFyaXR5TGltaXQgPSBhdXRvbWF0aWNTaW1pbGFyaXR5TGltaXQgPyBNSU5fU0lNSUxBUklUWSA6IHNpbWlsYXJpdHkgLyAxMDA7XG4gICAgICAgIGNvbnN0IHsgZGlzdGFuY2UsIGNvb3JkaW5hdGVzIH0gPSB5aWVsZCBzZXFTcGFjZUZ1bmMoe1xuICAgICAgICAgICAgc2VxQ29sOiBzZXFDb2wsXG4gICAgICAgICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxuICAgICAgICAgICAgc2ltaWxhcml0eU1ldHJpYzogc2ltaWxhcml0eU1ldHJpYyxcbiAgICAgICAgICAgIGVtYmVkQXhlc05hbWVzOiBheGVzTmFtZXMsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb29yZGluYXRlcylcbiAgICAgICAgICAgIGRmLmNvbHVtbnMuYWRkKGNvbCk7XG4gICAgICAgIGNvbnN0IGRmU2VxID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtERy5Db2x1bW4uZnJvbUxpc3QoJ3N0cmluZycsICdzZXEnLCBzZXFDb2wudG9MaXN0KCkpXSk7XG4gICAgICAgIGNvbnN0IGRpbSA9IHNlcUNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNpbUFyciA9IEFycmF5KGRpbSAtIDEpO1xuICAgICAgICBpZiAoIWRpc3RhbmNlKVxuICAgICAgICAgICAgeWllbGQgZ2V0U2ltaWxhcml0aWVzTWFyaXgoZGltLCBzZXFDb2wsIGRmU2VxLCBzaW1BcnIsIHNpbUZ1bmMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBnZXRTaW1pbGFyaXRpZXNNYXJpeEZyb21EaXN0YW5jZXMoZGltLCBkaXN0YW5jZSwgc2ltQXJyKTtcbiAgICAgICAgY29uc3Qgb3B0U2ltaWxhcml0eUxpbWl0ID0gaW5pdGlhbFNpbWlsYXJpdHlMaW1pdDtcbiAgICAgICAgY29uc3Qgc2ltVmFscyA9IFtdO1xuICAgICAgICBjb25zdCBzYWxpVmFscyA9IFtdO1xuICAgICAgICBjb25zdCBuMSA9IFtdO1xuICAgICAgICBjb25zdCBuMiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBkaW0gLSAxOyArK2kpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqICE9IGRpbSAtIDEgLSBpOyArK2opIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW0gPSBzaW1BcnJbaV0uZ2V0KGopO1xuICAgICAgICAgICAgICAgIGlmIChzaW0gPj0gb3B0U2ltaWxhcml0eUxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgIG4xLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIG4yLnB1c2goaSArIGogKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgc2ltVmFscy5wdXNoKHNpbSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhhY3Rpdml0aWVzLmdldChpKSAtIGFjdGl2aXRpZXMuZ2V0KGkgKyBqICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2ltICE9IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWxpVmFscy5wdXNoKGRpZmYgLyAoMSAtIHNpbSkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzYWxpVmFscy5wdXNoKEluZmluaXR5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2FsaVZhbHNXaXRob3V0SW5maW5pdHkgPSBzYWxpVmFscy5maWx0ZXIoaXQgPT4gaXQgIT09IEluZmluaXR5KTtcbiAgICAgICAgY29uc3Qgc2FsaU1pbiA9IE1hdGgubWluKC4uLnNhbGlWYWxzV2l0aG91dEluZmluaXR5KTtcbiAgICAgICAgY29uc3Qgc2FsaU1heCA9IE1hdGgubWF4KC4uLnNhbGlWYWxzV2l0aG91dEluZmluaXR5KTtcbiAgICAgICAgY29uc3Qgc2FsaU9wYWNpdHlDb2VmID0gMC44IC8gKHNhbGlNYXggLSBzYWxpTWluKTtcbiAgICAgICAgY29uc3QgbmVpZ2hib3Vyc0NvdW50ID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcbiAgICAgICAgY29uc3Qgc2ltaWxhcml0eUNvdW50ID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcbiAgICAgICAgY29uc3Qgc2FsaUNvdW50ID0gbmV3IEFycmF5KGRpbSkuZmlsbCgwKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgIT0gbjEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG5laWdoYm91cnNDb3VudFtuMVtpXV0gKz0gMTtcbiAgICAgICAgICAgIG5laWdoYm91cnNDb3VudFtuMltpXV0gKz0gMTtcbiAgICAgICAgICAgIHNpbWlsYXJpdHlDb3VudFtuMVtpXV0gKz0gc2ltVmFsc1tpXTtcbiAgICAgICAgICAgIHNpbWlsYXJpdHlDb3VudFtuMltpXV0gKz0gc2ltVmFsc1tpXTtcbiAgICAgICAgICAgIGlmIChzYWxpVmFsc1tpXSAhPSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpdml0aWVzLmdldChuMVtpXSkgPiBhY3Rpdml0aWVzLmdldChuMltpXSkpXG4gICAgICAgICAgICAgICAgICAgIHNhbGlDb3VudFtuMVtpXV0gKz0gc2FsaVZhbHNbaV07XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzYWxpQ291bnRbbjJbaV1dICs9IHNhbGlWYWxzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNhbGkgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIGBzYWxpXyR7YXhlc05hbWVzWzBdLnN1YnN0cmluZyhheGVzTmFtZXNbMF0ubGFzdEluZGV4T2YoJ18nKSl9YCwgc2FsaUNvdW50KTtcbiAgICAgICAgZGYuY29sdW1ucy5hZGQoc2FsaSk7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBncm9rLnNoZWxsLmdldFRhYmxlVmlldyhkZi5uYW1lKTtcbiAgICAgICAgY29uc3Qgc3AgPSB2aWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHtcbiAgICAgICAgICAgIHhDb2x1bW5OYW1lOiBheGVzTmFtZXNbMF0sXG4gICAgICAgICAgICB5Q29sdW1uTmFtZTogYXhlc05hbWVzWzFdLFxuICAgICAgICAgICAgc2l6ZTogc2FsaS5uYW1lLFxuICAgICAgICAgICAgY29sb3I6IGFjdGl2aXRpZXMubmFtZSxcbiAgICAgICAgICAgIHNob3dYU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd1lTZWxlY3RvcjogZmFsc2UsXG4gICAgICAgICAgICBzaG93U2l6ZVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dDb2xvclNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIG1hcmtlck1pblNpemU6IDUsXG4gICAgICAgICAgICBtYXJrZXJNYXhTaXplOiAyNSxcbiAgICAgICAgICAgIHRpdGxlOiBzY2F0dGVyVGl0bGVcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBjYW52YXMgPSBzcC5nZXRJbmZvKClbJ2NhbnZhcyddO1xuICAgICAgICBjb25zdCBsaW5lc1JlcyA9IGNyZWF0ZUxpbmVzKG4xLCBuMiwgc2VxQ29sLCBhY3Rpdml0aWVzLCBzYWxpVmFscywgc2VtVHlwZSwgdW5pdHMpO1xuICAgICAgICBjb25zdCB0b29sdGlwcyA9IHt9O1xuICAgICAgICBsaW5lc1Jlcy5saW5lc0RmLm9uQ3VycmVudENlbGxDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9sSWR4ID0gbGluZXNSZXMubGluZXNEZi5jdXJyZW50Q29sICYmIGxpbmVzUmVzLmxpbmVzRGYuY3VycmVudENvbC5uYW1lID09PSAnMl9zZXEnID8gMSA6IDA7XG4gICAgICAgICAgICBzcC5kYXRhRnJhbWUuY3VycmVudFJvd0lkeCA9XG4gICAgICAgICAgICAgICAgbGluZXNSZXMubGluZXNEZi5jdXJyZW50Um93SWR4ICE9PSAtMSA/IGxpbmVzUmVzLmxpbmVzW2xpbmVzUmVzLmxpbmVzRGYuY3VycmVudFJvd0lkeF0ubW9sc1tjdXJyZW50TW9sSWR4XSA6IC0xO1xuICAgICAgICAgICAgc3AuZGF0YUZyYW1lLnNlbGVjdGlvbi5zZXQoMCwgIWxpbmVzUmVzLmxpbmVzWzBdLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIHNwLmRhdGFGcmFtZS5zZWxlY3Rpb24uc2V0KDAsIGxpbmVzUmVzLmxpbmVzWzBdLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGxpbmVzRGZHcmlkLmludmFsaWRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpbmVzUmVzLmxpbmVzRGYub25TZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmVzUmVzLmxpbmVzRGYubW91c2VPdmVyUm93SWR4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1Jlcy5saW5lc1tsaW5lc1Jlcy5saW5lc0RmLm1vdXNlT3ZlclJvd0lkeF07XG4gICAgICAgICAgICAgICAgbGluZS5zZWxlY3RlZCA9ICFsaW5lLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgIGlmICghbGluZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgZGYuc2VsZWN0aW9uLnNldEFsbChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lc1Jlcy5saW5lcy5mb3JFYWNoKChsKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGwuc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIGwubW9scy5mb3JFYWNoKChtKSA9PiBkZi5zZWxlY3Rpb24uc2V0KG0sIHRydWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGluZXNEZkdyaWQuaW52YWxpZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGluZXNEZkdyaWQgPSBsaW5lc1Jlcy5saW5lc0RmLnBsb3QuZ3JpZCgpLnNvcnQoWydhY3RfZGlmZiddLCBbZmFsc2VdKTtcbiAgICAgICAgbGluZXNEZkdyaWQub25DZWxsQ2xpY2suc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHpvb20gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGlzdENsaWZmc0xpbmsgPSB1aS5idXR0b24oYCR7bGluZXNSZXMubGluZXNEZi5yb3dDb3VudH0gY2xpZmZzYCwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xpZmZzRGlhbG9nID0gdWkuZGlhbG9nKHsgdGl0bGU6ICdBY3Rpdml0eSBjbGlmZnMnIH0pXG4gICAgICAgICAgICAgICAgLmFkZChsaW5lc0RmR3JpZC5yb290KVxuICAgICAgICAgICAgICAgIC5zaG93KCk7XG4gICAgICAgICAgICBjbGlmZnNEaWFsb2cucm9vdC5pZCA9ICdjbGlmZnNfZGlhbG9nJztcbiAgICAgICAgfSk7XG4gICAgICAgIGxpc3RDbGlmZnNMaW5rLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgbGlzdENsaWZmc0xpbmsuc3R5bGUudG9wID0gJzEwcHgnO1xuICAgICAgICBsaXN0Q2xpZmZzTGluay5zdHlsZS5yaWdodCA9ICcxMHB4JztcbiAgICAgICAgc3Aucm9vdC5hcHBlbmQobGlzdENsaWZmc0xpbmspO1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICB0aW1lciA9IGdsb2JhbC5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gY2hlY2tDdXJzb3JPbkxpbmUoZXZlbnQsIGNhbnZhcywgbGluZXNSZXMubGluZXMpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5lICYmIGRmLm1vdXNlT3ZlclJvd0lkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0b29sdGlwc1tsaW5lLmlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJhd1Rvb2x0aXBQYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcHM6IHRvb2x0aXBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IGxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGY6IGRmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcUNvbDogc2VxQ29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0aWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQuY2xpZW50WVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBEcmF3RnVuYyhkcmF3VG9vbHRpcFBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdWkudG9vbHRpcC5zaG93KHRvb2x0aXBzW2xpbmUuaWRdLCBldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBjaGVja0N1cnNvck9uTGluZShldmVudCwgY2FudmFzLCBsaW5lc1Jlcy5saW5lcyk7XG4gICAgICAgICAgICBpZiAobGluZSAmJiBkZi5tb3VzZU92ZXJSb3dJZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZS5zZWxlY3RlZCA9ICFsaW5lLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBsaW5lc1Jlcy5saW5lc0RmLnNlbGVjdGlvbi5zZXQobGluZS5pZCwgbGluZS5zZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluZS5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmLnNlbGVjdGlvbi5zZXRBbGwoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBsaW5lc1Jlcy5saW5lcy5mb3JFYWNoKChsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobC5zZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLm1vbHMuZm9yRWFjaCgobSkgPT4gZGYuc2VsZWN0aW9uLnNldChtLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzUmVzLmxpbmVzRGYuY3VycmVudFJvd0lkeCAhPT0gbGluZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNSZXMubGluZXNEZi5jdXJyZW50Um93SWR4ID0gbGluZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRmLmN1cnJlbnRSb3dJZHggPSBsaW5lLm1vbHNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZi5zZWxlY3Rpb24uc2V0KDAsICFsaW5lc1Jlcy5saW5lc1swXS5zZWxlY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZi5zZWxlY3Rpb24uc2V0KDAsIGxpbmVzUmVzLmxpbmVzWzBdLnNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNwLm9uRXZlbnQoJ2Q0LWJlZm9yZS1kcmF3LXNjZW5lJylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gcmVuZGVyTGluZXMoc3AsIGF4ZXNOYW1lc1swXSwgYXhlc05hbWVzWzFdLCBsaW5lc1Jlcywgc2FsaVZhbHMsIHNhbGlPcGFjaXR5Q29lZiwgc2FsaU1pbik7XG4gICAgICAgICAgICBpZiAoem9vbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gbGluZXNbbGluZXNSZXMubGluZXNEZi5jdXJyZW50Um93SWR4XTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeDEgPSBzcC5kYXRhRnJhbWUuZ2V0KGF4ZXNOYW1lc1swXSwgY3VycmVudExpbmUubW9sc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkxID0gc3AuZGF0YUZyYW1lLmdldChheGVzTmFtZXNbMV0sIGN1cnJlbnRMaW5lLm1vbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4MiA9IHNwLmRhdGFGcmFtZS5nZXQoYXhlc05hbWVzWzBdLCBjdXJyZW50TGluZS5tb2xzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeTIgPSBzcC5kYXRhRnJhbWUuZ2V0KGF4ZXNOYW1lc1sxXSwgY3VycmVudExpbmUubW9sc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhEaWZmID0gTWF0aC5hYnMoeDEgLSB4MikgKiA1O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5RGlmZiA9IE1hdGguYWJzKHkxIC0geTIpICogNTtcbiAgICAgICAgICAgICAgICAgICAgc3Auem9vbSh4MSA8IHgyID8geDEgLSB4RGlmZiA6IHgyIC0geERpZmYsIHkxID4geTIgPyB5MSArIHlEaWZmIDogeTIgKyB5RGlmZiwgeDEgPiB4MiA/IHgxICsgeERpZmYgOiB4MiArIHhEaWZmLCB5MSA8IHkyID8geTEgLSB5RGlmZiA6IHkyIC0geURpZmYpO1xuICAgICAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgICAgICAgICAgem9vbSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3AuYWRkUHJvcGVydHkoJ3NpbWlsYXJpdHlMaW1pdCcsICdkb3VibGUnLCBvcHRTaW1pbGFyaXR5TGltaXQpO1xuICAgICAgICByZXR1cm4gc3A7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjaGVja0N1cnNvck9uTGluZShldmVudCwgY2FudmFzLCBsaW5lcykge1xuICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguYWJzKE1hdGguaHlwb3QobGluZS5hWzBdIC0geCwgbGluZS5hWzFdIC0geSkgK1xuICAgICAgICAgICAgTWF0aC5oeXBvdChsaW5lLmJbMF0gLSB4LCBsaW5lLmJbMV0gLSB5KSAtIE1hdGguaHlwb3QobGluZS5hWzBdIC0gbGluZS5iWzBdLCBsaW5lLmFbMV0gLSBsaW5lLmJbMV0pKTtcbiAgICAgICAgaWYgKGRpc3QgPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gcmVuZGVyTGluZXMoc3AsIHhBeGlzLCB5QXhpcywgbGluZXNSZXMsIHNhbGlWYWxzLCBzYWxpT3BhY2l0eUNvZWYsIHNhbGlNaW4pIHtcbiAgICBjb25zdCBsaW5lcyA9IGxpbmVzUmVzLmxpbmVzO1xuICAgIGNvbnN0IGNhbnZhcyA9IHNwLmdldEluZm8oKVsnY2FudmFzJ107XG4gICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY29uc3QgeCA9IHNwLmRhdGFGcmFtZS5jb2x1bW5zLmJ5TmFtZSh4QXhpcyk7XG4gICAgY29uc3QgeSA9IHNwLmRhdGFGcmFtZS5jb2x1bW5zLmJ5TmFtZSh5QXhpcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2ludEZyb20gPSBzcC53b3JsZFRvU2NyZWVuKHguZ2V0KGxpbmVzW2ldLm1vbHNbMF0pLCB5LmdldChsaW5lc1tpXS5tb2xzWzBdKSk7XG4gICAgICAgIGNvbnN0IHBvaW50VG8gPSBzcC53b3JsZFRvU2NyZWVuKHguZ2V0KGxpbmVzW2ldLm1vbHNbMV0pLCB5LmdldChsaW5lc1tpXS5tb2xzWzFdKSk7XG4gICAgICAgIGxpbmVzW2ldLmEgPSBbcG9pbnRGcm9tLngsIHBvaW50RnJvbS55XTtcbiAgICAgICAgbGluZXNbaV0uYiA9IFtwb2ludFRvLngsIHBvaW50VG8ueV07XG4gICAgICAgIGNvbnN0IGxpbmUgPSBuZXcgUGF0aDJEKCk7XG4gICAgICAgIGxpbmUubW92ZVRvKGxpbmVzW2ldLmFbMF0sIGxpbmVzW2ldLmFbMV0pO1xuICAgICAgICBjb25zdCBjb2xvciA9IGxpbmVzW2ldLnNlbGVjdGVkID8gJzI1NSwyNTUsMCcgOiAnMCwxMjgsMCc7XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSBzYWxpVmFsc1tpXSA9PT0gSW5maW5pdHkgPyAxIDogMC4yICsgKHNhbGlWYWxzW2ldIC0gc2FsaU1pbikgKiBzYWxpT3BhY2l0eUNvZWY7XG4gICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGByZ2JhKCR7Y29sb3J9LCR7b3BhY2l0eX0pYDtcbiAgICAgICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVzW2ldLmlkID09PSBsaW5lc1Jlcy5saW5lc0RmLmN1cnJlbnRSb3dJZHggPyAzIDogMTtcbiAgICAgICAgbGluZS5saW5lVG8obGluZXNbaV0uYlswXSwgbGluZXNbaV0uYlsxXSk7XG4gICAgICAgIGN0eC5zdHJva2UobGluZSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxpbmVzKG4xLCBuMiwgc2VxLCBhY3Rpdml0aWVzLCBzYWxpVmFscywgc2VtVHlwZSwgdW5pdHMpIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbnVtMSA9IG4xW2ldO1xuICAgICAgICBjb25zdCBudW0yID0gbjJbaV07XG4gICAgICAgIGxpbmVzLnB1c2goeyBpZDogaSwgbW9sczogW251bTEsIG51bTJdLCBzZWxlY3RlZDogZmFsc2UsIGE6IFtdLCBiOiBbXSB9KTtcbiAgICB9XG4gICAgY29uc3QgbGluZXNEZiA9IERHLkRhdGFGcmFtZS5jcmVhdGUobGluZXMubGVuZ3RoKTtcbiAgICBsaW5lc0RmLmNvbHVtbnMuYWRkTmV3U3RyaW5nKCcxX3NlcScpLmluaXQoKGkpID0+IHNlcS5nZXQobGluZXNbaV0ubW9sc1swXSkpO1xuICAgIGxpbmVzRGYuY29sdW1ucy5hZGROZXdTdHJpbmcoJzJfc2VxJykuaW5pdCgoaSkgPT4gc2VxLmdldChsaW5lc1tpXS5tb2xzWzFdKSk7XG4gICAgbGluZXNEZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KCdhY3RfZGlmZicpXG4gICAgICAgIC5pbml0KChpKSA9PiBNYXRoLmFicyhhY3Rpdml0aWVzLmdldChsaW5lc1tpXS5tb2xzWzBdKSAtIGFjdGl2aXRpZXMuZ2V0KGxpbmVzW2ldLm1vbHNbMV0pKSk7XG4gICAgbGluZXNEZi5jb2x1bW5zLmFkZE5ld0ludCgnbGluZV9pbmRleCcpLmluaXQoKGkpID0+IGkpO1xuICAgIGxpbmVzRGYuY29sdW1ucy5hZGROZXdGbG9hdCgnc2FsaScpLmluaXQoKGkpID0+IHNhbGlWYWxzW2ldKTtcbiAgICBsaW5lc0RmLmNvbCgnMV9zZXEnKS50YWdzW0RHLlRBR1MuVU5JVFNdID0gdW5pdHM7XG4gICAgbGluZXNEZi5jb2woJzJfc2VxJykudGFnc1tERy5UQUdTLlVOSVRTXSA9IHVuaXRzO1xuICAgIGxpbmVzRGYuY29sKCcxX3NlcScpLnNlbVR5cGUgPSBzZW1UeXBlO1xuICAgIGxpbmVzRGYuY29sKCcyX3NlcScpLnNlbVR5cGUgPSBzZW1UeXBlO1xuICAgIHJldHVybiB7IGxpbmVzLCBsaW5lc0RmIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltaWxhcml0aWVzTWFyaXgoZGltLCBzZXFDb2wsIGRmU2VxLCBzaW1BcnIsIHNpbUZ1bmMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSAhPSBkaW0gLSAxOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vbCA9IHNlcUNvbC5nZXQoaSk7XG4gICAgICAgICAgICBkZlNlcS5yb3dzLnJlbW92ZUF0KDAsIDEsIGZhbHNlKTtcbiAgICAgICAgICAgIHNpbUFycltpXSA9ICh5aWVsZCBzaW1GdW5jKGRmU2VxLmNvbCgnc2VxJyksIG1vbCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW1BcnI7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltaWxhcml0aWVzTWFyaXhGcm9tRGlzdGFuY2VzKGRpbSwgZGlzdGFuY2VzLCBzaW1BcnIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbSAtIDE7ICsraSkge1xuICAgICAgICBjb25zdCBzaW1pbGFyaXR5QXJyID0gW107XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGRpbTsgKytqKVxuICAgICAgICAgICAgc2ltaWxhcml0eUFyci5wdXNoKGdldFNpbWlsYXJpdHlGcm9tRGlzdGFuY2UoZGlzdGFuY2VzW2ldW2pdKSk7XG4gICAgICAgIHNpbUFycltpXSA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCdzaW1pbGFyaXR5JywgRmxvYXQzMkFycmF5LmZyb20oc2ltaWxhcml0eUFycikpO1xuICAgIH1cbiAgICByZXR1cm4gc2ltQXJyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdOMGFYWnBkSGt0WTJ4cFptWnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVlXTjBhWFpwZEhrdFkyeHBabVp6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3p0QlFVRkJMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzYlVKQlFXMUNMRU5CUVVNN1FVRkRNVU1zVDBGQlR5eExRVUZMTEVWQlFVVXNUVUZCVFN4cFFrRkJhVUlzUTBGQlF6dEJRVU4wUXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUlhSRExFOUJRVThzUlVGQlJTeDVRa0ZCZVVJc1JVRkJSU3hOUVVGTkxHdEVRVUZyUkN4RFFVRkRPMEZCYzBNM1JpeEpRVUZKTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkZha0lzZDBWQlFYZEZPMEZCUTNoRkxFMUJRVTBzVlVGQlowSXNhVUpCUVdsQ0xFTkJRMjVETEVWQlFXZENMRVZCUTJoQ0xFMUJRV2xDTEVWQlEycENMRk5CUVcxQ0xFVkJRMjVDTEZsQlFXOUNMRVZCUTNCQ0xGVkJRWEZDTEVWQlEzSkNMRlZCUVd0Q0xFVkJRMnhDTEdkQ1FVRjNRaXhGUVVONFFpeFZRVUZyUWl4RlFVTnNRaXhQUVVGbExFVkJRMllzUzBGQllTeEZRVU5pTEZsQlFUWkZMRVZCUXpkRkxFOUJRVzFGTEVWQlEyNUZMR1ZCUVhGRUxFVkJRM0pFTEU5QlFXRTdPMUZCUTJZc1RVRkJUU3gzUWtGQmQwSXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkRka01zVFVGQlRTeGpRVUZqTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUlRGQ0xFMUJRVTBzYzBKQlFYTkNMRWRCUVVjc2QwSkJRWGRDTEVOQlFVTXNRMEZCUXl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeEhRVUZITEVkQlFVY3NRMEZCUXp0UlFVVTFSaXhOUVVGTkxFVkJRVU1zVVVGQlVTeEZRVUZGTEZkQlFWY3NSVUZCUXl4SFFVRkhMRTFCUVUwc1dVRkJXU3hEUVVGRE8xbEJRMnBFTEUxQlFVMHNSVUZCUlN4TlFVRk5PMWxCUTJRc1ZVRkJWU3hGUVVGRkxGVkJRVlU3V1VGRGRFSXNaMEpCUVdkQ0xFVkJRVVVzWjBKQlFXZENPMWxCUTJ4RExHTkJRV01zUlVGQlJTeFRRVUZUTzFsQlEzcENMRTlCUVU4c1JVRkJSU3hQUVVGUE8xTkJRMnBDTEVOQlFVTXNRMEZCUXp0UlFVVklMRXRCUVVzc1RVRkJUU3hIUVVGSExFbEJRVWtzVjBGQlZ6dFpRVU16UWl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVVjBRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRkZCUVZFc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJReTlHTEUxQlFVMHNSMEZCUnl4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4TlFVRk5MRWRCUVdkQ0xFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZNME1zU1VGQlNTeERRVUZETEZGQlFWRTdXVUZEV0N4TlFVRk5MRzlDUVVGdlFpeERRVUZETEVkQlFVY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXpzN1dVRkZhRVVzYVVOQlFXbERMRU5CUVVNc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVVXpSQ3hOUVVGTkxHdENRVUZyUWl4SFFVRkhMSE5DUVVGelFpeERRVUZETzFGQlJXeEVMRTFCUVUwc1QwRkJUeXhIUVVGaExFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRkZCUVZFc1IwRkJZU3hGUVVGRkxFTkJRVU03VVVGRE9VSXNUVUZCVFN4RlFVRkZMRWRCUVdFc1JVRkJSU3hEUVVGRE8xRkJRM2hDTEUxQlFVMHNSVUZCUlN4SFFVRmhMRVZCUVVVc1EwRkJRenRSUVVWNFFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVOcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3WjBKQlEzSkRMRTFCUVUwc1IwRkJSeXhIUVVGWExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJYSkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxHdENRVUZyUWl4RlFVRkZPMjlDUVVNM1FpeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU5ZTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRia0lzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGJFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTnlSU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETzNkQ1FVTldMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03TzNkQ1FVVm9ReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMmxDUVVNelFqdGhRVU5HTzFOQlEwWTdVVUZGUkN4TlFVRk5MSFZDUVVGMVFpeEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRka1VzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVFVGQlRTeGxRVUZsTEVkQlFVY3NSMEZCUnl4SFFVRkRMRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETzFGQlIyaEVMRTFCUVUwc1pVRkJaU3hIUVVGSExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU12UXl4TlFVRk5MR1ZCUVdVc1IwRkJSeXhKUVVGSkxFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGREwwTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1NVRkJTU3hMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSWHBETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xbEJRMjVETEdWQlFXVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZETlVJc1pVRkJaU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVNMVFpeGxRVUZsTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKRExHVkJRV1VzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEY2tNc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NVVUZCVVN4RlFVRkZPMmRDUVVNelFpeEpRVUZKTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUXk5RExGTkJRVk1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMjlDUVVWb1F5eFRRVUZUTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMkZCUTI1RE8xTkJRMFk3VVVGRlJDeE5RVUZOTEVsQlFVa3NSMEZCWXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eFJRVUZSTEVWQlFVVXNVVUZCVVN4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8xRkJSV3BKTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlJYSkNMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU01UXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5zUkN4WFFVRlhMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42UWl4WFFVRlhMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU42UWl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFbEJRVWs3V1VGRFppeExRVUZMTEVWQlFVVXNWVUZCVlN4RFFVRkRMRWxCUVVrN1dVRkRkRUlzWVVGQllTeEZRVUZGTEV0QlFVczdXVUZEY0VJc1lVRkJZU3hGUVVGRkxFdEJRVXM3V1VGRGNFSXNaMEpCUVdkQ0xFVkJRVVVzUzBGQlN6dFpRVU4yUWl4cFFrRkJhVUlzUlVGQlJTeExRVUZMTzFsQlEzaENMR0ZCUVdFc1JVRkJSU3hEUVVGRE8xbEJRMmhDTEdGQlFXRXNSVUZCUlN4RlFVRkZPMWxCUTJwQ0xFdEJRVXNzUlVGQlJTeFpRVUZaTzFOQlEzQkNMRU5CUVVNc1EwRkJlVUlzUTBGQlF6dFJRVVUxUWl4TlFVRk5MRTFCUVUwc1IwRkJTU3hGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRMME1zVFVGQlRTeFJRVUZSTEVkQlFVY3NWMEZCVnl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4UlFVRlJMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlEyNUdMRTFCUVUwc1VVRkJVU3hIUVVGUkxFVkJRVVVzUTBGQlF6dFJRVVY2UWl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFVkJRVVU3V1VGRGJrUXNUVUZCVFN4aFFVRmhMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVsQlFVa3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeExRVUZMTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZETVVjc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eGhRVUZoTzJkQ1FVTjRRaXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEYkVnc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03V1VGRE0wUXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMWxCUXpGRUxGZEJRVmNzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0UlFVTXpRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRGJFUXNTVUZCU1N4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExHVkJRV1VzUzBGQlN5eERRVUZETEVOQlFVTXNSVUZCUlR0blFrRkRNME1zVFVGQlRTeEpRVUZKTEVkQlFVY3NVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRPMmRDUVVNNVJDeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dG5Ra0ZETDBJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTzI5Q1FVTm9RaXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRoUVVNNVFqdFpRVU5FTEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdaMEpCUXpOQ0xFbEJRVWtzUTBGQlF5eERRVUZETEZGQlFWRTdiMEpCUTFvc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzSkVMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzVjBGQlZ5eERRVUZETEZWQlFWVXNSVUZCUlN4RFFVRkRPMUZCUXpOQ0xFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJVZ3NUVUZCVFN4WFFVRlhMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVGRGTEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUlVGQlJUdFpRVU55UXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMlFzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGU0N4TlFVRk5MR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxGTkJRVk1zUlVGQlJTeEhRVUZITEVWQlFVVTdXVUZETTBVc1RVRkJUU3haUVVGWkxFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkRMRXRCUVVzc1JVRkJSU3hwUWtGQmFVSXNSVUZCUXl4RFFVRkRPMmxDUVVOMlJDeEhRVUZITEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJRenRwUWtGRGNrSXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRWaXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4bFFVRmxMRU5CUVVNN1VVRkRla01zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUjBGQlJ5eFZRVUZWTEVOQlFVTTdVVUZETTBNc1kwRkJZeXhEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUTJ4RExHTkJRV01zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJRenRSUVVOd1F5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dFJRVVV2UWl4SlFVRkpMRXRCUVhGQ0xFTkJRVU03VVVGRE1VSXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEZkQlFWY3NSVUZCUlN4VlFVRlZMRXRCUVdsQ08xbEJRemxFTEZsQlFWa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRaUVVOd1FpeExRVUZMTEVkQlFVY3NUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkJRenRuUWtGRGVFSXNUVUZCVFN4SlFVRkpMRWRCUVVjc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdaMEpCUXpsRUxFbEJRVWtzU1VGQlNTeEpRVUZKTEVWQlFVVXNRMEZCUXl4bFFVRmxMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVU3YjBKQlEzSkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZPM2RDUVVOMFFpeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSE96UkNRVU40UWl4UlFVRlJMRVZCUVVVc1VVRkJVVHMwUWtGRGJFSXNTVUZCU1N4RlFVRkZMRWxCUVVrN05FSkJRMVlzUlVGQlJTeEZRVUZGTEVWQlFVVTdORUpCUTA0c1RVRkJUU3hGUVVGRkxFMUJRVTA3TkVKQlEyUXNVVUZCVVN4RlFVRkZMRlZCUVZVN05FSkJRM0JDTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1QwRkJUenMwUWtGRGFFSXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhQUVVGUE8zbENRVU5xUWl4RFFVRkJPM2RDUVVORUxHVkJRV1VzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE8zRkNRVU53UXp0dlFrRkRSQ3hGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzJsQ1FVTnNSVHRaUVVOSUxFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTllMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGZEJRVmNzUlVGQlJTeFZRVUZUTEV0QlFXbENPMWxCUXpkRUxFMUJRVTBzU1VGQlNTeEhRVUZITEdsQ1FVRnBRaXhEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xbEJRemxFTEVsQlFVa3NTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhsUVVGbExFdEJRVXNzUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTNKRExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlR0dlFrRkRha0lzU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU03YjBKQlF5OUNMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0dlFrRkZka1FzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJPM2RDUVVOb1FpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dHZRa0ZGTjBJc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSVHQzUWtGRE0wSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1VVRkJVVHMwUWtGRFdpeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRM0pFTEVOQlFVTXNRMEZCUXl4RFFVRkRPMmxDUVVOS08zRkNRVUZOTzI5Q1FVTk1MRWxCUVVrc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEV0QlFVc3NTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSVHQzUWtGRE9VTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXp0M1FrRkRla01zUlVGQlJTeERRVUZETEdGQlFXRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTm9ReXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8zZENRVU5xUkN4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0eFFrRkRha1E3YVVKQlEwWTdZVUZEUmp0UlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4elFrRkJjMElzUTBGQlF6dGhRVU12UWl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5tTEUxQlFVMHNTMEZCU3l4SFFVRkhMRmRCUVZjc1EwRkJReXhGUVVGRkxFVkJRekZDTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVVUZCVVN4RlFVRkZMRkZCUVZFc1JVRkJSU3hsUVVGbExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdXVUZETlVVc1NVRkJTU3hKUVVGSkxFVkJRVVU3WjBKQlExSXNUVUZCVFN4WFFVRlhMRWRCUVVjc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1owSkJRekZFTEZWQlFWVXNRMEZCUXl4SFFVRkZMRVZCUVVVN2IwSkJRMklzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0dlFrRkRMMFFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOc1F5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUXl4RFFVRkRMRU5CUVVNN2IwSkJRMnhETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEV0QlFVc3NSVUZEZGtNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZKTEV0QlFVc3NSVUZEYkVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEV0QlFVc3NSVUZEYWtNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRPMmRDUVVOMlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRMUlzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXp0aFFVTmtPMUZCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRlRDeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEZGQlFWRXNSVUZCUlN4clFrRkJhMElzUTBGQlF5eERRVUZETzFGQlEyaEZMRTlCUVU4c1JVRkJSU3hEUVVGRE8wbEJRMW9zUTBGQlF6dERRVUZCTzBGQlJVUXNVMEZCVXl4cFFrRkJhVUlzUTBGQlF5eExRVUZWTEVWQlFVVXNUVUZCVnl4RlFVRkZMRXRCUVdNN1NVRkRhRVVzVFVGQlRTeEpRVUZKTEVkQlFVY3NUVUZCVFN4RFFVRkRMSEZDUVVGeFFpeEZRVUZGTEVOQlFVTTdTVUZETlVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRE8wbEJRM0JETEUxQlFVMHNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0SlFVTnVReXhMUVVGTExFMUJRVTBzU1VGQlNTeEpRVUZKTEV0QlFVc3NSVUZCUlR0UlFVTjRRaXhOUVVGTkxFbEJRVWtzUjBGRFVpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGFrUXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRka2NzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXp0WlFVTldMRTlCUVU4c1NVRkJTU3hEUVVGRE8wdEJRMlk3U1VGRFJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0QlFVTmtMRU5CUVVNN1FVRkZSQ3hUUVVGVExGZEJRVmNzUTBGQlF5eEZRVUYzUWl4RlFVTXpReXhMUVVGaExFVkJRVVVzUzBGQllTeEZRVUZGTEZGQlFYZENMRVZCUVVVc1VVRkJhMElzUlVGQlJTeGxRVUYxUWl4RlFVRkZMRTlCUVdVN1NVRkRjRWdzVFVGQlRTeExRVUZMTEVkQlFVY3NVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJRenRKUVVNM1FpeE5RVUZOTEUxQlFVMHNSMEZCU1N4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVFNFFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMGxCUTI1RkxFMUJRVTBzUjBGQlJ5eEhRVUZITEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVFMlFpeERRVUZETzBsQlEyaEZMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eFRRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dEpRVU01UXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlZTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03U1VGRE9VTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3VVVGRGNrTXNUVUZCVFN4VFFVRlRMRWRCUVVjc1JVRkJSU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKR0xFMUJRVTBzVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU51Uml4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZUVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNCRExFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRNVUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF6dFJRVU14UkN4TlFVRk5MRTlCUVU4c1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNSMEZCUXl4bFFVRmxMRU5CUVVNN1VVRkROMFlzUjBGQlJ5eERRVUZETEZkQlFWY3NSMEZCUnl4UlFVRlJMRXRCUVVzc1NVRkJTU3hQUVVGUExFZEJRVWNzUTBGQlF6dFJRVU01UXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzWkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTnNRanRKUVVORUxFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRk5CUVZNc1YwRkJWeXhEUVVOc1FpeEZRVUZaTEVWQlExb3NSVUZCV1N4RlFVTmFMRWRCUVdNc1JVRkRaQ3hWUVVGeFFpeEZRVU55UWl4UlFVRnJRaXhGUVVOc1FpeFBRVUZsTEVWQlEyWXNTMEZCWVR0SlFVTmlMRTFCUVUwc1MwRkJTeXhIUVVGWkxFVkJRVVVzUTBGQlF6dEpRVU14UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU5zUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYmtJc1RVRkJUU3hKUVVGSkxFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTI1Q0xFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hSUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTTdTMEZEZUVVN1NVRkRSQ3hOUVVGTkxFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYkVRc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzSkdMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVk1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU55Uml4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eFZRVUZWTEVOQlFVTTdVMEZEY0VNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjBSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZUTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJReTlFTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVZNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja1VzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03U1VGRGJFUXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTVUZEYkVRc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlFVVXNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRE8wbEJRM2hETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1QwRkJUeXhEUVVGRkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXp0SlFVTjRReXhQUVVGUExFVkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUXl4RFFVRkRPMEZCUXpGQ0xFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFXZENMRzlDUVVGdlFpeERRVU4wUXl4SFFVRlhMRVZCUTFnc1RVRkJhVUlzUlVGRGFrSXNTMEZCYlVJc1JVRkRia0lzVFVGQmJVSXNSVUZEYmtJc1QwRkJiVVU3TzFGQlIzSkZMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEycERMRTFCUVUwc1IwRkJSeXhIUVVGSExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRNVUlzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTnFReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRkxFTkJRVU03VTBGRGRFUTdVVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRKUVVOb1FpeERRVUZETzBOQlFVRTdRVUZGUkN4TlFVRk5MRlZCUVZVc2FVTkJRV2xETEVOQlFVTXNSMEZCVnl4RlFVRkZMRk5CUVdsQ0xFVkJRVVVzVFVGQmJVSTdTVUZGYmtjc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1IwRkJSeXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEYUVNc1RVRkJUU3hoUVVGaExFZEJRVWNzUlVGQlJTeERRVUZETzFGQlEzcENMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF6dFpRVU01UWl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExIbENRVUY1UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRha1VzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1dVRkJXU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVONFJqdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNXBiWEJ2Y25RZ0tpQmhjeUIxYVNCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdmRXa25PMXh1YVcxd2IzSjBJSHNnVFdGMGNtbDRJSDBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUhzZ1oyVjBVMmx0YVd4aGNtbDBlVVp5YjIxRWFYTjBZVzVqWlNCOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzTnBiV2xzWVhKcGRIa3RiV1YwY21samN5YzdYRzVjYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnU1V4cGJtVWdlMXh1SUNCcFpEb2diblZ0WW1WeU8xeHVJQ0J0YjJ4ek9pQnVkVzFpWlhKYlhUdGNiaUFnYzJWc1pXTjBaV1E2SUdKdmIyeGxZVzQ3WEc0Z0lHRTZJRzUxYldKbGNsdGRPeUF2THlCYmVDd2dlVjFjYmlBZ1lqb2diblZ0WW1WeVcxMDdJQzh2SUZ0NExDQjVYVnh1ZlZ4dVhHNXBiblJsY21aaFkyVWdTVkpsYm1SbGNtVmtUR2x1WlhNZ2UxeHVJQ0JzYVc1bGN6b2dTVXhwYm1WYlhUdGNiaUFnYkdsdVpYTkVaam9nUkVjdVJHRjBZVVp5WVcxbE8xeHVmVnh1WEc1bGVIQnZjblFnYVc1MFpYSm1ZV05sSUVsVFpYRjFaVzVqWlZOd1lXTmxVR0Z5WVcxeklIdGNiaUFnSUNCelpYRkRiMnc2SUVSSExrTnZiSFZ0Yml4Y2JpQWdJQ0J0WlhSb2IyUk9ZVzFsT2lCemRISnBibWNzWEc0Z0lDQWdjMmx0YVd4aGNtbDBlVTFsZEhKcFl6b2djM1J5YVc1bkxGeHVJQ0FnSUdWdFltVmtRWGhsYzA1aGJXVnpPaUJ6ZEhKcGJtZGJYU3hjYmlBZ0lDQnZjSFJwYjI1elB6b2dZVzU1WEc1OVhHNWNibVY0Y0c5eWRDQnBiblJsY21aaFkyVWdTVk5sY1hWbGJtTmxVM0JoWTJWU1pYTjFiSFFnZTF4dUlDQWdJR1JwYzNSaGJtTmxPaUJOWVhSeWFYZzdYRzRnSUNBZ1kyOXZjbVJwYm1GMFpYTTZJRVJITGtOdmJIVnRia3hwYzNRN1hHNGdJSDFjYmx4dVpYaHdiM0owSUdsdWRHVnlabUZqWlNCSlJISmhkMVJ2YjJ4MGFYQlFZWEpoYlhNZ2UxeHVJQ0IwYjI5c2RHbHdjem9nWVc1NUxGeHVJQ0JzYVc1bE9pQkpUR2x1WlN4Y2JpQWdaR1k2SUVSSExrUmhkR0ZHY21GdFpTeGNiaUFnYzJWeFEyOXNPaUJFUnk1RGIyeDFiVzRzWEc0Z0lHRmpkR2wyYVhSNU9pQkVSeTVEYjJ4MWJXNHNYRzRnSUhnNklHNTFiV0psY2l4Y2JpQWdlVG9nYm5WdFltVnlYRzU5WEc1Y2JteGxkQ0I2YjI5dElEMGdabUZzYzJVN1hHNWNiaTh2SUZObFlYSmphR1Z6SUdadmNpQmhZM1JwZG1sMGVTQmpiR2xtWm5NZ2FXNGdZU0JqYUdWdGFXTmhiQ0JrWVhSaGMyVjBJR0o1SUhObGJHVmpkR1ZrSUdOMWRHOW1abHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlHZGxkRUZqZEdsMmFYUjVRMnhwWm1aektGeHVJQ0FnSUdSbU9pQkVSeTVFWVhSaFJuSmhiV1VzSUZ4dUlDQWdJSE5sY1VOdmJEb2dSRWN1UTI5c2RXMXVMQ0JjYmlBZ0lDQmhlR1Z6VG1GdFpYTTZJSE4wY21sdVoxdGRMRnh1SUNBZ0lITmpZWFIwWlhKVWFYUnNaVG9nYzNSeWFXNW5MRnh1SUNBZ0lHRmpkR2wyYVhScFpYTTZJRVJITGtOdmJIVnRiaXdnWEc0Z0lDQWdjMmx0YVd4aGNtbDBlVG9nYm5WdFltVnlMRnh1SUNBZ0lITnBiV2xzWVhKcGRIbE5aWFJ5YVdNNklITjBjbWx1Wnl3Z1hHNGdJQ0FnYldWMGFHOWtUbUZ0WlRvZ2MzUnlhVzVuTENCY2JpQWdJQ0J6WlcxVWVYQmxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2RXNXBkSE02SUhOMGNtbHVaeXhjYmlBZ0lDQnpaWEZUY0dGalpVWjFibU02SUNod1lYSmhiWE02SUVsVFpYRjFaVzVqWlZOd1lXTmxVR0Z5WVcxektTQTlQaUJRY205dGFYTmxQRWxUWlhGMVpXNWpaVk53WVdObFVtVnpkV3gwUGl4Y2JpQWdJQ0J6YVcxR2RXNWpPaUFvWTI5c09pQkVSeTVEYjJ4MWJXNHNJRzF2YkRvZ2MzUnlhVzVuS1NBOVBpQlFjbTl0YVhObFBFUkhMa052YkhWdGJpQjhJRzUxYkd3K0xGeHVJQ0FnSUhSdmIyeDBhWEJFY21GM1JuVnVZem9nS0hCaGNtRnRjem9nU1VSeVlYZFViMjlzZEdsd1VHRnlZVzF6S1NBOVBpQjJiMmxrTEZ4dUlDQWdJRzl3ZEdsdmJuTS9PaUJoYm5rcElEb2dVSEp2YldselpUeEVSeTVXYVdWM1pYSStJSHRjYmlBZ1kyOXVjM1FnWVhWMGIyMWhkR2xqVTJsdGFXeGhjbWwwZVV4cGJXbDBJRDBnWm1Gc2MyVTdYRzRnSUdOdmJuTjBJRTFKVGw5VFNVMUpURUZTU1ZSWklEMGdPREE3WEc1Y2JpQWdZMjl1YzNRZ2FXNXBkR2xoYkZOcGJXbHNZWEpwZEhsTWFXMXBkQ0E5SUdGMWRHOXRZWFJwWTFOcGJXbHNZWEpwZEhsTWFXMXBkQ0EvSUUxSlRsOVRTVTFKVEVGU1NWUlpJRG9nYzJsdGFXeGhjbWwwZVNBdklERXdNRHRjYmx4dUlDQmpiMjV6ZENCN1pHbHpkR0Z1WTJVc0lHTnZiM0prYVc1aGRHVnpmU0E5SUdGM1lXbDBJSE5sY1ZOd1lXTmxSblZ1WXloN1hHNGdJQ0FnYzJWeFEyOXNPaUJ6WlhGRGIyd3NYRzRnSUNBZ2JXVjBhRzlrVG1GdFpUb2diV1YwYUc5a1RtRnRaU3hjYmlBZ0lDQnphVzFwYkdGeWFYUjVUV1YwY21sak9pQnphVzFwYkdGeWFYUjVUV1YwY21sakxGeHVJQ0FnSUdWdFltVmtRWGhsYzA1aGJXVnpPaUJoZUdWelRtRnRaWE1zWEc0Z0lDQWdiM0IwYVc5dWN6b2diM0IwYVc5dWMxeHVJQ0I5S1R0Y2JseHVJQ0JtYjNJZ0tHTnZibk4wSUdOdmJDQnZaaUJqYjI5eVpHbHVZWFJsY3lsY2JpQWdJQ0JrWmk1amIyeDFiVzV6TG1Ga1pDaGpiMndwTzF4dVhHNGdJR052Ym5OMElHUm1VMlZ4SUQwZ1JFY3VSR0YwWVVaeVlXMWxMbVp5YjIxRGIyeDFiVzV6S0Z0RVJ5NURiMngxYlc0dVpuSnZiVXhwYzNRb0ozTjBjbWx1Wnljc0lDZHpaWEVuTENCelpYRkRiMnd1ZEc5TWFYTjBLQ2twWFNrN1hHNGdJR052Ym5OMElHUnBiU0E5SUhObGNVTnZiQzVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJSE5wYlVGeWNqb2dSRWN1UTI5c2RXMXVXMTBnUFNCQmNuSmhlU2hrYVcwZ0xTQXhLVHRjYmx4dUlDQnBaaUFvSVdScGMzUmhibU5sS1Z4dUlDQWdJR0YzWVdsMElHZGxkRk5wYldsc1lYSnBkR2xsYzAxaGNtbDRLR1JwYlN3Z2MyVnhRMjlzTENCa1psTmxjU3dnYzJsdFFYSnlMQ0J6YVcxR2RXNWpLVHRjYmlBZ1pXeHpaVnh1SUNBZ0lHZGxkRk5wYldsc1lYSnBkR2xsYzAxaGNtbDRSbkp2YlVScGMzUmhibU5sY3loa2FXMHNJR1JwYzNSaGJtTmxMQ0J6YVcxQmNuSXBPMXh1WEc0Z0lHTnZibk4wSUc5d2RGTnBiV2xzWVhKcGRIbE1hVzFwZENBOUlHbHVhWFJwWVd4VGFXMXBiR0Z5YVhSNVRHbHRhWFE3WEc1Y2JpQWdZMjl1YzNRZ2MybHRWbUZzY3pvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmlBZ1kyOXVjM1FnYzJGc2FWWmhiSE02SUc1MWJXSmxjbHRkSUQwZ1cxMDdYRzRnSUdOdmJuTjBJRzR4T2lCdWRXMWlaWEpiWFNBOUlGdGRPMXh1SUNCamIyNXpkQ0J1TWpvZ2JuVnRZbVZ5VzEwZ1BTQmJYVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQWhQU0JrYVcwZ0xTQXhPeUFySzJrcElIdGNiaUFnSUNCbWIzSWdLR3hsZENCcUlEMGdNRHNnYWlBaFBTQmthVzBnTFNBeElDMGdhVHNnS3l0cUtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCemFXMDZJRzUxYldKbGNpQTlJSE5wYlVGeWNsdHBYUzVuWlhRb2FpazdYRzVjYmlBZ0lDQWdJR2xtSUNoemFXMGdQajBnYjNCMFUybHRhV3hoY21sMGVVeHBiV2wwS1NCN1hHNGdJQ0FnSUNBZ0lHNHhMbkIxYzJnb2FTazdYRzRnSUNBZ0lDQWdJRzR5TG5CMWMyZ29hU0FySUdvZ0t5QXhLVHRjYmlBZ0lDQWdJQ0FnYzJsdFZtRnNjeTV3ZFhOb0tITnBiU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR1JwWm1ZZ1BTQk5ZWFJvTG1GaWN5aGhZM1JwZG1sMGFXVnpMbWRsZENocEtTQXRJR0ZqZEdsMmFYUnBaWE11WjJWMEtHa2dLeUJxSUNzZ01Ta3BPMXh1SUNBZ0lDQWdJQ0JwWmlBb2MybHRJQ0U5SURFcFhHNGdJQ0FnSUNBZ0lDQWdjMkZzYVZaaGJITXVjSFZ6YUNoa2FXWm1JQzhnS0RFZ0xTQnphVzBwS1R0Y2JpQWdJQ0FnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdJQ0FnSUhOaGJHbFdZV3h6TG5CMWMyZ29TVzVtYVc1cGRIa3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJR052Ym5OMElITmhiR2xXWVd4elYybDBhRzkxZEVsdVptbHVhWFI1SUQwZ2MyRnNhVlpoYkhNdVptbHNkR1Z5S0dsMElEMCtJR2wwSUNFOVBTQkpibVpwYm1sMGVTazdYRzRnSUdOdmJuTjBJSE5oYkdsTmFXNGdQU0JOWVhSb0xtMXBiaWd1TGk1ellXeHBWbUZzYzFkcGRHaHZkWFJKYm1acGJtbDBlU2s3WEc0Z0lHTnZibk4wSUhOaGJHbE5ZWGdnUFNCTllYUm9MbTFoZUNndUxpNXpZV3hwVm1Gc2MxZHBkR2h2ZFhSSmJtWnBibWwwZVNrN1hHNGdJR052Ym5OMElITmhiR2xQY0dGamFYUjVRMjlsWmlBOUlEQXVPQzhvYzJGc2FVMWhlQ0F0SUhOaGJHbE5hVzRwTzF4dVhHNWNiaUFnWTI5dWMzUWdibVZwWjJoaWIzVnljME52ZFc1MElEMGdibVYzSUVGeWNtRjVLR1JwYlNrdVptbHNiQ2d3S1R0Y2JpQWdZMjl1YzNRZ2MybHRhV3hoY21sMGVVTnZkVzUwSUQwZ2JtVjNJRUZ5Y21GNUtHUnBiU2t1Wm1sc2JDZ3dLVHRjYmlBZ1kyOXVjM1FnYzJGc2FVTnZkVzUwSUQwZ2JtVjNJRUZ5Y21GNUtHUnBiU2t1Wm1sc2JDZ3dLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQWhQU0J1TVM1c1pXNW5kR2c3SUNzcmFTa2dlMXh1SUNBZ0lHNWxhV2RvWW05MWNuTkRiM1Z1ZEZ0dU1WdHBYVjBnS3owZ01UdGNiaUFnSUNCdVpXbG5hR0p2ZFhKelEyOTFiblJiYmpKYmFWMWRJQ3M5SURFN1hHNGdJQ0FnYzJsdGFXeGhjbWwwZVVOdmRXNTBXMjR4VzJsZFhTQXJQU0J6YVcxV1lXeHpXMmxkTzF4dUlDQWdJSE5wYldsc1lYSnBkSGxEYjNWdWRGdHVNbHRwWFYwZ0t6MGdjMmx0Vm1Gc2MxdHBYVHRjYmlBZ0lDQnBaaUFvYzJGc2FWWmhiSE5iYVYwZ0lUMGdTVzVtYVc1cGRIa3BJSHRjYmlBZ0lDQWdJR2xtSUNoaFkzUnBkbWwwYVdWekxtZGxkQ2h1TVZ0cFhTa2dQaUJoWTNScGRtbDBhV1Z6TG1kbGRDaHVNbHRwWFNrcFhHNGdJQ0FnSUNBZ0lITmhiR2xEYjNWdWRGdHVNVnRwWFYwZ0t6MGdjMkZzYVZaaGJITmJhVjA3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lITmhiR2xEYjNWdWRGdHVNbHRwWFYwZ0t6MGdjMkZzYVZaaGJITmJhVjA3WEc0Z0lDQWdmVnh1SUNCOVhHNWNiaUFnWTI5dWMzUWdjMkZzYVRvZ1JFY3VRMjlzZFcxdUlEMGdSRWN1UTI5c2RXMXVMbVp5YjIxTWFYTjBLQ2RrYjNWaWJHVW5MQ0JnYzJGc2FWOGtlMkY0WlhOT1lXMWxjMXN3WFM1emRXSnpkSEpwYm1jb1lYaGxjMDVoYldWeld6QmRMbXhoYzNSSmJtUmxlRTltS0NkZkp5a3BmV0FzSUhOaGJHbERiM1Z1ZENrN1hHNWNiaUFnWkdZdVkyOXNkVzF1Y3k1aFpHUW9jMkZzYVNrN1hHNWNiaUFnWTI5dWMzUWdkbWxsZHlBOUlHZHliMnN1YzJobGJHd3VaMlYwVkdGaWJHVldhV1YzS0dSbUxtNWhiV1VwTzF4dUlDQmpiMjV6ZENCemNDQTlJSFpwWlhjdVlXUmtWbWxsZDJWeUtFUkhMbFpwWlhkbGNpNXpZMkYwZEdWeVVHeHZkQ2hrWml3Z2UxeHVJQ0FnSUhoRGIyeDFiVzVPWVcxbE9pQmhlR1Z6VG1GdFpYTmJNRjBzWEc0Z0lDQWdlVU52YkhWdGJrNWhiV1U2SUdGNFpYTk9ZVzFsYzFzeFhTeGNiaUFnSUNCemFYcGxPaUJ6WVd4cExtNWhiV1VzWEc0Z0lDQWdZMjlzYjNJNklHRmpkR2wyYVhScFpYTXVibUZ0WlN4Y2JpQWdJQ0J6YUc5M1dGTmxiR1ZqZEc5eU9pQm1ZV3h6WlN4Y2JpQWdJQ0J6YUc5M1dWTmxiR1ZqZEc5eU9pQm1ZV3h6WlN4Y2JpQWdJQ0J6YUc5M1UybDZaVk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNRMjlzYjNKVFpXeGxZM1J2Y2pvZ1ptRnNjMlVzWEc0Z0lDQWdiV0Z5YTJWeVRXbHVVMmw2WlRvZ05TeGNiaUFnSUNCdFlYSnJaWEpOWVhoVGFYcGxPaUF5TlN4Y2JpQWdJQ0IwYVhSc1pUb2djMk5oZEhSbGNsUnBkR3hsWEc0Z0lIMHBLU0JoY3lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNqdGNibHh1SUNCamIyNXpkQ0JqWVc1MllYTWdQU0FvYzNBdVoyVjBTVzVtYnlncElHRnpJR0Z1ZVNsYkoyTmhiblpoY3lkZE8xeHVJQ0JqYjI1emRDQnNhVzVsYzFKbGN5QTlJR055WldGMFpVeHBibVZ6S0c0eExDQnVNaXdnYzJWeFEyOXNMQ0JoWTNScGRtbDBhV1Z6TENCellXeHBWbUZzY3l3Z2MyVnRWSGx3WlN3Z2RXNXBkSE1wTzF4dUlDQmpiMjV6ZENCMGIyOXNkR2x3Y3pvZ1lXNTVJRDBnZTMwN1hHNWNiaUFnYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV2YmtOMWNuSmxiblJEWld4c1EyaGhibWRsWkM1emRXSnpZM0pwWW1Vb0tDa2dQVDRnZTF4dUlDQWdJR052Ym5OMElHTjFjbkpsYm5STmIyeEpaSGdnUFNCc2FXNWxjMUpsY3k1c2FXNWxjMFJtTG1OMWNuSmxiblJEYjJ3Z0ppWWdiR2x1WlhOU1pYTXViR2x1WlhORVppNWpkWEp5Wlc1MFEyOXNMbTVoYldVZ1BUMDlJQ2N5WDNObGNTY2dQeUF4SURvZ01EdGNiaUFnSUNCemNDNWtZWFJoUm5KaGJXVXVZM1Z5Y21WdWRGSnZkMGxrZUNBOVhHNGdJQ0FnSUNCc2FXNWxjMUpsY3k1c2FXNWxjMFJtTG1OMWNuSmxiblJTYjNkSlpIZ2dJVDA5SUMweElEOGdiR2x1WlhOU1pYTXViR2x1WlhOYmJHbHVaWE5TWlhNdWJHbHVaWE5FWmk1amRYSnlaVzUwVW05M1NXUjRYUzV0YjJ4elcyTjFjbkpsYm5STmIyeEpaSGhkSURvZ0xURTdYRzRnSUNBZ2MzQXVaR0YwWVVaeVlXMWxMbk5sYkdWamRHbHZiaTV6WlhRb01Dd2dJV3hwYm1WelVtVnpMbXhwYm1Weld6QmRMbk5sYkdWamRHVmtLVHRjYmlBZ0lDQnpjQzVrWVhSaFJuSmhiV1V1YzJWc1pXTjBhVzl1TG5ObGRDZ3dMQ0JzYVc1bGMxSmxjeTVzYVc1bGMxc3dYUzV6Wld4bFkzUmxaQ2s3WEc0Z0lDQWdiR2x1WlhORVprZHlhV1F1YVc1MllXeHBaR0YwWlNncE8xeHVJQ0I5S1R0Y2JseHVJQ0JzYVc1bGMxSmxjeTVzYVc1bGMwUm1MbTl1VTJWc1pXTjBhVzl1UTJoaGJtZGxaQzV6ZFdKelkzSnBZbVVvS0Y4cElEMCtJSHRjYmlBZ0lDQnBaaUFvYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV0YjNWelpVOTJaWEpTYjNkSlpIZ2dJVDA5SUMweEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc2FXNWxJRDBnYkdsdVpYTlNaWE11YkdsdVpYTmJiR2x1WlhOU1pYTXViR2x1WlhORVppNXRiM1Z6WlU5MlpYSlNiM2RKWkhoZE8xeHVJQ0FnSUNBZ2JHbHVaUzV6Wld4bFkzUmxaQ0E5SUNGc2FXNWxMbk5sYkdWamRHVmtPMXh1SUNBZ0lDQWdhV1lnS0NGc2FXNWxMbk5sYkdWamRHVmtLVnh1SUNBZ0lDQWdJQ0JrWmk1elpXeGxZM1JwYjI0dWMyVjBRV3hzS0daaGJITmxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2JHbHVaWE5TWlhNdWJHbHVaWE11Wm05eVJXRmphQ2dvYkNrZ1BUNGdlMXh1SUNBZ0lDQWdhV1lnS0d3dWMyVnNaV04wWldRcFhHNGdJQ0FnSUNBZ0lHd3ViVzlzY3k1bWIzSkZZV05vS0NodEtTQTlQaUJrWmk1elpXeGxZM1JwYjI0dWMyVjBLRzBzSUhSeWRXVXBLVHRjYmlBZ0lDQjlLVHRjYmlBZ0lDQnNhVzVsYzBSbVIzSnBaQzVwYm5aaGJHbGtZWFJsS0NrN1hHNGdJSDBwTzF4dVhHNGdJR052Ym5OMElHeHBibVZ6UkdaSGNtbGtJRDBnYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV3Ykc5MExtZHlhV1FvS1M1emIzSjBLRnNuWVdOMFgyUnBabVluWFN3Z1cyWmhiSE5sWFNrN1hHNWNiaUFnYkdsdVpYTkVaa2R5YVdRdWIyNURaV3hzUTJ4cFkyc3VjM1ZpYzJOeWFXSmxLQ2dwSUQwK0lIdGNiaUFnSUNCNmIyOXRJRDBnZEhKMVpUdGNiaUFnZlNrN1hHNWNiaUFnWTI5dWMzUWdiR2x6ZEVOc2FXWm1jMHhwYm1zZ1BTQjFhUzVpZFhSMGIyNG9ZQ1I3YkdsdVpYTlNaWE11YkdsdVpYTkVaaTV5YjNkRGIzVnVkSDBnWTJ4cFptWnpZQ3dnS0NrZ1BUNGdlMXh1SUNBZ0lHTnZibk4wSUdOc2FXWm1jMFJwWVd4dlp5QTlJSFZwTG1ScFlXeHZaeWg3ZEdsMGJHVTZJQ2RCWTNScGRtbDBlU0JqYkdsbVpuTW5mU2xjYmlBZ0lDQWdJQzVoWkdRb2JHbHVaWE5FWmtkeWFXUXVjbTl2ZENsY2JpQWdJQ0FnSUM1emFHOTNLQ2s3WEc0Z0lDQWdZMnhwWm1aelJHbGhiRzluTG5KdmIzUXVhV1FnUFNBblkyeHBabVp6WDJScFlXeHZaeWM3WEc0Z0lIMHBPMXh1SUNCc2FYTjBRMnhwWm1aelRHbHVheTV6ZEhsc1pTNXdiM05wZEdsdmJpQTlJQ2RoWW5OdmJIVjBaU2M3WEc0Z0lHeHBjM1JEYkdsbVpuTk1hVzVyTG5OMGVXeGxMblJ2Y0NBOUlDY3hNSEI0Snp0Y2JpQWdiR2x6ZEVOc2FXWm1jMHhwYm1zdWMzUjViR1V1Y21sbmFIUWdQU0FuTVRCd2VDYzdYRzRnSUhOd0xuSnZiM1F1WVhCd1pXNWtLR3hwYzNSRGJHbG1abk5NYVc1cktUdGNibHh1SUNCc1pYUWdkR2x0WlhJNklFNXZaR1ZLVXk1VWFXMWxiM1YwTzF4dUlDQmpZVzUyWVhNdVlXUmtSWFpsYm5STWFYTjBaVzVsY2lnbmJXOTFjMlZ0YjNabEp5d2dablZ1WTNScGIyNGdLR1YyWlc1ME9pQk5iM1Z6WlVWMlpXNTBLU0I3WEc0Z0lDQWdZMnhsWVhKVWFXMWxiM1YwS0hScGJXVnlLVHRjYmlBZ0lDQjBhVzFsY2lBOUlHZHNiMkpoYkM1elpYUlVhVzFsYjNWMEtHWjFibU4wYVc5dUlDZ3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeHBibVVnUFNCamFHVmphME4xY25OdmNrOXVUR2x1WlNobGRtVnVkQ3dnWTJGdWRtRnpMQ0JzYVc1bGMxSmxjeTVzYVc1bGN5azdYRzRnSUNBZ0lDQnBaaUFvYkdsdVpTQW1KaUJrWmk1dGIzVnpaVTkyWlhKU2IzZEpaSGdnUFQwOUlDMHhLU0I3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hkRzl2YkhScGNITmJiR2x1WlM1cFpGMHBJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JrY21GM1ZHOXZiSFJwY0ZCaGNtRnRjeUE5SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSFJ2YjJ4MGFYQnpPaUIwYjI5c2RHbHdjeXhjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHBibVU2SUd4cGJtVXNYRzRnSUNBZ0lDQWdJQ0FnSUNCa1pqb2daR1lzWEc0Z0lDQWdJQ0FnSUNBZ0lDQnpaWEZEYjJ3NklITmxjVU52YkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR0ZqZEdsMmFYUjVPaUJoWTNScGRtbDBhV1Z6TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdlRG9nWlhabGJuUXVZMnhwWlc1MFdDeGNiaUFnSUNBZ0lDQWdJQ0FnSUhrNklHVjJaVzUwTG1Oc2FXVnVkRmxjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdkRzl2YkhScGNFUnlZWGRHZFc1aktHUnlZWGRVYjI5c2RHbHdVR0Z5WVcxektUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG5Ob2IzY29kRzl2YkhScGNITmJiR2x1WlM1cFpGMHNJR1YyWlc1MExtTnNhV1Z1ZEZnc0lHVjJaVzUwTG1Oc2FXVnVkRmtwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBzSURFd01EQXBPMXh1SUNCOUtUdGNibHh1SUNCallXNTJZWE11WVdSa1JYWmxiblJNYVhOMFpXNWxjaWduYlc5MWMyVmtiM2R1Snl3Z1puVnVZM1JwYjI0b1pYWmxiblE2SUUxdmRYTmxSWFpsYm5RcElIdGNiaUFnSUNCamIyNXpkQ0JzYVc1bElEMGdZMmhsWTJ0RGRYSnpiM0pQYmt4cGJtVW9aWFpsYm5Rc0lHTmhiblpoY3l3Z2JHbHVaWE5TWlhNdWJHbHVaWE1wTzF4dUlDQWdJR2xtSUNoc2FXNWxJQ1ltSUdSbUxtMXZkWE5sVDNabGNsSnZkMGxrZUNBOVBUMGdMVEVwSUh0Y2JpQWdJQ0FnSUdsbUlDaGxkbVZ1ZEM1amRISnNTMlY1S1NCN1hHNGdJQ0FnSUNBZ0lHeHBibVV1YzJWc1pXTjBaV1FnUFNBaGJHbHVaUzV6Wld4bFkzUmxaRHRjYmlBZ0lDQWdJQ0FnYkdsdVpYTlNaWE11YkdsdVpYTkVaaTV6Wld4bFkzUnBiMjR1YzJWMEtHeHBibVV1YVdRc0lHeHBibVV1YzJWc1pXTjBaV1FwTzF4dVhHNGdJQ0FnSUNBZ0lHbG1JQ2doYkdsdVpTNXpaV3hsWTNSbFpDbGNiaUFnSUNBZ0lDQWdJQ0JrWmk1elpXeGxZM1JwYjI0dWMyVjBRV3hzS0daaGJITmxLVHRjYmx4dUlDQWdJQ0FnSUNCc2FXNWxjMUpsY3k1c2FXNWxjeTVtYjNKRllXTm9LQ2hzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tHd3VjMlZzWldOMFpXUXBYRzRnSUNBZ0lDQWdJQ0FnSUNCc0xtMXZiSE11Wm05eVJXRmphQ2dvYlNrZ1BUNGdaR1l1YzJWc1pXTjBhVzl1TG5ObGRDaHRMQ0IwY25WbEtTazdYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHeHBibVZ6VW1WekxteHBibVZ6UkdZdVkzVnljbVZ1ZEZKdmQwbGtlQ0FoUFQwZ2JHbHVaUzVwWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hwYm1WelVtVnpMbXhwYm1WelJHWXVZM1Z5Y21WdWRGSnZkMGxrZUNBOUlHeHBibVV1YVdRN1hHNGdJQ0FnSUNBZ0lDQWdaR1l1WTNWeWNtVnVkRkp2ZDBsa2VDQTlJR3hwYm1VdWJXOXNjMXN3WFR0Y2JpQWdJQ0FnSUNBZ0lDQmtaaTV6Wld4bFkzUnBiMjR1YzJWMEtEQXNJQ0ZzYVc1bGMxSmxjeTVzYVc1bGMxc3dYUzV6Wld4bFkzUmxaQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1pHWXVjMlZzWldOMGFXOXVMbk5sZENnd0xDQnNhVzVsYzFKbGN5NXNhVzVsYzFzd1hTNXpaV3hsWTNSbFpDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgwcE8xeHVYRzRnSUhOd0xtOXVSWFpsYm5Rb0oyUTBMV0psWm05eVpTMWtjbUYzTFhOalpXNWxKeWxjYmlBZ0lDQXVjM1ZpYzJOeWFXSmxLQ2hmS1NBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc2FXNWxjeUE5SUhKbGJtUmxja3hwYm1WektITndMRnh1SUNBZ0lDQWdJQ0JoZUdWelRtRnRaWE5iTUYwc0lHRjRaWE5PWVcxbGMxc3hYU3dnYkdsdVpYTlNaWE1zSUhOaGJHbFdZV3h6TENCellXeHBUM0JoWTJsMGVVTnZaV1lzSUhOaGJHbE5hVzRwTzF4dUlDQWdJQ0FnYVdZZ0tIcHZiMjBwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTNWeWNtVnVkRXhwYm1VZ1BTQnNhVzVsYzF0c2FXNWxjMUpsY3k1c2FXNWxjMFJtTG1OMWNuSmxiblJTYjNkSlpIaGRPMXh1SUNBZ0lDQWdJQ0J6WlhSVWFXMWxiM1YwS0NncFBUNGdlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSGd4SUQwZ2MzQXVaR0YwWVVaeVlXMWxMbWRsZENoaGVHVnpUbUZ0WlhOYk1GMHNJR04xY25KbGJuUk1hVzVsTG0xdmJITmJNRjBwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhreElEMGdjM0F1WkdGMFlVWnlZVzFsTG1kbGRDaGhlR1Z6VG1GdFpYTmJNVjBzSUdOMWNuSmxiblJNYVc1bExtMXZiSE5iTUYwcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIZ3lJRDBnYzNBdVpHRjBZVVp5WVcxbExtZGxkQ2hoZUdWelRtRnRaWE5iTUYwc0lHTjFjbkpsYm5STWFXNWxMbTF2YkhOYk1WMHBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSGt5SUQwZ2MzQXVaR0YwWVVaeVlXMWxMbWRsZENoaGVHVnpUbUZ0WlhOYk1WMHNJR04xY25KbGJuUk1hVzVsTG0xdmJITmJNVjBwTzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhoRWFXWm1JRDBnVFdGMGFDNWhZbk1vZURFZ0xTQjRNaWtxTlR0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCNVJHbG1aaUE5SUUxaGRHZ3VZV0p6S0hreElDMGdlVElwS2pVN1hHNGdJQ0FnSUNBZ0lDQWdjM0F1ZW05dmJTaDRNU0E4SUhneUlEOGdlREVnTFNCNFJHbG1aaUE2SUhneUlDMGdlRVJwWm1Zc1hHNGdJQ0FnSUNBZ0lDQWdJQ0I1TVNBK0lIa3lJRDhnZVRFZ0t5QjVSR2xtWmlBNklIa3lJQ0FySUhsRWFXWm1MRnh1SUNBZ0lDQWdJQ0FnSUNBZ2VERWdQaUI0TWlBL0lIZ3hJQ3NnZUVScFptWWdPaUI0TWlBcklIaEVhV1ptTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdlVEVnUENCNU1pQS9JSGt4SUMwZ2VVUnBabVlnT2lCNU1pQXRJSGxFYVdabUtUdGNiaUFnSUNBZ0lDQWdmU3dnTXpBd0tUdGNiaUFnSUNBZ0lDQWdlbTl2YlNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBwTzF4dVhHNGdJSE53TG1Ga1pGQnliM0JsY25SNUtDZHphVzFwYkdGeWFYUjVUR2x0YVhRbkxDQW5aRzkxWW14bEp5d2diM0IwVTJsdGFXeGhjbWwwZVV4cGJXbDBLVHRjYmlBZ2NtVjBkWEp1SUhOd08xeHVmVnh1WEc1bWRXNWpkR2x2YmlCamFHVmphME4xY25OdmNrOXVUR2x1WlNobGRtVnVkRG9nWVc1NUxDQmpZVzUyWVhNNklHRnVlU3dnYkdsdVpYTTZJRWxNYVc1bFcxMHBPaUJKVEdsdVpTQjhJRzUxYkd3Z2UxeHVJQ0JqYjI1emRDQnlaV04wSUQwZ1kyRnVkbUZ6TG1kbGRFSnZkVzVrYVc1blEyeHBaVzUwVW1WamRDZ3BPMXh1SUNCamIyNXpkQ0I0SUQwZ1pYWmxiblF1WTJ4cFpXNTBXQ0F0SUhKbFkzUXViR1ZtZER0Y2JpQWdZMjl1YzNRZ2VTQTlJR1YyWlc1MExtTnNhV1Z1ZEZrZ0xTQnlaV04wTG5SdmNEdGNiaUFnWm05eUlDaGpiMjV6ZENCc2FXNWxJRzltSUd4cGJtVnpLU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHbHpkQ0E5WEc0Z0lDQWdJQ0JOWVhSb0xtRmljeWhOWVhSb0xtaDVjRzkwS0d4cGJtVXVZVnN3WFNBdElIZ3NJR3hwYm1VdVlWc3hYU0F0SUhrcElDdGNiaUFnSUNBZ0lFMWhkR2d1YUhsd2IzUW9iR2x1WlM1aVd6QmRJQzBnZUN3Z2JHbHVaUzVpV3pGZElDMGdlU2tnTFNCTllYUm9MbWg1Y0c5MEtHeHBibVV1WVZzd1hTQXRJR3hwYm1VdVlsc3dYU3dnYkdsdVpTNWhXekZkSUMwZ2JHbHVaUzVpV3pGZEtTazdYRzRnSUNBZ2FXWWdLR1JwYzNRZ1BDQXlLVnh1SUNBZ0lDQWdjbVYwZFhKdUlHeHBibVU3WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzUxYkd3N1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhKbGJtUmxja3hwYm1WektITndPaUJFUnk1VFkyRjBkR1Z5VUd4dmRGWnBaWGRsY2l4Y2JpQWdlRUY0YVhNNklITjBjbWx1Wnl3Z2VVRjRhWE02SUhOMGNtbHVaeXdnYkdsdVpYTlNaWE02SUVsU1pXNWtaWEpsWkV4cGJtVnpMQ0J6WVd4cFZtRnNjem9nYm5WdFltVnlXMTBzSUhOaGJHbFBjR0ZqYVhSNVEyOWxaam9nYm5WdFltVnlMQ0J6WVd4cFRXbHVPaUJ1ZFcxaVpYSXBPaUJKVEdsdVpTQmJYU0I3WEc0Z0lHTnZibk4wSUd4cGJtVnpJRDBnYkdsdVpYTlNaWE11YkdsdVpYTTdYRzRnSUdOdmJuTjBJR05oYm5aaGN5QTlJQ2h6Y0M1blpYUkpibVp2S0NrZ1lYTWdlMXRwYm1SbGVEb2djM1J5YVc1blhTQTZJR0Z1ZVgwcFd5ZGpZVzUyWVhNblhUdGNiaUFnWTI5dWMzUWdZM1I0SUQwZ1kyRnVkbUZ6TG1kbGRFTnZiblJsZUhRb0p6SmtKeWtnWVhNZ1EyRnVkbUZ6VW1WdVpHVnlhVzVuUTI5dWRHVjRkREpFTzF4dUlDQmpiMjV6ZENCNElEMGdjM0F1WkdGMFlVWnlZVzFsSVM1amIyeDFiVzV6TG1KNVRtRnRaU2g0UVhocGN5azdYRzRnSUdOdmJuTjBJSGtnUFNCemNDNWtZWFJoUm5KaGJXVWhMbU52YkhWdGJuTXVZbmxPWVcxbEtIbEJlR2x6S1R0Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzYVc1bGN5NXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJR052Ym5OMElIQnZhVzUwUm5KdmJTQTlJSE53TG5kdmNteGtWRzlUWTNKbFpXNG9lQzVuWlhRb2JHbHVaWE5iYVYwdWJXOXNjMXN3WFNrc0lIa3VaMlYwS0d4cGJtVnpXMmxkTG0xdmJITmJNRjBwS1R0Y2JpQWdJQ0JqYjI1emRDQndiMmx1ZEZSdklEMGdjM0F1ZDI5eWJHUlViMU5qY21WbGJpaDRMbWRsZENoc2FXNWxjMXRwWFM1dGIyeHpXekZkS1N3Z2VTNW5aWFFvYkdsdVpYTmJhVjB1Ylc5c2Mxc3hYU2twTzF4dUlDQWdJR3hwYm1WelcybGRMbUVnUFNCYmNHOXBiblJHY205dExuZ3NJSEJ2YVc1MFJuSnZiUzU1WFR0Y2JpQWdJQ0JzYVc1bGMxdHBYUzVpSUQwZ1czQnZhVzUwVkc4dWVDd2djRzlwYm5SVWJ5NTVYVHRjYmlBZ0lDQmpiMjV6ZENCc2FXNWxJRDBnYm1WM0lGQmhkR2d5UkNncE8xeHVJQ0FnSUd4cGJtVXViVzkyWlZSdktHeHBibVZ6VzJsZExtRmJNRjBzSUd4cGJtVnpXMmxkTG1GYk1WMHBPMXh1SUNBZ0lHTnZibk4wSUdOdmJHOXlJRDBnYkdsdVpYTmJhVjB1YzJWc1pXTjBaV1FnUHlBbk1qVTFMREkxTlN3d0p5QTZJQ2N3TERFeU9Dd3dKenRjYmlBZ0lDQmpiMjV6ZENCdmNHRmphWFI1SUQwZ2MyRnNhVlpoYkhOYmFWMGdQVDA5SUVsdVptbHVhWFI1SUQ4Z01TQTZJREF1TWlBcklDaHpZV3hwVm1Gc2MxdHBYU0F0SUhOaGJHbE5hVzRwS25OaGJHbFBjR0ZqYVhSNVEyOWxaanRjYmlBZ0lDQmpkSGd1YzNSeWIydGxVM1I1YkdVZ1BTQmdjbWRpWVNna2UyTnZiRzl5ZlN3a2UyOXdZV05wZEhsOUtXQTdYRzRnSUNBZ1kzUjRMbXhwYm1WWGFXUjBhQ0E5SUd4cGJtVnpXMmxkTG1sa0lEMDlQU0JzYVc1bGMxSmxjeTVzYVc1bGMwUm1MbU4xY25KbGJuUlNiM2RKWkhnZ1B5QXpJRG9nTVR0Y2JpQWdJQ0JzYVc1bExteHBibVZVYnloc2FXNWxjMXRwWFM1aVd6QmRMQ0JzYVc1bGMxdHBYUzVpV3pGZEtUdGNiaUFnSUNCamRIZ3VjM1J5YjJ0bEtHeHBibVVwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJzYVc1bGN6dGNibjFjYmx4dVpuVnVZM1JwYjI0Z1kzSmxZWFJsVEdsdVpYTW9YRzRnSUc0eE9pQnVkVzFpWlhKYlhTd2dYRzRnSUc0eU9pQnVkVzFpWlhKYlhTd2dYRzRnSUhObGNUb2dSRWN1UTI5c2RXMXVMQ0JjYmlBZ1lXTjBhWFpwZEdsbGN6b2dSRWN1UTI5c2RXMXVMQ0JjYmlBZ2MyRnNhVlpoYkhNNklHNTFiV0psY2x0ZExGeHVJQ0J6WlcxVWVYQmxPaUJ6ZEhKcGJtY3NYRzRnSUhWdWFYUnpPaUJ6ZEhKcGJtY3BJRG9nU1ZKbGJtUmxjbVZrVEdsdVpYTWdlMXh1SUNCamIyNXpkQ0JzYVc1bGN6b2dTVXhwYm1WYlhTQTlJRnRkTzF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzR4TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1kyOXVjM1FnYm5WdE1TQTlJRzR4VzJsZE8xeHVJQ0FnSUdOdmJuTjBJRzUxYlRJZ1BTQnVNbHRwWFR0Y2JpQWdJQ0JzYVc1bGN5NXdkWE5vS0h0cFpEb2dhU3dnYlc5c2N6b2dXMjUxYlRFc0lHNTFiVEpkTENCelpXeGxZM1JsWkRvZ1ptRnNjMlVzSUdFNklGdGRMQ0JpT2lCYlhYMHBPMXh1SUNCOVhHNGdJR052Ym5OMElHeHBibVZ6UkdZZ1BTQkVSeTVFWVhSaFJuSmhiV1V1WTNKbFlYUmxLR3hwYm1WekxteGxibWQwYUNrN1hHNGdJR3hwYm1WelJHWXVZMjlzZFcxdWN5NWhaR1JPWlhkVGRISnBibWNvSnpGZmMyVnhKeWt1YVc1cGRDZ29hVG9nYm5WdFltVnlLU0E5UGlCelpYRXVaMlYwS0d4cGJtVnpXMmxkTG0xdmJITmJNRjBwS1R0Y2JpQWdiR2x1WlhORVppNWpiMngxYlc1ekxtRmtaRTVsZDFOMGNtbHVaeWduTWw5elpYRW5LUzVwYm1sMEtDaHBPaUJ1ZFcxaVpYSXBJRDArSUhObGNTNW5aWFFvYkdsdVpYTmJhVjB1Ylc5c2Mxc3hYU2twTzF4dUlDQnNhVzVsYzBSbUxtTnZiSFZ0Ym5NdVlXUmtUbVYzUm14dllYUW9KMkZqZEY5a2FXWm1KeWxjYmlBZ0lDQXVhVzVwZENnb2FUb2diblZ0WW1WeUtTQTlQaUJOWVhSb0xtRmljeWhoWTNScGRtbDBhV1Z6TG1kbGRDaHNhVzVsYzF0cFhTNXRiMnh6V3pCZEtTQXRJR0ZqZEdsMmFYUnBaWE11WjJWMEtHeHBibVZ6VzJsZExtMXZiSE5iTVYwcEtTazdYRzRnSUd4cGJtVnpSR1l1WTI5c2RXMXVjeTVoWkdST1pYZEpiblFvSjJ4cGJtVmZhVzVrWlhnbktTNXBibWwwS0NocE9pQnVkVzFpWlhJcElEMCtJR2twTzF4dUlDQnNhVzVsYzBSbUxtTnZiSFZ0Ym5NdVlXUmtUbVYzUm14dllYUW9KM05oYkdrbktTNXBibWwwS0NocE9pQnVkVzFpWlhJcElEMCtJSE5oYkdsV1lXeHpXMmxkS1R0Y2JpQWdiR2x1WlhORVppNWpiMndvSnpGZmMyVnhKeWtoTG5SaFozTmJSRWN1VkVGSFV5NVZUa2xVVTEwZ1BTQjFibWwwY3p0Y2JpQWdiR2x1WlhORVppNWpiMndvSnpKZmMyVnhKeWtoTG5SaFozTmJSRWN1VkVGSFV5NVZUa2xVVTEwZ1BTQjFibWwwY3p0Y2JpQWdiR2x1WlhORVppNWpiMndvSnpGZmMyVnhKeWtoTG5ObGJWUjVjR1VnUFNCelpXMVVlWEJsTzF4dUlDQnNhVzVsYzBSbUxtTnZiQ2duTWw5elpYRW5LU0V1YzJWdFZIbHdaU0E5SUhObGJWUjVjR1U3WEc0Z0lISmxkSFZ5YmlCN2JHbHVaWE1zSUd4cGJtVnpSR1o5TzF4dWZWeHVYRzVsZUhCdmNuUWdZWE41Ym1NZ1puVnVZM1JwYjI0Z1oyVjBVMmx0YVd4aGNtbDBhV1Z6VFdGeWFYZ29YRzRnSUNBZ1pHbHRPaUJ1ZFcxaVpYSXNJRnh1SUNBZ0lITmxjVU52YkRvZ1JFY3VRMjlzZFcxdUxDQmNiaUFnSUNCa1psTmxjVG9nUkVjdVJHRjBZVVp5WVcxbExDQmNiaUFnSUNCemFXMUJjbkk2SUVSSExrTnZiSFZ0Ymx0ZExGeHVJQ0FnSUhOcGJVWjFibU02SUNoamIydzZJRVJITGtOdmJIVnRiaXdnYlc5c09pQnpkSEpwYm1jcElEMCtJRkJ5YjIxcGMyVThSRWN1UTI5c2RXMXVJSHdnYm5Wc2JENWNiaUFnSUNBcFhHNGdJRG9nVUhKdmJXbHpaVHhFUnk1RGIyeDFiVzViWFQ0Z2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0FoUFNCa2FXMGdMU0F4T3lBcksya3BJSHRjYmlBZ0lDQmpiMjV6ZENCdGIyd2dQU0J6WlhGRGIyd3VaMlYwS0drcE8xeHVJQ0FnSUdSbVUyVnhMbkp2ZDNNdWNtVnRiM1psUVhRb01Dd2dNU3dnWm1Gc2MyVXBPMXh1SUNBZ0lITnBiVUZ5Y2x0cFhTQTlJQ2hoZDJGcGRDQnphVzFHZFc1aktHUm1VMlZ4TG1OdmJDZ25jMlZ4SnlraExDQnRiMndwS1NFN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhOcGJVRnljanRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRk5wYldsc1lYSnBkR2xsYzAxaGNtbDRSbkp2YlVScGMzUmhibU5sY3loa2FXMDZJRzUxYldKbGNpd2daR2x6ZEdGdVkyVnpPaUJOWVhSeWFYZ3NJSE5wYlVGeWNqb2dSRWN1UTI5c2RXMXVXMTBwWEc0Z0lEb2dSRWN1UTI5c2RXMXVXMTBnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYlNBdElERTdJQ3NyYVNrZ2UxeHVJQ0FnSUdOdmJuTjBJSE5wYldsc1lYSnBkSGxCY25JZ1BTQmJYVHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVNBcklERTdJR29nUENCa2FXMDdJQ3NyYWlsY2JpQWdJQ0FnSUhOcGJXbHNZWEpwZEhsQmNuSXVjSFZ6YUNoblpYUlRhVzFwYkdGeWFYUjVSbkp2YlVScGMzUmhibU5sS0dScGMzUmhibU5sYzF0cFhWdHFYU2twTzF4dUlDQWdJSE5wYlVGeWNsdHBYU0E5SUVSSExrTnZiSFZ0Ymk1bWNtOXRSbXh2WVhRek1rRnljbUY1S0NkemFXMXBiR0Z5YVhSNUp5d2dSbXh2WVhRek1rRnljbUY1TG1aeWIyMG9jMmx0YVd4aGNtbDBlVUZ5Y2lrcE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemFXMUJjbkk3WEc1OUlsMTkiLCJleHBvcnQgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW5hbGl0eVJlZHVjaW5nV29ya2VyKGRhdGFNZXRyaWMsIG1ldGhvZCwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4vZGltZW5zaW9uYWxpdHktcmVkdWNlcicsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgY29sdW1uRGF0YTogZGF0YU1ldHJpYy5kYXRhLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBtZWFzdXJlOiBkYXRhTWV0cmljLm1ldHJpYyxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gKHsgZGF0YTogeyBkaXN0YW5jZSwgZW1iZWRkaW5nIH0gfSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IGRpc3RhbmNlOiBkaXN0YW5jZSwgZW1iZWRkaW5nOiBlbWJlZGRpbmcgfSk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV05wYm1jdGQyOXlhMlZ5TFdOeVpXRjBiM0l1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SmthVzFsYm5OcGIyNWhiR2wwZVMxeVpXUjFZMmx1WnkxM2IzSnJaWEl0WTNKbFlYUnZjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGcFFrRXNUVUZCVFN4VlFVRlZMR2xEUVVGcFF5eERRVUZETEZWQlFYTkNMRVZCUVVVc1RVRkJZeXhGUVVOc1JpeFBRVUZoTzBsQlJXcENMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVlVGQlV5eFBRVUZQTzFGQlEycERMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMREJDUVVFd1FpeEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5vUml4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRE8xbEJRMnBDTEZWQlFWVXNSVUZCUlN4VlFVRlZMRU5CUVVNc1NVRkJTVHRaUVVNelFpeE5RVUZOTEVWQlFVVXNUVUZCVFR0WlFVTmtMRTlCUVU4c1JVRkJSU3hWUVVGVkxFTkJRVU1zVFVGQlRUdFpRVU14UWl4UFFVRlBMRVZCUVVVc1QwRkJUenRUUVVOcVFpeERRVUZETEVOQlFVTTdVVUZEU0N4TlFVRk5MRU5CUVVNc1UwRkJVeXhIUVVGSExFTkJRVU1zUlVGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUXl4UlFVRlJMRVZCUVVVc1UwRkJVeXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZGTzFsQlEzQkVMRTlCUVU4c1EwRkJReXhGUVVGRExGRkJRVkVzUlVGQlJTeFJRVUZSTEVWQlFVVXNVMEZCVXl4RlFVRkZMRk5CUVZNc1JVRkJReXhEUVVGRExFTkJRVU03VVVGRGNrUXNRMEZCUXl4RFFVRkRPMGxCUTBvc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFRDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1RXRjBjbWw0SUgwZ1puSnZiU0FuUUdSaGRHRm5jbTlyTFd4cFluSmhjbWxsY3k5MWRHbHNjeTl6Y21NdmRIbHdaUzFrWldOc1lYSmhkR2x2Ym5Nbk8xeHVhVzF3YjNKMElIdFdZV3hwWkZSNWNHVnpmU0JtY205dElDY3VMaTkwZVhCbFpDMXRaWFJ5YVdOekp6dGNibHh1THlvcVhHNGdLaUJCSUhkdmNtdGxjaUIwYnlCd1pYSm1iM0p0SUdScGJXVnVjMmx2Ym1Gc2FYUjVJSEpsWkhWamRHbHZiaTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMVpoYkdsa1ZIbHdaWE45SUdSaGRHRk5aWFJ5YVdNZ1ZHaGxJR1JoZEdFZ2RHOGdjSEp2WTJWemN5NWNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0J0WlhSb2IyUWdRU0J0WlhSb2IyUWdiMllnWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVMbHh1SUNvZ1FIQmhjbUZ0SUc5d2RHbHZibk1nTFNCclpYa3RkbUZzZFdVZ2NHRnBjbk5jYmlBcUlFQndZWEpoYlNCeVpYUjFjbTVFYVhOMFlXNWpaVTFoZEhKcGVGeHVJQ29nUUhKbGRIVnliaUI3VUhKdmJXbHpaVHhKVW1Wa2RXTmxSR2x0Wlc1emFXOXVZV3hwZEhsU1pYTjFiSFErZlNCU1pYTjFiSFJwYm1jZ1pXMWlaV1JrYVc1bklHRnVaQ0JrYVhOMFlXNWpaU0J0WVhSeWFYZ3VYRzRnS2k5Y2JtVjRjRzl5ZENCcGJuUmxjbVpoWTJVZ1NWSmxaSFZqWlVScGJXVnVjMmx2Ym1Gc2FYUjVVbVZ6ZFd4MElIdGNiaUFnWkdsemRHRnVZMlU2SUUxaGRISnBlRHRjYmlBZ1pXMWlaV1JrYVc1bk9pQk5ZWFJ5YVhnN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqY21WaGRHVkVhVzFsYm5OcGJtRnNhWFI1VW1Wa2RXTnBibWRYYjNKclpYSW9aR0YwWVUxbGRISnBZem9nVm1Gc2FXUlVlWEJsY3l3Z2JXVjBhRzlrT2lCemRISnBibWNzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpQem9nWVc1NUtUb2dVSEp2YldselpUeEpVbVZrZFdObFJHbHRaVzV6YVc5dVlXeHBkSGxTWlhOMWJIUStJSHRjYmx4dUlDQnlaWFIxY200Z2JtVjNJRkJ5YjIxcGMyVW9ablZ1WTNScGIyNG9jbVZ6YjJ4MlpTa2dlMXh1SUNBZ0lHTnZibk4wSUhkdmNtdGxjaUE5SUc1bGR5QlhiM0pyWlhJb2JtVjNJRlZTVENnbkxpOWthVzFsYm5OcGIyNWhiR2wwZVMxeVpXUjFZMlZ5Snl3Z2FXMXdiM0owTG0xbGRHRXVkWEpzS1NrN1hHNGdJQ0FnZDI5eWEyVnlMbkJ2YzNSTlpYTnpZV2RsS0h0Y2JpQWdJQ0FnSUdOdmJIVnRia1JoZEdFNklHUmhkR0ZOWlhSeWFXTXVaR0YwWVN4Y2JpQWdJQ0FnSUcxbGRHaHZaRG9nYldWMGFHOWtMRnh1SUNBZ0lDQWdiV1ZoYzNWeVpUb2daR0YwWVUxbGRISnBZeTV0WlhSeWFXTXNYRzRnSUNBZ0lDQnZjSFJwYjI1ek9pQnZjSFJwYjI1ekxGeHVJQ0FnSUgwcE8xeHVJQ0FnSUhkdmNtdGxjaTV2Ym0xbGMzTmhaMlVnUFNBb2UyUmhkR0U2SUh0a2FYTjBZVzVqWlN3Z1pXMWlaV1JrYVc1bmZYMHBJRDArSUh0Y2JpQWdJQ0FnY21WemIyeDJaU2g3WkdsemRHRnVZMlU2SUdScGMzUmhibU5sTENCbGJXSmxaR1JwYm1jNklHVnRZbVZrWkdsdVozMHBPMXh1SUNBZ0lIMDdYRzRnSUgwcE8xeHVmVnh1SWwxOSIsIi8qKlxuICogR2VuZXJhdGVzIHNpbmdsZSByYW5kb20gZmxvYXQgZnJvbSAwIHRvIHJhbmdlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZSBNYXggZ2VuZXJhdGluZyB2YWx1ZS5cbiAqIEByZXR1cm4ge251bWJlcn0gQSByYW5kb20gZmxvYXQgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tRmxvYXQocmFuZ2UpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIHJhbmdlO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgc2luZ2xlIHJhbmRvbSBpbnRlZ2VyIGZyb20gMCB0byByYW5nZS5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2UgTWF4IGdlbmVyYXRpbmcgdmFsdWUuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEEgcmFuZG9tIGludGVnZXIgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tSW50KHJhbmdlKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZG9tRmxvYXQocmFuZ2UpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtRnVaRzl0TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2ljbUZ1Wkc5dExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCT3pzN096czdSMEZOUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zUzBGQllUdEpRVU4yUXl4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETDBJc1EwRkJRenRCUVVWRU96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4VFFVRlRMRU5CUVVNc1MwRkJZVHRKUVVOeVF5eFBRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZUVNc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUjJWdVpYSmhkR1Z6SUhOcGJtZHNaU0J5WVc1a2IyMGdabXh2WVhRZ1puSnZiU0F3SUhSdklISmhibWRsTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN2JuVnRZbVZ5ZlNCeVlXNW5aU0JOWVhnZ1oyVnVaWEpoZEdsdVp5QjJZV3gxWlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMjUxYldKbGNuMGdRU0J5WVc1a2IyMGdabXh2WVhRZ1oyVnVaWEpoZEdWa0xseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY21GdVpHOXRSbXh2WVhRb2NtRnVaMlU2SUc1MWJXSmxjaWs2SUc1MWJXSmxjaUI3WEc0Z0lISmxkSFZ5YmlCTllYUm9MbkpoYm1SdmJTZ3BJQ29nY21GdVoyVTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1IyVnVaWEpoZEdWeklITnBibWRzWlNCeVlXNWtiMjBnYVc1MFpXZGxjaUJtY205dElEQWdkRzhnY21GdVoyVXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJSEpoYm1kbElFMWhlQ0JuWlc1bGNtRjBhVzVuSUhaaGJIVmxMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCQklISmhibVJ2YlNCcGJuUmxaMlZ5SUdkbGJtVnlZWFJsWkM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpoYm1SdmJVbHVkQ2h5WVc1blpUb2diblZ0WW1WeUtUb2diblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJRTFoZEdndVpteHZiM0lvY21GdVpHOXRSbXh2WVhRb2NtRnVaMlVwS1R0Y2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IHJhbmRvbUludCB9IGZyb20gJy4vcmFuZG9tJztcbmV4cG9ydCBjb25zdCBzaW1pbGFyaXR5TWV0cmljID0ge1xuICAgICdUYW5pbW90byc6IHRhbmltb3RvU2ltaWxhcml0eSxcbiAgICAnRGljZSc6IGRpY2VTaW1pbGFyaXR5LFxuICAgICdBc3ltbWV0cmljJzogYXN5bW1ldHJpY1NpbWlsYXJpdHksXG4gICAgJ0JyYXVuLUJsYW5xdWV0JzogYnJhdW5CbGFucXVldFNpbWlsYXJpdHksXG4gICAgJ0Nvc2luZSc6IGNvc2luZVNpbWlsYXJpdHksXG4gICAgJ0t1bGN6eW5za2knOiBrdWxjenluc2tpU2ltaWxhcml0eSxcbiAgICAnTWMtQ29ubmF1Z2hleSc6IG1jQ29ubmF1Z2hleVNpbWlsYXJpdHksXG4gICAgJ1JvZ290LUdvbGRiZXJnJzogcm9nb3RHb2xkYmVyZ1NpbWlsYXJpdHksXG4gICAgJ1J1c3NlbCc6IHJ1c3NlbFNpbWlsYXJpdHksXG4gICAgJ1Nva2FsJzogc29rYWxTaW1pbGFyaXR5LFxuICAgICdIYW1taW5nJzogaGFtbWluZ1NpbWlsYXJpdHksXG4gICAgJ0V1Y2xpZGVhbic6IGV1Y2xpZGVhblNpbWlsYXJpdHksXG59O1xuZXhwb3J0IGNvbnN0IGRpc3RhbmNlTWV0cmljcyA9IHtcbiAgICAnVGFuaW1vdG8nOiB0YW5pbW90b0Rpc3RhbmNlLFxuICAgICdEaWNlJzogZGljZURpc3RhbmNlLFxuICAgICdBc3ltbWV0cmljJzogYXN5bW1ldHJpY0Rpc3RhbmNlLFxuICAgICdCcmF1bi1CbGFucXVldCc6IGJyYXVuQmxhbnF1ZXREaXN0YW5jZSxcbiAgICAnQ29zaW5lJzogY29zaW5lRGlzdGFuY2UsXG4gICAgJ0t1bGN6eW5za2knOiBrdWxjenluc2tpRGlzdGFuY2UsXG4gICAgJ01jLUNvbm5hdWdoZXknOiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSxcbiAgICAnUm9nb3QtR29sZGJlcmcnOiByb2dvdEdvbGRiZXJnRGlzdGFuY2UsXG4gICAgJ1J1c3NlbCc6IHJ1c3NlbERpc3RhbmNlLFxuICAgICdTb2thbCc6IHNva2FsRGlzdGFuY2UsXG4gICAgJ0hhbW1pbmcnOiBoYW1taW5nRGlzdGFuY2UsXG4gICAgJ0V1Y2xpZGVhbic6IGV1Y2xpZGVhbkRpc3RhbmNlLFxufTtcbmV4cG9ydCBjb25zdCBDSEVNX1NJTUlMQVJJVFlfTUVUUklDUyA9IFsnVGFuaW1vdG8nLCAnRGljZScsICdDb3NpbmUnLCAnSGFtbWluZycsICdFdWNsaWRlYW4nXTtcbmV4cG9ydCBmdW5jdGlvbiB0YW5pbW90b1NpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyAodG90YWwgLSBjb21tb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRhbmltb3RvRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KHRhbmltb3RvU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZGljZVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiAyICogY29tbW9uIC8gdG90YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gZGljZURpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShkaWNlU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29zaW5lU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICogeS50cnVlQ291bnQoKTtcbiAgICBpZiAodG90YWwgPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvIE1hdGguc3FydCh0b3RhbCk7XG59XG5leHBvcnQgZnVuY3Rpb24gY29zaW5lRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGNvc2luZVNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGV1Y2xpZGVhblNpbWlsYXJpdHkoeCwgeSkge1xuICAgIHJldHVybiBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKGV1Y2xpZGVhbkRpc3RhbmNlKHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKSAtIDIgKiB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0U2ltaWxhcml0eUZyb21EaXN0YW5jZShoYW1taW5nRGlzdGFuY2UoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhhbW1pbmdEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIHgudHJ1ZUNvdW50KCkgKyB5LnRydWVDb3VudCgpIC0gMiAqIHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzb2thbFNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiBjb21tb24gLyAoMiAqIHRvdGFsIC0gMyAqIGNvbW1vbik7XG59XG5leHBvcnQgZnVuY3Rpb24gc29rYWxEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoc29rYWxTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBrdWxjenluc2tpU2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgdG90YWwgPSB4LnRydWVDb3VudCgpICsgeS50cnVlQ291bnQoKTtcbiAgICBjb25zdCB0b3RhbFByb2QgPSB4LnRydWVDb3VudCgpICogeS50cnVlQ291bnQoKTtcbiAgICBpZiAodG90YWxQcm9kID09IDApXG4gICAgICAgIHJldHVybiAwLjA7XG4gICAgY29uc3QgY29tbW9uID0geC5hbmRXaXRoQ291bnRCaXRzKHksIHRydWUpO1xuICAgIHJldHVybiAoY29tbW9uICogdG90YWwpIC8gKDIgKiB0b3RhbFByb2QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGt1bGN6eW5za2lEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoa3VsY3p5bnNraVNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1jQ29ubmF1Z2hleVNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IHRvdGFsID0geC50cnVlQ291bnQoKSArIHkudHJ1ZUNvdW50KCk7XG4gICAgY29uc3QgdG90YWxQcm9kID0geC50cnVlQ291bnQoKSAqIHkudHJ1ZUNvdW50KCk7XG4gICAgaWYgKHRvdGFsUHJvZCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gKGNvbW1vbiAqIHRvdGFsIC0gdG90YWxQcm9kKSAvIHRvdGFsUHJvZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtY0Nvbm5hdWdoZXlEaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkobWNDb25uYXVnaGV5U2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXN5bW1ldHJpY1NpbWlsYXJpdHkoeCwgeSkge1xuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKHgudHJ1ZUNvdW50KCksIHkudHJ1ZUNvdW50KCkpO1xuICAgIGlmIChtaW4gPT0gMClcbiAgICAgICAgcmV0dXJuIDAuMDtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgcmV0dXJuIGNvbW1vbiAvIG1pbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3ltbWV0cmljRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KGFzeW1tZXRyaWNTaW1pbGFyaXR5KHgsIHkpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBicmF1bkJsYW5xdWV0U2ltaWxhcml0eSh4LCB5KSB7XG4gICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoeC50cnVlQ291bnQoKSwgeS50cnVlQ291bnQoKSk7XG4gICAgaWYgKG1heCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8gbWF4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGJyYXVuQmxhbnF1ZXREaXN0YW5jZSh4LCB5KSB7XG4gICAgcmV0dXJuIGdldERpc3RhbmNlRnJvbVNpbWlsYXJpdHkoYnJhdW5CbGFucXVldFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJ1c3NlbFNpbWlsYXJpdHkoeCwgeSkge1xuICAgIGlmICh4Lmxlbmd0aCA9PSAwKVxuICAgICAgICByZXR1cm4gMC4wO1xuICAgIGNvbnN0IGNvbW1vbiA9IHguYW5kV2l0aENvdW50Qml0cyh5LCB0cnVlKTtcbiAgICByZXR1cm4gY29tbW9uIC8geC5sZW5ndGg7XG59XG5leHBvcnQgZnVuY3Rpb24gcnVzc2VsRGlzdGFuY2UoeCwgeSkge1xuICAgIHJldHVybiBnZXREaXN0YW5jZUZyb21TaW1pbGFyaXR5KHJ1c3NlbFNpbWlsYXJpdHkoeCwgeSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJvZ290R29sZGJlcmdTaW1pbGFyaXR5KHgsIHkpIHtcbiAgICBjb25zdCBjb21tb24gPSB4LmFuZFdpdGhDb3VudEJpdHMoeSwgdHJ1ZSk7XG4gICAgY29uc3QgdG90YWwgPSB4LmNvdW50Qml0cyh0cnVlKSArIHkuY291bnRCaXRzKHRydWUpO1xuICAgIGNvbnN0IGxlbiA9IHgubGVuZ3RoO1xuICAgIGNvbnN0IGRpZmYgPSBsZW4gLSB0b3RhbCArIGNvbW1vbjtcbiAgICBpZiAoKGNvbW1vbiA9PSBsZW4pIHx8IChkaWZmID09IGxlbikpXG4gICAgICAgIHJldHVybiAxLjA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gY29tbW9uIC8gdG90YWwgKyBkaWZmIC8gKDIgKiBsZW4gLSB0b3RhbCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcm9nb3RHb2xkYmVyZ0Rpc3RhbmNlKHgsIHkpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShyb2dvdEdvbGRiZXJnU2ltaWxhcml0eSh4LCB5KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U2ltaWxhcml0eUZyb21EaXN0YW5jZShkaXN0YW5jZSkge1xuICAgIHJldHVybiAxIC8gKDEgKyBkaXN0YW5jZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2VGcm9tU2ltaWxhcml0eShzaW1pbGFyaXR5KSB7XG4gICAgcmV0dXJuIDEgLyBzaW1pbGFyaXR5IC0gMTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljMmx0YVd4aGNtbDBlUzF0WlhSeWFXTnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWMybHRhV3hoY21sMGVTMXRaWFJ5YVdOekxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVU5CTEU5QlFVOHNSVUZCUXl4VFFVRlRMRVZCUVVNc1RVRkJUU3hWUVVGVkxFTkJRVU03UVVGRmJrTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1owSkJRV2RDTEVkQlFUSkVPMGxCUTNSR0xGVkJRVlVzUlVGQlJTeHJRa0ZCYTBJN1NVRkRPVUlzVFVGQlRTeEZRVUZGTEdOQlFXTTdTVUZEZEVJc1dVRkJXU3hGUVVGRkxHOUNRVUZ2UWp0SlFVTnNReXhuUWtGQlowSXNSVUZCUlN4MVFrRkJkVUk3U1VGRGVrTXNVVUZCVVN4RlFVRkZMR2RDUVVGblFqdEpRVU14UWl4WlFVRlpMRVZCUVVVc2IwSkJRVzlDTzBsQlEyeERMR1ZCUVdVc1JVRkJSU3h6UWtGQmMwSTdTVUZEZGtNc1owSkJRV2RDTEVWQlFVVXNkVUpCUVhWQ08wbEJRM3BETEZGQlFWRXNSVUZCUlN4blFrRkJaMEk3U1VGRE1VSXNUMEZCVHl4RlFVRkZMR1ZCUVdVN1NVRkRlRUlzVTBGQlV5eEZRVUZGTEdsQ1FVRnBRanRKUVVNMVFpeFhRVUZYTEVWQlFVVXNiVUpCUVcxQ08wTkJRMnBETEVOQlFVTTdRVUZGUml4TlFVRk5MRU5CUVVNc1RVRkJUU3hsUVVGbExFZEJRVEpFTzBsQlEzSkdMRlZCUVZVc1JVRkJSU3huUWtGQlowSTdTVUZETlVJc1RVRkJUU3hGUVVGRkxGbEJRVms3U1VGRGNFSXNXVUZCV1N4RlFVRkZMR3RDUVVGclFqdEpRVU5vUXl4blFrRkJaMElzUlVGQlJTeHhRa0ZCY1VJN1NVRkRka01zVVVGQlVTeEZRVUZGTEdOQlFXTTdTVUZEZUVJc1dVRkJXU3hGUVVGRkxHdENRVUZyUWp0SlFVTm9ReXhsUVVGbExFVkJRVVVzYjBKQlFXOUNPMGxCUTNKRExHZENRVUZuUWl4RlFVRkZMSEZDUVVGeFFqdEpRVU4yUXl4UlFVRlJMRVZCUVVVc1kwRkJZenRKUVVONFFpeFBRVUZQTEVWQlFVVXNZVUZCWVR0SlFVTjBRaXhUUVVGVExFVkJRVVVzWlVGQlpUdEpRVU14UWl4WFFVRlhMRVZCUVVVc2FVSkJRV2xDTzBOQlF5OUNMRU5CUVVNN1FVRkZSaXhOUVVGTkxFTkJRVU1zVFVGQlRTeDFRa0ZCZFVJc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRk5CUVZNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dEJRVVU1Uml4TlFVRk5MRlZCUVZVc2EwSkJRV3RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRla1FzVFVGQlRTeExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTTFReXhKUVVGSkxFdEJRVXNzU1VGQlNTeERRVUZETzFGQlExb3NUMEZCVHl4SFFVRkhMRU5CUVVNN1NVRkRZaXhOUVVGTkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpORExFOUJRVThzVFVGQlRTeEhRVUZITEVOQlFVTXNTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMjVETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRka1FzVDBGQlR5eDVRa0ZCZVVJc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0zUkN4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHTkJRV01zUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTnlSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzBsQlF6VkRMRWxCUVVrc1MwRkJTeXhKUVVGSkxFTkJRVU03VVVGRFdpeFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTVUZETTBNc1QwRkJUeXhEUVVGRExFZEJRVWNzVFVGQlRTeEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTTFRaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEZsQlFWa3NRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVOdVJDeFBRVUZQTEhsQ1FVRjVRaXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVONlJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUTNaRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETlVNc1NVRkJTU3hMUVVGTExFbEJRVWtzUTBGQlF6dFJRVU5hTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRMjVETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1kwRkJZeXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzSkVMRTlCUVU4c2VVSkJRWGxDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRNMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4dFFrRkJiVUlzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTXhSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRelZFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2FVSkJRV2xDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRlRVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGRExFTkJRVU1zUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnNSaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdsQ1FVRnBRaXhEUVVGRExFTkJRVmNzUlVGQlJTeERRVUZYTzBsQlEzaEVMRTlCUVU4c2VVSkJRWGxDTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6RkVMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWlVGQlpTeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUTNSRUxFOUJRVThzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVTXNRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOMlJTeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR1ZCUVdVc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU4wUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8wbEJRelZETEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wTXNUMEZCVHl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eEhRVUZITEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNelF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR0ZCUVdFc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU53UkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU14UkN4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHOUNRVUZ2UWl4RFFVRkRMRU5CUVZjc1JVRkJSU3hEUVVGWE8wbEJRek5FTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkROVU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRMRk5CUVZNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0SlFVTm9SQ3hKUVVGSkxGTkJRVk1zU1VGQlNTeERRVUZETzFGQlEyaENMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEZOQlFWTXNRMEZCUXl4RFFVRkRPMEZCUXpWRExFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZEZWtRc1QwRkJUeXg1UWtGQmVVSXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNdlJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUXpkRUxFMUJRVTBzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdTVUZETlVNc1RVRkJUU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dEpRVU5vUkN4SlFVRkpMRk5CUVZNc1NVRkJTU3hEUVVGRE8xRkJRMmhDTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEV0QlFVc3NSMEZCUnl4VFFVRlRMRU5CUVVNc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRGJFUXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3h2UWtGQmIwSXNRMEZCUXl4RFFVRlhMRVZCUVVVc1EwRkJWenRKUVVNelJDeFBRVUZQTEhsQ1FVRjVRaXhEUVVGRExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEycEZMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzYjBKQlFXOUNMRU5CUVVNc1EwRkJWeXhGUVVGRkxFTkJRVmM3U1VGRE0wUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNVMEZCVXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETEVOQlFVTTdTVUZEYmtRc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVU5XTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTXpReXhQUVVGUExFMUJRVTBzUjBGQlJ5eEhRVUZITEVOQlFVTTdRVUZEZEVJc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeHJRa0ZCYTBJc1EwRkJReXhEUVVGWExFVkJRVVVzUTBGQlZ6dEpRVU42UkN4UFFVRlBMSGxDUVVGNVFpeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXk5RUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlZ5eEZRVUZGTEVOQlFWYzdTVUZET1VRc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1UwRkJVeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1NVRkRia1FzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTldMRTlCUVU4c1IwRkJSeXhEUVVGRE8wbEJRMklzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eFBRVUZQTEUxQlFVMHNSMEZCUnl4SFFVRkhMRU5CUVVNN1FVRkRkRUlzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTTFSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMSFZDUVVGMVFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnhGTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRka1FzU1VGQlNTeERRVUZETEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNN1VVRkRaaXhQUVVGUExFZEJRVWNzUTBGQlF6dEpRVU5pTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE0wTXNUMEZCVHl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU16UWl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxHTkJRV01zUTBGQlF5eERRVUZYTEVWQlFVVXNRMEZCVnp0SlFVTnlSQ3hQUVVGUExIbENRVUY1UWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRek5FTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2RVSkJRWFZDTEVOQlFVTXNRMEZCVnl4RlFVRkZMRU5CUVZjN1NVRkRPVVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGNFUXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU55UWl4TlFVRk5MRWxCUVVrc1IwRkJSeXhIUVVGSExFZEJRVWNzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXp0SlFVTnNReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF6dFJRVUZGTEU5QlFVOHNSMEZCUnl4RFFVRkRPenRSUVVNMVF5eFBRVUZQTEUxQlFVMHNSMEZCUnl4TFFVRkxMRWRCUVVjc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFJDeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSEZDUVVGeFFpeERRVUZETEVOQlFWY3NSVUZCUlN4RFFVRlhPMGxCUXpWRUxFOUJRVThzZVVKQlFYbENMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGJFVXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3g1UWtGQmVVSXNRMEZCUXl4UlFVRm5RanRKUVVONFJDeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkZMRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU0zUWl4RFFVRkRPMEZCUlVRc1RVRkJUU3hWUVVGVkxIbENRVUY1UWl4RFFVRkRMRlZCUVd0Q08wbEJRekZFTEU5QlFVOHNRMEZCUXl4SFFVRkhMRlZCUVZVc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRE5VSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3huUWtGQlowSXNRMEZCUXl4TlFVRmpMRVZCUVVVc1EwRkJVeXhGUVVGRkxFbEJRWGRETzBsQlEyeEhMRk5CUVZNc1MwRkJTeXhEUVVGRExFMUJRV2RETEVWQlFVVXNUMEZCT0VJN1VVRkROMFVzU1VGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUTNCQ0xFbEJRVWtzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVVjBRaXhMUVVGTExFMUJRVTBzVDBGQlR5eEpRVUZKTEUxQlFVMHNSVUZCUlR0WlFVTTFRaXhOUVVGTkxHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeFZRVUZWTEVsQlFVa3NTVUZCU1N4SlFVRkpMR05CUVdNc1IwRkJSeXhWUVVGVkxFVkJRVVU3WjBKQlEzSkVMRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU03WjBKQlEyNUNMRlZCUVZVc1IwRkJSeXhqUVVGakxFTkJRVU03WVVGRE4wSTdVMEZEUmp0UlFVTkVMRTlCUVU4c1VVRkJVU3hEUVVGRE8wbEJRMnhDTEVOQlFVTTdTVUZGUkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOMlF5eE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJSVGRDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM0pDTEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGNrSTdTVUZGUkN4UFFVRlBMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzFGQlEzaENMRTFCUVUwc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGRFppeFZRVUZWTEVOQlFVTXNUVUZCVFN4RlFVRTRRaXhGUVVNdlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zVlVGQlV5eEhRVUZITEVWQlFVVXNTMEZCU3p0WlFVTjRSQ3hQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTFBc1NVRkJTU3hIUVVGSExFVkJRVVU3V1VGRFVDeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRMnBDTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRGVFSTdTMEZEUmp0SlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8wRkJRMmhDTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdRbWwwUVhKeVlYa2dabkp2YlNBbkxpOWlhWFF0WVhKeVlYa25PMXh1YVcxd2IzSjBJSHR5WVc1a2IyMUpiblI5SUdaeWIyMGdKeTR2Y21GdVpHOXRKenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJSE5wYldsc1lYSnBkSGxOWlhSeWFXTTZJSHRiYm1GdFpUb2djM1J5YVc1blhUb2dLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTa2dQVDRnYm5WdFltVnlmU0E5SUh0Y2JpQWdKMVJoYm1sdGIzUnZKem9nZEdGdWFXMXZkRzlUYVcxcGJHRnlhWFI1TEZ4dUlDQW5SR2xqWlNjNklHUnBZMlZUYVcxcGJHRnlhWFI1TEZ4dUlDQW5RWE41YlcxbGRISnBZeWM2SUdGemVXMXRaWFJ5YVdOVGFXMXBiR0Z5YVhSNUxGeHVJQ0FuUW5KaGRXNHRRbXhoYm5GMVpYUW5PaUJpY21GMWJrSnNZVzV4ZFdWMFUybHRhV3hoY21sMGVTeGNiaUFnSjBOdmMybHVaU2M2SUdOdmMybHVaVk5wYldsc1lYSnBkSGtzWEc0Z0lDZExkV3hqZW5sdWMydHBKem9nYTNWc1kzcDVibk5yYVZOcGJXbHNZWEpwZEhrc1hHNGdJQ2ROWXkxRGIyNXVZWFZuYUdWNUp6b2diV05EYjI1dVlYVm5hR1Y1VTJsdGFXeGhjbWwwZVN4Y2JpQWdKMUp2WjI5MExVZHZiR1JpWlhKbkp6b2djbTluYjNSSGIyeGtZbVZ5WjFOcGJXbHNZWEpwZEhrc1hHNGdJQ2RTZFhOelpXd25PaUJ5ZFhOelpXeFRhVzFwYkdGeWFYUjVMRnh1SUNBblUyOXJZV3duT2lCemIydGhiRk5wYldsc1lYSnBkSGtzWEc0Z0lDZElZVzF0YVc1bkp6b2dhR0Z0YldsdVoxTnBiV2xzWVhKcGRIa3NYRzRnSUNkRmRXTnNhV1JsWVc0bk9pQmxkV05zYVdSbFlXNVRhVzFwYkdGeWFYUjVMRnh1ZlR0Y2JseHVaWGh3YjNKMElHTnZibk4wSUdScGMzUmhibU5sVFdWMGNtbGpjem9nZTF0dVlXMWxPaUJ6ZEhKcGJtZGRPaUFvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLU0E5UGlCdWRXMWlaWEo5SUQwZ2UxeHVJQ0FuVkdGdWFXMXZkRzhuT2lCMFlXNXBiVzkwYjBScGMzUmhibU5sTEZ4dUlDQW5SR2xqWlNjNklHUnBZMlZFYVhOMFlXNWpaU3hjYmlBZ0owRnplVzF0WlhSeWFXTW5PaUJoYzNsdGJXVjBjbWxqUkdsemRHRnVZMlVzWEc0Z0lDZENjbUYxYmkxQ2JHRnVjWFZsZENjNklHSnlZWFZ1UW14aGJuRjFaWFJFYVhOMFlXNWpaU3hjYmlBZ0owTnZjMmx1WlNjNklHTnZjMmx1WlVScGMzUmhibU5sTEZ4dUlDQW5TM1ZzWTNwNWJuTnJhU2M2SUd0MWJHTjZlVzV6YTJsRWFYTjBZVzVqWlN4Y2JpQWdKMDFqTFVOdmJtNWhkV2RvWlhrbk9pQnRZME52Ym01aGRXZG9aWGxFYVhOMFlXNWpaU3hjYmlBZ0oxSnZaMjkwTFVkdmJHUmlaWEpuSnpvZ2NtOW5iM1JIYjJ4a1ltVnlaMFJwYzNSaGJtTmxMRnh1SUNBblVuVnpjMlZzSnpvZ2NuVnpjMlZzUkdsemRHRnVZMlVzWEc0Z0lDZFRiMnRoYkNjNklITnZhMkZzUkdsemRHRnVZMlVzWEc0Z0lDZElZVzF0YVc1bkp6b2dhR0Z0YldsdVowUnBjM1JoYm1ObExGeHVJQ0FuUlhWamJHbGtaV0Z1SnpvZ1pYVmpiR2xrWldGdVJHbHpkR0Z1WTJVc1hHNTlPMXh1WEc1bGVIQnZjblFnWTI5dWMzUWdRMGhGVFY5VFNVMUpURUZTU1ZSWlgwMUZWRkpKUTFNZ1BTQmJKMVJoYm1sdGIzUnZKeXdnSjBScFkyVW5MQ0FuUTI5emFXNWxKeXdnSjBoaGJXMXBibWNuTENBblJYVmpiR2xrWldGdUoxMDdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIwWVc1cGJXOTBiMU5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ1kyOXVjM1FnZEc5MFlXd2dQU0I0TG5SeWRXVkRiM1Z1ZENncElDc2dlUzUwY25WbFEyOTFiblFvS1R0Y2JpQWdhV1lnS0hSdmRHRnNJRDA5SURBcFhHNGdJQ0FnY21WMGRYSnVJREV1TUR0Y2JpQWdZMjl1YzNRZ1kyOXRiVzl1SUQwZ2VDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcE8xeHVJQ0J5WlhSMWNtNGdZMjl0Ylc5dUlDOGdLSFJ2ZEdGc0lDMGdZMjl0Ylc5dUtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhSaGJtbHRiM1J2UkdsemRHRnVZMlVvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUdkbGRFUnBjM1JoYm1ObFJuSnZiVk5wYldsc1lYSnBkSGtvZEdGdWFXMXZkRzlUYVcxcGJHRnlhWFI1S0hnc0lIa3BLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBZMlZUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lHTnZibk4wSUhSdmRHRnNJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXJJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR2xtSUNoMGIzUmhiQ0E5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJRElnS2lCamIyMXRiMjRnTHlCMGIzUmhiRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHUnBZMlZFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hrYVdObFUybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjNOcGJtVlRhVzFwYkdGeWFYUjVLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTazZJRzUxYldKbGNpQjdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdlQzUwY25WbFEyOTFiblFvS1NBcUlIa3VkSEoxWlVOdmRXNTBLQ2s3WEc0Z0lHbG1JQ2gwYjNSaGJDQTlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdMakE3WEc0Z0lHTnZibk4wSUdOdmJXMXZiaUE5SUhndVlXNWtWMmwwYUVOdmRXNTBRbWwwY3loNUxDQjBjblZsS1R0Y2JpQWdjbVYwZFhKdUlHTnZiVzF2YmlBdklFMWhkR2d1YzNGeWRDaDBiM1JoYkNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjNOcGJtVkVhWE4wWVc1alpTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0J5WlhSMWNtNGdaMlYwUkdsemRHRnVZMlZHY205dFUybHRhV3hoY21sMGVTaGpiM05wYm1WVGFXMXBiR0Z5YVhSNUtIZ3NJSGtwS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1YxWTJ4cFpHVmhibE5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUdkbGRGTnBiV2xzWVhKcGRIbEdjbTl0UkdsemRHRnVZMlVvWlhWamJHbGtaV0Z1UkdsemRHRnVZMlVvZUN3Z2VTa3BPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYVmpiR2xrWldGdVJHbHpkR0Z1WTJVb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaDRMblJ5ZFdWRGIzVnVkQ2dwSUNzZ2VTNTBjblZsUTI5MWJuUW9LU0F0SURJcWVDNWhibVJYYVhSb1EyOTFiblJDYVhSektIa3NJSFJ5ZFdVcEtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdoaGJXMXBibWRUYVcxcGJHRnlhWFI1S0hnNklFSnBkRUZ5Y21GNUxDQjVPaUJDYVhSQmNuSmhlU2s2SUc1MWJXSmxjaUI3WEc0Z0lISmxkSFZ5YmlCblpYUlRhVzFwYkdGeWFYUjVSbkp2YlVScGMzUmhibU5sS0doaGJXMXBibWRFYVhOMFlXNWpaU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCb1lXMXRhVzVuUkdsemRHRnVZMlVvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ2NtVjBkWEp1SUhndWRISjFaVU52ZFc1MEtDa2dLeUI1TG5SeWRXVkRiM1Z1ZENncElDMGdNaXA0TG1GdVpGZHBkR2hEYjNWdWRFSnBkSE1vZVN3Z2RISjFaU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpiMnRoYkZOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2RHOTBZV3dnUFNCNExuUnlkV1ZEYjNWdWRDZ3BJQ3NnZVM1MGNuVmxRMjkxYm5Rb0tUdGNiaUFnWTI5dWMzUWdZMjl0Ylc5dUlEMGdlQzVoYm1SWGFYUm9RMjkxYm5SQ2FYUnpLSGtzSUhSeWRXVXBPMXh1SUNCeVpYUjFjbTRnWTI5dGJXOXVJQzhnS0RJZ0tpQjBiM1JoYkNBdElETWdLaUJqYjIxdGIyNHBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2MyOXJZV3hFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2h6YjJ0aGJGTnBiV2xzWVhKcGRIa29lQ3dnZVNrcE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYTNWc1kzcDVibk5yYVZOcGJXbHNZWEpwZEhrb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdZMjl1YzNRZ2RHOTBZV3dnUFNCNExuUnlkV1ZEYjNWdWRDZ3BJQ3NnZVM1MGNuVmxRMjkxYm5Rb0tUdGNiaUFnWTI5dWMzUWdkRzkwWVd4UWNtOWtJRDBnZUM1MGNuVmxRMjkxYm5Rb0tTQXFJSGt1ZEhKMVpVTnZkVzUwS0NrN1hHNGdJR2xtSUNoMGIzUmhiRkJ5YjJRZ1BUMGdNQ2xjYmlBZ0lDQnlaWFIxY200Z01DNHdPMXh1SUNCamIyNXpkQ0JqYjIxdGIyNGdQU0I0TG1GdVpGZHBkR2hEYjNWdWRFSnBkSE1vZVN3Z2RISjFaU2s3WEc0Z0lISmxkSFZ5YmlBb1kyOXRiVzl1SUNvZ2RHOTBZV3dwSUM4Z0tESWdLaUIwYjNSaGJGQnliMlFwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhM1ZzWTNwNWJuTnJhVVJwYzNSaGJtTmxLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTazZJRzUxYldKbGNpQjdYRzRnSUhKbGRIVnliaUJuWlhSRWFYTjBZVzVqWlVaeWIyMVRhVzFwYkdGeWFYUjVLR3QxYkdONmVXNXphMmxUYVcxcGJHRnlhWFI1S0hnc0lIa3BLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHMWpRMjl1Ym1GMVoyaGxlVk5wYldsc1lYSnBkSGtvZURvZ1FtbDBRWEp5WVhrc0lIazZJRUpwZEVGeWNtRjVLVG9nYm5WdFltVnlJSHRjYmlBZ1kyOXVjM1FnZEc5MFlXd2dQU0I0TG5SeWRXVkRiM1Z1ZENncElDc2dlUzUwY25WbFEyOTFiblFvS1R0Y2JpQWdZMjl1YzNRZ2RHOTBZV3hRY205a0lEMGdlQzUwY25WbFEyOTFiblFvS1NBcUlIa3VkSEoxWlVOdmRXNTBLQ2s3WEc0Z0lHbG1JQ2gwYjNSaGJGQnliMlFnUFQwZ01DbGNiaUFnSUNCeVpYUjFjbTRnTUM0d08xeHVJQ0JqYjI1emRDQmpiMjF0YjI0Z1BTQjRMbUZ1WkZkcGRHaERiM1Z1ZEVKcGRITW9lU3dnZEhKMVpTazdYRzRnSUhKbGRIVnliaUFvWTI5dGJXOXVJQ29nZEc5MFlXd2dMU0IwYjNSaGJGQnliMlFwSUM4Z2RHOTBZV3hRY205a08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYldORGIyNXVZWFZuYUdWNVJHbHpkR0Z1WTJVb2VEb2dRbWwwUVhKeVlYa3NJSGs2SUVKcGRFRnljbUY1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdjbVYwZFhKdUlHZGxkRVJwYzNSaGJtTmxSbkp2YlZOcGJXbHNZWEpwZEhrb2JXTkRiMjV1WVhWbmFHVjVVMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaGMzbHRiV1YwY21salUybHRhV3hoY21sMGVTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0JqYjI1emRDQnRhVzRnUFNCTllYUm9MbTFwYmloNExuUnlkV1ZEYjNWdWRDZ3BMQ0I1TG5SeWRXVkRiM1Z1ZENncEtUdGNiaUFnYVdZZ0tHMXBiaUE5UFNBd0tWeHVJQ0FnSUhKbGRIVnliaUF3TGpBN1hHNGdJR052Ym5OMElHTnZiVzF2YmlBOUlIZ3VZVzVrVjJsMGFFTnZkVzUwUW1sMGN5aDVMQ0IwY25WbEtUdGNiaUFnY21WMGRYSnVJR052YlcxdmJpQXZJRzFwYmp0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z6ZVcxdFpYUnlhV05FYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hoYzNsdGJXVjBjbWxqVTJsdGFXeGhjbWwwZVNoNExDQjVLU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmljbUYxYmtKc1lXNXhkV1YwVTJsdGFXeGhjbWwwZVNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQmpiMjV6ZENCdFlYZ2dQU0JOWVhSb0xtMWhlQ2g0TG5SeWRXVkRiM1Z1ZENncExDQjVMblJ5ZFdWRGIzVnVkQ2dwS1R0Y2JpQWdhV1lnS0cxaGVDQTlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdMakE3WEc0Z0lHTnZibk4wSUdOdmJXMXZiaUE5SUhndVlXNWtWMmwwYUVOdmRXNTBRbWwwY3loNUxDQjBjblZsS1R0Y2JpQWdjbVYwZFhKdUlHTnZiVzF2YmlBdklHMWhlRHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHSnlZWFZ1UW14aGJuRjFaWFJFYVhOMFlXNWpaU2g0T2lCQ2FYUkJjbkpoZVN3Z2VUb2dRbWwwUVhKeVlYa3BPaUJ1ZFcxaVpYSWdlMXh1SUNCeVpYUjFjbTRnWjJWMFJHbHpkR0Z1WTJWR2NtOXRVMmx0YVd4aGNtbDBlU2hpY21GMWJrSnNZVzV4ZFdWMFUybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5ZFhOelpXeFRhVzFwYkdGeWFYUjVLSGc2SUVKcGRFRnljbUY1TENCNU9pQkNhWFJCY25KaGVTazZJRzUxYldKbGNpQjdYRzRnSUdsbUlDaDRMbXhsYm1kMGFDQTlQU0F3S1Z4dUlDQWdJSEpsZEhWeWJpQXdMakE3WEc0Z0lHTnZibk4wSUdOdmJXMXZiaUE5SUhndVlXNWtWMmwwYUVOdmRXNTBRbWwwY3loNUxDQjBjblZsS1R0Y2JpQWdjbVYwZFhKdUlHTnZiVzF2YmlBdklIZ3ViR1Z1WjNSb08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY25WemMyVnNSR2x6ZEdGdVkyVW9lRG9nUW1sMFFYSnlZWGtzSUhrNklFSnBkRUZ5Y21GNUtUb2diblZ0WW1WeUlIdGNiaUFnY21WMGRYSnVJR2RsZEVScGMzUmhibU5sUm5KdmJWTnBiV2xzWVhKcGRIa29jblZ6YzJWc1UybHRhV3hoY21sMGVTaDRMQ0I1S1NrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5YjJkdmRFZHZiR1JpWlhKblUybHRhV3hoY21sMGVTaDRPaUJDYVhSQmNuSmhlU3dnZVRvZ1FtbDBRWEp5WVhrcE9pQnVkVzFpWlhJZ2UxeHVJQ0JqYjI1emRDQmpiMjF0YjI0Z1BTQjRMbUZ1WkZkcGRHaERiM1Z1ZEVKcGRITW9lU3dnZEhKMVpTazdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdlQzVqYjNWdWRFSnBkSE1vZEhKMVpTa2dLeUI1TG1OdmRXNTBRbWwwY3loMGNuVmxLVHRjYmlBZ1kyOXVjM1FnYkdWdUlEMGdlQzVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJR1JwWm1ZZ1BTQnNaVzRnTFNCMGIzUmhiQ0FySUdOdmJXMXZianRjYmlBZ2FXWWdLQ2hqYjIxdGIyNGdQVDBnYkdWdUtTQjhmQ0FvWkdsbVppQTlQU0JzWlc0cEtTQnlaWFIxY200Z01TNHdPMXh1SUNCbGJITmxJSEpsZEhWeWJpQmpiMjF0YjI0Z0x5QjBiM1JoYkNBcklHUnBabVlnTHlBb01pQXFJR3hsYmlBdElIUnZkR0ZzS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEp2WjI5MFIyOXNaR0psY21kRWFYTjBZVzVqWlNoNE9pQkNhWFJCY25KaGVTd2dlVG9nUW1sMFFYSnlZWGtwT2lCdWRXMWlaWElnZTF4dUlDQnlaWFIxY200Z1oyVjBSR2x6ZEdGdVkyVkdjbTl0VTJsdGFXeGhjbWwwZVNoeWIyZHZkRWR2YkdSaVpYSm5VMmx0YVd4aGNtbDBlU2g0TENCNUtTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUlRhVzFwYkdGeWFYUjVSbkp2YlVScGMzUmhibU5sS0dScGMzUmhibU5sT2lCdWRXMWlaWElwSUh0Y2JpQWdjbVYwZFhKdUlERWdMeUFvSURFZ0t5QmthWE4wWVc1alpTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCblpYUkVhWE4wWVc1alpVWnliMjFUYVcxcGJHRnlhWFI1S0hOcGJXbHNZWEpwZEhrNklHNTFiV0psY2lrZ2UxeHVJQ0J5WlhSMWNtNGdNU0F2SUhOcGJXbHNZWEpwZEhrZ0xTQXhPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1oyVjBSR2wyWlhKelpWTjFZbk5sZENoc1pXNW5kR2c2SUc1MWJXSmxjaXdnYmpvZ2JuVnRZbVZ5TENCa2FYTjBPaUFvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlLU0I3WEc0Z0lHWjFibU4wYVc5dUlHMWhlRUo1S0haaGJIVmxjem9nU1hSbGNtRmliR1ZKZEdWeVlYUnZjanh1ZFcxaVpYSStMQ0J2Y21SbGNrSjVPaUFvYVRvZ2JuVnRZbVZ5S1NBOVBpQnVkVzFpWlhJcElIdGNiaUFnSUNCc1pYUWdiV0Y0Vm1Gc2RXVWdQU0J1ZFd4c08xeHVJQ0FnSUd4bGRDQnRZWGhQY21SbGNrSjVJRDBnYm5Wc2JEdGNibHh1SUNBZ0lHWnZjaUFvWTI5dWMzUWdaV3hsYldWdWRDQnZaaUIyWVd4MVpYTXBJSHRjYmlBZ0lDQWdJR052Ym5OMElHVnNaVzFsYm5SUGNtUmxja0o1SUQwZ2IzSmtaWEpDZVNobGJHVnRaVzUwS1R0Y2JpQWdJQ0FnSUdsbUlDaHRZWGhQY21SbGNrSjVJRDA5SUc1MWJHd2dmSHdnWld4bGJXVnVkRTl5WkdWeVFua2dQaUJ0WVhoUGNtUmxja0o1S1NCN1hHNGdJQ0FnSUNBZ0lHMWhlRlpoYkhWbElEMGdaV3hsYldWdWREdGNiaUFnSUNBZ0lDQWdiV0Y0VDNKa1pYSkNlU0E5SUdWc1pXMWxiblJQY21SbGNrSjVPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnYldGNFZtRnNkV1U3WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J6ZFdKelpYUWdQU0JiY21GdVpHOXRTVzUwS0d4bGJtZDBhQ0F0SURFcFhUdGNiaUFnWTI5dWMzUWdZMjl0Y0d4bGJXVnVkQ0E5SUc1bGR5QlRaWFFvS1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ2FXWWdLQ0Z6ZFdKelpYUXVhVzVqYkhWa1pYTW9hU2twWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG1Ga1pDaHBLVHRjYmlBZ2ZWeHVYRzRnSUhkb2FXeGxJQ2h6ZFdKelpYUXViR1Z1WjNSb0lEd2diaWtnZTF4dUlDQWdJR052Ym5OMElHbGtlQ0E5SUcxaGVFSjVLRnh1SUNBZ0lDQWdZMjl0Y0d4bGJXVnVkQzUyWVd4MVpYTW9LU0JoY3lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzWEc0Z0lDQWdJQ0FvYVNrZ1BUNGdUV0YwYUM1dGFXNHVZWEJ3Ykhrb1RXRjBhQ3dnYzNWaWMyVjBMbTFoY0NobWRXNWpkR2x2YmloMllXd3NJR2x1WkdWNEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmthWE4wS0drc0lIWmhiQ2s3WEc0Z0lDQWdJQ0I5S1NrcE8xeHVJQ0FnSUdsbUlDaHBaSGdwSUh0Y2JpQWdJQ0FnSUhOMVluTmxkQzV3ZFhOb0tHbGtlQ2s3WEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG1SbGJHVjBaU2hwWkhncE8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCeVpYUjFjbTRnYzNWaWMyVjBPMXh1ZlZ4dUlsMTkiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuZXhwb3J0IGNvbnN0IHRlc3RzID0ge307XG5leHBvcnQgbGV0IGN1cnJlbnRDYXRlZ29yeTtcbmV4cG9ydCB2YXIgYXNzdXJlO1xuKGZ1bmN0aW9uIChhc3N1cmUpIHtcbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWUgPT0gbnVsbCA/ICdWYWx1ZScgOiBuYW1lfSBub3QgZGVmaW5lZGApO1xuICAgIH1cbiAgICBhc3N1cmUubm90TnVsbCA9IG5vdE51bGw7XG59KShhc3N1cmUgfHwgKGFzc3VyZSA9IHt9KSk7XG5leHBvcnQgY2xhc3MgVGVzdCB7XG4gICAgY29uc3RydWN0b3IoY2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiAob3B0aW9ucyA9IHt9KTtcbiAgICAgICAgKF9hID0gb3B0aW9ucy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAob3B0aW9ucy50aW1lb3V0ID0gMzAwMDApO1xuICAgICAgICAoX2IgPSBvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChvcHRpb25zLnVuaGFuZGxlZEV4Y2VwdGlvblRpbWVvdXQgPSAyMDAwKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy50ZXN0ID0gKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5sYXN0RXJyb3IgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgdGVzdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKHlpZWxkIGFzc2VydE5vRXJyb3Iob3B0aW9ucy51bmhhbmRsZWRFeGNlcHRpb25UaW1lb3V0KSkpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYFVuaGFuZGxlZCBleGNlcHRpb24gZHVyaW5nIHRlc3Q6ICR7Z3Jvay5zaGVsbC5sYXN0RXJyb3J9YCkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3QobmFtZSwgdGVzdCwgb3B0aW9ucykge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLnRlc3RzID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XS50ZXN0cyA9IFtdO1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0udGVzdHMucHVzaChuZXcgVGVzdChjdXJyZW50Q2F0ZWdvcnksIG5hbWUsIHRlc3QsIG9wdGlvbnMpKTtcbn1cbi8qKiBBd2FpdHMgZm9yIGEgd2hpbGUgY2hlY2tpbmcgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgcGxhdGZvcm0gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb0Vycm9yKG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtcyAvIDUwMDsgKytpKSB7XG4gICAgICAgICAgICB5aWVsZCBkZWxheSg1MDApO1xuICAgICAgICAgICAgaWYgKGdyb2suc2hlbGwubGFzdEVycm9yLmxlbmd0aCAhPT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG59XG4vKiogVGVzdHMgdHdvIG9iamVjdHMgZm9yIGVxdWFsaXR5LCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXkgYXJlIG5vdCBlcXVhbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFwiJHtleHBlY3RlZH1cIiwgZ290IFwiJHthY3R1YWx9XCJgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RGbG9hdChhY3R1YWwsIGV4cGVjdGVkLCB0b2xlcmFuY2UgPSAwLjAwMSkge1xuICAgIGNvbnN0IGFyZUVxdWFsID0gTWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDwgdG9sZXJhbmNlO1xuICAgIGlmICghYXJlRXF1YWwpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH0gKHRvbGVyYW5jZSA9ICR7dG9sZXJhbmNlfSlgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RPYmplY3QoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGZvciAoY29uc3QgW2V4cGVjdGVkS2V5LCBleHBlY3RlZFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleHBlY3RlZCkpIHtcbiAgICAgICAgaWYgKCFhY3R1YWwuaGFzT3duUHJvcGVydHkoZXhwZWN0ZWRLZXkpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBwcm9wZXJ0eSBcIiR7ZXhwZWN0ZWRLZXl9XCIgbm90IGZvdW5kYCk7XG4gICAgICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gYWN0dWFsW2V4cGVjdGVkS2V5XTtcbiAgICAgICAgaWYgKGFjdHVhbFZhbHVlIGluc3RhbmNlb2YgQXJyYXkgJiYgZXhwZWN0ZWRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpO1xuICAgICAgICBlbHNlIGlmIChhY3R1YWxWYWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KVxuICAgICAgICAgICAgZXhwZWN0T2JqZWN0KGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsVmFsdWUgIT0gZXhwZWN0ZWRWYWx1ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJHtleHBlY3RlZFZhbHVlfSBmb3Iga2V5ICR7ZXhwZWN0ZWRLZXl9LCBnb3QgJHthY3R1YWxWYWx1ZX1gKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0QXJyYXkoYWN0dWFsLCBleHBlY3RlZCkge1xuICAgIGNvbnN0IGFjdHVhbExlbmd0aCA9IGFjdHVhbC5sZW5ndGg7XG4gICAgY29uc3QgZXhwZWN0ZWRMZW5ndGggPSBleHBlY3RlZC5sZW5ndGg7XG4gICAgaWYgKGFjdHVhbExlbmd0aCAhPSBleHBlY3RlZExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFycmF5cyBhcmUgb2YgZGlmZmVyZW50IGxlbmd0aDogYWN0dWFsIGFycmF5IGxlbmd0aCBpcyAke2FjdHVhbExlbmd0aH0gYCArXG4gICAgICAgICAgICBgYW5kIGV4cGVjdGVkIGFycmF5IGxlbmd0aCBpcyAke2V4cGVjdGVkTGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3R1YWxbaV0gaW5zdGFuY2VvZiBBcnJheSAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZXhwZWN0QXJyYXkoYWN0dWFsW2ldLCBleHBlY3RlZFtpXSk7XG4gICAgICAgIGVsc2UgaWYgKGFjdHVhbFtpXSBpbnN0YW5jZW9mIE9iamVjdCAmJiBleHBlY3RlZFtpXSBpbnN0YW5jZW9mIE9iamVjdClcbiAgICAgICAgICAgIGV4cGVjdE9iamVjdChhY3R1YWxbaV0sIGV4cGVjdGVkW2ldKTtcbiAgICAgICAgZWxzZSBpZiAoYWN0dWFsW2ldICE9IGV4cGVjdGVkW2ldKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAke2V4cGVjdGVkW2ldfSBhdCBwb3NpdGlvbiAke2l9LCBnb3QgJHthY3R1YWxbaV19YCk7XG4gICAgfVxufVxuLyoqIERlZmluZXMgYSB0ZXN0IHN1aXRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3J5KGNhdGVnb3J5LCB0ZXN0cykge1xuICAgIGN1cnJlbnRDYXRlZ29yeSA9IGNhdGVnb3J5O1xuICAgIHRlc3RzKCk7XG59XG4vKiogRGVmaW5lcyBhIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYmVmb3JlKGJlZm9yZSkge1xuICAgIGlmICh0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldID09IHVuZGVmaW5lZClcbiAgICAgICAgdGVzdHNbY3VycmVudENhdGVnb3J5XSA9IHt9O1xuICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0uYmVmb3JlID0gYmVmb3JlO1xufVxuLyoqIERlZmluZXMgYSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGVzdHMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgZXhlY3V0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gYWZ0ZXIoYWZ0ZXIpIHtcbiAgICBpZiAodGVzdHNbY3VycmVudENhdGVnb3J5XSA9PSB1bmRlZmluZWQpXG4gICAgICAgIHRlc3RzW2N1cnJlbnRDYXRlZ29yeV0gPSB7fTtcbiAgICB0ZXN0c1tjdXJyZW50Q2F0ZWdvcnldLmFmdGVyID0gYWZ0ZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gcnVuVGVzdHMob3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlc3RzKSkge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkpICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmICgha2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2F0ZWdvcnkudG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuYmVmb3JlKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5iZWZvcmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuYmVmb3JlU3RhdHVzID0geC50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdCA9IChfYSA9IHZhbHVlLnRlc3RzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Lmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgIHJlcy5wdXNoKHlpZWxkIGV4ZWNUZXN0KHRbaV0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50ZXN0KSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gKHlpZWxkIFByb21pc2UuYWxsKHJlcykpLmZpbHRlcigoZCkgPT4gZC5yZXN1bHQgIT0gJ3NraXBwZWQnKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmFmdGVyKVxuICAgICAgICAgICAgICAgICAgICB5aWVsZCB2YWx1ZS5hZnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5hZnRlclN0YXR1cyA9IHgudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZS5hZnRlclN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYWZ0ZXJTdGF0dXMsIHN1Y2Nlc3M6IGZhbHNlIH0pO1xuICAgICAgICAgICAgaWYgKHZhbHVlLmJlZm9yZVN0YXR1cylcbiAgICAgICAgICAgICAgICBkYXRhLnB1c2goeyBjYXRlZ29yeToga2V5LCBuYW1lOiAnaW5pdCcsIHJlc3VsdDogdmFsdWUuYmVmb3JlU3RhdHVzLCBzdWNjZXNzOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCguLi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGV4ZWNUZXN0KHQsIHByZWRpY2F0ZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUgIT0gdW5kZWZpbmVkICYmICghdC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVkaWNhdGUudG9Mb3dlckNhc2UoKSkpKVxuICAgICAgICAgICAgICAgIHIgPSB7IHN1Y2Nlc3M6IHRydWUsIHJlc3VsdDogJ3NraXBwZWQnIH07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgciA9IHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiAoX2EgPSB5aWVsZCB0LnRlc3QoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ09LJyB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoICh4KSB7XG4gICAgICAgICAgICByID0geyBzdWNjZXNzOiBmYWxzZSwgcmVzdWx0OiB4LnRvU3RyaW5nKCkgfTtcbiAgICAgICAgfVxuICAgICAgICByLmNhdGVnb3J5ID0gdC5jYXRlZ29yeTtcbiAgICAgICAgci5uYW1lID0gdC5uYW1lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICB9KTtcbn1cbi8qKiBXYWl0cyBbbXNdIG1pbGxpc2Vjb25kcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGF5KG1zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRHVnpkQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkluUmxjM1F1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzBGQlFVRXNUMEZCVHl4TFFVRkxMRWxCUVVrc1RVRkJUU3h0UWtGQmJVSXNRMEZCUXp0QlFVVXhReXhOUVVGTkxFTkJRVU1zVFVGQlRTeExRVUZMTEVkQlMyUXNSVUZCUlN4RFFVRkRPMEZCUlZBc1RVRkJUU3hEUVVGRExFbEJRVWtzWlVGQmRVSXNRMEZCUXp0QlFVVnVReXhOUVVGTkxFdEJRVmNzVFVGQlRTeERRVTEwUWp0QlFVNUVMRmRCUVdsQ0xFMUJRVTA3U1VGRmNrSXNVMEZCWjBJc1QwRkJUeXhEUVVGRExFdEJRVlVzUlVGQlJTeEpRVUZoTzFGQlF5OURMRWxCUVVrc1MwRkJTeXhKUVVGSkxFbEJRVWs3V1VGRFppeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hKUVVGSkxFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxHTkJRV01zUTBGQlF5eERRVUZETzBsQlEzQkZMRU5CUVVNN1NVRklaU3hqUVVGUExGVkJSM1JDTEVOQlFVRTdRVUZEU0N4RFFVRkRMRVZCVG1kQ0xFMUJRVTBzUzBGQlRpeE5RVUZOTEZGQlRYUkNPMEZCVDBRc1RVRkJUU3hQUVVGUExFbEJRVWs3U1VGTlppeFpRVUZaTEZGQlFXZENMRVZCUVVVc1NVRkJXU3hGUVVGRkxFbEJRWGRDTEVWQlFVVXNUMEZCY1VJN08xRkJRM3BHTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRE8xRkJRM3BDTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMnBDTEU5QlFVOHNZVUZCVUN4UFFVRlBMR05CUVZBc1QwRkJUeXhKUVVGUUxFOUJRVThzUjBGQlN5eEZRVUZGTEVWQlFVTTdVVUZEWml4TlFVRkJMRTlCUVU4c1EwRkJReXhQUVVGUExHOURRVUZtTEU5QlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVzc1MwRkJTeXhGUVVGRE8xRkJRekZDTEUxQlFVRXNUMEZCVHl4RFFVRkRMSGxDUVVGNVFpeHZRMEZCYWtNc1QwRkJUeXhEUVVGRExIbENRVUY1UWl4SFFVRkxMRWxCUVVrc1JVRkJRenRSUVVNelF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRSUVVOMlFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVhWQ0xFVkJRVVU3V1VGRGJrTXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhEUVVGUExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0blFrRkRNME1zU1VGQlNTeE5RVUZOTEVkQlFVY3NSVUZCUlN4RFFVRkRPMmRDUVVOb1FpeEpRVUZKTzI5Q1FVTkdMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRNVUlzVFVGQlRTeEhRVUZITEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRM1pDTzJkQ1FVRkRMRTlCUVU4c1EwRkJUU3hGUVVGRk8yOUNRVU5tTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRwUWtGRFdEdG5Ra0ZEUkN4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxHRkJRV0VzUTBGQlF5eFBRVUZSTEVOQlFVTXNlVUpCUVRCQ0xFTkJRVU1zUTBGQlF6dHZRa0ZETjBRc1RVRkJUU3hEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEc5RFFVRnZReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFFWXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMnhDTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1VVRkRUQ3hEUVVGRExFTkJRVUVzUTBGQlF6dEpRVU5LTEVOQlFVTTdRMEZEUmp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hKUVVGSkxFTkJRVU1zU1VGQldTeEZRVUZGTEVsQlFYZENMRVZCUVVVc1QwRkJjVUk3U1VGRGFFWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzVTBGQlV6dFJRVU55UXl4TFFVRkxMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBsQlF6bENMRWxCUVVrc1MwRkJTeXhEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEV0QlFVc3NTVUZCU1N4VFFVRlRPMUZCUXpORExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRM0JETEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhMUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja1lzUTBGQlF6dEJRVVZFTEcxRlFVRnRSVHRCUVVOdVJTeE5RVUZOTEZWQlFXZENMR0ZCUVdFc1EwRkJReXhGUVVGVk96dFJRVU0xUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU5xUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU5xUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMmRDUVVOdVF5eFBRVUZQTEV0QlFVc3NRMEZCUXp0VFFVTm9RanRSUVVORUxFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0RFFVRkJPMEZCUlVRc2FVWkJRV2xHTzBGQlEycEdMRTFCUVUwc1ZVRkJWU3hOUVVGTkxFTkJRVU1zVFVGQlZ5eEZRVUZGTEZGQlFXRTdTVUZETDBNc1NVRkJTU3hOUVVGTkxFdEJRVXNzVVVGQlVUdFJRVU55UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHRkJRV0VzVVVGQlVTeFhRVUZYTEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRMMFFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4WFFVRlhMRU5CUVVNc1RVRkJZeXhGUVVGRkxGRkJRV2RDTEVWQlFVVXNVMEZCVXl4SFFVRkhMRXRCUVVzN1NVRkROMFVzVFVGQlRTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzVVVGQlVTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRPMGxCUTNwRUxFbEJRVWtzUTBGQlF5eFJRVUZSTzFGQlExZ3NUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXhaUVVGWkxGRkJRVkVzVTBGQlV5eE5RVUZOTEdsQ1FVRnBRaXhUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETzBGQlEzUkdMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzV1VGQldTeERRVUZETEUxQlFUaENMRVZCUVVVc1VVRkJaME03U1VGRE0wWXNTMEZCU3l4TlFVRk5MRU5CUVVNc1YwRkJWeXhGUVVGRkxHRkJRV0VzUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFVkJRVVU3VVVGRGJrVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhqUVVGakxFTkJRVU1zVjBGQlZ5eERRVUZETzFsQlEzSkRMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zYzBKQlFYTkNMRmRCUVZjc1lVRkJZU3hEUVVGRExFTkJRVU03VVVGRmJFVXNUVUZCVFN4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzFGQlEzaERMRWxCUVVrc1YwRkJWeXhaUVVGWkxFdEJRVXNzU1VGQlNTeGhRVUZoTEZsQlFWa3NTMEZCU3p0WlFVTm9SU3hYUVVGWExFTkJRVU1zVjBGQlZ5eEZRVUZGTEdGQlFXRXNRMEZCUXl4RFFVRkRPMkZCUTNKRExFbEJRVWtzVjBGQlZ5eFpRVUZaTEUxQlFVMHNTVUZCU1N4aFFVRmhMRmxCUVZrc1RVRkJUVHRaUVVOMlJTeFpRVUZaTEVOQlFVTXNWMEZCVnl4RlFVRkZMR0ZCUVdFc1EwRkJReXhEUVVGRE8yRkJRM1JETEVsQlFVa3NWMEZCVnl4SlFVRkpMR0ZCUVdFN1dVRkRia01zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4WlFVRlpMR0ZCUVdFc1dVRkJXU3hYUVVGWExGTkJRVk1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTXpSanRCUVVOSUxFTkJRVU03UVVGRlJDeE5RVUZOTEZWQlFWVXNWMEZCVnl4RFFVRkRMRTFCUVdFc1JVRkJSU3hSUVVGbE8wbEJRM2hFTEUxQlFVMHNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGJrTXNUVUZCVFN4alFVRmpMRWRCUVVjc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVVYyUXl4SlFVRkpMRmxCUVZrc1NVRkJTU3hqUVVGakxFVkJRVVU3VVVGRGJFTXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXd3UkVGQk1FUXNXVUZCV1N4SFFVRkhPMWxCUTNaR0xHZERRVUZuUXl4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8wdEJRM0pFTzBsQlJVUXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZsQlFWa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRSUVVOeVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1dVRkJXU3hMUVVGTExFbEJRVWtzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRXRCUVVzN1dVRkROVVFzVjBGQlZ5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0aFFVTnFReXhKUVVGSkxFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNXVUZCV1N4TlFVRk5MRWxCUVVrc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eFpRVUZaTEUxQlFVMDdXVUZEYmtVc1dVRkJXU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dGhRVU5zUXl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXk5Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNXVUZCV1N4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRk5CUVZNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0TFFVTnFSanRCUVVOSUxFTkJRVU03UVVGRlJDdzBRa0ZCTkVJN1FVRkROVUlzVFVGQlRTeFZRVUZWTEZGQlFWRXNRMEZCUXl4UlFVRm5RaXhGUVVGRkxFdEJRV2xDTzBsQlF6RkVMR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU03U1VGRE0wSXNTMEZCU3l4RlFVRkZMRU5CUVVNN1FVRkRWaXhEUVVGRE8wRkJSVVFzZDBaQlFYZEdPMEZCUTNoR0xFMUJRVTBzVlVGQlZTeE5RVUZOTEVOQlFVTXNUVUZCTWtJN1NVRkRhRVFzU1VGQlNTeExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1UwRkJVenRSUVVOeVF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wbEJRemxDTEV0QlFVc3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETzBGQlEzcERMRU5CUVVNN1FVRkZSQ3gxUmtGQmRVWTdRVUZEZGtZc1RVRkJUU3hWUVVGVkxFdEJRVXNzUTBGQlF5eExRVUV3UWp0SlFVTTVReXhKUVVGSkxFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNTVUZCU1N4VFFVRlRPMUZCUTNKRExFdEJRVXNzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1NVRkRPVUlzUzBGQlN5eERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGRrTXNRMEZCUXp0QlFVZEVMRTFCUVUwc1ZVRkJaMElzVVVGQlVTeERRVUZETEU5QlFUaERPenM3VVVGRE0wVXNUVUZCVFN4UFFVRlBMRWRCUVRaRkxFVkJRVVVzUTBGQlF6dFJRVVUzUml4TFFVRkxMRTFCUVUwc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVa3NUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdFpRVU5vUkN4SlFVRkpMRU5CUVVFc1QwRkJUeXhoUVVGUUxFOUJRVThzZFVKQlFWQXNUMEZCVHl4RFFVRkZMRkZCUVZFc1MwRkJTU3hUUVVGVExFVkJRVVU3WjBKQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTlCUVU4c1lVRkJVQ3hQUVVGUExIVkNRVUZRTEU5QlFVOHNRMEZCUlN4UlFVRlJMRU5CUVVNc1YwRkJWeXhGUVVGRkxFTkJRVU03YjBKQlEyaEZMRk5CUVZNN1lVRkRXanRaUVVORUxFbEJRVWs3WjBKQlEwWXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUVHR2UWtGRFpDeE5RVUZOTEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenRoUVVONFFqdFpRVUZETEU5QlFVOHNRMEZCVFN4RlFVRkZPMmRDUVVObUxFdEJRVXNzUTBGQlF5eFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yRkJRMjVETzFsQlEwUXNUVUZCVFN4RFFVRkRMRWRCUVVjc1RVRkJRU3hMUVVGTExFTkJRVU1zUzBGQlN5eHRRMEZCU1N4RlFVRkZMRU5CUVVNN1dVRkROVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzJkQ1FVTXZRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEdGQlFWQXNUMEZCVHl4MVFrRkJVQ3hQUVVGUExFTkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVm9SQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEUxQlFVMHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNTVUZCU1N4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVNelJTeEpRVUZKTzJkQ1FVTkdMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXM3YjBKQlEySXNUVUZCVFN4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03WVVGRGRrSTdXVUZCUXl4UFFVRlBMRU5CUVUwc1JVRkJSVHRuUWtGRFppeExRVUZMTEVOQlFVTXNWMEZCVnl4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dGhRVU5zUXp0WlFVTkVMRWxCUVVrc1MwRkJTeXhEUVVGRExGZEJRVmM3WjBKQlEyNUNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eFJRVUZSTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUlVGQlF5eERRVUZETEVOQlFVTTdXVUZEZEVZc1NVRkJTU3hMUVVGTExFTkJRVU1zV1VGQldUdG5Ra0ZEY0VJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmxCUVZrc1JVRkJSU3hQUVVGUExFVkJRVVVzUzBGQlN5eEZRVUZETEVOQlFVTXNRMEZCUXp0WlFVTjJSaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1UwRkRka0k3VVVGRlJDeFBRVUZQTEU5QlFVOHNRMEZCUXpzN1EwRkRhRUk3UVVGRlJDeFRRVUZsTEZGQlFWRXNRMEZCUXl4RFFVRlBMRVZCUVVVc1UwRkJOa0k3T3p0UlFVTTFSQ3hKUVVGSkxFTkJRWGxGTEVOQlFVTTdVVUZET1VVc1NVRkJTVHRaUVVOR0xFbEJRVWtzVTBGQlV5eEpRVUZKTEZOQlFWTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNaR0xFTkJRVU1zUjBGQlJ5eEZRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlF5eERRVUZET3p0blFrRkZka01zUTBGQlF5eEhRVUZITEVWQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlFTeE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc2JVTkJRVWtzU1VGQlNTeEZRVUZETEVOQlFVTTdVMEZEZGtRN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJUdFpRVU5tTEVOQlFVTXNSMEZCUnl4RlFVRkRMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJReXhEUVVGRE8xTkJRelZETzFGQlEwUXNRMEZCUXl4RFFVRkRMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETzFGQlEzaENMRU5CUVVNc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTm9RaXhQUVVGUExFTkJRVU1zUTBGQlF6czdRMEZEVmp0QlFVVkVMRGhDUVVFNFFqdEJRVU01UWl4TlFVRk5MRlZCUVdkQ0xFdEJRVXNzUTBGQlF5eEZRVUZWT3p0UlFVTndReXhOUVVGTkxFbEJRVWtzVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRPVU1zUTBGQlF6dERRVUZCSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0IwWlhOMGN6b2dlMXh1SUNCYmEyVjVPaUJ6ZEhKcGJtZGRPaUI3WEc0Z0lDQWdkR1Z6ZEhNL09pQlVaWE4wVzEwc0lHSmxabTl5WlQ4NklDZ3BJRDArSUZCeWIyMXBjMlU4ZG05cFpENHNJR0ZtZEdWeVB6b2dLQ2tnUFQ0Z1VISnZiV2x6WlR4MmIybGtQaXhjYmlBZ0lDQmlaV1p2Y21WVGRHRjBkWE0vT2lCemRISnBibWNzSUdGbWRHVnlVM1JoZEhWelB6b2djM1J5YVc1blhHNGdJSDFjYm4wZ1BTQjdmVHRjYmx4dVpYaHdiM0owSUd4bGRDQmpkWEp5Wlc1MFEyRjBaV2R2Y25rNklITjBjbWx1Wnp0Y2JseHVaWGh3YjNKMElHNWhiV1Z6Y0dGalpTQmhjM04xY21VZ2UxeHVYRzRnSUdWNGNHOXlkQ0JtZFc1amRHbHZiaUJ1YjNST2RXeHNLSFpoYkhWbE9pQmhibmtzSUc1aGJXVS9PaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnBaaUFvZG1Gc2RXVWdQVDBnYm5Wc2JDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loZ0pIdHVZVzFsSUQwOUlHNTFiR3dnUHlBblZtRnNkV1VuSURvZ2JtRnRaWDBnYm05MElHUmxabWx1WldSZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRlJsYzNSUGNIUnBiMjV6SUh0Y2JpQWdkR2x0Wlc5MWREODZJRzUxYldKbGNqdGNiaUFnZFc1b1lXNWtiR1ZrUlhoalpYQjBhVzl1VkdsdFpXOTFkRDg2SUc1MWJXSmxjanRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZSbGMzUWdlMXh1SUNCMFpYTjBPaUFvS1NBOVBpQlFjbTl0YVhObFBHRnVlVDQ3WEc0Z0lHNWhiV1U2SUhOMGNtbHVaenRjYmlBZ1kyRjBaV2R2Y25rNklITjBjbWx1Wnp0Y2JpQWdiM0IwYVc5dWN6ODZJRlJsYzNSUGNIUnBiMjV6TzF4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0dOaGRHVm5iM0o1T2lCemRISnBibWNzSUc1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wSUh0Y2JpQWdJQ0IwYUdsekxtTmhkR1ZuYjNKNUlEMGdZMkYwWldkdmNuazdYRzRnSUNBZ2RHaHBjeTV1WVcxbElEMGdibUZ0WlR0Y2JpQWdJQ0J2Y0hScGIyNXpJRDgvUFNCN2ZUdGNiaUFnSUNCdmNIUnBiMjV6TG5ScGJXVnZkWFFnUHo4OUlETXdNREF3TzF4dUlDQWdJRzl3ZEdsdmJuTXVkVzVvWVc1a2JHVmtSWGhqWlhCMGFXOXVWR2x0Wlc5MWRDQS9QejBnTWpBd01EdGNiaUFnSUNCMGFHbHpMbTl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpPMXh1SUNBZ0lIUm9hWE11ZEdWemRDQTlJR0Z6ZVc1aklDZ3BPaUJRY205dGFYTmxQR0Z1ZVQ0Z1BUNGdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHNWxkeUJRY205dGFYTmxLR0Z6ZVc1aklDaHlaWE52YkhabExDQnlaV3BsWTNRcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlDY25PMXh1SUNBZ0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQWdJR2R5YjJzdWMyaGxiR3d1YkdGemRFVnljbTl5SUQwZ0p5YzdYRzRnSUNBZ0lDQWdJQ0FnY21WemRXeDBJRDBnWVhkaGFYUWdkR1Z6ZENncE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxPaUJoYm5rcElIdGNiaUFnSUNBZ0lDQWdJQ0J5WldwbFkzUW9aU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLQ0VvWVhkaGFYUWdZWE56WlhKMFRtOUZjbkp2Y2lodmNIUnBiMjV6SVM1MWJtaGhibVJzWldSRmVHTmxjSFJwYjI1VWFXMWxiM1YwSVNrcEtWeHVJQ0FnSUNBZ0lDQWdJSEpsYW1WamRDaHVaWGNnUlhKeWIzSW9ZRlZ1YUdGdVpHeGxaQ0JsZUdObGNIUnBiMjRnWkhWeWFXNW5JSFJsYzNRNklDUjdaM0p2YXk1emFHVnNiQzVzWVhOMFJYSnliM0o5WUNrcE8xeHVJQ0FnSUNBZ0lDQnlaWE52YkhabEtISmxjM1ZzZENrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNCOU8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjBaWE4wS0c1aGJXVTZJSE4wY21sdVp5d2dkR1Z6ZERvZ0tDa2dQVDRnVUhKdmJXbHpaVHhoYm5rK0xDQnZjSFJwYjI1elB6b2dWR1Z6ZEU5d2RHbHZibk1wT2lCMmIybGtJSHRjYmlBZ2FXWWdLSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwZ1BUMGdkVzVrWldacGJtVmtLVnh1SUNBZ0lIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjBnUFNCN2ZUdGNiaUFnYVdZZ0tIUmxjM1J6VzJOMWNuSmxiblJEWVhSbFoyOXllVjB1ZEdWemRITWdQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJSFJsYzNSelcyTjFjbkpsYm5SRFlYUmxaMjl5ZVYwdWRHVnpkSE1nUFNCYlhUdGNiaUFnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTNTBaWE4wY3lFdWNIVnphQ2h1WlhjZ1ZHVnpkQ2hqZFhKeVpXNTBRMkYwWldkdmNua3NJRzVoYldVc0lIUmxjM1FzSUc5d2RHbHZibk1wS1R0Y2JuMWNibHh1THlvcUlFRjNZV2wwY3lCbWIzSWdZU0IzYUdsc1pTQmphR1ZqYTJsdVp5QjBhR1VnWlhKeWIzSWdjM1JoZEhWeklHOW1JSFJvWlNCd2JHRjBabTl5YlNBcUwxeHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUdGemMyVnlkRTV2UlhKeWIzSW9iWE02SUc1MWJXSmxjaWs2SUZCeWIyMXBjMlU4WW05dmJHVmhiajRnZTF4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJRzF6SUM4Z05UQXdPeUFySzJrcElIdGNiaUFnSUNCaGQyRnBkQ0JrWld4aGVTZzFNREFwTzF4dUlDQWdJR2xtSUNobmNtOXJMbk5vWld4c0xteGhjM1JGY25KdmNpNXNaVzVuZEdnZ0lUMDlJREFwWEc0Z0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVN1hHNGdJSDFjYmlBZ2NtVjBkWEp1SUhSeWRXVTdYRzU5WEc1Y2JpOHFLaUJVWlhOMGN5QjBkMjhnYjJKcVpXTjBjeUJtYjNJZ1pYRjFZV3hwZEhrc0lIUm9jbTkzY3lCaGJpQmxlR05sY0hScGIyNGdhV1lnZEdobGVTQmhjbVVnYm05MElHVnhkV0ZzTGlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZENoaFkzUjFZV3c2SUdGdWVTd2daWGh3WldOMFpXUTZJR0Z1ZVNrNklIWnZhV1FnZTF4dUlDQnBaaUFvWVdOMGRXRnNJQ0U5UFNCbGVIQmxZM1JsWkNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJRndpSkh0bGVIQmxZM1JsWkgxY0lpd2daMjkwSUZ3aUpIdGhZM1IxWVd4OVhDSmdLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHVjRjR1ZqZEVac2IyRjBLR0ZqZEhWaGJEb2diblZ0WW1WeUxDQmxlSEJsWTNSbFpEb2diblZ0WW1WeUxDQjBiMnhsY21GdVkyVWdQU0F3TGpBd01TazZJSFp2YVdRZ2UxeHVJQ0JqYjI1emRDQmhjbVZGY1hWaGJDQTlJRTFoZEdndVlXSnpLR0ZqZEhWaGJDQXRJR1Y0Y0dWamRHVmtLU0E4SUhSdmJHVnlZVzVqWlR0Y2JpQWdhV1lnS0NGaGNtVkZjWFZoYkNsY2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1I5TENCbmIzUWdKSHRoWTNSMVlXeDlJQ2gwYjJ4bGNtRnVZMlVnUFNBa2UzUnZiR1Z5WVc1alpYMHBZQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNPaUI3SUZ0clpYazZJSE4wY21sdVoxMDZJR0Z1ZVNCOUxDQmxlSEJsWTNSbFpEb2dleUJiYTJWNU9pQnpkSEpwYm1kZE9pQmhibmtnZlNrZ2UxeHVJQ0JtYjNJZ0tHTnZibk4wSUZ0bGVIQmxZM1JsWkV0bGVTd2daWGh3WldOMFpXUldZV3gxWlYwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb1pYaHdaV04wWldRcEtTQjdYRzRnSUNBZ2FXWWdLQ0ZoWTNSMVlXd3VhR0Z6VDNkdVVISnZjR1Z5ZEhrb1pYaHdaV04wWldSTFpYa3BLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtHQkZlSEJsWTNSbFpDQndjbTl3WlhKMGVTQmNJaVI3Wlhod1pXTjBaV1JMWlhsOVhDSWdibTkwSUdadmRXNWtZQ2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmhZM1IxWVd4V1lXeDFaU0E5SUdGamRIVmhiRnRsZUhCbFkzUmxaRXRsZVYwN1hHNGdJQ0FnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JXWVd4MVpTQnBibk4wWVc1alpXOW1JRUZ5Y21GNUtWeHVJQ0FnSUNBZ1pYaHdaV04wUVhKeVlYa29ZV04wZFdGc1ZtRnNkV1VzSUdWNGNHVmpkR1ZrVm1Gc2RXVXBPMXh1SUNBZ0lHVnNjMlVnYVdZZ0tHRmpkSFZoYkZaaGJIVmxJR2x1YzNSaGJtTmxiMllnVDJKcVpXTjBJQ1ltSUdWNGNHVmpkR1ZrVm1Gc2RXVWdhVzV6ZEdGdVkyVnZaaUJQWW1wbFkzUXBYRzRnSUNBZ0lDQmxlSEJsWTNSUFltcGxZM1FvWVdOMGRXRnNWbUZzZFdVc0lHVjRjR1ZqZEdWa1ZtRnNkV1VwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGWmhiSFZsSUNFOUlHVjRjR1ZqZEdWa1ZtRnNkV1VwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1JXWVd4MVpYMGdabTl5SUd0bGVTQWtlMlY0Y0dWamRHVmtTMlY1ZlN3Z1oyOTBJQ1I3WVdOMGRXRnNWbUZzZFdWOVlDazdYRzRnSUgxY2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1Y0Y0dWamRFRnljbUY1S0dGamRIVmhiRG9nWVc1NVcxMHNJR1Y0Y0dWamRHVmtPaUJoYm5sYlhTa2dlMXh1SUNCamIyNXpkQ0JoWTNSMVlXeE1aVzVuZEdnZ1BTQmhZM1IxWVd3dWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCbGVIQmxZM1JsWkV4bGJtZDBhQ0E5SUdWNGNHVmpkR1ZrTG14bGJtZDBhRHRjYmx4dUlDQnBaaUFvWVdOMGRXRnNUR1Z1WjNSb0lDRTlJR1Y0Y0dWamRHVmtUR1Z1WjNSb0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCQmNuSmhlWE1nWVhKbElHOW1JR1JwWm1abGNtVnVkQ0JzWlc1bmRHZzZJR0ZqZEhWaGJDQmhjbkpoZVNCc1pXNW5kR2dnYVhNZ0pIdGhZM1IxWVd4TVpXNW5kR2g5SUdBZ0sxeHVJQ0FnSUNBZ1lHRnVaQ0JsZUhCbFkzUmxaQ0JoY25KaGVTQnNaVzVuZEdnZ2FYTWdKSHRsZUhCbFkzUmxaRXhsYm1kMGFIMWdLVHRjYmlBZ2ZWeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1lXTjBkV0ZzVEdWdVozUm9PeUJwS3lzcElIdGNiaUFnSUNCcFppQW9ZV04wZFdGc1cybGRJR2x1YzNSaGJtTmxiMllnUVhKeVlYa2dKaVlnWlhod1pXTjBaV1JiYVYwZ2FXNXpkR0Z1WTJWdlppQkJjbkpoZVNsY2JpQWdJQ0FnSUdWNGNHVmpkRUZ5Y21GNUtHRmpkSFZoYkZ0cFhTd2daWGh3WldOMFpXUmJhVjBwTzF4dUlDQWdJR1ZzYzJVZ2FXWWdLR0ZqZEhWaGJGdHBYU0JwYm5OMFlXNWpaVzltSUU5aWFtVmpkQ0FtSmlCbGVIQmxZM1JsWkZ0cFhTQnBibk4wWVc1alpXOW1JRTlpYW1WamRDbGNiaUFnSUNBZ0lHVjRjR1ZqZEU5aWFtVmpkQ2hoWTNSMVlXeGJhVjBzSUdWNGNHVmpkR1ZrVzJsZEtUdGNiaUFnSUNCbGJITmxJR2xtSUNoaFkzUjFZV3hiYVYwZ0lUMGdaWGh3WldOMFpXUmJhVjBwWEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9ZRVY0Y0dWamRHVmtJQ1I3Wlhod1pXTjBaV1JiYVYxOUlHRjBJSEJ2YzJsMGFXOXVJQ1I3YVgwc0lHZHZkQ0FrZTJGamRIVmhiRnRwWFgxZ0tUdGNiaUFnZlZ4dWZWeHVYRzR2S2lvZ1JHVm1hVzVsY3lCaElIUmxjM1FnYzNWcGRHVXVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJGMFpXZHZjbmtvWTJGMFpXZHZjbms2SUhOMGNtbHVaeXdnZEdWemRITTZJQ2dwSUQwK0lIWnZhV1FwT2lCMmIybGtJSHRjYmlBZ1kzVnljbVZ1ZEVOaGRHVm5iM0o1SUQwZ1kyRjBaV2R2Y25rN1hHNGdJSFJsYzNSektDazdYRzU5WEc1Y2JpOHFLaUJFWldacGJtVnpJR0VnWm5WdVkzUnBiMjRnZEc4Z1ltVWdaWGhsWTNWMFpXUWdZbVZtYjNKbElIUm9aU0IwWlhOMGN5QnBiaUIwYUdseklHTmhkR1ZuYjNKNUlHRnlaU0JsZUdWamRYUmxaQzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCaVpXWnZjbVVvWW1WbWIzSmxPaUFvS1NBOVBpQlFjbTl0YVhObFBIWnZhV1ErS1RvZ2RtOXBaQ0I3WEc0Z0lHbG1JQ2gwWlhOMGMxdGpkWEp5Wlc1MFEyRjBaV2R2Y25sZElEMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkSUQwZ2UzMDdYRzRnSUhSbGMzUnpXMk4xY25KbGJuUkRZWFJsWjI5eWVWMHVZbVZtYjNKbElEMGdZbVZtYjNKbE8xeHVmVnh1WEc0dktpb2dSR1ZtYVc1bGN5QmhJR1oxYm1OMGFXOXVJSFJ2SUdKbElHVjRaV04xZEdWa0lHRm1kR1Z5SUhSb1pTQjBaWE4wY3lCcGJpQjBhR2x6SUdOaGRHVm5iM0o1SUdGeVpTQmxlR1ZqZFhSbFpDNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoWm5SbGNpaGhablJsY2pvZ0tDa2dQVDRnVUhKdmJXbHpaVHgyYjJsa1BpazZJSFp2YVdRZ2UxeHVJQ0JwWmlBb2RHVnpkSE5iWTNWeWNtVnVkRU5oZEdWbmIzSjVYU0E5UFNCMWJtUmxabWx1WldRcFhHNGdJQ0FnZEdWemRITmJZM1Z5Y21WdWRFTmhkR1ZuYjNKNVhTQTlJSHQ5TzF4dUlDQjBaWE4wYzF0amRYSnlaVzUwUTJGMFpXZHZjbmxkTG1GbWRHVnlJRDBnWVdaMFpYSTdYRzU5WEc1Y2JseHVaWGh3YjNKMElHRnplVzVqSUdaMWJtTjBhVzl1SUhKMWJsUmxjM1J6S0c5d2RHbHZibk0vT2lCN0lHTmhkR1ZuYjNKNVB6b2djM1J5YVc1bkxDQjBaWE4wUHpvZ2MzUnlhVzVuSUgwcElIdGNiaUFnWTI5dWMzUWdjbVZ6ZFd4MGN6b2dleUJqWVhSbFoyOXllVDg2SUhOMGNtbHVaeXdnYm1GdFpUODZJSE4wY21sdVp5d2djM1ZqWTJWemN6b2dZbTl2YkdWaGJpd2djbVZ6ZFd4ME9pQnpkSEpwYm1jZ2ZWdGRJRDBnVzEwN1hHNWNiaUFnWm05eUlDaGpiMjV6ZENCYmEyVjVMQ0IyWVd4MVpWMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9kR1Z6ZEhNcEtTQjdYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTS9MbU5oZEdWbmIzSjVJQ0U5SUhWdVpHVm1hVzVsWkNrZ2UxeHVJQ0FnSUNBZ2FXWWdLQ0ZyWlhrdWRHOU1iM2RsY2tOaGMyVW9LUzV6ZEdGeWRITlhhWFJvS0c5d2RHbHZibk0vTG1OaGRHVm5iM0o1TG5SdlRHOTNaWEpEWVhObEtDa3BLVnh1SUNBZ0lDQWdJQ0JqYjI1MGFXNTFaVHRjYmlBZ0lDQjlYRzRnSUNBZ2RISjVJSHRjYmlBZ0lDQWdJR2xtSUNoMllXeDFaUzVpWldadmNtVXBYRzRnSUNBZ0lDQWdJR0YzWVdsMElIWmhiSFZsTG1KbFptOXlaU2dwTzF4dUlDQWdJSDBnWTJGMFkyZ2dLSGc2SUdGdWVTa2dlMXh1SUNBZ0lDQWdkbUZzZFdVdVltVm1iM0psVTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JqYjI1emRDQjBJRDBnZG1Gc2RXVXVkR1Z6ZEhNZ1B6OGdXMTA3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpJRDBnVzEwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMExteGxibWQwYURzZ2FTc3JLVnh1SUNBZ0lDQWdjbVZ6TG5CMWMyZ29ZWGRoYVhRZ1pYaGxZMVJsYzNRb2RGdHBYU3dnYjNCMGFXOXVjejh1ZEdWemRDa3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ1pHRjBZU0E5SUNoaGQyRnBkQ0JRY205dGFYTmxMbUZzYkNoeVpYTXBLUzVtYVd4MFpYSW9LR1FwSUQwK0lHUXVjbVZ6ZFd4MElDRTlJQ2R6YTJsd2NHVmtKeWs3WEc0Z0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlM1aFpuUmxjaWxjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkbUZzZFdVdVlXWjBaWElvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2g0T2lCaGJua3BJSHRjYmlBZ0lDQWdJSFpoYkhWbExtRm1kR1Z5VTNSaGRIVnpJRDBnZUM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2RtRnNkV1V1WVdaMFpYSlRkR0YwZFhNcFhHNGdJQ0FnSUNCa1lYUmhMbkIxYzJnb2UyTmhkR1ZuYjNKNU9pQnJaWGtzSUc1aGJXVTZJQ2RwYm1sMEp5d2djbVZ6ZFd4ME9pQjJZV3gxWlM1aFpuUmxjbE4wWVhSMWN5d2djM1ZqWTJWemN6b2dabUZzYzJWOUtUdGNiaUFnSUNCcFppQW9kbUZzZFdVdVltVm1iM0psVTNSaGRIVnpLVnh1SUNBZ0lDQWdaR0YwWVM1d2RYTm9LSHRqWVhSbFoyOXllVG9nYTJWNUxDQnVZVzFsT2lBbmFXNXBkQ2NzSUhKbGMzVnNkRG9nZG1Gc2RXVXVZbVZtYjNKbFUzUmhkSFZ6TENCemRXTmpaWE56T2lCbVlXeHpaWDBwTzF4dUlDQWdJSEpsYzNWc2RITXVjSFZ6YUNndUxpNWtZWFJoS1R0Y2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCeVpYTjFiSFJ6TzF4dWZWeHVYRzVoYzNsdVl5Qm1kVzVqZEdsdmJpQmxlR1ZqVkdWemRDaDBPaUJVWlhOMExDQndjbVZrYVdOaGRHVTZJSE4wY21sdVp5QjhJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQnNaWFFnY2pvZ2V5QmpZWFJsWjI5eWVUODZJSE4wY21sdVp5d2dibUZ0WlQ4NklITjBjbWx1Wnl3Z2MzVmpZMlZ6Y3pvZ1ltOXZiR1ZoYml3Z2NtVnpkV3gwT2lCemRISnBibWNnZlR0Y2JpQWdkSEo1SUh0Y2JpQWdJQ0JwWmlBb2NISmxaR2xqWVhSbElDRTlJSFZ1WkdWbWFXNWxaQ0FtSmlBb0lYUXVibUZ0WlM1MGIweHZkMlZ5UTJGelpTZ3BMbk4wWVhKMGMxZHBkR2dvY0hKbFpHbGpZWFJsTG5SdlRHOTNaWEpEWVhObEtDa3BLU2xjYmlBZ0lDQWdJSElnUFNCN2MzVmpZMlZ6Y3pvZ2RISjFaU3dnY21WemRXeDBPaUFuYzJ0cGNIQmxaQ2Q5TzF4dUlDQWdJR1ZzYzJWY2JpQWdJQ0FnSUhJZ1BTQjdjM1ZqWTJWemN6b2dkSEoxWlN3Z2NtVnpkV3gwT2lCaGQyRnBkQ0IwTG5SbGMzUW9LU0EvUHlBblQwc25mVHRjYmlBZ2ZTQmpZWFJqYUNBb2VEb2dZVzU1S1NCN1hHNGdJQ0FnY2lBOUlIdHpkV05qWlhOek9pQm1ZV3h6WlN3Z2NtVnpkV3gwT2lCNExuUnZVM1J5YVc1bktDbDlPMXh1SUNCOVhHNGdJSEl1WTJGMFpXZHZjbmtnUFNCMExtTmhkR1ZuYjNKNU8xeHVJQ0J5TG01aGJXVWdQU0IwTG01aGJXVTdYRzRnSUhKbGRIVnliaUJ5TzF4dWZWeHVYRzR2S2lvZ1YyRnBkSE1nVzIxelhTQnRhV3hzYVhObFkyOXVaSE1nS2k5Y2JtVjRjRzl5ZENCaGMzbHVZeUJtZFc1amRHbHZiaUJrWld4aGVTaHRjem9nYm5WdFltVnlLU0I3WEc0Z0lHRjNZV2wwSUc1bGR5QlFjbTl0YVhObEtDaHlLU0E5UGlCelpYUlVhVzFsYjNWMEtISXNJRzF6S1NrN1hHNTlYRzRpWFgwPSIsIi8qKlxuICogRGVub3RlcyBhIHZlY3RvciBvZiBmbG9hdGluZyBwb2l0IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yXG4gKiBAZXh0ZW5kcyB7RmxvYXQzMkFycmF5fVxuICovXG5leHBvcnQgY2xhc3MgVmVjdG9yIGV4dGVuZHMgRmxvYXQzMkFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBhIHR3by1kaW1lbnNpb25hbCBtYXRyaXguXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIE1hdHJpeFxuICogQGV4dGVuZHMge0FycmF5PFZlY3Rvcj59XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRyaXggZXh0ZW5kcyBBcnJheSB7XG59XG4vKipcbiAqIERlbm90ZXMgY2FydGVzaWFuIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBDb29yZGluYXRlc1xuICogQGV4dGVuZHMge01hdHJpeH1cbiAqL1xuZXhwb3J0IGNsYXNzIENvb3JkaW5hdGVzIGV4dGVuZHMgTWF0cml4IHtcbn1cbi8qKlxuICogRGVub3RlcyBhbiBhcnJheSBvZiBhcmJpdHJhcnktdHlwZWQgdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgVmVjdG9yc1xuICogQGV4dGVuZHMge0FycmF5PGFueT59XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3JzIGV4dGVuZHMgQXJyYXkge1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEhsd1pTMWtaV05zWVhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVFVGQlR5eFRRVUZSTEZsQlFWazdRMEZCUnp0QlFVVXpRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRXRCUVdFN1EwRkJSenRCUVVVMVF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1YwRkJXU3hUUVVGUkxFMUJRVTA3UTBGQlJ6dEJRVVV4UXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVDBGQlVTeFRRVUZSTEV0QlFWVTdRMEZCUnlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklpOHFLbHh1SUNvZ1JHVnViM1JsY3lCaElIWmxZM1J2Y2lCdlppQm1iRzloZEdsdVp5QndiMmwwSUhaaGJIVmxjeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQVkyeGhjM01nVm1WamRHOXlYRzRnS2lCQVpYaDBaVzVrY3lCN1JteHZZWFF6TWtGeWNtRjVmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nVm1WamRHOXlJR1Y0ZEdWdVpITWdSbXh2WVhRek1rRnljbUY1SUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFIzYnkxa2FXMWxibk5wYjI1aGJDQnRZWFJ5YVhndVhHNGdLbHh1SUNvZ1FHVjRjRzl5ZEZ4dUlDb2dRR05zWVhOeklFMWhkSEpwZUZ4dUlDb2dRR1Y0ZEdWdVpITWdlMEZ5Y21GNVBGWmxZM1J2Y2o1OVhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5Qk5ZWFJ5YVhnZ1pYaDBaVzVrY3lCQmNuSmhlVHhXWldOMGIzSStJSHQ5WEc1Y2JpOHFLbHh1SUNvZ1JHVnViM1JsY3lCallYSjBaWE5wWVc0Z1kyOXZjbVJwYm1GMFpYTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRU52YjNKa2FXNWhkR1Z6WEc0Z0tpQkFaWGgwWlc1a2N5QjdUV0YwY21sNGZWeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdRMjl2Y21ScGJtRjBaWE1nWlhoMFpXNWtjeUJOWVhSeWFYZ2dlMzFjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdGdUlHRnljbUY1SUc5bUlHRnlZbWwwY21GeWVTMTBlWEJsWkNCMlpXTjBiM0p6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQmpiR0Z6Y3lCV1pXTjBiM0p6WEc0Z0tpQkFaWGgwWlc1a2N5QjdRWEp5WVhrOFlXNTVQbjFjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZabFkzUnZjbk1nWlhoMFpXNWtjeUJCY25KaGVUeGhibmsrSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJR1JwWTNScGIyNWhjbmtnWTI5dWRHRnBibWx1WnlCbWRXNWpkR2x2YmlCdmNIUnBiMjV6TGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQjBlWEJsSUU5d2RHbHZibk5jYmlBcUwxeHVaWGh3YjNKMElIUjVjR1VnVDNCMGFXOXVjeUE5SUh0YmJtRnRaVG9nYzNSeWFXNW5YVG9nWVc1NWZUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR04xYzNSdmJTQmthWE4wWVc1alpTQnRaWFJ5YVdNZ1ltVjBkMlZsYmlCMGFHVWdkSGR2SUdkcGRtVnVJSFpsWTNSdmNuTXVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhSNWNHVWdSR2x6ZEdGdVkyVk5aWFJ5YVdOY2JpQXFJRUJ3WVhKaGJTQjdZVzU1ZlNCMk1TQlVhR1VnWm1seWMzUWdkbVZqZEc5eUxseHVJQ29nUUhCaGNtRnRJSHRoYm5sOUlIWXlJRlJvWlNCelpXTnZibVFnZG1WamRHOXlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5ZlNCRWFYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pYTmxJSFIzYnlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdkSGx3WlNCRWFYTjBZVzVqWlUxbGRISnBZeUE5SUNoMk1Ub2dZVzU1TENCMk1qb2dZVzU1S1NBOVBpQW9iblZ0WW1WeUtUdGNibHh1THlvcVhHNGdLaUJFWlc1dmRHVnpJR0VnYzJsdGNHeGxJSE4wY21sdVp5QjBieUJ6ZEhKcGJtY2daR2xqZEdsdmJtRnllUzVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWRIbHdaU0JUZEhKcGJtZEVhV04wYVc5dVlYSjVYRzRnS2k5Y2JtVjRjRzl5ZENCMGVYQmxJRk4wY21sdVowUnBZM1JwYjI1aGNua2dQU0I3VzJ0bGVUb2djM1J5YVc1blhUb2djM1J5YVc1bmZUdGNiaUpkZlE9PSIsImltcG9ydCB7IFZlY3RvciB9IGZyb20gJy4vdHlwZS1kZWNsYXJhdGlvbnMnO1xuaW1wb3J0IHsgcmFuZG9tRmxvYXQsIHJhbmRvbUludCB9IGZyb20gJy4vcmFuZG9tJztcbi8qKlxuICogQXNzZXJ0cyBhIGNvbmRpdGlvbiBieSB0aHJvd2luZyBhbiBFcnJvci5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25kaXRpb249ZmFsc2VdIENvbmRpdGlvbiB0byBhc3NlcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21lc3NhZ2U9J0Fzc2VydGlvbiBlcnJvci4nXSBNZXNzYWdlIHRvIG91dHB1dC5cbiAqIEB0aHJvd3Mge0Vycm9yfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiA9IGZhbHNlLCBtZXNzYWdlID0gJ0Fzc2VydGlvbiBlcnJvci4nKSB7XG4gICAgaWYgKCFjb25kaXRpb24pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBuZXcgdHdvLWRpbWVuc2lvbmFsIGFycmF5IGFuZCBmaWxscyBpdCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBjb29yZGluYXRlcyAobnVtYmVyIG9mIHJvd3MpLlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2YgY29sdW1ucykuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ZpbGw9MF0gQSB2YWx1ZSB0byBmaWxsIHRoZSBjb29yZGluYXRlcyB3aXRoLlxuICogQHJldHVybiB7Q29vcmRpbmF0ZXN9IEEgdHdvLWRpbWVuc2lvbmFsIGZpbGxlZCB3aXRoIHRoZSB2YWx1ZSBnaXZlbi5cbiAqIEB0b2RvIE1pZ2h0IGJlIHNsb3cgc2luY2UgdXNlZCBBcnJheS5tYXAuIFByb2JhYmx5IG5lZWRzIHBlcmZvcm1hbmNlIHJldmlzaW9uLlxuICovXG5mdW5jdGlvbiBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgZmlsbCA9IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cbi8qKlxuICogVHJhbnNwb3NlIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4IFRoZSBtYXRyaXggdG8gYmUgdHJhbnNwb3NlZC5cbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG1hdHJpeFswXS5sZW5ndGgpLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuLyoqXG4gKiBBZGRzIHR3byB2ZWN0b3JzIHdpdGggdGhlIHNlY29uZCBvbmUgdG8gYmUgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gcmF0aW8uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge251bWJlcn0gW211bHRpcGxpZXI9MV0gQSBtdWx0aXBsaWVyIHRvIGJlIHVzZWQgYmVmb3JlIHRoZSBzZWNvbmQgdmVjdG9yIGlzIGFkZGVkLlxuICogQHJldHVybiB7VmVjdG9yfSBOZXcgdmVjdG9yIGNvbnRhaW5lZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiBwK211bHRpcGxpZXIqcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckFkZChwLCBxLCBtdWx0aXBsaWVyID0gMSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IHAubGVuZ3RoO1xuICAgIGFzc2VydChuSXRlbXMgPT0gcS5sZW5ndGgsICdWZWN0b3IgbGVuZ3RocyBkbyBub3QgbWF0Y2guJyk7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHBbaV0gKyBtdWx0aXBsaWVyICogcVtpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1bXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVjdG9yJ3MgaXRlbXMgc3VtLlxuICovXG5mdW5jdGlvbiBpdGVtc1N1bSh2KSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsICs9IHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHYpIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3Rvckxlbmd0aCh2KSB7XG4gICAgbGV0IHNxclN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKVxuICAgICAgICBzcXJTdW0gKz0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIE1hdGguc3FydChzcXJTdW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckRvdFByb2R1Y3QodjEsIHYyKSB7XG4gICAgaWYgKHYxLmxlbmd0aCAhPSB2Mi5sZW5ndGgpXG4gICAgICAgIHRocm93IEVycm9yKCdUaGUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIHZlY3RvcnMgbXVzdCBtYXRjaCcpO1xuICAgIGxldCBwcm9kID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYxLmxlbmd0aDsgaSsrKVxuICAgICAgICBwcm9kICs9IHYxW2ldICogdjJbaV07XG4gICAgcmV0dXJuIHByb2Q7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50IHZhbHVlcy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMSBUaGUgZmlyc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaXguXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IFtzY2FsZT0xLl0gTWF4IHZhbHVlIGdpdmVuIGJ5IHJhbmRvbSBnZW5lcmF0b3IuXG4gKiBAcmV0dXJuIHtNYXRyaXh9IEEgbmV3IG1hdHJpeCBmaWxsZWQgd2l0aCByYW5kb20gZmxvYXRpbmcgcG9pbnQgIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGxSYW5kb21NYXRyaXgoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgc2NhbGUgPSAxLikge1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhkaW1lbnNpb24xLCBkaW1lbnNpb24yKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpbWVuc2lvbjE7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpbWVuc2lvbjI7ICsrailcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IHJhbmRvbUZsb2F0KHNjYWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjdG9ycy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcCBUaGUgZmlyc3QgdmVjdG9yLlxuICogQHBhcmFtIHtWZWN0b3J9IHEgVGhlIHNlY29uZCB2ZWN0b3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBnaXZlbiB2ZWN0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlRXVjbGlkZWFuRGlzdGFuY2UocCwgcSkge1xuICAgIGNvbnN0IGRpZmYgPSB2ZWN0b3JBZGQocCwgcSwgLTEpO1xuICAgIGNvbnN0IHNxZGlmZiA9IHZlY3RvclNxdWFyZShkaWZmKTtcbiAgICBjb25zdCBzcWRpZmZTdW1tID0gaXRlbXNTdW0oc3FkaWZmKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHNxZGlmZlN1bW0pO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgZGlzdGFuY2UgbWF0cml4IHVzaW5nIGEgY3VzdG9tIGRpc3RhbmNlIGZ1bmN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7VmVjdG9yc30gZGF0YSBJbnB1dCB2ZWN0b3JzIHRvIGNhbGN1bGF0ZSBkaXN0YW5jZXMuXG4gKiBAcGFyYW0ge0Rpc3RhbmNlTWV0cmljfSBkaXN0YW5jZSBDdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtNYXRyaXh9IENhbGN1bGF0ZWQgY3VzdG9tIGRpc3RhbmNlIG1hdHJpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGNEaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBuSXRlbXM7ICsraikge1xuICAgICAgICAgICAgY29uc3QgZCA9IChkYXRhW2ldID09IG51bGwpIHx8IChkYXRhW2pdID09IG51bGwpID8gMCA6IGRpc3RhbmNlKGRhdGFbaV0sIGRhdGFbal0pO1xuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4O1xufVxuLyoqIEdlbmVyYXRlcyBhcnJheSBmcm9tIGEgcmFuZ2UgW2JlZ2luOyBlbmRdIG9yIFtiZWdpbjsgZW5kKSBpZiBlbmRFeGNsdXNpdmUuICoqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlblJhbmdlKGJlZ2luLCBlbmQsIGVuZEV4Y2x1c2l2ZSA9IGZhbHNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZW5kIC0gYmVnaW4gKyAoZW5kRXhjbHVzaXZlID8gMCA6IDEpO1xuICAgIGNvbnN0IHNlcmllcyA9IG5ldyBJbnQzMkFycmF5KG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSlcbiAgICAgICAgc2VyaWVzW2ldID0gYmVnaW4gKyBpO1xuICAgIHJldHVybiBzZXJpZXM7XG59XG4vKipcbiogUmV0dXJucyBvcmRlciBvZiB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgc29ydGVkLlxuKlxuKiBAZXhwb3J0XG4qIEBwYXJhbSB7YW55W119IHZhbHVlcyBJbnB1dCBhcnJheS5cbiogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gV2hldGhlciB0byByZXR1cm4gcmV2ZXJzZWQgb3JkZXIuXG4qIEByZXR1cm4ge251bWJlcltdfSBUaGUgb3JkZXIgY29tcHV0ZWQuXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ1NvcnQodmFsdWVzLCByZXZlcnNlID0gZmFsc2UpIHtcbiAgICBjb25zdCBzb3J0Zm4gPSByZXZlcnNlID8gKGEsIGIpID0+IChiWzBdIC0gYVswXSkgOiAoYSwgYikgPT4gKGFbMF0gLSBiWzBdKTtcbiAgICBjb25zdCBkZWNvciA9ICh2LCBpKSA9PiBbdiwgaV07IC8vIHNldCBpbmRleCB0byB2YWx1ZVxuICAgIGNvbnN0IHVuZGVjb3IgPSAoYSkgPT4gYVsxXTsgLy8gbGVhdmUgb25seSBpbmRleFxuICAgIGNvbnN0IF9hcmdzb3J0ID0gKGFycikgPT4gYXJyLm1hcChkZWNvcikuc29ydChzb3J0Zm4pLm1hcCh1bmRlY29yKTtcbiAgICByZXR1cm4gX2FyZ3NvcnQodmFsdWVzKTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaW5kZXhlcyBvZiB0aGUgbW9zdCBkaXZlcnNlIG9iamVjdHMgYWNjb3JkaW5nIHRvIHRoZSBkaXN0IGZ1bmN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvdGFsIG51bWJlciBvZiBvYmplY3RzXG4gKiBAcGFyYW0ge251bWJlcn0gbiBudW1iZXIgb2YgZGl2ZXJzZSBlbGVtZW50cyB0byBmaW5kXG4gKiBAcGFyYW0geyhpMTogbnVtYmVyLCBpMjogbnVtYmVyKSA9PiBudW1iZXJ9IGRpc3QgYSBmdW5jdGlvbiB3aGljaCBjYWxjdWxhdGVzIGRpc3RhbmNlIGJldHdlZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gb2JqZWN0cyB1c2luZyB0aGVpciBpbmRleGVzXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IFRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGl2ZXJzZVN1YnNldChsZW5ndGgsIG4sIGRpc3QpIHtcbiAgICBmdW5jdGlvbiBtYXhCeSh2YWx1ZXMsIG9yZGVyQnkpIHtcbiAgICAgICAgbGV0IG1heFZhbHVlID0gbnVsbDtcbiAgICAgICAgbGV0IG1heE9yZGVyQnkgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50T3JkZXJCeSA9IG9yZGVyQnkoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAobWF4T3JkZXJCeSA9PSBudWxsIHx8IGVsZW1lbnRPcmRlckJ5ID4gbWF4T3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIG1heFZhbHVlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtYXhPcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heFZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdWJzZXQgPSBbcmFuZG9tSW50KGxlbmd0aCAtIDEpXTtcbiAgICBjb25zdCBjb21wbGVtZW50ID0gbmV3IFNldCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFzdWJzZXQuaW5jbHVkZXMoaSkpXG4gICAgICAgICAgICBjb21wbGVtZW50LmFkZChpKTtcbiAgICB9XG4gICAgd2hpbGUgKHN1YnNldC5sZW5ndGggPCBuKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IG1heEJ5KGNvbXBsZW1lbnQudmFsdWVzKCksIChpKSA9PiBNYXRoLm1pbi5hcHBseShNYXRoLCBzdWJzZXQubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gZGlzdChpLCB2YWwpO1xuICAgICAgICB9KSkpO1xuICAgICAgICBpZiAoaWR4KSB7XG4gICAgICAgICAgICBzdWJzZXQucHVzaChpZHgpO1xuICAgICAgICAgICAgY29tcGxlbWVudC5kZWxldGUoaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3Vic2V0O1xufVxuLyoqXG4gKiBSZXR1cm5zIG5vcm1hbGl6ZWQgdmVjdG9yXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gZGF0YSBudW1lcmljYWwgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShkYXRhKSB7XG4gICAgbGV0IG1lYW4gPSAwO1xuICAgIGxldCBzdGQgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7ICsraSlcbiAgICAgICAgbWVhbiArPSBkYXRhW2ldO1xuICAgIG1lYW4gLz0gZGF0YS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgKytpKVxuICAgICAgICBzdGQgKz0gKGRhdGFbaV0gLSBtZWFuKSAqIChkYXRhW2ldIC0gbWVhbik7XG4gICAgc3RkID0gTWF0aC5zcXJ0KHN0ZCAvIGRhdGEubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpXG4gICAgICAgIGRhdGFbaV0gPSAoZGF0YVtpXSAtIG1lYW4pIC8gc3RkO1xuICAgIHJldHVybiBkYXRhO1xufVxuLyoqXG4gKiBGaW5kcyBzZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBsaXN0cy5cbiAqIEBwYXJhbSB7YW55W119IGEgVGhlIGZpcnN0IGxpc3QuXG4gKiBAcGFyYW0ge2FueVtdfSBiIFRoZSBzZWNvbmQgbGlzdC5cbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0RGlmZmVyZW5jZShhLCBiKSB7XG4gICAgY29uc3QgYlNldCA9IG5ldyBTZXQoYik7XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhLmZpbHRlcigoeCkgPT4gIWJTZXQuaGFzKHgpKSkudmFsdWVzKCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZG1WamRHOXlMVzl3WlhKaGRHbHZibk11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjJaV04wYjNJdGIzQmxjbUYwYVc5dWN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVZNc1RVRkJUU3hGUVVGMVF5eE5RVUZOTEhGQ1FVRnhRaXhEUVVGRE8wRkJRM3BHTEU5QlFVOHNSVUZCUXl4WFFVRlhMRVZCUVVVc1UwRkJVeXhGUVVGRExFMUJRVTBzVlVGQlZTeERRVUZETzBGQlJXaEVPenM3T3pzN08wZEJUMGM3UVVGRFNDeE5RVUZOTEZWQlFWVXNUVUZCVFN4RFFVRkRMRmxCUVhGQ0xFdEJRVXNzUlVGQlJTeFZRVUZyUWl4clFrRkJhMEk3U1VGRGNrWXNTVUZCU1N4RFFVRkRMRk5CUVZNN1VVRkRXaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXpkQ0xFTkJRVU03UVVGRlJEczdPenM3T3pzN1IwRlJSenRCUVVOSUxGTkJRVk1zWlVGQlpTeERRVUZETEZWQlFXdENMRVZCUVVVc1ZVRkJhMElzUlVGQlJTeFBRVUZsTEVOQlFVTTdTVUZETDBVc1QwRkJUeXhKUVVGSkxFdEJRVXNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1NVRkJTU3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU42Uml4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4bFFVRmxMRU5CUVVNc1RVRkJZenRKUVVNMVF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1pETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzUkdMRU5CUVVNN1FVRkZSRHM3T3pzN096czdSMEZSUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hUUVVGVExFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4aFFVRnhRaXhEUVVGRE8wbEJRM0JGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRmVFSXNUVUZCVFN4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTERoQ1FVRTRRaXhEUVVGRExFTkJRVU03U1VGRk0wUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZGYWtNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETzFGQlF5OUNMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1ZVRkJWU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVjBReXhQUVVGUExFdEJRVXNzUTBGQlF6dEJRVU5tTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRk5CUVZNc1VVRkJVU3hEUVVGRExFTkJRVk03U1VGRGVrSXNTVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSV1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZhRUlzVDBGQlR5eExRVUZMTEVOQlFVTTdRVUZEWml4RFFVRkRPMEZCUlVRN096czdPMGRCUzBjN1FVRkRTQ3hUUVVGVExGbEJRVmtzUTBGQlF5eERRVUZUTzBsQlF6ZENMRTFCUVUwc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEZUVJc1RVRkJUU3hMUVVGTExFZEJRVWNzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZha01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUXk5Q0xFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUlhwQ0xFOUJRVThzUzBGQlN5eERRVUZETzBGQlEyWXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3haUVVGWkxFTkJRVU1zUTBGQlV6dEpRVU53UXl4SlFVRkpMRTFCUVUwc1IwRkJWeXhEUVVGRExFTkJRVU03U1VGRGRrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRM1pETEUxQlFVMHNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNoQ0xFOUJRVThzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVNelFpeERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMR2RDUVVGblFpeERRVUZETEVWQlFWVXNSVUZCUlN4RlFVRlZPMGxCUTNKRUxFbEJRVWtzUlVGQlJTeERRVUZETEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNc1RVRkJUVHRSUVVONFFpeE5RVUZOTEV0QlFVc3NRMEZCUXl3NFEwRkJPRU1zUTBGQlF5eERRVUZETzBsQlF6bEVMRWxCUVVrc1NVRkJTU3hIUVVGWExFTkJRVU1zUTBGQlF6dEpRVU55UWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGRGVFTXNTVUZCU1N4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzVDBGQlR5eEpRVUZKTEVOQlFVTTdRVUZEWkN4RFFVRkRPMEZCUlVRN096czdPenM3TzBkQlVVYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNWVUZCYTBJc1JVRkJSU3hWUVVGclFpeEZRVUZGTEZGQlFXZENMRVZCUVVVN1NVRkRla1lzVFVGQlRTeE5RVUZOTEVkQlFVY3NaVUZCWlN4RFFVRkRMRlZCUVZVc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF6dEpRVVYyUkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NWVUZCVlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRk8xRkJRMjVETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFZRVUZWTEVWQlFVVXNSVUZCUlN4RFFVRkRPMWxCUTJwRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdTMEZEY2tNN1NVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN3d1FrRkJNRUlzUTBGQlF5eERRVUZUTEVWQlFVVXNRMEZCVXp0SlFVTTNSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEycERMRTFCUVUwc1RVRkJUU3hIUVVGSExGbEJRVmtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTnNReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRjRU1zVDBGQlR5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8wRkJReTlDTEVOQlFVTTdRVUZGUkRzN096czdPenRIUVU5SE8wRkJRMGdzVFVGQlRTeFZRVUZWTEd0Q1FVRnJRaXhEUVVGRExFbEJRV0VzUlVGQlJTeFJRVUYzUWp0SlFVTjRSU3hOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGxCUXpOQ0xFMUJRVTBzVFVGQlRTeEhRVUZITEdWQlFXVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJXeEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3V1VGRGJrTXNUVUZCVFN4RFFVRkRMRWRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFJpeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFRRVU5xUXp0TFFVTkdPMGxCUTBRc1QwRkJUeXhOUVVGTkxFTkJRVU03UVVGRGFFSXNRMEZCUXp0QlFVVkVMR3RHUVVGclJqdEJRVU5zUml4TlFVRk5MRlZCUVZVc1VVRkJVU3hEUVVGRExFdEJRV0VzUlVGQlJTeEhRVUZYTEVWQlFVVXNXVUZCV1N4SFFVRkhMRXRCUVVzN1NVRkRka1VzVFVGQlRTeE5RVUZOTEVkQlFVY3NSMEZCUnl4SFFVRkhMRXRCUVVzc1IwRkJSeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU53UkN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0SlFVVjBReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1RVRkJUU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUzBGQlN5eEhRVUZITEVOQlFVTXNRMEZCUXp0SlFVVjRRaXhQUVVGUExFMUJRVTBzUTBGQlF6dEJRVU5vUWl4RFFVRkRPMEZCUlVFN096czdPenM3UlVGUFJUdEJRVU5JTEUxQlFVMHNWVUZCVlN4UFFVRlBMRU5CUVVNc1RVRkJZU3hGUVVGRkxFOUJRVThzUjBGQlJ5eExRVUZMTzBsQlEzQkVMRTFCUVUwc1RVRkJUU3hIUVVGSExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRlJMRVZCUVVVc1EwRkJVU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGUkxFVkJRVVVzUTBGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOMlJ5eE5RVUZOTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVUwc1JVRkJSU3hEUVVGVExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zY1VKQlFYRkNPMGxCUTJ4RkxFMUJRVTBzVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4dFFrRkJiVUk3U1VGRGRrUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1EwRkJReXhIUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU14UlN4UFFVRlBMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU14UWl4RFFVRkRPMEZCUlVRN096czdPenM3UjBGUFJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4blFrRkJaMElzUTBGQlF5eE5RVUZqTEVWQlFVVXNRMEZCVXl4RlFVRkZMRWxCUVhkRE8wbEJRMnhITEZOQlFWTXNTMEZCU3l4RFFVRkRMRTFCUVdkRExFVkJRVVVzVDBGQk9FSTdVVUZETjBVc1NVRkJTU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETzFGQlEzQkNMRWxCUVVrc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF6dFJRVVYwUWl4TFFVRkxMRTFCUVUwc1QwRkJUeXhKUVVGSkxFMUJRVTBzUlVGQlJUdFpRVU0xUWl4TlFVRk5MR05CUVdNc1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZUVNc1NVRkJTU3hWUVVGVkxFbEJRVWtzU1VGQlNTeEpRVUZKTEdOQlFXTXNSMEZCUnl4VlFVRlZMRVZCUVVVN1owSkJRM0pFTEZGQlFWRXNSMEZCUnl4UFFVRlBMRU5CUVVNN1owSkJRMjVDTEZWQlFWVXNSMEZCUnl4alFVRmpMRU5CUVVNN1lVRkROMEk3VTBGRFJqdFJRVU5FTEU5QlFVOHNVVUZCVVN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTjJReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUlRkQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZETDBJc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNKQ0xGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRja0k3U1VGRlJDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRk8xRkJRM2hDTEUxQlFVMHNSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkRaaXhWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUU0UWl4RlFVTXZReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1ZVRkJVeXhIUVVGSExFVkJRVVVzUzBGQlN6dFpRVU40UkN4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEZEVJc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlExQXNTVUZCU1N4SFFVRkhMRVZCUVVVN1dVRkRVQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTJwQ0xGVkJRVlVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRlRUk3UzBGRFJqdEpRVU5FTEU5QlFVOHNUVUZCVFN4RFFVRkRPMEZCUTJoQ0xFTkJRVU03UVVGRlJEczdPMGRCUjBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzVTBGQlV5eERRVUZETEVsQlFWazdTVUZEY0VNc1NVRkJTU3hKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEySXNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJSVm9zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFbEJRVWtzU1VGQlNTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkZiRUlzU1VGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkZjRUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRPMUZCUTJ4RExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVVUzUXl4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wbEJSVzVETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVc1EwRkJRenRSUVVOc1F5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8wbEJSVzVETEU5QlFVOHNTVUZCU1N4RFFVRkRPMEZCUTJRc1EwRkJRenRCUVVWRU96czdPenRIUVV0SE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4RFFVRlJMRVZCUVVVc1EwRkJVVHRKUVVNNVF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU40UWl4UFFVRlBMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM0pGTEVOQlFVTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdlMDFoZEhKcGVDd2dWbVZqZEc5eUxDQkRiMjl5WkdsdVlYUmxjeXdnVm1WamRHOXljeXdnUkdsemRHRnVZMlZOWlhSeWFXTjlJR1p5YjIwZ0p5NHZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHR5WVc1a2IyMUdiRzloZEN3Z2NtRnVaRzl0U1c1MGZTQm1jbTl0SUNjdUwzSmhibVJ2YlNjN1hHNWNiaThxS2x4dUlDb2dRWE56WlhKMGN5QmhJR052Ym1ScGRHbHZiaUJpZVNCMGFISnZkMmx1WnlCaGJpQkZjbkp2Y2k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFjR0Z5WVcwZ2UySnZiMnhsWVc1OUlGdGpiMjVrYVhScGIyNDlabUZzYzJWZElFTnZibVJwZEdsdmJpQjBieUJoYzNObGNuUXVYRzRnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzIxbGMzTmhaMlU5SjBGemMyVnlkR2x2YmlCbGNuSnZjaTRuWFNCTlpYTnpZV2RsSUhSdklHOTFkSEIxZEM1Y2JpQXFJRUIwYUhKdmQzTWdlMFZ5Y205eWZWeHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWVhOelpYSjBLR052Ym1ScGRHbHZiam9nWW05dmJHVmhiaUE5SUdaaGJITmxMQ0J0WlhOellXZGxPaUJ6ZEhKcGJtY2dQU0FuUVhOelpYSjBhVzl1SUdWeWNtOXlMaWNwSUh0Y2JpQWdhV1lnS0NGamIyNWthWFJwYjI0cFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRzFsYzNOaFoyVXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlhNZ2JtVjNJSFIzYnkxa2FXMWxibk5wYjI1aGJDQmhjbkpoZVNCaGJtUWdabWxzYkhNZ2FYUWdkMmwwYUNCMGFHVWdkbUZzZFdVZ1oybDJaVzR1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR1JwYldWdWMybHZiakVnVkdobElHWnBjbk4wSUdScGJXVnVjMmx2YmlCdlppQjBhR1VnWTI5dmNtUnBibUYwWlhNZ0tHNTFiV0psY2lCdlppQnliM2R6S1M1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmthVzFsYm5OcGIyNHlJRlJvWlNCelpXTnZibVFnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0JqYjI5eVpHbHVZWFJsY3lBb2JuVnRZbVZ5SUc5bUlHTnZiSFZ0Ym5NcExseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJRnRtYVd4c1BUQmRJRUVnZG1Gc2RXVWdkRzhnWm1sc2JDQjBhR1VnWTI5dmNtUnBibUYwWlhNZ2QybDBhQzVjYmlBcUlFQnlaWFIxY200Z2UwTnZiM0prYVc1aGRHVnpmU0JCSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0JtYVd4c1pXUWdkMmwwYUNCMGFHVWdkbUZzZFdVZ1oybDJaVzR1WEc0Z0tpQkFkRzlrYnlCTmFXZG9kQ0JpWlNCemJHOTNJSE5wYm1ObElIVnpaV1FnUVhKeVlYa3ViV0Z3TGlCUWNtOWlZV0pzZVNCdVpXVmtjeUJ3WlhKbWIzSnRZVzVqWlNCeVpYWnBjMmx2Ymk1Y2JpQXFMMXh1Wm5WdVkzUnBiMjRnYVc1cGRFTnZiM0prYVc1aGRHVnpLR1JwYldWdWMybHZiakU2SUc1MWJXSmxjaXdnWkdsdFpXNXphVzl1TWpvZ2JuVnRZbVZ5TENCbWFXeHNPaUJ1ZFcxaVpYSWdQU0F3S1RvZ1EyOXZjbVJwYm1GMFpYTWdlMXh1SUNCeVpYUjFjbTRnYm1WM0lFRnljbUY1S0dScGJXVnVjMmx2YmpFcExtWnBiR3dvWm1sc2JDa3ViV0Z3S0NncElEMCtJQ2h1WlhjZ1ZtVmpkRzl5S0dScGJXVnVjMmx2YmpJcExtWnBiR3dvWm1sc2JDa3BLVHRjYm4xY2JseHVMeW9xWEc0Z0tpQlVjbUZ1YzNCdmMyVWdiV0YwY21sNExseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdUV0YwY21sNGZTQnRZWFJ5YVhnZ1ZHaGxJRzFoZEhKcGVDQjBieUJpWlNCMGNtRnVjM0J2YzJWa0xseHVJQ29nUUhKbGRIVnliaUI3VFdGMGNtbDRmU0JVY21GdWMzQnZjMlZrSUcxaGRISnBlQzVjYmlBcUlFQjBiMlJ2SUUxcFoyaDBJR0psSUhOc2IzY2djMmx1WTJVZ2RYTmxaQ0JCY25KaGVTNXRZWEF1SUZCeWIySmhZbXg1SUc1bFpXUnpJSEJsY21admNtMWhibU5sSUhKbGRtbHphVzl1TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkSEpoYm5Od2IzTmxUV0YwY21sNEtHMWhkSEpwZURvZ1RXRjBjbWw0S1RvZ1RXRjBjbWw0SUh0Y2JpQWdjbVYwZFhKdUlHNWxkeUJCY25KaGVTaHRZWFJ5YVhoYk1GMHViR1Z1WjNSb0tTNW1hV3hzS0RBcFhHNGdJQ0FnTG0xaGNDZ29YeXdnYVNrZ1BUNGdLRzVsZHlCV1pXTjBiM0lvYldGMGNtbDRMbXhsYm1kMGFDa3VabWxzYkNnd0tTNXRZWEFvS0Y4c0lHb3BJRDArSUNodFlYUnlhWGhiYWwxYmFWMHBLU2twTzF4dWZWeHVYRzR2S2lwY2JpQXFJRUZrWkhNZ2RIZHZJSFpsWTNSdmNuTWdkMmwwYUNCMGFHVWdjMlZqYjI1a0lHOXVaU0IwYnlCaVpTQnRkV3gwYVhCc2FXVmtJR0o1SUhSb1pTQm5hWFpsYmlCeVlYUnBieTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5SUhSdklHRmtaQzVjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCeElGUm9aU0J6WldOdmJtUWdkbVZqZEc5eUlIUnZJR0ZrWkM1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJiWFZzZEdsd2JHbGxjajB4WFNCQklHMTFiSFJwY0d4cFpYSWdkRzhnWW1VZ2RYTmxaQ0JpWldadmNtVWdkR2hsSUhObFkyOXVaQ0IyWldOMGIzSWdhWE1nWVdSa1pXUXVYRzRnS2lCQWNtVjBkWEp1SUh0V1pXTjBiM0o5SUU1bGR5QjJaV04wYjNJZ1kyOXVkR0ZwYm1Wa0lIUm9aU0J5WlhOMWJIUWdiMllnYjNCbGNtRjBhVzl1SUhBcmJYVnNkR2x3YkdsbGNpcHhMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2RtVmpkRzl5UVdSa0tIQTZJRlpsWTNSdmNpd2djVG9nVm1WamRHOXlMQ0J0ZFd4MGFYQnNhV1Z5T2lCdWRXMWlaWElnUFNBeEtUb2dWbVZqZEc5eUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdjQzVzWlc1bmRHZzdYRzVjYmlBZ1lYTnpaWEowS0c1SmRHVnRjeUE5UFNCeExteGxibWQwYUN3Z0oxWmxZM1J2Y2lCc1pXNW5kR2h6SUdSdklHNXZkQ0J0WVhSamFDNG5LVHRjYmx4dUlDQmpiMjV6ZENCMGIzUmhiQ0E5SUc1bGR5QldaV04wYjNJb2JrbDBaVzF6S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhBdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ2RHOTBZV3hiYVYwZ1BTQndXMmxkSUNzZ2JYVnNkR2x3YkdsbGNpQXFJSEZiYVYwN1hHNWNiaUFnY21WMGRYSnVJSFJ2ZEdGc08xeHVmVnh1WEc0dktpcGNiaUFxSUZOMWJYTWdkR2hsSUhabFkzUnZjaWR6SUdsMFpXMXpMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQjJJRlJvWlNCMlpXTjBiM0lnZEc4Z1ltVWdjM1Z0YldWa0xseHVJQ29nUUhKbGRIVnliaUI3Ym5WdFltVnlmU0JVYUdVZ2RtVmpkRzl5SjNNZ2FYUmxiWE1nYzNWdExseHVJQ292WEc1bWRXNWpkR2x2YmlCcGRHVnRjMU4xYlNoMk9pQldaV04wYjNJcE9pQnVkVzFpWlhJZ2UxeHVJQ0JzWlhRZ2RHOTBZV3dnUFNBd08xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lDc3JhU2xjYmlBZ0lDQjBiM1JoYkNBclBTQjJXMmxkTzF4dVhHNGdJSEpsZEhWeWJpQjBiM1JoYkR0Y2JuMWNibHh1THlvcVhHNGdLaUJUZFhGaGNtVnpJSFJvWlNCMlpXTjBiM0luY3lCcGRHVnRjeTVjYmlBcVhHNGdLaUJBY0dGeVlXMGdlMVpsWTNSdmNuMGdkaUJVYUdVZ2RtVmpkRzl5SUhSdklITnhkV0Z5WlM1Y2JpQXFJRUJ5WlhSMWNtNGdlMVpsWTNSdmNuMGdRU0J1WlhjZ2RtVmpkRzl5SUdOdmJuUmhhVzVwYm1jZ2RHaGxJRzl5YVdkcGJtRnNKM01nYVhSbGJYTWdjM0YxWVhKbFpDNWNiaUFxTDF4dVpuVnVZM1JwYjI0Z2RtVmpkRzl5VTNGMVlYSmxLSFk2SUZabFkzUnZjaWs2SUZabFkzUnZjaUI3WEc0Z0lHTnZibk4wSUc1SmRHVnRjeUE5SUhZdWJHVnVaM1JvTzF4dUlDQmpiMjV6ZENCMGIzUmhiQ0E5SUc1bGR5QldaV04wYjNJb2JrbDBaVzF6S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhZdWJHVnVaM1JvT3lBcksya3BYRzRnSUNBZ2RHOTBZV3hiYVYwZ1BTQjJXMmxkSUNvZ2RsdHBYVHRjYmx4dUlDQnlaWFIxY200Z2RHOTBZV3c3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQjJaV04wYjNKTVpXNW5kR2dvZGpvZ1ZtVmpkRzl5S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdiR1YwSUhOeGNsTjFiVG9nYm5WdFltVnlJRDBnTUR0Y2JpQWdabTl5SUNoc1pYUWdhVG9nYm5WdFltVnlJRDBnTURzZ2FTQThJSFl1YkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnYzNGeVUzVnRJQ3M5SUhaYmFWMGdLaUIyVzJsZE8xeHVJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSE54Y2xOMWJTazdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMlpXTjBiM0pFYjNSUWNtOWtkV04wS0hZeE9pQldaV04wYjNJc0lIWXlPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCcFppQW9kakV1YkdWdVozUm9JQ0U5SUhZeUxteGxibWQwYUNsY2JpQWdJQ0IwYUhKdmR5QkZjbkp2Y2lnblZHaGxJR1JwYldWdWMybHZibUZzYVhSNUlHOW1JSFJvWlNCMlpXTjBiM0p6SUcxMWMzUWdiV0YwWTJnbktUdGNiaUFnYkdWMElIQnliMlE2SUc1MWJXSmxjaUE5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2s2SUc1MWJXSmxjaUE5SURBN0lHa2dQQ0IyTVM1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCd2NtOWtJQ3M5SUhZeFcybGRJQ29nZGpKYmFWMDdYRzRnSUhKbGRIVnliaUJ3Y205a08xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYUnlhWGdnWm1sc2JHVmtJSGRwZEdnZ2NtRnVaRzl0SUdac2IyRjBhVzVuSUhCdmFXNTBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNU0JVYUdVZ1ptbHljM1FnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0J0WVhSeWFYZ3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TWlCVWFHVWdjMlZqYjI1a0lHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRjBjbWw0TGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpZMkZzWlQweExsMGdUV0Y0SUhaaGJIVmxJR2RwZG1WdUlHSjVJSEpoYm1SdmJTQm5aVzVsY21GMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVFZ2JtVjNJRzFoZEhKcGVDQm1hV3hzWldRZ2QybDBhQ0J5WVc1a2IyMGdabXh2WVhScGJtY2djRzlwYm5RZ0lIWmhiSFZsY3k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1pwYkd4U1lXNWtiMjFOWVhSeWFYZ29aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUhOallXeGxPaUJ1ZFcxaVpYSWdQU0F4TGlrNklFMWhkSEpwZUNCN1hHNGdJR052Ym5OMElHMWhkSEpwZUNBOUlHbHVhWFJEYjI5eVpHbHVZWFJsY3loa2FXMWxibk5wYjI0eExDQmthVzFsYm5OcGIyNHlLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYldWdWMybHZiakU3SUNzcmFTa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2daR2x0Wlc1emFXOXVNanNnS3l0cUtWeHVJQ0FnSUNBZ2JXRjBjbWw0VzJsZFcycGRJRDBnY21GdVpHOXRSbXh2WVhRb2MyTmhiR1VwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhSeWFYZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRnNZM1ZzWVhSbGN5QkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBkMjhnZG1WamRHOXljeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUVWMVkyeHBaR1ZoYmlCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pTQm5hWFpsYmlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTNWc1lYUmxSWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQmpiMjV6ZENCa2FXWm1JRDBnZG1WamRHOXlRV1JrS0hBc0lIRXNJQzB4S1R0Y2JpQWdZMjl1YzNRZ2MzRmthV1ptSUQwZ2RtVmpkRzl5VTNGMVlYSmxLR1JwWm1ZcE8xeHVJQ0JqYjI1emRDQnpjV1JwWm1aVGRXMXRJRDBnYVhSbGJYTlRkVzBvYzNGa2FXWm1LVHRjYmlBZ2NtVjBkWEp1SUUxaGRHZ3VjM0Z5ZENoemNXUnBabVpUZFcxdEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUdFZ1pHbHpkR0Z1WTJVZ2JXRjBjbWw0SUhWemFXNW5JR0VnWTNWemRHOXRJR1JwYzNSaGJtTmxJR1oxYm1OMGFXOXVMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3Vm1WamRHOXljMzBnWkdGMFlTQkpibkIxZENCMlpXTjBiM0p6SUhSdklHTmhiR04xYkdGMFpTQmthWE4wWVc1alpYTXVYRzRnS2lCQWNHRnlZVzBnZTBScGMzUmhibU5sVFdWMGNtbGpmU0JrYVhOMFlXNWpaU0JEZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVOaGJHTjFiR0YwWldRZ1kzVnpkRzl0SUdScGMzUmhibU5sSUcxaGRISnBlQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHTmhiR05FYVhOMFlXNWpaVTFoZEhKcGVDaGtZWFJoT2lCV1pXTjBiM0p6TENCa2FYTjBZVzVqWlRvZ1JHbHpkR0Z1WTJWTlpYUnlhV01wT2lCTllYUnlhWGdnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCa1lYUmhMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdiV0YwY21sNElEMGdhVzVwZEVOdmIzSmthVzVoZEdWektHNUpkR1Z0Y3l3Z2JrbDBaVzF6TENBd0tUdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHNUpkR1Z0Y3pzZ0t5dHBLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhaUE5SUdrZ0t5QXhPeUJxSUR3Z2JrbDBaVzF6T3lBcksyb3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHUTZJRzUxYldKbGNpQTlJQ2hrWVhSaFcybGRJRDA5SUc1MWJHd3BJSHg4SUNoa1lYUmhXMnBkSUQwOUlHNTFiR3dwSUQ4Z01DQTZJR1JwYzNSaGJtTmxLR1JoZEdGYmFWMHNJR1JoZEdGYmFsMHBPMXh1SUNBZ0lDQWdiV0YwY21sNFcybGRXMnBkSUQwZ2JXRjBjbWw0VzJwZFcybGRJRDBnWkR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJRzFoZEhKcGVEdGNibjFjYmx4dUx5b3FJRWRsYm1WeVlYUmxjeUJoY25KaGVTQm1jbTl0SUdFZ2NtRnVaMlVnVzJKbFoybHVPeUJsYm1SZElHOXlJRnRpWldkcGJqc2daVzVrS1NCcFppQmxibVJGZUdOc2RYTnBkbVV1SUNvcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxibEpoYm1kbEtHSmxaMmx1T2lCdWRXMWlaWElzSUdWdVpEb2diblZ0WW1WeUxDQmxibVJGZUdOc2RYTnBkbVVnUFNCbVlXeHpaU2s2SUVsdWRETXlRWEp5WVhrZ2UxeHVJQ0JqYjI1emRDQnVTWFJsYlhNZ1BTQmxibVFnTFNCaVpXZHBiaUFySUNobGJtUkZlR05zZFhOcGRtVWdQeUF3SURvZ01TazdYRzRnSUdOdmJuTjBJSE5sY21sbGN5QTlJRzVsZHlCSmJuUXpNa0Z5Y21GNUtHNUpkR1Z0Y3lrN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCdVNYUmxiWE03SUNzcmFTbGNiaUFnSUNCelpYSnBaWE5iYVYwZ1BTQmlaV2RwYmlBcklHazdYRzVjYmlBZ2NtVjBkWEp1SUhObGNtbGxjenRjYm4xY2JseHVJQzhxS2x4dUlDb2dVbVYwZFhKdWN5QnZjbVJsY2lCdlppQjJZV3gxWlhNZ1lYTWdhV1lnZEdobGVTQmhjbVVnYzI5eWRHVmtMbHh1SUNwY2JpQXFJRUJsZUhCdmNuUmNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJSFpoYkhWbGN5QkpibkIxZENCaGNuSmhlUzVjYmlBcUlFQndZWEpoYlNCN1ltOXZiR1ZoYm4wZ1czSmxkbVZ5YzJVOVptRnNjMlZkSUZkb1pYUm9aWElnZEc4Z2NtVjBkWEp1SUhKbGRtVnljMlZrSUc5eVpHVnlMbHh1SUNvZ1FISmxkSFZ5YmlCN2JuVnRZbVZ5VzExOUlGUm9aU0J2Y21SbGNpQmpiMjF3ZFhSbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdGeVoxTnZjblFvZG1Gc2RXVnpPaUJoYm5sYlhTd2djbVYyWlhKelpTQTlJR1poYkhObEtUb2diblZ0WW1WeVcxMGdlMXh1SUNCamIyNXpkQ0J6YjNKMFptNGdQU0J5WlhabGNuTmxJRDhnS0dFNklHRnVlVnRkTENCaU9pQmhibmxiWFNrZ1BUNGdLR0piTUYwZ0xTQmhXekJkS1NBNklDaGhPaUJoYm5sYlhTd2dZam9nWVc1NVcxMHBJRDArSUNoaFd6QmRJQzBnWWxzd1hTazdYRzRnSUdOdmJuTjBJR1JsWTI5eUlEMGdLSFk2SUdGdWVTd2dhVG9nYm5WdFltVnlLU0E5UGlCYmRpd2dhVjA3SUM4dklITmxkQ0JwYm1SbGVDQjBieUIyWVd4MVpWeHVJQ0JqYjI1emRDQjFibVJsWTI5eUlEMGdLR0U2SUdGdWVWdGRLU0E5UGlCaFd6RmRPeUF2THlCc1pXRjJaU0J2Ym14NUlHbHVaR1Y0WEc0Z0lHTnZibk4wSUY5aGNtZHpiM0owSUQwZ0tHRnljam9nWVc1NVcxMHBJRDArSUdGeWNpNXRZWEFvWkdWamIzSXBMbk52Y25Rb2MyOXlkR1p1S1M1dFlYQW9kVzVrWldOdmNpazdYRzRnSUhKbGRIVnliaUJmWVhKbmMyOXlkQ2gyWVd4MVpYTXBPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5Ym5NZ2RHaGxJR2x1WkdWNFpYTWdiMllnZEdobElHMXZjM1FnWkdsMlpYSnpaU0J2WW1wbFkzUnpJR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdaR2x6ZENCbWRXNWpkR2x2Ymx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHeGxibWQwYUNCMGIzUmhiQ0J1ZFcxaVpYSWdiMllnYjJKcVpXTjBjMXh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUc0Z2JuVnRZbVZ5SUc5bUlHUnBkbVZ5YzJVZ1pXeGxiV1Z1ZEhNZ2RHOGdabWx1WkZ4dUlDb2dRSEJoY21GdElIc29hVEU2SUc1MWJXSmxjaXdnYVRJNklHNTFiV0psY2lrZ1BUNGdiblZ0WW1WeWZTQmthWE4wSUdFZ1puVnVZM1JwYjI0Z2QyaHBZMmdnWTJGc1kzVnNZWFJsY3lCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1WEc0Z0tpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhkdklHOWlhbVZqZEhNZ2RYTnBibWNnZEdobGFYSWdhVzVrWlhobGMxeHVJQ29nUUhKbGRIVnlibk1nZTI1MWJXSmxjbHRkZlNCVWFHVWdhVzVrWlhobGN5QnZaaUIwYUdVZ2JXOXpkQ0JrYVhabGNuTmxJRzlpYW1WamRITmNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFUnBkbVZ5YzJWVGRXSnpaWFFvYkdWdVozUm9PaUJ1ZFcxaVpYSXNJRzQ2SUc1MWJXSmxjaXdnWkdsemREb2dLR2t4T2lCdWRXMWlaWElzSUdreU9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpazZJRzUxYldKbGNsdGRJSHRjYmlBZ1puVnVZM1JwYjI0Z2JXRjRRbmtvZG1Gc2RXVnpPaUJKZEdWeVlXSnNaVWwwWlhKaGRHOXlQRzUxYldKbGNqNHNJRzl5WkdWeVFuazZJQ2hwT2lCdWRXMWlaWElwSUQwK0lHNTFiV0psY2lrZ2UxeHVJQ0FnSUd4bGRDQnRZWGhXWVd4MVpTQTlJRzUxYkd3N1hHNGdJQ0FnYkdWMElHMWhlRTl5WkdWeVFua2dQU0J1ZFd4c08xeHVYRzRnSUNBZ1ptOXlJQ2hqYjI1emRDQmxiR1Z0Wlc1MElHOW1JSFpoYkhWbGN5a2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pXeGxiV1Z1ZEU5eVpHVnlRbmtnUFNCdmNtUmxja0o1S0dWc1pXMWxiblFwTzF4dUlDQWdJQ0FnYVdZZ0tHMWhlRTl5WkdWeVFua2dQVDBnYm5Wc2JDQjhmQ0JsYkdWdFpXNTBUM0prWlhKQ2VTQStJRzFoZUU5eVpHVnlRbmtwSUh0Y2JpQWdJQ0FnSUNBZ2JXRjRWbUZzZFdVZ1BTQmxiR1Z0Wlc1ME8xeHVJQ0FnSUNBZ0lDQnRZWGhQY21SbGNrSjVJRDBnWld4bGJXVnVkRTl5WkdWeVFuazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ0WVhoV1lXeDFaVHRjYmlBZ2ZWeHVYRzRnSUdOdmJuTjBJSE4xWW5ObGRDQTlJRnR5WVc1a2IyMUpiblFvYkdWdVozUm9JQzBnTVNsZE8xeHVJQ0JqYjI1emRDQmpiMjF3YkdWdFpXNTBJRDBnYm1WM0lGTmxkQ2dwTzF4dVhHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdWdVozUm9PeUFySzJrcElIdGNiaUFnSUNCcFppQW9JWE4xWW5ObGRDNXBibU5zZFdSbGN5aHBLU2xjYmlBZ0lDQWdJR052YlhCc1pXMWxiblF1WVdSa0tHa3BPMXh1SUNCOVhHNWNiaUFnZDJocGJHVWdLSE4xWW5ObGRDNXNaVzVuZEdnZ1BDQnVLU0I3WEc0Z0lDQWdZMjl1YzNRZ2FXUjRJRDBnYldGNFFua29YRzRnSUNBZ0lDQmpiMjF3YkdWdFpXNTBMblpoYkhWbGN5Z3BJR0Z6SUVsMFpYSmhZbXhsU1hSbGNtRjBiM0k4Ym5WdFltVnlQaXhjYmlBZ0lDQWdJQ2hwS1NBOVBpQk5ZWFJvTG0xcGJpNWhjSEJzZVNoTllYUm9MQ0J6ZFdKelpYUXViV0Z3S0daMWJtTjBhVzl1S0haaGJDd2dhVzVrWlhncElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHUnBjM1FvYVN3Z2RtRnNLVHRjYmlBZ0lDQWdJSDBwS1NrN1hHNGdJQ0FnYVdZZ0tHbGtlQ2tnZTF4dUlDQWdJQ0FnYzNWaWMyVjBMbkIxYzJnb2FXUjRLVHRjYmlBZ0lDQWdJR052YlhCc1pXMWxiblF1WkdWc1pYUmxLR2xrZUNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzRnSUhKbGRIVnliaUJ6ZFdKelpYUTdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1VtVjBkWEp1Y3lCdWIzSnRZV3hwZW1Wa0lIWmxZM1J2Y2x4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlHUmhkR0VnYm5WdFpYSnBZMkZzSUdGeWNtRjVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzSnRZV3hwZW1Vb1pHRjBZVG9nVm1WamRHOXlLVG9nVm1WamRHOXlJSHRjYmlBZ2JHVjBJRzFsWVc0Z1BTQXdPMXh1SUNCc1pYUWdjM1JrSUQwZ01EdGNibHh1SUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHUmhkR0V1YkdWdVozUm9PeUFySzJrcFhHNGdJQ0FnYldWaGJpQXJQU0JrWVhSaFcybGRPMXh1WEc0Z0lHMWxZVzRnTHowZ1pHRjBZUzVzWlc1bmRHZzdYRzVjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmtZWFJoTG14bGJtZDBhRHNnS3l0cEtWeHVJQ0FnSUhOMFpDQXJQU0FvWkdGMFlWdHBYU0F0SUcxbFlXNHBJQ29nS0dSaGRHRmJhVjBnTFNCdFpXRnVLVHRjYmx4dUlDQnpkR1FnUFNCTllYUm9Mbk54Y25Rb2MzUmtJQzhnWkdGMFlTNXNaVzVuZEdncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z1pHRjBZUzVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0JrWVhSaFcybGRJRDBnS0dSaGRHRmJhVjBnTFNCdFpXRnVLU0F2SUhOMFpEdGNibHh1SUNCeVpYUjFjbTRnWkdGMFlUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUJ6WlhRZ1pHbG1abVZ5Wlc1alpTQmlaWFIzWldWdUlIUjNieUJzYVhOMGN5NWNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJR0VnVkdobElHWnBjbk4wSUd4cGMzUXVYRzRnS2lCQWNHRnlZVzBnZTJGdWVWdGRmU0JpSUZSb1pTQnpaV052Ym1RZ2JHbHpkQzVjYmlBcUlFQnlaWFIxY200Z2UyRnVlVnRkZlZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUkdsbVptVnlaVzVqWlNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcE9pQmhibmxiWFNCN1hHNGdJR052Ym5OMElHSlRaWFFnUFNCdVpYY2dVMlYwS0dJcE8xeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLR0V1Wm1sc2RHVnlLQ2g0S1NBOVBpQWhZbE5sZEM1b1lYTW9lQ2twS1M1MllXeDFaWE1vS1NrN1hHNTlYRzRpWFgwPSIsIlwidXNlIHN0cmljdFwiO1xuY29uc3QgcGVxID0gbmV3IFVpbnQzMkFycmF5KDB4MTAwMDApO1xuY29uc3QgbXllcnNfMzIgPSAoYSwgYikgPT4ge1xuICBjb25zdCBuID0gYS5sZW5ndGg7XG4gIGNvbnN0IG0gPSBiLmxlbmd0aDtcbiAgY29uc3QgbHN0ID0gMSA8PCAobiAtIDEpO1xuICBsZXQgcHYgPSAtMTtcbiAgbGV0IG12ID0gMDtcbiAgbGV0IHNjID0gbjtcbiAgbGV0IGkgPSBuO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgcGVxW2EuY2hhckNvZGVBdChpKV0gfD0gMSA8PCBpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICBsZXQgZXEgPSBwZXFbYi5jaGFyQ29kZUF0KGkpXTtcbiAgICBjb25zdCB4diA9IGVxIHwgbXY7XG4gICAgZXEgfD0gKChlcSAmIHB2KSArIHB2KSBeIHB2O1xuICAgIG12IHw9IH4oZXEgfCBwdik7XG4gICAgcHYgJj0gZXE7XG4gICAgaWYgKG12ICYgbHN0KSB7XG4gICAgICBzYysrO1xuICAgIH1cbiAgICBpZiAocHYgJiBsc3QpIHtcbiAgICAgIHNjLS07XG4gICAgfVxuICAgIG12ID0gKG12IDw8IDEpIHwgMTtcbiAgICBwdiA9IChwdiA8PCAxKSB8IH4oeHYgfCBtdik7XG4gICAgbXYgJj0geHY7XG4gIH1cbiAgaSA9IG47XG4gIHdoaWxlIChpLS0pIHtcbiAgICBwZXFbYS5jaGFyQ29kZUF0KGkpXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNjO1xufTtcblxuY29uc3QgbXllcnNfeCA9IChhLCBiKSA9PiB7XG4gIGNvbnN0IG4gPSBhLmxlbmd0aDtcbiAgY29uc3QgbSA9IGIubGVuZ3RoO1xuICBjb25zdCBtaGMgPSBbXTtcbiAgY29uc3QgcGhjID0gW107XG4gIGNvbnN0IGhzaXplID0gTWF0aC5jZWlsKG4gLyAzMik7XG4gIGNvbnN0IHZzaXplID0gTWF0aC5jZWlsKG0gLyAzMik7XG4gIGxldCBzY29yZSA9IG07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaHNpemU7IGkrKykge1xuICAgIHBoY1tpXSA9IC0xO1xuICAgIG1oY1tpXSA9IDA7XG4gIH1cbiAgbGV0IGogPSAwO1xuICBmb3IgKDsgaiA8IHZzaXplIC0gMTsgaisrKSB7XG4gICAgbGV0IG12ID0gMDtcbiAgICBsZXQgcHYgPSAtMTtcbiAgICBjb25zdCBzdGFydCA9IGogKiAzMjtcbiAgICBjb25zdCBlbmQgPSBNYXRoLm1pbigzMiwgbSkgKyBzdGFydDtcbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgICAgcGVxW2IuY2hhckNvZGVBdChrKV0gfD0gMSA8PCBrO1xuICAgIH1cbiAgICBzY29yZSA9IG07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNvbnN0IGVxID0gcGVxW2EuY2hhckNvZGVBdChpKV07XG4gICAgICBjb25zdCBwYiA9IChwaGNbKGkgLyAzMikgfCAwXSA+Pj4gaSkgJiAxO1xuICAgICAgY29uc3QgbWIgPSAobWhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICAgIGNvbnN0IHh2ID0gZXEgfCBtdjtcbiAgICAgIGNvbnN0IHhoID0gKCgoKGVxIHwgbWIpICYgcHYpICsgcHYpIF4gcHYpIHwgZXEgfCBtYjtcbiAgICAgIGxldCBwaCA9IG12IHwgfih4aCB8IHB2KTtcbiAgICAgIGxldCBtaCA9IHB2ICYgeGg7XG4gICAgICBpZiAoKHBoID4+PiAzMSkgXiBwYikge1xuICAgICAgICBwaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgICB9XG4gICAgICBpZiAoKG1oID4+PiAzMSkgXiBtYikge1xuICAgICAgICBtaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgICB9XG4gICAgICBwaCA9IChwaCA8PCAxKSB8IHBiO1xuICAgICAgbWggPSAobWggPDwgMSkgfCBtYjtcbiAgICAgIHB2ID0gbWggfCB+KHh2IHwgcGgpO1xuICAgICAgbXYgPSBwaCAmIHh2O1xuICAgIH1cbiAgICBmb3IgKGxldCBrID0gc3RhcnQ7IGsgPCBlbmQ7IGsrKykge1xuICAgICAgcGVxW2IuY2hhckNvZGVBdChrKV0gPSAwO1xuICAgIH1cbiAgfVxuICBsZXQgbXYgPSAwO1xuICBsZXQgcHYgPSAtMTtcbiAgY29uc3Qgc3RhcnQgPSBqICogMzI7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKDMyLCBtIC0gc3RhcnQpICsgc3RhcnQ7XG4gIGZvciAobGV0IGsgPSBzdGFydDsgayA8IGVuZDsgaysrKSB7XG4gICAgcGVxW2IuY2hhckNvZGVBdChrKV0gfD0gMSA8PCBrO1xuICB9XG4gIHNjb3JlID0gbTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICBjb25zdCBlcSA9IHBlcVthLmNoYXJDb2RlQXQoaSldO1xuICAgIGNvbnN0IHBiID0gKHBoY1soaSAvIDMyKSB8IDBdID4+PiBpKSAmIDE7XG4gICAgY29uc3QgbWIgPSAobWhjWyhpIC8gMzIpIHwgMF0gPj4+IGkpICYgMTtcbiAgICBjb25zdCB4diA9IGVxIHwgbXY7XG4gICAgY29uc3QgeGggPSAoKCgoZXEgfCBtYikgJiBwdikgKyBwdikgXiBwdikgfCBlcSB8IG1iO1xuICAgIGxldCBwaCA9IG12IHwgfih4aCB8IHB2KTtcbiAgICBsZXQgbWggPSBwdiAmIHhoO1xuICAgIHNjb3JlICs9IChwaCA+Pj4gKG0gLSAxKSkgJiAxO1xuICAgIHNjb3JlIC09IChtaCA+Pj4gKG0gLSAxKSkgJiAxO1xuICAgIGlmICgocGggPj4+IDMxKSBeIHBiKSB7XG4gICAgICBwaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgfVxuICAgIGlmICgobWggPj4+IDMxKSBeIG1iKSB7XG4gICAgICBtaGNbKGkgLyAzMikgfCAwXSBePSAxIDw8IGk7XG4gICAgfVxuICAgIHBoID0gKHBoIDw8IDEpIHwgcGI7XG4gICAgbWggPSAobWggPDwgMSkgfCBtYjtcbiAgICBwdiA9IG1oIHwgfih4diB8IHBoKTtcbiAgICBtdiA9IHBoICYgeHY7XG4gIH1cbiAgZm9yIChsZXQgayA9IHN0YXJ0OyBrIDwgZW5kOyBrKyspIHtcbiAgICBwZXFbYi5jaGFyQ29kZUF0KGspXSA9IDA7XG4gIH1cbiAgcmV0dXJuIHNjb3JlO1xufTtcblxuY29uc3QgZGlzdGFuY2UgPSAoYSwgYikgPT4ge1xuICBpZiAoYS5sZW5ndGggPiBiLmxlbmd0aCkge1xuICAgIGNvbnN0IHRtcCA9IGI7XG4gICAgYiA9IGE7XG4gICAgYSA9IHRtcDtcbiAgfVxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYi5sZW5ndGg7XG4gIH1cbiAgaWYgKGEubGVuZ3RoIDw9IDMyKSB7XG4gICAgcmV0dXJuIG15ZXJzXzMyKGEsIGIpO1xuICB9XG4gIHJldHVybiBteWVyc194KGEsIGIpO1xufTtcblxuY29uc3QgY2xvc2VzdCA9IChzdHIsIGFycikgPT4ge1xuICBsZXQgbWluX2Rpc3RhbmNlID0gSW5maW5pdHk7XG4gIGxldCBtaW5faW5kZXggPSAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRpc3QgPSBkaXN0YW5jZShzdHIsIGFycltpXSk7XG4gICAgaWYgKGRpc3QgPCBtaW5fZGlzdGFuY2UpIHtcbiAgICAgIG1pbl9kaXN0YW5jZSA9IGRpc3Q7XG4gICAgICBtaW5faW5kZXggPSBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyW21pbl9pbmRleF07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY2xvc2VzdCwgZGlzdGFuY2Vcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gUmVmZXJlbmNlOiBodHRwczovL3d3dy5nZWVrc2ZvcmdlZWtzLm9yZy9qYXJvLWFuZC1qYXJvLXdpbmtsZXItc2ltaWxhcml0eS9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuamFyb1dpbmtsZXIgPSBleHBvcnRzLmphcm8gPSB2b2lkIDA7XG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyMSBTdHJpbmcgMSBmb3IgY29tcGFyZVxuICogQHBhcmFtIHN0cjIgU3RyaW5nIDIgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBvcHRpb25zIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdmUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGphcm8oc3RyMSwgc3RyMiwgb3B0aW9ucykge1xuICAgIC8vIEV4aXQgZWFybHkgaWYgZWl0aGVyIGFyZSBlbXB0eS5cbiAgICBpZiAoc3RyMS5sZW5ndGggPT09IDAgfHwgc3RyMi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIC8vIENvbnZlcnQgdG8gdXBwZXIgaWYgY2FzZS1zZW5zaXRpdmUgaXMgZmFsc2UuXG4gICAgaWYgKG9wdGlvbnMgJiYgIW9wdGlvbnMuY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICBzdHIxID0gc3RyMS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBzdHIyID0gc3RyMi50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICAvLyBFeGFjdCBtYXRjaFxuICAgIGlmIChzdHIxID09PSBzdHIyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICAvLyBOdW1iZXIgb2YgbWF0Y2hlc1xuICAgIHZhciBtID0gMDtcbiAgICAvLyBMZW5ndGggb2YgdHdvIFN0cmluZ3NcbiAgICB2YXIgbGVuMSA9IHN0cjEubGVuZ3RoO1xuICAgIHZhciBsZW4yID0gc3RyMi5sZW5ndGg7XG4gICAgLy8gTWF4aW11bSBkaXN0YW5jZVxuICAgIHZhciB3aW5kb3cgPSBNYXRoLmZsb29yKE1hdGgubWF4KGxlbjEsIGxlbjIpIC8gMikgLSAxO1xuICAgIC8vIEhhc2ggZm9yIG1hdGNoZXNcbiAgICB2YXIgc3RyMUhhc2ggPSBuZXcgQXJyYXkobGVuMSk7XG4gICAgdmFyIHN0cjJIYXNoID0gbmV3IEFycmF5KGxlbjIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCBpIC0gd2luZG93KTsgaiA8PSBNYXRoLm1pbihsZW4yLCBpICsgd2luZG93ICsgMSk7IGorKykge1xuICAgICAgICAgICAgaWYgKCFzdHIxSGFzaFtpXSAmJiAhc3RyMkhhc2hbal0gJiYgc3RyMVtpXSA9PT0gc3RyMltqXSkge1xuICAgICAgICAgICAgICAgICsrbTtcbiAgICAgICAgICAgICAgICBzdHIxSGFzaFtpXSA9IHN0cjJIYXNoW2pdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBFeGl0IGVhcmx5IGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZC5cbiAgICBpZiAobSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgLy8gQ291bnQgdGhlIHRyYW5zcG9zaXRpb25zLlxuICAgIHZhciB0ID0gMDtcbiAgICB2YXIgcG9pbnQgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuMTsgaSsrKSB7XG4gICAgICAgIGlmIChzdHIxSGFzaFtpXSkge1xuICAgICAgICAgICAgd2hpbGUgKCFzdHIySGFzaFtwb2ludF0pIHtcbiAgICAgICAgICAgICAgICBwb2ludCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0cjEuY2hhckF0KGkpICE9PSBzdHIyLmNoYXJBdChwb2ludCsrKSkge1xuICAgICAgICAgICAgICAgIHQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0IC89IDI7XG4gICAgcmV0dXJuIChtIC8gbGVuMSArIG0gLyBsZW4yICsgKG0gLSB0KSAvIG0pIC8gMztcbn1cbmV4cG9ydHMuamFybyA9IGphcm87XG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyMSBTdHJpbmcgMSBmb3IgY29tcGFyZVxuICogQHBhcmFtIHN0cjIgU3RyaW5nIDIgZm9yIGNvbXBhcmVcbiAqIEBwYXJhbSBvcHRpb25zIHRvIGNvbnRyb2wgY2FzZSBzZW5zaXRpdmUgb3Igbm90XG4gKi9cbmZ1bmN0aW9uIGphcm9XaW5rbGVyKHN0cjEsIHN0cjIsIG9wdGlvbnMpIHtcbiAgICAvLyBKYXJvIERpc3RhbmNlXG4gICAgdmFyIGphcm9EaXN0ID0gamFybyhzdHIxLCBzdHIyLCBvcHRpb25zKTtcbiAgICAvLyBTYW1lIHByZWZpeCBsZW5ndGgsIG1heGl1bSBpcyA0XG4gICAgdmFyIHByZWZpeCA9IDA7XG4gICAgaWYgKGphcm9EaXN0ID4gMC43KSB7XG4gICAgICAgIHZhciBtaW5JbmRleCA9IE1hdGgubWluKHN0cjEubGVuZ3RoLCBzdHIyLmxlbmd0aCk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKHN0cjFbaV0gPT09IHN0cjJbaV0gJiYgaSA8IDQgJiYgaSA8IG1pbkluZGV4KSB7XG4gICAgICAgICAgICArK3ByZWZpeDtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBqYXJvRGlzdCArPSAwLjEgKiBwcmVmaXggKiAoMSAtIGphcm9EaXN0KTtcbiAgICB9XG4gICAgcmV0dXJuIGphcm9EaXN0O1xufVxuZXhwb3J0cy5qYXJvV2lua2xlciA9IGphcm9XaW5rbGVyO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgcnVuVGVzdHMsIHRlc3RzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgJy4vdGVzdHMvV2ViTG9nby10ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9QYWxldHRlcy10ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9kZXRlY3RvcnMtdGVzdCc7XG5pbXBvcnQgJy4vdGVzdHMvbXNhLXRlc3RzJztcbmltcG9ydCAnLi90ZXN0cy9zZXF1ZW5jZS1zcGFjZS10ZXN0JztcbmltcG9ydCAnLi90ZXN0cy9hY3Rpdml0eS1jbGlmZnMtdGVzdHMnO1xuaW1wb3J0ICcuL3Rlc3RzL3NwbGl0dGVyLXRlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL3JlbmRlcmVyLXRlc3QnO1xuaW1wb3J0ICcuL3Rlc3RzL2NvbnZlcnQtdGVzdCc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuZXhwb3J0IHsgdGVzdHMgfTtcbi8qKiBGb3IgdGhlICd0ZXN0JyBmdW5jdGlvbiBhcmd1bWVudCBuYW1lcyBhcmUgZml4ZWQgYXMgJ2NhdGVnb3J5JyBhbmQgJ3Rlc3QnIGJlY2F1c2Ugb2Ygd2F5IGl0IGlzIGNhbGxlZC4gKi9cbi8vbmFtZTogdGVzdFxuLy9pbnB1dDogc3RyaW5nIGNhdGVnb3J5IHtvcHRpb25hbDogdHJ1ZX1cbi8vaW5wdXQ6IHN0cmluZyB0ZXN0IHtvcHRpb25hbDogdHJ1ZX1cbi8vb3V0cHV0OiBkYXRhZnJhbWUgcmVzdWx0XG4vL3RvcC1tZW51OiBUb29scyB8IERldiB8IEpTIEFQSSBUZXN0c1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3QoY2F0ZWdvcnksIHRlc3QpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geWllbGQgcnVuVGVzdHMoeyBjYXRlZ29yeSwgdGVzdCB9KTtcbiAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tT2JqZWN0cyhkYXRhKTtcbiAgICB9KTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmV4cG9ydCBjb25zdCBfcGFja2FnZSA9IG5ldyBERy5QYWNrYWdlKCk7XG5pbXBvcnQgeyBXZWJMb2dvIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL3ZpZXdlcnMvd2ViLWxvZ28nO1xuaW1wb3J0IHsgVmRSZWdpb25zVmlld2VyIH0gZnJvbSAnLi92aWV3ZXJzL3ZkLXJlZ2lvbnMtdmlld2VyJztcbmltcG9ydCB7IHJ1bkthbGlnbiB9IGZyb20gJy4vdXRpbHMvbXVsdGlwbGUtc2VxdWVuY2UtYWxpZ25tZW50JztcbmltcG9ydCB7IFNlcXVlbmNlQWxpZ25tZW50IH0gZnJvbSAnLi9zZXFfYWxpZ24nO1xuaW1wb3J0IHsgY29udmVydCB9IGZyb20gJy4vdXRpbHMvY29udmVydCc7XG5pbXBvcnQgeyBnZXRFbWJlZGRpbmdDb2xzTmFtZXMsIHNlcXVlbmNlU3BhY2UgfSBmcm9tICcuL3V0aWxzL3NlcXVlbmNlLXNwYWNlJztcbmltcG9ydCB7IGdldEFjdGl2aXR5Q2xpZmZzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdmlld2Vycy9hY3Rpdml0eS1jbGlmZnMnO1xuaW1wb3J0IHsgc2VxdWVuY2VHZXRTaW1pbGFyaXRpZXMsIGRyYXdUb29sdGlwIH0gZnJvbSAnLi91dGlscy9zZXF1ZW5jZS1hY3Rpdml0eS1jbGlmZnMnO1xuaW1wb3J0IHsgZ2V0TW9sZmlsZXNGcm9tU2VxLCBIRUxNX0NPUkVfTElCX0ZJTEVOQU1FIH0gZnJvbSAnLi91dGlscy91dGlscyc7XG5pbXBvcnQgeyBnZXRNYWNyb01vbCB9IGZyb20gJy4vdXRpbHMvYXRvbWljLXdvcmtzJztcbmltcG9ydCB7IE1hY3JvbW9sZWN1bGVTZXF1ZW5jZUNlbGxSZW5kZXJlciB9IGZyb20gJy4vdXRpbHMvY2VsbC1yZW5kZXJlcic7XG4vL3RhZ3M6IGluaXRcbmV4cG9ydCBmdW5jdGlvbiBpbml0QmlvKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGFwcGFyZW50bHkgSEVMTVdlYkVkaXRvciByZXF1aXJlcyBkb2pvIHRvIGJlIGluaXRpYWxpemVkIGZpcnN0XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBkb2pvLnJlYWR5KGZ1bmN0aW9uICgpIHsgcmVzb2x2ZShudWxsKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy9uYW1lOiBtYWNyb21vbGVjdWxlU2VxdWVuY2VDZWxsUmVuZGVyZXJcbi8vdGFnczogY2VsbFJlbmRlcmVyXG4vL21ldGEuY2VsbFR5cGU6IE1hY3JvbW9sZWN1bGVcbi8vb3V0cHV0OiBncmlkX2NlbGxfcmVuZGVyZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gbWFjcm9tb2xlY3VsZVNlcXVlbmNlQ2VsbFJlbmRlcmVyKCkge1xuICAgIHJldHVybiBuZXcgTWFjcm9tb2xlY3VsZVNlcXVlbmNlQ2VsbFJlbmRlcmVyKCk7XG59XG5mdW5jdGlvbiBjaGVja0lucHV0Q29sdW1uKGNvbCwgbmFtZSwgYWxsb3dlZE5vdGF0aW9ucyA9IFtdLCBhbGxvd2VkQWxwaGFiZXRzID0gW10pIHtcbiAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgaWYgKGNvbC5zZW1UeXBlICE9PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKG5hbWUgKyAnIGFuYWx5c2lzIGlzIGFsbG93ZWQgZm9yIE1hY3JvbW9sZWN1bGVzIHNlbWFudGljIHR5cGUnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICgoYWxsb3dlZEFscGhhYmV0cy5sZW5ndGggPiAwICYmXG4gICAgICAgICFhbGxvd2VkQWxwaGFiZXRzLnNvbWUoKGEpID0+IHVuaXRzLnRvVXBwZXJDYXNlKCkuZW5kc1dpdGgoYS50b1VwcGVyQ2FzZSgpKSkpIHx8XG4gICAgICAgIChhbGxvd2VkTm90YXRpb25zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFhbGxvd2VkTm90YXRpb25zLnNvbWUoKG4pID0+IHVuaXRzLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChuLnRvVXBwZXJDYXNlKCkpKSkpIHtcbiAgICAgICAgY29uc3Qgbm90YXRpb25BZGQgPSBhbGxvd2VkTm90YXRpb25zLmxlbmd0aCA9PSAwID8gJ2FueSBub3RhdGlvbicgOlxuICAgICAgICAgICAgKGBub3RhdGlvbiR7YWxsb3dlZE5vdGF0aW9ucy5sZW5ndGggPiAxID8gJ3MnIDogJyd9ICR7YWxsb3dlZE5vdGF0aW9ucy5tYXAoKG4pID0+IGBcIiR7bn1cImApLmpvaW4oJywgJyl9IGApO1xuICAgICAgICBjb25zdCBhbHBoYWJldEFkZCA9IGFsbG93ZWROb3RhdGlvbnMubGVuZ3RoID09IDAgPyAnYW55IGFscGhhYmV0JyA6XG4gICAgICAgICAgICAoYGFscGhhYmV0JHthbGxvd2VkQWxwaGFiZXRzLmxlbmd0aCA+IDEgPyAncycgOiAnJ30gJHthbGxvd2VkQWxwaGFiZXRzLm1hcCgoYSkgPT4gYFwiJHthfVwiYCkuam9pbignLCAnKX0uYCk7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhuYW1lICsgJyBhbmFseXNpcyBpcyBhbGxvd2VkIGZvciBNYWNyb21vbGVjdWxlcyB3aXRoICcgKyBub3RhdGlvbkFkZCArICcgYW5kICcgKyBhbHBoYWJldEFkZCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vL25hbWU6IHNlcXVlbmNlQWxpZ25tZW50XG4vL2lucHV0OiBzdHJpbmcgYWxpZ25UeXBlIHtjaG9pY2VzOiBbJ0xvY2FsIGFsaWdubWVudCcsICdHbG9iYWwgYWxpZ25tZW50J119XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuLy9pbnB1dDogc3RyaW5nIGFsaWduVGFibGUge2Nob2ljZXM6IFsnQVVUTycsICdOVUNMRU9USURFUycsICdCTE9TVU00NScsICdCTE9TVU01MCcsJ0JMT1NVTTYyJywnQkxPU1VNODAnLCdCTE9TVU05MCcsJ1BBTTMwJywnUEFNNzAnLCdQQU0yNTAnLCdTQ0hORUlERVInLCdUUkFOUyddfVxuLy9pbnB1dDogZG91YmxlIGdhcFxuLy9pbnB1dDogc3RyaW5nIHNlcTFcbi8vaW5wdXQ6IHN0cmluZyBzZXEyXG4vL291dHB1dDogb2JqZWN0IHJlc1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlQWxpZ25tZW50KGFsaWduVHlwZSwgYWxpZ25UYWJsZSwgZ2FwLCBzZXExLCBzZXEyKSB7XG4gICAgY29uc3QgdG9BbGlnbiA9IG5ldyBTZXF1ZW5jZUFsaWdubWVudChzZXExLCBzZXEyLCBnYXAsIGFsaWduVGFibGUpO1xuICAgIGNvbnN0IHJlcyA9IGFsaWduVHlwZSA9PSAnTG9jYWwgYWxpZ25tZW50JyA/IHRvQWxpZ24uc21pdGhXYXRlcm1hbigpIDogdG9BbGlnbi5uZWVkbGVtYW5XdW5jaCgpO1xuICAgIHJldHVybiByZXM7XG59XG4vL25hbWU6IFdlYkxvZ29cbi8vZGVzY3JpcHRpb246IFdlYkxvZ28gdmlld2VyXG4vL3RhZ3M6IHZpZXdlciwgcGFuZWxcbi8vb3V0cHV0OiB2aWV3ZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gd2ViTG9nb1ZpZXdlcigpIHtcbiAgICByZXR1cm4gbmV3IFdlYkxvZ28oKTtcbn1cbi8vbmFtZTogVmRSZWdpb25zXG4vL2Rlc2NyaXB0aW9uOiBWLURvbWFpbiByZWdpb25zIHZpZXdlclxuLy90YWdzOiB2aWV3ZXIsIHBhbmVsXG4vL291dHB1dDogdmlld2VyIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIHZkUmVnaW9uVmlld2VyKCkge1xuICAgIHJldHVybiBuZXcgVmRSZWdpb25zVmlld2VyKCk7XG59XG4vL3RvcC1tZW51OiBCaW8gfCBTZXF1ZW5jZSBBY3Rpdml0eSBDbGlmZnMuLi5cbi8vbmFtZTogU2VxdWVuY2UgQWN0aXZpdHkgQ2xpZmZzXG4vL2Rlc2NyaXB0aW9uOiBkZXRlY3QgYWN0aXZpdHkgY2xpZmZzXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGUgW0lucHV0IGRhdGEgdGFibGVdXG4vL2lucHV0OiBjb2x1bW4gbWFjcm9Nb2xlY3VsZSB7c2VtVHlwZTogTWFjcm9tb2xlY3VsZX1cbi8vaW5wdXQ6IGNvbHVtbiBhY3Rpdml0aWVzXG4vL2lucHV0OiBkb3VibGUgc2ltaWxhcml0eSA9IDgwIFtTaW1pbGFyaXR5IGN1dG9mZl1cbi8vaW5wdXQ6IHN0cmluZyBtZXRob2ROYW1lIHsgY2hvaWNlczpbXCJVTUFQXCIsIFwidC1TTkVcIiwgXCJTUEVcIl0gfVxuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2aXR5Q2xpZmZzKGRmLCBtYWNyb01vbGVjdWxlLCBhY3Rpdml0aWVzLCBzaW1pbGFyaXR5LCBtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgaWYgKCFjaGVja0lucHV0Q29sdW1uKG1hY3JvTW9sZWN1bGUsICdBY3Rpdml0eSBDbGlmZnMnKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgYXhlc05hbWVzID0gZ2V0RW1iZWRkaW5nQ29sc05hbWVzKGRmKTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICdTUEUnOiB7IGN5Y2xlczogMjAwMCwgbGFtYmRhOiAxLjAsIGRsYW1iZGE6IDAuMDAwNSB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bml0cyA9IG1hY3JvTW9sZWN1bGUudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgICAgICAgeWllbGQgZ2V0QWN0aXZpdHlDbGlmZnMoZGYsIG1hY3JvTW9sZWN1bGUsIGF4ZXNOYW1lcywgJ0FjdGl2aXR5IGNsaWZmcycsIGFjdGl2aXRpZXMsIHNpbWlsYXJpdHksICdMZXZlbnNodGVpbicsIG1ldGhvZE5hbWUsIERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSwgdW5pdHMsIHNlcXVlbmNlU3BhY2UsIHNlcXVlbmNlR2V0U2ltaWxhcml0aWVzLCBkcmF3VG9vbHRpcCwgb3B0aW9uc1ttZXRob2ROYW1lXSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBCaW8gfCBTZXF1ZW5jZSBTcGFjZS4uLlxuLy9uYW1lOiBTZXF1ZW5jZSBTcGFjZVxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW4gbWFjcm9Nb2xlY3VsZSB7IHNlbVR5cGU6IE1hY3JvbW9sZWN1bGUgfVxuLy9pbnB1dDogc3RyaW5nIG1ldGhvZE5hbWUgeyBjaG9pY2VzOltcIlVNQVBcIiwgXCJ0LVNORVwiLCBcIlNQRVwiXSB9XG4vL2lucHV0OiBzdHJpbmcgc2ltaWxhcml0eU1ldHJpYyB7IGNob2ljZXM6W1wiTGV2ZW5zaHRlaW5cIiwgXCJUYW5pbW90b1wiXSB9XG4vL2lucHV0OiBib29sIHBsb3RFbWJlZGRpbmdzID0gdHJ1ZVxuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlU3BhY2VUb3BNZW51KHRhYmxlLCBtYWNyb01vbGVjdWxlLCBtZXRob2ROYW1lLCBzaW1pbGFyaXR5TWV0cmljID0gJ0xldmVuc2h0ZWluJywgcGxvdEVtYmVkZGluZ3MpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIWNoZWNrSW5wdXRDb2x1bW4obWFjcm9Nb2xlY3VsZSwgJ0FjdGl2aXR5IENsaWZmcycpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBlbWJlZENvbHNOYW1lcyA9IGdldEVtYmVkZGluZ0NvbHNOYW1lcyh0YWJsZSk7XG4gICAgICAgIGNvbnN0IGNoZW1TcGFjZVBhcmFtcyA9IHtcbiAgICAgICAgICAgIHNlcUNvbDogbWFjcm9Nb2xlY3VsZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgICBzaW1pbGFyaXR5TWV0cmljOiBzaW1pbGFyaXR5TWV0cmljLFxuICAgICAgICAgICAgZW1iZWRBeGVzTmFtZXM6IGVtYmVkQ29sc05hbWVzXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlU3BhY2VSZXMgPSB5aWVsZCBzZXF1ZW5jZVNwYWNlKGNoZW1TcGFjZVBhcmFtcyk7XG4gICAgICAgIGNvbnN0IGVtYmVkZGluZ3MgPSBzZXF1ZW5jZVNwYWNlUmVzLmNvb3JkaW5hdGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBlbWJlZGRpbmdzKVxuICAgICAgICAgICAgdGFibGUuY29sdW1ucy5hZGQoY29sKTtcbiAgICAgICAgaWYgKHBsb3RFbWJlZGRpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgZ3Jvay5zaGVsbC52aWV3cykge1xuICAgICAgICAgICAgICAgIGlmICh2Lm5hbWUgPT09IHRhYmxlLm5hbWUpXG4gICAgICAgICAgICAgICAgICAgIHYuc2NhdHRlclBsb3QoeyB4OiBlbWJlZENvbHNOYW1lc1swXSwgeTogZW1iZWRDb2xzTmFtZXNbMV0sIHRpdGxlOiAnU2VxdWVuY2Ugc3BhY2UnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG47XG4vL3RvcC1tZW51OiBCaW8gfCBUbyBBdG9taWMgTGV2ZWwuLi5cbi8vbmFtZTogVG8gQXRvbWljIExldmVsXG4vL2Rlc2NyaXB0aW9uOiByZXR1cm5zIG1vbGZpbGVzIGZvciBlYWNoIG1vbm9tZXIgZnJvbSBIRUxNIGxpYnJhcnlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZiBbSW5wdXQgZGF0YSB0YWJsZV1cbi8vaW5wdXQ6IGNvbHVtbiBtYWNyb01vbGVjdWxlIHtzZW1UeXBlOiBNYWNyb21vbGVjdWxlfVxuZXhwb3J0IGZ1bmN0aW9uIHRvQXRvbWljTGV2ZWwoZGYsIG1hY3JvTW9sZWN1bGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoREcuRnVuYy5maW5kKHsgcGFja2FnZTogJ0NoZW0nLCBuYW1lOiAnZ2V0UmRLaXRNb2R1bGUnIH0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdUcmFuc2Zvcm1hdGlvbiB0byBhdG9taWMgbGV2ZWwgcmVxdWlyZXMgcGFja2FnZSBcIkNoZW1cIiBpbnN0YWxsZWQuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja0lucHV0Q29sdW1uKG1hY3JvTW9sZWN1bGUsICdUbyBBdG9taWMgTGV2ZWwnKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IGN1cnJlbnRWaWV3O1xuICAgICAgICBmb3IgKGxldCB2aWV3IG9mIGdyb2suc2hlbGwudGFibGVWaWV3cykge1xuICAgICAgICAgICAgaWYgKGRmLm5hbWUgPT09IHZpZXcubmFtZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3ID0gdmlldztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWxlID0geWllbGQgX3BhY2thZ2UuZmlsZXMucmVhZEFzVGV4dCgnc2FtcGxlcy9zYXItc21hbGwuY3N2Jyk7XG4gICAgICAgIGNvbnN0IGRmMiA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KGZpbGUpO1xuICAgICAgICBjb25zdCB2ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYyKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmNsb3NlVGFibGUoZGYyKTtcbiAgICAgICAgICAgIHYuY2xvc2UoKTtcbiAgICAgICAgICAgIGdyb2suc2hlbGwudiA9IGN1cnJlbnRWaWV3O1xuICAgICAgICB9LCAxMDApO1xuICAgICAgICBjb25zdCBtb25vbWVyc0xpYkZpbGUgPSB5aWVsZCBfcGFja2FnZS5maWxlcy5yZWFkQXNUZXh0KEhFTE1fQ09SRV9MSUJfRklMRU5BTUUpO1xuICAgICAgICBjb25zdCBtb25vbWVyc0xpYk9iamVjdCA9IEpTT04ucGFyc2UobW9ub21lcnNMaWJGaWxlKTtcbiAgICAgICAgY29uc3QgYXRvbWljQ29kZXMgPSBnZXRNb2xmaWxlc0Zyb21TZXEobWFjcm9Nb2xlY3VsZSwgbW9ub21lcnNMaWJPYmplY3QpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBnZXRNYWNyb01vbChhdG9taWNDb2Rlcyk7XG4gICAgICAgIGNvbnN0IGNvbCA9IERHLkNvbHVtbi5mcm9tU3RyaW5ncygncmVnZW5lcmF0ZWQnLCByZXN1bHQpO1xuICAgICAgICBjb2wuc2VtVHlwZSA9IERHLlNFTVRZUEUuTU9MRUNVTEU7XG4gICAgICAgIGNvbC50YWdzW0RHLlRBR1MuVU5JVFNdID0gJ21vbGJsb2NrJztcbiAgICAgICAgZGYuY29sdW1ucy5hZGQoY29sLCB0cnVlKTtcbiAgICB9KTtcbn1cbi8vdG9wLW1lbnU6IEJpbyB8IE1TQS4uLlxuLy9uYW1lOiBNU0Fcbi8vaW5wdXQ6IGRhdGFmcmFtZSB0YWJsZVxuLy9pbnB1dDogY29sdW1uIHNlcXVlbmNlIHsgc2VtVHlwZTogTWFjcm9tb2xlY3VsZSB9XG4vL291dHB1dDogY29sdW1uIHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGxlU2VxdWVuY2VBbGlnbm1lbnRBbnkodGFibGUsIGNvbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghY2hlY2tJbnB1dENvbHVtbihjb2wsICdNU0EnLCBbJ2Zhc3RhJ10sIFsnRE5BJywgJ1JOQScsICdQVCddKSlcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBtc2FDb2wgPSB5aWVsZCBydW5LYWxpZ24oY29sLCBmYWxzZSk7XG4gICAgICAgIHRhYmxlLmNvbHVtbnMuYWRkKG1zYUNvbCk7XG4gICAgICAgIC8vIFRoaXMgY2FsbCBpcyByZXF1aXJlZCB0byBlbmFibGUgY2VsbCByZW5kZXJlciBhY3RpdmF0aW9uXG4gICAgICAgIHlpZWxkIGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKHRhYmxlKTtcbiAgICAgICAgLy8gY29uc3QgdHY6IERHLlRhYmxlVmlldyA9IGdyb2suc2hlbGwudHY7XG4gICAgICAgIC8vIHR2LmdyaWQuaW52YWxpZGF0ZSgpO1xuICAgICAgICByZXR1cm4gbXNhQ29sO1xuICAgIH0pO1xufVxuLy9uYW1lOiBDb21wb3NpdGlvbiBBbmFseXNpc1xuLy90b3AtbWVudTogQmlvIHwgQ29tcG9zaXRpb24gQW5hbHlzaXNcbi8vb3V0cHV0OiB2aWV3ZXIgcmVzdWx0XG5leHBvcnQgZnVuY3Rpb24gY29tcG9zaXRpb25BbmFseXNpcygpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBIaWdoZXIgcHJpb3JpdHkgZm9yIGNvbHVtbnMgd2l0aCBNU0EgZGF0YSB0byBzaG93IHdpdGggV2ViTG9nby5cbiAgICAgICAgY29uc3QgdHYgPSBncm9rLnNoZWxsLnR2O1xuICAgICAgICBjb25zdCBkZiA9IHR2LmRhdGFGcmFtZTtcbiAgICAgICAgY29uc3QgY29sID0gV2ViTG9nby5waWNrVXBTZXFDb2wyKGRmKTtcbiAgICAgICAgaWYgKCFjb2wpIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoJ0N1cnJlbnQgdGFibGUgZG9lcyBub3QgY29udGFpbiBzZXF1ZW5jZXMnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoZWNrSW5wdXRDb2x1bW4oY29sLCAnQ29tcG9zaXRpb24nKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgYWxsb3dlZE5vdGF0aW9ucyA9IFsnZmFzdGEnLCAnc2VwYXJhdG9yJ107XG4gICAgICAgIGNvbnN0IHVuaXRzID0gY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgICAgICAgaWYgKCFhbGxvd2VkTm90YXRpb25zLnNvbWUoKG4pID0+IHVuaXRzLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChuLnRvVXBwZXJDYXNlKCkpKSkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdDb21wb3NpdGlvbiBhbmFseXNpcyBpcyBhbGxvd2VkIGZvciAnICtcbiAgICAgICAgICAgICAgICBgbm90YXRpb24ke2FsbG93ZWROb3RhdGlvbnMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfSAke2FsbG93ZWROb3RhdGlvbnMubWFwKChuKSA9PiBgXCIke259XCJgKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0di5hZGRWaWV3ZXIoJ1dlYkxvZ28nLCB7IHNlcXVlbmNlQ29sdW1uTmFtZTogY29sLm5hbWUgfSk7XG4gICAgfSk7XG59XG4vLyBoZWxwZXIgZnVuY3Rpb24gZm9yIGltcG9ydEZhc3RhXG5mdW5jdGlvbiBwYXJzZU1hY3JvbW9sZWN1bGUoZmlsZUNvbnRlbnQsIHN0YXJ0T2ZTZXF1ZW5jZSwgZW5kT2ZTZXF1ZW5jZSkge1xuICAgIGNvbnN0IHNlcSA9IGZpbGVDb250ZW50LnNsaWNlKHN0YXJ0T2ZTZXF1ZW5jZSwgZW5kT2ZTZXF1ZW5jZSk7XG4gICAgY29uc3Qgc2VxQXJyYXkgPSBzZXEuc3BsaXQoL1xccy8pO1xuICAgIHJldHVybiBzZXFBcnJheS5qb2luKCcnKTtcbn1cbi8vbmFtZTogaW1wb3J0RmFzdGFcbi8vZGVzY3JpcHRpb246IE9wZW5zIEZBU1RBIGZpbGVcbi8vdGFnczogZmlsZS1oYW5kbGVyXG4vL21ldGEuZXh0OiBmYXN0YSwgZm5hLCBmZm4sIGZhYSwgZnJuLCBmYSwgZnN0XG4vL2lucHV0OiBzdHJpbmcgZmlsZUNvbnRlbnRcbi8vb3V0cHV0OiBsaXN0IHRhYmxlc1xuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydEZhc3RhKGZpbGVDb250ZW50KSB7XG4gICAgY29uc3QgcmVnZXggPSAvXj4oLiopJC9nbTsgLy8gbWF0Y2ggbGluZXMgc3RhcnRpbmcgd2l0aCA+XG4gICAgY29uc3QgZGVzY3JpcHRpb25zQXJyYXkgPSBbXTtcbiAgICBjb25zdCBzZXF1ZW5jZXNBcnJheSA9IFtdO1xuICAgIGxldCBzdGFydE9mU2VxdWVuY2UgPSAwO1xuICAgIGxldCBtYXRjaDsgLy8gbWF0Y2guaW5kZXggaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWF0Y2hlZCBsaW5lXG4gICAgd2hpbGUgKG1hdGNoID0gcmVnZXguZXhlYyhmaWxlQ29udGVudCkpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBmaWxlQ29udGVudC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyAxLCByZWdleC5sYXN0SW5kZXgpO1xuICAgICAgICBkZXNjcmlwdGlvbnNBcnJheS5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKHN0YXJ0T2ZTZXF1ZW5jZSAhPT0gMClcbiAgICAgICAgICAgIHNlcXVlbmNlc0FycmF5LnB1c2gocGFyc2VNYWNyb21vbGVjdWxlKGZpbGVDb250ZW50LCBzdGFydE9mU2VxdWVuY2UsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgIHN0YXJ0T2ZTZXF1ZW5jZSA9IHJlZ2V4Lmxhc3RJbmRleCArIDE7XG4gICAgfVxuICAgIHNlcXVlbmNlc0FycmF5LnB1c2gocGFyc2VNYWNyb21vbGVjdWxlKGZpbGVDb250ZW50LCBzdGFydE9mU2VxdWVuY2UsIC0xKSk7XG4gICAgY29uc3QgZGVzY3JpcHRpb25zQXJyYXlDb2wgPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2Rlc2NyaXB0aW9uJywgZGVzY3JpcHRpb25zQXJyYXkpO1xuICAgIGNvbnN0IHNlcXVlbmNlQ29sID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKCdzZXF1ZW5jZScsIHNlcXVlbmNlc0FycmF5KTtcbiAgICBzZXF1ZW5jZUNvbC5zZW1UeXBlID0gJ01hY3JvbW9sZWN1bGUnO1xuICAgIGNvbnN0IHN0YXRzID0gV2ViTG9nby5nZXRTdGF0cyhzZXF1ZW5jZUNvbCwgNSwgV2ViTG9nby5zcGxpdHRlckFzRmFzdGEpO1xuICAgIGNvbnN0IHNlcVR5cGUgPSBzdGF0cy5zYW1lTGVuZ3RoID8gJ1NFUS5NU0EnIDogJ1NFUSc7XG4gICAgY29uc3QgUGVwdGlkZUZhc3RhQWxwaGFiZXQgPSBuZXcgU2V0KFtcbiAgICAgICAgJ0cnLCAnTCcsICdZJywgJ1MnLCAnRScsICdRJywgJ0QnLCAnTicsICdGJywgJ0EnLFxuICAgICAgICAnSycsICdSJywgJ0gnLCAnQycsICdWJywgJ1AnLCAnVycsICdJJywgJ00nLCAnVCcsXG4gICAgXSk7XG4gICAgY29uc3QgRG5hRmFzdGFBbHBoYWJldCA9IG5ldyBTZXQoWydBJywgJ0MnLCAnRycsICdUJ10pO1xuICAgIGNvbnN0IFJuYUZhc3RhQWxwaGFiZXQgPSBuZXcgU2V0KFsnQScsICdDJywgJ0cnLCAnVSddKTtcbiAgICAvL2NvbnN0IFNtaWxlc1Jhd0FscGhhYmV0ID0gbmV3IFNldChbXG4gICAgLy8gICdPJywgJ0MnLCAnYycsICdOJywgJ1MnLCAnRicsICcoJywgJyknLFxuICAgIC8vICAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsXG4gICAgLy8gICcrJywgJy0nLCAnQCcsICdbJywgJ10nLCAnLycsICdcXFxcJywgJyMnLCAnPSddKTtcbiAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXMgPSBbXG4gICAgICAgIFsnUFQnLCBQZXB0aWRlRmFzdGFBbHBoYWJldF0sXG4gICAgICAgIFsnRE5BJywgRG5hRmFzdGFBbHBoYWJldF0sXG4gICAgICAgIFsnUk5BJywgUm5hRmFzdGFBbHBoYWJldF0sXG4gICAgXTtcbiAgICAvL2NvbnN0IGFscGhhYmV0Q2FuZGlkYXRlczogW3N0cmluZywgU2V0PHN0cmluZz5dW10gPSBbXG4gICAgLy8gIFsnTlQnLCBuZXcgU2V0KE9iamVjdC5rZXlzKE51Y2xlb3RpZGVzLk5hbWVzKSldLFxuICAgIC8vICBbJ1BUJywgbmV3IFNldChPYmplY3Qua2V5cyhBbWlub2FjaWRzLk5hbWVzKSldLFxuICAgIC8vXTtcbiAgICAvLyBDYWxjdWxhdGUgbGlrZWxpaG9vZHMgZm9yIGFscGhhYmV0X2NhbmRpZGF0ZXNcbiAgICBjb25zdCBhbHBoYWJldENhbmRpZGF0ZXNTaW0gPSBhbHBoYWJldENhbmRpZGF0ZXMubWFwKChjKSA9PiBXZWJMb2dvLmdldEFscGhhYmV0U2ltaWxhcml0eShzdGF0cy5mcmVxLCBjWzFdKSk7XG4gICAgY29uc3QgbWF4Q29zID0gTWF0aC5tYXgoLi4uYWxwaGFiZXRDYW5kaWRhdGVzU2ltKTtcbiAgICBjb25zdCBhbHBoYWJldCA9IG1heENvcyA+IDAuNjUgPyBhbHBoYWJldENhbmRpZGF0ZXNbYWxwaGFiZXRDYW5kaWRhdGVzU2ltLmluZGV4T2YobWF4Q29zKV1bMF0gOiAnVU4nO1xuICAgIHNlcXVlbmNlQ29sLnNlbVR5cGUgPSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEU7XG4gICAgY29uc3QgdW5pdHMgPSBgZmFzdGE6JHtzZXFUeXBlfToke2FscGhhYmV0fWA7XG4gICAgc2VxdWVuY2VDb2wuc2V0VGFnKERHLlRBR1MuVU5JVFMsIHVuaXRzKTtcbiAgICByZXR1cm4gW0RHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNBcnJheUNvbCxcbiAgICAgICAgICAgIHNlcXVlbmNlQ29sLFxuICAgICAgICBdKV07XG59XG4vL25hbWU6IEJpbyB8IENvbnZlcnRcbi8vZnJpZW5kbHktbmFtZTogQmlvIHwgQ29udmVydFxuLy90YWdzOiBwYW5lbCwgYmlvXG4vL2lucHV0OiBjb2x1bW4gY29sIHtzZW1UeXBlOiBNYWNyb21vbGVjdWxlfVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQYW5lbChjb2wpIHtcbiAgICBjb252ZXJ0KGNvbCk7XG59XG4iLCJjbGFzcyBDZWxsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGFyZW50SSA9IDA7XG4gICAgICAgIHRoaXMucGFyZW50SiA9IDA7XG4gICAgfVxufVxuO1xuZXhwb3J0IGNsYXNzIEFsaWduZWQge1xuICAgIGNvbnN0cnVjdG9yKHNlcTFfLCBzZXEyXywgc2NvcmVfKSB7XG4gICAgICAgIHRoaXMuc2VxMSA9IHNlcTFfO1xuICAgICAgICB0aGlzLnNlcTIgPSBzZXEyXztcbiAgICAgICAgdGhpcy5zY29yZSA9IHNjb3JlXztcbiAgICB9XG59XG47XG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBbGlnbm1lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNlcTFfLCBzZXEyXywgZ2FwXywgYWxpZ25HcmlkXyA9IFwiXCIpIHtcbiAgICAgICAgdGhpcy5zZXExID0gJyc7XG4gICAgICAgIHRoaXMuc2VxMiA9ICcnO1xuICAgICAgICB0aGlzLmdhcCA9IDE7XG4gICAgICAgIHRoaXMubGVuMSA9IDA7XG4gICAgICAgIHRoaXMubGVuMiA9IDA7XG4gICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgIHRoaXMuYWxpZ25HcmlkID0gW107XG4gICAgICAgIHRoaXMuc2NvcmVzID0gW107XG4gICAgICAgIHRoaXMuZHBHcmlkID0gW107XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB7fTtcbiAgICAgICAgdGhpcy5CTE9TVU00NSA9IFtbNSwgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDEsIDAsIC0yLCAtMiwgMCwgLTEsIC0xLCAwLCAtNV0sXG4gICAgICAgICAgICBbLTIsIDcsIDAsIC0xLCAtMywgMSwgMCwgLTIsIDAsIC0zLCAtMiwgMywgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMiwgLTEsIC0yLCAtMSwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMCwgNiwgMiwgLTIsIDAsIDAsIDAsIDEsIC0yLCAtMywgMCwgLTIsIC0yLCAtMiwgMSwgMCwgLTQsIC0yLCAtMywgNCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTEsIDIsIDcsIC0zLCAwLCAyLCAtMSwgMCwgLTQsIC0zLCAwLCAtMywgLTQsIC0xLCAwLCAtMSwgLTQsIC0yLCAtMywgNSwgMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTMsIC0yLCAtMywgMTIsIC0zLCAtMywgLTMsIC0zLCAtMywgLTIsIC0zLCAtMiwgLTIsIC00LCAtMSwgLTEsIC01LCAtMywgLTEsIC0yLCAtMywgLTIsIC01XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgMCwgLTMsIDYsIDIsIC0yLCAxLCAtMiwgLTIsIDEsIDAsIC00LCAtMSwgMCwgLTEsIC0yLCAtMSwgLTMsIDAsIDQsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDIsIC0zLCAyLCA2LCAtMiwgMCwgLTMsIC0yLCAxLCAtMiwgLTMsIDAsIDAsIC0xLCAtMywgLTIsIC0zLCAxLCA0LCAtMSwgLTVdLFxuICAgICAgICAgICAgWzAsIC0yLCAwLCAtMSwgLTMsIC0yLCAtMiwgNywgLTIsIC00LCAtMywgLTIsIC0yLCAtMywgLTIsIDAsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIDAsIDEsIDAsIC0zLCAxLCAwLCAtMiwgMTAsIC0zLCAtMiwgLTEsIDAsIC0yLCAtMiwgLTEsIC0yLCAtMywgMiwgLTMsIDAsIDAsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMiwgLTQsIC0zLCAtMiwgLTMsIC00LCAtMywgNSwgMiwgLTMsIDIsIDAsIC0yLCAtMiwgLTEsIC0yLCAwLCAzLCAtMywgLTMsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMywgLTMsIC0yLCAtMiwgLTIsIC0zLCAtMiwgMiwgNSwgLTMsIDIsIDEsIC0zLCAtMywgLTEsIC0yLCAwLCAxLCAtMywgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDMsIDAsIDAsIC0zLCAxLCAxLCAtMiwgLTEsIC0zLCAtMywgNSwgLTEsIC0zLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0yLCAwLCAxLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTIsIC0zLCAtMiwgMCwgLTIsIC0yLCAwLCAyLCAyLCAtMSwgNiwgMCwgLTIsIC0yLCAtMSwgLTIsIDAsIDEsIC0yLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTIsIC0yLCAtNCwgLTIsIC00LCAtMywgLTMsIC0yLCAwLCAxLCAtMywgMCwgOCwgLTMsIC0yLCAtMSwgMSwgMywgMCwgLTMsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTIsIC0xLCAtNCwgLTEsIDAsIC0yLCAtMiwgLTIsIC0zLCAtMSwgLTIsIC0zLCA5LCAtMSwgLTEsIC0zLCAtMywgLTMsIC0yLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMSwgMCwgLTEsIDAsIDAsIDAsIC0xLCAtMiwgLTMsIC0xLCAtMiwgLTIsIC0xLCA0LCAyLCAtNCwgLTIsIC0xLCAwLCAwLCAwLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDIsIDUsIC0zLCAtMSwgMCwgMCwgLTEsIDAsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTIsIC00LCAtNCwgLTUsIC0yLCAtMywgLTIsIC0zLCAtMiwgLTIsIC0yLCAtMiwgMSwgLTMsIC00LCAtMywgMTUsIDMsIC0zLCAtNCwgLTIsIC0yLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCAtMiwgLTIsIC0zLCAtMSwgLTIsIC0zLCAyLCAwLCAwLCAtMSwgMCwgMywgLTMsIC0yLCAtMSwgMywgOCwgLTEsIC0yLCAtMiwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMiwgLTMsIC0zLCAtMSwgLTMsIC0zLCAtMywgLTMsIDMsIDEsIC0yLCAxLCAwLCAtMywgLTEsIDAsIC0zLCAtMSwgNSwgLTMsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgNCwgNSwgLTIsIDAsIDEsIC0xLCAwLCAtMywgLTMsIDAsIC0yLCAtMywgLTIsIDAsIDAsIC00LCAtMiwgLTMsIDQsIDIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDEsIC0zLCA0LCA0LCAtMiwgMCwgLTMsIC0yLCAxLCAtMSwgLTMsIC0xLCAwLCAtMSwgLTIsIC0yLCAtMywgMiwgNCwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC01XSxcbiAgICAgICAgICAgIFstNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIDFdXTtcbiAgICAgICAgdGhpcy5CTE9TVU01MCA9IFtbNSwgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMywgLTEsIDEsIDAsIC0zLCAtMiwgMCwgLTIsIC0xLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0yLCA3LCAtMSwgLTIsIC00LCAxLCAwLCAtMywgMCwgLTQsIC0zLCAzLCAtMiwgLTMsIC0zLCAtMSwgLTEsIC0zLCAtMSwgLTMsIC0xLCAwLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgNywgMiwgLTIsIDAsIDAsIDAsIDEsIC0zLCAtNCwgMCwgLTIsIC00LCAtMiwgMSwgMCwgLTQsIC0yLCAtMywgNCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTIsIDIsIDgsIC00LCAwLCAyLCAtMSwgLTEsIC00LCAtNCwgLTEsIC00LCAtNSwgLTEsIDAsIC0xLCAtNSwgLTMsIC00LCA1LCAxLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtNCwgLTIsIC00LCAxMywgLTMsIC0zLCAtMywgLTMsIC0yLCAtMiwgLTMsIC0yLCAtMiwgLTQsIC0xLCAtMSwgLTUsIC0zLCAtMSwgLTMsIC0zLCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0xLCAxLCAwLCAwLCAtMywgNywgMiwgLTIsIDEsIC0zLCAtMiwgMiwgMCwgLTQsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMywgMCwgNCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMCwgMCwgMiwgLTMsIDIsIDYsIC0zLCAwLCAtNCwgLTMsIDEsIC0yLCAtMywgLTEsIC0xLCAtMSwgLTMsIC0yLCAtMywgMSwgNSwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMywgMCwgLTEsIC0zLCAtMiwgLTMsIDgsIC0yLCAtNCwgLTQsIC0yLCAtMywgLTQsIC0yLCAwLCAtMiwgLTMsIC0zLCAtNCwgLTEsIC0yLCAtMiwgLTVdLFxuICAgICAgICAgICAgWy0yLCAwLCAxLCAtMSwgLTMsIDEsIDAsIC0yLCAxMCwgLTQsIC0zLCAwLCAtMSwgLTEsIC0yLCAtMSwgLTIsIC0zLCAyLCAtNCwgMCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgLTQsIC0zLCAtNCwgLTIsIC0zLCAtNCwgLTQsIC00LCA1LCAyLCAtMywgMiwgMCwgLTMsIC0zLCAtMSwgLTMsIC0xLCA0LCAtNCwgLTMsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtNCwgLTQsIC0yLCAtMiwgLTMsIC00LCAtMywgMiwgNSwgLTMsIDMsIDEsIC00LCAtMywgLTEsIC0yLCAtMSwgMSwgLTQsIC0zLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAzLCAwLCAtMSwgLTMsIDIsIDEsIC0yLCAwLCAtMywgLTMsIDYsIC0yLCAtNCwgLTEsIDAsIC0xLCAtMywgLTIsIC0zLCAwLCAxLCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTIsIC00LCAtMiwgMCwgLTIsIC0zLCAtMSwgMiwgMywgLTIsIDcsIDAsIC0zLCAtMiwgLTEsIC0xLCAwLCAxLCAtMywgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTMsIC0zLCAtNCwgLTUsIC0yLCAtNCwgLTMsIC00LCAtMSwgMCwgMSwgLTQsIDAsIDgsIC00LCAtMywgLTIsIDEsIDQsIC0xLCAtNCwgLTQsIC0yLCAtNV0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMiwgLTEsIC00LCAtMSwgLTEsIC0yLCAtMiwgLTMsIC00LCAtMSwgLTMsIC00LCAxMCwgLTEsIC0xLCAtNCwgLTMsIC0zLCAtMiwgLTEsIC0yLCAtNV0sXG4gICAgICAgICAgICBbMSwgLTEsIDEsIDAsIC0xLCAwLCAtMSwgMCwgLTEsIC0zLCAtMywgMCwgLTIsIC0zLCAtMSwgNSwgMiwgLTQsIC0yLCAtMiwgMCwgMCwgLTEsIC01XSxcbiAgICAgICAgICAgIFswLCAtMSwgMCwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgMiwgNSwgLTMsIC0yLCAwLCAwLCAtMSwgMCwgLTVdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTQsIC01LCAtNSwgLTEsIC0zLCAtMywgLTMsIC0zLCAtMiwgLTMsIC0xLCAxLCAtNCwgLTQsIC0zLCAxNSwgMiwgLTMsIC01LCAtMiwgLTMsIC01XSxcbiAgICAgICAgICAgIFstMiwgLTEsIC0yLCAtMywgLTMsIC0xLCAtMiwgLTMsIDIsIC0xLCAtMSwgLTIsIDAsIDQsIC0zLCAtMiwgLTIsIDIsIDgsIC0xLCAtMywgLTIsIC0xLCAtNV0sXG4gICAgICAgICAgICBbMCwgLTMsIC0zLCAtNCwgLTEsIC0zLCAtMywgLTQsIC00LCA0LCAxLCAtMywgMSwgLTEsIC0zLCAtMiwgMCwgLTMsIC0xLCA1LCAtNCwgLTMsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTIsIC0xLCA0LCA1LCAtMywgMCwgMSwgLTEsIDAsIC00LCAtNCwgMCwgLTMsIC00LCAtMiwgMCwgMCwgLTUsIC0zLCAtNCwgNSwgMiwgLTEsIC01XSxcbiAgICAgICAgICAgIFstMSwgMCwgMCwgMSwgLTMsIDQsIDUsIC0yLCAwLCAtMywgLTMsIDEsIC0xLCAtNCwgLTEsIDAsIC0xLCAtMiwgLTIsIC0zLCAyLCA1LCAtMSwgLTVdLFxuICAgICAgICAgICAgWy0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAwLCAtMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtNV0sXG4gICAgICAgICAgICBbLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAtNSwgLTUsIC01LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNNjIgPSBbWzQsIC0xLCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDEsIDAsIC0zLCAtMiwgMCwgLTIsIC0xLCAwLCAtNF0sXG4gICAgICAgICAgICBbLTEsIDUsIDAsIC0yLCAtMywgMSwgMCwgLTIsIDAsIC0zLCAtMiwgMiwgLTEsIC0zLCAtMiwgLTEsIC0xLCAtMywgLTIsIC0zLCAtMSwgMCwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgMCwgNiwgMSwgLTMsIDAsIDAsIDAsIDEsIC0zLCAtMywgMCwgLTIsIC0zLCAtMiwgMSwgMCwgLTQsIC0yLCAtMywgMywgMCwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTIsIDEsIDYsIC0zLCAwLCAyLCAtMSwgLTEsIC0zLCAtNCwgLTEsIC0zLCAtMywgLTEsIDAsIC0xLCAtNCwgLTMsIC0zLCA0LCAxLCAtMSwgLTRdLFxuICAgICAgICAgICAgWzAsIC0zLCAtMywgLTMsIDksIC0zLCAtNCwgLTMsIC0zLCAtMSwgLTEsIC0zLCAtMSwgLTIsIC0zLCAtMSwgLTEsIC0yLCAtMiwgLTEsIC0zLCAtMywgLTIsIC00XSxcbiAgICAgICAgICAgIFstMSwgMSwgMCwgMCwgLTMsIDUsIDIsIC0yLCAwLCAtMywgLTIsIDEsIDAsIC0zLCAtMSwgMCwgLTEsIC0yLCAtMSwgLTIsIDAsIDMsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIDAsIDAsIDIsIC00LCAyLCA1LCAtMiwgMCwgLTMsIC0zLCAxLCAtMiwgLTMsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMiwgMSwgNCwgLTEsIC00XSxcbiAgICAgICAgICAgIFswLCAtMiwgMCwgLTEsIC0zLCAtMiwgLTIsIDYsIC0yLCAtNCwgLTQsIC0yLCAtMywgLTMsIC0yLCAwLCAtMiwgLTIsIC0zLCAtMywgLTEsIC0yLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0yLCAwLCAxLCAtMSwgLTMsIDAsIDAsIC0yLCA4LCAtMywgLTMsIC0xLCAtMiwgLTEsIC0yLCAtMSwgLTIsIC0yLCAyLCAtMywgMCwgMCwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgLTMsIC0zLCAtMywgLTEsIC0zLCAtMywgLTQsIC0zLCA0LCAyLCAtMywgMSwgMCwgLTMsIC0yLCAtMSwgLTMsIC0xLCAzLCAtMywgLTMsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTEsIC0yLCAtMywgLTQsIC0xLCAtMiwgLTMsIC00LCAtMywgMiwgNCwgLTIsIDIsIDAsIC0zLCAtMiwgLTEsIC0yLCAtMSwgMSwgLTQsIC0zLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAyLCAwLCAtMSwgLTMsIDEsIDEsIC0yLCAtMSwgLTMsIC0yLCA1LCAtMSwgLTMsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMiwgMCwgMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0yLCAtMywgLTEsIDAsIC0yLCAtMywgLTIsIDEsIDIsIC0xLCA1LCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIDEsIC0zLCAtMSwgLTEsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTMsIC0zLCAtMywgLTIsIC0zLCAtMywgLTMsIC0xLCAwLCAwLCAtMywgMCwgNiwgLTQsIC0yLCAtMiwgMSwgMywgLTEsIC0zLCAtMywgLTEsIC00XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMSwgLTMsIC0xLCAtMSwgLTIsIC0yLCAtMywgLTMsIC0xLCAtMiwgLTQsIDcsIC0xLCAtMSwgLTQsIC0zLCAtMiwgLTIsIC0xLCAtMiwgLTRdLFxuICAgICAgICAgICAgWzEsIC0xLCAxLCAwLCAtMSwgMCwgMCwgMCwgLTEsIC0yLCAtMiwgMCwgLTEsIC0yLCAtMSwgNCwgMSwgLTMsIC0yLCAtMiwgMCwgMCwgMCwgLTRdLFxuICAgICAgICAgICAgWzAsIC0xLCAwLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTIsIC0xLCAxLCA1LCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTRdLFxuICAgICAgICAgICAgWy0zLCAtMywgLTQsIC00LCAtMiwgLTIsIC0zLCAtMiwgLTIsIC0zLCAtMiwgLTMsIC0xLCAxLCAtNCwgLTMsIC0yLCAxMSwgMiwgLTMsIC00LCAtMywgLTIsIC00XSxcbiAgICAgICAgICAgIFstMiwgLTIsIC0yLCAtMywgLTIsIC0xLCAtMiwgLTMsIDIsIC0xLCAtMSwgLTIsIC0xLCAzLCAtMywgLTIsIC0yLCAyLCA3LCAtMSwgLTMsIC0yLCAtMSwgLTRdLFxuICAgICAgICAgICAgWzAsIC0zLCAtMywgLTMsIC0xLCAtMiwgLTIsIC0zLCAtMywgMywgMSwgLTIsIDEsIC0xLCAtMiwgLTIsIDAsIC0zLCAtMSwgNCwgLTMsIC0yLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0yLCAtMSwgMywgNCwgLTMsIDAsIDEsIC0xLCAwLCAtMywgLTQsIDAsIC0zLCAtMywgLTIsIDAsIC0xLCAtNCwgLTMsIC0zLCA0LCAxLCAtMSwgLTRdLFxuICAgICAgICAgICAgWy0xLCAwLCAwLCAxLCAtMywgMywgNCwgLTIsIDAsIC0zLCAtMywgMSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDEsIDQsIC0xLCAtNF0sXG4gICAgICAgICAgICBbMCwgLTEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0yLCAwLCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtNF0sXG4gICAgICAgICAgICBbLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAxXV07XG4gICAgICAgIHRoaXMuQkxPU1VNODAgPSBbWzcsIC0zLCAtMywgLTMsIC0xLCAtMiwgLTIsIDAsIC0zLCAtMywgLTMsIC0xLCAtMiwgLTQsIC0xLCAyLCAwLCAtNSwgLTQsIC0xLCAtMywgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTMsIDksIC0xLCAtMywgLTYsIDEsIC0xLCAtNCwgMCwgLTUsIC00LCAzLCAtMywgLTUsIC0zLCAtMiwgLTIsIC01LCAtNCwgLTQsIC0yLCAwLCAtMiwgLThdLFxuICAgICAgICAgICAgWy0zLCAtMSwgOSwgMiwgLTUsIDAsIC0xLCAtMSwgMSwgLTYsIC02LCAwLCAtNCwgLTYsIC00LCAxLCAwLCAtNywgLTQsIC01LCA1LCAtMSwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTMsIDIsIDEwLCAtNywgLTEsIDIsIC0zLCAtMiwgLTcsIC03LCAtMiwgLTYsIC02LCAtMywgLTEsIC0yLCAtOCwgLTYsIC02LCA2LCAxLCAtMywgLThdLFxuICAgICAgICAgICAgWy0xLCAtNiwgLTUsIC03LCAxMywgLTUsIC03LCAtNiwgLTcsIC0yLCAtMywgLTYsIC0zLCAtNCwgLTYsIC0yLCAtMiwgLTUsIC01LCAtMiwgLTYsIC03LCAtNCwgLThdLFxuICAgICAgICAgICAgWy0yLCAxLCAwLCAtMSwgLTUsIDksIDMsIC00LCAxLCAtNSwgLTQsIDIsIC0xLCAtNSwgLTMsIC0xLCAtMSwgLTQsIC0zLCAtNCwgLTEsIDUsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC0xLCAtMSwgMiwgLTcsIDMsIDgsIC00LCAwLCAtNiwgLTYsIDEsIC00LCAtNiwgLTIsIC0xLCAtMiwgLTYsIC01LCAtNCwgMSwgNiwgLTIsIC04XSxcbiAgICAgICAgICAgIFswLCAtNCwgLTEsIC0zLCAtNiwgLTQsIC00LCA5LCAtNCwgLTcsIC03LCAtMywgLTUsIC02LCAtNSwgLTEsIC0zLCAtNiwgLTYsIC02LCAtMiwgLTQsIC0zLCAtOF0sXG4gICAgICAgICAgICBbLTMsIDAsIDEsIC0yLCAtNywgMSwgMCwgLTQsIDEyLCAtNiwgLTUsIC0xLCAtNCwgLTIsIC00LCAtMiwgLTMsIC00LCAzLCAtNSwgLTEsIDAsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTMsIC01LCAtNiwgLTcsIC0yLCAtNSwgLTYsIC03LCAtNiwgNywgMiwgLTUsIDIsIC0xLCAtNSwgLTQsIC0yLCAtNSwgLTMsIDQsIC02LCAtNiwgLTIsIC04XSxcbiAgICAgICAgICAgIFstMywgLTQsIC02LCAtNywgLTMsIC00LCAtNiwgLTcsIC01LCAyLCA2LCAtNCwgMywgMCwgLTUsIC00LCAtMywgLTQsIC0yLCAxLCAtNywgLTUsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTEsIDMsIDAsIC0yLCAtNiwgMiwgMSwgLTMsIC0xLCAtNSwgLTQsIDgsIC0zLCAtNSwgLTIsIC0xLCAtMSwgLTYsIC00LCAtNCwgLTEsIDEsIC0yLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtNCwgLTYsIC0zLCAtMSwgLTQsIC01LCAtNCwgMiwgMywgLTMsIDksIDAsIC00LCAtMywgLTEsIC0zLCAtMywgMSwgLTUsIC0zLCAtMiwgLThdLFxuICAgICAgICAgICAgWy00LCAtNSwgLTYsIC02LCAtNCwgLTUsIC02LCAtNiwgLTIsIC0xLCAwLCAtNSwgMCwgMTAsIC02LCAtNCwgLTQsIDAsIDQsIC0yLCAtNiwgLTYsIC0zLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtNCwgLTMsIC02LCAtMywgLTIsIC01LCAtNCwgLTUsIC01LCAtMiwgLTQsIC02LCAxMiwgLTIsIC0zLCAtNywgLTYsIC00LCAtNCwgLTIsIC0zLCAtOF0sXG4gICAgICAgICAgICBbMiwgLTIsIDEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTIsIC00LCAtNCwgLTEsIC0zLCAtNCwgLTIsIDcsIDIsIC02LCAtMywgLTMsIDAsIC0xLCAtMSwgLThdLFxuICAgICAgICAgICAgWzAsIC0yLCAwLCAtMiwgLTIsIC0xLCAtMiwgLTMsIC0zLCAtMiwgLTMsIC0xLCAtMSwgLTQsIC0zLCAyLCA4LCAtNSwgLTMsIDAsIC0xLCAtMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstNSwgLTUsIC03LCAtOCwgLTUsIC00LCAtNiwgLTYsIC00LCAtNSwgLTQsIC02LCAtMywgMCwgLTcsIC02LCAtNSwgMTYsIDMsIC01LCAtOCwgLTUsIC01LCAtOF0sXG4gICAgICAgICAgICBbLTQsIC00LCAtNCwgLTYsIC01LCAtMywgLTUsIC02LCAzLCAtMywgLTIsIC00LCAtMywgNCwgLTYsIC0zLCAtMywgMywgMTEsIC0zLCAtNSwgLTQsIC0zLCAtOF0sXG4gICAgICAgICAgICBbLTEsIC00LCAtNSwgLTYsIC0yLCAtNCwgLTQsIC02LCAtNSwgNCwgMSwgLTQsIDEsIC0yLCAtNCwgLTMsIDAsIC01LCAtMywgNywgLTYsIC00LCAtMiwgLThdLFxuICAgICAgICAgICAgWy0zLCAtMiwgNSwgNiwgLTYsIC0xLCAxLCAtMiwgLTEsIC02LCAtNywgLTEsIC01LCAtNiwgLTQsIDAsIC0xLCAtOCwgLTUsIC02LCA2LCAwLCAtMywgLThdLFxuICAgICAgICAgICAgWy0yLCAwLCAtMSwgMSwgLTcsIDUsIDYsIC00LCAwLCAtNiwgLTUsIDEsIC0zLCAtNiwgLTIsIC0xLCAtMiwgLTUsIC00LCAtNCwgMCwgNiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMywgLTQsIC0yLCAtMiwgLTMsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTEsIC01LCAtMywgLTIsIC0zLCAtMSwgLTIsIC04XSxcbiAgICAgICAgICAgIFstOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIDFdXTtcbiAgICAgICAgdGhpcy5CTE9TVU05MCA9IFtbNSwgLTIsIC0yLCAtMywgLTEsIC0xLCAtMSwgMCwgLTIsIC0yLCAtMiwgLTEsIC0yLCAtMywgLTEsIDEsIDAsIC00LCAtMywgLTEsIC0yLCAtMSwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMiwgNiwgLTEsIC0zLCAtNSwgMSwgLTEsIC0zLCAwLCAtNCwgLTMsIDIsIC0yLCAtNCwgLTMsIC0xLCAtMiwgLTQsIC0zLCAtMywgLTIsIDAsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC0xLCA3LCAxLCAtNCwgMCwgLTEsIC0xLCAwLCAtNCwgLTQsIDAsIC0zLCAtNCwgLTMsIDAsIDAsIC01LCAtMywgLTQsIDQsIC0xLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0zLCAtMywgMSwgNywgLTUsIC0xLCAxLCAtMiwgLTIsIC01LCAtNSwgLTEsIC00LCAtNSwgLTMsIC0xLCAtMiwgLTYsIC00LCAtNSwgNCwgMCwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTUsIC00LCAtNSwgOSwgLTQsIC02LCAtNCwgLTUsIC0yLCAtMiwgLTQsIC0yLCAtMywgLTQsIC0yLCAtMiwgLTQsIC00LCAtMiwgLTQsIC01LCAtMywgLTZdLFxuICAgICAgICAgICAgWy0xLCAxLCAwLCAtMSwgLTQsIDcsIDIsIC0zLCAxLCAtNCwgLTMsIDEsIDAsIC00LCAtMiwgLTEsIC0xLCAtMywgLTMsIC0zLCAtMSwgNCwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTEsIC0xLCAxLCAtNiwgMiwgNiwgLTMsIC0xLCAtNCwgLTQsIDAsIC0zLCAtNSwgLTIsIC0xLCAtMSwgLTUsIC00LCAtMywgMCwgNCwgLTIsIC02XSxcbiAgICAgICAgICAgIFswLCAtMywgLTEsIC0yLCAtNCwgLTMsIC0zLCA2LCAtMywgLTUsIC01LCAtMiwgLTQsIC01LCAtMywgLTEsIC0zLCAtNCwgLTUsIC01LCAtMiwgLTMsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIDAsIDAsIC0yLCAtNSwgMSwgLTEsIC0zLCA4LCAtNCwgLTQsIC0xLCAtMywgLTIsIC0zLCAtMiwgLTIsIC0zLCAxLCAtNCwgLTEsIDAsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC00LCAtNCwgLTUsIC0yLCAtNCwgLTQsIC01LCAtNCwgNSwgMSwgLTQsIDEsIC0xLCAtNCwgLTMsIC0xLCAtNCwgLTIsIDMsIC01LCAtNCwgLTIsIC02XSxcbiAgICAgICAgICAgIFstMiwgLTMsIC00LCAtNSwgLTIsIC0zLCAtNCwgLTUsIC00LCAxLCA1LCAtMywgMiwgMCwgLTQsIC0zLCAtMiwgLTMsIC0yLCAwLCAtNSwgLTQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIDIsIDAsIC0xLCAtNCwgMSwgMCwgLTIsIC0xLCAtNCwgLTMsIDYsIC0yLCAtNCwgLTIsIC0xLCAtMSwgLTUsIC0zLCAtMywgLTEsIDEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbLTIsIC0yLCAtMywgLTQsIC0yLCAwLCAtMywgLTQsIC0zLCAxLCAyLCAtMiwgNywgLTEsIC0zLCAtMiwgLTEsIC0yLCAtMiwgMCwgLTQsIC0yLCAtMSwgLTZdLFxuICAgICAgICAgICAgWy0zLCAtNCwgLTQsIC01LCAtMywgLTQsIC01LCAtNSwgLTIsIC0xLCAwLCAtNCwgLTEsIDcsIC00LCAtMywgLTMsIDAsIDMsIC0yLCAtNCwgLTQsIC0yLCAtNl0sXG4gICAgICAgICAgICBbLTEsIC0zLCAtMywgLTMsIC00LCAtMiwgLTIsIC0zLCAtMywgLTQsIC00LCAtMiwgLTMsIC00LCA4LCAtMiwgLTIsIC01LCAtNCwgLTMsIC0zLCAtMiwgLTIsIC02XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMCwgLTEsIC0yLCAtMSwgLTEsIC0xLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0zLCAtMiwgNSwgMSwgLTQsIC0zLCAtMiwgMCwgLTEsIC0xLCAtNl0sXG4gICAgICAgICAgICBbMCwgLTIsIDAsIC0yLCAtMiwgLTEsIC0xLCAtMywgLTIsIC0xLCAtMiwgLTEsIC0xLCAtMywgLTIsIDEsIDYsIC00LCAtMiwgLTEsIC0xLCAtMSwgLTEsIC02XSxcbiAgICAgICAgICAgIFstNCwgLTQsIC01LCAtNiwgLTQsIC0zLCAtNSwgLTQsIC0zLCAtNCwgLTMsIC01LCAtMiwgMCwgLTUsIC00LCAtNCwgMTEsIDIsIC0zLCAtNiwgLTQsIC0zLCAtNl0sXG4gICAgICAgICAgICBbLTMsIC0zLCAtMywgLTQsIC00LCAtMywgLTQsIC01LCAxLCAtMiwgLTIsIC0zLCAtMiwgMywgLTQsIC0zLCAtMiwgMiwgOCwgLTMsIC00LCAtMywgLTIsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTMsIC00LCAtNSwgLTIsIC0zLCAtMywgLTUsIC00LCAzLCAwLCAtMywgMCwgLTIsIC0zLCAtMiwgLTEsIC0zLCAtMywgNSwgLTQsIC0zLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0yLCAtMiwgNCwgNCwgLTQsIC0xLCAwLCAtMiwgLTEsIC01LCAtNSwgLTEsIC00LCAtNCwgLTMsIDAsIC0xLCAtNiwgLTQsIC00LCA0LCAwLCAtMiwgLTZdLFxuICAgICAgICAgICAgWy0xLCAwLCAtMSwgMCwgLTUsIDQsIDQsIC0zLCAwLCAtNCwgLTQsIDEsIC0yLCAtNCwgLTIsIC0xLCAtMSwgLTQsIC0zLCAtMywgMCwgNCwgLTEsIC02XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMiwgLTMsIC0xLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTEsIC0zLCAtMiwgLTIsIC0yLCAtMSwgLTIsIC02XSxcbiAgICAgICAgICAgIFstNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIC02LCAtNiwgLTYsIDFdXTtcbiAgICAgICAgdGhpcy5OVUNMRU9USURFUyA9IFtbMSwgLTEsIC0xLCAtMV0sXG4gICAgICAgICAgICBbLTEsIDEsIC0xLCAtMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAxLCAtMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMSwgMV1dO1xuICAgICAgICB0aGlzLlBBTTMwID0gW1s2LCAtNywgLTQsIC0zLCAtNiwgLTQsIC0yLCAtMiwgLTcsIC01LCAtNiwgLTcsIC01LCAtOCwgLTIsIDAsIC0xLCAtMTMsIC04LCAtMiwgLTMsIC0zLCAtMywgLTE3XSxcbiAgICAgICAgICAgIFstNywgOCwgLTYsIC0xMCwgLTgsIC0yLCAtOSwgLTksIC0yLCAtNSwgLTgsIDAsIC00LCAtOSwgLTQsIC0zLCAtNiwgLTIsIC0xMCwgLTgsIC03LCAtNCwgLTYsIC0xN10sXG4gICAgICAgICAgICBbLTQsIC02LCA4LCAyLCAtMTEsIC0zLCAtMiwgLTMsIDAsIC01LCAtNywgLTEsIC05LCAtOSwgLTYsIDAsIC0yLCAtOCwgLTQsIC04LCA2LCAtMywgLTMsIC0xN10sXG4gICAgICAgICAgICBbLTMsIC0xMCwgMiwgOCwgLTE0LCAtMiwgMiwgLTMsIC00LCAtNywgLTEyLCAtNCwgLTExLCAtMTUsIC04LCAtNCwgLTUsIC0xNSwgLTExLCAtOCwgNiwgMSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTYsIC04LCAtMTEsIC0xNCwgMTAsIC0xNCwgLTE0LCAtOSwgLTcsIC02LCAtMTUsIC0xNCwgLTEzLCAtMTMsIC04LCAtMywgLTgsIC0xNSwgLTQsIC02LCAtMTIsIC0xNCwgLTksIC0xN10sXG4gICAgICAgICAgICBbLTQsIC0yLCAtMywgLTIsIC0xNCwgOCwgMSwgLTcsIDEsIC04LCAtNSwgLTMsIC00LCAtMTMsIC0zLCAtNSwgLTUsIC0xMywgLTEyLCAtNywgLTMsIDYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtOSwgLTIsIDIsIC0xNCwgMSwgOCwgLTQsIC01LCAtNSwgLTksIC00LCAtNywgLTE0LCAtNSwgLTQsIC02LCAtMTcsIC04LCAtNiwgMSwgNiwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTIsIC05LCAtMywgLTMsIC05LCAtNywgLTQsIDYsIC05LCAtMTEsIC0xMCwgLTcsIC04LCAtOSwgLTYsIC0yLCAtNiwgLTE1LCAtMTQsIC01LCAtMywgLTUsIC01LCAtMTddLFxuICAgICAgICAgICAgWy03LCAtMiwgMCwgLTQsIC03LCAxLCAtNSwgLTksIDksIC05LCAtNiwgLTYsIC0xMCwgLTYsIC00LCAtNiwgLTcsIC03LCAtMywgLTYsIC0xLCAtMSwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTUsIC01LCAtNSwgLTcsIC02LCAtOCwgLTUsIC0xMSwgLTksIDgsIC0xLCAtNiwgLTEsIC0yLCAtOCwgLTcsIC0yLCAtMTQsIC02LCAyLCAtNiwgLTYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy02LCAtOCwgLTcsIC0xMiwgLTE1LCAtNSwgLTksIC0xMCwgLTYsIC0xLCA3LCAtOCwgMSwgLTMsIC03LCAtOCwgLTcsIC02LCAtNywgLTIsIC05LCAtNywgLTYsIC0xN10sXG4gICAgICAgICAgICBbLTcsIDAsIC0xLCAtNCwgLTE0LCAtMywgLTQsIC03LCAtNiwgLTYsIC04LCA3LCAtMiwgLTE0LCAtNiwgLTQsIC0zLCAtMTIsIC05LCAtOSwgLTIsIC00LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstNSwgLTQsIC05LCAtMTEsIC0xMywgLTQsIC03LCAtOCwgLTEwLCAtMSwgMSwgLTIsIDExLCAtNCwgLTgsIC01LCAtNCwgLTEzLCAtMTEsIC0xLCAtMTAsIC01LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstOCwgLTksIC05LCAtMTUsIC0xMywgLTEzLCAtMTQsIC05LCAtNiwgLTIsIC0zLCAtMTQsIC00LCA5LCAtMTAsIC02LCAtOSwgLTQsIDIsIC04LCAtMTAsIC0xMywgLTgsIC0xN10sXG4gICAgICAgICAgICBbLTIsIC00LCAtNiwgLTgsIC04LCAtMywgLTUsIC02LCAtNCwgLTgsIC03LCAtNiwgLTgsIC0xMCwgOCwgLTIsIC00LCAtMTQsIC0xMywgLTYsIC03LCAtNCwgLTUsIC0xN10sXG4gICAgICAgICAgICBbMCwgLTMsIDAsIC00LCAtMywgLTUsIC00LCAtMiwgLTYsIC03LCAtOCwgLTQsIC01LCAtNiwgLTIsIDYsIDAsIC01LCAtNywgLTYsIC0xLCAtNSwgLTMsIC0xN10sXG4gICAgICAgICAgICBbLTEsIC02LCAtMiwgLTUsIC04LCAtNSwgLTYsIC02LCAtNywgLTIsIC03LCAtMywgLTQsIC05LCAtNCwgMCwgNywgLTEzLCAtNiwgLTMsIC0zLCAtNiwgLTQsIC0xN10sXG4gICAgICAgICAgICBbLTEzLCAtMiwgLTgsIC0xNSwgLTE1LCAtMTMsIC0xNywgLTE1LCAtNywgLTE0LCAtNiwgLTEyLCAtMTMsIC00LCAtMTQsIC01LCAtMTMsIDEzLCAtNSwgLTE1LCAtMTAsIC0xNCwgLTExLCAtMTddLFxuICAgICAgICAgICAgWy04LCAtMTAsIC00LCAtMTEsIC00LCAtMTIsIC04LCAtMTQsIC0zLCAtNiwgLTcsIC05LCAtMTEsIDIsIC0xMywgLTcsIC02LCAtNSwgMTAsIC03LCAtNiwgLTksIC03LCAtMTddLFxuICAgICAgICAgICAgWy0yLCAtOCwgLTgsIC04LCAtNiwgLTcsIC02LCAtNSwgLTYsIDIsIC0yLCAtOSwgLTEsIC04LCAtNiwgLTYsIC0zLCAtMTUsIC03LCA3LCAtOCwgLTYsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtNywgNiwgNiwgLTEyLCAtMywgMSwgLTMsIC0xLCAtNiwgLTksIC0yLCAtMTAsIC0xMCwgLTcsIC0xLCAtMywgLTEwLCAtNiwgLTgsIDYsIDAsIC01LCAtMTddLFxuICAgICAgICAgICAgWy0zLCAtNCwgLTMsIDEsIC0xNCwgNiwgNiwgLTUsIC0xLCAtNiwgLTcsIC00LCAtNSwgLTEzLCAtNCwgLTUsIC02LCAtMTQsIC05LCAtNiwgMCwgNiwgLTUsIC0xN10sXG4gICAgICAgICAgICBbLTMsIC02LCAtMywgLTUsIC05LCAtNSwgLTUsIC01LCAtNSwgLTUsIC02LCAtNSwgLTUsIC04LCAtNSwgLTMsIC00LCAtMTEsIC03LCAtNSwgLTUsIC01LCAtNSwgLTE3XSxcbiAgICAgICAgICAgIFstMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgLTE3LCAtMTcsIC0xNywgMV1dO1xuICAgICAgICB0aGlzLlBBTTcwID0gW1s1LCAtNCwgLTIsIC0xLCAtNCwgLTIsIC0xLCAwLCAtNCwgLTIsIC00LCAtNCwgLTMsIC02LCAwLCAxLCAxLCAtOSwgLTUsIC0xLCAtMSwgLTEsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy00LCA4LCAtMywgLTYsIC01LCAwLCAtNSwgLTYsIDAsIC0zLCAtNiwgMiwgLTIsIC03LCAtMiwgLTEsIC00LCAwLCAtNywgLTUsIC00LCAtMiwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTIsIC0zLCA2LCAzLCAtNywgLTEsIDAsIC0xLCAxLCAtMywgLTUsIDAsIC01LCAtNiwgLTMsIDEsIDAsIC02LCAtMywgLTUsIDUsIC0xLCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTYsIDMsIDYsIC05LCAwLCAzLCAtMSwgLTEsIC01LCAtOCwgLTIsIC03LCAtMTAsIC00LCAtMSwgLTIsIC0xMCwgLTcsIC01LCA1LCAyLCAtMywgLTExXSxcbiAgICAgICAgICAgIFstNCwgLTUsIC03LCAtOSwgOSwgLTksIC05LCAtNiwgLTUsIC00LCAtMTAsIC05LCAtOSwgLTgsIC01LCAtMSwgLTUsIC0xMSwgLTIsIC00LCAtOCwgLTksIC02LCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAwLCAtMSwgMCwgLTksIDcsIDIsIC00LCAyLCAtNSwgLTMsIC0xLCAtMiwgLTksIC0xLCAtMywgLTMsIC04LCAtOCwgLTQsIC0xLCA1LCAtMiwgLTExXSxcbiAgICAgICAgICAgIFstMSwgLTUsIDAsIDMsIC05LCAyLCA2LCAtMiwgLTIsIC00LCAtNiwgLTIsIC00LCAtOSwgLTMsIC0yLCAtMywgLTExLCAtNiwgLTQsIDIsIDUsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWzAsIC02LCAtMSwgLTEsIC02LCAtNCwgLTIsIDYsIC02LCAtNiwgLTcsIC01LCAtNiwgLTcsIC0zLCAwLCAtMywgLTEwLCAtOSwgLTMsIC0xLCAtMywgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTQsIDAsIDEsIC0xLCAtNSwgMiwgLTIsIC02LCA4LCAtNiwgLTQsIC0zLCAtNiwgLTQsIC0yLCAtMywgLTQsIC01LCAtMSwgLTQsIDAsIDEsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0yLCAtMywgLTMsIC01LCAtNCwgLTUsIC00LCAtNiwgLTYsIDcsIDEsIC00LCAxLCAwLCAtNSwgLTQsIC0xLCAtOSwgLTQsIDMsIC00LCAtNCwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTQsIC02LCAtNSwgLTgsIC0xMCwgLTMsIC02LCAtNywgLTQsIDEsIDYsIC01LCAyLCAtMSwgLTUsIC02LCAtNCwgLTQsIC00LCAwLCAtNiwgLTQsIC00LCAtMTFdLFxuICAgICAgICAgICAgWy00LCAyLCAwLCAtMiwgLTksIC0xLCAtMiwgLTUsIC0zLCAtNCwgLTUsIDYsIDAsIC05LCAtNCwgLTIsIC0xLCAtNywgLTcsIC02LCAtMSwgLTIsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0zLCAtMiwgLTUsIC03LCAtOSwgLTIsIC00LCAtNiwgLTYsIDEsIDIsIDAsIDEwLCAtMiwgLTUsIC0zLCAtMiwgLTgsIC03LCAwLCAtNiwgLTMsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy02LCAtNywgLTYsIC0xMCwgLTgsIC05LCAtOSwgLTcsIC00LCAwLCAtMSwgLTksIC0yLCA4LCAtNywgLTQsIC02LCAtMiwgNCwgLTUsIC03LCAtOSwgLTUsIC0xMV0sXG4gICAgICAgICAgICBbMCwgLTIsIC0zLCAtNCwgLTUsIC0xLCAtMywgLTMsIC0yLCAtNSwgLTUsIC00LCAtNSwgLTcsIDcsIDAsIC0yLCAtOSwgLTksIC0zLCAtNCwgLTIsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWzEsIC0xLCAxLCAtMSwgLTEsIC0zLCAtMiwgMCwgLTMsIC00LCAtNiwgLTIsIC0zLCAtNCwgMCwgNSwgMiwgLTMsIC01LCAtMywgMCwgLTIsIC0xLCAtMTFdLFxuICAgICAgICAgICAgWzEsIC00LCAwLCAtMiwgLTUsIC0zLCAtMywgLTMsIC00LCAtMSwgLTQsIC0xLCAtMiwgLTYsIC0yLCAyLCA2LCAtOCwgLTQsIC0xLCAtMSwgLTMsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy05LCAwLCAtNiwgLTEwLCAtMTEsIC04LCAtMTEsIC0xMCwgLTUsIC05LCAtNCwgLTcsIC04LCAtMiwgLTksIC0zLCAtOCwgMTMsIC0zLCAtMTAsIC03LCAtMTAsIC03LCAtMTFdLFxuICAgICAgICAgICAgWy01LCAtNywgLTMsIC03LCAtMiwgLTgsIC02LCAtOSwgLTEsIC00LCAtNCwgLTcsIC03LCA0LCAtOSwgLTUsIC00LCAtMywgOSwgLTUsIC00LCAtNywgLTUsIC0xMV0sXG4gICAgICAgICAgICBbLTEsIC01LCAtNSwgLTUsIC00LCAtNCwgLTQsIC0zLCAtNCwgMywgMCwgLTYsIDAsIC01LCAtMywgLTMsIC0xLCAtMTAsIC01LCA2LCAtNSwgLTQsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy0xLCAtNCwgNSwgNSwgLTgsIC0xLCAyLCAtMSwgMCwgLTQsIC02LCAtMSwgLTYsIC03LCAtNCwgMCwgLTEsIC03LCAtNCwgLTUsIDUsIDEsIC0yLCAtMTFdLFxuICAgICAgICAgICAgWy0xLCAtMiwgLTEsIDIsIC05LCA1LCA1LCAtMywgMSwgLTQsIC00LCAtMiwgLTMsIC05LCAtMiwgLTIsIC0zLCAtMTAsIC03LCAtNCwgMSwgNSwgLTMsIC0xMV0sXG4gICAgICAgICAgICBbLTIsIC0zLCAtMiwgLTMsIC02LCAtMiwgLTMsIC0zLCAtMywgLTMsIC00LCAtMywgLTMsIC01LCAtMywgLTEsIC0yLCAtNywgLTUsIC0yLCAtMiwgLTMsIC0zLCAtMTFdLFxuICAgICAgICAgICAgWy0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAtMTEsIC0xMSwgLTExLCAxXV07XG4gICAgICAgIHRoaXMuUEFNMjUwID0gW1syLCAtMiwgMCwgMCwgLTIsIDAsIDAsIDEsIC0xLCAtMSwgLTIsIC0xLCAtMSwgLTMsIDEsIDEsIDEsIC02LCAtMywgMCwgMCwgMCwgMCwgLThdLFxuICAgICAgICAgICAgWy0yLCA2LCAwLCAtMSwgLTQsIDEsIC0xLCAtMywgMiwgLTIsIC0zLCAzLCAwLCAtNCwgMCwgMCwgLTEsIDIsIC00LCAtMiwgLTEsIDAsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgMCwgMiwgMiwgLTQsIDEsIDEsIDAsIDIsIC0yLCAtMywgMSwgLTIsIC0zLCAwLCAxLCAwLCAtNCwgLTIsIC0yLCAyLCAxLCAwLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDIsIDQsIC01LCAyLCAzLCAxLCAxLCAtMiwgLTQsIDAsIC0zLCAtNiwgLTEsIDAsIDAsIC03LCAtNCwgLTIsIDMsIDMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTIsIC00LCAtNCwgLTUsIDEyLCAtNSwgLTUsIC0zLCAtMywgLTIsIC02LCAtNSwgLTUsIC00LCAtMywgMCwgLTIsIC04LCAwLCAtMiwgLTQsIC01LCAtMywgLThdLFxuICAgICAgICAgICAgWzAsIDEsIDEsIDIsIC01LCA0LCAyLCAtMSwgMywgLTIsIC0yLCAxLCAtMSwgLTUsIDAsIC0xLCAtMSwgLTUsIC00LCAtMiwgMSwgMywgLTEsIC04XSxcbiAgICAgICAgICAgIFswLCAtMSwgMSwgMywgLTUsIDIsIDQsIDAsIDEsIC0yLCAtMywgMCwgLTIsIC01LCAtMSwgMCwgMCwgLTcsIC00LCAtMiwgMywgMywgLTEsIC04XSxcbiAgICAgICAgICAgIFsxLCAtMywgMCwgMSwgLTMsIC0xLCAwLCA1LCAtMiwgLTMsIC00LCAtMiwgLTMsIC01LCAwLCAxLCAwLCAtNywgLTUsIC0xLCAwLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWy0xLCAyLCAyLCAxLCAtMywgMywgMSwgLTIsIDYsIC0yLCAtMiwgMCwgLTIsIC0yLCAwLCAtMSwgLTEsIC0zLCAwLCAtMiwgMSwgMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMSwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTMsIC0yLCA1LCAyLCAtMiwgMiwgMSwgLTIsIC0xLCAwLCAtNSwgLTEsIDQsIC0yLCAtMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMiwgLTMsIC0zLCAtNCwgLTYsIC0yLCAtMywgLTQsIC0yLCAyLCA2LCAtMywgNCwgMiwgLTMsIC0zLCAtMiwgLTIsIC0xLCAyLCAtMywgLTMsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIDMsIDEsIDAsIC01LCAxLCAwLCAtMiwgMCwgLTIsIC0zLCA1LCAwLCAtNSwgLTEsIDAsIDAsIC0zLCAtNCwgLTIsIDEsIDAsIC0xLCAtOF0sXG4gICAgICAgICAgICBbLTEsIDAsIC0yLCAtMywgLTUsIC0xLCAtMiwgLTMsIC0yLCAyLCA0LCAwLCA2LCAwLCAtMiwgLTIsIC0xLCAtNCwgLTIsIDIsIC0yLCAtMiwgLTEsIC04XSxcbiAgICAgICAgICAgIFstMywgLTQsIC0zLCAtNiwgLTQsIC01LCAtNSwgLTUsIC0yLCAxLCAyLCAtNSwgMCwgOSwgLTUsIC0zLCAtMywgMCwgNywgLTEsIC00LCAtNSwgLTIsIC04XSxcbiAgICAgICAgICAgIFsxLCAwLCAwLCAtMSwgLTMsIDAsIC0xLCAwLCAwLCAtMiwgLTMsIC0xLCAtMiwgLTUsIDYsIDEsIDAsIC02LCAtNSwgLTEsIC0xLCAwLCAtMSwgLThdLFxuICAgICAgICAgICAgWzEsIDAsIDEsIDAsIDAsIC0xLCAwLCAxLCAtMSwgLTEsIC0zLCAwLCAtMiwgLTMsIDEsIDIsIDEsIC0yLCAtMywgLTEsIDAsIDAsIDAsIC04XSxcbiAgICAgICAgICAgIFsxLCAtMSwgMCwgMCwgLTIsIC0xLCAwLCAwLCAtMSwgMCwgLTIsIDAsIC0xLCAtMywgMCwgMSwgMywgLTUsIC0zLCAwLCAwLCAtMSwgMCwgLThdLFxuICAgICAgICAgICAgWy02LCAyLCAtNCwgLTcsIC04LCAtNSwgLTcsIC03LCAtMywgLTUsIC0yLCAtMywgLTQsIDAsIC02LCAtMiwgLTUsIDE3LCAwLCAtNiwgLTUsIC02LCAtNCwgLThdLFxuICAgICAgICAgICAgWy0zLCAtNCwgLTIsIC00LCAwLCAtNCwgLTQsIC01LCAwLCAtMSwgLTEsIC00LCAtMiwgNywgLTUsIC0zLCAtMywgMCwgMTAsIC0yLCAtMywgLTQsIC0yLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTEsIC0yLCA0LCAyLCAtMiwgMiwgLTEsIC0xLCAtMSwgMCwgLTYsIC0yLCA0LCAtMiwgLTIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgLTEsIDIsIDMsIC00LCAxLCAzLCAwLCAxLCAtMiwgLTMsIDEsIC0yLCAtNCwgLTEsIDAsIDAsIC01LCAtMywgLTIsIDMsIDIsIC0xLCAtOF0sXG4gICAgICAgICAgICBbMCwgMCwgMSwgMywgLTUsIDMsIDMsIDAsIDIsIC0yLCAtMywgMCwgLTIsIC01LCAwLCAwLCAtMSwgLTYsIC00LCAtMiwgMiwgMywgLTEsIC04XSxcbiAgICAgICAgICAgIFswLCAtMSwgMCwgLTEsIC0zLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0yLCAtMSwgMCwgMCwgLTQsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLThdLFxuICAgICAgICAgICAgWy04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgLTgsIC04LCAtOCwgMV1dO1xuICAgICAgICB0aGlzLlNDSE5FSURFUiA9IFtbMTEuNiwgLTIuNywgOS43LCAtMS43LCAtMi43LCAtNi40LCAtMy45LCAtNS42LCA1LjEsIC01LjAsIDMuNiwgLTQuMiwgLTYuMywgLTEzLjAsIC03LjEsIC0xMS41LCAwLjQsIC02LjAsIC0xLjksIC01LjMsIC04LjUsIC0xMS4yLCAtOC45LCAtMTAuOCwgMi4xLCAwLjAsIDEuNCwgMC4yLCAtMTAuMiwgLTEzLjUsIC0xMy4wLCAtMTIuNSwgLTIuNiwgLTguNSwgLTUuMCwgLTguMSwgLTYuMywgLTkuOSwgLTcuNSwgLTkuMCwgLTcuMSwgLTEwLjIsIC04LjIsIC05LjIsIC04LjIsIC0xMi41LCAtMTEuMSwgLTExLjQsIC01MC4wLCAtMTQuOCwgLTUwLjAsIC0xMy44LCAtNy4zLCAtMTAuMSwgLTguNCwgLTkuMSwgLTUwLjAsIC0xMy4wLCAtMTMuNSwgLTEyLjQsIC0xMC43LCAtMTguMSwgLTExLjgsIC0xNy4yLF0sXG4gICAgICAgICAgICBbLTIuNywgMTMuMCwgLTMuMywgMTAuOSwgLTMuNSwgLTAuNCwgLTMuMywgLTEuOCwgLTUuNCwgNC42LCAtNS41LCAzLjAsIC0xMC4yLCAtNy45LCAtOS45LCAtOS42LCAtNS4wLCAwLjUsIC01LjUsIC0xLjAsIC0xMC4zLCAtOC4xLCAtOS40LCAtOS42LCAtOC4xLCAtNS4wLCAtNy4zLCAtNi4zLCAtMTMuNCwgLTExLjMsIC0xNC40LCAtMTIuOSwgLTYuMywgMC44LCAtNi40LCAtMS4xLCAtNy40LCAtNS4wLCAtNi4yLCAtNi41LCAtNS42LCAtMS42LCAtNC43LCAtMy4wLCAtMTAuOCwgLTguNywgLTExLjksIC0xMC4wLCAtNTAuMCwgLTYuMiwgLTUwLjAsIC03LjUsIC02LjMsIC00LjMsIC02LjIsIC01LjQsIC01MC4wLCAtNy4wLCAtMTYuMywgLTguMiwgLTEzLjIsIC0xMi4zLCAtMTMuMSwgLTEzLjMsXSxcbiAgICAgICAgICAgIFs5LjcsIC0zLjMsIDExLjYsIC0yLjgsIC00LjUsIC02LjcsIC0zLjEsIC02LjksIDMuMywgLTUuNSwgNC44LCAtNS4xLCAtOC45LCAtMTMuMiwgLTUuNywgLTEyLjYsIC0xLjUsIC02LjEsIC0wLjYsIC02LjEsIC0xMC4wLCAtMTEuOCwgLTguNiwgLTExLjksIDEuMiwgMC41LCAyLjIsIDAuMSwgLTExLjgsIC0xNC4wLCAtMTEuOSwgLTEzLjQsIC00LjksIC05LjEsIC0zLjQsIC04LjksIC04LjAsIC0xMC4wLCAtNy4yLCAtMTAuMCwgLTkuMSwgLTEwLjIsIC03LjEsIC05LjksIC0xMC4xLCAtMTMuMCwgLTEwLjYsIC0xMi43LCAtNTAuMCwgLTE0LjksIC01MC4wLCAtMTQuNCwgLTguOSwgLTEwLjgsIC04LjksIC0xMC40LCAtNTAuMCwgLTEzLjEsIC0xMS44LCAtMTMuMCwgLTEyLjQsIC0xOS40LCAtMTEuNSwgLTE3LjgsXSxcbiAgICAgICAgICAgIFstMS43LCAxMC45LCAtMi44LCAxMi45LCAtMi43LCAtMi4yLCAtMi44LCAwLjIsIC00LjgsIDIuOSwgLTUuMiwgNS4yLCAtOS4xLCAtOS41LCAtOS4wLCAtNy4wLCAtNC4wLCAtMS4wLCAtNS4wLCAxLjAsIC05LjAsIC04LjgsIC04LjksIC03LjcsIC03LjAsIC02LjgsIC03LjEsIC00LjMsIC0xMi40LCAtMTIuOSwgLTEzLjksIC0xMC4wLCAtNC45LCAtMC43LCAtNS42LCAxLjQsIC02LjAsIC02LjUsIC02LjIsIC00LjgsIC01LjEsIC0zLjIsIC01LjAsIC0xLjIsIC05LjgsIC05LjksIC0xMS4zLCAtOC4yLCAtNTAuMCwgLTcuNiwgLTUwLjAsIC01LjEsIC01LjUsIC01LjgsIC01LjksIC00LjIsIC01MC4wLCAtOC4zLCAtMTUuNSwgLTUuOSwgLTExLjYsIC0xNC4yLCAtMTIuMCwgLTExLjYsXSxcbiAgICAgICAgICAgIFstMi43LCAtMy41LCAtNC41LCAtMi43LCAxMS43LCA5LjAsIDEwLjYsIDkuNiwgLTMuMiwgLTAuNywgLTUuMSwgLTAuNCwgMC43LCAtNC42LCAtMC40LCAtMy42LCAtNC44LCAtOC45LCAtNi41LCAtNy44LCAtMS40LCAtNC4xLCAtMi45LCAtMy4zLCAtOC4wLCAtOS4xLCAtOC4wLCAtOC4yLCAtNi4wLCAtOS4zLCAtNy43LCAtOC41LCAtNi40LCAtMTAuMSwgLTcuNSwgLTguNiwgMi44LCAtMC43LCAwLjksIDAuMSwgLTUuOSwgLTcuMywgLTYuNSwgLTYuNSwgLTAuNCwgLTMuOSwgLTIuNiwgLTMuMSwgLTUwLjAsIC0xNC42LCAtNTAuMCwgLTEyLjYsIDIuOSwgMC4xLCAxLjgsIDEuMCwgLTUwLjAsIC05LjIsIC0xMy42LCAtNy43LCAtNC44LCAtMTIuMiwgLTYuMiwgLTExLjAsXSxcbiAgICAgICAgICAgIFstNi40LCAtMC40LCAtNi43LCAtMi4yLCA5LjAsIDEyLjMsIDkuOCwgOS42LCAtNy4xLCAyLjQsIC03LjIsIDAuMywgLTIuOSwgLTEuMiwgLTMuMCwgLTMuMywgLTcuNiwgLTYuNywgLTguMSwgLTcuOSwgLTQuOSwgLTEuOSwgLTQuNSwgLTMuOCwgLTkuNSwgLTcuOCwgLTkuMywgLTguOSwgLTkuNCwgLTcuMSwgLTkuMCwgLTkuMCwgLTkuNCwgLTcuNSwgLTkuMywgLTkuMiwgLTAuNywgMi42LCAwLjIsIC0wLjEsIC04LjAsIC00LjYsIC03LjcsIC02LjEsIC0zLjYsIC0xLjAsIC00LjEsIC0zLjEsIC01MC4wLCAtMTEuNiwgLTUwLjAsIC0xMS42LCAwLjIsIDIuMywgMC40LCAwLjUsIC01MC4wLCAtNi41LCAtMTUuMywgLTcuOCwgLTguNCwgLTkuNSwgLTguMywgLTExLjEsXSxcbiAgICAgICAgICAgIFstMy45LCAtMy4zLCAtMy4xLCAtMi44LCAxMC42LCA5LjgsIDEyLjIsIDkuOCwgLTQuOSwgMC4xLCAtMy42LCAtMC4yLCAtMS43LCAtNC4xLCAwLjksIC0zLjUsIC01LjksIC04LjksIC01LjYsIC04LjUsIC0zLjksIC0zLjksIC0yLjIsIC00LjUsIC03LjMsIC03LjUsIC02LjQsIC04LjUsIC03LjEsIC04LjIsIC02LjcsIC03LjgsIC03LjksIC05LjEsIC03LjEsIC05LjQsIDAuOSwgLTAuMiwgMi41LCAtMC4zLCAtNi45LCAtNi41LCAtNS41LCAtNi44LCAtMS43LCAtMy40LCAtMS43LCAtMi44LCAtNTAuMCwgLTEzLjAsIC01MC4wLCAtMTEuNSwgMS41LCAwLjcsIDIuNywgMC42LCAtNTAuMCwgLTguOSwgLTEyLjEsIC03LjQsIC02LjEsIC0xMS41LCAtNS40LCAtMTAuNCxdLFxuICAgICAgICAgICAgWy01LjYsIC0xLjgsIC02LjksIDAuMiwgOS42LCA5LjYsIDkuOCwgMTEuNiwgLTYuNiwgMC45LCAtNy4yLCAyLjUsIC0yLjMsIC0zLjQsIC0yLjMsIC0wLjYsIC02LjUsIC04LjIsIC04LjAsIC02LjMsIC0zLjcsIC0zLjUsIC0zLjksIC0xLjYsIC05LjksIC04LjksIC05LjYsIC03LjAsIC04LjYsIC04LjksIC04LjgsIC02LjgsIC04LjYsIC04LjIsIC04LjgsIC02LjgsIDAuMywgMC4xLCAwLjIsIDIuNCwgLTcuNCwgLTYuMiwgLTYuOSwgLTQuNCwgLTIuOSwgLTIuOSwgLTMuNSwgLTAuOSwgLTUwLjAsIC0xMi4yLCAtNTAuMCwgLTEwLjEsIDEuMiwgMC42LCAxLjIsIDIuNCwgLTUwLjAsIC03LjYsIC0xNi4xLCAtNS44LCAtNy4yLCAtMTAuOCwgLTcuNCwgLTkuMCxdLFxuICAgICAgICAgICAgWzUuMSwgLTUuNCwgMy4zLCAtNC44LCAtMy4yLCAtNy4xLCAtNC45LCAtNi42LCAxMy4zLCAtMi44LCAxMS4yLCAtMS45LCAtNS43LCAtMTIuNSwgLTcuMiwgLTExLjYsIC0wLjcsIC00LjgsIC0zLjEsIC00LjMsIC0xMC4wLCAtMTEuNiwgLTguOCwgLTExLjcsIDEwLjUsIDcuNywgOS4xLCA4LjUsIC05LjgsIC0xMi43LCAtMTEuNywgLTExLjgsIC02LjMsIC0xMS40LCAtOC44LCAtMTEuMCwgLTcuNSwgLTEwLjMsIC04LjMsIC05LjksIC0xLjksIC02LjcsIC00LjEsIC02LjQsIC03LjksIC0xMi41LCAtMTEuNCwgLTExLjcsIC01MC4wLCAtMTQuMCwgLTUwLjAsIC0xMy4yLCAtOC41LCAtMTAuNCwgLTkuMSwgLTkuNiwgLTUwLjAsIC05LjgsIC03LjcsIC04LjgsIC0xMC4zLCAtMTcuOSwgLTExLjgsIC0xNi4wLF0sXG4gICAgICAgICAgICBbLTUuMCwgNC42LCAtNS41LCAyLjksIC0wLjcsIDIuNCwgMC4xLCAwLjksIC0yLjgsIDEyLjgsIC0yLjYsIDExLjAsIC04LjQsIC02LjMsIC04LjMsIC03LjcsIC02LjEsIC0yLjksIC02LjUsIC00LjIsIC04LjUsIC01LjksIC03LjUsIC03LjcsIC01LjUsIC0yLjQsIC01LjUsIC00LjEsIC0xMi45LCAtMTAuMywgLTEyLjcsIC0xMS4zLCAtNy40LCAtMy4xLCAtNy40LCAtNC45LCAtNC40LCAtMS44LCAtMy41LCAtMy41LCAtMS42LCAzLjAsIC0wLjgsIDAuOSwgLTguNCwgLTYuMywgLTkuNiwgLTcuMywgLTUwLjAsIC05LjAsIC01MC4wLCAtOS43LCAtMi4zLCAtMC4yLCAtMS4yLCAtMS41LCAtNTAuMCwgLTAuNywgLTEzLjMsIC0yLjAsIC0xMS44LCAtMTEuOSwgLTEyLjMsIC0xMi43LF0sXG4gICAgICAgICAgICBbMy42LCAtNS41LCA0LjgsIC01LjIsIC01LjEsIC03LjIsIC0zLjYsIC03LjIsIDExLjIsIC0yLjYsIDEzLjQsIC0yLjEsIC03LjcsIC0xMi41LCAtNS4zLCAtMTEuOSwgLTIuMiwgLTQuNCwgLTEuOSwgLTQuOCwgLTEwLjIsIC0xMS41LCAtOC4xLCAtMTIuMCwgOS4zLCA4LjIsIDEwLjAsIDguMCwgLTEwLjgsIC0xMS45LCAtMTAuNywgLTEyLjQsIC04LjIsIC0xMS44LCAtNi45LCAtMTEuNSwgLTguNCwgLTkuOSwgLTcuMSwgLTEwLjYsIC00LjcsIC02LjgsIC0xLjIsIC03LjAsIC05LjgsIC0xMS42LCAtOS42LCAtMTIuMSwgLTUwLjAsIC0xNC4xLCAtNTAuMCwgLTEyLjcsIC0xMC4wLCAtMTAuOCwgLTguOCwgLTEwLjUsIC01MC4wLCAtOS4yLCAtNC4yLCAtOS4zLCAtMTEuMCwgLTE4LjIsIC0xMS4xLCAtMTYuMSxdLFxuICAgICAgICAgICAgWy00LjIsIDMuMCwgLTUuMSwgNS4yLCAtMC40LCAwLjMsIC0wLjIsIDIuNSwgLTEuOSwgMTEuMCwgLTIuMSwgMTMuMiwgLTcuNiwgLTguNSwgLTguMCwgLTUuMywgLTUuNiwgLTQuNSwgLTYuOCwgLTIuNCwgLTcuOCwgLTcuOSwgLTcuOSwgLTYuMiwgLTUuNywgLTUuMSwgLTUuNCwgLTIuMSwgLTEyLjQsIC0xMi4zLCAtMTMuMSwgLTEwLjEsIC02LjYsIC00LjQsIC02LjksIC0yLjYsIC0zLjYsIC0zLjgsIC0zLjcsIC0yLjAsIC0xLjQsIDAuOCwgLTAuOSwgMy4wLCAtOC4yLCAtOC4xLCAtOS4yLCAtNS44LCAtNTAuMCwgLTEwLjEsIC01MC4wLCAtNy40LCAtMS43LCAtMi4wLCAtMS41LCAtMC41LCAtNTAuMCwgLTIuMSwgLTEyLjYsIC0wLjQsIC0xMS42LCAtMTMuOSwgLTExLjQsIC0xMS4xLF0sXG4gICAgICAgICAgICBbLTYuMywgLTEwLjIsIC04LjksIC05LjEsIDAuNywgLTIuOSwgLTEuNywgLTIuMywgLTUuNywgLTguNCwgLTcuNywgLTcuNiwgMTMuMiwgOS42LCAzLjUsIDkuNywgLTguNywgLTEyLjQsIC0xMC43LCAtMTAuNywgLTcuOCwgLTEwLjIsIC04LjgsIC05LjYsIC05LjUsIC0xMS45LCAtMTAuOSwgLTEwLjUsIDIuMywgLTAuNCwgLTAuMiwgLTAuMywgLTkuNywgLTE1LjUsIC0xMS40LCAtMTMuNywgLTMuMCwgLTYuNCwgLTQuMSwgLTUuNCwgLTkuNiwgLTExLjksIC0xMC41LCAtMTEuOCwgNi4yLCAzLjMsIDMuNywgMy42LCAtNTAuMCwgLTEzLjYsIC01MC4wLCAtMTEuOSwgLTUuNiwgLTguOCwgLTcuMiwgLTguOSwgLTUwLjAsIC0xMi40LCAtMTQuMSwgLTExLjYsIDIuOCwgLTYuNCwgMC41LCAtNS4yLF0sXG4gICAgICAgICAgICBbLTEzLjAsIC03LjksIC0xMy4yLCAtOS41LCAtNC42LCAtMS4yLCAtNC4xLCAtMy40LCAtMTIuNSwgLTYuMywgLTEyLjUsIC04LjUsIDkuNiwgMTIuNywgMC4yLCAxMC41LCAtMTIuNCwgLTExLjYsIC0xMy4yLCAtMTIuMCwgLTEyLjQsIC0xMC4xLCAtMTEuNiwgLTEyLjAsIC0xNS4xLCAtMTMuMSwgLTE0LjMsIC0xMy40LCAtMS40LCAxLjQsIC0xLjYsIC0wLjUsIC0xNC45LCAtMTQuMywgLTE1LjIsIC0xNi44LCAtNy43LCAtNC43LCAtNi4zLCAtNi42LCAtMTQuNiwgLTEwLjgsIC0xMi44LCAtMTMuMCwgMi4zLCA2LjAsIDIuNSwgMy42LCAtNTAuMCwgLTExLjIsIC01MC4wLCAtMTEuOSwgLTEwLjUsIC05LjIsIC0xMC41LCAtMTAuNSwgLTUwLjAsIC0xMC4zLCAtMTYuMiwgLTExLjMsIC0xLjcsIC0zLjcsIC0yLjUsIC01LjQsXSxcbiAgICAgICAgICAgIFstNy4xLCAtOS45LCAtNS43LCAtOS4wLCAtMC40LCAtMy4wLCAwLjksIC0yLjMsIC03LjIsIC04LjMsIC01LjMsIC04LjAsIDMuNSwgMC4yLCAxNC4zLCAxLjAsIC03LjMsIC0xMS4yLCAtNi45LCAtOS43LCAtOC41LCAtMTAuMiwgLTcuNywgLTkuOCwgLTEwLjAsIC0xMC40LCAtOC40LCAtMTAuMiwgMS4wLCAtMC42LCAxLjcsIC0wLjUsIC0xMS4xLCAtMTQuOCwgLTkuNywgLTE0LjUsIC0zLjcsIC01LjgsIC0zLjEsIC01LjYsIC0xMC40LCAtMTEuNSwgLTguMiwgLTExLjEsIDAuNiwgLTEuNiwgMS42LCAtMS4xLCAtNTAuMCwgLTEyLjQsIC01MC4wLCAtMTEuNSwgLTUuNSwgLTguMCwgLTQuOSwgLTcuMiwgLTUwLjAsIC0xMi40LCAtMTAuMywgLTExLjYsIDAuNywgLTYuOCwgMi40LCAtNi4wLF0sXG4gICAgICAgICAgICBbLTExLjUsIC05LjYsIC0xMi42LCAtNy4wLCAtMy42LCAtMy4zLCAtMy41LCAtMC42LCAtMTEuNiwgLTcuNywgLTExLjksIC01LjMsIDkuNywgMTAuNSwgMS4wLCAxMi42LCAtMTIuMCwgLTEyLjIsIC0xMi41LCAtOS43LCAtMTEuMSwgLTExLjIsIC0xMS45LCAtOS40LCAtMTIuOSwgLTE0LjMsIC0xNC4wLCAtMTEuOSwgLTEuMCwgLTAuNCwgLTEuNiwgMS4yLCAtMTMuOSwgLTE1LjQsIC0xMy43LCAtMTIuNiwgLTYuMiwgLTYuNywgLTYuMywgLTQuNCwgLTEzLjAsIC0xMi4yLCAtMTMuMCwgLTEwLjQsIDIuOSwgMy44LCAyLjUsIDUuOCwgLTUwLjAsIC0xMi41LCAtNTAuMCwgLTEwLjIsIC05LjYsIC05LjcsIC05LjYsIC04LjMsIC01MC4wLCAtMTEuNiwgLTE1LjQsIC05LjQsIC0xLjEsIC01LjQsIC0xLjYsIC0zLjMsXSxcbiAgICAgICAgICAgIFswLjQsIC01LjAsIC0xLjUsIC00LjAsIC00LjgsIC03LjYsIC01LjksIC02LjUsIC0wLjcsIC02LjEsIC0yLjIsIC01LjYsIC04LjcsIC0xMi40LCAtNy4zLCAtMTIuMCwgMTIuOCwgMi4zLCAxMC4yLCAzLjAsIDAuMCwgLTMuNCwgLTAuNywgLTMuMiwgMi41LCAtMC44LCAwLjksIDAuMiwgLTMuMCwgLTcuMiwgLTUuNywgLTYuMSwgLTAuMiwgLTYuNiwgLTEuOCwgLTYuMCwgLTUuMywgLTguMiwgLTUuNywgLTcuNiwgLTYuNywgLTkuNiwgLTcuNSwgLTkuMywgLTcuMSwgLTEwLjUsIC05LjYsIC05LjQsIC01MC4wLCAtOC4xLCAtNTAuMCwgLTcuMiwgLTQuMywgLTYuOCwgLTUuNywgLTYuMywgLTUwLjAsIC05LjUsIC05LjYsIC04LjksIC02LjIsIC0xMi44LCAtNi44LCAtMTEuOCxdLFxuICAgICAgICAgICAgWy02LjAsIDAuNSwgLTYuMSwgLTEuMCwgLTguOSwgLTYuNywgLTguOSwgLTguMiwgLTQuOCwgLTIuOSwgLTQuNCwgLTQuNSwgLTEyLjQsIC0xMS42LCAtMTEuMiwgLTEyLjIsIDIuMywgMTQuNiwgMS45LCAxMi45LCAtNS41LCAtMi42LCAtNC4xLCAtNC43LCAtMS4yLCAzLjAsIC0xLjEsIDEuNiwgLTguMCwgLTQuNywgLTguNywgLTYuMCwgLTguMiwgLTQuNywgLTcuOCwgLTYuNywgLTEwLjAsIC04LjMsIC04LjksIC05LjksIC0xMC44LCAtNy4xLCAtMTAuMCwgLTkuMiwgLTExLjYsIC0xMC4xLCAtMTIuMywgLTExLjksIC01MC4wLCAyLjIsIC01MC4wLCAwLjksIC03LjksIC01LjksIC03LjQsIC02LjksIC01MC4wLCAtNC42LCAtMTEuNiwgLTUuNiwgLTkuNywgLTUuOSwgLTkuOSwgLTcuMyxdLFxuICAgICAgICAgICAgWy0xLjksIC01LjUsIC0wLjYsIC01LjAsIC02LjUsIC04LjEsIC01LjYsIC04LjAsIC0zLjEsIC02LjUsIC0xLjksIC02LjgsIC0xMC43LCAtMTMuMiwgLTYuOSwgLTEyLjUsIDEwLjIsIDEuOSwgMTEuOSwgMi4xLCAtMi4zLCAtNC4xLCAtMC41LCAtNC42LCAtMC4xLCAtMC45LCAyLjQsIC0wLjgsIC01LjEsIC02LjksIC00LjgsIC02LjcsIC0yLjMsIC03LjEsIC0wLjgsIC03LjIsIC03LjIsIC04LjAsIC01LjYsIC04LjUsIC05LjQsIC05LjcsIC03LjIsIC05LjgsIC05LjIsIC0xMS4xLCAtOS41LCAtMTAuNywgLTUwLjAsIC04LjcsIC01MC4wLCAtOC42LCAtNi4xLCAtNy41LCAtNS41LCAtNy43LCAtNTAuMCwgLTEwLjQsIC03LjcsIC0xMC4wLCAtNy4zLCAtMTMuNiwgLTYuNCwgLTEzLjMsXSxcbiAgICAgICAgICAgIFstNS4zLCAtMS4wLCAtNi4xLCAxLjAsIC03LjgsIC03LjksIC04LjUsIC02LjMsIC00LjMsIC00LjIsIC00LjgsIC0yLjQsIC0xMC43LCAtMTIuMCwgLTkuNywgLTkuNywgMy4wLCAxMi45LCAyLjEsIDE0LjcsIC00LjksIC0zLjgsIC00LjAsIC0yLjQsIC0xLjAsIDAuOCwgLTEuMywgMy40LCAtNy42LCAtNS43LCAtOC4xLCAtMy41LCAtNi44LCAtNS44LCAtNy4yLCAtNC4yLCAtOC45LCAtMTAuMiwgLTguNCwgLTguMiwgLTkuOSwgLTguNCwgLTkuNywgLTYuNCwgLTExLjEsIC0xMS4xLCAtMTEuOCwgLTEwLjAsIC01MC4wLCAwLjQsIC01MC4wLCAyLjYsIC03LjIsIC03LjAsIC03LjQsIC01LjEsIC01MC4wLCAtNS43LCAtOS44LCAtMy4yLCAtOC40LCAtNy40LCAtOC45LCAtNS45LF0sXG4gICAgICAgICAgICBbLTguNSwgLTEwLjMsIC0xMC4wLCAtOS4wLCAtMS40LCAtNC45LCAtMy45LCAtMy43LCAtMTAuMCwgLTguNSwgLTEwLjIsIC03LjgsIC03LjgsIC0xMi40LCAtOC41LCAtMTEuMSwgMC4wLCAtNS41LCAtMi4zLCAtNC45LCAxMi42LCAxMC4wLCAxMS4xLCAxMC41LCAtNi4wLCAtOC4zLCAtNi45LCAtNy41LCAtMi4yLCAtNy40LCAtNS4zLCAtNS45LCAtOC45LCAtMTIuNSwgLTkuNCwgLTExLjYsIC0wLjcsIC0zLjksIC0yLjMsIC0zLjAsIC05LjEsIC05LjgsIC05LjIsIC05LjUsIC01LjYsIC05LjAsIC04LjAsIC04LjUsIC01MC4wLCAtMTUuMywgLTUwLjAsIC0xNC4xLCAyLjMsIC0xLjQsIDAuMywgLTAuNSwgLTUwLjAsIC0xMy42LCAtMTQuMywgLTExLjUsIC01LjMsIC0xMy43LCAtNi4xLCAtMTIuNyxdLFxuICAgICAgICAgICAgWy0xMS4yLCAtOC4xLCAtMTEuOCwgLTguOCwgLTQuMSwgLTEuOSwgLTMuOSwgLTMuNSwgLTExLjYsIC01LjksIC0xMS41LCAtNy45LCAtMTAuMiwgLTEwLjEsIC0xMC4yLCAtMTEuMiwgLTMuNCwgLTIuNiwgLTQuMSwgLTMuOCwgMTAuMCwgMTMuMSwgMTAuNywgMTAuNiwgLTguMSwgLTUuMiwgLTguMCwgLTYuNywgLTYuMSwgLTMuNywgLTcuNSwgLTUuNiwgLTExLjEsIC0xMC4zLCAtMTAuNiwgLTExLjksIC0zLjIsIC0xLjAsIC0yLjIsIC0yLjgsIC0xMC41LCAtOC4xLCAtOS40LCAtOS41LCAtOC4zLCAtNi45LCAtOS40LCAtOC44LCAtNTAuMCwgLTExLjMsIC01MC4wLCAtMTIuOCwgLTAuNiwgMi4yLCAtMC4zLCAwLjEsIC01MC4wLCAtMTAuMSwgLTE3LjUsIC0xMS4xLCAtOC42LCAtOS45LCAtOC42LCAtMTEuOSxdLFxuICAgICAgICAgICAgWy04LjksIC05LjQsIC04LjYsIC04LjksIC0yLjksIC00LjUsIC0yLjIsIC0zLjksIC04LjgsIC03LjUsIC04LjEsIC03LjksIC04LjgsIC0xMS42LCAtNy43LCAtMTEuOSwgLTAuNywgLTQuMSwgLTAuNSwgLTQuMCwgMTEuMSwgMTAuNywgMTMuMiwgMTAuNCwgLTUuNywgLTUuOCwgLTMuNSwgLTYuMSwgLTMuNiwgLTYuNSwgLTMuMywgLTUuNSwgLTkuNCwgLTExLjAsIC04LjcsIC0xMS4yLCAtMS44LCAtMi43LCAwLjcsIC0zLjAsIC05LjEsIC04LjIsIC03LjMsIC05LjQsIC03LjIsIC04LjIsIC03LjIsIC04LjIsIC01MC4wLCAtMTMuMiwgLTUwLjAsIC0xMy4zLCAwLjUsIC0wLjksIDEuOCwgLTAuNiwgLTUwLjAsIC0xMS40LCAtMTEuMSwgLTEwLjUsIC02LjEsIC0xMi45LCAtNS4wLCAtMTEuOSxdLFxuICAgICAgICAgICAgWy0xMC44LCAtOS42LCAtMTEuOSwgLTcuNywgLTMuMywgLTMuOCwgLTQuNSwgLTEuNiwgLTExLjcsIC03LjcsIC0xMi4wLCAtNi4yLCAtOS42LCAtMTIuMCwgLTkuOCwgLTkuNCwgLTMuMiwgLTQuNywgLTQuNiwgLTIuNCwgMTAuNSwgMTAuNiwgMTAuNCwgMTIuNiwgLTguMiwgLTcuOSwgLTkuMCwgLTQuNywgLTYuMSwgLTYuMCwgLTcuNSwgLTIuOSwgLTEwLjksIC0xMi4yLCAtMTEuMiwgLTEwLjksIC0yLjQsIC0yLjksIC0yLjcsIC0wLjksIC0xMC40LCAtOS43LCAtMTAuMiwgLTguMCwgLTguNCwgLTkuMSwgLTkuMywgLTYuNSwgLTUwLjAsIC0xMy4zLCAtNTAuMCwgLTExLjAsIC0wLjAsIC0wLjQsIC0wLjQsIDIuMywgLTUwLjAsIC0xMC45LCAtMTcuMiwgLTguMywgLTguMywgLTEyLjcsIC03LjgsIC05LjMsXSxcbiAgICAgICAgICAgIFsyLjEsIC04LjEsIDEuMiwgLTcuMCwgLTguMCwgLTkuNSwgLTcuMywgLTkuOSwgMTAuNSwgLTUuNSwgOS4zLCAtNS43LCAtOS41LCAtMTUuMSwgLTEwLjAsIC0xMi45LCAyLjUsIC0xLjIsIC0wLjEsIC0xLjAsIC02LjAsIC04LjEsIC01LjcsIC04LjIsIDEzLjgsIDExLjMsIDExLjgsIDEyLjEsIC02LjAsIC05LjEsIC05LjAsIC05LjUsIC04LjksIC0xMy40LCAtMTAuMCwgLTEzLjEsIC05LjksIC0xMS43LCAtOS44LCAtMTIuOCwgLTUuOSwgLTkuNCwgLTYuNSwgLTguMSwgLTEwLjcsIC0xNC4wLCAtMTMuMywgLTEzLjksIC01MC4wLCAtMTEuOSwgLTUwLjAsIC05LjcsIC04LjksIC0xMC44LCAtOS4wLCAtMTEuMSwgLTUwLjAsIC02LjUsIC01LjMsIC02LjMsIC0xMC41LCAtMTYuMiwgLTEwLjQsIC0xNS4yLF0sXG4gICAgICAgICAgICBbMC4wLCAtNS4wLCAwLjUsIC02LjgsIC05LjEsIC03LjgsIC03LjUsIC04LjksIDcuNywgLTIuNCwgOC4yLCAtNS4xLCAtMTEuOSwgLTEzLjEsIC0xMC40LCAtMTQuMywgLTAuOCwgMy4wLCAtMC45LCAwLjgsIC04LjMsIC01LjIsIC01LjgsIC03LjksIDExLjMsIDE1LjAsIDExLjIsIDEyLjgsIC05LjcsIC01LjMsIC05LjIsIC03LjgsIC0xMS43LCAtMTAuNiwgLTEwLjEsIC0xMi4yLCAtMTEuNywgLTguOCwgLTguOSwgLTExLjgsIC05LjMsIC01LjAsIC04LjAsIC04LjIsIC0xMy42LCAtMTEuNCwgLTEyLjgsIC0xMy4wLCAtNTAuMCwgLTcuMiwgLTUwLjAsIC04LjQsIC0xMS4wLCAtNy43LCAtOC43LCAtMTAuMiwgLTUwLjAsIC0xLjUsIC03LjEsIC00LjksIC0xMS4yLCAtMTEuNiwgLTExLjYsIC0xNS4wLF0sXG4gICAgICAgICAgICBbMS40LCAtNy4zLCAyLjIsIC03LjEsIC04LjAsIC05LjMsIC02LjQsIC05LjYsIDkuMSwgLTUuNSwgMTAuMCwgLTUuNCwgLTEwLjksIC0xNC4zLCAtOC40LCAtMTQuMCwgMC45LCAtMS4xLCAyLjQsIC0xLjMsIC02LjksIC04LjAsIC0zLjUsIC05LjAsIDExLjgsIDExLjIsIDEzLjQsIDExLjQsIC03LjMsIC04LjgsIC02LjUsIC04LjUsIC0xMC4wLCAtMTIuNSwgLTcuOCwgLTEyLjUsIC05LjYsIC0xMS4wLCAtNy4xLCAtMTAuNywgLTcuOSwgLTguMCwgLTQuMywgLTkuNCwgLTExLjQsIC0xMi4zLCAtMTAuOSwgLTEyLjksIC01MC4wLCAtMTEuOCwgLTUwLjAsIC0xMS4yLCAtOS40LCAtOS44LCAtNy4zLCAtMTAuNSwgLTUwLjAsIC02LjIsIC0yLjIsIC02LjcsIC05LjgsIC0xNS4yLCAtOC41LCAtMTQuOSxdLFxuICAgICAgICAgICAgWzAuMiwgLTYuMywgMC4xLCAtNC4zLCAtOC4yLCAtOC45LCAtOC41LCAtNy4wLCA4LjUsIC00LjEsIDguMCwgLTIuMSwgLTEwLjUsIC0xMy40LCAtMTAuMiwgLTExLjksIDAuMiwgMS42LCAtMC44LCAzLjQsIC03LjUsIC02LjcsIC02LjEsIC00LjcsIDEyLjEsIDEyLjgsIDExLjQsIDE0LjcsIC04LjcsIC03LjQsIC05LjQsIC01LjMsIC05LjksIC0xMS44LCAtMTAuNSwgLTEwLjMsIC05LjksIC0xMC4xLCAtOS4zLCAtOS4zLCAtOC4xLCAtNy4yLCAtOC4wLCAtNS4yLCAtMTIuMCwgLTEyLjEsIC0xMi42LCAtMTAuOSwgLTUwLjAsIC03LjksIC01MC4wLCAtNS4zLCAtOS4zLCAtOC44LCAtOC45LCAtNy4wLCAtNTAuMCwgLTMuNiwgLTcuMSwgLTEuMiwgLTEwLjIsIC0xMi43LCAtOS45LCAtMTEuMCxdLFxuICAgICAgICAgICAgWy0xMC4yLCAtMTMuNCwgLTExLjgsIC0xMi40LCAtNi4wLCAtOS40LCAtNy4xLCAtOC42LCAtOS44LCAtMTIuOSwgLTEwLjgsIC0xMi40LCAyLjMsIC0xLjQsIDEuMCwgLTEuMCwgLTMuMCwgLTguMCwgLTUuMSwgLTcuNiwgLTIuMiwgLTYuMSwgLTMuNiwgLTYuMSwgLTYuMCwgLTkuNywgLTcuMywgLTguNywgMTEuMiwgNy45LCA4LjksIDguMSwgLTEyLjEsIC0xNy40LCAtMTMuMiwgLTE2LjgsIC02LjMsIC05LjUsIC03LjUsIC04LjgsIC0xMi43LCAtMTUuMiwgLTEzLjEsIC0xNC4yLCAwLjAsIC0zLjEsIC0xLjgsIC0zLjEsIC01MC4wLCAtMTAuNywgLTUwLjAsIC05LjMsIC00LjYsIC04LjksIC01LjksIC04LjMsIC01MC4wLCAtMTIuOCwgLTkuNiwgLTEwLjYsIDkuNSwgLTMuMiwgOC4yLCAtMi44LF0sXG4gICAgICAgICAgICBbLTEzLjUsIC0xMS4zLCAtMTQuMCwgLTEyLjksIC05LjMsIC03LjEsIC04LjIsIC04LjksIC0xMi43LCAtMTAuMywgLTExLjksIC0xMi4zLCAtMC40LCAxLjQsIC0wLjYsIC0wLjQsIC03LjIsIC00LjcsIC02LjksIC01LjcsIC03LjQsIC0zLjcsIC02LjUsIC02LjAsIC05LjEsIC01LjMsIC04LjgsIC03LjQsIDcuOSwgMTEuOSwgNy44LCA5LjMsIC0xNS4yLCAtMTUuMSwgLTE0LjYsIC0xNy4yLCAtOS43LCAtNy4zLCAtOC4yLCAtOS4yLCAtMTUuMCwgLTEyLjgsIC0xNC4xLCAtMTQuOSwgLTIuOCwgMC4yLCAtMi45LCAtMi4zLCAtNTAuMCwgLTcuNCwgLTUwLjAsIC04LjcsIC05LjQsIC03LjMsIC05LjQsIC05LjQsIC01MC4wLCAtOC4wLCAtMTEuOSwgLTkuNywgNi41LCAwLjUsIDYuNCwgLTEuOCxdLFxuICAgICAgICAgICAgWy0xMy4wLCAtMTQuNCwgLTExLjksIC0xMy45LCAtNy43LCAtOS4wLCAtNi43LCAtOC44LCAtMTEuNywgLTEyLjcsIC0xMC43LCAtMTMuMSwgLTAuMiwgLTEuNiwgMS43LCAtMS42LCAtNS43LCAtOC43LCAtNC44LCAtOC4xLCAtNS4zLCAtNy41LCAtMy4zLCAtNy41LCAtOS4wLCAtOS4yLCAtNi41LCAtOS40LCA4LjksIDcuOCwgMTAuMSwgNy44LCAtMTQuMywgLTE3LjcsIC0xMy4wLCAtMTcuOCwgLTguMCwgLTkuNCwgLTYuMiwgLTkuMiwgLTE1LjEsIC0xNC45LCAtMTIuMiwgLTE0LjksIC0xLjgsIC0zLjIsIC0wLjgsIC0zLjIsIC01MC4wLCAtMTAuOCwgLTUwLjAsIC05LjksIC03LjMsIC05LjYsIC02LjQsIC05LjQsIC01MC4wLCAtMTIuMywgLTguNywgLTExLjMsIDcuNiwgLTMuMywgOC43LCAtMi45LF0sXG4gICAgICAgICAgICBbLTEyLjUsIC0xMi45LCAtMTMuNCwgLTEwLjAsIC04LjUsIC05LjAsIC03LjgsIC02LjgsIC0xMS44LCAtMTEuMywgLTEyLjQsIC0xMC4xLCAtMC4zLCAtMC41LCAtMC41LCAxLjIsIC02LjEsIC02LjAsIC02LjcsIC0zLjUsIC01LjksIC01LjYsIC01LjUsIC0yLjksIC05LjUsIC03LjgsIC04LjUsIC01LjMsIDguMSwgOS4zLCA3LjgsIDExLjgsIC0xNC40LCAtMTUuNywgLTE0LjUsIC0xNC42LCAtOC40LCAtOC43LCAtNy45LCAtNy4xLCAtMTQuMywgLTEzLjgsIC0xMy44LCAtMTIuMywgLTIuNCwgLTIuMiwgLTIuOSwgLTAuMiwgLTUwLjAsIC04LjksIC01MC4wLCAtNy4xLCAtOC4xLCAtOS4xLCAtOC43LCAtNi42LCAtNTAuMCwgLTkuNywgLTExLjQsIC04LjAsIDYuOCwgLTEuOCwgNi45LCAwLjQsXSxcbiAgICAgICAgICAgIFstMi42LCAtNi4zLCAtNC45LCAtNC45LCAtNi40LCAtOS40LCAtNy45LCAtOC42LCAtNi4zLCAtNy40LCAtOC4yLCAtNi42LCAtOS43LCAtMTQuOSwgLTExLjEsIC0xMy45LCAtMC4yLCAtOC4yLCAtMi4zLCAtNi44LCAtOC45LCAtMTEuMSwgLTkuNCwgLTEwLjksIC04LjksIC0xMS43LCAtMTAuMCwgLTkuOSwgLTEyLjEsIC0xNS4yLCAtMTQuMywgLTE0LjQsIDExLjEsIDIuOSwgOS4yLCAzLjUsIC0zLjAsIC03LjAsIC00LjMsIC02LjIsIC0yLjIsIC02LjYsIC0zLjcsIC01LjcsIC02LjAsIC0xMC40LCAtOC42LCAtOS41LCAtNTAuMCwgLTE1LjUsIC01MC4wLCAtMTMuOSwgLTcuOCwgLTEwLjUsIC04LjcsIC05LjYsIC01MC4wLCAtMTYuNSwgLTE3LjEsIC0xNC44LCAtMTIuMSwgLTE4LjksIC0xMi40LCAtMTcuNCxdLFxuICAgICAgICAgICAgWy04LjUsIDAuOCwgLTkuMSwgLTAuNywgLTEwLjEsIC03LjUsIC05LjEsIC04LjIsIC0xMS40LCAtMy4xLCAtMTEuOCwgLTQuNCwgLTE1LjUsIC0xNC4zLCAtMTQuOCwgLTE1LjQsIC02LjYsIC00LjcsIC03LjEsIC01LjgsIC0xMi41LCAtMTAuMywgLTExLjAsIC0xMi4yLCAtMTMuNCwgLTEwLjYsIC0xMi41LCAtMTEuOCwgLTE3LjQsIC0xNS4xLCAtMTcuNywgLTE1LjcsIDIuOSwgMTIuNSwgMy4xLCAxMC4zLCAtNy43LCAtNS4yLCAtNi4yLCAtNy4zLCAtNS40LCAtMS43LCAtNS40LCAtMy43LCAtMTEuNiwgLTkuMSwgLTEzLjAsIC0xMC44LCAtNTAuMCwgLTEwLjMsIC01MC4wLCAtMTEuMiwgLTkuOCwgLTguMywgLTkuMSwgLTkuNywgLTUwLjAsIC0xMi43LCAtMjAuNiwgLTEzLjEsIC0xNi4wLCAtMTYuNiwgLTE3LjAsIC0xOC40LF0sXG4gICAgICAgICAgICBbLTUuMCwgLTYuNCwgLTMuNCwgLTUuNiwgLTcuNSwgLTkuMywgLTcuMSwgLTguOCwgLTguOCwgLTcuNCwgLTYuOSwgLTYuOSwgLTExLjQsIC0xNS4yLCAtOS43LCAtMTMuNywgLTEuOCwgLTcuOCwgLTAuOCwgLTcuMiwgLTkuNCwgLTEwLjYsIC04LjcsIC0xMS4yLCAtMTAuMCwgLTEwLjEsIC03LjgsIC0xMC41LCAtMTMuMiwgLTE0LjYsIC0xMy4wLCAtMTQuNSwgOS4yLCAzLjEsIDEwLjgsIDMuMCwgLTQuNSwgLTYuNywgLTIuNywgLTYuNywgLTUuMCwgLTYuOCwgLTIuNSwgLTYuNywgLTcuNSwgLTEwLjQsIC03LjQsIC0xMC4yLCAtNTAuMCwgLTE1LjUsIC01MC4wLCAtMTQuMiwgLTguOSwgLTEwLjIsIC04LjUsIC0xMC4wLCAtNTAuMCwgLTE1LjYsIC0xNS4zLCAtMTUuNSwgLTEzLjAsIC0xOC44LCAtMTIuNiwgLTE4LjMsXSxcbiAgICAgICAgICAgIFstOC4xLCAtMS4xLCAtOC45LCAxLjQsIC04LjYsIC05LjIsIC05LjQsIC02LjgsIC0xMS4wLCAtNC45LCAtMTEuNSwgLTIuNiwgLTEzLjcsIC0xNi44LCAtMTQuNSwgLTEyLjYsIC02LjAsIC02LjcsIC03LjIsIC00LjIsIC0xMS42LCAtMTEuOSwgLTExLjIsIC0xMC45LCAtMTMuMSwgLTEyLjIsIC0xMi41LCAtMTAuMywgLTE2LjgsIC0xNy4yLCAtMTcuOCwgLTE0LjYsIDMuNSwgMTAuMywgMy4wLCAxMi40LCAtNi45LCAtNy41LCAtNi44LCAtNC45LCAtNS40LCAtNC4yLCAtNS40LCAtMS4zLCAtMTAuOCwgLTExLjUsIC0xMi40LCAtOC4yLCAtNTAuMCwgLTEyLjUsIC01MC4wLCAtOC45LCAtOS4yLCAtMTAuMCwgLTkuNCwgLTcuOSwgLTUwLjAsIC0xNC4zLCAtMTkuOSwgLTExLjQsIC0xNi4yLCAtMTkuMiwgLTE1LjgsIC0xNS45LF0sXG4gICAgICAgICAgICBbLTYuMywgLTcuNCwgLTguMCwgLTYuMCwgMi44LCAtMC43LCAwLjksIDAuMywgLTcuNSwgLTQuNCwgLTguNCwgLTMuNiwgLTMuMCwgLTcuNywgLTMuNywgLTYuMiwgLTUuMywgLTEwLjAsIC03LjIsIC04LjksIC0wLjcsIC0zLjIsIC0xLjgsIC0yLjQsIC05LjksIC0xMS43LCAtOS42LCAtOS45LCAtNi4zLCAtOS43LCAtOC4wLCAtOC40LCAtMy4wLCAtNy43LCAtNC41LCAtNi45LCAxMS4zLCA4LjIsIDkuNCwgOS4xLCAtMS4wLCAtMy4zLCAtMS44LCAtMi40LCAxLjUsIC0yLjEsIC0wLjQsIC0xLjEsIC01MC4wLCAtMTQuNSwgLTUwLjAsIC0xMi45LCAyLjgsIC0wLjAsIDEuNCwgMC43LCAtNTAuMCwgLTguNywgLTE0LjEsIC03LjUsIC01LjIsIC0xMi41LCAtNi41LCAtMTAuNyxdLFxuICAgICAgICAgICAgWy05LjksIC01LjAsIC0xMC4wLCAtNi41LCAtMC43LCAyLjYsIC0wLjIsIDAuMSwgLTEwLjMsIC0xLjgsIC05LjksIC0zLjgsIC02LjQsIC00LjcsIC01LjgsIC02LjcsIC04LjIsIC04LjMsIC04LjAsIC0xMC4yLCAtMy45LCAtMS4wLCAtMi43LCAtMi45LCAtMTEuNywgLTguOCwgLTExLjAsIC0xMC4xLCAtOS41LCAtNy4zLCAtOS40LCAtOC43LCAtNy4wLCAtNS4yLCAtNi43LCAtNy41LCA4LjIsIDExLjYsIDguOCwgOS4xLCAtMy43LCAtMC45LCAtMy4xLCAtMy4wLCAtMi4wLCAxLjIsIC0yLjMsIC0xLjMsIC01MC4wLCAtMTIuMSwgLTUwLjAsIC0xMi42LCAwLjEsIDIuNSwgMC43LCAwLjYsIC01MC4wLCAtNi4wLCAtMTQuOCwgLTcuNSwgLTguNiwgLTkuNCwgLTguNSwgLTExLjIsXSxcbiAgICAgICAgICAgIFstNy41LCAtNi4yLCAtNy4yLCAtNi4yLCAwLjksIDAuMiwgMi41LCAwLjIsIC04LjMsIC0zLjUsIC03LjEsIC0zLjcsIC00LjEsIC02LjMsIC0zLjEsIC02LjMsIC01LjcsIC04LjksIC01LjYsIC04LjQsIC0yLjMsIC0yLjIsIDAuNywgLTIuNywgLTkuOCwgLTguOSwgLTcuMSwgLTkuMywgLTcuNSwgLTguMiwgLTYuMiwgLTcuOSwgLTQuMywgLTYuMiwgLTIuNywgLTYuOCwgOS40LCA4LjgsIDEyLjEsIDguOCwgLTIuMSwgLTIuMCwgMC4xLCAtMi40LCAwLjAsIC0xLjEsIDEuMywgLTAuOCwgLTUwLjAsIC0xMS45LCAtNTAuMCwgLTEyLjYsIDEuMiwgMC43LCAzLjUsIDAuOCwgLTUwLjAsIC03LjEsIC0xMi40LCAtNy4xLCAtNy4xLCAtMTAuNiwgLTUuMCwgLTEwLjYsXSxcbiAgICAgICAgICAgIFstOS4wLCAtNi41LCAtMTAuMCwgLTQuOCwgMC4xLCAtMC4xLCAtMC4zLCAyLjQsIC05LjksIC0zLjUsIC0xMC42LCAtMi4wLCAtNS40LCAtNi42LCAtNS42LCAtNC40LCAtNy42LCAtOS45LCAtOC41LCAtOC4yLCAtMy4wLCAtMi44LCAtMy4wLCAtMC45LCAtMTIuOCwgLTExLjgsIC0xMC43LCAtOS4zLCAtOC44LCAtOS4yLCAtOS4yLCAtNy4xLCAtNi4yLCAtNy4zLCAtNi43LCAtNC45LCA5LjEsIDkuMSwgOC44LCAxMS4yLCAtMy4xLCAtMy4wLCAtMy4zLCAtMS4wLCAtMS4xLCAtMS40LCAtMi4wLCAxLjIsIC01MC4wLCAtMTIuOCwgLTUwLjAsIC0xMC45LCAwLjgsIDAuNSwgMC43LCAyLjMsIC01MC4wLCAtNy41LCAtMTYuNSwgLTUuOSwgLTcuOCwgLTExLjEsIC03LjgsIC05LjAsXSxcbiAgICAgICAgICAgIFstNy4xLCAtNS42LCAtOS4xLCAtNS4xLCAtNS45LCAtOC4wLCAtNi45LCAtNy40LCAtMS45LCAtMS42LCAtNC43LCAtMS40LCAtOS42LCAtMTQuNiwgLTEwLjQsIC0xMy4wLCAtNi43LCAtMTAuOCwgLTkuNCwgLTkuOSwgLTkuMSwgLTEwLjUsIC05LjEsIC0xMC40LCAtNS45LCAtOS4zLCAtNy45LCAtOC4xLCAtMTIuNywgLTE1LjAsIC0xNS4xLCAtMTQuMywgLTIuMiwgLTUuNCwgLTUuMCwgLTUuNCwgLTEuMCwgLTMuNywgLTIuMSwgLTMuMSwgMTIuOCwgOS42LCAxMS4xLCAxMC4xLCAtNC44LCAtOS40LCAtOC4xLCAtOC42LCAtNTAuMCwgLTE4LjMsIC01MC4wLCAtMTUuNCwgLTUuOSwgLTcuNSwgLTYuNiwgLTcuMSwgLTUwLjAsIC05LjUsIC0xMS43LCAtOC40LCAtMTIuNSwgLTE3LjMsIC0xMy4yLCAtMTUuNCxdLFxuICAgICAgICAgICAgWy0xMC4yLCAtMS42LCAtMTAuMiwgLTMuMiwgLTcuMywgLTQuNiwgLTYuNSwgLTYuMiwgLTYuNywgMy4wLCAtNi44LCAwLjgsIC0xMS45LCAtMTAuOCwgLTExLjUsIC0xMi4yLCAtOS42LCAtNy4xLCAtOS43LCAtOC40LCAtOS44LCAtOC4xLCAtOC4yLCAtOS43LCAtOS40LCAtNS4wLCAtOC4wLCAtNy4yLCAtMTUuMiwgLTEyLjgsIC0xNC45LCAtMTMuOCwgLTYuNiwgLTEuNywgLTYuOCwgLTQuMiwgLTMuMywgLTAuOSwgLTIuMCwgLTMuMCwgOS42LCAxMi44LCA5LjcsIDEwLjUsIC04LjUsIC01LjYsIC05LjMsIC03LjgsIC01MC4wLCAtMTIuNywgLTUwLjAsIC0xMy44LCAtNi44LCAtNS4xLCAtNS4zLCAtNi41LCAtNTAuMCwgLTQuMSwgLTEyLjgsIC01LjgsIC0xNC40LCAtMTQuMSwgLTEzLjYsIC0xNC44LF0sXG4gICAgICAgICAgICBbLTguMiwgLTQuNywgLTcuMSwgLTUuMCwgLTYuNSwgLTcuNywgLTUuNSwgLTYuOSwgLTQuMSwgLTAuOCwgLTEuMiwgLTAuOSwgLTEwLjUsIC0xMi44LCAtOC4yLCAtMTMuMCwgLTcuNSwgLTEwLjAsIC03LjIsIC05LjcsIC05LjIsIC05LjQsIC03LjMsIC0xMC4yLCAtNi41LCAtOC4wLCAtNC4zLCAtOC4wLCAtMTMuMSwgLTE0LjEsIC0xMi4yLCAtMTMuOCwgLTMuNywgLTUuNCwgLTIuNSwgLTUuNCwgLTEuOCwgLTMuMSwgMC4xLCAtMy4zLCAxMS4xLCA5LjcsIDEyLjksIDkuOCwgLTUuNSwgLTguMSwgLTUuNCwgLTcuOCwgLTUwLjAsIC0xNi40LCAtNTAuMCwgLTE0LjgsIC01LjksIC03LjEsIC00LjcsIC03LjIsIC01MC4wLCAtOC40LCAtNi40LCAtOC4xLCAtMTIuMSwgLTE2LjIsIC0xMC4zLCAtMTUuOCxdLFxuICAgICAgICAgICAgWy05LjIsIC0zLjAsIC05LjksIC0xLjIsIC02LjUsIC02LjEsIC02LjgsIC00LjQsIC02LjQsIDAuOSwgLTcuMCwgMy4wLCAtMTEuOCwgLTEzLjAsIC0xMS4xLCAtMTAuNCwgLTkuMywgLTkuMiwgLTkuOCwgLTYuNCwgLTkuNSwgLTkuNSwgLTkuNCwgLTguMCwgLTguMSwgLTguMiwgLTkuNCwgLTUuMiwgLTE0LjIsIC0xNC45LCAtMTQuOSwgLTEyLjMsIC01LjcsIC0zLjcsIC02LjcsIC0xLjMsIC0yLjQsIC0zLjAsIC0yLjQsIC0xLjAsIDEwLjEsIDEwLjUsIDkuOCwgMTMuMSwgLTcuMiwgLTguMCwgLTguNCwgLTUuMCwgLTUwLjAsIC0xNC43LCAtNTAuMCwgLTExLjQsIC02LjMsIC02LjcsIC01LjgsIC01LjAsIC01MC4wLCAtNi4xLCAtMTMuNCwgLTMuNiwgLTEzLjAsIC0xNi4wLCAtMTMuNywgLTEzLjMsXSxcbiAgICAgICAgICAgIFstOC4yLCAtMTAuOCwgLTEwLjEsIC05LjgsIC0wLjQsIC0zLjYsIC0xLjcsIC0yLjksIC03LjksIC04LjQsIC05LjgsIC04LjIsIDYuMiwgMi4zLCAwLjYsIDIuOSwgLTcuMSwgLTExLjYsIC05LjIsIC0xMS4xLCAtNS42LCAtOC4zLCAtNy4yLCAtOC40LCAtMTAuNywgLTEzLjYsIC0xMS40LCAtMTIuMCwgMC4wLCAtMi44LCAtMS44LCAtMi40LCAtNi4wLCAtMTEuNiwgLTcuNSwgLTEwLjgsIDEuNSwgLTIuMCwgMC4wLCAtMS4xLCAtNC44LCAtOC41LCAtNS41LCAtNy4yLCAxMS45LCA4LjYsIDEwLjAsIDkuMCwgLTUwLjAsIC0xNC4yLCAtNTAuMCwgLTEyLjgsIC00LjEsIC03LjQsIC01LjcsIC02LjUsIC01MC4wLCAtMTEuMCwgLTE0LjMsIC05LjksIDEuNCwgLTcuOSwgLTAuNywgLTYuOCxdLFxuICAgICAgICAgICAgWy0xMi41LCAtOC43LCAtMTMuMCwgLTkuOSwgLTMuOSwgLTEuMCwgLTMuNCwgLTIuOSwgLTEyLjUsIC02LjMsIC0xMS42LCAtOC4xLCAzLjMsIDYuMCwgLTEuNiwgMy44LCAtMTAuNSwgLTEwLjEsIC0xMS4xLCAtMTEuMSwgLTkuMCwgLTYuOSwgLTguMiwgLTkuMSwgLTE0LjAsIC0xMS40LCAtMTIuMywgLTEyLjEsIC0zLjEsIDAuMiwgLTMuMiwgLTIuMiwgLTEwLjQsIC05LjEsIC0xMC40LCAtMTEuNSwgLTIuMSwgMS4yLCAtMS4xLCAtMS40LCAtOS40LCAtNS42LCAtOC4xLCAtOC4wLCA4LjYsIDEyLjQsIDguNiwgOS41LCAtNTAuMCwgLTEwLjQsIC01MC4wLCAtMTEuNiwgLTcuMiwgLTUuNywgLTcuNSwgLTcuNCwgLTUwLjAsIC04LjYsIC0xNS43LCAtOS43LCAtMy4wLCAtMy43LCAtMy4yLCAtNS45LF0sXG4gICAgICAgICAgICBbLTExLjEsIC0xMS45LCAtMTAuNiwgLTExLjMsIC0yLjYsIC00LjEsIC0xLjcsIC0zLjUsIC0xMS40LCAtOS42LCAtOS42LCAtOS4yLCAzLjcsIDIuNSwgMS42LCAyLjUsIC05LjYsIC0xMi4zLCAtOS41LCAtMTEuOCwgLTguMCwgLTkuNCwgLTcuMiwgLTkuMywgLTEzLjMsIC0xMi44LCAtMTAuOSwgLTEyLjYsIC0xLjgsIC0yLjksIC0wLjgsIC0yLjksIC04LjYsIC0xMy4wLCAtNy40LCAtMTIuNCwgLTAuNCwgLTIuMywgMS4zLCAtMi4wLCAtOC4xLCAtOS4zLCAtNS40LCAtOC40LCAxMC4wLCA4LjYsIDExLjQsIDguOSwgLTUwLjAsIC0xMy43LCAtNTAuMCwgLTEzLjIsIC02LjEsIC04LjEsIC01LjUsIC03LjUsIC01MC4wLCAtMTEuMywgLTEyLjcsIC0xMC4xLCAtMS42LCAtNy44LCAtMC4zLCAtNy4yLF0sXG4gICAgICAgICAgICBbLTExLjQsIC0xMC4wLCAtMTIuNywgLTguMiwgLTMuMSwgLTMuMSwgLTIuOCwgLTAuOSwgLTExLjcsIC03LjMsIC0xMi4xLCAtNS44LCAzLjYsIDMuNiwgLTEuMSwgNS44LCAtOS40LCAtMTEuOSwgLTEwLjcsIC0xMC4wLCAtOC41LCAtOC44LCAtOC4yLCAtNi41LCAtMTMuOSwgLTEzLjAsIC0xMi45LCAtMTAuOSwgLTMuMSwgLTIuMywgLTMuMiwgLTAuMiwgLTkuNSwgLTEwLjgsIC0xMC4yLCAtOC4yLCAtMS4xLCAtMS4zLCAtMC44LCAxLjIsIC04LjYsIC03LjgsIC03LjgsIC01LjAsIDkuMCwgOS41LCA4LjksIDEyLjAsIC01MC4wLCAtMTMuMCwgLTUwLjAsIC0xMC4zLCAtNi4yLCAtNy4wLCAtNy4xLCAtNS40LCAtNTAuMCwgLTkuMywgLTE0LjAsIC04LjIsIC0yLjQsIC02LjMsIC0yLjQsIC0zLjksXSxcbiAgICAgICAgICAgIFstNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAzMy4zLCAtNTAuMCwgMzAuNiwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAyOS4yLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCxdLFxuICAgICAgICAgICAgWy0xNC44LCAtNi4yLCAtMTQuOSwgLTcuNiwgLTE0LjYsIC0xMS42LCAtMTMuMCwgLTEyLjIsIC0xNC4wLCAtOS4wLCAtMTQuMSwgLTEwLjEsIC0xMy42LCAtMTEuMiwgLTEyLjQsIC0xMi41LCAtOC4xLCAyLjIsIC04LjcsIDAuNCwgLTE1LjMsIC0xMS4zLCAtMTMuMiwgLTEzLjMsIC0xMS45LCAtNy4yLCAtMTEuOCwgLTcuOSwgLTEwLjcsIC03LjQsIC0xMC44LCAtOC45LCAtMTUuNSwgLTEwLjMsIC0xNS41LCAtMTIuNSwgLTE0LjUsIC0xMi4xLCAtMTEuOSwgLTEyLjgsIC0xOC4zLCAtMTIuNywgLTE2LjQsIC0xNC43LCAtMTQuMiwgLTEwLjQsIC0xMy43LCAtMTMuMCwgLTUwLjAsIDE1LjEsIC01MC4wLCAxMy4zLCAtOS45LCAtNS44LCAtOC45LCAtNy42LCAtNTAuMCwgLTEuNSwgLTcuOCwgLTMuMCwgLTguMSwgMy42LCAtOS40LCAyLjAsXSxcbiAgICAgICAgICAgIFstNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAzMC42LCAtNTAuMCwgMzUuMiwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAyOC41LCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCxdLFxuICAgICAgICAgICAgWy0xMy44LCAtNy41LCAtMTQuNCwgLTUuMSwgLTEyLjYsIC0xMS42LCAtMTEuNSwgLTEwLjEsIC0xMy4yLCAtOS43LCAtMTIuNywgLTcuNCwgLTExLjksIC0xMS45LCAtMTEuNSwgLTEwLjIsIC03LjIsIDAuOSwgLTguNiwgMi42LCAtMTQuMSwgLTEyLjgsIC0xMy4zLCAtMTEuMCwgLTkuNywgLTguNCwgLTExLjIsIC01LjMsIC05LjMsIC04LjcsIC05LjksIC03LjEsIC0xMy45LCAtMTEuMiwgLTE0LjIsIC04LjksIC0xMi45LCAtMTIuNiwgLTEyLjYsIC0xMC45LCAtMTUuNCwgLTEzLjgsIC0xNC44LCAtMTEuNCwgLTEyLjgsIC0xMS42LCAtMTMuMiwgLTEwLjMsIC01MC4wLCAxMy4zLCAtNTAuMCwgMTUuMiwgLTguNiwgLTcuMCwgLTguNCwgLTQuOCwgLTUwLjAsIC0zLjAsIC03LjEsIC0wLjEsIC03LjMsIDIuMywgLTguNywgMy45LF0sXG4gICAgICAgICAgICBbLTcuMywgLTYuMywgLTguOSwgLTUuNSwgMi45LCAwLjIsIDEuNSwgMS4yLCAtOC41LCAtMi4zLCAtMTAuMCwgLTEuNywgLTUuNiwgLTEwLjUsIC01LjUsIC05LjYsIC00LjMsIC03LjksIC02LjEsIC03LjIsIDIuMywgLTAuNiwgMC41LCAtMC4wLCAtOC45LCAtMTEuMCwgLTkuNCwgLTkuMywgLTQuNiwgLTkuNCwgLTcuMywgLTguMSwgLTcuOCwgLTkuOCwgLTguOSwgLTkuMiwgMi44LCAwLjEsIDEuMiwgMC44LCAtNS45LCAtNi44LCAtNS45LCAtNi4zLCAtNC4xLCAtNy4yLCAtNi4xLCAtNi4yLCAtNTAuMCwgLTkuOSwgLTUwLjAsIC04LjYsIDEyLjUsIDkuNCwgMTEuMCwgOS44LCAtNTAuMCwgLTQuOCwgLTguNywgLTMuNSwgLTAuMCwgLTguNiwgLTIuMSwgLTcuMCxdLFxuICAgICAgICAgICAgWy0xMC4xLCAtNC4zLCAtMTAuOCwgLTUuOCwgMC4xLCAyLjMsIDAuNywgMC42LCAtMTAuNCwgLTAuMiwgLTEwLjgsIC0yLjAsIC04LjgsIC05LjIsIC04LjAsIC05LjcsIC02LjgsIC01LjksIC03LjUsIC03LjAsIC0xLjQsIDIuMiwgLTAuOSwgLTAuNCwgLTEwLjgsIC03LjcsIC05LjgsIC04LjgsIC04LjksIC03LjMsIC05LjYsIC05LjEsIC0xMC41LCAtOC4zLCAtMTAuMiwgLTEwLjAsIC0wLjAsIDIuNSwgMC43LCAwLjUsIC03LjUsIC01LjEsIC03LjEsIC02LjcsIC03LjQsIC01LjcsIC04LjEsIC03LjAsIC01MC4wLCAtNS44LCAtNTAuMCwgLTcuMCwgOS40LCAxMi43LCAxMC4xLCAxMC4wLCAtNTAuMCwgLTEuNSwgLTExLjMsIC0zLjMsIC01LjQsIC00LjIsIC01LjYsIC02LjgsXSxcbiAgICAgICAgICAgIFstOC40LCAtNi4yLCAtOC45LCAtNS45LCAxLjgsIDAuNCwgMi43LCAxLjIsIC05LjEsIC0xLjIsIC04LjgsIC0xLjUsIC03LjIsIC0xMC41LCAtNC45LCAtOS42LCAtNS43LCAtNy40LCAtNS41LCAtNy40LCAwLjMsIC0wLjMsIDEuOCwgLTAuNCwgLTkuMCwgLTguNywgLTcuMywgLTguOSwgLTUuOSwgLTkuNCwgLTYuNCwgLTguNywgLTguNywgLTkuMSwgLTguNSwgLTkuNCwgMS40LCAwLjcsIDMuNSwgMC43LCAtNi42LCAtNS4zLCAtNC43LCAtNS44LCAtNS43LCAtNy41LCAtNS41LCAtNy4xLCAtNTAuMCwgLTguOSwgLTUwLjAsIC04LjQsIDExLjAsIDEwLjEsIDEzLjIsIDEwLjIsIC01MC4wLCAtNC4yLCAtNi4xLCAtMy42LCAtMy41LCAtOC40LCAtMS4yLCAtNi44LF0sXG4gICAgICAgICAgICBbLTkuMSwgLTUuNCwgLTEwLjQsIC00LjIsIDEuMCwgMC41LCAwLjYsIDIuNCwgLTkuNiwgLTEuNSwgLTEwLjUsIC0wLjUsIC04LjksIC0xMC41LCAtNy4yLCAtOC4zLCAtNi4zLCAtNi45LCAtNy43LCAtNS4xLCAtMC41LCAwLjEsIC0wLjYsIDIuMywgLTExLjEsIC0xMC4yLCAtMTAuNSwgLTcuMCwgLTguMywgLTkuNCwgLTkuNCwgLTYuNiwgLTkuNiwgLTkuNywgLTEwLjAsIC03LjksIDAuNywgMC42LCAwLjgsIDIuMywgLTcuMSwgLTYuNSwgLTcuMiwgLTUuMCwgLTYuNSwgLTcuNCwgLTcuNSwgLTUuNCwgLTUwLjAsIC03LjYsIC01MC4wLCAtNC44LCA5LjgsIDEwLjAsIDEwLjIsIDEyLjEsIC01MC4wLCAtMy4xLCAtMTEuNCwgLTAuNywgLTQuNiwgLTYuNiwgLTQuOSwgLTMuOSxdLFxuICAgICAgICAgICAgWy01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIDI5LjIsIC01MC4wLCAyOC41LCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIDMzLjMsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLCAtNTAuMCwgLTUwLjAsIC01MC4wLF0sXG4gICAgICAgICAgICBbLTEzLjAsIC03LjAsIC0xMy4xLCAtOC4zLCAtOS4yLCAtNi41LCAtOC45LCAtNy42LCAtOS44LCAtMC43LCAtOS4yLCAtMi4xLCAtMTIuNCwgLTEwLjMsIC0xMi40LCAtMTEuNiwgLTkuNSwgLTQuNiwgLTEwLjQsIC01LjcsIC0xMy42LCAtMTAuMSwgLTExLjQsIC0xMC45LCAtNi41LCAtMS41LCAtNi4yLCAtMy42LCAtMTIuOCwgLTguMCwgLTEyLjMsIC05LjcsIC0xNi41LCAtMTIuNywgLTE1LjYsIC0xNC4zLCAtOC43LCAtNi4wLCAtNy4xLCAtNy41LCAtOS41LCAtNC4xLCAtOC40LCAtNi4xLCAtMTEuMCwgLTguNiwgLTExLjMsIC05LjMsIC01MC4wLCAtMS41LCAtNTAuMCwgLTMuMCwgLTQuOCwgLTEuNSwgLTQuMiwgLTMuMSwgLTUwLjAsIDE2LjQsIC01LjEsIDE0LjIsIC0xMC4xLCAtNC4zLCAtMTAuMCwgLTUuNCxdLFxuICAgICAgICAgICAgWy0xMy41LCAtMTYuMywgLTExLjgsIC0xNS41LCAtMTMuNiwgLTE1LjMsIC0xMi4xLCAtMTYuMSwgLTcuNywgLTEzLjMsIC00LjIsIC0xMi42LCAtMTQuMSwgLTE2LjIsIC0xMC4zLCAtMTUuNCwgLTkuNiwgLTExLjYsIC03LjcsIC05LjgsIC0xNC4zLCAtMTcuNSwgLTExLjEsIC0xNy4yLCAtNS4zLCAtNy4xLCAtMi4yLCAtNy4xLCAtOS42LCAtMTEuOSwgLTguNywgLTExLjQsIC0xNy4xLCAtMjAuNiwgLTE1LjMsIC0xOS45LCAtMTQuMSwgLTE0LjgsIC0xMi40LCAtMTYuNSwgLTExLjcsIC0xMi44LCAtNi40LCAtMTMuNCwgLTE0LjMsIC0xNS43LCAtMTIuNywgLTE0LjAsIC01MC4wLCAtNy44LCAtNTAuMCwgLTcuMSwgLTguNywgLTExLjMsIC02LjEsIC0xMS40LCAtNTAuMCwgLTUuMSwgMTguNiwgLTQuOCwgLTguNiwgLTguMSwgLTQuNSwgLTcuMyxdLFxuICAgICAgICAgICAgWy0xMi40LCAtOC4yLCAtMTMuMCwgLTUuOSwgLTcuNywgLTcuOCwgLTcuNCwgLTUuOCwgLTguOCwgLTIuMCwgLTkuMywgLTAuNCwgLTExLjYsIC0xMS4zLCAtMTEuNiwgLTkuNCwgLTguOSwgLTUuNiwgLTEwLjAsIC0zLjIsIC0xMS41LCAtMTEuMSwgLTEwLjUsIC04LjMsIC02LjMsIC00LjksIC02LjcsIC0xLjIsIC0xMC42LCAtOS43LCAtMTEuMywgLTguMCwgLTE0LjgsIC0xMy4xLCAtMTUuNSwgLTExLjQsIC03LjUsIC03LjUsIC03LjEsIC01LjksIC04LjQsIC01LjgsIC04LjEsIC0zLjYsIC05LjksIC05LjcsIC0xMC4xLCAtOC4yLCAtNTAuMCwgLTMuMCwgLTUwLjAsIC0wLjEsIC0zLjUsIC0zLjMsIC0zLjYsIC0wLjcsIC01MC4wLCAxNC4yLCAtNC44LCAxNi40LCAtOC45LCAtNS44LCAtOC45LCAtMy40LF0sXG4gICAgICAgICAgICBbLTEwLjcsIC0xMy4yLCAtMTIuNCwgLTExLjYsIC00LjgsIC04LjQsIC02LjEsIC03LjIsIC0xMC4zLCAtMTEuOCwgLTExLjAsIC0xMS42LCAyLjgsIC0xLjcsIDAuNywgLTEuMSwgLTYuMiwgLTkuNywgLTcuMywgLTguNCwgLTUuMywgLTguNiwgLTYuMSwgLTguMywgLTEwLjUsIC0xMS4yLCAtOS44LCAtMTAuMiwgOS41LCA2LjUsIDcuNiwgNi44LCAtMTIuMSwgLTE2LjAsIC0xMy4wLCAtMTYuMiwgLTUuMiwgLTguNiwgLTcuMSwgLTcuOCwgLTEyLjUsIC0xNC40LCAtMTIuMSwgLTEzLjAsIDEuNCwgLTMuMCwgLTEuNiwgLTIuNCwgLTUwLjAsIC04LjEsIC01MC4wLCAtNy4zLCAtMC4wLCAtNS40LCAtMy41LCAtNC42LCAtNTAuMCwgLTEwLjEsIC04LjYsIC04LjksIDEzLjIsIC0wLjksIDkuNywgLTAuMyxdLFxuICAgICAgICAgICAgWy0xOC4xLCAtMTIuMywgLTE5LjQsIC0xNC4yLCAtMTIuMiwgLTkuNSwgLTExLjUsIC0xMC44LCAtMTcuOSwgLTExLjksIC0xOC4yLCAtMTMuOSwgLTYuNCwgLTMuNywgLTYuOCwgLTUuNCwgLTEyLjgsIC01LjksIC0xMy42LCAtNy40LCAtMTMuNywgLTkuOSwgLTEyLjksIC0xMi43LCAtMTYuMiwgLTExLjYsIC0xNS4yLCAtMTIuNywgLTMuMiwgMC41LCAtMy4zLCAtMS44LCAtMTguOSwgLTE2LjYsIC0xOC44LCAtMTkuMiwgLTEyLjUsIC05LjQsIC0xMC42LCAtMTEuMSwgLTE3LjMsIC0xNC4xLCAtMTYuMiwgLTE2LjAsIC03LjksIC0zLjcsIC03LjgsIC02LjMsIC01MC4wLCAzLjYsIC01MC4wLCAyLjMsIC04LjYsIC00LjIsIC04LjQsIC02LjYsIC01MC4wLCAtNC4zLCAtOC4xLCAtNS44LCAtMC45LCAxNC4yLCAtMS44LCAxMS42LF0sXG4gICAgICAgICAgICBbLTExLjgsIC0xMy4xLCAtMTEuNSwgLTEyLjAsIC02LjIsIC04LjMsIC01LjQsIC03LjQsIC0xMS44LCAtMTIuMywgLTExLjEsIC0xMS40LCAwLjUsIC0yLjUsIDIuNCwgLTEuNiwgLTYuOCwgLTkuOSwgLTYuNCwgLTguOSwgLTYuMSwgLTguNiwgLTUuMCwgLTcuOCwgLTEwLjQsIC0xMS42LCAtOC41LCAtOS45LCA4LjIsIDYuNCwgOC43LCA2LjksIC0xMi40LCAtMTcuMCwgLTEyLjYsIC0xNS44LCAtNi41LCAtOC41LCAtNS4wLCAtNy44LCAtMTMuMiwgLTEzLjYsIC0xMC4zLCAtMTMuNywgLTAuNywgLTMuMiwgLTAuMywgLTIuNCwgLTUwLjAsIC05LjQsIC01MC4wLCAtOC43LCAtMi4xLCAtNS42LCAtMS4yLCAtNC45LCAtNTAuMCwgLTEwLjAsIC00LjUsIC04LjksIDkuNywgLTEuOCwgMTEuMywgLTAuOSxdLFxuICAgICAgICAgICAgWy0xNy4yLCAtMTMuMywgLTE3LjgsIC0xMS42LCAtMTEuMCwgLTExLjEsIC0xMC40LCAtOS4wLCAtMTYuMCwgLTEyLjcsIC0xNi4xLCAtMTEuMSwgLTUuMiwgLTUuNCwgLTYuMCwgLTMuMywgLTExLjgsIC03LjMsIC0xMy4zLCAtNS45LCAtMTIuNywgLTExLjksIC0xMS45LCAtOS4zLCAtMTUuMiwgLTE1LjAsIC0xNC45LCAtMTEuMCwgLTIuOCwgLTEuOCwgLTIuOSwgMC40LCAtMTcuNCwgLTE4LjQsIC0xOC4zLCAtMTUuOSwgLTEwLjcsIC0xMS4yLCAtMTAuNiwgLTkuMCwgLTE1LjQsIC0xNC44LCAtMTUuOCwgLTEzLjMsIC02LjgsIC01LjksIC03LjIsIC0zLjksIC01MC4wLCAyLjAsIC01MC4wLCAzLjksIC03LjAsIC02LjgsIC02LjgsIC0zLjksIC01MC4wLCAtNS40LCAtNy4zLCAtMy40LCAtMC4zLCAxMS42LCAtMC45LCAxNC4xLF1dO1xuICAgICAgICB0aGlzLlRSQU5TID0gW1s1LCAwLCAwLCA0XSxcbiAgICAgICAgICAgIFswLCA1LCA0LCAwXSxcbiAgICAgICAgICAgIFswLCA0LCA1LCAwXSxcbiAgICAgICAgICAgIFs0LCAwLCAwLCA1XV07XG4gICAgICAgIHRoaXMuQ09OQkxPID0geyAnQSc6IDAsICdSJzogMSwgJ04nOiAyLCAnRCc6IDMsICdDJzogNCwgJ1EnOiA1LCAnRSc6IDYsICdHJzogNywgJ0gnOiA4LCAnSSc6IDksICdMJzogMTAsICdLJzogMTEsICdNJzogMTIsICdGJzogMTMsICdQJzogMTQsICdTJzogMTUsICdUJzogMTYsICdXJzogMTcsICdZJzogMTgsICdWJzogMTksICdCJzogMjAsICdaJzogMjEsICdYJzogMjIsICcqJzogMjMgfTtcbiAgICAgICAgdGhpcy5DT05OVUNMID0geyAnQSc6IDAsICdUJzogMSwgJ0MnOiAyLCAnRyc6IDMgfTtcbiAgICAgICAgdGhpcy5DT05TQ0hOID0geyAnQUFBJzogMCwgJ0FBQyc6IDEsICdBQUcnOiAyLCAnQUFUJzogMywgJ0FDQSc6IDQsICdBQ0MnOiA1LCAnQUNHJzogNiwgJ0FDVCc6IDcsICdBR0EnOiA4LCAnQUdDJzogOSwgJ0FHRyc6IDEwLCAnQUdUJzogMTEsICdBVEEnOiAxMiwgJ0FUQyc6IDEzLCAnQVRHJzogMTQsICdBVFQnOiAxNSwgJ0NBQSc6IDE2LCAnQ0FDJzogMTcsICdDQUcnOiAxOCwgJ0NBVCc6IDE5LCAnQ0NBJzogMjAsICdDQ0MnOiAyMSwgJ0NDRyc6IDIyLCAnQ0NUJzogMjMsICdDR0EnOiAyNCwgJ0NHQyc6IDI1LCAnQ0dHJzogMjYsICdDR1QnOiAyNywgJ0NUQSc6IDI4LCAnQ1RDJzogMjksICdDVEcnOiAzMCwgJ0NUVCc6IDMxLCAnR0FBJzogMzIsICdHQUMnOiAzMywgJ0dBRyc6IDM0LCAnR0FUJzogMzUsICdHQ0EnOiAzNiwgJ0dDQyc6IDM3LCAnR0NHJzogMzgsICdHQ1QnOiAzOSwgJ0dHQSc6IDQwLCAnR0dDJzogNDEsICdHR0cnOiA0MiwgJ0dHVCc6IDQzLCAnR1RBJzogNDQsICdHVEMnOiA0NSwgJ0dURyc6IDQ2LCAnR1RUJzogNDcsICdUQUEnOiA0OCwgJ1RBQyc6IDQ5LCAnVEFHJzogNTAsICdUQVQnOiA1MSwgJ1RDQSc6IDUyLCAnVENDJzogNTMsICdUQ0cnOiA1NCwgJ1RDVCc6IDU1LCAnVEdBJzogNTYsICdUR0MnOiA1NywgJ1RHRyc6IDU4LCAnVEdUJzogNTksICdUVEEnOiA2MCwgJ1RUQyc6IDYxLCAnVFRHJzogNjIsICdUVFQnOiA2MyB9O1xuICAgICAgICB0aGlzLnNldE1ldGhvZChhbGlnbkdyaWRfKTtcbiAgICAgICAgdGhpcy5zZXRTZXF1ZW5jZXMoc2VxMV8sIHNlcTJfKTtcbiAgICAgICAgdGhpcy5zZXRHYXAoZ2FwXyk7XG4gICAgfVxuICAgIGZpbGxOZWVkbGVtYW4oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMubGVuMTsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVswXS52YWx1ZSA9IC1pICogdGhpcy5nYXA7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVswXS5wYXJlbnRJID0gaSAtIDE7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVswXS5wYXJlbnRKID0gMDtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmxlbjI7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbMF1baV0udmFsdWUgPSAtaSAqIHRoaXMuZ2FwO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbMF1baV0ucGFyZW50SSA9IDA7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFswXVtpXS5wYXJlbnRKID0gaSAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmlsbE9uZShpLCBqKSB7XG4gICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlID0gTWF0aC5tYXgodGhpcy5kcEdyaWRbaSAtIDFdW2ogLSAxXS52YWx1ZSArIHRoaXMuc2NvcmVzW2kgLSAxXVtqIC0gMV0sIE1hdGgubWF4KHRoaXMuZHBHcmlkW2kgLSAxXVtqXS52YWx1ZSAtIHRoaXMuZ2FwLCB0aGlzLmRwR3JpZFtpXVtqIC0gMV0udmFsdWUgLSB0aGlzLmdhcCkpO1xuICAgICAgICBpZiAodGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPT0gdGhpcy5kcEdyaWRbaSAtIDFdW2ogLSAxXS52YWx1ZSArIHRoaXMuc2NvcmVzW2kgLSAxXVtqIC0gMV0pIHtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEkgPSBpIC0gMTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSBqIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZSA9PSB0aGlzLmRwR3JpZFtpIC0gMV1bal0udmFsdWUgLSB0aGlzLmdhcCkge1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IGkgLSAxO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SiA9IGo7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID0gaTtcbiAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSBqIC0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBncmlkRnJvbU5hbWUocGF0aCkge1xuICAgICAgICBzd2l0Y2ggKHBhdGgpIHtcbiAgICAgICAgICAgIGNhc2UgJ0JMT1NVTTQ1JzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuQkxPU1VNNDU7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU01MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTUwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkxPU1VNNjInOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5CTE9TVU02MjtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JMT1NVTTgwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuQkxPU1VNODA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCTE9TVU05MCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLkJMT1NVTTkwO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTkJMTztcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUEFNMzAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5QQU0zMDtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5DT05CTE87XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BBTTcwJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuUEFNNzA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQQU0yNTAnOlxuICAgICAgICAgICAgICAgIHRoaXMuYWxpZ25HcmlkID0gdGhpcy5QQU0yNTA7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OQkxPO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcCA9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdOVUNMRU9USURFUyc6XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlnbkdyaWQgPSB0aGlzLk5VQ0xFT1RJREVTO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTk5VQ0w7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RSQU5TJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuVFJBTlM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuQ09OTlVDTDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnU0NITkVJREVSJzpcbiAgICAgICAgICAgICAgICB0aGlzLmFsaWduR3JpZCA9IHRoaXMuU0NITkVJREVSO1xuICAgICAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLkNPTlNDSE47XG4gICAgICAgICAgICAgICAgdGhpcy5zdGVwID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGxTY29yZXMoKTtcbiAgICB9XG4gICAgY29uc3RydWN0UmVzdWx0KGksIGopIHtcbiAgICAgICAgbGV0IHJlczEgPSBcIlwiLCByZXMyID0gXCJcIiwgZ2FwUyA9IFwiXCI7XG4gICAgICAgIGxldCB0b3RhbCA9IHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3RlcDsgaSsrKSB7XG4gICAgICAgICAgICBnYXBTICs9ICd8JztcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaSA+IDAgfHwgaiA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID09IGkpIHtcbiAgICAgICAgICAgICAgICByZXMxID0gZ2FwUyArIHJlczE7XG4gICAgICAgICAgICAgICAgcmVzMiA9IHRoaXMuc2VxMi5zdWJzdHIoKGogLSAxKSAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKSArIHJlczI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRKID09IGopIHtcbiAgICAgICAgICAgICAgICByZXMyID0gZ2FwUyArIHJlczI7XG4gICAgICAgICAgICAgICAgcmVzMSA9IHRoaXMuc2VxMS5zdWJzdHIoKGkgLSAxKSAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKSArIHJlczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaSAtIDEgPj0gMClcbiAgICAgICAgICAgICAgICAgICAgcmVzMSA9IHRoaXMuc2VxMS5zdWJzdHIoKGkgLSAxKSAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKSArIHJlczE7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXMxID0gZ2FwUyArIHJlczE7XG4gICAgICAgICAgICAgICAgaWYgKGogLSAxID49IDApXG4gICAgICAgICAgICAgICAgICAgIHJlczIgPSB0aGlzLnNlcTIuc3Vic3RyKChqIC0gMSkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCkgKyByZXMyO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzMiA9IGdhcFMgKyByZXMyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRlbXBJID0gaTtcbiAgICAgICAgICAgIGkgPSB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJO1xuICAgICAgICAgICAgaiA9IHRoaXMuZHBHcmlkW3RlbXBJXVtqXS5wYXJlbnRKO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWxpZ25lZChyZXMxLCByZXMyLCB0b3RhbCk7XG4gICAgfVxuICAgIGZpbGxTY29yZXMoKSB7XG4gICAgICAgIHRoaXMuc2NvcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW4xOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuc2NvcmVzLnB1c2goW10pO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxlbjI7IGorKykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2NvcmVzW2ldLnB1c2godGhpcy5hbGlnbkdyaWRbdGhpcy5jb25uZWN0aW9uc1t0aGlzLnNlcTEuc3Vic3RyKGkgKiB0aGlzLnN0ZXAsIHRoaXMuc3RlcCldXVt0aGlzLmNvbm5lY3Rpb25zW3RoaXMuc2VxMi5zdWJzdHIoaiAqIHRoaXMuc3RlcCwgdGhpcy5zdGVwKV1dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0eXBlUmVjKCkge1xuICAgICAgICBpZiAoL1tBVEdDXSovLnRlc3QodGhpcy5zZXExKSAmJiAvW0FUR0NdKi8udGVzdCh0aGlzLnNlcTIpKVxuICAgICAgICAgICAgcmV0dXJuIFwiTlVDTEVPVElERVNcIjtcbiAgICAgICAgaWYgKC9bQVJORENRRUdISUxLTUZQU1RXWVZCWlgqXSovLnRlc3QodGhpcy5zZXExKSAmJiAvW0FSTkRDUUVHSElMS01GUFNUV1lWQlpYKl0qLy50ZXN0KHRoaXMuc2VxMikpXG4gICAgICAgICAgICByZXR1cm4gXCJCTE9TVU02MlwiO1xuICAgICAgICB0aHJvdyBFcnJvcihcIkNhbid0IHJlY29nbml6ZSBzZXF1ZW5jZSB0eXBlXCIpO1xuICAgIH1cbiAgICBuZWVkbGVtYW5XdW5jaCgpIHtcbiAgICAgICAgdGhpcy5kcEdyaWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbjEgKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByb3cgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW4yICsgMTsgaisrKVxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKG5ldyBDZWxsKCkpO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWQucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsbE5lZWRsZW1hbigpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmxlbjE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gdGhpcy5sZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxPbmUoaSwgaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0UmVzdWx0KHRoaXMubGVuMSwgdGhpcy5sZW4yKTtcbiAgICB9XG4gICAgc21pdGhXYXRlcm1hbigpIHtcbiAgICAgICAgdGhpcy5kcEdyaWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbjEgKyAxOyBpKyspIHtcbiAgICAgICAgICAgIGxldCByb3cgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5sZW4yICsgMTsgaisrKVxuICAgICAgICAgICAgICAgIHJvdy5wdXNoKG5ldyBDZWxsKCkpO1xuICAgICAgICAgICAgdGhpcy5kcEdyaWQucHVzaChyb3cpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBiZXN0VmFsID0gMDtcbiAgICAgICAgbGV0IGJlc3RJID0gMCwgYmVzdEogPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLmxlbjE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPD0gdGhpcy5sZW4yOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGxPbmUoaSwgaik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHBHcmlkW2ldW2pdLnZhbHVlIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRwR3JpZFtpXVtqXS5wYXJlbnRJID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SiA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZHBHcmlkW3RoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEldW3RoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEpdLnZhbHVlID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcEdyaWRbaV1bal0ucGFyZW50SSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHBHcmlkW2ldW2pdLnBhcmVudEogPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcEdyaWRbaV1bal0udmFsdWUgPiBiZXN0VmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RWYWwgPSB0aGlzLmRwR3JpZFtpXVtqXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEkgPSBpO1xuICAgICAgICAgICAgICAgICAgICBiZXN0SiA9IGo7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFJlc3VsdChiZXN0SSwgYmVzdEopO1xuICAgIH1cbiAgICBzZXRTZXF1ZW5jZXMoc2VxMV8sIHNlcTJfKSB7XG4gICAgICAgIHRoaXMuc2VxMSA9IHNlcTFfO1xuICAgICAgICB0aGlzLnNlcTIgPSBzZXEyXztcbiAgICAgICAgdGhpcy5sZW4xID0gdGhpcy5zZXExLmxlbmd0aCAvIHRoaXMuc3RlcDtcbiAgICAgICAgdGhpcy5sZW4yID0gdGhpcy5zZXEyLmxlbmd0aCAvIHRoaXMuc3RlcDtcbiAgICAgICAgdGhpcy5maWxsU2NvcmVzKCk7XG4gICAgfVxuICAgIHNldEdhcChnYXBfKSB7XG4gICAgICAgIHRoaXMuZ2FwID0gZ2FwXztcbiAgICB9XG4gICAgc2V0TWV0aG9kKGFsaWduR3JpZF8gPSBcIlwiKSB7XG4gICAgICAgIGlmIChhbGlnbkdyaWRfID09IFwiQVVUT1wiKSB7XG4gICAgICAgICAgICBhbGlnbkdyaWRfID0gdGhpcy50eXBlUmVjKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkRnJvbU5hbWUoYWxpZ25HcmlkXyk7XG4gICAgfVxufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBjYXRlZ29yeSwgdGVzdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0IHsgX3Rlc3RQYWxldHRlTiwgX3Rlc3RQYWxldHRlQUEgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdGVzdHMvcGFsZXR0ZXMudGVzdCc7XG5jYXRlZ29yeSgnUGFsZXR0ZXMnLCAoKSA9PiB7XG4gICAgdGVzdCgndGVzdFBhbGV0dGVOJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0UGFsZXR0ZU4oKTsgfSkpO1xuICAgIHRlc3QoJ3Rlc3RQYWxldHRlQUEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3RQYWxldHRlQUEoKTsgfSkpO1xufSk7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCB0ZXN0LCBleHBlY3QsIGV4cGVjdE9iamVjdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IE51Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL251Y2xlb3RpZGVzJztcbmltcG9ydCB7IEFtaW5vYWNpZHNQYWxldHRlcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy9hbWlub2FjaWRzJztcbmltcG9ydCB7IFdlYkxvZ28gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nbyc7XG5pbXBvcnQgeyBVbmtub3duU2VxUGFsZXR0ZSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy91bmtub3duJztcbmNhdGVnb3J5KCdXZWJMb2dvJywgKCkgPT4ge1xuICAgIGNvbnN0IGNzdkRmTjEgPSBgc2VxXG5BQ0dUQ1RcbkNBR1RHVFxuVFRDQUFDXG5gO1xuICAgIC8qKiAyIC0gaXMgYW4gZXJyb3IgbW9ub21lclxuICAgICAqIFRoaXMgc2VxdWVuY2Ugc2V0IHNob3VsZCBiZSBjbGFzc2lmaWVkIGFzIG51Y2xlb3RpZGVzIHNlcXVlbmNlcy5cbiAgICAgKiBTbWFsbCBlcnJvciwgbm90IHNpbWlsYXIgdG8gYW1pbm8gYWNpZHMuXG4gICAgICovXG4gICAgY29uc3QgY3N2RGZOMWUgPSBgc2VxXG5BQ0dUQVRcbkNBR1RUR1xuVFRDRzJDXG5gO1xuICAgIC8qKiBQdXJlIGFtaW5vIGFjaWRzIHNlcXVlbmNlICovXG4gICAgY29uc3QgY3N2RGZBQTEgPSBgc2VxXG5GV1BIRVlWXG5ZTlJRV1lWXG5NS1BTRVlWXG5gO1xuICAgIC8qKiBBIC0gYWxhbmluZSwgRyAtIGdseWNpbmUsIFQgLT0gdGhyZW9uaW5lLCBDIC0gY3lzdGVpbmUsIFcgLSB0cnlwdG9waGFuXG4gICAgICogVGhpcyBzZXF1ZW5jZSBzZXQgc2hvdWxkIGJlIGRldGVjdGVkIGFzIGFtaW5vIGFjaWRzIG1vcmUgdGhhbiBudWNsZW90aWRlcy5cbiAgICAgKi9cbiAgICBjb25zdCBjc3ZEZkFBMiA9IGBzZXFcbkFHVENBVFxuQUdUQ0dDXG5BR1RDQVRXXG5gO1xuICAgIC8qKiBUaGlzIHNlcXVlbmNlIHNldCBzaG91bGQgYmUgcmVjb2duaXplZCBhcyB1bmtub3duLiAqL1xuICAgIGNvbnN0IGNzdkRmWCA9IGBzZXFcblhaSnt9MlxuNVo0NzMzXG4zWjY+PC9cbjY3NTY4N1xuYDtcbiAgICAvLyBhbm9ueW1vdXMgZnVuY3Rpb25zIHNwZWNpZmllZCBpbiB0ZXN0KCkgcmVnaXN0ZXJpbmcgbXVzdCByZXR1cm4gUHJvbWlzZTxhbnk+XG4gICAgdGVzdCgndGVzdEdldFN0YXRzJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0R2V0U3RhdHMoY3N2RGZOMSk7IH0pKTtcbiAgICB0ZXN0KCd0ZXN0R2V0QWxwaGFiZXRTaW1pbGFyaXR5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0R2V0QWxwaGFiZXRTaW1pbGFyaXR5KCk7IH0pKTtcbiAgICB0ZXN0KCd0ZXN0UGlja3VwUGFsZXR0ZU4xJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0UGlja3VwUGFsZXR0ZU4xKGNzdkRmTjEpOyB9KSk7XG4gICAgdGVzdCgndGVzdFBpY2t1cFBhbGV0dGVOMWUnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3RQaWNrdXBQYWxldHRlTjFlKGNzdkRmTjFlKTsgfSkpO1xuICAgIHRlc3QoJ3Rlc3RQaWNrdXBQYWxldHRlQUExJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0UGlja3VwUGFsZXR0ZUFBMShjc3ZEZkFBMSk7IH0pKTtcbiAgICB0ZXN0KCd0ZXN0UGlja3VwUGFsZXR0ZVgnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3RQaWNrdXBQYWxldHRlWChjc3ZEZlgpOyB9KSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBfdGVzdEdldFN0YXRzKGNzdkRmTjEpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZk4xID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoY3N2RGZOMSk7XG4gICAgICAgIGNvbnN0IHNlcUNvbCA9IGRmTjEuY29sKCdzZXEnKTtcbiAgICAgICAgY29uc3Qgc3RhdHMgPSBXZWJMb2dvLmdldFN0YXRzKHNlcUNvbCwgNSwgV2ViTG9nby5zcGxpdHRlckFzRmFzdGEpO1xuICAgICAgICBleHBlY3RPYmplY3Qoc3RhdHMuZnJlcSwge1xuICAgICAgICAgICAgJ0EnOiA0LFxuICAgICAgICAgICAgJ0MnOiA1LFxuICAgICAgICAgICAgJ0cnOiAzLFxuICAgICAgICAgICAgJ1QnOiA2XG4gICAgICAgIH0pO1xuICAgICAgICBleHBlY3Qoc3RhdHMuc2FtZUxlbmd0aCwgdHJ1ZSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RHZXRBbHBoYWJldFNpbWlsYXJpdHkoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZnJlcSA9IHtcbiAgICAgICAgICAgICdBJzogMjA0MSxcbiAgICAgICAgICAgICdDJzogMzAxNSxcbiAgICAgICAgICAgICdHJzogMzAxNSxcbiAgICAgICAgICAgICdUJzogMjA0OCxcbiAgICAgICAgICAgICctJzogMTAwMFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhbHBoYWJldCA9IG5ldyBTZXQoT2JqZWN0LmtleXMoTnVjbGVvdGlkZXMuTmFtZXMpKTtcbiAgICAgICAgY29uc3QgcmVzID0gV2ViTG9nby5nZXRBbHBoYWJldFNpbWlsYXJpdHkoZnJlcSwgYWxwaGFiZXQpO1xuICAgICAgICBleHBlY3QocmVzID4gMC42LCB0cnVlKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfdGVzdFBpY2t1cFBhbGV0dGVOMShjc3ZEZk4xKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3ZEZk4xKTtcbiAgICAgICAgY29uc3QgY29sID0gZGYuY29sKCdzZXEnKTtcbiAgICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoY29sKTtcbiAgICAgICAgZXhwZWN0KGNwIGluc3RhbmNlb2YgTnVjbGVvdGlkZXNQYWxldHRlcywgdHJ1ZSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RQaWNrdXBQYWxldHRlTjFlKGNzdkRmTjFlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3ZEZk4xZSk7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbCgnc2VxJyk7XG4gICAgICAgIGNvbnN0IGNwID0gV2ViTG9nby5waWNrVXBQYWxldHRlKGNvbCk7XG4gICAgICAgIGV4cGVjdChjcCBpbnN0YW5jZW9mIE51Y2xlb3RpZGVzUGFsZXR0ZXMsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGlja3VwUGFsZXR0ZUFBMShjc3ZEZkFBMSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoY3N2RGZBQTEpO1xuICAgICAgICBjb25zdCBjb2wgPSBkZi5jb2woJ3NlcScpO1xuICAgICAgICBjb25zdCBjcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZShjb2wpO1xuICAgICAgICBleHBlY3QoY3AgaW5zdGFuY2VvZiBBbWlub2FjaWRzUGFsZXR0ZXMsIHRydWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0UGlja3VwUGFsZXR0ZVgoY3N2RGZYKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3ZEZlgpO1xuICAgICAgICBjb25zdCBjb2wgPSBkZi5jb2woJ3NlcScpO1xuICAgICAgICBjb25zdCBjcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZShjb2wpO1xuICAgICAgICBleHBlY3QoY3AgaW5zdGFuY2VvZiBVbmtub3duU2VxUGFsZXR0ZSwgdHJ1ZSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RQaWNrdXBQYWxldHRlQUEyKGRmQUEyKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc2VxQ29sID0gZGZBQTIuY29sKCdzZXEnKTtcbiAgICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoc2VxQ29sKTtcbiAgICAgICAgZXhwZWN0KGNwIGluc3RhbmNlb2YgQW1pbm9hY2lkc1BhbGV0dGVzLCB0cnVlKTtcbiAgICB9KTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgYWZ0ZXIsIGJlZm9yZSwgY2F0ZWdvcnksIGV4cGVjdCwgdGVzdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGNyZWF0ZVRhYmxlVmlldywgcmVhZERhdGFmcmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0RW1iZWRkaW5nQ29sc05hbWVzLCBzZXF1ZW5jZVNwYWNlIH0gZnJvbSAnLi4vdXRpbHMvc2VxdWVuY2Utc3BhY2UnO1xuaW1wb3J0IHsgZHJhd1Rvb2x0aXAsIHNlcXVlbmNlR2V0U2ltaWxhcml0aWVzIH0gZnJvbSAnLi4vdXRpbHMvc2VxdWVuY2UtYWN0aXZpdHktY2xpZmZzJztcbmltcG9ydCB7IGdldEFjdGl2aXR5Q2xpZmZzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvdmlld2Vycy9hY3Rpdml0eS1jbGlmZnMnO1xuY2F0ZWdvcnkoJ2FjdGl2aXR5Q2xpZmZzJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IGFjdENsaWZmc1RhYmxlVmlldztcbiAgICBsZXQgYWN0Q2xpZmZzRGY7XG4gICAgYmVmb3JlKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBhY3RDbGlmZnNUYWJsZVZpZXcgPSB5aWVsZCBjcmVhdGVUYWJsZVZpZXcoJ3NhbXBsZV9NU0EuY3N2Jyk7XG4gICAgICAgIGFjdENsaWZmc0RmID0geWllbGQgcmVhZERhdGFmcmFtZSgnc2FtcGxlX01TQS5jc3YnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnYWN0aXZpdHlDbGlmZnNPcGVuJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGF4ZXNOYW1lcyA9IGdldEVtYmVkZGluZ0NvbHNOYW1lcyhhY3RDbGlmZnNEZik7XG4gICAgICAgIGNvbnN0IHVuaXRzID0gYWN0Q2xpZmZzRGYuY29sKCdNU0EnKS50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgJ1NQRSc6IHsgY3ljbGVzOiAyMDAwLCBsYW1iZGE6IDEuMCwgZGxhbWJkYTogMC4wMDA1IH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNjYXR0ZXJQbG90ID0geWllbGQgZ2V0QWN0aXZpdHlDbGlmZnMoYWN0Q2xpZmZzRGYsIGFjdENsaWZmc0RmLmNvbCgnTVNBJyksIGF4ZXNOYW1lcywgJ0FjdGl2aXR5IGNsaWZmcycsIGFjdENsaWZmc0RmLmNvbCgnQWN0aXZpdHknKSwgNTAsICdMZXZlbnNodGVpbicsICd0LVNORScsIERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSwgdW5pdHMsIHNlcXVlbmNlU3BhY2UsIHNlcXVlbmNlR2V0U2ltaWxhcml0aWVzLCBkcmF3VG9vbHRpcCk7XG4gICAgICAgIGV4cGVjdChzY2F0dGVyUGxvdCAhPSBudWxsLCB0cnVlKTtcbiAgICAgICAgY29uc3QgY2xpZmZzTGluayA9IEFycmF5LmZyb20oc2NhdHRlclBsb3Qucm9vdC5jaGlsZHJlbilcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0KSA9PiBpdC5jbGFzc05hbWUgPT09ICd1aS1idG4gdWktYnRuLW9rJyk7XG4gICAgICAgIGV4cGVjdChjbGlmZnNMaW5rWzBdLmlubmVyVGV4dCwgJzEwMSBjbGlmZnMnKTtcbiAgICB9KSk7XG4gICAgYWZ0ZXIoKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGFjdENsaWZmc1RhYmxlVmlldy5jbG9zZSgpO1xuICAgIH0pKTtcbn0pKTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgY2F0ZWdvcnksIGV4cGVjdEFycmF5LCB0ZXN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBOb3RhdGlvbkNvbnZlcnRlciB9IGZyb20gJy4uL3V0aWxzL25vdGF0aW9uLWNvbnZlcnRlcic7XG4vLyBpbXBvcnQge21tU2VtVHlwZX0gZnJvbSAnLi4vY29uc3QnO1xuLy8gaW1wb3J0IHtpbXBvcnRGYXN0YX0gZnJvbSAnLi4vcGFja2FnZSc7XG5jYXRlZ29yeSgnY29udmVydGVycycsICgpID0+IHtcbiAgICBsZXQgU2FtcGxlcztcbiAgICAoZnVuY3Rpb24gKFNhbXBsZXMpIHtcbiAgICAgICAgU2FtcGxlc1tcImZhc3RhUHRcIl0gPSBcImZhc3RhUHRcIjtcbiAgICAgICAgU2FtcGxlc1tcInNlcGFyYXRvclB0XCJdID0gXCJzZXBhcmF0b3JQdFwiO1xuICAgICAgICBTYW1wbGVzW1wiaGVsbVB0XCJdID0gXCJoZWxtUHRcIjtcbiAgICAgICAgU2FtcGxlc1tcImZhc3RhRG5hXCJdID0gXCJmYXN0YURuYVwiO1xuICAgICAgICBTYW1wbGVzW1wic2VwYXJhdG9yRG5hXCJdID0gXCJzZXBhcmF0b3JEbmFcIjtcbiAgICAgICAgU2FtcGxlc1tcImhlbG1EbmFcIl0gPSBcImhlbG1EbmFcIjtcbiAgICAgICAgU2FtcGxlc1tcImZhc3RhUm5hXCJdID0gXCJmYXN0YVJuYVwiO1xuICAgICAgICBTYW1wbGVzW1wic2VwYXJhdG9yUm5hXCJdID0gXCJzZXBhcmF0b3JSbmFcIjtcbiAgICAgICAgU2FtcGxlc1tcImhlbG1SbmFcIl0gPSBcImhlbG1SbmFcIjtcbiAgICB9KShTYW1wbGVzIHx8IChTYW1wbGVzID0ge30pKTtcbiAgICBjb25zdCBfY3N2VHh0cyA9IHtcbiAgICAgICAgZmFzdGFQdDogYHNlcVxuRldQSEVZXG5ZTlJRV1lWXG5NS1BTRVlWXG5gLFxuICAgICAgICBzZXBhcmF0b3JQdDogYHNlcVxuRi1XLVAtSC1FLVlcblktTi1SLVEtVy1ZLVZcbk0tSy1QLVMtRS1ZLVZcbmAsXG4gICAgICAgIGhlbG1QdDogYHNlcVxuUEVQVElERTF7Ri5XLlAuSC5FLll9JCQkXG5QRVBUSURFMXtZLk4uUi5RLlcuWS5WfSQkJFxuUEVQVElERTF7TS5LLlAuUy5FLlkuVn0kJCRcbmAsXG4gICAgICAgIGZhc3RhRG5hOiBgc2VxXG5BQ0dUQ1xuQ0FHVEdUXG5UVENBQUNcbmAsXG4gICAgICAgIHNlcGFyYXRvckRuYTogYHNlcVxuQS9DL0cvVC9DXG5DL0EvRy9UL0cvVFxuVC9UL0MvQS9BL0NcbmAsXG4gICAgICAgIGhlbG1EbmE6IGBzZXFcbkROQTF7RChBKVAuRChDKVAuRChHKVAuRChUKVAuRChDKVB9JCQkXG5ETkExe0QoQylQLkQoQSlQLkQoRylQLkQoVClQLkQoRylQLkQoVClQfSQkJFxuRE5BMXtEKFQpUC5EKFQpUC5EKEMpUC5EKEEpUC5EKEEpUC5EKEMpUH0kJCRcbmAsXG4gICAgICAgIGZhc3RhUm5hOiBgc2VxXG5BQ0dVQ1xuQ0FHVUdVXG5VVUNBQUNcbmAsXG4gICAgICAgIHNlcGFyYXRvclJuYTogYHNlcVxuQSpDKkcqVSpDXG5DKkEqRypVKkcqVVxuVSpVKkMqQSpBKkNcbmAsXG4gICAgICAgIGhlbG1SbmE6IGBzZXFcblJOQTF7UihBKVAuUihDKVAuUihHKVAuUihVKVAuUihDKVB9JCQkXG5STkExe1IoQylQLlIoQSlQLlIoRylQLlIoVSlQLlIoRylQLlIoVSlQfSQkJFxuUk5BMXtSKFUpUC5SKFUpUC5SKEMpUC5SKEEpUC5SKEEpUC5SKEMpUH0kJCRcbmAsXG4gICAgfTtcbiAgICBjb25zdCBfY3N2RGZzID0ge307XG4gICAgLyoqIEFsc28gZGV0ZWN0cyBzZW1hbnRpYyB0eXBlc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPERHLkRhdGFGcmFtZT59XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVhZENzdihrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIF9jc3ZEZnMpKSB7XG4gICAgICAgICAgICBfY3N2RGZzW2tleV0gPSAoKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzdiA9IF9jc3ZUeHRzW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3YpO1xuICAgICAgICAgICAgICAgIHlpZWxkIGdyb2suZGF0YS5kZXRlY3RTZW1hbnRpY1R5cGVzKGRmKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGY7XG4gICAgICAgICAgICB9KSkoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX2NzdkRmc1trZXldO1xuICAgIH1cbiAgICA7XG4gICAgZnVuY3Rpb24gY29udmVydGVyKHRndE5vdGF0aW9uLCB0Z3RTZXBhcmF0b3IgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc3JjQ29sKSB7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBuZXcgTm90YXRpb25Db252ZXJ0ZXIoc3JjQ29sKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc0NvbCA9IGNvbnZlcnRlci5jb252ZXJ0KHRndE5vdGF0aW9uLCB0Z3RTZXBhcmF0b3IpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc0NvbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgO1xuICAgIGZ1bmN0aW9uIF90ZXN0Q29udmVydChzcmNLZXksIGNvbnZlcnRlciwgdGd0S2V5KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBzcmNEZiA9IHlpZWxkIHJlYWRDc3Yoc3JjS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IHNyY0NvbCA9IHNyY0RmLmNvbCgnc2VxJyk7XG4gICAgICAgICAgICBjb25zdCByZXNDb2wgPSBjb252ZXJ0ZXIoc3JjQ29sKTtcbiAgICAgICAgICAgIGNvbnN0IHRndERmID0geWllbGQgcmVhZENzdih0Z3RLZXkpO1xuICAgICAgICAgICAgY29uc3QgdGd0Q29sID0gdGd0RGYuY29sKCdzZXEnKTtcbiAgICAgICAgICAgIGV4cGVjdEFycmF5KHJlc0NvbC50b0xpc3QoKSwgdGd0Q29sLnRvTGlzdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRlc3QoJ3Rlc3RGYXN0YVB0VG9TZXBhcmF0b3InLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuZmFzdGFQdCwgY29udmVydGVyKFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovLCAnLScpLCBTYW1wbGVzLnNlcGFyYXRvclB0KTtcbiAgICB9KSk7XG4gICAgdGVzdCgndGVzdEZhc3RhRG5hVG9TZXBhcmF0b3InLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuZmFzdGFEbmEsIGNvbnZlcnRlcihcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLywgJy8nKSwgU2FtcGxlcy5zZXBhcmF0b3JEbmEpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0RmFzdGFSbmFUb1NlcGFyYXRvcicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdENvbnZlcnQoU2FtcGxlcy5mYXN0YVJuYSwgY29udmVydGVyKFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovLCAnKicpLCBTYW1wbGVzLnNlcGFyYXRvclJuYSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RGYXN0YVB0VG9IZWxtJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLmZhc3RhUHQsIGNvbnZlcnRlcihcIkhFTE1cIiAvKiBOT1RBVElPTi5IRUxNICovKSwgU2FtcGxlcy5oZWxtUHQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0RmFzdGFEbmFUb0hlbG0nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuZmFzdGFEbmEsIGNvbnZlcnRlcihcIkhFTE1cIiAvKiBOT1RBVElPTi5IRUxNICovKSwgU2FtcGxlcy5oZWxtRG5hKTtcbiAgICB9KSk7XG4gICAgdGVzdCgndGVzdEZhc3RhUm5hVG9IZWxtJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0Q29udmVydChTYW1wbGVzLmZhc3RhUm5hLCBjb252ZXJ0ZXIoXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyksIFNhbXBsZXMuaGVsbVJuYSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RTZXBhcmF0b3JQdFRvRmFzdGEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuc2VwYXJhdG9yUHQsIGNvbnZlcnRlcihcIkZBU1RBXCIgLyogTk9UQVRJT04uRkFTVEEgKi8pLCBTYW1wbGVzLmZhc3RhUHQpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCd0ZXN0U2VwYXJhdG9yRG5hVG9GYXN0YScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdENvbnZlcnQoU2FtcGxlcy5zZXBhcmF0b3JEbmEsIGNvbnZlcnRlcihcIkZBU1RBXCIgLyogTk9UQVRJT04uRkFTVEEgKi8pLCBTYW1wbGVzLmZhc3RhRG5hKTtcbiAgICB9KSk7XG4gICAgdGVzdCgndGVzdFNlcGFyYXRvclJuYVRvRmFzdGEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuc2VwYXJhdG9yUm5hLCBjb252ZXJ0ZXIoXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovKSwgU2FtcGxlcy5mYXN0YVJuYSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RTZXBhcmF0b3JQdFRvSGVsbScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdENvbnZlcnQoU2FtcGxlcy5zZXBhcmF0b3JQdCwgY29udmVydGVyKFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi8pLCBTYW1wbGVzLmhlbG1QdCk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RTZXBhcmF0b3JEbmFUb0hlbG0nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuc2VwYXJhdG9yRG5hLCBjb252ZXJ0ZXIoXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyksIFNhbXBsZXMuaGVsbURuYSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3Rlc3RTZXBhcmF0b3JSbmFUb0hlbG0nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RDb252ZXJ0KFNhbXBsZXMuc2VwYXJhdG9yUm5hLCBjb252ZXJ0ZXIoXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyksIFNhbXBsZXMuaGVsbVJuYSk7XG4gICAgfSkpO1xufSk7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGNhdGVnb3J5LCB0ZXN0LCBleHBlY3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGltcG9ydEZhc3RhIH0gZnJvbSAnLi4vcGFja2FnZSc7XG5jYXRlZ29yeSgnZGV0ZWN0b3JzJywgKCkgPT4ge1xuICAgIGNvbnN0IGNzdkRmMSA9IGBjb2wxXG4xXG4yXG4zYDtcbiAgICBjb25zdCBjc3ZEZjIgPSBgY29sMVxuNFxuNVxuNlxuN2A7XG4gICAgY29uc3QgY3N2RGYzID0gYGNvbDFcbjhcbjlcbjEwXG4xMVxuMTJgO1xuICAgIGNvbnN0IGNzdkRmU21pbGVzID0gYGNvbDFcbkNDQ0NOMUMoPU8pQ049QyhjMmNjKEYpY2NjMTIpQzNDQ0NDQzNcbkMxQ0NDQ0MxXG5DQ0NDQ0NcbmA7XG4gICAgY29uc3QgY3N2RGZEbmExID0gYHNlcVxuQUNHVENcbkNBR1RHVFxuVFRDQUFDXG5gO1xuICAgIGNvbnN0IGNzdkRmUm5hMSA9IGBzZXFcbkFDR1VDXG5DQUdVR1VcblVVQ0FBQ1xuYDtcbiAgICAvKiogUHVyZSBhbWlubyBhY2lkcyBzZXF1ZW5jZSAqL1xuICAgIGNvbnN0IGNzdkRmUHQxID0gYHNlcVxuRldQSEVZXG5ZTlJRV1lWXG5NS1BTRVlWXG5gO1xuICAgIGNvbnN0IGNzdkRmU2VwRG5hID0gYHNlcVxuQSpDKkcqVCpDXG5DKkEqRypUKkcqVFxuVCpUKkMqQSpBKkNcbmA7XG4gICAgY29uc3QgY3N2RGZTZXBSbmEgPSBgc2VxXG5BKkMqRypVKkNcbkMqQSpHKlUqRypVXG5VKlUqQypBKkEqQ1xuYDtcbiAgICBjb25zdCBjc3ZEZlNlcFB0ID0gYHNlcVxuRi1XLVAtSC1FLVlcblktTi1SLVEtVy1ZLVZcbk0tSy1QLVMtRS1ZLVZcbmA7XG4gICAgY29uc3QgY3N2RGZTZXBVbjEgPSBgc2VxXG5hYmMtZGZnZy1hYmMxLWNmcjMtcnR5LXdlcnRcbnJ1dDEyLWhlcjItcnR5LXdlcnQtYWJjLWFiYzEtZGZnZ1xucnV0MTItcnR5LWhlcjItYWJjLWNmcjMtd2VydC1ydXQxMlxuYDtcbiAgICBjb25zdCBjc3ZEZlNlcFVuMiA9IGBzZXFcbmFiYy9kZmdnL2FiYzEvY2ZyMy9ydHkvd2VydFxucnV0MTIvaGVyMi9ydHkvd2VydC8vYWJjL2FiYzEvZGZnZ1xucnV0MTIvcnR5L2hlcjIvYWJjL2NmcjMvL3dlcnQvcnV0MTJcbmA7XG4gICAgY29uc3QgY3N2RGZTZXBNc2FEbmExID0gYHNlcVxuQS1DLS1HLVQtLUMtVFxuQy1BLUMtLVQtLUctVFxuQS1DLUMtRy1ULUEtQy1UXG5gO1xuICAgIGNvbnN0IGNzdkRmTXNhRG5hMSA9IGBzZXFcbkFDLUdULUNUXG5DQUMtVC1HVFxuQUNDR1RBQ1RcbmA7XG4gICAgY29uc3QgY3N2RGZNc2FQdDEgPSBgc2VxXG5GV1ItV1lWLUtIUFxuWU5SLVdZVi1LSFBcbk1XUlNXWS1DS0hQXG5gO1xuICAgIGNvbnN0IHNhbXBsZXMgPSB7XG4gICAgICAgICdwZXB0aWRlc0NvbXBsZXgnOiAnU3lzdGVtOkFwcERhdGEvQmlvL3NhbXBsZXMvcGVwdGlkZXNfY29tcGxleF9tc2EuY3N2JyxcbiAgICAgICAgJ2Zhc3RhQ3N2JzogJ1N5c3RlbTpBcHBEYXRhL0Jpby9zYW1wbGVzL3NhbXBsZV9GQVNUQS5jc3YnLFxuICAgICAgICAnZmFzdGFGYXN0YSc6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9zYW1wbGVfRkFTVEEuZmFzdGEnLFxuICAgICAgICAnZmFzdGFQdENzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9zYW1wbGVfRkFTVEFfUFQuY3N2JyxcbiAgICAgICAgJ21zYUNvbXBsZXgnOiAnU3lzdGVtOkFwcERhdGEvQmlvL3NhbXBsZXMvc2FtcGxlX01TQS5jc3YnLFxuICAgICAgICAnaGVsbUNzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9zYW1wbGVfSEVMTS5jc3YnLFxuICAgICAgICAndGVzdERlbW9nQ3N2JzogJ1N5c3RlbTpBcHBEYXRhL0Jpby9zYW1wbGVzL3Rlc3REZW1vZy5jc3YnLFxuICAgICAgICAndGVzdEhlbG1Dc3YnOiAnU3lzdGVtOkFwcERhdGEvQmlvL3NhbXBsZXMvdGVzdEhlbG0uY3N2JyxcbiAgICAgICAgJ3Rlc3RJZENzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy9pZC5jc3YnLFxuICAgICAgICAndGVzdFNtaWxlc0Nzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy90ZXN0U21pbGVzLmNzdicsXG4gICAgICAgICd0ZXN0U21pbGVzMkNzdic6ICdTeXN0ZW06QXBwRGF0YS9CaW8vc2FtcGxlcy90ZXN0U21pbGVzMi5jc3YnLFxuICAgIH07XG4gICAgY29uc3QgX3NhbXBsZXNEZnMgPSB7fTtcbiAgICBmdW5jdGlvbiByZWFkU2FtcGxlcyhrZXksIHJlYWRGaWxlID0gcmVhZEZpbGVDc3YpIHtcbiAgICAgICAgcmV0dXJuICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBfc2FtcGxlc0RmcykpIHtcbiAgICAgICAgICAgICAgICBfc2FtcGxlc0Rmc1trZXldID0gKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGYgPSB5aWVsZCByZWFkRmlsZShzYW1wbGVzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZjtcbiAgICAgICAgICAgICAgICB9KSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfc2FtcGxlc0Rmc1trZXldO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgO1xuICAgIGZ1bmN0aW9uIHJlYWRGaWxlQ3N2KGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzdiA9IHlpZWxkIGdyb2suZGFwaS5maWxlcy5yZWFkQXNUZXh0KGZpbGUpO1xuICAgICAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3YpO1xuICAgICAgICAgICAgcmV0dXJuIGRmO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEZpbGVGYXN0YShmaWxlKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0eHQgPSB5aWVsZCBncm9rLmRhcGkuZmlsZXMucmVhZEFzVGV4dChmaWxlKTtcbiAgICAgICAgICAgIGNvbnN0IGRmID0gaW1wb3J0RmFzdGEodHh0KVswXTtcbiAgICAgICAgICAgIHJldHVybiBkZjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IF9jc3ZEZnMgPSB7fTtcbiAgICBjb25zdCByZWFkQ3N2ID0gKGtleSwgY3N2KSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGlmICghKGtleSBpbiBfY3N2RGZzKSkge1xuICAgICAgICAgICAgICAgIF9jc3ZEZnNba2V5XSA9ICgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNzdihjc3YpO1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBncm9rLmRhdGEuZGV0ZWN0U2VtYW50aWNUeXBlcyhkZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZjtcbiAgICAgICAgICAgICAgICB9KSkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY3N2RGZzW2tleV07XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdGVzdCgnTmVnYXRpdmUxJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0TmVnKHJlYWRDc3YoJ2NzdkRmMScsIGNzdkRmMSksICdjb2wxJyk7IH0pKTtcbiAgICB0ZXN0KCdOZWdhdGl2ZTInLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3ROZWcocmVhZENzdignY3N2RGYyJywgY3N2RGYyKSwgJ2NvbDEnKTsgfSkpO1xuICAgIHRlc3QoJ05lZ2F0aXZlMycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyB5aWVsZCBfdGVzdE5lZyhyZWFkQ3N2KCdjc3ZEZjMnLCBjc3ZEZjMpLCAnY29sMScpOyB9KSk7XG4gICAgdGVzdCgnTmVnYXRpdmVTbWlsZXMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgeWllbGQgX3Rlc3ROZWcocmVhZENzdignY3N2RGZTbWlsZXMnLCBjc3ZEZlNtaWxlcyksICdjb2wxJyk7IH0pKTtcbiAgICB0ZXN0KCdEbmExJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRDc3YoJ2NzdkRmRG5hMScsIGNzdkRmRG5hMSksICdzZXEnLCAnZmFzdGE6U0VROkROQScpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdSbmExJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRDc3YoJ2NzdkRmUm5hMScsIGNzdkRmUm5hMSksICdzZXEnLCAnZmFzdGE6U0VROlJOQScpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdBQTEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZQdDEnLCBjc3ZEZlB0MSksICdzZXEnLCAnZmFzdGE6U0VROlBUJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ01zYURuYTEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZNc2FEbmExJywgY3N2RGZNc2FEbmExKSwgJ3NlcScsICdmYXN0YTpTRVEuTVNBOkROQScpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdNc2FBQTEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZNc2FQdDEnLCBjc3ZEZk1zYVB0MSksICdzZXEnLCAnZmFzdGE6U0VRLk1TQTpQVCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBEbmEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZTZXBEbmEnLCBjc3ZEZlNlcERuYSksICdzZXEnLCAnc2VwYXJhdG9yOlNFUTpETkEnLCAnKicpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBSbmEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZENzdignY3N2RGZTZXBSbmEnLCBjc3ZEZlNlcFJuYSksICdzZXEnLCAnc2VwYXJhdG9yOlNFUTpSTkEnLCAnKicpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBQdCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkQ3N2KCdjc3ZEZlNlcFB0JywgY3N2RGZTZXBQdCksICdzZXEnLCAnc2VwYXJhdG9yOlNFUTpQVCcsICctJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1NlcFVuMScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkQ3N2KCdjc3ZEZlNlcFVuMScsIGNzdkRmU2VwVW4xKSwgJ3NlcScsICdzZXBhcmF0b3I6U0VROlVOJywgJy0nKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnU2VwVW4yJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRDc3YoJ2NzdkRmU2VwVW4yJywgY3N2RGZTZXBVbjIpLCAnc2VxJywgJ3NlcGFyYXRvcjpTRVE6VU4nLCAnLycpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTZXBNc2FOMScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkQ3N2KCdjc3ZEZlNlcE1zYURuYTEnLCBjc3ZEZlNlcE1zYURuYTEpLCAnc2VxJywgJ3NlcGFyYXRvcjpTRVEuTVNBOkROQScsICctJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1NhbXBsZXNGYXN0YUNzdlB0JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRTYW1wbGVzKFwiZmFzdGFDc3ZcIiAvKiBTYW1wbGVzLmZhc3RhQ3N2ICovKSwgJ3NlcXVlbmNlJywgJ2Zhc3RhOlNFUTpQVCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTYW1wbGVzRmFzdGFDc3ZOZWdhdGl2ZUVudHJ5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwiZmFzdGFDc3ZcIiAvKiBTYW1wbGVzLmZhc3RhQ3N2ICovKSwgJ0VudHJ5Jyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ1NhbXBsZXNGYXN0YUNzdk5lZ2F0aXZlTGVuZ3RoJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwiZmFzdGFDc3ZcIiAvKiBTYW1wbGVzLmZhc3RhQ3N2ICovKSwgJ0xlbmd0aCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTYW1wbGVzRmFzdGFDc3ZOZWdhdGl2ZVVuaVByb3RLQicsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcImZhc3RhQ3N2XCIgLyogU2FtcGxlcy5mYXN0YUNzdiAqLyksICdVbmlQcm90S0InKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnU2FtcGxlc0Zhc3RhRmFzdGFQdCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdFBvcyhyZWFkU2FtcGxlcyhcImZhc3RhRmFzdGFcIiAvKiBTYW1wbGVzLmZhc3RhRmFzdGEgKi8sIHJlYWRGaWxlRmFzdGEpLCAnc2VxdWVuY2UnLCAnZmFzdGE6U0VROlBUJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNQZXB0aWRlc0NvbXBsZXhOZWdhdGl2ZUlEJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwicGVwdGlkZXNDb21wbGV4XCIgLyogU2FtcGxlcy5wZXB0aWRlc0NvbXBsZXggKi8pLCAnSUQnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnU2FtcGxlc1BlcHRpZGVzQ29tcGxleE5lZ2F0aXZlTWVhc3VyZWQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJwZXB0aWRlc0NvbXBsZXhcIiAvKiBTYW1wbGVzLnBlcHRpZGVzQ29tcGxleCAqLyksICdNZWFzdXJlZCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdTYW1wbGVzUGVwdGlkZXNDb21wbGV4TmVnYXRpdmVWYWx1ZScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInBlcHRpZGVzQ29tcGxleFwiIC8qIFNhbXBsZXMucGVwdGlkZXNDb21wbGV4ICovKSwgJ1ZhbHVlJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNNc2FDb21wbGV4VW4nLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3RQb3MocmVhZFNhbXBsZXMoXCJtc2FDb21wbGV4XCIgLyogU2FtcGxlcy5tc2FDb21wbGV4ICovKSwgJ01TQScsICdzZXBhcmF0b3I6U0VRLk1TQTpVTicsICcvJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNNc2FDb21wbGV4TmVnYXRpdmVBY3Rpdml0eScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcIm1zYUNvbXBsZXhcIiAvKiBTYW1wbGVzLm1zYUNvbXBsZXggKi8pLCAnQWN0aXZpdHknKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0lkQ3N2TmVnYXRpdmVJRCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RJZENzdlwiIC8qIFNhbXBsZXMudGVzdElkQ3N2ICovKSwgJ0lEJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNTYXJTbWFsbENzdk5lZ2F0aXZlU21pbGVzJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwidGVzdFNtaWxlc0NzdlwiIC8qIFNhbXBsZXMudGVzdFNtaWxlc0NzdiAqLyksICdzbWlsZXMnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0hlbG1Dc3ZIRUxNJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRTYW1wbGVzKFwiaGVsbUNzdlwiIC8qIFNhbXBsZXMuaGVsbUNzdiAqLyksICdIRUxNJywgJ0hFTE0nLCBudWxsKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0hlbG1Dc3ZOZWdhdGl2ZUFjdGl2aXR5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0TmVnKHJlYWRTYW1wbGVzKFwiaGVsbUNzdlwiIC8qIFNhbXBsZXMuaGVsbUNzdiAqLyksICdBY3Rpdml0eScpO1xuICAgIH0pKTtcbiAgICAvLyBzYW1wbGVfdGVzdEhlbG0uY3NiXG4gICAgLy8gY29sdW1uczogSUQsVGVzdCB0eXBlLEhFTE0gc3RyaW5nLFZhbGlkPyxNb2wgV2VpZ2h0LE1vbCBGb3JtdWxhLFNNSUxFU1xuICAgIHRlc3QoJ3NhbXBsZXNUZXN0SGVsbU5lZ2F0aXZlSUQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnSUQnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVUZXN0VHlwZScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RIZWxtQ3N2XCIgLyogU2FtcGxlcy50ZXN0SGVsbUNzdiAqLyksICdUZXN0IHR5cGUnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtUG9zaXRpdmVIZWxtU3RyaW5nJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0UG9zKHJlYWRTYW1wbGVzKFwidGVzdEhlbG1Dc3ZcIiAvKiBTYW1wbGVzLnRlc3RIZWxtQ3N2ICovKSwgJ0hFTE0gc3RyaW5nJywgJ0hFTE0nKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVWYWxpZCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RIZWxtQ3N2XCIgLyogU2FtcGxlcy50ZXN0SGVsbUNzdiAqLyksICdWYWxpZD8nKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVNb2xXZWlnaHQnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnTW9sIFdlaWdodCcpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdzYW1wbGVzVGVzdEhlbG1OZWdhdGl2ZU1vbEZvcm11bGEnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnTW9sIEZvcm11bGEnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc1Rlc3RIZWxtTmVnYXRpdmVTbWlsZXMnLCAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgX3Rlc3ROZWcocmVhZFNhbXBsZXMoXCJ0ZXN0SGVsbUNzdlwiIC8qIFNhbXBsZXMudGVzdEhlbG1Dc3YgKi8pLCAnU21pbGVzJyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NhbXBsZXNUZXN0RGVtb2dOZWdhdGl2ZUFsbCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZkZ1bmMgPSByZWFkU2FtcGxlcyhcInRlc3REZW1vZ0NzdlwiIC8qIFNhbXBsZXMudGVzdERlbW9nQ3N2ICovKTtcbiAgICAgICAgY29uc3QgZGYgPSB5aWVsZCBkZkZ1bmMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZGYuY29sdW1ucy50b0xpc3QoKSlcbiAgICAgICAgICAgIHlpZWxkIF90ZXN0TmVnKGRmRnVuYywgY29sLm5hbWUpO1xuICAgIH0pKTtcbiAgICB0ZXN0KCdzYW1wbGVzVGVzdFNtaWxlczJOZWdhdGl2ZVNtaWxlcycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE5lZyhyZWFkU2FtcGxlcyhcInRlc3RTbWlsZXMyQ3N2XCIgLyogU2FtcGxlcy50ZXN0U21pbGVzMkNzdiAqLyksICdTTUlMRVMnKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnc2FtcGxlc0Zhc3RhUHRQb3NTZXF1ZW5jZScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCAoX3Rlc3RQb3MocmVhZFNhbXBsZXMoXCJmYXN0YVB0Q3N2XCIgLyogU2FtcGxlcy5mYXN0YVB0Q3N2ICovKSwgJ3NlcXVlbmNlJywgJ2Zhc3RhOlNFUTpQVCcpKTtcbiAgICB9KSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBfdGVzdE5lZyhyZWFkRGYsIGNvbE5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZiA9IHlpZWxkIHJlYWREZigpO1xuICAgICAgICBjb25zdCBjb2wgPSBkZi5jb2woY29sTmFtZSk7XG4gICAgICAgIGV4cGVjdChjb2wuc2VtVHlwZSA9PT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFLCBmYWxzZSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RQb3MocmVhZERmLCBjb2xOYW1lLCB1bml0cywgc2VwYXJhdG9yID0gbnVsbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGRmID0geWllbGQgcmVhZERmKCk7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbChjb2xOYW1lKTtcbiAgICAgICAgZXhwZWN0KGNvbC5zZW1UeXBlID09PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUsIHRydWUpO1xuICAgICAgICBleHBlY3QoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSwgdW5pdHMpO1xuICAgICAgICBpZiAoc2VwYXJhdG9yKVxuICAgICAgICAgICAgZXhwZWN0KGNvbC5nZXRUYWcoJ3NlcGFyYXRvcicpLCBzZXBhcmF0b3IpO1xuICAgIH0pO1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyBjYXRlZ29yeSwgdGVzdCB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3Rlc3QnO1xuaW1wb3J0IHsgX3Rlc3RNU0FJc0NvcnJlY3QsIF90ZXN0VGFibGVJc05vdEVtcHR5LCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuY2F0ZWdvcnkoJ01TQScsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgIC8vdGFibGUgPSBhd2FpdCBncm9rLmRhdGEuZmlsZXMub3BlblRhYmxlKCdEZW1vOkZpbGVzL2Jpby9wZXB0aWRlcy5jc3YnKTtcbiAgICBjb25zdCBmcm9tQ3N2ID0gYHNlcVxuICBGV1JXWVZLSFBcbiAgWU5SV1lWS0hQXG4gIE1XUlNXWUNLSFBgO1xuICAgIGNvbnN0IHRvQ3N2ID0gYHNlcVxuICAtRi1XLVItLVctWS1WLUstSC1QXG4gIC1ZLU4tUi0tVy1ZLVYtSy1ILVBcbiAgLU0tVy1SLVMtVy1ZLUMtSy1ILVBgO1xuICAgIGNvbnN0IHRhYmxlID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZnJvbUNzdik7XG4gICAgY29uc3QgdG9UYWJsZSA9IERHLkRhdGFGcmFtZS5mcm9tQ3N2KHRvQ3N2KTtcbiAgICBjb25zdCBhbGlnbmVkU2VxdWVuY2VzQ29sdW1uID0gdG9UYWJsZS5nZXRDb2woJ3NlcScpO1xuICAgIHRlc3QoJ3Rlc3RfdGFibGUuaXNfbm90X2VtcHR5JywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0VGFibGVJc05vdEVtcHR5KHRhYmxlKTtcbiAgICB9KSk7XG4gICAgdGVzdCgnaXNfY29ycmVjdCcsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCBfdGVzdE1TQUlzQ29ycmVjdChhbGlnbmVkU2VxdWVuY2VzQ29sdW1uKTtcbiAgICB9KSk7XG59KSk7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IGFmdGVyLCBiZWZvcmUsIGNhdGVnb3J5LCB0ZXN0LCBleHBlY3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGltcG9ydEZhc3RhLCBtdWx0aXBsZVNlcXVlbmNlQWxpZ25tZW50QW55IH0gZnJvbSAnLi4vcGFja2FnZSc7XG5jYXRlZ29yeSgncmVuZGVyZXJzJywgKCkgPT4ge1xuICAgIGxldCB0dkxpc3Q7XG4gICAgYmVmb3JlKCgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0dkxpc3QgPSBbXTtcbiAgICB9KSk7XG4gICAgYWZ0ZXIoKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHR2TGlzdC5mb3JFYWNoKCh0dikgPT4gdHYuY2xvc2UoKSk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ2FmdGVyTXNhJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF90ZXN0QWZ0ZXJNc2EoKTtcbiAgICB9KSk7XG4gICAgZnVuY3Rpb24gX3Rlc3RBZnRlck1zYSgpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhVHh0ID0geWllbGQgZ3Jvay5kYXBpLmZpbGVzLnJlYWRBc1RleHQoJ1N5c3RlbTpBcHBEYXRhL0Jpby9zYW1wbGVzL3NhbXBsZV9GQVNUQS5mYXN0YScpO1xuICAgICAgICAgICAgY29uc3QgZGYgPSBpbXBvcnRGYXN0YShmYXN0YVR4dClbMF07XG4gICAgICAgICAgICBjb25zdCBzcmNTZXFDb2wgPSBkZi5jb2woJ3NlcXVlbmNlJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3JjU2VxQ29sICE9PSBudWxsLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdCaW86IHRlc3RzL3JlbmRlcmVycy9hZnRlck1zYSwgc3JjIGRhdGEgbG9hZGVkJyk7XG4gICAgICAgICAgICBjb25zdCB0diA9IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdCaW86IHRlc3RzL3JlbmRlcmVycy9hZnRlck1zYSwgdGFibGUgdmlldycpO1xuICAgICAgICAgICAgeWllbGQgZ3Jvay5kYXRhLmRldGVjdFNlbWFudGljVHlwZXMoZGYpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0JpbzogdGVzdHMvcmVuZGVyZXJzL2FmdGVyTXNhLCBkZXRlY3RTZW1hbnRpY1R5cGVzJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQmlvOiB0ZXN0cy9yZW5kZXJlcnMvYWZ0ZXJNc2EsIHNyYyBiZWZvcmUgdGVzdCBzZW1UeXBlJyArXG4gICAgICAgICAgICAgICAgYHNlbVR5cGU9XCIke3NyY1NlcUNvbC5zZW1UeXBlfVwiLCB1bml0cz1cIiR7c3JjU2VxQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKX1cIiwgYCArXG4gICAgICAgICAgICAgICAgYGNlbGwucmVuZGVyZXI9XCIke3NyY1NlcUNvbC5nZXRUYWcoJ2NlbGwucmVuZGVyZXInKX1cImApO1xuICAgICAgICAgICAgZXhwZWN0KHNyY1NlcUNvbC5zZW1UeXBlLCBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpO1xuICAgICAgICAgICAgZXhwZWN0KHNyY1NlcUNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyksICdmYXN0YTpTRVE6UFQnKTtcbiAgICAgICAgICAgIGV4cGVjdChzcmNTZXFDb2wuZ2V0VGFnKCdjZWxsLnJlbmRlcmVyJyksICdNYWNyb21vbGVjdWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQmlvOiB0ZXN0cy9yZW5kZXJlcnMvYWZ0ZXJNc2EsIHNyYyBzZW1UeXBlIHRlc3RlZCcpO1xuICAgICAgICAgICAgY29uc3QgbXNhU2VxQ29sID0geWllbGQgbXVsdGlwbGVTZXF1ZW5jZUFsaWdubWVudEFueShkZiwgc3JjU2VxQ29sKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdCaW86IHRlc3RzL3JlbmRlcmVycy9hZnRlck1zYSwgbXNhU2VxQ29sIGNyZWF0ZWQnKTtcbiAgICAgICAgICAgIHR2LmdyaWQuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0JpbzogdGVzdHMvcmVuZGVyZXJzL2FmdGVyTXNhLCB0di5ncmlkIGludmFsaWRhdGVkJyk7XG4gICAgICAgICAgICBleHBlY3QobXNhU2VxQ29sLnNlbVR5cGUsIERHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRSk7XG4gICAgICAgICAgICBleHBlY3QobXNhU2VxQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSwgJ2Zhc3RhOlNFUS5NU0E6UFQnKTtcbiAgICAgICAgICAgIGV4cGVjdChtc2FTZXFDb2wuZ2V0VGFnKCdjZWxsLnJlbmRlcmVyJyksICdNYWNyb21vbGVjdWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQmlvOiB0ZXN0cy9yZW5kZXJlcnMvYWZ0ZXJNc2EsIG1zYSBzZW1UeXBlIHRlc3RlZCcpO1xuICAgICAgICAgICAgdHZMaXN0LnB1c2godHYpO1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgYmVmb3JlLCBjYXRlZ29yeSwgdGVzdCwgZXhwZWN0IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdGVzdCc7XG5pbXBvcnQgeyBzZXF1ZW5jZVNwYWNlIH0gZnJvbSAnLi4vdXRpbHMvc2VxdWVuY2Utc3BhY2UnO1xuaW1wb3J0IHsgcmVhZERhdGFmcmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuLy9pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmNhdGVnb3J5KCdzZXF1ZW5jZVNwYWNlJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IHRlc3RGYXN0YURmO1xuICAgIGJlZm9yZSgoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdGVzdEZhc3RhRGYgPSB5aWVsZCByZWFkRGF0YWZyYW1lKCdzYW1wbGVfRkFTVEEuY3N2Jyk7XG4gICAgfSkpO1xuICAgIHRlc3QoJ3NlcXVlbmNlU3BhY2VPcGVucycsICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBzZXF1ZW5jZVNwYWNlUGFyYW1zID0ge1xuICAgICAgICAgICAgc2VxQ29sOiB0ZXN0RmFzdGFEZi5jb2woJ1NlcXVlbmNlJyksXG4gICAgICAgICAgICBtZXRob2ROYW1lOiAndC1TTkUnLFxuICAgICAgICAgICAgc2ltaWxhcml0eU1ldHJpYzogJ0xldmVuc2h0ZWluJyxcbiAgICAgICAgICAgIGVtYmVkQXhlc05hbWVzOiBbJ0VtYmVkX1gnLCAnRW1iZWRfWSddXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHNlcXVlbmNlU3BhY2Uoc2VxdWVuY2VTcGFjZVBhcmFtcyk7XG4gICAgICAgIGV4cGVjdChyZXMuY29vcmRpbmF0ZXMgIT0gdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgZXhwZWN0KHJlcy5kaXN0YW5jZSAhPSB1bmRlZmluZWQsIHRydWUpO1xuICAgIH0pKTtcbn0pKTtcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IHsgY2F0ZWdvcnksIHRlc3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmNhdGVnb3J5KCdzcGxpdHRlcicsICgpID0+IHtcbiAgICBjb25zdCBoZWxtMSA9ICdQRVBUSURFMXttZUkuaEhpcy5BY2EuTi5ULmRFLlRocl9QTzNIMi5BY2EuRC1UeXJfRXQuVHlyX2FiLWRlaHlkcm9NZS5kVi5FLk4uRC1Pcm4uRC1hVGhyLlBoZV80TWV9JCQkJztcbiAgICBjb25zdCBoZWxtMiA9ICdQRVBUSURFMXttZUkuaEhpcy5IY3kuUS5ULlcuUS5QaGVfNE5IMi5ELVR5cl9FdC5UeXJfYWItZGVoeWRyb01lLmRWLkUuTi5OLm1lS30kJCQnO1xuICAgIHRlc3QoJ2hlbG0xJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0SGVsbVNwbGl0dGVyKGhlbG0xKTsgfSkpO1xuICAgIHRlc3QoJ2hlbG0yJywgKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7IHlpZWxkIF90ZXN0SGVsbVNwbGl0dGVyKGhlbG0yKTsgfSkpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RIZWxtU3BsaXR0ZXIodHh0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY29uc3Qgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXJBc0hlbG0oKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gY29uc3QgbUxpc3Q6IHN0cmluZ1tdID0gc3BsaXR0ZXIodHh0KTtcbiAgICAgICAgLy8gZXhwZWN0KG1MaXN0Lmxlbmd0aCwgMTIpO1xuICAgIH0pO1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgeyBleHBlY3QgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy90ZXN0JztcbmltcG9ydCB7IHJ1bkthbGlnbiB9IGZyb20gJy4uL3V0aWxzL211bHRpcGxlLXNlcXVlbmNlLWFsaWdubWVudCc7XG5pbXBvcnQgeyBfcGFja2FnZSB9IGZyb20gJy4uL3BhY2thZ2UtdGVzdCc7XG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVBc1RleHQobmFtZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBfcGFja2FnZS5maWxlcy5yZWFkQXNUZXh0KG5hbWUpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlYWREYXRhZnJhbWUodGFibGVOYW1lKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmlsZSA9IHlpZWxkIGxvYWRGaWxlQXNUZXh0KHRhYmxlTmFtZSk7XG4gICAgICAgIGNvbnN0IGRmID0gREcuRGF0YUZyYW1lLmZyb21Dc3YoZmlsZSk7XG4gICAgICAgIGRmLm5hbWUgPSB0YWJsZU5hbWUucmVwbGFjZSgnLmNzdicsICcnKTtcbiAgICAgICAgcmV0dXJuIGRmO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRhYmxlVmlldyh0YWJsZU5hbWUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZiA9IHlpZWxkIHJlYWREYXRhZnJhbWUodGFibGVOYW1lKTtcbiAgICAgICAgZGYubmFtZSA9IHRhYmxlTmFtZS5yZXBsYWNlKCcuY3N2JywgJycpO1xuICAgICAgICBjb25zdCB2aWV3ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9KTtcbn1cbi8qKlxuICogVGVzdHMgaWYgYSB0YWJsZSBoYXMgbm9uIHplcm8gcm93cyBhbmQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0ge0RHLkRhdGFGcmFtZX0gdGFibGUgVGFyZ2V0IHRhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Rlc3RUYWJsZUlzTm90RW1wdHkodGFibGUpIHtcbiAgICBleHBlY3QodGFibGUuY29sdW1ucy5sZW5ndGggPiAwICYmIHRhYmxlLnJvd0NvdW50ID4gMCwgdHJ1ZSk7XG59XG4vKipcbiAqIFRlc3RzIGlmIE1TQSB3b3JrcyBhbmQgcmV0dXJucyBjb25zaXN0ZW50IHJlc3VsdC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge0RHLkNvbHVtbn0gY29sIEFsaWduZWQgc2VxdWVuY2VzIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF90ZXN0TVNBSXNDb3JyZWN0KGNvbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IG1zYUNvbCA9IHlpZWxkIHJ1bkthbGlnbihjb2wsIHRydWUpO1xuICAgICAgICBleHBlY3QobXNhQ29sLnRvTGlzdCgpLmV2ZXJ5KCh2LCBpKSA9PiAodiA9PSBjb2wuZ2V0KGkpIHx8IHYgPT0gbnVsbCkpLCB0cnVlKTtcbiAgICB9KTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFjcm9Nb2wobW9ub21lcnMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IG1vZHVsZVJka2l0ID0geWllbGQgZ3Jvay5mdW5jdGlvbnMuY2FsbCgnQ2hlbTpnZXRSZEtpdE1vZHVsZScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbm9tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1vbm9tZXJzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9sID0gbW9kdWxlUmRraXQuZ2V0X21vbChtb25vbWVyc1tpXVtqXVsnbW9sZmlsZSddKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gbW9sLmdldF92M0ttb2xibG9jaygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBnZXRJbmRpY2VzKG1vbm9tZXJzW2ldW2pdLCBhKTtcbiAgICAgICAgICAgICAgICBtb25vbWVyc1tpXVtqXVsnaW5kaWNlcyddID0gaW5kaWNlcztcbiAgICAgICAgICAgICAgICBtb25vbWVyc1tpXVtqXVsnbW9sZmlsZSddID0geWllbGQgcm90YXRlQmFja2JvbmVWMzAwMChhLCBpbmRpY2VzKTtcbiAgICAgICAgICAgICAgICBtb2wgPT09IG51bGwgfHwgbW9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtb2wuZGVsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChsaW5rVjMwMDAobW9ub21lcnNbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZ2V0SW5kaWNlcyhtb25vbWVyLCBtb2xWMzAwMCkge1xuICAgIGNvbnN0IG1vbGZpbGUgPSBtb25vbWVyW1wibW9sZmlsZVwiXTtcbiAgICBsZXQgaW5kZXhTdGFydCA9IG1vbGZpbGUuaW5kZXhPZignTSAgUkdQJywgMCkgKyA4O1xuICAgIGxldCBpbmRleEVuZCA9IG1vbGZpbGUuaW5kZXhPZignXFxuJywgaW5kZXhTdGFydCk7XG4gICAgY29uc3QgaW5kaWNlc0RhdGEgPSBtb2xmaWxlLnN1YnN0cmluZyhpbmRleFN0YXJ0LCBpbmRleEVuZCkucmVwbGFjZUFsbCgnICAnLCAnICcpLnJlcGxhY2VBbGwoJyAgJywgJyAnKTtcbiAgICBsZXQgcGFyc2VkRGF0YSA9IGluZGljZXNEYXRhLnNwbGl0KCcgJyk7XG4gICAgY29uc3QgcmVtRmlyc3QgPSBwYXJzZWREYXRhWzJdID09ICcxJyA/IHBhcnNlSW50KHBhcnNlZERhdGFbMV0pIDogcGFyc2VJbnQocGFyc2VkRGF0YVszXSk7XG4gICAgY29uc3QgcmVtTGFzdCA9IHBhcnNlZERhdGFbMl0gPT0gJzInID8gcGFyc2VJbnQocGFyc2VkRGF0YVsxXSkgOiBwYXJzZUludChwYXJzZWREYXRhWzNdKTtcbiAgICBjb25zdCBudW1iZXJzID0gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sVjMwMDApO1xuICAgIGxldCBpbmRleEJvbmRzID0gbW9sVjMwMDAuaW5kZXhPZignTSAgVjMwIEJFR0lOIEJPTkQnKTsgLy8gVjMwMDAgaW5kZXggZm9yIGJvbmRzXG4gICAgaW5kZXhCb25kcyA9IG1vbFYzMDAwLmluZGV4T2YoJ1xcbicsIGluZGV4Qm9uZHMpO1xuICAgIGluZGV4U3RhcnQgPSBpbmRleEJvbmRzO1xuICAgIGluZGV4RW5kID0gaW5kZXhCb25kcztcbiAgICBsZXQgZmlyc3QgPSAwO1xuICAgIGxldCBsYXN0ID0gMDtcbiAgICBsZXQgcmVtQm9uZEZpcnN0ID0gMDtcbiAgICBsZXQgcmVtQm9uZExhc3QgPSAwO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVycy5uYm9uZDsgaisrKSB7XG4gICAgICAgIGlmIChmaXJzdCA9PSAwIHx8IGxhc3QgPT0gMCkge1xuICAgICAgICAgICAgaW5kZXhTdGFydCA9IG1vbFYzMDAwLmluZGV4T2YoJ1YzMCcsIGluZGV4U3RhcnQpICsgNDtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sVjMwMDAuaW5kZXhPZignXFxuJywgaW5kZXhTdGFydCk7XG4gICAgICAgICAgICBjb25zdCBib25kRGF0YSA9IG1vbFYzMDAwLnN1YnN0cmluZyhpbmRleFN0YXJ0LCBpbmRleEVuZCkucmVwbGFjZUFsbCgnICAnLCAnICcpLnJlcGxhY2VBbGwoJyAgJywgJyAnKTtcbiAgICAgICAgICAgIHBhcnNlZERhdGEgPSBib25kRGF0YS5zcGxpdCgnICcpO1xuICAgICAgICAgICAgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbMl0pID09IHJlbUZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzNdKTtcbiAgICAgICAgICAgICAgICByZW1Cb25kRmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbM10pID09IHJlbUZpcnN0KSB7XG4gICAgICAgICAgICAgICAgZmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzJdKTtcbiAgICAgICAgICAgICAgICByZW1Cb25kRmlyc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbMl0pID09IHJlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VJbnQocGFyc2VkRGF0YVszXSk7XG4gICAgICAgICAgICAgICAgcmVtQm9uZExhc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlSW50KHBhcnNlZERhdGFbM10pID09IHJlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBsYXN0ID0gcGFyc2VJbnQocGFyc2VkRGF0YVsyXSk7XG4gICAgICAgICAgICAgICAgcmVtQm9uZExhc3QgPSBwYXJzZUludChwYXJzZWREYXRhWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBmaXJzdCwgbGFzdCwgcmVtRmlyc3QsIHJlbUxhc3QsIHJlbUJvbmRGaXJzdCwgcmVtQm9uZExhc3QgfTtcbn1cbmZ1bmN0aW9uIHJvdGF0ZUJhY2tib25lVjMwMDAobW9sQmxvY2ssIGluZGljZXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGV4dHJhY3RBdG9tRGF0YVYzMDAwKG1vbEJsb2NrKTtcbiAgICAgICAgY29uc3QgbmF0b20gPSBjb29yZGluYXRlcy5hdG9tSW5kZXgubGVuZ3RoO1xuICAgICAgICBjb25zdCBmaXJzdCA9IGluZGljZXNbJ2ZpcnN0J107XG4gICAgICAgIGNvbnN0IGxhc3QgPSBpbmRpY2VzWydsYXN0J107XG4gICAgICAgIGNvbnN0IHhDZW50ZXIgPSAoY29vcmRpbmF0ZXMueFtsYXN0XSArIGNvb3JkaW5hdGVzLnhbZmlyc3RdKSAvIDI7XG4gICAgICAgIGNvbnN0IHlDZW50ZXIgPSAoY29vcmRpbmF0ZXMueVtsYXN0XSArIGNvb3JkaW5hdGVzLnlbZmlyc3RdKSAvIDI7XG4gICAgICAgIC8vcGxhY2UgdG8gY2VudGVyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKykge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSAtPSB4Q2VudGVyO1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueVtpXSAtPSB5Q2VudGVyO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbmdsZSA9IDA7XG4gICAgICAgIGlmIChjb29yZGluYXRlcy54W2ZpcnN0XSA9PSAwKVxuICAgICAgICAgICAgYW5nbGUgPSBjb29yZGluYXRlcy55W2ZpcnN0XSA+IGNvb3JkaW5hdGVzLnlbbGFzdF0gPyBNYXRoLlBJIC8gMiA6IDMgKiBNYXRoLlBJIC8gMjtcbiAgICAgICAgZWxzZSBpZiAoY29vcmRpbmF0ZXMueVtmaXJzdF0gPT0gMClcbiAgICAgICAgICAgIGFuZ2xlID0gY29vcmRpbmF0ZXMueFtmaXJzdF0gPiBjb29yZGluYXRlcy54W2xhc3RdID8gTWF0aC5QSSA6IDA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVyaXZhdGl2ZSA9IGNvb3JkaW5hdGVzLnlbZmlyc3RdIC8gY29vcmRpbmF0ZXMueFtmaXJzdF07XG4gICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXMueFtmaXJzdF0gPCBjb29yZGluYXRlcy54W2xhc3RdKVxuICAgICAgICAgICAgICAgIGFuZ2xlID0gZGVyaXZhdGl2ZSA+IDAgPyBNYXRoLlBJIC0gTWF0aC5hdGFuKGRlcml2YXRpdmUpIDogTWF0aC5hdGFuKGRlcml2YXRpdmUpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFuZ2xlID0gZGVyaXZhdGl2ZSA+IDAgPyBNYXRoLmF0YW4oZGVyaXZhdGl2ZSkgOiBNYXRoLlBJIC0gTWF0aC5hdGFuKGRlcml2YXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hdG9tOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHhBZGQgPSBjb29yZGluYXRlcy54W2ldO1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSA9IHhBZGQgKiBjb3MgLSBjb29yZGluYXRlcy55W2ldICogc2luO1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMueVtpXSA9IHhBZGQgKiBzaW4gKyBjb29yZGluYXRlcy55W2ldICogY29zO1xuICAgICAgICB9XG4gICAgICAgIC8vcGxhY2UgdG8gcmlnaHRcbiAgICAgICAgY29uc3QgeFNoaWZ0ID0gY29vcmRpbmF0ZXMueFtmaXJzdF07XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmF0b207IGkrKylcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzLnhbaV0gLT0geFNoaWZ0O1xuICAgICAgICAvL3Jld3JpdGUgbW9sQmxvY2tcbiAgICAgICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpO1xuICAgICAgICBsZXQgaW5kZXhFbmQgPSBpbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYXRvbTsgaSsrKSB7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleEVuZCk7XG4gICAgICAgICAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnNsaWNlKDAsIGluZGV4KSArXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMueFtpXSArICcgJyArIGNvb3JkaW5hdGVzLnlbaV0gK1xuICAgICAgICAgICAgICAgIG1vbEJsb2NrLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9sQmxvY2s7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xCbG9jaykge1xuICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xCbG9jayk7XG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignTSAgVjMwIEJFR0lOIEFUT00nKTsgLy8gVjMwMDAgaW5kZXggZm9yIGF0b21zIGNvb3JkaW5hdGVzXG4gICAgaW5kZXggPSBtb2xCbG9jay5pbmRleE9mKCdcXG4nLCBpbmRleCk7XG4gICAgbGV0IGluZGV4RW5kID0gaW5kZXg7XG4gICAgY29uc3QgaW5kZXhlcyA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHR5cGVzID0gQXJyYXkobnVtYmVycy5uYXRvbSk7XG4gICAgY29uc3QgeCA9IEFycmF5KG51bWJlcnMubmF0b20pO1xuICAgIGNvbnN0IHkgPSBBcnJheShudW1iZXJzLm5hdG9tKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcnMubmF0b207IGkrKykge1xuICAgICAgICBpbmRleCA9IG1vbEJsb2NrLmluZGV4T2YoJ1YzMCcsIGluZGV4KSArIDQ7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgaW5kZXhlc1tpXSA9IHBhcnNlSW50KG1vbEJsb2NrLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgdHlwZXNbaV0gPSBtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKTtcbiAgICAgICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgICAgIGluZGV4RW5kID0gbW9sQmxvY2suaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgeFtpXSA9IHBhcnNlRmxvYXQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICBpbmRleCA9IGluZGV4RW5kICsgMTtcbiAgICAgICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgICAgICB5W2ldID0gcGFyc2VGbG9hdChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgIGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignXFxuJywgaW5kZXgpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXRvbUluZGV4OiBpbmRleGVzLCBhdG9tVHlwZTogdHlwZXMsIHg6IHgsIHk6IHkgfTtcbn1cbmZ1bmN0aW9uIGxpbmtWMzAwMChtb25vbWVycykge1xuICAgIGxldCBtYWNyb01vbEJsb2NrID0gJ1xcbkRhdGFncm9rIG1hY3JvbW9sZWN1bGUgaGFuZGxlclxcblxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnICAwICAwICAwICAwICAwICAwICAgICAgICAgICAgOTk5IFYzMDAwXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ1RBQlxcbic7XG4gICAgbGV0IGF0b21CbG9jayA9ICcnO1xuICAgIGxldCBib25kQmxvY2sgPSAnJztcbiAgICBsZXQgY29sbGVjdGlvbkJsb2NrID0gJyc7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IFtdO1xuICAgIGxldCBuYXRvbSA9IDA7XG4gICAgbGV0IG5ib25kID0gMDtcbiAgICBsZXQgeFNoaWZ0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1vbm9tZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBtb2xmaWxlID0gbW9ub21lcnNbaV1bJ21vbGZpbGUnXTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSBtb25vbWVyc1tpXVsnaW5kaWNlcyddWydmaXJzdCddO1xuICAgICAgICBjb25zdCBsYXN0ID0gbW9ub21lcnNbaV1bJ2luZGljZXMnXVsnbGFzdCddO1xuICAgICAgICBjb25zdCByZW1GaXJzdCA9IG1vbm9tZXJzW2ldWydpbmRpY2VzJ11bJ3JlbUZpcnN0J107XG4gICAgICAgIGNvbnN0IHJlbUxhc3QgPSBtb25vbWVyc1tpXVsnaW5kaWNlcyddWydyZW1MYXN0J107XG4gICAgICAgIGNvbnN0IHJlbUJvbmRGaXJzdCA9IG1vbm9tZXJzW2ldWydpbmRpY2VzJ11bJ3JlbUJvbmRGaXJzdCddO1xuICAgICAgICBjb25zdCByZW1Cb25kTGFzdCA9IG1vbm9tZXJzW2ldWydpbmRpY2VzJ11bJ3JlbUJvbmRMYXN0J107XG4gICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnJlcGxhY2VBbGwoJygtXFxuTSAgVjMwICcsICcoJylcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCctXFxuTSAgVjMwICcsICcnKS5yZXBsYWNlQWxsKCcgKScsICcpJyk7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBleHRyYWN0QXRvbXNCb25kc051bWJlcnNWMzAwMChtb2xmaWxlKTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBleHRyYWN0QXRvbURhdGFWMzAwMChtb2xmaWxlKTtcbiAgICAgICAgbGV0IGluZGV4QXRvbXMgPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCBCRUdJTiBBVE9NJyk7IC8vIFYzMDAwIGluZGV4IGZvciBhdG9tcyBjb29yZGluYXRlc1xuICAgICAgICBpbmRleEF0b21zID0gbW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleEF0b21zKTtcbiAgICAgICAgbGV0IGluZGV4ID0gaW5kZXhBdG9tcztcbiAgICAgICAgbGV0IGluZGV4RW5kID0gaW5kZXhBdG9tcztcbiAgICAgICAgY29uc3QgdG90YWxTaGlmdCA9IHhTaGlmdCAtIGNvb3JkaW5hdGVzLnhbZmlyc3QgLSAxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1iZXJzLm5hdG9tOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb29yZGluYXRlcy5hdG9tSW5kZXhbal0gIT0gcmVtRmlyc3QgJiYgY29vcmRpbmF0ZXMuYXRvbUluZGV4W2pdICE9IHJlbUxhc3QpIHsgLy98fCBpID09IDApIHtcbiAgICAgICAgICAgICAgICAvL3Jld3JpdGUgYXRvbSBudW1iZXJcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbGZpbGUuaW5kZXhPZignVjMwJywgaW5kZXgpICsgNDtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbGZpbGUuc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICAgICAgICAgIGF0b21OdW1iZXIgPSAoYXRvbU51bWJlciA+IHJlbUZpcnN0ICYmIGF0b21OdW1iZXIgPiByZW1MYXN0KSA/IGF0b21OdW1iZXIgLSAyIDpcbiAgICAgICAgICAgICAgICAgICAgKGF0b21OdW1iZXIgPiByZW1GaXJzdCB8fCBhdG9tTnVtYmVyID4gcmVtTGFzdCkgPyBhdG9tTnVtYmVyIC0gMSA6IGF0b21OdW1iZXI7XG4gICAgICAgICAgICAgICAgYXRvbU51bWJlciArPSBuYXRvbTtcbiAgICAgICAgICAgICAgICBtb2xmaWxlID0gbW9sZmlsZS5zbGljZSgwLCBpbmRleCkgKyBhdG9tTnVtYmVyICsgbW9sZmlsZS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgLy9yZXdyaXRlIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgICAgICBpbmRleEVuZCA9IG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBsZXQgY29vcmRpbmF0ZSA9IE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xmaWxlLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSArIHRvdGFsU2hpZnQpKSAvIDEwMDAwO1xuICAgICAgICAgICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnNsaWNlKDAsIGluZGV4KSArIGNvb3JkaW5hdGUgKyBtb2xmaWxlLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgICAgICBpbmRleCA9IG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KSArIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZSA9IE1hdGgucm91bmQoMTAwMDAgKiAocGFyc2VGbG9hdChtb2xmaWxlLnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpKSkpIC8gMTAwMDA7XG4gICAgICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgY29vcmRpbmF0ZSArIG1vbGZpbGUuc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCcsIGluZGV4KSAtIDE7XG4gICAgICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJ1xcbicsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgbW9sZmlsZS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhBdG9tc0VuZCA9IG1vbGZpbGUuaW5kZXhPZignTSAgVjMwIEVORCBBVE9NJyk7XG4gICAgICAgIGF0b21CbG9jayArPSBtb2xmaWxlLnN1YnN0cmluZyhpbmRleEF0b21zICsgMSwgaW5kZXhBdG9tc0VuZCk7XG4gICAgICAgIGxldCBpbmRleEJvbmRzID0gbW9sZmlsZS5pbmRleE9mKCdNICBWMzAgQkVHSU4gQk9ORCcpOyAvLyBWMzAwMCBpbmRleCBmb3IgYm9uZHNcbiAgICAgICAgaW5kZXhCb25kcyA9IG1vbGZpbGUuaW5kZXhPZignXFxuJywgaW5kZXhCb25kcyk7XG4gICAgICAgIGluZGV4ID0gaW5kZXhCb25kcztcbiAgICAgICAgaW5kZXhFbmQgPSBpbmRleEJvbmRzO1xuICAgICAgICBsZXQgYm9uZE51bWJlciA9IDA7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVycy5uYm9uZDsgaisrKSB7XG4gICAgICAgICAgICAvL3Jld3JpdGUgYm9uZCBudW1iZXJcbiAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCdWMzAnLCBpbmRleCkgKyA0O1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBib25kTnVtYmVyID0gcGFyc2VJbnQobW9sZmlsZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgICAgICBpZiAoYm9uZE51bWJlciA9PSByZW1Cb25kRmlyc3QgfHwgYm9uZE51bWJlciA9PSByZW1Cb25kTGFzdCkge1xuICAgICAgICAgICAgICAgIGluZGV4RW5kID0gbW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgICAgIGluZGV4IC09IDc7XG4gICAgICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgbW9sZmlsZS5zbGljZShpbmRleEVuZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib25kTnVtYmVyID0gKGJvbmROdW1iZXIgPiByZW1Cb25kRmlyc3QgJiYgYm9uZE51bWJlciA+IHJlbUJvbmRMYXN0KSA/IGJvbmROdW1iZXIgLSAyIDpcbiAgICAgICAgICAgICAgICAoYm9uZE51bWJlciA+IHJlbUJvbmRGaXJzdCB8fCBib25kTnVtYmVyID4gcmVtQm9uZExhc3QpID8gYm9uZE51bWJlciAtIDEgOiBib25kTnVtYmVyO1xuICAgICAgICAgICAgYm9uZE51bWJlciArPSBuYm9uZDtcbiAgICAgICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnNsaWNlKDAsIGluZGV4KSArIGJvbmROdW1iZXIgKyBtb2xmaWxlLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIC8vcmV3cml0ZSBhdG9tIHBhaXIgaW4gYm9uZFxuICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCkgKyAxO1xuICAgICAgICAgICAgaW5kZXhFbmQgPSBtb2xmaWxlLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgICAgICAgICBsZXQgYXRvbU51bWJlciA9IHBhcnNlSW50KG1vbGZpbGUuc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgICAgICAgICAgYXRvbU51bWJlciA9IChhdG9tTnVtYmVyID4gcmVtRmlyc3QgJiYgYXRvbU51bWJlciA+IHJlbUxhc3QpID8gYXRvbU51bWJlciAtIDIgOlxuICAgICAgICAgICAgICAgIChhdG9tTnVtYmVyID4gcmVtRmlyc3QgfHwgYXRvbU51bWJlciA+IHJlbUxhc3QpID8gYXRvbU51bWJlciAtIDEgOiBhdG9tTnVtYmVyO1xuICAgICAgICAgICAgYXRvbU51bWJlciArPSBuYXRvbTtcbiAgICAgICAgICAgIG1vbGZpbGUgPSBtb2xmaWxlLnNsaWNlKDAsIGluZGV4KSArIGF0b21OdW1iZXIgKyBtb2xmaWxlLnNsaWNlKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGluZGV4ID0gbW9sZmlsZS5pbmRleE9mKCcgJywgaW5kZXgpICsgMTtcbiAgICAgICAgICAgIGluZGV4RW5kID0gTWF0aC5taW4obW9sZmlsZS5pbmRleE9mKCdcXG4nLCBpbmRleCksIG1vbGZpbGUuaW5kZXhPZignICcsIGluZGV4KSk7XG4gICAgICAgICAgICBhdG9tTnVtYmVyID0gcGFyc2VJbnQobW9sZmlsZS5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgICAgICAgICBhdG9tTnVtYmVyID0gKGF0b21OdW1iZXIgPiByZW1GaXJzdCAmJiBhdG9tTnVtYmVyID4gcmVtTGFzdCkgPyBhdG9tTnVtYmVyIC0gMiA6XG4gICAgICAgICAgICAgICAgKGF0b21OdW1iZXIgPiByZW1GaXJzdCB8fCBhdG9tTnVtYmVyID4gcmVtTGFzdCkgPyBhdG9tTnVtYmVyIC0gMSA6IGF0b21OdW1iZXI7XG4gICAgICAgICAgICBhdG9tTnVtYmVyICs9IG5hdG9tO1xuICAgICAgICAgICAgbW9sZmlsZSA9IG1vbGZpbGUuc2xpY2UoMCwgaW5kZXgpICsgYXRvbU51bWJlciArIG1vbGZpbGUuc2xpY2UoaW5kZXhFbmQpO1xuICAgICAgICAgICAgaW5kZXggPSBtb2xmaWxlLmluZGV4T2YoJ1xcbicsIGluZGV4KSArIDE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXhCb25kRW5kID0gbW9sZmlsZS5pbmRleE9mKCdNICBWMzAgRU5EIEJPTkQnKTtcbiAgICAgICAgYm9uZEJsb2NrICs9IG1vbGZpbGUuc3Vic3RyaW5nKGluZGV4Qm9uZHMgKyAxLCBpbmRleEJvbmRFbmQpO1xuICAgICAgICAvL2xldCBpbmRleENvbGxlY3Rpb24gPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnKTsgLy8gVjMwMDAgaW5kZXggZm9yIGNvbGxlY3Rpb25zXG4gICAgICAgIC8vIHdoaWxlIChpbmRleENvbGxlY3Rpb24gIT0gLTEpIHtcbiAgICAgICAgLy8gICBpbmRleENvbGxlY3Rpb24gKz0gMjg7XG4gICAgICAgIC8vICAgY29uc3QgY29sbGVjdGlvbkVuZCA9IG1vbGZpbGUuaW5kZXhPZignKScsIGluZGV4Q29sbGVjdGlvbik7XG4gICAgICAgIC8vICAgY29uc3QgY29sbGVjdGlvbkVudHJpZXMgPSBtb2xmaWxlLnN1YnN0cmluZyhpbmRleENvbGxlY3Rpb24sIGNvbGxlY3Rpb25FbmQpLnNwbGl0KCcgJykuc2xpY2UoMSk7XG4gICAgICAgIC8vICAgY29sbGVjdGlvbkVudHJpZXMuZm9yRWFjaCgoZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vICAgICBjb2xsZWN0aW9uLnB1c2gocGFyc2VJbnQoZSkgKyBuYXRvbSk7XG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vICAgaW5kZXhDb2xsZWN0aW9uID0gY29sbGVjdGlvbkVuZDtcbiAgICAgICAgLy8gICBpbmRleENvbGxlY3Rpb24gPSBtb2xmaWxlLmluZGV4T2YoJ00gIFYzMCBNRExWMzAvU1RFQUJTIEFUT01TPSgnLCBpbmRleENvbGxlY3Rpb24pO1xuICAgICAgICAvLyB9XG4gICAgICAgIG5hdG9tICs9IG51bWJlcnMubmF0b20gLSAyO1xuICAgICAgICBuYm9uZCArPSBudW1iZXJzLm5ib25kIC0gMjtcbiAgICAgICAgeFNoaWZ0ICs9IGNvb3JkaW5hdGVzLnhbbGFzdF0gLSBjb29yZGluYXRlcy54W2ZpcnN0XSArIDE7XG4gICAgICAgIGlmIChpID09IG1vbm9tZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIG5hdG9tKys7XG4gICAgICAgICAgICBjb25zdCBzaGlmdCA9IHhTaGlmdCArIDAuMjtcbiAgICAgICAgICAgIGF0b21CbG9jayArPSAnTSAgVjMwICcgKyBuYXRvbSArICcgTyAnICsgc2hpZnQgKyAnIDAgMC4wMDAwMDAgMFxcbic7XG4gICAgICAgIH1cbiAgICAgICAgbmJvbmQrKztcbiAgICAgICAgaWYgKGkgPT0gbW9ub21lcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgcmlnaHRUZXJtaW5hbCA9IChsYXN0ID4gcmVtRmlyc3QgJiYgbGFzdCA+IHJlbUxhc3QpID8gbGFzdCArIG5hdG9tIC0gKG51bWJlcnMubmF0b20gLSAyKSAtIDMgOlxuICAgICAgICAgICAgICAgIChsYXN0ID4gcmVtRmlyc3QgfHwgbGFzdCA+IHJlbUxhc3QpID8gbGFzdCArIG5hdG9tIC0gKG51bWJlcnMubmF0b20gLSAyKSAtIDIgOlxuICAgICAgICAgICAgICAgICAgICBsYXN0ICsgbmF0b20gLSAobnVtYmVycy5uYXRvbSAtIDIpIC0gMTtcbiAgICAgICAgICAgIGJvbmRCbG9jayArPSAnTSAgVjMwICcgKyBuYm9uZCArICcgMSAnICsgcmlnaHRUZXJtaW5hbCArICcgJyArIG5hdG9tICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByaWdodFRlcm1pbmFsID0gKGxhc3QgPiByZW1GaXJzdCAmJiBsYXN0ID4gcmVtTGFzdCkgPyBsYXN0ICsgbmF0b20gLSAobnVtYmVycy5uYXRvbSAtIDIpIC0gMiA6XG4gICAgICAgICAgICAgICAgKGxhc3QgPiByZW1GaXJzdCB8fCBsYXN0ID4gcmVtTGFzdCkgPyBsYXN0ICsgbmF0b20gLSAobnVtYmVycy5uYXRvbSAtIDIpIC0gMSA6XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgKyBuYXRvbSAtIChudW1iZXJzLm5hdG9tIC0gMik7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gbW9ub21lcnNbaSArIDFdWydpbmRpY2VzJ107XG4gICAgICAgICAgICBjb25zdCBuZXh0Rmlyc3QgPSBuZXh0WydmaXJzdCddO1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlbUZpcnN0ID0gbmV4dFsncmVtRmlyc3QnXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZW1MYXN0ID0gbmV4dFsncmVtTGFzdCddO1xuICAgICAgICAgICAgY29uc3QgbGVmdFRlcm1pbmFsID0gKG5leHRGaXJzdCA+IG5leHRSZW1GaXJzdCAmJiBuZXh0Rmlyc3QgPiBuZXh0UmVtTGFzdCkgPyBuZXh0Rmlyc3QgKyBuYXRvbSAtIDIgOlxuICAgICAgICAgICAgICAgIChuZXh0Rmlyc3QgPiBuZXh0UmVtRmlyc3QgfHwgbmV4dEZpcnN0ID4gbmV4dFJlbUxhc3QpID8gbmV4dEZpcnN0ICsgbmF0b20gLSAxIDpcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZpcnN0ICsgbmF0b207XG4gICAgICAgICAgICBib25kQmxvY2sgKz0gJ00gIFYzMCAnICsgbmJvbmQgKyAnIDEgJyArIHJpZ2h0VGVybWluYWwgKyAnICcgKyBsZWZ0VGVybWluYWwgKyAnXFxuJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zdCBlbnRyaWVzID0gNDtcbiAgICAvLyBjb25zdCBjb2xsTnVtYmVyID0gTWF0aC5jZWlsKGNvbGxlY3Rpb24ubGVuZ3RoIC8gZW50cmllcyk7XG4gICAgLy8gY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgTURMVjMwL1NURUFCUyBBVE9NUz0oJyArIGNvbGxlY3Rpb24ubGVuZ3RoICsgJyAtXFxuJztcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxOdW1iZXI7IGkrKykge1xuICAgIC8vICAgY29sbGVjdGlvbkJsb2NrICs9ICdNICBWMzAgJztcbiAgICAvLyAgIGNvbnN0IGVudHJpZXNDdXJyZW50ID0gaSArIDEgPT0gY29sbE51bWJlciA/IGNvbGxlY3Rpb24ubGVuZ3RoIC0gKGNvbGxOdW1iZXIgLSAxKSplbnRyaWVzIDogZW50cmllcztcbiAgICAvLyAgIGZvciAobGV0IGogPSAwOyBqIDwgZW50cmllc0N1cnJlbnQ7IGorKykge1xuICAgIC8vICAgICBjb2xsZWN0aW9uQmxvY2sgKz0gKGogKyAxID09IGVudHJpZXNDdXJyZW50KSA/XG4gICAgLy8gICAgICAgKGkgPT0gY29sbE51bWJlciAtIDEgPyBjb2xsZWN0aW9uW2VudHJpZXMqaSArIGpdICsgJylcXG4nIDogY29sbGVjdGlvbltlbnRyaWVzKmkgKyBqXSArICcgLVxcbicpIDpcbiAgICAvLyAgICAgICBjb2xsZWN0aW9uW2VudHJpZXMqaSArIGpdICsgJyAnO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvL2dlbmVyYXRlIGZpbGVcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQ09VTlRTICcgKyBuYXRvbSArICcgJyArIG5ib25kICsgJyAwIDAgMFxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEFUT01cXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYXRvbUJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQVRPTVxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEJFR0lOIEJPTkRcXG4nO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gYm9uZEJsb2NrO1xuICAgIG1hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQk9ORFxcbic7XG4gICAgLy9tYWNyb01vbEJsb2NrICs9ICdNICBWMzAgQkVHSU4gQ09MTEVDVElPTlxcbic7XG4gICAgLy9tYWNyb01vbEJsb2NrICs9IGNvbGxlY3Rpb25CbG9jaztcbiAgICAvL21hY3JvTW9sQmxvY2sgKz0gJ00gIFYzMCBFTkQgQ09MTEVDVElPTlxcbic7XG4gICAgbWFjcm9Nb2xCbG9jayArPSAnTSAgVjMwIEVORCBDVEFCXFxuJztcbiAgICBtYWNyb01vbEJsb2NrICs9ICdNICBFTkRcXG4nO1xuICAgIHJldHVybiBtYWNyb01vbEJsb2NrO1xufVxuZnVuY3Rpb24gZXh0cmFjdEF0b21zQm9uZHNOdW1iZXJzVjMwMDAobW9sQmxvY2spIHtcbiAgICBtb2xCbG9jayA9IG1vbEJsb2NrLnJlcGxhY2VBbGwoJ1xccicsICcnKTsgLy9lcXVhbGl6ZSBvbGQgYW5kIG5ldyBzZGYgc3RhbmRhcmRzXG4gICAgbGV0IGluZGV4ID0gbW9sQmxvY2suaW5kZXhPZignQ09VTlRTJykgKyA3OyAvLyBWMzAwMCBpbmRleCBmb3IgYXRvbXMgYW5kIGJvbmRzIG51bWJlclxuICAgIGxldCBpbmRleEVuZCA9IG1vbEJsb2NrLmluZGV4T2YoJyAnLCBpbmRleCk7XG4gICAgY29uc3QgYXRvbXNOdW1iZXIgPSBwYXJzZUludChtb2xCbG9jay5zdWJzdHJpbmcoaW5kZXgsIGluZGV4RW5kKSk7XG4gICAgaW5kZXggPSBpbmRleEVuZCArIDE7XG4gICAgaW5kZXhFbmQgPSBtb2xCbG9jay5pbmRleE9mKCcgJywgaW5kZXgpO1xuICAgIGNvbnN0IGJvbmRzTnVtYmVyID0gcGFyc2VJbnQobW9sQmxvY2suc3Vic3RyaW5nKGluZGV4LCBpbmRleEVuZCkpO1xuICAgIHJldHVybiB7IG5hdG9tOiBhdG9tc051bWJlciwgbmJvbmQ6IGJvbmRzTnVtYmVyIH07XG59XG4iLCJpbXBvcnQgKiBhcyBDIGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBBbWlub2FjaWRzUGFsZXR0ZXMgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvYW1pbm9hY2lkcyc7XG5pbXBvcnQgeyBOdWNsZW90aWRlc1BhbGV0dGVzIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9iaW8vc3JjL251Y2xlb3RpZGVzJztcbmltcG9ydCB7IFVua25vd25TZXFQYWxldHRlcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy91bmtub3duJztcbmltcG9ydCB7IFdlYkxvZ28gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nbyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuY29uc3QgbHJ1ID0gbmV3IERHLkxydUNhY2hlKCk7XG5jb25zdCB1bmRlZmluZWRDb2xvciA9ICdyZ2IoMTAwLDEwMCwxMDApJztcbmZ1bmN0aW9uIGdldFBhbGxldGVCeVR5cGUocGFsZXR0ZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHBhbGV0dGVUeXBlKSB7XG4gICAgICAgIGNhc2UgJ1BUJzpcbiAgICAgICAgICAgIHJldHVybiBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcztcbiAgICAgICAgY2FzZSAnTlQnOlxuICAgICAgICAgICAgcmV0dXJuIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtO1xuICAgICAgICBjYXNlICdETkEnOlxuICAgICAgICAgICAgcmV0dXJuIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtO1xuICAgICAgICBjYXNlICdSTkEnOlxuICAgICAgICAgICAgcmV0dXJuIE51Y2xlb3RpZGVzUGFsZXR0ZXMuQ2hyb21hdG9ncmFtO1xuICAgICAgICAvLyBvdGhlclxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFVua25vd25TZXFQYWxldHRlcy5Db2xvcjtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NlcXVlbmNlKHN1YlBhcnRzKSB7XG4gICAgY29uc3Qgc2ltcGxpZmllZCA9ICFzdWJQYXJ0cy5zb21lKChhbWlubywgaW5kZXgpID0+IGFtaW5vLmxlbmd0aCA+IDEgJiZcbiAgICAgICAgaW5kZXggIT0gMCAmJlxuICAgICAgICBpbmRleCAhPSBzdWJQYXJ0cy5sZW5ndGggLSAxKTtcbiAgICBjb25zdCB0ZXh0ID0gW107XG4gICAgY29uc3QgZ2FwID0gc2ltcGxpZmllZCA/ICcnIDogJyAnO1xuICAgIHN1YlBhcnRzLmZvckVhY2goKGFtaW5vLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPCBzdWJQYXJ0cy5sZW5ndGgpXG4gICAgICAgICAgICBhbWlubyArPSBgJHthbWlubyA/ICcnIDogJy0nfSR7Z2FwfWA7XG4gICAgICAgIHRleHQucHVzaChhbWlubyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFt0ZXh0LCBzaW1wbGlmaWVkXTtcbn1cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHByaW50cyBhIHN0cmluZyBhbGlnbmVkIHRvIGxlZnQgb3IgY2VudGVyZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggeCBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHkgeSBjb29yZGluYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IHcgV2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gaCBIZWlnaHQuXG4gKiBAcGFyYW0ge0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZyBDYW52YXMgcmVuZGVyaW5nIGNvbnRleHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcyBTdHJpbmcgdG8gcHJpbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbG9yPXVuZGVmaW5lZENvbG9yXSBTdHJpbmcgY29sb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW3Bpdm90PTBdIFBpcnZvdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlZnQ9ZmFsc2VdIElzIGxlZnQgYWxpZ25lZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2hpZGVNb2Q9ZmFsc2VdIEhpZGUgYW1pbm8gYWNpZCByZWRpZHVlIG1vZGlmaWNhdGlvbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gW3RyYW5zcGFyZW5jeVJhdGU9MC4wXSBUcmFuc3BhcmVuY3kgcmF0ZSB3aGVyZSAxLjAgaXMgZnVsbHkgdHJhbnNwYXJlbnRcbiAqIEByZXR1cm4ge251bWJlcn0geCBjb29yZGluYXRlIHRvIHN0YXJ0IHByaW50aW5nIGF0LlxuICovXG5mdW5jdGlvbiBwcmludExlZnRPckNlbnRlcmVkKHgsIHksIHcsIGgsIGcsIHMsIGNvbG9yID0gdW5kZWZpbmVkQ29sb3IsIHBpdm90ID0gMCwgbGVmdCA9IGZhbHNlLCBoaWRlTW9kID0gZmFsc2UsIHRyYW5zcGFyZW5jeVJhdGUgPSAxLjAsIHNlcGFyYXRvciA9ICcnLCBsYXN0ID0gZmFsc2UpIHtcbiAgICBnLnRleHRBbGlnbiA9ICdzdGFydCc7XG4gICAgbGV0IGNvbG9yUGFydCA9IHMuc3Vic3RyaW5nKDApO1xuICAgIGxldCBncmF5UGFydCA9IHNlcGFyYXRvcjtcbiAgICBpZiAobGFzdCkge1xuICAgICAgICBncmF5UGFydCA9ICcnO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0U2l6ZSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0ICsgZ3JheVBhcnQpO1xuICAgIGNvbnN0IGluZGVudCA9IDU7XG4gICAgY29uc3QgY29sb3JUZXh0U2l6ZSA9IGcubWVhc3VyZVRleHQoY29sb3JQYXJ0KTtcbiAgICBjb25zdCBkeSA9ICh0ZXh0U2l6ZS5mb250Qm91bmRpbmdCb3hBc2NlbnQgKyB0ZXh0U2l6ZS5mb250Qm91bmRpbmdCb3hEZXNjZW50KSAvIDI7XG4gICAgZnVuY3Rpb24gZHJhdyhkeDEsIGR4Mikge1xuICAgICAgICBnLmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgICAgICBnLmdsb2JhbEFscGhhID0gdHJhbnNwYXJlbmN5UmF0ZTtcbiAgICAgICAgZy5maWxsVGV4dChjb2xvclBhcnQsIHggKyBkeDEsIHkgKyBkeSk7XG4gICAgICAgIGcuZmlsbFN0eWxlID0gJyM4MDgwODAnO1xuICAgICAgICBnLmZpbGxUZXh0KGdyYXlQYXJ0LCB4ICsgZHgyLCB5ICsgZHkpO1xuICAgIH1cbiAgICBpZiAobGVmdCB8fCB0ZXh0U2l6ZS53aWR0aCA+IHcpIHtcbiAgICAgICAgZHJhdyhpbmRlbnQsIGluZGVudCArIGNvbG9yVGV4dFNpemUud2lkdGgpO1xuICAgICAgICByZXR1cm4geCArIGNvbG9yVGV4dFNpemUud2lkdGggKyBnLm1lYXN1cmVUZXh0KGdyYXlQYXJ0KS53aWR0aDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGR4ID0gKHcgLSB0ZXh0U2l6ZS53aWR0aCkgLyAyO1xuICAgICAgICBkcmF3KGR4LCBkeCArIGNvbG9yVGV4dFNpemUud2lkdGgpO1xuICAgICAgICByZXR1cm4geCArIGR4ICsgY29sb3JUZXh0U2l6ZS53aWR0aDtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgTWFjcm9tb2xlY3VsZVNlcXVlbmNlQ2VsbFJlbmRlcmVyIGV4dGVuZHMgREcuR3JpZENlbGxSZW5kZXJlciB7XG4gICAgZ2V0IG5hbWUoKSB7IHJldHVybiAnbWFjcm9tb2xlY3VsZVNlcXVlbmNlJzsgfVxuICAgIGdldCBjZWxsVHlwZSgpIHsgcmV0dXJuIEMuU0VNX1RZUEVTLk1hY3JvX01vbGVjdWxlOyB9XG4gICAgZ2V0IGRlZmF1bHRIZWlnaHQoKSB7IHJldHVybiAzMDsgfVxuICAgIGdldCBkZWZhdWx0V2lkdGgoKSB7IHJldHVybiAyMzA7IH1cbiAgICAvKipcbiAgICAgKiBDZWxsIHJlbmRlcmVyIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGcgQ2FudmFzIHJlbmRlcmluZyBjb250ZXh0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB4IHggY29vcmRpbmF0ZSBvbiB0aGUgY2FudmFzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB5IHkgY29vcmRpbmF0ZSBvbiB0aGUgY2FudmFzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3IHdpZHRoIG9mIHRoZSBjZWxsLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBoIGhlaWdodCBvZiB0aGUgY2VsbC5cbiAgICAgKiBAcGFyYW0ge0RHLkdyaWRDZWxsfSBncmlkQ2VsbCBHcmlkIGNlbGwuXG4gICAgICogQHBhcmFtIHtERy5HcmlkQ2VsbFN0eWxlfSBjZWxsU3R5bGUgQ2VsbCBzdHlsZS5cbiAgICAgKiBAbWVtYmVyb2YgQWxpZ25lZFNlcXVlbmNlQ2VsbFJlbmRlcmVyXG4gICAgICovXG4gICAgcmVuZGVyKGcsIHgsIHksIHcsIGgsIGdyaWRDZWxsLCBjZWxsU3R5bGUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZ3JpZCA9IGdyaWRDZWxsLmdyaWQ7XG4gICAgICAgIGNvbnN0IGNlbGwgPSBncmlkQ2VsbC5jZWxsO1xuICAgICAgICBjb25zdCB0YWcgPSBncmlkQ2VsbC5jZWxsLmNvbHVtbi5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgICAgIGlmICh0YWcgPT09ICdIRUxNJykge1xuICAgICAgICAgICAgbGV0IGhvc3QgPSB1aS5kaXYoW10sIHsgc3R5bGU6IHsgd2lkdGg6IGAke3d9cHhgLCBoZWlnaHQ6IGAke2h9cHhgIH0gfSk7XG4gICAgICAgICAgICBob3N0LnNldEF0dHJpYnV0ZSgnZGF0YWZvcm1hdCcsICdoZWxtJyk7XG4gICAgICAgICAgICBob3N0LnNldEF0dHJpYnV0ZSgnZGF0YScsIGdyaWRDZWxsLmNlbGwudmFsdWUpO1xuICAgICAgICAgICAgZ3JpZENlbGwuZWxlbWVudCA9IGhvc3Q7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIHZhciBjYW52YXMgPSBuZXcgSlNEcmF3Mi5FZGl0b3IoaG9zdCwgeyB3aWR0aDogdywgaGVpZ2h0OiBoLCBza2luOiAndzgnLCB2aWV3b25seTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHZhciBmb3JtdWxhID0gY2FudmFzLmdldEZvcm11bGEodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIWZvcm11bGEpIHtcbiAgICAgICAgICAgICAgICBncmlkQ2VsbC5lbGVtZW50ID0gdWkuZGl2VGV4dChncmlkQ2VsbC5jZWxsLnZhbHVlLCB7IHN0eWxlOiB7IGNvbG9yOiAncmVkJyB9IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ3JpZENlbGwuZWxlbWVudCA9IGhvc3Q7XG4gICAgICAgICAgICAgICAgdmFyIG1vbFdlaWdodCA9IE1hdGgucm91bmQoY2FudmFzLmdldE1vbFdlaWdodCgpICogMTAwKSAvIDEwMDtcbiAgICAgICAgICAgICAgICB2YXIgY29lZiA9IE1hdGgucm91bmQoY2FudmFzLmdldEV4dGluY3Rpb25Db2VmZmljaWVudCh0cnVlKSAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICAgICAgdmFyIG1vbGZpbGUgPSBjYW52YXMuZ2V0TW9sZmlsZSgpO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBmb3JtdWxhICsgJywgJyArIG1vbFdlaWdodCArICcsICcgKyBjb2VmICsgJywgJyArIG1vbGZpbGU7XG4gICAgICAgICAgICAgICAgbHJ1LnNldChncmlkQ2VsbC5jZWxsLnZhbHVlLCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgW3R5cGUsIHN1YnR5cGUsIHBhbGV0dGVUeXBlXSA9IGdyaWRDZWxsLmNlbGwuY29sdW1uLmdldFRhZyhERy5UQUdTLlVOSVRTKS5zcGxpdCgnOicpO1xuICAgICAgICAgICAgdyA9IGdyaWQgPyBNYXRoLm1pbihncmlkLmNhbnZhcy53aWR0aCAtIHgsIHcpIDogZy5jYW52YXMud2lkdGggLSB4O1xuICAgICAgICAgICAgZy5zYXZlKCk7XG4gICAgICAgICAgICBnLmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgZy5yZWN0KHgsIHksIHcsIGgpO1xuICAgICAgICAgICAgZy5jbGlwKCk7XG4gICAgICAgICAgICBnLmZvbnQgPSAnMTJweCBtb25vc3BhY2UnO1xuICAgICAgICAgICAgZy50ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICAgICAgICAgIGNvbnN0IHMgPSAoX2EgPSBjZWxsLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgICAgIC8vVE9ETzogY2FuIHRoaXMgYmUgcmVwbGFjZWQvbWVyZ2VkIHdpdGggc3BsaXRTZXF1ZW5jZT9cbiAgICAgICAgICAgIGNvbnN0IHVuaXRzID0gZ3JpZENlbGwuY2VsbC5jb2x1bW4uZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICAgICAgY29uc3QgcGFsZXR0ZSA9IGdldFBhbGxldGVCeVR5cGUocGFsZXR0ZVR5cGUpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gKF9iID0gZ3JpZENlbGwuY2VsbC5jb2x1bW4uZ2V0VGFnKCdzZXBhcmF0b3InKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XG4gICAgICAgICAgICBjb25zdCBzcGxpdHRlckZ1bmMgPSBXZWJMb2dvLmdldFNwbGl0dGVyKHVuaXRzLCBncmlkQ2VsbC5jZWxsLmNvbHVtbi5nZXRUYWcoJ3NlcGFyYXRvcicpKTsgLy8gc3BsaXR0ZXIsXG4gICAgICAgICAgICBjb25zdCBzdWJQYXJ0cyA9IHNwbGl0dGVyRnVuYyhjZWxsLnZhbHVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN1YlBhcnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRTaXplID0gZy5tZWFzdXJlVGV4dChzdWJQYXJ0cy5qb2luKCcnKSk7XG4gICAgICAgICAgICBsZXQgeDEgPSB4O1xuICAgICAgICAgICAgbGV0IGNvbG9yID0gdW5kZWZpbmVkQ29sb3I7XG4gICAgICAgICAgICBzdWJQYXJ0cy5mb3JFYWNoKChhbWlubywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb2xvciA9IHBhbGV0dGUuZ2V0KGFtaW5vKTtcbiAgICAgICAgICAgICAgICBnLmZpbGxTdHlsZSA9IHVuZGVmaW5lZENvbG9yO1xuICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09PSBzdWJQYXJ0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4MSA9IHByaW50TGVmdE9yQ2VudGVyZWQoeDEsIHksIHcsIGgsIGcsIGFtaW5vLCBjb2xvciwgMCwgdHJ1ZSwgZmFsc2UsIDEuMCwgc2VwYXJhdG9yLCBsYXN0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZy5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJleHBvcnQgdmFyIENPTFVNTlNfTkFNRVM7XG4oZnVuY3Rpb24gKENPTFVNTlNfTkFNRVMpIHtcbiAgICBDT0xVTU5TX05BTUVTW1wiU1BMSVRfQ09MXCJdID0gXCJ+c3BsaXRcIjtcbiAgICBDT0xVTU5TX05BTUVTW1wiQUNUSVZJVFlcIl0gPSBcIn5hY3Rpdml0eVwiO1xuICAgIENPTFVNTlNfTkFNRVNbXCJBQ1RJVklUWV9TQ0FMRURcIl0gPSBcImFjdGl2aXR5X3NjYWxlZFwiO1xuICAgIENPTFVNTlNfTkFNRVNbXCJBTElHTkVEX1NFUVVFTkNFXCJdID0gXCJ+YWxpZ25lZF9zZXF1ZW5jZVwiO1xuICAgIENPTFVNTlNfTkFNRVNbXCJBTUlOT19BQ0lEX1JFU0lEVUVcIl0gPSBcIkFBUlwiO1xuICAgIENPTFVNTlNfTkFNRVNbXCJQT1NJVElPTlwiXSA9IFwiUG9zXCI7XG4gICAgQ09MVU1OU19OQU1FU1tcIlBfVkFMVUVcIl0gPSBcInBWYWx1ZVwiO1xuICAgIENPTFVNTlNfTkFNRVNbXCJNRUFOX0RJRkZFUkVOQ0VcIl0gPSBcIk1lYW4gZGlmZmVyZW5jZVwiO1xufSkoQ09MVU1OU19OQU1FUyB8fCAoQ09MVU1OU19OQU1FUyA9IHt9KSk7XG5leHBvcnQgdmFyIENBVEVHT1JJRVM7XG4oZnVuY3Rpb24gKENBVEVHT1JJRVMpIHtcbiAgICBDQVRFR09SSUVTW1wiT1RIRVJcIl0gPSBcIk90aGVyXCI7XG4gICAgQ0FURUdPUklFU1tcIkFMTFwiXSA9IFwiQWxsXCI7XG59KShDQVRFR09SSUVTIHx8IChDQVRFR09SSUVTID0ge30pKTtcbmV4cG9ydCB2YXIgVEFHUztcbihmdW5jdGlvbiAoVEFHUykge1xuICAgIFRBR1NbXCJBQVJcIl0gPSBcIkFBUlwiO1xuICAgIFRBR1NbXCJQT1NJVElPTlwiXSA9IFwiUG9zXCI7XG4gICAgVEFHU1tcIlNFUEFSQVRPUlwiXSA9IFwibW9ub21lci1zZXBhcmF0b3JcIjtcbiAgICBUQUdTW1wiU0VMRUNUSU9OXCJdID0gXCJzZWxlY3Rpb25cIjtcbn0pKFRBR1MgfHwgKFRBR1MgPSB7fSkpO1xuZXhwb3J0IHZhciBTRU1fVFlQRVM7XG4oZnVuY3Rpb24gKFNFTV9UWVBFUykge1xuICAgIFNFTV9UWVBFU1tcIkFNSU5PX0FDSURTXCJdID0gXCJhbWlub0FjaWRzXCI7XG4gICAgU0VNX1RZUEVTW1wiQUxJR05FRF9TRVFVRU5DRVwiXSA9IFwiYWxpZ25lZFNlcXVlbmNlXCI7XG4gICAgU0VNX1RZUEVTW1wiQUxJR05FRF9TRVFVRU5DRV9ESUZGRVJFTkNFXCJdID0gXCJhbGlnbmVkU2VxdWVuY2VEaWZmZXJlbmNlXCI7XG4gICAgU0VNX1RZUEVTW1wiQUNUSVZJVFlcIl0gPSBcImFjdGl2aXR5XCI7XG4gICAgU0VNX1RZUEVTW1wiQUNUSVZJVFlfU0NBTEVEXCJdID0gXCJhY3Rpdml0eVNjYWxlZFwiO1xuICAgIFNFTV9UWVBFU1tcIk1hY3JvX01vbGVjdWxlXCJdID0gXCJNYWNyb21vbGVjdWxlXCI7XG59KShTRU1fVFlQRVMgfHwgKFNFTV9UWVBFUyA9IHt9KSk7XG5leHBvcnQgY29uc3QgU1RBVFMgPSAnc3RhdHMnO1xuZXhwb3J0IGNvbnN0IEVNQkVERElOR19TVEFUVVMgPSAnZW1iZWRkaW5nU3RhdHVzJztcbmV4cG9ydCBjb25zdCBQRVBUSURFU19BTkFMWVNJUyA9ICdpc1BlcHRpZGVzQW5hbHlzaXMnO1xuZXhwb3J0IHZhciBGTEFHUztcbihmdW5jdGlvbiAoRkxBR1MpIHtcbiAgICBGTEFHU1tcIkNFTExfQ0hBTkdJTkdcIl0gPSBcImlzQ2VsbENoYW5naW5nXCI7XG59KShGTEFHUyB8fCAoRkxBR1MgPSB7fSkpO1xuZXhwb3J0IGNvbnN0IGFhckdyb3VwcyA9IHtcbiAgICAnUic6ICdQQycsICdIJzogJ1BDJywgJ0snOiAnUEMnLFxuICAgICdEJzogJ05DJywgJ0UnOiAnTkMnLFxuICAgICdTJzogJ1UnLCAnVCc6ICdVJywgJ04nOiAnVScsICdRJzogJ1UnLFxuICAgICdDJzogJ1NDJywgJ1UnOiAnU0MnLCAnRyc6ICdTQycsICdQJzogJ1NDJyxcbiAgICAnQSc6ICdIJywgJ1YnOiAnSCcsICdJJzogJ0gnLCAnTCc6ICdIJywgJ00nOiAnSCcsICdGJzogJ0gnLCAnWSc6ICdIJywgJ1cnOiAnSCcsXG4gICAgJy0nOiAnLScsXG59O1xuZXhwb3J0IGNvbnN0IGdyb3VwRGVzY3JpcHRpb24gPSB7XG4gICAgJ1BDJzogeyAnZGVzY3JpcHRpb24nOiAnUG9zaXRpdmUgQW1pbm8gQWNpZHMsIHdpdGggRWxlY3RyaWNhbGx5IENoYXJnZWQgU2lkZSBDaGFpbnMnLCAnYW1pbm9BY2lkcyc6IFsnUicsICdIJywgJ0snXSB9LFxuICAgICdOQyc6IHsgJ2Rlc2NyaXB0aW9uJzogJ05lZ2F0aXZlIEFtaW5vIEFjaWRzLCB3aXRoIEVsZWN0cmljYWxseSBDaGFyZ2VkIFNpZGUgQ2hhaW5zJywgJ2FtaW5vQWNpZHMnOiBbJ0QnLCAnRSddIH0sXG4gICAgJ1UnOiB7ICdkZXNjcmlwdGlvbic6ICdBbWlubyBBY2lkcyB3aXRoIFBvbGFyIFVuY2hhcmdlZCBTaWRlIENoYWlucycsICdhbWlub0FjaWRzJzogWydTJywgJ1QnLCAnTicsICdRJ10gfSxcbiAgICAnU0MnOiB7ICdkZXNjcmlwdGlvbic6ICdTcGVjaWFsIENhc2VzJywgJ2FtaW5vQWNpZHMnOiBbJ0MnLCAnVScsICdHJywgJ1AnXSB9LFxuICAgICdIJzoge1xuICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW1pbm8gQWNpZHMgd2l0aCBIeWRyb3Bob2JpYyBTaWRlIENoYWluJyxcbiAgICAgICAgJ2FtaW5vQWNpZHMnOiBbJ0EnLCAnVicsICdJJywgJ0wnLCAnTScsICdGJywgJ1knLCAnVyddLFxuICAgIH0sXG4gICAgJy0nOiB7ICdkZXNjcmlwdGlvbic6ICdVbmtub3duIEFtaW5vIEFjaWQnLCAnYW1pbm9BY2lkcyc6IFsnLSddIH0sXG59O1xuIiwiaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCB7IE5vdGF0aW9uQ29udmVydGVyIH0gZnJvbSAnLi9ub3RhdGlvbi1jb252ZXJ0ZXInO1xuLyoqXG4gKiBDb252ZXJ0cyBub3RhdGlvbnMgb2YgYSBNYWNyb21vbGVjdWxlIGNvbHVtblxuICpcbiAqIEBwYXJhbSB7REcuY29sdW1ufSBjb2wgQ29sdW1uIHdpdGggJ01hY3JvbW9sZWN1bGUnIHNlbWFudGljIHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnQoY29sKSB7XG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IE5vdGF0aW9uQ29udmVydGVyKGNvbCk7XG4gICAgY29uc3QgY3VycmVudCA9IGNvbnZlcnRlci5zb3VyY2VOb3RhdGlvbjtcbiAgICAvL1RPRE86IHJlYWQgYWxsIG5vdGF0aW9uc1xuICAgIGNvbnN0IG5vdGF0aW9ucyA9IFtcbiAgICAgICAgXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovLFxuICAgICAgICBcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLyxcbiAgICAgICAgXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqL1xuICAgIF07XG4gICAgY29uc3Qgc2VwYXJhdG9yQXJyYXkgPSBbJy0nLCAnLicsICcvJ107XG4gICAgY29uc3QgZmlsdGVyZWROb3RhdGlvbnMgPSBub3RhdGlvbnMuZmlsdGVyKChlKSA9PiBlICE9PSBjdXJyZW50KTtcbiAgICBjb25zdCB0YXJnZXROb3RhdGlvbklucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0NvbnZlcnQgdG8nLCBmaWx0ZXJlZE5vdGF0aW9uc1swXSwgZmlsdGVyZWROb3RhdGlvbnMpO1xuICAgIGNvbnN0IHNlcGFyYXRvcklucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0Nob29zZSBzZXBhcmF0b3InLCBzZXBhcmF0b3JBcnJheVswXSwgc2VwYXJhdG9yQXJyYXkpO1xuICAgIHVpLmRpYWxvZygnQ29udmVydCBzZXF1ZW5jZSBub3RhdGlvbicpXG4gICAgICAgIC5hZGQodWkuZGl2KFtcbiAgICAgICAgdWkuaDEoJ0N1cnJlbnQgbm90YXRpb246ICcgKyBjdXJyZW50KSxcbiAgICAgICAgdGFyZ2V0Tm90YXRpb25JbnB1dC5yb290LFxuICAgICAgICAvLyBUT0RPOiBjb25kaXRpb25hbCBzZXBhcmF0b3IgaW5wdXRcbiAgICAgICAgc2VwYXJhdG9ySW5wdXQucm9vdFxuICAgIF0pKVxuICAgICAgICAub25PSygoKSA9PiB7XG4gICAgICAgIC8vVE9ETzogY3JlYXRlIG5ldyBjb252ZXJ0ZWQgY29sdW1uXG4gICAgICAgIGNvbnN0IHRhcmdldE5vdGF0aW9uID0gdGFyZ2V0Tm90YXRpb25JbnB1dC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gc2VwYXJhdG9ySW5wdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbiA9IGNvbnZlcnRlci5jb252ZXJ0KHRhcmdldE5vdGF0aW9uLCBzZXBhcmF0b3IpO1xuICAgICAgICBjb2wuZGF0YUZyYW1lLmNvbHVtbnMuYWRkKG5ld0NvbHVtbik7XG4gICAgfSlcbiAgICAgICAgLnNob3coKTtcbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vQHRzLWlnbm9yZVxuaW1wb3J0IEFpb2xpIGZyb20gJ0BiaW93YXNtL2Fpb2xpJztcbmltcG9ydCB7IEFsaWduZWRTZXF1ZW5jZUVuY29kZXIgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvc2VxdWVuY2UtZW5jb2Rlcic7XG4vKipcbiAqIENvbnZlcnRzIGFycmF5IG9mIHNlcXVlbmNlcyBpbnRvIHNpbXBsZSBmYXN0YSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gc2VxdWVuY2VzIElucHV0IGxpc3Qgb2Ygc2VxdWVuY2VzLlxuICogQHJldHVybiB7c3RyaW5nfSBGYXN0YS1mb3JtYXR0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBfc3RyaW5nc1RvRmFzdGEoc2VxdWVuY2VzKSB7XG4gICAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIHYsIGkpID0+IGEgKyBgPnNhbXBsZSR7aSArIDF9XFxuJHt2fVxcbmAsICcnKTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYXJyYXkgb2Ygc2VxdWVuY2VzIGZyb20gc2ltcGxlIGZhc3RhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmFzdGEgRmFzdGEtZm9ybWF0dGVkIHN0cmluZy5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfSBPdXRwdXQgbGlzdCBvZiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIF9mYXN0YVRvU3RyaW5ncyhmYXN0YSkge1xuICAgIHJldHVybiBmYXN0YS5yZXBsYWNlKC8+c2FtcGxlXFxkKyhcXHJcXG58XFxyfFxcbikvZywgJycpLnNwbGl0KCdcXG4nKTtcbn1cbi8qKlxuICogUnVucyBBaW9saSBlbnZpcm9ubWVudCB3aXRoIGthbGlnbiB0b29sLlxuICpcbiAqIEBwYXJhbSB7REcuQ29sdW1ufSBzcmNDb2wgQ29sdW1uIHdpdGggc2VxdWVuY2VzLlxuICogQHBhcmFtIHtib29sZWFufSBpc0FsaWduZWQgV2hldGhlciB0aGUgY29sdW1uIGlzIGFsaWduZWQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPERHLkNvbHVtbj59IEFsaWduZWQgc2VxdWVuY2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuS2FsaWduKHNyY0NvbCwgaXNBbGlnbmVkID0gZmFsc2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgc2VxdWVuY2VzID0gc3JjQ29sLnRvTGlzdCgpO1xuICAgICAgICBpZiAoaXNBbGlnbmVkKVxuICAgICAgICAgICAgc2VxdWVuY2VzID0gc2VxdWVuY2VzLm1hcCgodiwgXykgPT4gQWxpZ25lZFNlcXVlbmNlRW5jb2Rlci5jbGVhbih2KS5yZXBsYWNlKC9cXC0vZywgJycpKTtcbiAgICAgICAgY29uc3QgZmFzdGEgPSBfc3RyaW5nc1RvRmFzdGEoc2VxdWVuY2VzKTtcbiAgICAgICAgY29uc3QgQ0xJID0geWllbGQgbmV3IEFpb2xpKHtcbiAgICAgICAgICAgIHRvb2w6ICdrYWxpZ24nLFxuICAgICAgICAgICAgdmVyc2lvbjogJzMuMy4xJyxcbiAgICAgICAgICAgIHJlaW5pdDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFsnZmFzdGEubGVuZ3RoID0nLCBmYXN0YS5sZW5ndGhdKTtcbiAgICAgICAgeWllbGQgQ0xJLmZzLndyaXRlRmlsZSgnaW5wdXQuZmEnLCBmYXN0YSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IHlpZWxkIENMSS5leGVjKCdrYWxpZ24gaW5wdXQuZmEgLWYgZmFzdGEgLW8gcmVzdWx0LmZhc3RhJyk7XG4gICAgICAgIGNvbnNvbGUud2FybihvdXRwdXQpO1xuICAgICAgICBjb25zdCBidWYgPSB5aWVsZCBDTEkuY2F0KCdyZXN1bHQuZmFzdGEnKTtcbiAgICAgICAgaWYgKCFidWYpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGthbGlnbiBvdXRwdXQgbm8gcmVzdWx0YCk7XG4gICAgICAgIGNvbnN0IGFsaWduZWQgPSBfZmFzdGFUb1N0cmluZ3MoYnVmKS5zbGljZSgwLCBzZXF1ZW5jZXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdGd0Q29sID0gREcuQ29sdW1uLmZyb21TdHJpbmdzKGBtc2EoJHtzcmNDb2wubmFtZX0pYCwgYWxpZ25lZCk7XG4gICAgICAgIC8vIHVuaXRzXG4gICAgICAgIGNvbnN0IHNyY1VuaXRzID0gc3JjQ29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgICAgICAgY29uc3QgdGd0VW5pdHMgPSBzcmNVbml0cy5zcGxpdCgnOicpLm1hcCgocCwgaSkgPT4gaSA9PSAxID8gcCArICcuTVNBJyA6IHApLmpvaW4oJzonKTtcbiAgICAgICAgdGd0Q29sLnNldFRhZyhERy5UQUdTLlVOSVRTLCB0Z3RVbml0cyk7XG4gICAgICAgIHRndENvbC5zZW1UeXBlID0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFO1xuICAgICAgICByZXR1cm4gdGd0Q29sO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RNU0FFbm91Z2hNZW1vcnkoY29sKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3Qgc2VxdWVuY2VzQ291bnQgPSBjb2wubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZWx0YSA9IHNlcXVlbmNlc0NvdW50IC8gMTAwO1xuICAgICAgICBmb3IgKGxldCBpID0gZGVsdGE7IGkgPCBzZXF1ZW5jZXNDb3VudDsgaSArPSBkZWx0YSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB5aWVsZCBydW5LYWxpZ24oREcuQ29sdW1uLmZyb21TdHJpbmdzKGNvbC5uYW1lLCBjb2wudG9MaXN0KCkuc2xpY2UoMCwgTWF0aC5yb3VuZChpKSkpKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgcnVuS2FsaWduIHN1Y2NlZWRlZCBvbiAke2l9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgcnVuS2FsaWduIGZhaWxlZCBvbiAke2l9IHdpdGggJyR7ZXJyb3J9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgV2ViTG9nbyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92aWV3ZXJzL3dlYi1sb2dvJztcbi8qKiBDbGFzcyBmb3IgaGFuZGxpbmcgY29udmVyc2lvbiBvZiBub3RhdGlvbiBzeXN0ZW1zIGluIE1hY3JvbW9sZWN1bGUgY29sdW1ucyAqL1xuZXhwb3J0IGNsYXNzIE5vdGF0aW9uQ29udmVydGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2wpIHtcbiAgICAgICAgdGhpcy5fc291cmNlQ29sdW1uID0gY29sO1xuICAgICAgICB0aGlzLl9zb3VyY2VVbml0cyA9IHRoaXMuX3NvdXJjZUNvbHVtbi50YWdzW0RHLlRBR1MuVU5JVFNdO1xuICAgICAgICB0aGlzLl9zb3VyY2VOb3RhdGlvbiA9IHRoaXMuZGV0ZXJtaW5lU291cmNlTm90YXRpb24oKTtcbiAgICB9XG4gICAgZ2V0IHNvdXJjZVVuaXRzKCkgeyByZXR1cm4gdGhpcy5fc291cmNlVW5pdHM7IH1cbiAgICBnZXQgc291cmNlQ29sdW1uKCkgeyByZXR1cm4gdGhpcy5fc291cmNlQ29sdW1uOyB9XG4gICAgZ2V0IHNvdXJjZU5vdGF0aW9uKCkgeyByZXR1cm4gdGhpcy5fc291cmNlTm90YXRpb247IH1cbiAgICBpc0Zhc3RhKCkgeyByZXR1cm4gdGhpcy5zb3VyY2VOb3RhdGlvbiA9PT0gXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovOyB9XG4gICAgaXNTZXBhcmF0b3IoKSB7IHJldHVybiB0aGlzLnNvdXJjZU5vdGF0aW9uID09PSBcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLzsgfVxuICAgIGlzSGVsbSgpIHsgcmV0dXJuIHRoaXMuc291cmNlTm90YXRpb24gPT09IFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi87IH1cbiAgICB0b0Zhc3RhKHRhcmdldE5vdGF0aW9uKSB7IHJldHVybiB0YXJnZXROb3RhdGlvbiA9PT0gXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovOyB9XG4gICAgdG9TZXBhcmF0b3IodGFyZ2V0Tm90YXRpb24pIHsgcmV0dXJuIHRhcmdldE5vdGF0aW9uID09PSBcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLzsgfVxuICAgIHRvSGVsbSh0YXJnZXROb3RhdGlvbikgeyByZXR1cm4gdGFyZ2V0Tm90YXRpb24gPT09IFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi87IH1cbiAgICBpc1JuYSgpIHsgcmV0dXJuIHRoaXMuc291cmNlVW5pdHMudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgncm5hJyk7IH1cbiAgICBpc0RuYSgpIHsgcmV0dXJuIHRoaXMuc291cmNlVW5pdHMudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnZG5hJyk7IH1cbiAgICBpc1BlcHRpZGUoKSB7IHJldHVybiB0aGlzLnNvdXJjZVVuaXRzLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ3B0Jyk7IH1cbiAgICAvKiogQXNzb2NpYXRlIG5vdGF0aW9uIHR5cGVzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdW5pdHMgKi9cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtOT1RBVElPTn0gICAgIE5vdGF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5pdHMgdHlwZVxuICAgICAqL1xuICAgIGRldGVybWluZVNvdXJjZU5vdGF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zb3VyY2VVbml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2Zhc3RhJykpXG4gICAgICAgICAgICByZXR1cm4gXCJGQVNUQVwiIC8qIE5PVEFUSU9OLkZBU1RBICovO1xuICAgICAgICBlbHNlIGlmICh0aGlzLnNvdXJjZVVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnc2VwYXJhdG9yJykpXG4gICAgICAgICAgICByZXR1cm4gXCJTRVBBUkFUT1JcIiAvKiBOT1RBVElPTi5TRVBBUkFUT1IgKi87XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSBleGNlcHRpb25zXG4gICAgICAgICAgICByZXR1cm4gXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lIHRoZSBzZXBhcmF0b3IgdXNlZCBpbiBTRVBBUkFUT1IgY29sdW1uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBkZXRlY3RlZCBzZXBhcmF0b3JcbiAgICAgKi9cbiAgICBkZXRlcm1pbmVTZXBhcmF0b3IoKSB7XG4gICAgICAgIC8vICAgVE9ETzogZmlndXJlIG91dCBob3cgdG8gZGV0ZXJtaW5lIHRoZSBzZXBhcmF0b3IgZWZmaWNpZW50bHlcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5zb3VyY2VDb2x1bW47XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgY29uc3QgcmUgPSAvW15hLXpdLztcbiAgICAgICAgd2hpbGUgKGkgPCBjb2wubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBtb2xlY3VsZSA9IGNvbC5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBmb3VuZFNlcGFyYXRvciA9IG1vbGVjdWxlLnRvTG93ZXJDYXNlKCkubWF0Y2gocmUpO1xuICAgICAgICAgICAgaWYgKGZvdW5kU2VwYXJhdG9yKVxuICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFNlcGFyYXRvclswXTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlcGFyYXRvcnMgZm91bmQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGVtcHR5IGNvbHVtbiBvZiB0aGUgc3BlY2lmaWVkIG5vdGF0aW9uIHR5cGUgYW5kIHRoZSBzYW1lXG4gICAgICogbGVuZ3RoIGFzIHNvdXJjZUNvbHVtblxuICAgICAqXG4gICAgICogQHBhcmFtIHtOT1RBVElPTn0gdGFyZ2V0Tm90YXRpb25cbiAgICAgKiBAcmV0dXJuIHtERy5Db2x1bW59XG4gICAgICovXG4gICAgZ2V0TmV3Q29sdW1uKHRhcmdldE5vdGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuc291cmNlQ29sdW1uO1xuICAgICAgICBjb25zdCBsZW4gPSBjb2wubGVuZ3RoO1xuICAgICAgICBjb25zdCBuYW1lID0gdGFyZ2V0Tm90YXRpb24gKyAnKCcgKyBjb2wubmFtZSArICcpJztcbiAgICAgICAgY29uc3QgbmV3Q29sTmFtZSA9IGNvbC5kYXRhRnJhbWUuY29sdW1ucy5nZXRVbnVzZWROYW1lKG5hbWUpO1xuICAgICAgICAvLyBkdW1teSBjb2RlXG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbiA9IERHLkNvbHVtbi5mcm9tTGlzdCgnc3RyaW5nJywgbmV3Q29sTmFtZSwgbmV3IEFycmF5KGxlbikuZmlsbCgnJykpO1xuICAgICAgICBuZXdDb2x1bW4uc2VtVHlwZSA9ICdNYWNyb21vbGVjdWxlJztcbiAgICAgICAgbmV3Q29sdW1uLnNldFRhZyhERy5UQUdTLlVOSVRTLCB0aGlzLnNvdXJjZVVuaXRzLnJlcGxhY2UodGhpcy5zb3VyY2VOb3RhdGlvbi50b0xvd2VyQ2FzZSgpLnRvU3RyaW5nKCksIHRhcmdldE5vdGF0aW9uLnRvTG93ZXJDYXNlKCkudG9TdHJpbmcoKSkpO1xuICAgICAgICAvLyBUT0RPOiBzcGVjaWZ5IGNlbGwgcmVuZGVyZXJzIGZvciBhbGwgY2FzZXNcbiAgICAgICAgaWYgKHRoaXMudG9GYXN0YSh0YXJnZXROb3RhdGlvbikpIHtcbiAgICAgICAgICAgIG5ld0NvbHVtbi5zZXRUYWcoREcuVEFHUy5DRUxMX1JFTkRFUkVSLCAnTWFjcm9tb2xlY3VsZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdDb2x1bW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBNYWNyb21vbGVjdWxlIGNvbHVtbiBmcm9tIEZBU1RBIHRvIFNFUEFSQVRPUiBub3RhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvciAgQSBzcGVjaWZpYyBzZXBhcmF0b3IgdG8gYmUgdXNlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBnYXBTeW1ib2wgIEdhcCBzeW1ib2wgaW4gRkFTVEEsICctJyBieSBkZWZhdWx0XG4gICAgICogQHJldHVybiB7REcuQ29sdW1ufSAgICAgICAgQSBuZXcgY29sdW1uIGluIFNFUEFSQVRPUiBub3RhdGlvblxuICAgICAqL1xuICAgIGNvbnZlcnRGYXN0YVRvU2VwYXJhdG9yKHNlcGFyYXRvciwgZ2FwU3ltYm9sID0gJy0nKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gc3BsaXR0aW5nIEZBU1RBIHNlcXVlbmNlIGludG8gYW4gYXJyYXkgb2YgbW9ub21lcnM6XG4gICAgICAgIGNvbnN0IHNwbGl0dGVyQXNGYXN0YSA9IFdlYkxvZ28uc3BsaXR0ZXJBc0Zhc3RhO1xuICAgICAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldE5ld0NvbHVtbihcIlNFUEFSQVRPUlwiIC8qIE5PVEFUSU9OLlNFUEFSQVRPUiAqLyk7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBuZXdseSBjcmVhdGVkIGVtcHR5IGNvbHVtblxuICAgICAgICBuZXdDb2x1bW4uaW5pdCgoaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYXN0YVBvbHltZXIgPSB0aGlzLnNvdXJjZUNvbHVtbi5nZXQoaWR4KTtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhTW9ub21lcnNBcnJheSA9IHNwbGl0dGVyQXNGYXN0YShmYXN0YVBvbHltZXIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmYXN0YU1vbm9tZXJzQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZmFzdGFNb25vbWVyc0FycmF5W2ldID09PSBnYXBTeW1ib2wpXG4gICAgICAgICAgICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheVtpXSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhc3RhTW9ub21lcnNBcnJheS5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3Q29sdW1uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgTWFjcm9tb2xlY3VsZSBjb2x1bW4gZnJvbSBGQVNUQSB0byBIRUxNXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmFzdGFHYXBTeW1ib2wgICBPcHRpb25hbCBmYXN0YSBnYXAgc3ltYm9sXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGhlbG1HYXBTeW1ib2wgICAgT3B0aW9uYWwgaGVsbSBnYXAgc3ltYm9sXG4gICAgICogQHJldHVybiB7REcuQ29sdW1ufSAgICAgICAgICAgICAgQSBuZXcgY29sdW1uIGluIEhFTE0gbm90YXRpb25cbiAgICAgKi9cbiAgICBjb252ZXJ0RmFzdGFUb0hlbG0oZmFzdGFHYXBTeW1ib2wgPSAnLScsIGhlbG1HYXBTeW1ib2wgPSAnKicpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBzcGxpdHRpbmcgRkFTVEEgc2VxdWVuY2UgaW50byBhbiBhcnJheSBvZiBtb25vbWVyc1xuICAgICAgICBjb25zdCBzcGxpdHRlckFzRmFzdGEgPSBXZWJMb2dvLnNwbGl0dGVyQXNGYXN0YTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gKHRoaXMuaXNEbmEoKSkgPyAnRE5BMXsnIDpcbiAgICAgICAgICAgICh0aGlzLmlzUm5hKCkpID8gJ1JOQTF7JyA6XG4gICAgICAgICAgICAgICAgKHRoaXMuaXNQZXB0aWRlKCkpID8gJ1BFUFRJREUxeycgOlxuICAgICAgICAgICAgICAgICAgICAnVW5rbm93bic7IC8vIHRoaXMgY2FzZSBzaG91bGQgYmUgaGFuZGxlZCBhcyBleGNlcHRpb25hbFxuICAgICAgICBpZiAocHJlZml4ID09PSAnVW5rbm93bicpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgcGVwdGlkZSwgbm9yIG51Y2xlb3RpZGUnKTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9ICd9JCQkJztcbiAgICAgICAgY29uc3QgbGVmdFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpKSA/ICdEKCcgOlxuICAgICAgICAgICAgKHRoaXMuaXNSbmEoKSkgPyAnUignIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgICAgIGNvbnN0IHJpZ2h0V3JhcHBlciA9ICh0aGlzLmlzRG5hKCkgfHwgdGhpcy5pc1JuYSgpKSA/ICcpUCcgOiAnJzsgLy8gbm8gd3JhcHBlciBmb3IgcGVwdGlkZXNcbiAgICAgICAgY29uc3QgbmV3Q29sdW1uID0gdGhpcy5nZXROZXdDb2x1bW4oXCJIRUxNXCIgLyogTk9UQVRJT04uSEVMTSAqLyk7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICAgICAgbmV3Q29sdW1uLmluaXQoKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmFzdGFQb2x5bWVyID0gdGhpcy5zb3VyY2VDb2x1bW4uZ2V0KGlkeCk7XG4gICAgICAgICAgICBjb25zdCBmYXN0YU1vbm9tZXJzQXJyYXkgPSBzcGxpdHRlckFzRmFzdGEoZmFzdGFQb2x5bWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGhlbG1BcnJheSA9IFtwcmVmaXhdO1xuICAgICAgICAgICAgbGV0IGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFzdGFNb25vbWVyc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZhc3RhTW9ub21lcnNBcnJheVtpXSA9PT0gZmFzdGFHYXBTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiBnYXAgc3ltYm9scyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgICBoZWxtQXJyYXkucHVzaChoZWxtR2FwU3ltYm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdCA9IGZpcnN0SXRlcmF0aW9uID8gJycgOiAnLic7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBbZG90LCBsZWZ0V3JhcHBlciwgZmFzdGFNb25vbWVyc0FycmF5W2ldLCByaWdodFdyYXBwZXJdO1xuICAgICAgICAgICAgICAgICAgICBoZWxtQXJyYXkucHVzaChpdGVtLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlyc3RJdGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhlbG1BcnJheS5wdXNoKHBvc3RmaXgpO1xuICAgICAgICAgICAgcmV0dXJuIGhlbG1BcnJheS5qb2luKCcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDb2x1bW47XG4gICAgfVxuICAgIGhhbmRsZVNlcGFyYXRvckl0ZW1Gb3JGYXN0YShpZHgsIHNlcGFyYXRvckl0ZW1zQXJyYXksIHNlcGFyYXRvciwgZ2FwU3ltYm9sLCBmYXN0YU1vbm9tZXJzQXJyYXkpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNlcGFyYXRvckl0ZW1zQXJyYXlbaWR4XTtcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gdGhlIGNhc2Ugb2YgYSBtdWx0aS1jaGFyYWN0ZXIgbW9ub21lclxuICAgICAgICAgICAgY29uc3QgbW9ub21lciA9ICdbJyArIGl0ZW0gKyAnXSc7XG4gICAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChtb25vbWVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbSA9PT0gc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBpZiAoaWR4ICE9PSAwICYmIHNlcGFyYXRvckl0ZW1zQXJyYXlbaWR4IC0gMV0gPT09IHNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChnYXBTeW1ib2wpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnZlcnRTZXBhcmF0b3JUb0Zhc3RhKHNlcGFyYXRvciA9IG51bGwsIGdhcFN5bWJvbCA9ICctJykge1xuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnRhdGlvblxuICAgICAgICAvLyAqIHNpbWlsYXJseSB0byBmYXN0YTJzZXBhcmF0b3IsIGRpdmlkZSBzdHJpbmcgaW50byBtb25vbWVyc1xuICAgICAgICAvLyAqIGFkamFjZW50IHNlcGFyYXRvcnMgaXMgYSBnYXAgKHN5bWJvbCB0byBiZSBzcGVjaWZpZWQpXG4gICAgICAgIC8vICogdGhlIG1vbm9tZXJzIE1VU1QgYmUgc2luZ2xlLWNoYXJhY3RlciBvbmxlcywgb3RoZXJ3aXNlIGZvcmJpZFxuICAgICAgICAvLyAqIE5PLCB0aGV5IGNhbiBiZSBtdWx0aS1jaGFyYWN0ZXJzXG4gICAgICAgIC8vIGNvbnZlcnNpb25cbiAgICAgICAgLy8gKiBjb25zaWRlciBhdXRvbWF0aWMgZGV0ZXJtaW5pbmcgdGhlIHNlcGFyYXRvclxuICAgICAgICAvLyBpZiAoc2VwYXJhdG9yID09PSBudWxsKVxuICAgICAgICAvLyAgIHNlcGFyYXRvciA9IHRoaXMuZGV0ZXJtaW5lU2VwYXJhdG9yKCk7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gc3BsaXR0aW5nIEZBU1RBIHNlcXVlbmNlIGludG8gYW4gYXJyYXkgb2YgbW9ub21lcnNcbiAgICAgICAgLy9jb25zdCBzcGxpdHRlckFzU2VwYXJhdG9yID0gV2ViTG9nby5nZXRTcGxpdHRlcldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yKTtcbiAgICAgICAgY29uc3Qgc3BsaXR0ZXIgPSBXZWJMb2dvLmdldFNwbGl0dGVyRm9yQ29sdW1uKHRoaXMuX3NvdXJjZUNvbHVtbik7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKFwiRkFTVEFcIiAvKiBOT1RBVElPTi5GQVNUQSAqLyk7XG4gICAgICAgIC8vIGFzc2lnbiB0aGUgdmFsdWVzIHRvIHRoZSBlbXB0eSBjb2x1bW5cbiAgICAgICAgbmV3Q29sdW1uLmluaXQoKGlkeCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdG9yUG9seW1lciA9IHRoaXMuc291cmNlQ29sdW1uLmdldChpZHgpO1xuICAgICAgICAgICAgLy8gaXRlbXMgY2FuIGJlIG1vbm9tZXJzIG9yIHNlcGFyYXRvcnNcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRvckl0ZW1zQXJyYXkgPSBzcGxpdHRlcihzZXBhcmF0b3JQb2x5bWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhTW9ub21lcnNBcnJheSA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXBhcmF0b3JJdGVtc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNlcGFyYXRvckl0ZW1zQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKGdhcFN5bWJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY2FzZSBvZiBhIG11bHRpLWNoYXJhY3RlciBtb25vbWVyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbm9tZXIgPSAnWycgKyBpdGVtICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICBmYXN0YU1vbm9tZXJzQXJyYXkucHVzaChtb25vbWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZhc3RhTW9ub21lcnNBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYXN0YU1vbm9tZXJzQXJyYXkuam9pbignJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3Q29sdW1uO1xuICAgIH1cbiAgICBjb252ZXJ0U2VwYXJhdG9yVG9IZWxtKGZhc3RhR2FwU3ltYm9sID0gJy0nLCBoZWxtR2FwU3ltYm9sID0gJyonKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gc3BsaXR0aW5nIEZBU1RBIHNlcXVlbmNlIGludG8gYW4gYXJyYXkgb2YgbW9ub21lcnNcbiAgICAgICAgY29uc3Qgc3BsaXR0ZXIgPSBXZWJMb2dvLmdldFNwbGl0dGVyRm9yQ29sdW1uKHRoaXMuX3NvdXJjZUNvbHVtbik7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9ICh0aGlzLmlzRG5hKCkpID8gJ0ROQTF7JyA6XG4gICAgICAgICAgICAodGhpcy5pc1JuYSgpKSA/ICdSTkExeycgOlxuICAgICAgICAgICAgICAgICh0aGlzLmlzUGVwdGlkZSgpKSA/ICdQRVBUSURFMXsnIDpcbiAgICAgICAgICAgICAgICAgICAgJ1Vua25vd24nOyAvLyB0aGlzIGNhc2Ugc2hvdWxkIGJlIGhhbmRsZWQgYXMgZXhjZXB0aW9uYWxcbiAgICAgICAgaWYgKHByZWZpeCA9PT0gJ1Vua25vd24nKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZWl0aGVyIHBlcHRpZGUsIG5vciBudWNsZW90aWRlJyk7XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSAnfSQkJCc7XG4gICAgICAgIGNvbnN0IGxlZnRXcmFwcGVyID0gKHRoaXMuaXNEbmEoKSkgPyAnRCgnIDpcbiAgICAgICAgICAgICh0aGlzLmlzUm5hKCkpID8gJ1IoJyA6ICcnOyAvLyBubyB3cmFwcGVyIGZvciBwZXB0aWRlc1xuICAgICAgICBjb25zdCByaWdodFdyYXBwZXIgPSAodGhpcy5pc0RuYSgpIHx8IHRoaXMuaXNSbmEoKSkgPyAnKVAnIDogJyc7IC8vIG5vIHdyYXBwZXIgZm9yIHBlcHRpZGVzXG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbiA9IHRoaXMuZ2V0TmV3Q29sdW1uKFwiSEVMTVwiIC8qIE5PVEFUSU9OLkhFTE0gKi8pO1xuICAgICAgICAvLyBhc3NpZ24gdGhlIHZhbHVlcyB0byB0aGUgZW1wdHkgY29sdW1uXG4gICAgICAgIG5ld0NvbHVtbi5pbml0KChpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZhc3RhUG9seW1lciA9IHRoaXMuc291cmNlQ29sdW1uLmdldChpZHgpO1xuICAgICAgICAgICAgY29uc3QgZmFzdGFNb25vbWVyc0FycmF5ID0gc3BsaXR0ZXIoZmFzdGFQb2x5bWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGhlbG1BcnJheSA9IFtwcmVmaXhdO1xuICAgICAgICAgICAgbGV0IGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmFzdGFNb25vbWVyc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZhc3RhTW9ub21lcnNBcnJheVtpXSA9PT0gZmFzdGFHYXBTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdmVyaWZ5IHRoZSBjb3JyZWN0bmVzcyBvZiBnYXAgc3ltYm9scyBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgICBoZWxtQXJyYXkucHVzaChoZWxtR2FwU3ltYm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdCA9IGZpcnN0SXRlcmF0aW9uID8gJycgOiAnLic7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBbZG90LCBsZWZ0V3JhcHBlciwgZmFzdGFNb25vbWVyc0FycmF5W2ldLCByaWdodFdyYXBwZXJdO1xuICAgICAgICAgICAgICAgICAgICBoZWxtQXJyYXkucHVzaChpdGVtLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmlyc3RJdGVyYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhlbG1BcnJheS5wdXNoKHBvc3RmaXgpO1xuICAgICAgICAgICAgcmV0dXJuIGhlbG1BcnJheS5qb2luKCcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdDb2x1bW47XG4gICAgfVxuICAgIGNvbnZlcnRIZWxtVG9GYXN0YSgpIHtcbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50YXRpb25cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV3Q29sdW1uKFwiRkFTVEFcIiAvKiBOT1RBVElPTi5GQVNUQSAqLyk7XG4gICAgfVxuICAgIGNvbnZlcnRIZWxtVG9TZXBhcmF0b3IoKSB7XG4gICAgICAgIC8vIFRPRE86IGltcGxlbWVudGF0aW9yZXR1cm4gdGhpcy5nZXROZXdDb2x1bW4oKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV3Q29sdW1uKFwiU0VQQVJBVE9SXCIgLyogTk9UQVRJT04uU0VQQVJBVE9SICovKTtcbiAgICB9XG4gICAgLyoqIERpc3BhdGNoZXIgbWV0aG9kIGZvciBub3RhdGlvbiBjb252ZXJzaW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge05PVEFUSU9OfSB0YXJnZXROb3RhdGlvbiAgIE5vdGF0aW9uIHdlIHdhbnQgdG8gY29udmVydCB0b1xuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gdGd0U2VwYXJhdG9yICAgUG9zc2libGUgc2VwYXJhdG9yXG4gICAgICogQHJldHVybiB7REcuQ29sdW1ufSAgICAgICAgICAgICAgICBDb252ZXJ0ZWQgY29sdW1uXG4gICAgICovXG4gICAgY29udmVydCh0YXJnZXROb3RhdGlvbiwgdGd0U2VwYXJhdG9yID0gbnVsbCkge1xuICAgICAgICAvLyBwb3NzaWJsZSBleGNlcHRpb25zXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZU5vdGF0aW9uID09PSB0YXJnZXROb3RhdGlvbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGFyZ2V0IG5vdGF0aW9uIGlzIGludmFsaWQnKTtcbiAgICAgICAgaWYgKHRoaXMudG9TZXBhcmF0b3IodGFyZ2V0Tm90YXRpb24pICYmIHRndFNlcGFyYXRvciA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGFyZ2V0IHNlcGFyYXRvciBpcyBub3Qgc3BlY2lmaWVkJyk7XG4gICAgICAgIGlmICh0aGlzLmlzRmFzdGEoKSAmJiB0aGlzLnRvU2VwYXJhdG9yKHRhcmdldE5vdGF0aW9uKSAmJiB0Z3RTZXBhcmF0b3IgIT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RmFzdGFUb1NlcGFyYXRvcih0Z3RTZXBhcmF0b3IpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmlzRmFzdGEoKSAmJiB0aGlzLnRvSGVsbSh0YXJnZXROb3RhdGlvbikpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0RmFzdGFUb0hlbG0oKTtcbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc1NlcGFyYXRvcigpICYmIHRoaXMudG9GYXN0YSh0YXJnZXROb3RhdGlvbikpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0U2VwYXJhdG9yVG9GYXN0YSh0Z3RTZXBhcmF0b3IpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmlzU2VwYXJhdG9yKCkgJiYgdGhpcy50b0hlbG0odGFyZ2V0Tm90YXRpb24pKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydFNlcGFyYXRvclRvSGVsbSgpO1xuICAgICAgICBlbHNlIGlmICh0aGlzLmlzSGVsbSgpICYmIHRoaXMudG9GYXN0YSh0YXJnZXROb3RhdGlvbikpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0SGVsbVRvRmFzdGEoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydEhlbG1Ub1NlcGFyYXRvcigpO1xuICAgIH1cbn1cbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgeyBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvc2ltaWxhcml0eS1tZXRyaWNzJztcbmltcG9ydCB7IEF2YWlsYWJsZU1ldHJpY3MgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy90eXBlZC1tZXRyaWNzJztcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZUdldFNpbWlsYXJpdGllcyhjb2wsIHNlcSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ0FycmF5ID0gY29sLnRvTGlzdCgpO1xuICAgICAgICBjb25zdCBkaXN0YW5jZXMgPSBuZXcgQXJyYXkoc3RyaW5nQXJyYXkubGVuZ3RoKS5maWxsKDAuMCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5nQXJyYXkubGVuZ3RoOyArK2kpXG4gICAgICAgICAgICBkaXN0YW5jZXNbaV0gPSBnZXRTaW1pbGFyaXR5RnJvbURpc3RhbmNlKEF2YWlsYWJsZU1ldHJpY3NbJ1N0cmluZyddWydMZXZlbnNodGVpbiddKHN0cmluZ0FycmF5W2ldLCBzZXEpKTtcbiAgICAgICAgcmV0dXJuIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgJ2Rpc3RhbmNlcycsIGRpc3RhbmNlcyk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZHJhd1Rvb2x0aXAocGFyYW1zKSB7XG4gICAgcGFyYW1zLnRvb2x0aXBzW3BhcmFtcy5saW5lLmlkXSA9IHVpLmRpdkgoW10pO1xuICAgIGNvbnN0IGNvbHVtbk5hbWVzID0gdWkuZGl2VihbXG4gICAgICAgIHVpLmRpdlRleHQoJ3NlcXVlbnNlJyksXG4gICAgICAgIHVpLmRpdlRleHQocGFyYW1zLmFjdGl2aXR5Lm5hbWUpLFxuICAgIF0pO1xuICAgIGNvbHVtbk5hbWVzLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7XG4gICAgY29sdW1uTmFtZXMuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICBjb2x1bW5OYW1lcy5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICBwYXJhbXMudG9vbHRpcHNbcGFyYW1zLmxpbmUuaWRdLmFwcGVuZChjb2x1bW5OYW1lcyk7XG4gICAgcGFyYW1zLmxpbmUubW9scy5mb3JFYWNoKChtb2wpID0+IHtcbiAgICAgICAgY29uc3Qgc2VxID0gdWkuZGl2VGV4dChwYXJhbXMuZGYuZ2V0KHBhcmFtcy5zZXFDb2wubmFtZSwgbW9sKSk7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5ID0gdWkuZGl2VGV4dChwYXJhbXMuZGYuZ2V0KHBhcmFtcy5hY3Rpdml0eS5uYW1lLCBtb2wpLnRvRml4ZWQoMikpO1xuICAgICAgICBhY3Rpdml0eS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBhY3Rpdml0eS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdsZWZ0JztcbiAgICAgICAgYWN0aXZpdHkuc3R5bGUucGFkZGluZ0xlZnQgPSAnMzBweCc7XG4gICAgICAgIHBhcmFtcy50b29sdGlwc1twYXJhbXMubGluZS5pZF0uYXBwZW5kKHVpLmRpdlYoW1xuICAgICAgICAgICAgc2VxLFxuICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgIF0sIHsgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6ICc1cHgnIH0gfSkpO1xuICAgIH0pO1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgQXZhaWxhYmxlTWV0cmljcyB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL3R5cGVkLW1ldHJpY3MnO1xuaW1wb3J0IHsgcmVkdWNlRGltZW5zaW5hbGl0eVdpdGhOb3JtYWxpemF0aW9uIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvc2VxdWVuY2Utc3BhY2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHNlcXVlbmNlU3BhY2Uoc3BhY2VQYXJhbXMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgcHJlcGFyZWREYXRhO1xuICAgICAgICBpZiAoIShzcGFjZVBhcmFtcy5zZXFDb2wudGFnc1tERy5UQUdTLlVOSVRTXSA9PT0gJ0hFTE0nKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VwID0gc3BhY2VQYXJhbXMuc2VxQ29sLmdldFRhZygnc2VwYXJhdG9yJyk7XG4gICAgICAgICAgICBjb25zdCBzZXBGaW5hbCA9IHNlcCA/IHNlcCA9PT0gJy4nID8gJ1xcXFxcXC4nIDogc2VwIDogJy0nO1xuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHNlcEZpbmFsLCAnZycpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKEF2YWlsYWJsZU1ldHJpY3NbJ1N0cmluZyddKS5pbmNsdWRlcyhzcGFjZVBhcmFtcy5zaW1pbGFyaXR5TWV0cmljKSlcbiAgICAgICAgICAgICAgICBwcmVwYXJlZERhdGEgPSBzcGFjZVBhcmFtcy5zZXFDb2wudG9MaXN0KCkubWFwKCh2KSA9PiB2LnJlcGxhY2UocmVnZXgsICcnKSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcHJlcGFyZWREYXRhID0gc3BhY2VQYXJhbXMuc2VxQ29sLnRvTGlzdCgpLm1hcCgodikgPT4gdi5yZXBsYWNlKHJlZ2V4LCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJlcGFyZWREYXRhID0gc3BhY2VQYXJhbXMuc2VxQ29sLnRvTGlzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcXVlbmNlU3BhY2VSZXN1bHQgPSB5aWVsZCByZWR1Y2VEaW1lbnNpbmFsaXR5V2l0aE5vcm1hbGl6YXRpb24ocHJlcGFyZWREYXRhLCBzcGFjZVBhcmFtcy5tZXRob2ROYW1lLCBzcGFjZVBhcmFtcy5zaW1pbGFyaXR5TWV0cmljLCBzcGFjZVBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29scyA9IHNwYWNlUGFyYW1zLmVtYmVkQXhlc05hbWVzLm1hcCgobmFtZSwgaW5kZXgpID0+IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KG5hbWUsIHNlcXVlbmNlU3BhY2VSZXN1bHQuZW1iZWRkaW5nW2luZGV4XSkpO1xuICAgICAgICByZXR1cm4geyBkaXN0YW5jZTogc2VxdWVuY2VTcGFjZVJlc3VsdC5kaXN0YW5jZSwgY29vcmRpbmF0ZXM6IG5ldyBERy5Db2x1bW5MaXN0KGNvbHMpIH07XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRkaW5nQ29sc05hbWVzKGRmKSB7XG4gICAgY29uc3QgYXhlcyA9IFsnRW1iZWRfWCcsICdFbWJlZF9ZJ107XG4gICAgY29uc3QgY29sTmFtZUluZCA9IGRmLmNvbHVtbnMubmFtZXMoKS5maWx0ZXIoKGl0KSA9PiBpdC5pbmNsdWRlcyhheGVzWzBdKSkubGVuZ3RoICsgMTtcbiAgICByZXR1cm4gYXhlcy5tYXAoKGl0KSA9PiBgJHtpdH1fJHtjb2xOYW1lSW5kfWApO1xufVxuIiwiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFdlYkxvZ28gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL2Jpby9zcmMvdmlld2Vycy93ZWItbG9nbyc7XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmV4cG9ydCBjb25zdCBIRUxNX0NPUkVfTElCX0ZJTEVOQU1FID0gJy9zYW1wbGVzL0hFTE1Db3JlTGlicmFyeS5qc29uJztcbmV4cG9ydCBjb25zdCBIRUxNX0NPUkVfTElCX01PTk9NRVJfU1lNQk9MID0gJ3N5bWJvbCc7XG5leHBvcnQgY29uc3QgSEVMTV9DT1JFX0xJQl9NT0xGSUxFID0gJ21vbGZpbGUnO1xuZXhwb3J0IGNvbnN0IEhFTE1fQ09SRV9GSUVMRFMgPSBbJ3N5bWJvbCcsICdtb2xmaWxlJywgJ3Jncm91cHMnLCAnbmFtZSddO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbGZpbGVzRnJvbVNlcShjb2wsIG1vbm9tZXJzTGliT2JqZWN0KSB7XG4gICAgY29uc3QgdW5pdHMgPSBjb2wudGFnc1tERy5UQUdTLlVOSVRTXTtcbiAgICBjb25zdCBzZXAgPSBjb2wuZ2V0VGFnKCdzZXBhcmF0b3InKTtcbiAgICBjb25zdCBzcGxpdHRlckZ1bmMgPSBXZWJMb2dvLmdldFNwbGl0dGVyKHVuaXRzLCBzZXApO1xuICAgIGNvbnN0IG1vbm9tZXJzRGljdCA9IGNyZWF0ZU1vbW9tZXJzTW9sRGljdChtb25vbWVyc0xpYk9iamVjdCk7XG4gICAgY29uc3QgbW9sRmlsZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbC5sZW5ndGg7ICsraSkge1xuICAgICAgICBjb25zdCBtb25vbWVycyA9IHNwbGl0dGVyRnVuYyhjb2wuZ2V0KGkpKTtcbiAgICAgICAgY29uc3QgbW9sRmlsZXNGb3JTZXEgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBtb25vbWVycy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgaWYgKG1vbm9tZXJzW2pdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtb25vbWVyc0RpY3RbbW9ub21lcnNbal1dKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgTW9ub21lciAke21vbm9tZXJzW2pdfSBpcyBtaXNzaW5nIGluIEhFTE0gbGlicmFyeS4gU3RydWN0dXJlIGNhbm5vdCBiZSBjcmVhdGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb2xGaWxlc0ZvclNlcS5wdXNoKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobW9ub21lcnNEaWN0W21vbm9tZXJzW2pdXSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtb2xGaWxlcy5wdXNoKG1vbEZpbGVzRm9yU2VxKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vbEZpbGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vbW9tZXJzTW9sRGljdChsaWIpIHtcbiAgICBjb25zdCBkaWN0ID0ge307XG4gICAgbGliLmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgIGlmIChpdFsncG9seW1lclR5cGUnXSA9PT0gJ1BFUFRJREUnKSB7XG4gICAgICAgICAgICBjb25zdCBtb25vbWVyT2JqZWN0ID0ge307XG4gICAgICAgICAgICBIRUxNX0NPUkVfRklFTERTLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgbW9ub21lck9iamVjdFtmaWVsZF0gPSBpdFtmaWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpY3RbaXRbSEVMTV9DT1JFX0xJQl9NT05PTUVSX1NZTUJPTF1dID0gbW9ub21lck9iamVjdDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkaWN0O1xufVxuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFZkUmVnaW9uVHlwZSB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvYmlvL3NyYy92ZC1yZWdpb25zJztcbmNvbnN0IHZydCA9IFZkUmVnaW9uVHlwZTtcbi8vIFBvc2l0aW9ucyBvZiByZWdpb25zIGZvciBudW1iZXJpbmcgc2NoZW1lc1xuLy8gaHR0cDovL3d3dy5iaW9pbmYub3JnLnVrL2Ficy9pbmZvLmh0bWxcbi8vIGNvbnN0IGltZ3RSZWdpb25zOiBWZFJlZ2lvbltdID0gW1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkZSLCAnRlIxJywgJ0xpZ2h0JywgMSwgJzEnLCAnMjYnKSxcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSMScsICdIZWF2eScsIDEsICcxJywgJzI2JyksXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjEnLCAnTGlnaHQnLCAyLCAnMjcnLCAnMzgnKSwgLy8gMjctMzJcbi8vICAgbmV3IFZkUmVnaW9uKHZydC5DRFIsICdDRFIxJywgJ0hlYXZ5JywgMiwgJzI3JywgJzM4JyksIC8vIDI3LTMyXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkZSLCAnRlIyJywgJ0xpZ2h0JywgMywgJzM5JywgJzU1JyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjInLCAnSGVhdnknLCAzLCAnMzknLCAnNTUnKSxcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuQ0RSLCAnQ0RSMicsICdMaWdodCcsIDQsICc1NicsICc2NScpLFxuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjInLCAnSGVhdnknLCA0LCAnNTYnLCAnNjUnKSxcbi8vXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjMnLCAnTGlnaHQnLCA1LCAnNjYnLCAnMTA0JyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjMnLCAnSGVhdnknLCA1LCAnNjYnLCAnMTA0JyksXG4vL1xuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjMnLCAnTGlnaHQnLCA2LCAnMTA1JywgJzExNycpLFxuLy8gICBuZXcgVmRSZWdpb24odnJ0LkNEUiwgJ0NEUjMnLCAnSGVhdnknLCA2LCAnMTA1JywgJzExNycpLFxuLy9cbi8vICAgbmV3IFZkUmVnaW9uKHZydC5GUiwgJ0ZSNCcsICdMaWdodCcsIDcsICcxMTgnLCBudWxsLyoxMjcqLyksXG4vLyAgIG5ldyBWZFJlZ2lvbih2cnQuRlIsICdGUjQnLCAnSGVhdnknLCA3LCAnMTE4JywgbnVsbC8qMTI4Ki8pLFxuLy8gXTtcbi8qKiBWaWV3ZXIgd2l0aCB0YWJzIGJhc2VkIG9uIGRlc2NyaXB0aW9uIG9mIGNoYWluIHJlZ2lvbnMuXG4gKiAgVXNlZCB0byBkZWZpbmUgcmVnaW9ucyBvZiBhbiBpbW11bm9nbG9idWxpbiBMQy5cbiAqL1xuZXhwb3J0IGNsYXNzIFZkUmVnaW9uc1ZpZXdlciBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gcHJpdmF0ZSByZWdpb25zRGY6IERHLkRhdGFGcmFtZTtcbiAgICAgICAgdGhpcy5yZWdpb25zRmcgPSBudWxsO1xuICAgICAgICAvLyBwcml2YXRlIHJlZ2lvbnNUVjogREcuVGFibGVWaWV3O1xuICAgICAgICB0aGlzLnJlZ2lvbnNSb290ID0gbnVsbDtcbiAgICAgICAgdGhpcy5pc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhbmVsTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMucmVnaW9ucyA9IFtdO1xuICAgICAgICAvLyAjcmVnaW9uIC0tIEhhbmRsZSBjb250cm9scycgZXZlbnRzIC0tXG4gICAgICAgIHRoaXMucmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gI2VuZHJlZ2lvblxuICAgICAgICAvLyNyZWdpb24gLS0gVmlldyAtLVxuICAgICAgICB0aGlzLmhvc3QgPSBudWxsO1xuICAgICAgICB0aGlzLm1haW5MYXlvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmxvZ29zID0gW107XG4gICAgICAgIC8vIFRvIHByZXZlbnQgYW1iaWd1b3VzIG51bWJlcmluZyBzY2hlbWUgaW4gTUxCXG4gICAgICAgIHRoaXMucmVnaW9uVHlwZXMgPSB0aGlzLnN0cmluZ0xpc3QoJ3JlZ2lvblR5cGVzJywgW3ZydC5DRFJdLCB7IGNob2ljZXM6IE9iamVjdC52YWx1ZXModnJ0KS5maWx0ZXIoKHQpID0+IHQgIT0gdnJ0LlVua25vd24pIH0pO1xuICAgICAgICB0aGlzLmNoYWlucyA9IHRoaXMuc3RyaW5nTGlzdCgnY2hhaW5zJywgWydIZWF2eScsICdMaWdodCddLCB7IGNob2ljZXM6IFsnSGVhdnknLCAnTGlnaHQnXSB9KTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWVQb3N0Zml4ID0gdGhpcy5zdHJpbmcoJ3NlcXVlbmNlQ29sdW1uTmFtZVBvc3RmaXgnLCAnY2hhaW4gc2VxdWVuY2UnKTtcbiAgICB9XG4gICAgZ2V0IGRmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhRnJhbWU7XG4gICAgfVxuICAgIC8vIFRPRE86IC5vblRhYmxlQXR0YWNoZWQgaXMgbm90IGNhbGxpbmcgb24gZGF0YUZyYW1lIHNldCwgb25Qcm9wZXJ0eUNoYW5nZWQgIGFsc28gbm90IGNhbGxpbmdcbiAgICBzZXREZih2YWx1ZSwgcmVnaW9ucykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVmRSZWdpb25zVmlld2VyLnNldERmKCknKTtcbiAgICAgICAgICAgIHlpZWxkIHRoaXMuZGVzdHJveVZpZXcoKTtcbiAgICAgICAgICAgIHRoaXMucmVnaW9ucyA9IHJlZ2lvbnM7XG4gICAgICAgICAgICB0aGlzLmRhdGFGcmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5idWlsZFZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAvLyNyZWdpb24gcmVnaW9uc0RGIHdpdGggZmlsdGVyXG4gICAgICAgICAgICAvLyB0aGlzLnJlZ2lvbnNEZiA9IERHLkRhdGFGcmFtZS5mcm9tT2JqZWN0cyh0aGlzLnJlZ2lvbnMpO1xuICAgICAgICAgICAgLy8gdGhpcy5yZWdpb25zRGYucm93cy5maWx0ZXIoKHJvdykgPT4gcm93Lm5hbWUgPT0gJ0NEUjEnKTtcbiAgICAgICAgICAgIC8vIC8vIFRvIGF2YWlsYWJsZSBvcHRpb25zIC9cbiAgICAgICAgICAgIC8vIHRoaXMucmVnaW9uc0ZnID0gKGF3YWl0IHRoaXMucmVnaW9uc0RmLnBsb3QuZnJvbVR5cGUoREcuVklFV0VSLkZJTFRFUlMsIHtcbiAgICAgICAgICAgIC8vICAgLy8gY29sdW1uTmFtZXM6IFsnbmFtZScsXSxcbiAgICAgICAgICAgIC8vICAgc2hvd0ZpbHRlckNvdW50c0luZGljYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gICBzaG93SGVhZGVyOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgc2hvd1NlYXJjaEJveDogZmFsc2UsXG4gICAgICAgICAgICAvLyAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgIC8vICAgICB7dHlwZTogREcuRklMVEVSX1RZUEUuQ0FURUdPUklDQUwsIGNvbHVtbjogJ3R5cGUnLCBsYWJlbDogJ1JlZ2lvbiBuYW1lJywgc2hvd0hpc3RvZ3JhbTogZmFsc2V9LFxuICAgICAgICAgICAgLy8gICAgIHt0eXBlOiBERy5GSUxURVJfVFlQRS5DQVRFR09SSUNBTCwgY29sdW1uOiAnbmFtZScsIGxhYmVsOiAnUmVnaW9uIHR5cGUnLCBzaG93SGlzdG9ncmFtOiBmYWxzZX0sXG4gICAgICAgICAgICAvLyAgIF0sXG4gICAgICAgICAgICAvLyAgIHRpdGxlOiAnUmVnaW9ucyBmaWx0ZXInLFxuICAgICAgICAgICAgLy8gICBzaG93VGl0bGU6IHRydWUsXG4gICAgICAgICAgICAvLyAgIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGZvciByZWdpb25zIG9mIG11bHRpcGxlIGFsaWdubWVudCBieSBJTUdUIG5vbWVuY2xhdHVyZScsXG4gICAgICAgICAgICAvLyAgIHNvbWVQcm9wZXJ0eTogJ0hlbGxvJyxcbiAgICAgICAgICAgIC8vIH0pKSBhcyBERy5GaWx0ZXJHcm91cDtcbiAgICAgICAgICAgIC8vI2VuZHJlZ2lvbiByZWdpb25zREYgd2l0aCBmaWx0ZXJcbiAgICAgICAgICAgIC8vIHRoaXMubWxiVmlldy5kb2NrTWFuYWdlci5kb2NrKHRoaXMucmVnaW9uc0ZnLnJvb3QsIERHLkRPQ0tfVFlQRS5MRUZULCByb290Tm9kZSwgJ0ZpbHRlciByZWdpb25zJywgMC4yKTtcbiAgICAgICAgICAgIHRoaXMuc3Vicy5wdXNoKHVpLm9uU2l6ZUNoYW5nZWQodGhpcy5yb290KS5zdWJzY3JpYmUodGhpcy5yb290T25TaXplQ2hhbmdlZC5iaW5kKHRoaXMpKSk7XG4gICAgICAgICAgICAvLyByeGpzLmZyb21FdmVudCh0aGlzLnJvb3QsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUodGhpcy5vbk1vdXNlTW92ZVJvb3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbk1vdXNlTW92ZVJvb3QuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB5aWVsZCB0aGlzLmJ1aWxkVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25UYWJsZUF0dGFjaGVkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgeWllbGQgdGhpcy5pbml0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBfc3VwZXIgPSBPYmplY3QuY3JlYXRlKG51bGwsIHtcbiAgICAgICAgICAgIG9uUHJvcGVydHlDaGFuZ2VkOiB7IGdldDogKCkgPT4gc3VwZXIub25Qcm9wZXJ0eUNoYW5nZWQgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIF9zdXBlci5vblByb3BlcnR5Q2hhbmdlZC5jYWxsKHRoaXMsIHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHkubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWdpb25UeXBlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2hhaW5zJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzZXF1ZW5jZUNvbHVtbk5hbWVQb3N0Zml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3BlbihtbGJWaWV3KSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhbmVsTm9kZSA9IG1sYlZpZXcuZG9ja01hbmFnZXIuZG9jayh0aGlzLnJvb3QsIERHLkRPQ0tfVFlQRS5UT1AsIG51bGwsICdSZWdpb25zJywgMC4yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNob3cobWxiVmlldykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcm9vdE9uU2l6ZUNoYW5nZWQoYXJncykge1xuICAgICAgICB0aGlzLmNhbGNTaXplKCk7XG4gICAgfVxuICAgIGRlc3Ryb3lWaWV3KCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgLy8gVE9ETzogVW5zdWJzY3JpYmUgZnJvbSBhbmQgcmVtb3ZlIGFsbCB2aWV3IGVsZW1lbnRzXG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBWZFJlZ2lvbnNWaWV3ZXIuZGVzdHJveVZpZXcoIG1haW5MYXlvdXQgPSAkeyF0aGlzLm1haW5MYXlvdXQgPyAnbm9uZScgOiAndmFsdWUnfSApYCk7XG4gICAgICAgICAgICBpZiAodGhpcy5tYWluTGF5b3V0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnJvb3QucmVtb3ZlQ2hpbGQodGhpcy5ob3N0KTtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5MYXlvdXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3N0LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaG9zdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluTGF5b3V0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGJ1aWxkVmlldygpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1ZkUmVnaW9uc1ZpZXdlci5idWlsZFZpZXcoKSBzdGFydCcpO1xuICAgICAgICAgICAgY29uc3QgY29sTmFtZXMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi50aGlzLmNoYWlucy5tYXAoKGNoYWluKSA9PiAoeyBbY2hhaW5dOiBgJHtjaGFpbn0gJHt0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZVBvc3RmaXh9YCB9KSkpO1xuICAgICAgICAgICAgY29uc3QgcmVnaW9uc0ZpbHRlcmVkID0gdGhpcy5yZWdpb25zLmZpbHRlcigocikgPT4gdGhpcy5yZWdpb25UeXBlcy5pbmNsdWRlcyhyLnR5cGUpKTtcbiAgICAgICAgICAgIGNvbnN0IG9yZGVyTGlzdCA9IEFycmF5LmZyb20obmV3IFNldChyZWdpb25zRmlsdGVyZWQubWFwKChyKSA9PiByLm9yZGVyKSkpLnNvcnQoKTtcbiAgICAgICAgICAgIHRoaXMubG9nb3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IG9yZGVySSA9IDA7IG9yZGVySSA8IG9yZGVyTGlzdC5sZW5ndGg7IG9yZGVySSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnaW9uQ2hhaW5zID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFpbiBvZiB0aGlzLmNoYWlucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdpb24gPSByZWdpb25zRmlsdGVyZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKChyKSA9PiByLm9yZGVyID09IG9yZGVyTGlzdFtvcmRlckldICYmIHIuY2hhaW4gPT0gY2hhaW4pO1xuICAgICAgICAgICAgICAgICAgICByZWdpb25DaGFpbnNbY2hhaW5dID0gKHlpZWxkIHRoaXMuZGF0YUZyYW1lLnBsb3QuZnJvbVR5cGUoJ1dlYkxvZ28nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZUNvbHVtbk5hbWU6IGNvbE5hbWVzW2NoYWluXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25OYW1lOiByZWdpb24ucG9zaXRpb25TdGFydE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbk5hbWU6IHJlZ2lvbi5wb3NpdGlvbkVuZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXhXaWR0aDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXZWJMb2dvIGNyZWF0aW9uIGZpcmVzIG9uUm9vdFNpemVDaGFuZ2VkIGV2ZW50IGV2ZW4gYmVmb3JlIGNvbnRyb2wgYmVpbmcgYWRkZWQgdG8gdGhpcy5sb2dvc1xuICAgICAgICAgICAgICAgIHRoaXMubG9nb3Nbb3JkZXJJXSA9IHJlZ2lvbkNoYWlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHVpLnRhYmxlRnJvbU1hcCgpXG4gICAgICAgICAgICAvLyBERy5IdG1sVGFibGUuY3JlYXRlKClcbiAgICAgICAgICAgIHRoaXMubWFpbkxheW91dCA9IHVpLnRhYmxlKHRoaXMuY2hhaW5zLCAoY2hhaW4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBjaGFpbiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAuLi4ob3JkZXJMaXN0Lmxlbmd0aCA+IDAgPyBbdWkuZGl2KGNoYWluLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiAncm90YXRlKC05MGRlZyknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnMTJweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzI0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiAnNnB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KV0gOiBbXSksXG4gICAgICAgICAgICAgICAgICAgIC8vIExpc3Qgd2l0aCBjb250cm9scyBmb3IgcmVnaW9uc1xuICAgICAgICAgICAgICAgICAgICAuLi5bLi4uQXJyYXkob3JkZXJMaXN0Lmxlbmd0aCkua2V5cygpXS5tYXAoKG9yZGVySSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2wgPSB0aGlzLmxvZ29zW29yZGVySV1bY2hhaW5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2wucm9vdC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNEaXYgPSB1aS5kaXYoW3dsLnJvb3RdIC8qYCR7Y2hhaW59ICR7cmVnaW9uc0ZpbHRlcmVkW3JJXX1gKi8sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNEaXY7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7XG4gICAgICAgICAgICB9LCBbJycsIC4uLlsuLi5BcnJheShvcmRlckxpc3QubGVuZ3RoKS5rZXlzKCldLm1hcCgob3JkZXJJKSA9PiByZWdpb25zRmlsdGVyZWQuZmluZCgocikgPT4gci5vcmRlciA9PSBvcmRlckxpc3Rbb3JkZXJJXSAmJiByLmNoYWluID09IHRoaXMuY2hhaW5zWzBdKS5uYW1lIHx8ICdOYW1lJyldKTtcbiAgICAgICAgICAgIHRoaXMubWFpbkxheW91dC5jbGFzc05hbWUgPSAnbWxiLXZkLXJlZ2lvbnMtdmlld2VyLXRhYmxlMic7XG4gICAgICAgICAgICAvLyB0aGlzLm1haW5MYXlvdXQuc3R5bGUuYmFja2dyb3VuZCA9ICcjRUVFRUZGJztcbiAgICAgICAgICAgIC8vIHRoaXMubWFpbkxheW91dC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICAvLyB0aGlzLm1haW5MYXlvdXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBibGFjayc7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IGAjZmZiYiR7TWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAyNTUpLnRvU3RyaW5nKDE2KX1gO1xuICAgICAgICAgICAgdGhpcy5ob3N0ID0gdWkuYm94KHRoaXMubWFpbkxheW91dCwgeyAvKnN0eWxlOiB7YmFja2dyb3VuZENvbG9yOiBjb2xvcn0qL30pO1xuICAgICAgICAgICAgdGhpcy5yb290LmFwcGVuZENoaWxkKHRoaXMuaG9zdCk7XG4gICAgICAgICAgICB0aGlzLnJvb3Quc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGhpcy5jYWxjU2l6ZSgpO1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVmRSZWdpb25zVmlld2VyLmJ1aWxkVmlldygpIGVuZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2FsY1NpemUoKSB7XG4gICAgICAgIGNvbnN0IGxvZ29IZWlnaHQgPSAodGhpcy5yb290LmNsaWVudEhlaWdodCAtIDU0KSAvIHRoaXMuY2hhaW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5taW4obG9nb0hlaWdodCwgTWF0aC5tYXgoLi4udGhpcy5sb2dvcy5tYXAoKHdsRGljdCkgPT4gTWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyh3bERpY3QpLm1hcCgod2wpID0+IHdsLm1heEhlaWdodCkpKSkpO1xuICAgICAgICBmb3IgKGxldCBvcmRlckkgPSAwOyBvcmRlckkgPCB0aGlzLmxvZ29zLmxlbmd0aDsgb3JkZXJJKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNoYWluSSA9IDA7IGNoYWluSSA8IHRoaXMuY2hhaW5zLmxlbmd0aDsgY2hhaW5JKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFpbiA9IHRoaXMuY2hhaW5zW2NoYWluSV07XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dvc1tvcmRlckldW2NoYWluXS5yb290LnN0eWxlLmhlaWdodCA9IGAke21heEhlaWdodH1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uIC0tIFZpZXcgLS1cbiAgICBvbk1vdXNlTW92ZVJvb3QoZSkge1xuICAgICAgICAvLyB1aS50b29sdGlwLnNob3coJ3RleHQnLCBlLnggKyA4LCBlLnkgKyA4LCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBvbk1vdXNlTW92ZVJvb3QuKCB4OiAke2UueH0sIHk6ICR7ZS55fSApYCk7XG4gICAgfVxufVxuIiwiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wid3VcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wid3VcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF90b0NvbnN1bWFibGVBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMSlbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfc2xpY2VkVG9BcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1N5bWJvbCRpdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX2dldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfcmVnZW5lcmF0b3JSdW50aW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NClbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfT2JqZWN0JGtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9TZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9Qcm9taXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NSlbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciB3dSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd3UoaXRlcmFibGUpIHtcblx0ICBpZiAoIWlzSXRlcmFibGUoaXRlcmFibGUpKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoXCJ3dTogYFwiICsgaXRlcmFibGUgKyBcImAgaXMgbm90IGl0ZXJhYmxlIVwiKTtcblx0ICB9XG5cdCAgcmV0dXJuIG5ldyBXdShpdGVyYWJsZSk7XG5cdH07XG5cblx0ZnVuY3Rpb24gV3UoaXRlcmFibGUpIHtcblx0ICB2YXIgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSk7XG5cdCAgdGhpcy5uZXh0ID0gaXRlcmF0b3IubmV4dC5iaW5kKGl0ZXJhdG9yKTtcblx0fVxuXHR3dS5wcm90b3R5cGUgPSBXdS5wcm90b3R5cGU7XG5cblx0d3UucHJvdG90eXBlW19TeW1ib2wkaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuXHQgIHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qXG5cdCAqIEludGVybmFsIHV0aWxpdGllc1xuXHQgKi9cblxuXHQvLyBBbiBpbnRlcm5hbCBwbGFjZWhvbGRlciB2YWx1ZS5cblx0dmFyIE1JU1NJTkcgPSB7fTtcblxuXHQvLyBSZXR1cm4gd2hldGhlciBhIHRoaW5nIGlzIGl0ZXJhYmxlLlxuXHR2YXIgaXNJdGVyYWJsZSA9IGZ1bmN0aW9uIGlzSXRlcmFibGUodGhpbmcpIHtcblx0ICByZXR1cm4gdGhpbmcgJiYgdHlwZW9mIHRoaW5nW19TeW1ib2wkaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblx0Ly8gR2V0IHRoZSBpdGVyYXRvciBmb3IgdGhlIHRoaW5nIG9yIHRocm93IGFuIGVycm9yLlxuXHR2YXIgZ2V0SXRlcmF0b3IgPSBmdW5jdGlvbiBnZXRJdGVyYXRvcih0aGluZykge1xuXHQgIGlmIChpc0l0ZXJhYmxlKHRoaW5nKSkge1xuXHQgICAgcmV0dXJuIF9nZXRJdGVyYXRvcih0aGluZyk7XG5cdCAgfVxuXHQgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgaXRlcmFibGU6IFwiICsgdGhpbmcpO1xuXHR9O1xuXG5cdC8vIERlZmluZSBhIHN0YXRpYyBtZXRob2Qgb24gYHd1YCBhbmQgc2V0IGl0cyBwcm90b3R5cGUgdG8gdGhlIHNoYXJlZFxuXHQvLyBgV3UucHJvdG90eXBlYC5cblx0dmFyIHN0YXRpY01ldGhvZCA9IGZ1bmN0aW9uIHN0YXRpY01ldGhvZChuYW1lLCBmbikge1xuXHQgIGZuLnByb3RvdHlwZSA9IFd1LnByb3RvdHlwZTtcblx0ICB3dVtuYW1lXSA9IGZuO1xuXHR9O1xuXG5cdC8vIERlZmluZSBhIGZ1bmN0aW9uIHRoYXQgaXMgYXR0YWNoZWQgYXMgYm90aCBhIGBXdS5wcm90b3R5cGVgIG1ldGhvZCBhbmQgYVxuXHQvLyBjdXJyeWFibGUgc3RhdGljIG1ldGhvZCBvbiBgd3VgIGRpcmVjdGx5IHRoYXQgdGFrZXMgYW4gaXRlcmFibGUgYXMgaXRzIGxhc3Rcblx0Ly8gcGFyYW1ldGVyLlxuXHR2YXIgcHJvdG90eXBlQW5kU3RhdGljID0gZnVuY3Rpb24gcHJvdG90eXBlQW5kU3RhdGljKG5hbWUsIGZuKSB7XG5cdCAgdmFyIGV4cGVjdGVkQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IGZuLmxlbmd0aCA6IGFyZ3VtZW50c1syXTtcblx0ICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcblx0ICAgIGZuLnByb3RvdHlwZSA9IFd1LnByb3RvdHlwZTtcblx0ICAgIFd1LnByb3RvdHlwZVtuYW1lXSA9IGZuO1xuXG5cdCAgICAvLyArMSBmb3IgdGhlIGl0ZXJhYmxlLCB3aGljaCBpcyB0aGUgYHRoaXNgIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBzbyBpdFxuXHQgICAgLy8gaXNuJ3QgcmVmbGVjdGVkIGJ5IHRoZSBsZW5ndGggcHJvcGVydHkuXG5cdCAgICBleHBlY3RlZEFyZ3MgKz0gMTtcblxuXHQgICAgd3VbbmFtZV0gPSB3dS5jdXJyeWFibGUoZnVuY3Rpb24gKCkge1xuXHQgICAgICB2YXIgX3d1O1xuXG5cdCAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciBpdGVyYWJsZSA9IGFyZ3MucG9wKCk7XG5cdCAgICAgIHJldHVybiAoX3d1ID0gd3UoaXRlcmFibGUpKVtuYW1lXS5hcHBseShfd3UsIGFyZ3MpO1xuXHQgICAgfSwgZXhwZWN0ZWRBcmdzKTtcblx0ICB9KSgpO1xuXHR9O1xuXG5cdC8vIEEgZGVjb3JhdG9yIGZvciByZXdyYXBwaW5nIGEgbWV0aG9kJ3MgcmV0dXJuZWQgaXRlcmFibGUgaW4gd3UgdG8gbWFpbnRhaW5cblx0Ly8gY2hhaW5hYmlsaXR5LlxuXHR2YXIgcmV3cmFwID0gZnVuY3Rpb24gcmV3cmFwKGZuKSB7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0ICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG5cdCAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHd1KGZuLmNhbGwuYXBwbHkoZm4sIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblx0ICB9O1xuXHR9O1xuXG5cdHZhciByZXdyYXBTdGF0aWNNZXRob2QgPSBmdW5jdGlvbiByZXdyYXBTdGF0aWNNZXRob2QobmFtZSwgZm4pIHtcblx0ICByZXR1cm4gc3RhdGljTWV0aG9kKG5hbWUsIHJld3JhcChmbikpO1xuXHR9O1xuXHR2YXIgcmV3cmFwUHJvdG90eXBlQW5kU3RhdGljID0gZnVuY3Rpb24gcmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKG5hbWUsIGZuLCBleHBlY3RlZEFyZ3MpIHtcblx0ICByZXR1cm4gcHJvdG90eXBlQW5kU3RhdGljKG5hbWUsIHJld3JhcChmbiksIGV4cGVjdGVkQXJncyk7XG5cdH07XG5cblx0Ly8gUmV0dXJuIGEgd3JhcHBlZCB2ZXJzaW9uIG9mIGBmbmAgYm91bmQgd2l0aCB0aGUgaW5pdGlhbCBhcmd1bWVudHNcblx0Ly8gYC4uLmFyZ3NgLlxuXHRmdW5jdGlvbiBjdXJyeShmbiwgYXJncykge1xuXHQgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIG1vcmVBcmdzID0gQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcblx0ICAgICAgbW9yZUFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGZuLmNhbGwuYXBwbHkoZm4sIFt0aGlzXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFyZ3MpLCBtb3JlQXJncykpO1xuXHQgIH07XG5cdH1cblxuXHQvKlxuXHQgKiBQdWJsaWMgdXRpbGl0aWVzXG5cdCAqL1xuXG5cdHN0YXRpY01ldGhvZChcImN1cnJ5YWJsZVwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgZXhwZWN0ZWQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBmbi5sZW5ndGggOiBhcmd1bWVudHNbMV07XG5cdCAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XG5cdCAgICByZXR1cm4gZnVuY3Rpb24gZigpIHtcblx0ICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcblx0ICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gYXJncy5sZW5ndGggPj0gZXhwZWN0ZWQgPyBmbi5hcHBseSh0aGlzLCBhcmdzKSA6IGN1cnJ5KGYsIGFyZ3MpO1xuXHQgICAgfTtcblx0ICB9KSgpO1xuXHR9KTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJlbnRyaWVzXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG9iaikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uLCBfZGlkSXRlcmF0b3JFcnJvciwgX2l0ZXJhdG9yRXJyb3IsIF9pdGVyYXRvciwgX3N0ZXAsIGs7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IgPSBfZ2V0SXRlcmF0b3IoX09iamVjdCRrZXlzKG9iaikpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGsgPSBfc3RlcC52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICByZXR1cm4gW2ssIG9ialtrXV07XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA1O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE4O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE0O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3JbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwia2V5c1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChvYmopIHtcblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX09iamVjdCRrZXlzKG9iaiksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInZhbHVlc1wiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChvYmopIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIsIF9kaWRJdGVyYXRvckVycm9yMiwgX2l0ZXJhdG9yRXJyb3IyLCBfaXRlcmF0b3IyLCBfc3RlcDIsIGs7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IyID0gX2dldEl0ZXJhdG9yKF9PYmplY3Qka2V5cyhvYmopKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBrID0gX3N0ZXAyLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiBvYmpba107XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjJbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjJbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE4KTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE0LCAxOCwgMjZdLCBbMTksLCAyMSwgMjVdXSk7XG5cdH0pKTtcblxuXHQvKlxuXHQgKiBJbmZpbml0ZSBpdGVyYXRvcnNcblx0ICovXG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiY3ljbGVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHNhdmVkLCBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMywgX2RpZEl0ZXJhdG9yRXJyb3IzLCBfaXRlcmF0b3JFcnJvcjMsIF9pdGVyYXRvcjMsIF9zdGVwMywgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBzYXZlZCA9IFtdO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ7XG5cdCAgICAgICAgX2l0ZXJhdG9yMyA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gKF9zdGVwMyA9IF9pdGVyYXRvcjMubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAzLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIHNhdmVkLnB1c2goeCk7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTY7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDQpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyAmJiBfaXRlcmF0b3IzW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IzW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjMpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMztcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjMpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMCk7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICBpZiAoIXNhdmVkKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChzYXZlZCwgXCJ0MVwiLCAzMCk7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s0LCAxNiwgMjAsIDI4XSwgWzIxLCwgMjMsIDI3XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwU3RhdGljTWV0aG9kKFwiY291bnRcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIHN0YXJ0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gMCA6IGFyZ3VtZW50c1swXTtcblx0ICB2YXIgc3RlcCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IDEgOiBhcmd1bWVudHNbMV07XG5cdCAgdmFyIG47XG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIG4gPSBzdGFydDtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgICAgaWYgKGZhbHNlKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0O1xuXHQgICAgICAgIHJldHVybiBuO1xuXG5cdCAgICAgIGNhc2UgNDpcblx0ICAgICAgICBuICs9IHN0ZXA7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInJlcGVhdFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCh0aGluZykge1xuXHQgIHZhciB0aW1lcyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogYXJndW1lbnRzWzFdO1xuXHQgIHZhciBpO1xuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpZiAoISh0aW1lcyA9PT0gSW5maW5pdHkpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgICAgaWYgKGZhbHNlKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0O1xuXHQgICAgICAgIHJldHVybiB0aGluZztcblxuXHQgICAgICBjYXNlIDQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDg6XG5cdCAgICAgICAgaSA9IDA7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGlmICghKGkgPCB0aW1lcykpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICByZXR1cm4gdGhpbmc7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBpKys7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHQvKlxuXHQgKiBJdGVyYXRvcnMgdGhhdCB0ZXJtaW5hdGUgb25jZSB0aGUgaW5wdXQgc2VxdWVuY2UgaGFzIGJlZW4gZXhoYXVzdGVkXG5cdCAqL1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcImNoYWluXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCxcblx0ICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0LFxuXHQgICAgICBfaXRlcmF0b3JFcnJvcjQsXG5cdCAgICAgIF9sZW41LFxuXHQgICAgICBpdGVyYWJsZXMsXG5cdCAgICAgIF9rZXk1LFxuXHQgICAgICBfaXRlcmF0b3I0LFxuXHQgICAgICBfc3RlcDQsXG5cdCAgICAgIGl0LFxuXHQgICAgICBhcmdzJDEkMCA9IGFyZ3VtZW50cztcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I0ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXG5cdCAgICAgICAgZm9yIChfbGVuNSA9IGFyZ3MkMSQwLmxlbmd0aCwgaXRlcmFibGVzID0gQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcblx0ICAgICAgICAgIGl0ZXJhYmxlc1tfa2V5NV0gPSBhcmdzJDEkMFtfa2V5NV07XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX2l0ZXJhdG9yNCA9IF9nZXRJdGVyYXRvcihpdGVyYWJsZXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSAoX3N0ZXA0ID0gX2l0ZXJhdG9yNC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGl0ID0gX3N0ZXA0LnZhbHVlO1xuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKGl0LCBcInQwXCIsIDkpO1xuXG5cdCAgICAgIGNhc2UgOTpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I0ID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSAxODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCAmJiBfaXRlcmF0b3I0W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I0W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjQpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNDtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiY2h1bmtcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAyIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIGl0ZW1zLCBpbmRleCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUsIF9kaWRJdGVyYXRvckVycm9yNSwgX2l0ZXJhdG9yRXJyb3I1LCBfaXRlcmF0b3I1LCBfc3RlcDUsIGl0ZW07XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaXRlbXMgPSBbXTtcblx0ICAgICAgICBpbmRleCA9IDA7XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTtcblx0ICAgICAgICBfaXRlcmF0b3I1ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNzpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjUgPSAoX3N0ZXA1ID0gX2l0ZXJhdG9yNS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGl0ZW0gPSBfc3RlcDUudmFsdWU7XG5cblx0ICAgICAgICBpdGVtc1tpbmRleCsrXSA9IGl0ZW07XG5cblx0ICAgICAgICBpZiAoIShpbmRleCA9PT0gbikpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICByZXR1cm4gaXRlbXM7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBpdGVtcyA9IFtdO1xuXHQgICAgICAgIGluZGV4ID0gMDtcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNSk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I1ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjUgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjU7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb241ICYmIF9pdGVyYXRvcjVbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjVbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjc7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yNSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMwO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I1O1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyNyk7XG5cblx0ICAgICAgY2FzZSAzMTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI0KTtcblxuXHQgICAgICBjYXNlIDMyOlxuXHQgICAgICAgIGlmICghaW5kZXgpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzNTtcblx0ICAgICAgICByZXR1cm4gaXRlbXM7XG5cblx0ICAgICAgY2FzZSAzNTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s1LCAyMCwgMjQsIDMyXSwgWzI1LCwgMjcsIDMxXV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiY29uY2F0TWFwXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGZuKSB7XG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242LCBfZGlkSXRlcmF0b3JFcnJvcjYsIF9pdGVyYXRvckVycm9yNiwgX2l0ZXJhdG9yNiwgX3N0ZXA2LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjYgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yNiA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb242ID0gKF9zdGVwNiA9IF9pdGVyYXRvcjYubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXA2LnZhbHVlO1xuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKGZuKHgpLCBcInQwXCIsIDgpO1xuXG5cdCAgICAgIGNhc2UgODpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTM7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yNiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I2ID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTc7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNiAmJiBfaXRlcmF0b3I2W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I2W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjA6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjYpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNjtcblxuXHQgICAgICBjYXNlIDIzOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxNyk7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxMywgMTcsIDI1XSwgWzE4LCwgMjAsIDI0XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZHJvcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChuKSB7XG5cdCAgdmFyIGksIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243LCBfZGlkSXRlcmF0b3JFcnJvcjcsIF9pdGVyYXRvckVycm9yNywgX2l0ZXJhdG9yNywgX3N0ZXA3LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGkgPSAwO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjcgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjcgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ7XG5cdCAgICAgICAgX2l0ZXJhdG9yNyA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb243ID0gKF9zdGVwNyA9IF9pdGVyYXRvcjcubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXA3LnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKCEoaSsrIDwgbikpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJjb250aW51ZVwiLCAxMyk7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTYpO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTY6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIyO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSg0KTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjcgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yNyA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjcgJiYgX2l0ZXJhdG9yN1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yN1tcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3I3KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjc7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI1KTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQodGhpcywgXCJ0MVwiLCAzMSk7XG5cblx0ICAgICAgY2FzZSAzMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s0LCAxOCwgMjIsIDMwXSwgWzIzLCwgMjUsIDI5XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZHJvcFdoaWxlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjgsIF9kaWRJdGVyYXRvckVycm9yOCwgX2l0ZXJhdG9yRXJyb3I4LCBfaXRlcmF0b3I4LCBfc3RlcDgsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjggPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yOCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3I4ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjggPSAoX3N0ZXA4ID0gX2l0ZXJhdG9yOC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDgudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIWZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJjb250aW51ZVwiLCAxMik7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNSk7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTc7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I4ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOCAmJiBfaXRlcmF0b3I4W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I4W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjQ6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDI0O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjgpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yODtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjQpO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMSk7XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZCh0aGlzLCBcInQxXCIsIDMwKTtcblxuXHQgICAgICBjYXNlIDMwOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE3LCAyMSwgMjldLCBbMjIsLCAyNCwgMjhdXSk7XG5cdH0pLCAxKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJlbnVtZXJhdGVcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5kZWxlZ2F0ZVlpZWxkKF96aXAoW3RoaXMsIHd1LmNvdW50KCldKSwgXCJ0MFwiLCAxKTtcblxuXHQgICAgICBjYXNlIDE6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZmlsdGVyXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjksIF9kaWRJdGVyYXRvckVycm9yOSwgX2l0ZXJhdG9yRXJyb3I5LCBfaXRlcmF0b3I5LCBfc3RlcDksIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjkgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yOSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3I5ID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjkgPSAoX3N0ZXA5ID0gX2l0ZXJhdG9yOS5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDkudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIWZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yOSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3I5ID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uOSAmJiBfaXRlcmF0b3I5W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3I5W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yOTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjIpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOSk7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNSwgMTksIDI3XSwgWzIwLCwgMjIsIDI2XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiZmxhdHRlblwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc2hhbGxvdyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCwgX2RpZEl0ZXJhdG9yRXJyb3IxMCwgX2l0ZXJhdG9yRXJyb3IxMCwgX2l0ZXJhdG9yMTAsIF9zdGVwMTAsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjEwID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IxMCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMCA9IChfc3RlcDEwID0gX2l0ZXJhdG9yMTAubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTY7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxMC52YWx1ZTtcblxuXHQgICAgICAgIGlmICghKHR5cGVvZiB4ICE9PSBcInN0cmluZ1wiICYmIGlzSXRlcmFibGUoeCkpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChzaGFsbG93ID8geCA6IHd1KHgpLmZsYXR0ZW4oKSwgXCJ0MFwiLCA5KTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTE6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MSA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMCA9IGNvbnRleHQkMSQwLnQxO1xuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMztcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEwICYmIF9pdGVyYXRvcjEwW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxMFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxMCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxMDtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjUpO1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxOCwgMjIsIDMwXSwgWzIzLCwgMjUsIDI5XV0pO1xuXHR9KSwgMSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwiaW52b2tlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKG5hbWUpIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjExLFxuXHQgICAgICBfZGlkSXRlcmF0b3JFcnJvcjExLFxuXHQgICAgICBfaXRlcmF0b3JFcnJvcjExLFxuXHQgICAgICBfbGVuNixcblx0ICAgICAgYXJncyxcblx0ICAgICAgX2tleTYsXG5cdCAgICAgIF9pdGVyYXRvcjExLFxuXHQgICAgICBfc3RlcDExLFxuXHQgICAgICB4LFxuXHQgICAgICBhcmdzJDEkMCA9IGFyZ3VtZW50cztcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTEgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjExID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXG5cdCAgICAgICAgZm9yIChfbGVuNiA9IGFyZ3MkMSQwLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW42ID4gMSA/IF9sZW42IC0gMSA6IDApLCBfa2V5NiA9IDE7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcblx0ICAgICAgICAgIGFyZ3NbX2tleTYgLSAxXSA9IGFyZ3MkMSQwW19rZXk2XTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfaXRlcmF0b3IxMSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMSA9IChfc3RlcDExID0gX2l0ZXJhdG9yMTEubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxMS52YWx1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTA7XG5cdCAgICAgICAgcmV0dXJuIHhbbmFtZV0uYXBwbHkoeCwgYXJncyk7XG5cblx0ICAgICAgY2FzZSAxMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgPSB0cnVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA2O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIGJyZWFrO1xuXG5cdCAgICAgIGNhc2UgMTU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE1O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnQwID0gY29udGV4dCQxJDBbXCJjYXRjaFwiXSgzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjExID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjExID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAxOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIwO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTEgJiYgX2l0ZXJhdG9yMTFbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjExW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIyO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjExKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjU7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjExO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMik7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDE5KTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzMsIDE1LCAxOSwgMjddLCBbMjAsLCAyMiwgMjZdXSk7XG5cdH0pKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJtYXBcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyLCBfZGlkSXRlcmF0b3JFcnJvcjEyLCBfaXRlcmF0b3JFcnJvcjEyLCBfaXRlcmF0b3IxMiwgX3N0ZXAxMiwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTIgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTIgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjEyID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjEyID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyID0gKF9zdGVwMTIgPSBfaXRlcmF0b3IxMi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDEyLnZhbHVlO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA5O1xuXHQgICAgICAgIHJldHVybiBmbih4KTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMiA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxMiA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjEyICYmIF9pdGVyYXRvcjEyW1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxMltcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxMikge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxMjtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwicGx1Y2tcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAobmFtZSkge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMsIF9kaWRJdGVyYXRvckVycm9yMTMsIF9pdGVyYXRvckVycm9yMTMsIF9pdGVyYXRvcjEzLCBfc3RlcDEzLCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxMyA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTMgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTMgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTMgPSAoX3N0ZXAxMyA9IF9pdGVyYXRvcjEzLm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTMudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIHhbbmFtZV07XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTMgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTMgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE4OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxODtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTk7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xMyAmJiBfaXRlcmF0b3IxM1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTNbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTMpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTM7XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIxKTtcblxuXHQgICAgICBjYXNlIDI1OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTgpO1xuXG5cdCAgICAgIGNhc2UgMjY6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTQsIDE4LCAyNl0sIFsxOSwsIDIxLCAyNV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInJlZHVjdGlvbnNcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcblxuXHQgIHZhciB2YWwsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCwgX2RpZEl0ZXJhdG9yRXJyb3IxNCwgX2l0ZXJhdG9yRXJyb3IxNCwgX2l0ZXJhdG9yMTQsIF9zdGVwMTQsIHgsIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNSwgX2RpZEl0ZXJhdG9yRXJyb3IxNSwgX2l0ZXJhdG9yRXJyb3IxNSwgX2l0ZXJhdG9yMTUsIF9zdGVwMTU7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgdmFsID0gaW5pdGlhbDtcblxuXHQgICAgICAgIGlmICghKHZhbCA9PT0gdW5kZWZpbmVkKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI4O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE0ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE0ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTtcblx0ICAgICAgICBfaXRlcmF0b3IxNCA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDc6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCA9IChfc3RlcDE0ID0gX2l0ZXJhdG9yMTQubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAxNC52YWx1ZTtcblxuXHQgICAgICAgIHZhbCA9IHg7XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDE0KTtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTY7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDUpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTQgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTQgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNCAmJiBfaXRlcmF0b3IxNFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTRbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTQpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTQ7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIzKTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDMwO1xuXHQgICAgICAgIHJldHVybiB2YWw7XG5cblx0ICAgICAgY2FzZSAzMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTUgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE1ID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzMztcblx0ICAgICAgICBfaXRlcmF0b3IxNSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDM1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgPSAoX3N0ZXAxNSA9IF9pdGVyYXRvcjE1Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDQyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTUudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDM5O1xuXHQgICAgICAgIHJldHVybiB2YWwgPSBmbih2YWwsIHgpO1xuXG5cdCAgICAgIGNhc2UgMzk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE1ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA0Mjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDg7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA0NDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDEgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMzKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE1ID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjE1ID0gY29udGV4dCQxJDAudDE7XG5cblx0ICAgICAgY2FzZSA0ODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNDg7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDQ5O1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTUgJiYgX2l0ZXJhdG9yMTVbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjE1W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgNTE6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDUxO1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjE1KSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjE1O1xuXG5cdCAgICAgIGNhc2UgNTQ6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCg1MSk7XG5cblx0ICAgICAgY2FzZSA1NTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDQ4KTtcblxuXHQgICAgICBjYXNlIDU2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIiwgdmFsKTtcblxuXHQgICAgICBjYXNlIDU3OlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzLCBbWzUsIDE2LCAyMCwgMjhdLCBbMjEsLCAyMywgMjddLCBbMzMsIDQ0LCA0OCwgNTZdLCBbNDksLCA1MSwgNTVdXSk7XG5cdH0pLCAyKTtcblxuXHRyZXdyYXBQcm90b3R5cGVBbmRTdGF0aWMoXCJyZWplY3RcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYsIF9kaWRJdGVyYXRvckVycm9yMTYsIF9pdGVyYXRvckVycm9yMTYsIF9pdGVyYXRvcjE2LCBfc3RlcDE2LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxNiA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTYgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTYgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTYgPSAoX3N0ZXAxNiA9IF9pdGVyYXRvcjE2Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEzO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTYudmFsdWU7XG5cblx0ICAgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTYgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTYgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNiAmJiBfaXRlcmF0b3IxNltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTZbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTYpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTY7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTkpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTUsIDE5LCAyN10sIFsyMCwsIDIyLCAyNl1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInNsaWNlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBzdGFydCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDAgOiBhcmd1bWVudHNbMF07XG5cdCAgdmFyIHN0b3AgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBJbmZpbml0eSA6IGFyZ3VtZW50c1sxXTtcblxuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTcsIF9kaWRJdGVyYXRvckVycm9yMTcsIF9pdGVyYXRvckVycm9yMTcsIF9pdGVyYXRvcjE3LCBfc3RlcDE3LCBfc3RlcDE3JHZhbHVlLCB4LCBpO1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIGlmICghKHN0b3AgPCBzdGFydCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJwYXJhbWV0ZXIgYHN0b3BgICg9IFwiICsgc3RvcCArIFwiKSBtdXN0IGJlID49IGBzdGFydGAgKD0gXCIgKyBzdGFydCArIFwiKVwiKTtcblxuXHQgICAgICBjYXNlIDI6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE3ID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjE3ID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxNyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gNTtcblx0ICAgICAgICBfaXRlcmF0b3IxNyA9IF9nZXRJdGVyYXRvcih0aGlzLmVudW1lcmF0ZSgpKTtcblxuXHQgICAgICBjYXNlIDc6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyA9IChfc3RlcDE3ID0gX2l0ZXJhdG9yMTcubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBfc3RlcDE3JHZhbHVlID0gX3NsaWNlZFRvQXJyYXkoX3N0ZXAxNy52YWx1ZSwgMik7XG5cdCAgICAgICAgeCA9IF9zdGVwMTckdmFsdWVbMF07XG5cdCAgICAgICAgaSA9IF9zdGVwMTckdmFsdWVbMV07XG5cblx0ICAgICAgICBpZiAoIShpIDwgc3RhcnQpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiY29udGludWVcIiwgMTcpO1xuXG5cdCAgICAgIGNhc2UgMTM6XG5cdCAgICAgICAgaWYgKCEoaSA+PSBzdG9wKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDIwKTtcblxuXHQgICAgICBjYXNlIDE1OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNztcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDc7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyMDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDUpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMTcgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTcgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNjtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjc7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xNyAmJiBfaXRlcmF0b3IxN1tcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMTdbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyOTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjk7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMTcpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAzMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMTc7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI5KTtcblxuXHQgICAgICBjYXNlIDMzOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjYpO1xuXG5cdCAgICAgIGNhc2UgMzQ6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNSwgMjIsIDI2LCAzNF0sIFsyNywsIDI5LCAzM11dKTtcblx0fSksIDIpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInNwcmVhZE1hcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTgsIF9kaWRJdGVyYXRvckVycm9yMTgsIF9pdGVyYXRvckVycm9yMTgsIF9pdGVyYXRvcjE4LCBfc3RlcDE4LCB4O1xuXG5cdCAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBjYWxsZWUkMCQwJChjb250ZXh0JDEkMCkge1xuXHQgICAgd2hpbGUgKDEpIHN3aXRjaCAoY29udGV4dCQxJDAucHJldiA9IGNvbnRleHQkMSQwLm5leHQpIHtcblx0ICAgICAgY2FzZSAwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOCA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOCA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTggPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTggPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA1OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTggPSAoX3N0ZXAxOCA9IF9pdGVyYXRvcjE4Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTgudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDk7XG5cdCAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KHgpKTtcblxuXHQgICAgICBjYXNlIDk6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNTtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxNDtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oMyk7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxOCA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMTg6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDE4O1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE4ICYmIF9pdGVyYXRvcjE4W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxOFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxOCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI0O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxODtcblxuXHQgICAgICBjYXNlIDI0OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjU6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgxOCk7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1szLCAxNCwgMTgsIDI2XSwgWzE5LCwgMjEsIDI1XV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwidGFrZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChuKSB7XG5cdCAgdmFyIGksIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSwgX2RpZEl0ZXJhdG9yRXJyb3IxOSwgX2l0ZXJhdG9yRXJyb3IxOSwgX2l0ZXJhdG9yMTksIF9zdGVwMTksIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaWYgKCEobiA8IDEpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIGkgPSAwO1xuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24xOSA9IHRydWU7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOSA9IGZhbHNlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMTkgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDY7XG5cdCAgICAgICAgX2l0ZXJhdG9yMTkgPSBfZ2V0SXRlcmF0b3IodGhpcyk7XG5cblx0ICAgICAgY2FzZSA4OlxuXHQgICAgICAgIGlmIChfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMTkgPSAoX3N0ZXAxOSA9IF9pdGVyYXRvcjE5Lm5leHQoKSkuZG9uZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE3O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgeCA9IF9zdGVwMTkudmFsdWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDEyO1xuXHQgICAgICAgIHJldHVybiB4O1xuXG5cdCAgICAgIGNhc2UgMTI6XG5cdCAgICAgICAgaWYgKCEoKytpID49IG4pKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwiYnJlYWtcIiwgMTcpO1xuXG5cdCAgICAgIGNhc2UgMTQ6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5ID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gODtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE3OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC50MCA9IGNvbnRleHQkMSQwW1wiY2F0Y2hcIl0oNik7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IxOSA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IxOSA9IGNvbnRleHQkMSQwLnQwO1xuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDIzO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNDtcblxuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjE5ICYmIF9pdGVyYXRvcjE5W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IxOVtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyNjtcblxuXHQgICAgICAgIGlmICghX2RpZEl0ZXJhdG9yRXJyb3IxOSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI5O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IxOTtcblxuXHQgICAgICBjYXNlIDI5OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjYpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgyMyk7XG5cblx0ICAgICAgY2FzZSAzMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1s2LCAxOSwgMjMsIDMxXSwgWzI0LCwgMjYsIDMwXV0pO1xuXHR9KSk7XG5cblx0cmV3cmFwUHJvdG90eXBlQW5kU3RhdGljKFwidGFrZVdoaWxlXCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIHZhciBmbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IEJvb2xlYW4gOiBhcmd1bWVudHNbMF07XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwLCBfZGlkSXRlcmF0b3JFcnJvcjIwLCBfaXRlcmF0b3JFcnJvcjIwLCBfaXRlcmF0b3IyMCwgX3N0ZXAyMCwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjAgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjAgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIwID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAzO1xuXHQgICAgICAgIF9pdGVyYXRvcjIwID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNTpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIwID0gKF9zdGVwMjAgPSBfaXRlcmF0b3IyMC5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDIwLnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKGZuKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gOTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJicmVha1wiLCAxNCk7XG5cblx0ICAgICAgY2FzZSA5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMTtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDExOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjA7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTY7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjAgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjAgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjE7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMCAmJiBfaXRlcmF0b3IyMFtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjBbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjM7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjApIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjA7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIzKTtcblxuXHQgICAgICBjYXNlIDI3OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjApO1xuXG5cdCAgICAgIGNhc2UgMjg6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTYsIDIwLCAyOF0sIFsyMSwsIDIzLCAyN11dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInRhcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSwgX2RpZEl0ZXJhdG9yRXJyb3IyMSwgX2l0ZXJhdG9yRXJyb3IyMSwgX2l0ZXJhdG9yMjEsIF9zdGVwMjEsIHg7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIxID0gdHJ1ZTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIxID0gZmFsc2U7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyMSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMztcblx0ICAgICAgICBfaXRlcmF0b3IyMSA9IF9nZXRJdGVyYXRvcih0aGlzKTtcblxuXHQgICAgICBjYXNlIDU6XG5cdCAgICAgICAgaWYgKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSA9IChfc3RlcDIxID0gX2l0ZXJhdG9yMjEubmV4dCgpKS5kb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB4ID0gX3N0ZXAyMS52YWx1ZTtcblxuXHQgICAgICAgIGZuKHgpO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICByZXR1cm4geDtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDU7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTk7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTU7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDMpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjEgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjEgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxOTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjA7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMSAmJiBfaXRlcmF0b3IyMVtcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjFbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjEpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjE7XG5cblx0ICAgICAgY2FzZSAyNTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDIyKTtcblxuXHQgICAgICBjYXNlIDI2OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMTkpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbMywgMTUsIDE5LCAyN10sIFsyMCwsIDIyLCAyNl1dKTtcblx0fSksIDEpO1xuXG5cdHJld3JhcFByb3RvdHlwZUFuZFN0YXRpYyhcInVuaXF1ZVwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICB2YXIgc2VlbiwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyLCBfZGlkSXRlcmF0b3JFcnJvcjIyLCBfaXRlcmF0b3JFcnJvcjIyLCBfaXRlcmF0b3IyMiwgX3N0ZXAyMiwgeDtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBzZWVuID0gbmV3IF9TZXQoKTtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjIgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjIgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIyID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSA0O1xuXHQgICAgICAgIF9pdGVyYXRvcjIyID0gX2dldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgICAgIGNhc2UgNjpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIyID0gKF9zdGVwMjIgPSBfaXRlcmF0b3IyMi5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHggPSBfc3RlcDIyLnZhbHVlO1xuXG5cdCAgICAgICAgaWYgKHNlZW4uaGFzKHgpKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTE7XG5cdCAgICAgICAgcmV0dXJuIHg7XG5cblx0ICAgICAgY2FzZSAxMTpcblx0ICAgICAgICBzZWVuLmFkZCh4KTtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiA9IHRydWU7XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNTpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjE7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAxNzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMTc7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDQpO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjIgPSB0cnVlO1xuXHQgICAgICAgIF9pdGVyYXRvckVycm9yMjIgPSBjb250ZXh0JDEkMC50MDtcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAyMTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjI7XG5cblx0ICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yMiAmJiBfaXRlcmF0b3IyMltcInJldHVyblwiXSkge1xuXHQgICAgICAgICAgX2l0ZXJhdG9yMjJbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgY2FzZSAyNDpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjQ7XG5cblx0ICAgICAgICBpZiAoIV9kaWRJdGVyYXRvckVycm9yMjIpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjI7XG5cblx0ICAgICAgY2FzZSAyNzpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDI0KTtcblxuXHQgICAgICBjYXNlIDI4OlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5maW5pc2goMjEpO1xuXG5cdCAgICAgIGNhc2UgMjk6XG5cdCAgICAgICAgc2Vlbi5jbGVhcigpO1xuXG5cdCAgICAgIGNhc2UgMzA6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMsIFtbNCwgMTcsIDIxLCAyOV0sIFsyMiwsIDI0LCAyOF1dKTtcblx0fSkpO1xuXG5cdHZhciBfemlwID0gcmV3cmFwKF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKGl0ZXJhYmxlcykge1xuXHQgIHZhciBsb25nZXN0ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBhcmd1bWVudHNbMV07XG5cblx0ICB2YXIgaXRlcnMsIG51bUl0ZXJzLCBudW1GaW5pc2hlZCwgZmluaXNoZWQsIHppcHBlZCwgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzLCBfZGlkSXRlcmF0b3JFcnJvcjIzLCBfaXRlcmF0b3JFcnJvcjIzLCBfaXRlcmF0b3IyMywgX3N0ZXAyMywgaXQsIF9pdCRuZXh0LCB2YWx1ZSwgZG9uZTtcblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICBpZiAoaXRlcmFibGVzLmxlbmd0aCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuYWJydXB0KFwicmV0dXJuXCIpO1xuXG5cdCAgICAgIGNhc2UgMjpcblx0ICAgICAgICBpdGVycyA9IGl0ZXJhYmxlcy5tYXAoZ2V0SXRlcmF0b3IpO1xuXHQgICAgICAgIG51bUl0ZXJzID0gaXRlcmFibGVzLmxlbmd0aDtcblx0ICAgICAgICBudW1GaW5pc2hlZCA9IDA7XG5cdCAgICAgICAgZmluaXNoZWQgPSBmYWxzZTtcblxuXHQgICAgICBjYXNlIDY6XG5cdCAgICAgICAgaWYgKGZpbmlzaGVkKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gNDQ7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB6aXBwZWQgPSBbXTtcblx0ICAgICAgICBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMgPSB0cnVlO1xuXHQgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMjMgPSBmYWxzZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIzID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIGNvbnRleHQkMSQwLnByZXYgPSAxMTtcblx0ICAgICAgICBfaXRlcmF0b3IyMyA9IF9nZXRJdGVyYXRvcihpdGVycyk7XG5cblx0ICAgICAgY2FzZSAxMzpcblx0ICAgICAgICBpZiAoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzID0gKF9zdGVwMjMgPSBfaXRlcmF0b3IyMy5uZXh0KCkpLmRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyNjtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGl0ID0gX3N0ZXAyMy52YWx1ZTtcblx0ICAgICAgICBfaXQkbmV4dCA9IGl0Lm5leHQoKTtcblx0ICAgICAgICB2YWx1ZSA9IF9pdCRuZXh0LnZhbHVlO1xuXHQgICAgICAgIGRvbmUgPSBfaXQkbmV4dC5kb25lO1xuXG5cdCAgICAgICAgaWYgKCFkb25lKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjI7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAobG9uZ2VzdCkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIxO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcInJldHVyblwiKTtcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGlmICgrK251bUZpbmlzaGVkID09IG51bUl0ZXJzKSB7XG5cdCAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjI6XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgIC8vIExlYXZlIGEgaG9sZSBpbiB0aGUgYXJyYXkgc28gdGhhdCB5b3UgY2FuIGRpc3Rpbmd1aXNoIGFuIGl0ZXJhYmxlXG5cdCAgICAgICAgICAvLyB0aGF0J3MgZG9uZSAodmlhIGBpbmRleCBpbiBhcnJheSA9PSBmYWxzZWApIGZyb20gYW4gaXRlcmFibGVcblx0ICAgICAgICAgIC8vIHlpZWxkaW5nIGB1bmRlZmluZWRgLlxuXHQgICAgICAgICAgemlwcGVkLmxlbmd0aCsrO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB6aXBwZWQucHVzaCh2YWx1ZSk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMjM6XG5cdCAgICAgICAgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIzID0gdHJ1ZTtcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMTM7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyNjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzI7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSAyODpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMjg7XG5cdCAgICAgICAgY29udGV4dCQxJDAudDAgPSBjb250ZXh0JDEkMFtcImNhdGNoXCJdKDExKTtcblx0ICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjIzID0gdHJ1ZTtcblx0ICAgICAgICBfaXRlcmF0b3JFcnJvcjIzID0gY29udGV4dCQxJDAudDA7XG5cblx0ICAgICAgY2FzZSAzMjpcblx0ICAgICAgICBjb250ZXh0JDEkMC5wcmV2ID0gMzI7XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDMzO1xuXG5cdCAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjMgJiYgX2l0ZXJhdG9yMjNbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgIF9pdGVyYXRvcjIzW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgIGNhc2UgMzU6XG5cdCAgICAgICAgY29udGV4dCQxJDAucHJldiA9IDM1O1xuXG5cdCAgICAgICAgaWYgKCFfZGlkSXRlcmF0b3JFcnJvcjIzKSB7XG5cdCAgICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMzg7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjIzO1xuXG5cdCAgICAgIGNhc2UgMzg6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmZpbmlzaCgzNSk7XG5cblx0ICAgICAgY2FzZSAzOTpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZmluaXNoKDMyKTtcblxuXHQgICAgICBjYXNlIDQwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSA0Mjtcblx0ICAgICAgICByZXR1cm4gemlwcGVkO1xuXG5cdCAgICAgIGNhc2UgNDI6XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDY7XG5cdCAgICAgICAgYnJlYWs7XG5cblx0ICAgICAgY2FzZSA0NDpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcywgW1sxMSwgMjgsIDMyLCA0MF0sIFszMywsIDM1LCAzOV1dKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInppcFwiLCBfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMCgpIHtcblx0ICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZXJhYmxlcyA9IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG5cdCAgICBpdGVyYWJsZXNbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcblx0ICB9XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX3ppcChpdGVyYWJsZXMpLCBcInQwXCIsIDEpO1xuXG5cdCAgICAgIGNhc2UgMTpcblx0ICAgICAgY2FzZSBcImVuZFwiOlxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5zdG9wKCk7XG5cdCAgICB9XG5cdCAgfSwgY2FsbGVlJDAkMCwgdGhpcyk7XG5cdH0pKTtcblxuXHRyZXdyYXBTdGF0aWNNZXRob2QoXCJ6aXBMb25nZXN0XCIsIF9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBjYWxsZWUkMCQwKCkge1xuXHQgIGZvciAodmFyIF9sZW44ID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlcmFibGVzID0gQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcblx0ICAgIGl0ZXJhYmxlc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuXHQgIH1cblxuXHQgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoZnVuY3Rpb24gY2FsbGVlJDAkMCQoY29udGV4dCQxJDApIHtcblx0ICAgIHdoaWxlICgxKSBzd2l0Y2ggKGNvbnRleHQkMSQwLnByZXYgPSBjb250ZXh0JDEkMC5uZXh0KSB7XG5cdCAgICAgIGNhc2UgMDpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuZGVsZWdhdGVZaWVsZChfemlwKGl0ZXJhYmxlcywgdHJ1ZSksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdHJld3JhcFN0YXRpY01ldGhvZChcInppcFdpdGhcIiwgX3JlZ2VuZXJhdG9yUnVudGltZS5tYXJrKGZ1bmN0aW9uIGNhbGxlZSQwJDAoZm4pIHtcblx0ICBmb3IgKHZhciBfbGVuOSA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZXJhYmxlcyA9IEFycmF5KF9sZW45ID4gMSA/IF9sZW45IC0gMSA6IDApLCBfa2V5OSA9IDE7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHtcblx0ICAgIGl0ZXJhYmxlc1tfa2V5OSAtIDFdID0gYXJndW1lbnRzW19rZXk5XTtcblx0ICB9XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmRlbGVnYXRlWWllbGQoX3ppcChpdGVyYWJsZXMpLnNwcmVhZE1hcChmbiksIFwidDBcIiwgMSk7XG5cblx0ICAgICAgY2FzZSAxOlxuXHQgICAgICBjYXNlIFwiZW5kXCI6XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLnN0b3AoKTtcblx0ICAgIH1cblx0ICB9LCBjYWxsZWUkMCQwLCB0aGlzKTtcblx0fSkpO1xuXG5cdC8qXG5cdCAqIEZ1bmN0aW9ucyB0aGF0IGZvcmNlIGl0ZXJhdGlvbiB0byBjb21wbGV0aW9uIGFuZCByZXR1cm4gYSB2YWx1ZS5cblx0ICovXG5cblx0Ly8gVGhlIG1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB3ZSB3aWxsIGJsb2NrIHRoZSBtYWluIHRocmVhZCBhdCBhIHRpbWVcblx0Ly8gd2hpbGUgaW4gYGFzeW5jRWFjaGAuXG5cdHd1Lk1BWF9CTE9DSyA9IDE1O1xuXHQvLyBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB5aWVsZCB0byB0aGUgbWFpbiB0aHJlYWQgYmV0d2VlbiBidXJzdHMgb2Zcblx0Ly8gd29yay5cblx0d3UuVElNRU9VVCA9IDE7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiYXN5bmNFYWNoXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBtYXhCbG9jayA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHd1Lk1BWF9CTE9DSyA6IGFyZ3VtZW50c1sxXTtcblx0ICB2YXIgdGltZW91dCA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IHd1LlRJTUVPVVQgOiBhcmd1bWVudHNbMl07XG5cblx0ICB2YXIgaXRlciA9IGdldEl0ZXJhdG9yKHRoaXMpO1xuXG5cdCAgcmV0dXJuIG5ldyBfUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAoZnVuY3Rpb24gbG9vcCgpIHtcblx0ICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcblxuXHQgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI0ID0gdHJ1ZTtcblx0ICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjQgPSBmYWxzZTtcblx0ICAgICAgdmFyIF9pdGVyYXRvckVycm9yMjQgPSB1bmRlZmluZWQ7XG5cblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyNCA9IF9nZXRJdGVyYXRvcihpdGVyKSwgX3N0ZXAyNDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjQgPSAoX3N0ZXAyNCA9IF9pdGVyYXRvcjI0Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNCA9IHRydWUpIHtcblx0ICAgICAgICAgIHZhciB4ID0gX3N0ZXAyNC52YWx1ZTtcblxuXHQgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgZm4oeCk7XG5cdCAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgIHJlamVjdChlKTtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID4gbWF4QmxvY2spIHtcblx0ICAgICAgICAgICAgc2V0VGltZW91dChsb29wLCB0aW1lb3V0KTtcblx0ICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNCA9IHRydWU7XG5cdCAgICAgICAgX2l0ZXJhdG9yRXJyb3IyNCA9IGVycjtcblx0ICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICB0cnkge1xuXHQgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjQgJiYgX2l0ZXJhdG9yMjRbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICAgICAgX2l0ZXJhdG9yMjRbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGZpbmFsbHkge1xuXHQgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjQpIHtcblx0ICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICByZXNvbHZlKCk7XG5cdCAgICB9KSgpO1xuXHQgIH0pO1xuXHR9LCAzKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJldmVyeVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIGZuID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gQm9vbGVhbiA6IGFyZ3VtZW50c1swXTtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI1ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyNSA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI1ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI1ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI1OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNSA9IChfc3RlcDI1ID0gX2l0ZXJhdG9yMjUubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI1ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjUudmFsdWU7XG5cblx0ICAgICAgaWYgKCFmbih4KSkge1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNSA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjI1ID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNSAmJiBfaXRlcmF0b3IyNVtcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjI1W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI1KSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiB0cnVlO1xuXHR9LCAxKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJmaW5kXCIsIGZ1bmN0aW9uIChmbikge1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjYgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjI2ID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMjYgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMjYgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMjY7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI2ID0gKF9zdGVwMjYgPSBfaXRlcmF0b3IyNi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjYgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAyNi52YWx1ZTtcblxuXHQgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICByZXR1cm4geDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IyNiA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjI2ID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNiAmJiBfaXRlcmF0b3IyNltcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjI2W1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjI2KSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyNjtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwiZm9yRWFjaFwiLCBmdW5jdGlvbiAoZm4pIHtcblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyNyA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI3ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI3ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI3OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yNyA9IChfc3RlcDI3ID0gX2l0ZXJhdG9yMjcubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjcudmFsdWU7XG5cblx0ICAgICAgZm4oeCk7XG5cdCAgICB9XG5cdCAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICBfZGlkSXRlcmF0b3JFcnJvcjI3ID0gdHJ1ZTtcblx0ICAgIF9pdGVyYXRvckVycm9yMjcgPSBlcnI7XG5cdCAgfSBmaW5hbGx5IHtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI3ICYmIF9pdGVyYXRvcjI3W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgX2l0ZXJhdG9yMjdbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfVxuXHQgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMjcpIHtcblx0ICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI3O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9KTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJoYXNcIiwgZnVuY3Rpb24gKHRoaW5nKSB7XG5cdCAgcmV0dXJuIHRoaXMuc29tZShmdW5jdGlvbiAoeCkge1xuXHQgICAgcmV0dXJuIHggPT09IHRoaW5nO1xuXHQgIH0pO1xuXHR9KTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJyZWR1Y2VcIiwgZnVuY3Rpb24gKGZuKSB7XG5cdCAgdmFyIGluaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG5cblx0ICB2YXIgdmFsID0gaW5pdGlhbDtcblx0ICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcblx0ICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjggPSB0cnVlO1xuXHQgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMjggPSBmYWxzZTtcblx0ICAgIHZhciBfaXRlcmF0b3JFcnJvcjI4ID0gdW5kZWZpbmVkO1xuXG5cdCAgICB0cnkge1xuXHQgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyOCA9IF9nZXRJdGVyYXRvcih0aGlzKSwgX3N0ZXAyODsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjggPSAoX3N0ZXAyOCA9IF9pdGVyYXRvcjI4Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOCA9IHRydWUpIHtcblx0ICAgICAgICB2YXIgeCA9IF9zdGVwMjgudmFsdWU7XG5cblx0ICAgICAgICB2YWwgPSB4O1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9IGNhdGNoIChlcnIpIHtcblx0ICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyOCA9IHRydWU7XG5cdCAgICAgIF9pdGVyYXRvckVycm9yMjggPSBlcnI7XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI4ICYmIF9pdGVyYXRvcjI4W1wicmV0dXJuXCJdKSB7XG5cdCAgICAgICAgICBfaXRlcmF0b3IyOFtcInJldHVyblwiXSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyOCkge1xuXHQgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IyODtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI5ID0gdHJ1ZTtcblx0ICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IyOSA9IGZhbHNlO1xuXHQgIHZhciBfaXRlcmF0b3JFcnJvcjI5ID0gdW5kZWZpbmVkO1xuXG5cdCAgdHJ5IHtcblx0ICAgIGZvciAodmFyIF9pdGVyYXRvcjI5ID0gX2dldEl0ZXJhdG9yKHRoaXMpLCBfc3RlcDI5OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yOSA9IChfc3RlcDI5ID0gX2l0ZXJhdG9yMjkubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjI5ID0gdHJ1ZSkge1xuXHQgICAgICB2YXIgeCA9IF9zdGVwMjkudmFsdWU7XG5cblx0ICAgICAgdmFsID0gZm4odmFsLCB4KTtcblx0ICAgIH1cblx0ICB9IGNhdGNoIChlcnIpIHtcblx0ICAgIF9kaWRJdGVyYXRvckVycm9yMjkgPSB0cnVlO1xuXHQgICAgX2l0ZXJhdG9yRXJyb3IyOSA9IGVycjtcblx0ICB9IGZpbmFsbHkge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMjkgJiYgX2l0ZXJhdG9yMjlbXCJyZXR1cm5cIl0pIHtcblx0ICAgICAgICBfaXRlcmF0b3IyOVtcInJldHVyblwiXSgpO1xuXHQgICAgICB9XG5cdCAgICB9IGZpbmFsbHkge1xuXHQgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyOSkge1xuXHQgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gdmFsO1xuXHR9LCAyKTtcblxuXHRwcm90b3R5cGVBbmRTdGF0aWMoXCJzb21lXCIsIGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgZm4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyBCb29sZWFuIDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMzAgPSB0cnVlO1xuXHQgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMwID0gZmFsc2U7XG5cdCAgdmFyIF9pdGVyYXRvckVycm9yMzAgPSB1bmRlZmluZWQ7XG5cblx0ICB0cnkge1xuXHQgICAgZm9yICh2YXIgX2l0ZXJhdG9yMzAgPSBfZ2V0SXRlcmF0b3IodGhpcyksIF9zdGVwMzA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMwID0gKF9zdGVwMzAgPSBfaXRlcmF0b3IzMC5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMzAgPSB0cnVlKSB7XG5cdCAgICAgIHZhciB4ID0gX3N0ZXAzMC52YWx1ZTtcblxuXHQgICAgICBpZiAoZm4oeCkpIHtcblx0ICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0gY2F0Y2ggKGVycikge1xuXHQgICAgX2RpZEl0ZXJhdG9yRXJyb3IzMCA9IHRydWU7XG5cdCAgICBfaXRlcmF0b3JFcnJvcjMwID0gZXJyO1xuXHQgIH0gZmluYWxseSB7XG5cdCAgICB0cnkge1xuXHQgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zMCAmJiBfaXRlcmF0b3IzMFtcInJldHVyblwiXSkge1xuXHQgICAgICAgIF9pdGVyYXRvcjMwW1wicmV0dXJuXCJdKCk7XG5cdCAgICAgIH1cblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjMwKSB7XG5cdCAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzMDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiBmYWxzZTtcblx0fSwgMSk7XG5cblx0cHJvdG90eXBlQW5kU3RhdGljKFwidG9BcnJheVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcykpO1xuXHR9KTtcblxuXHQvKlxuXHQgKiBNZXRob2RzIHRoYXQgcmV0dXJuIGFuIGFycmF5IG9mIGl0ZXJhYmxlcy5cblx0ICovXG5cblx0dmFyIE1BWF9DQUNIRSA9IDUwMDtcblxuXHR2YXIgX3RlZSA9IHJld3JhcChfcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gY2FsbGVlJDAkMChpdGVyYXRvciwgY2FjaGUpIHtcblx0ICB2YXIgaXRlbXMsIGluZGV4LCBfaXRlcmF0b3IkbmV4dCwgZG9uZSwgdmFsdWU7XG5cblx0ICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIGNhbGxlZSQwJDAkKGNvbnRleHQkMSQwKSB7XG5cdCAgICB3aGlsZSAoMSkgc3dpdGNoIChjb250ZXh0JDEkMC5wcmV2ID0gY29udGV4dCQxJDAubmV4dCkge1xuXHQgICAgICBjYXNlIDA6XG5cdCAgICAgICAgaXRlbXMgPSBjYWNoZS5pdGVtcztcblx0ICAgICAgICBpbmRleCA9IDA7XG5cblx0ICAgICAgY2FzZSAyOlxuXHQgICAgICAgIGlmIChmYWxzZSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDI1O1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKCEoaW5kZXggPT09IGl0ZW1zLmxlbmd0aCkpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxNDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIF9pdGVyYXRvciRuZXh0ID0gaXRlcmF0b3IubmV4dCgpO1xuXHQgICAgICAgIGRvbmUgPSBfaXRlcmF0b3IkbmV4dC5kb25lO1xuXHQgICAgICAgIHZhbHVlID0gX2l0ZXJhdG9yJG5leHQudmFsdWU7XG5cblx0ICAgICAgICBpZiAoIWRvbmUpIHtcblx0ICAgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMDtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChjYWNoZS5yZXR1cm5lZCA9PT0gTUlTU0lORykge1xuXHQgICAgICAgICAgY2FjaGUucmV0dXJuZWQgPSB2YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGNvbnRleHQkMSQwLmFicnVwdChcImJyZWFrXCIsIDI1KTtcblxuXHQgICAgICBjYXNlIDEwOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAxMjtcblx0ICAgICAgICByZXR1cm4gaXRlbXNbaW5kZXgrK10gPSB2YWx1ZTtcblxuXHQgICAgICBjYXNlIDEyOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDE0OlxuXHQgICAgICAgIGlmICghKGluZGV4ID09PSBjYWNoZS50YWlsKSkge1xuXHQgICAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDIxO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFsdWUgPSBpdGVtc1tpbmRleF07XG5cblx0ICAgICAgICBpZiAoaW5kZXggPT09IE1BWF9DQUNIRSkge1xuXHQgICAgICAgICAgaXRlbXMgPSBjYWNoZS5pdGVtcyA9IGl0ZW1zLnNsaWNlKGluZGV4KTtcblx0ICAgICAgICAgIGluZGV4ID0gMDtcblx0ICAgICAgICAgIGNhY2hlLnRhaWwgPSAwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBpdGVtc1tpbmRleF0gPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICBjYWNoZS50YWlsID0gKytpbmRleDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgY29udGV4dCQxJDAubmV4dCA9IDE5O1xuXHQgICAgICAgIHJldHVybiB2YWx1ZTtcblxuXHQgICAgICBjYXNlIDE5OlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDIxOlxuXHQgICAgICAgIGNvbnRleHQkMSQwLm5leHQgPSAyMztcblx0ICAgICAgICByZXR1cm4gaXRlbXNbaW5kZXgrK107XG5cblx0ICAgICAgY2FzZSAyMzpcblx0ICAgICAgICBjb250ZXh0JDEkMC5uZXh0ID0gMjtcblx0ICAgICAgICBicmVhaztcblxuXHQgICAgICBjYXNlIDI1OlxuXG5cdCAgICAgICAgaWYgKGNhY2hlLnRhaWwgPT09IGluZGV4KSB7XG5cdCAgICAgICAgICBpdGVtcy5sZW5ndGggPSAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBjb250ZXh0JDEkMC5hYnJ1cHQoXCJyZXR1cm5cIiwgY2FjaGUucmV0dXJuZWQpO1xuXG5cdCAgICAgIGNhc2UgMjc6XG5cdCAgICAgIGNhc2UgXCJlbmRcIjpcblx0ICAgICAgICByZXR1cm4gY29udGV4dCQxJDAuc3RvcCgpO1xuXHQgICAgfVxuXHQgIH0sIGNhbGxlZSQwJDAsIHRoaXMpO1xuXHR9KSk7XG5cdF90ZWUucHJvdG90eXBlID0gV3UucHJvdG90eXBlO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInRlZVwiLCBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIG4gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAyIDogYXJndW1lbnRzWzBdO1xuXG5cdCAgdmFyIGl0ZXJhYmxlcyA9IG5ldyBBcnJheShuKTtcblx0ICB2YXIgY2FjaGUgPSB7IHRhaWw6IDAsIGl0ZW1zOiBbXSwgcmV0dXJuZWQ6IE1JU1NJTkcgfTtcblxuXHQgIHdoaWxlIChuLS0pIHtcblx0ICAgIGl0ZXJhYmxlc1tuXSA9IF90ZWUodGhpcywgY2FjaGUpO1xuXHQgIH1cblxuXHQgIHJldHVybiBpdGVyYWJsZXM7XG5cdH0sIDEpO1xuXG5cdHByb3RvdHlwZUFuZFN0YXRpYyhcInVuemlwXCIsIGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IDIgOiBhcmd1bWVudHNbMF07XG5cblx0ICByZXR1cm4gdGhpcy50ZWUobikubWFwKGZ1bmN0aW9uIChpdGVyLCBpKSB7XG5cdCAgICByZXR1cm4gaXRlci5wbHVjayhpKTtcblx0ICB9KTtcblx0fSwgMSk7XG5cblx0Lypcblx0ICogTnVtYmVyIG9mIGNoYW1iZXJzLlxuXHQgKi9cblxuXHR3dS50YW5nID0geyBjbGFuOiAzNiB9O1xuXG5cdC8vIFdlIGRvbid0IGhhdmUgYSBjYWNoZWQgaXRlbSBmb3IgdGhpcyBpbmRleCwgd2UgbmVlZCB0byBmb3JjZSBpdHNcblx0Ly8gZXZhbHVhdGlvbi5cblxuXHQvLyBJZiB3ZSBhcmUgdGhlIGxhc3QgaXRlcmF0b3IgdG8gdXNlIGEgY2FjaGVkIHZhbHVlLCBjbGVhbiB1cCBhZnRlclxuXHQvLyBvdXJzZWx2ZXMuXG5cblx0Ly8gV2UgaGF2ZSBhbiBpdGVtIGluIHRoZSBjYWNoZSBmb3IgdGhpcyBpbmRleCwgc28geWllbGQgaXQuXG5cbi8qKiovIH0sXG4vKiAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX0FycmF5JGZyb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpW1wiZGVmYXVsdFwiXTtcblxuXHRleHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZ1bmN0aW9uIChhcnIpIHtcblx0ICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdCAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG5cdCAgICByZXR1cm4gYXJyMjtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIF9BcnJheSRmcm9tKGFycik7XG5cdCAgfVxuXHR9O1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oMyksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLkFycmF5LmZyb207XG5cbi8qKiovIH0sXG4vKiA0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkYXQgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KSh0cnVlKTtcblxuXHQvLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5cdF9fd2VicGFja19yZXF1aXJlX18oOCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24oaXRlcmF0ZWQpe1xuXHQgIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcblx0ICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuXHQvLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG5cdH0sIGZ1bmN0aW9uKCl7XG5cdCAgdmFyIE8gICAgID0gdGhpcy5fdFxuXHQgICAgLCBpbmRleCA9IHRoaXMuX2lcblx0ICAgICwgcG9pbnQ7XG5cdCAgaWYoaW5kZXggPj0gTy5sZW5ndGgpcmV0dXJuIHt2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlfTtcblx0ICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG5cdCAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG5cdCAgcmV0dXJuIHt2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlfTtcblx0fSk7XG5cbi8qKiovIH0sXG4vKiA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyB0cnVlICAtPiBTdHJpbmcjYXRcblx0Ly8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5cdHZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG5cdCAgLCBkZWZpbmVkICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFRPX1NUUklORyl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uKHRoYXQsIHBvcyl7XG5cdCAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKVxuXHQgICAgICAsIGkgPSB0b0ludGVnZXIocG9zKVxuXHQgICAgICAsIGwgPSBzLmxlbmd0aFxuXHQgICAgICAsIGEsIGI7XG5cdCAgICBpZihpIDwgMCB8fCBpID49IGwpcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuXHQgICAgYSA9IHMuY2hhckNvZGVBdChpKTtcblx0ICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGxcblx0ICAgICAgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG5cdCAgICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcblx0ICAgICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0Ly8gNy4xLjQgVG9JbnRlZ2VyXG5cdHZhciBjZWlsICA9IE1hdGguY2VpbFxuXHQgICwgZmxvb3IgPSBNYXRoLmZsb29yO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIGlmKGl0ID09IHVuZGVmaW5lZCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgTElCUkFSWSAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KVxuXHQgICwgJGRlZiAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAsICRyZWRlZiAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpXG5cdCAgLCBoaWRlICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KVxuXHQgICwgaGFzICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblx0ICAsIFNZTUJPTF9JVEVSQVRPUiA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpXG5cdCAgLCBJdGVyYXRvcnMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXHQgICwgQlVHR1kgICAgICAgICAgID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpIC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcblx0ICAsIEZGX0lURVJBVE9SICAgICA9ICdAQGl0ZXJhdG9yJ1xuXHQgICwgS0VZUyAgICAgICAgICAgID0gJ2tleXMnXG5cdCAgLCBWQUxVRVMgICAgICAgICAgPSAndmFsdWVzJztcblx0dmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRSl7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNCkoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXHQgIHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbihraW5kKXtcblx0ICAgIHN3aXRjaChraW5kKXtcblx0ICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuXHQgICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuXHQgICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuXHQgIH07XG5cdCAgdmFyIFRBRyAgICAgID0gTkFNRSArICcgSXRlcmF0b3InXG5cdCAgICAsIHByb3RvICAgID0gQmFzZS5wcm90b3R5cGVcblx0ICAgICwgX25hdGl2ZSAgPSBwcm90b1tTWU1CT0xfSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdXG5cdCAgICAsIF9kZWZhdWx0ID0gX25hdGl2ZSB8fCBjcmVhdGVNZXRob2QoREVGQVVMVClcblx0ICAgICwgbWV0aG9kcywga2V5O1xuXHQgIC8vIEZpeCBuYXRpdmVcblx0ICBpZihfbmF0aXZlKXtcblx0ICAgIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLmdldFByb3RvKF9kZWZhdWx0LmNhbGwobmV3IEJhc2UpKTtcblx0ICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcblx0ICAgIF9fd2VicGFja19yZXF1aXJlX18oMjUpKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuXHQgICAgLy8gRkYgZml4XG5cdCAgICBpZighTElCUkFSWSAmJiBoYXMocHJvdG8sIEZGX0lURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBTWU1CT0xfSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuXHQgIH1cblx0ICAvLyBEZWZpbmUgaXRlcmF0b3Jcblx0ICBpZighTElCUkFSWSB8fCBGT1JDRSloaWRlKHByb3RvLCBTWU1CT0xfSVRFUkFUT1IsIF9kZWZhdWx0KTtcblx0ICAvLyBQbHVnIGZvciBsaWJyYXJ5XG5cdCAgSXRlcmF0b3JzW05BTUVdID0gX2RlZmF1bHQ7XG5cdCAgSXRlcmF0b3JzW1RBR10gID0gcmV0dXJuVGhpcztcblx0ICBpZihERUZBVUxUKXtcblx0ICAgIG1ldGhvZHMgPSB7XG5cdCAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgICAgICAgID8gX2RlZmF1bHQgOiBjcmVhdGVNZXRob2QoS0VZUyksXG5cdCAgICAgIHZhbHVlczogIERFRkFVTFQgPT0gVkFMVUVTID8gX2RlZmF1bHQgOiBjcmVhdGVNZXRob2QoVkFMVUVTKSxcblx0ICAgICAgZW50cmllczogREVGQVVMVCAhPSBWQUxVRVMgPyBfZGVmYXVsdCA6IGNyZWF0ZU1ldGhvZCgnZW50cmllcycpXG5cdCAgICB9O1xuXHQgICAgaWYoRk9SQ0UpZm9yKGtleSBpbiBtZXRob2RzKXtcblx0ICAgICAgaWYoIShrZXkgaW4gcHJvdG8pKSRyZWRlZihwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuXHQgICAgfSBlbHNlICRkZWYoJGRlZi5QICsgJGRlZi5GICogQlVHR1ksIE5BTUUsIG1ldGhvZHMpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgZ2xvYmFsICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIGNvcmUgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpXG5cdCAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblx0dmFyIGN0eCA9IGZ1bmN0aW9uKGZuLCB0aGF0KXtcblx0ICByZXR1cm4gZnVuY3Rpb24oKXtcblx0ICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXHQgIH07XG5cdH07XG5cdHZhciAkZGVmID0gZnVuY3Rpb24odHlwZSwgbmFtZSwgc291cmNlKXtcblx0ICB2YXIga2V5LCBvd24sIG91dCwgZXhwXG5cdCAgICAsIGlzR2xvYmFsID0gdHlwZSAmICRkZWYuR1xuXHQgICAgLCBpc1Byb3RvICA9IHR5cGUgJiAkZGVmLlBcblx0ICAgICwgdGFyZ2V0ICAgPSBpc0dsb2JhbCA/IGdsb2JhbCA6IHR5cGUgJiAkZGVmLlNcblx0ICAgICAgICA/IGdsb2JhbFtuYW1lXSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV1cblx0ICAgICwgZXhwb3J0cyAgPSBpc0dsb2JhbCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuXHQgIGlmKGlzR2xvYmFsKXNvdXJjZSA9IG5hbWU7XG5cdCAgZm9yKGtleSBpbiBzb3VyY2Upe1xuXHQgICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG5cdCAgICBvd24gPSAhKHR5cGUgJiAkZGVmLkYpICYmIHRhcmdldCAmJiBrZXkgaW4gdGFyZ2V0O1xuXHQgICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuXHQgICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcblx0ICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG5cdCAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcblx0ICAgIGlmKGlzR2xvYmFsICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nKWV4cCA9IHNvdXJjZVtrZXldO1xuXHQgICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcblx0ICAgIGVsc2UgaWYodHlwZSAmICRkZWYuQiAmJiBvd24pZXhwID0gY3R4KG91dCwgZ2xvYmFsKTtcblx0ICAgIC8vIHdyYXAgZ2xvYmFsIGNvbnN0cnVjdG9ycyBmb3IgcHJldmVudCBjaGFuZ2UgdGhlbSBpbiBsaWJyYXJ5XG5cdCAgICBlbHNlIGlmKHR5cGUgJiAkZGVmLlcgJiYgdGFyZ2V0W2tleV0gPT0gb3V0KSFmdW5jdGlvbihDKXtcblx0ICAgICAgZXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuXHQgICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgQyA/IG5ldyBDKHBhcmFtKSA6IEMocGFyYW0pO1xuXHQgICAgICB9O1xuXHQgICAgICBleHBbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcblx0ICAgIH0ob3V0KTtcblx0ICAgIGVsc2UgZXhwID0gaXNQcm90byAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcblx0ICAgIC8vIGV4cG9ydFxuXHQgICAgZXhwb3J0c1trZXldID0gZXhwO1xuXHQgICAgaWYoaXNQcm90bykoZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSkpW2tleV0gPSBvdXQ7XG5cdCAgfVxuXHR9O1xuXHQvLyB0eXBlIGJpdG1hcFxuXHQkZGVmLkYgPSAxOyAgLy8gZm9yY2VkXG5cdCRkZWYuRyA9IDI7ICAvLyBnbG9iYWxcblx0JGRlZi5TID0gNDsgIC8vIHN0YXRpY1xuXHQkZGVmLlAgPSA4OyAgLy8gcHJvdG9cblx0JGRlZi5CID0gMTY7IC8vIGJpbmRcblx0JGRlZi5XID0gMzI7IC8vIHdyYXBcblx0bW9kdWxlLmV4cG9ydHMgPSAkZGVmO1xuXG4vKioqLyB9LFxuLyogMTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5cdHZhciBVTkRFRklORUQgPSAndW5kZWZpbmVkJztcblx0dmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSBVTkRFRklORUQgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuXHQgID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gVU5ERUZJTkVEICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdGlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMS4yLjAnfTtcblx0aWYodHlwZW9mIF9fZSA9PSAnbnVtYmVyJylfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbi8qKiovIH0sXG4vKiAxMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuLyoqKi8gfSxcbi8qIDE0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgJCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBjcmVhdGVEZXNjID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNykgPyBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuXHQgIHJldHVybiAkLnNldERlc2Mob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcblx0fSA6IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG5cdCAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcblx0ICByZXR1cm4gb2JqZWN0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdHZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBjcmVhdGU6ICAgICAkT2JqZWN0LmNyZWF0ZSxcblx0ICBnZXRQcm90bzogICAkT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuXHQgIGlzRW51bTogICAgIHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuXHQgIGdldERlc2M6ICAgICRPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuXHQgIHNldERlc2M6ICAgICRPYmplY3QuZGVmaW5lUHJvcGVydHksXG5cdCAgc2V0RGVzY3M6ICAgJE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLFxuXHQgIGdldEtleXM6ICAgICRPYmplY3Qua2V5cyxcblx0ICBnZXROYW1lczogICAkT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsXG5cdCAgZ2V0U3ltYm9sczogJE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsXG5cdCAgZWFjaDogICAgICAgW10uZm9yRWFjaFxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG5cdCAgcmV0dXJuIHtcblx0ICAgIGVudW1lcmFibGUgIDogIShiaXRtYXAgJiAxKSxcblx0ICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcblx0ICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcblx0ICAgIHZhbHVlICAgICAgIDogdmFsdWVcblx0ICB9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcblx0bW9kdWxlLmV4cG9ydHMgPSAhX193ZWJwYWNrX3JlcXVpcmVfXygxOCkoZnVuY3Rpb24oKXtcblx0ICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xuXHR9KTtcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuXHQgIHRyeSB7XG5cdCAgICByZXR1cm4gISFleGVjKCk7XG5cdCAgfSBjYXRjaChlKXtcblx0ICAgIHJldHVybiB0cnVlO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwga2V5KXtcblx0ICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgc3RvcmUgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSkoJ3drcycpXG5cdCAgLCBTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5TeW1ib2w7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obmFtZSl7XG5cdCAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG5cdCAgICBTeW1ib2wgJiYgU3ltYm9sW25hbWVdIHx8IChTeW1ib2wgfHwgX193ZWJwYWNrX3JlcXVpcmVfXygyMikpKCdTeW1ib2wuJyArIG5hbWUpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSlcblx0ICAsIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nXG5cdCAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcblx0ICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHR2YXIgaWQgPSAwXG5cdCAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oa2V5KXtcblx0ICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8qKiovIH0sXG4vKiAyNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG5cdC8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5cdF9fd2VicGFja19yZXF1aXJlX18oMTQpKEl0ZXJhdG9yUHJvdG90eXBlLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuXHQgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9ICQuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7bmV4dDogX193ZWJwYWNrX3JlcXVpcmVfXygxNikoMSxuZXh0KX0pO1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjUpKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMjUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBoYXMgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSlcblx0ICAsIGhpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KVxuXHQgICwgVEFHICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCd0b1N0cmluZ1RhZycpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIHRhZywgc3RhdCl7XG5cdCAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSloaWRlKGl0LCBUQUcsIHRhZyk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgY3R4ICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgJGRlZiAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgdG9PYmplY3QgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KVxuXHQgICwgY2FsbCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKVxuXHQgICwgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKVxuXHQgICwgdG9MZW5ndGggICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KVxuXHQgICwgZ2V0SXRlckZuICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhX193ZWJwYWNrX3JlcXVpcmVfXygzOCkoZnVuY3Rpb24oaXRlcil7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG5cdCAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuXHQgIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlLyosIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKi8pe1xuXHQgICAgdmFyIE8gICAgICAgPSB0b09iamVjdChhcnJheUxpa2UpXG5cdCAgICAgICwgQyAgICAgICA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXlcblx0ICAgICAgLCBtYXBmbiAgID0gYXJndW1lbnRzWzFdXG5cdCAgICAgICwgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWRcblx0ICAgICAgLCBpbmRleCAgID0gMFxuXHQgICAgICAsIGl0ZXJGbiAgPSBnZXRJdGVyRm4oTylcblx0ICAgICAgLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG5cdCAgICBpZihtYXBwaW5nKW1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuXHQgICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG5cdCAgICBpZihpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSl7XG5cdCAgICAgIGZvcihpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQzsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKXtcblx0ICAgICAgICByZXN1bHRbaW5kZXhdID0gbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcblx0ICAgICAgZm9yKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKXtcblx0ICAgICAgICByZXN1bHRbaW5kZXhdID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuXHQgICAgcmV0dXJuIHJlc3VsdDtcblx0ICB9XG5cdH0pO1xuXG5cbi8qKiovIH0sXG4vKiAyNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5cdHZhciBhRnVuY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgdGhhdCwgbGVuZ3RoKXtcblx0ICBhRnVuY3Rpb24oZm4pO1xuXHQgIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG5cdCAgc3dpdGNoKGxlbmd0aCl7XG5cdCAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcblx0ICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG5cdCAgICB9O1xuXHQgICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuXHQgICAgfTtcblx0ICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuXHQgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcblx0ICAgIH07XG5cdCAgfVxuXHQgIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcblx0ICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuXHQgIH07XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxuXHR2YXIgZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcblx0dmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcyl7XG5cdCAgdHJ5IHtcblx0ICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG5cdCAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcblx0ICAgIGlmKHJldCAhPT0gdW5kZWZpbmVkKWFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG5cdCAgICB0aHJvdyBlO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDMxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxuXHR2YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMylcblx0ICAsIElURVJBVE9SICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gKEl0ZXJhdG9ycy5BcnJheSB8fCBBcnJheS5wcm90b3R5cGVbSVRFUkFUT1JdKSA9PT0gaXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gNy4xLjE1IFRvTGVuZ3RoXG5cdHZhciB0b0ludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpXG5cdCAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgY2xhc3NvZiAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNilcblx0ICAsIElURVJBVE9SICA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdpdGVyYXRvcicpXG5cdCAgLCBJdGVyYXRvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uKGl0KXtcblx0ICBpZihpdCAhPSB1bmRlZmluZWQpcmV0dXJuIGl0W0lURVJBVE9SXSB8fCBpdFsnQEBpdGVyYXRvciddIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcblx0dmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpXG5cdCAgLCBUQUcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgndG9TdHJpbmdUYWcnKVxuXHQgIC8vIEVTMyB3cm9uZyBoZXJlXG5cdCAgLCBBUkcgPSBjb2YoZnVuY3Rpb24oKXsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgTywgVCwgQjtcblx0ICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcblx0ICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuXHQgICAgOiB0eXBlb2YgKFQgPSAoTyA9IE9iamVjdChpdCkpW1RBR10pID09ICdzdHJpbmcnID8gVFxuXHQgICAgLy8gYnVpbHRpblRhZyBjYXNlXG5cdCAgICA6IEFSRyA/IGNvZihPKVxuXHQgICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuXHQgICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0dmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDM4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgU1lNQk9MX0lURVJBVE9SID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCkoJ2l0ZXJhdG9yJylcblx0ICAsIFNBRkVfQ0xPU0lORyAgICA9IGZhbHNlO1xuXHR0cnkge1xuXHQgIHZhciByaXRlciA9IFs3XVtTWU1CT0xfSVRFUkFUT1JdKCk7XG5cdCAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24oKXsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcblx0ICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbigpeyB0aHJvdyAyOyB9KTtcblx0fSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuXHQgIGlmKCFTQUZFX0NMT1NJTkcpcmV0dXJuIGZhbHNlO1xuXHQgIHZhciBzYWZlID0gZmFsc2U7XG5cdCAgdHJ5IHtcblx0ICAgIHZhciBhcnIgID0gWzddXG5cdCAgICAgICwgaXRlciA9IGFycltTWU1CT0xfSVRFUkFUT1JdKCk7XG5cdCAgICBpdGVyLm5leHQgPSBmdW5jdGlvbigpeyBzYWZlID0gdHJ1ZTsgfTtcblx0ICAgIGFycltTWU1CT0xfSVRFUkFUT1JdID0gZnVuY3Rpb24oKXsgcmV0dXJuIGl0ZXI7IH07XG5cdCAgICBleGVjKGFycik7XG5cdCAgfSBjYXRjaChlKXsgLyogZW1wdHkgKi8gfVxuXHQgIHJldHVybiBzYWZlO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfZ2V0SXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKVtcImRlZmF1bHRcIl07XG5cblx0dmFyIF9pc0l0ZXJhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSlbXCJkZWZhdWx0XCJdO1xuXG5cdGV4cG9ydHNbXCJkZWZhdWx0XCJdID0gKGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBzbGljZUl0ZXJhdG9yKGFyciwgaSkge1xuXHQgICAgdmFyIF9hcnIgPSBbXTtcblx0ICAgIHZhciBfbiA9IHRydWU7XG5cdCAgICB2YXIgX2QgPSBmYWxzZTtcblx0ICAgIHZhciBfZSA9IHVuZGVmaW5lZDtcblxuXHQgICAgdHJ5IHtcblx0ICAgICAgZm9yICh2YXIgX2kgPSBfZ2V0SXRlcmF0b3IoYXJyKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHtcblx0ICAgICAgICBfYXJyLnB1c2goX3MudmFsdWUpO1xuXG5cdCAgICAgICAgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrO1xuXHQgICAgICB9XG5cdCAgICB9IGNhdGNoIChlcnIpIHtcblx0ICAgICAgX2QgPSB0cnVlO1xuXHQgICAgICBfZSA9IGVycjtcblx0ICAgIH0gZmluYWxseSB7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSkgX2lbXCJyZXR1cm5cIl0oKTtcblx0ICAgICAgfSBmaW5hbGx5IHtcblx0ICAgICAgICBpZiAoX2QpIHRocm93IF9lO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHJldHVybiBfYXJyO1xuXHQgIH1cblxuXHQgIHJldHVybiBmdW5jdGlvbiAoYXJyLCBpKSB7XG5cdCAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG5cdCAgICAgIHJldHVybiBhcnI7XG5cdCAgICB9IGVsc2UgaWYgKF9pc0l0ZXJhYmxlKE9iamVjdChhcnIpKSkge1xuXHQgICAgICByZXR1cm4gc2xpY2VJdGVyYXRvcihhcnIsIGkpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG5cdCAgICB9XG5cdCAgfTtcblx0fSkoKTtcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG4vKioqLyB9LFxuLyogNDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg0MSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDQxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcblxuLyoqKi8gfSxcbi8qIDQyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcblx0dmFyIEl0ZXJhdG9ycyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xuXHRJdGVyYXRvcnMuTm9kZUxpc3QgPSBJdGVyYXRvcnMuSFRNTENvbGxlY3Rpb24gPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8qKiovIH0sXG4vKiA0MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgc2V0VW5zY29wZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpXG5cdCAgLCBzdGVwICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSlcblx0ICAsIEl0ZXJhdG9ycyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKVxuXHQgICwgdG9JT2JqZWN0ICA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xuXG5cdC8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcblx0Ly8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcblx0Ly8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuXHQvLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg4KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuXHQgIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcblx0ICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuXHQgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG5cdC8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxuXHR9LCBmdW5jdGlvbigpe1xuXHQgIHZhciBPICAgICA9IHRoaXMuX3Rcblx0ICAgICwga2luZCAgPSB0aGlzLl9rXG5cdCAgICAsIGluZGV4ID0gdGhpcy5faSsrO1xuXHQgIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcblx0ICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG5cdCAgICByZXR1cm4gc3RlcCgxKTtcblx0ICB9XG5cdCAgaWYoa2luZCA9PSAna2V5cycgIClyZXR1cm4gc3RlcCgwLCBpbmRleCk7XG5cdCAgaWYoa2luZCA9PSAndmFsdWVzJylyZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG5cdCAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xuXHR9LCAndmFsdWVzJyk7XG5cblx0Ly8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuXHRJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5cdHNldFVuc2NvcGUoJ2tleXMnKTtcblx0c2V0VW5zY29wZSgndmFsdWVzJyk7XG5cdHNldFVuc2NvcGUoJ2VudHJpZXMnKTtcblxuLyoqKi8gfSxcbi8qIDQ0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07XG5cbi8qKiovIH0sXG4vKiA0NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG5cdCAgcmV0dXJuIHt2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZX07XG5cdH07XG5cbi8qKiovIH0sXG4vKiA0NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXHJcblx0dmFyIElPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KVxyXG5cdCAgLCBkZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcclxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcclxuXHQgIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcclxuXHR9O1xuXG4vKioqLyB9LFxuLyogNDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGluZGV4ZWQgb2JqZWN0LCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3Ncblx0dmFyIGNvZiA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IDAgaW4gT2JqZWN0KCd6JykgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG5cdCAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNDggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpXG5cdCAgLCBnZXQgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLmdldEl0ZXJhdG9yID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciBpdGVyRm4gPSBnZXQoaXQpO1xuXHQgIGlmKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJyl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcblx0ICByZXR1cm4gYW5PYmplY3QoaXRlckZuLmNhbGwoaXQpKTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDQ5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNTApLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA1MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XG5cbi8qKiovIH0sXG4vKiA1MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGNsYXNzb2YgICA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpXG5cdCAgLCBJVEVSQVRPUiAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKVxuXHQgICwgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuaXNJdGVyYWJsZSA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgTyA9IE9iamVjdChpdCk7XG5cdCAgcmV0dXJuIElURVJBVE9SIGluIE8gfHwgJ0BAaXRlcmF0b3InIGluIE8gfHwgSXRlcmF0b3JzLmhhc093blByb3BlcnR5KGNsYXNzb2YoTykpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg1MyksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDUzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnaXRlcmF0b3InKTtcblxuLyoqKi8gfSxcbi8qIDU0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7Ly8gVGhpcyBtZXRob2Qgb2Ygb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IG5lZWRzIHRvIGJlXG5cdC8vIGtlcHQgaWRlbnRpY2FsIHRvIHRoZSB3YXkgaXQgaXMgb2J0YWluZWQgaW4gcnVudGltZS5qc1xuXHR2YXIgZyA9XG5cdCAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG5cdCAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG5cdCAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpcztcblxuXHQvLyBVc2UgYGdldE93blByb3BlcnR5TmFtZXNgIGJlY2F1c2Ugbm90IGFsbCBicm93c2VycyBzdXBwb3J0IGNhbGxpbmdcblx0Ly8gYGhhc093blByb3BlcnR5YCBvbiB0aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLlxuXHR2YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmXG5cdCAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZykuaW5kZXhPZihcInJlZ2VuZXJhdG9yUnVudGltZVwiKSA+PSAwO1xuXG5cdC8vIFNhdmUgdGhlIG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci5cblx0dmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuXG5cdC8vIEZvcmNlIHJlZXZhbHV0YXRpb24gb2YgcnVudGltZS5qcy5cblx0Zy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KTtcblxuXHRpZiAoaGFkUnVudGltZSkge1xuXHQgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHJ1bnRpbWUuXG5cdCAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBvbGRSdW50aW1lO1xuXHR9IGVsc2Uge1xuXHQgIC8vIFJlbW92ZSB0aGUgZ2xvYmFsIHByb3BlcnR5IGFkZGVkIGJ5IHJ1bnRpbWUuanMuXG5cdCAgdHJ5IHtcblx0ICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblx0ICB9IGNhdGNoKGUpIHtcblx0ICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuXHQgIH1cblx0fVxuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogbW9kdWxlLmV4cG9ydHMsIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuXHQvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgKGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSgpKSkpXG5cbi8qKiovIH0sXG4vKiA1NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCwgcHJvY2Vzcykgey8qKlxuXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG5cdCAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cdCAqXG5cdCAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuXHQgKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG5cdCAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuXHQgKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG5cdCAqL1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NylbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfU3ltYm9sJGl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MilbXCJkZWZhdWx0XCJdO1xuXG5cdHZhciBfT2JqZWN0JGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpW1wiZGVmYXVsdFwiXTtcblxuXHR2YXIgX1Byb21pc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KVtcImRlZmF1bHRcIl07XG5cblx0IShmdW5jdGlvbiAoZ2xvYmFsKSB7XG5cdCAgXCJ1c2Ugc3RyaWN0XCI7XG5cblx0ICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0ICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cblx0ICB2YXIgaXRlcmF0b3JTeW1ib2wgPSB0eXBlb2YgX1N5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIF9TeW1ib2wkaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG5cblx0ICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuXHQgIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcblx0ICBpZiAocnVudGltZSkge1xuXHQgICAgaWYgKGluTW9kdWxlKSB7XG5cdCAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcblx0ICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cblx0ICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXHQgICAgfVxuXHQgICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuXHQgICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuXHQgICAgcmV0dXJuO1xuXHQgIH1cblxuXHQgIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuXHQgIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cblx0ICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuXHQgIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcblx0ICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG5cdCAgICB2YXIgZ2VuZXJhdG9yID0gX09iamVjdCRjcmVhdGUoKG91dGVyRm4gfHwgR2VuZXJhdG9yKS5wcm90b3R5cGUpO1xuXG5cdCAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiB8fCBudWxsLCBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSkpO1xuXG5cdCAgICByZXR1cm4gZ2VuZXJhdG9yO1xuXHQgIH1cblx0ICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG5cdCAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG5cdCAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG5cdCAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG5cdCAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuXHQgIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcblx0ICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG5cdCAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcblx0ICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcblx0ICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG5cdCAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuXHQgIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuXHQgICAgdHJ5IHtcblx0ICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuXHQgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcblx0ICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcblx0ICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuXHQgIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cblx0ICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG5cdCAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuXHQgIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cblx0ICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcblx0ICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3Jcblx0ICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuXHQgIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG5cdCAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cblx0ICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG5cdCAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG5cdCAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZTtcblx0ICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuXHQgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG5cdCAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cblx0ICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuXHQgIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG5cdCAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuXHQgICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuXHQgICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIChhcmcpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcblx0ICAgICAgfTtcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uIChnZW5GdW4pIHtcblx0ICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3Rvcjtcblx0ICAgIHJldHVybiBjdG9yID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcblx0ICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cblx0ICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cblx0ICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuXHQgIH07XG5cblx0ICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbiAoZ2VuRnVuKSB7XG5cdCAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG5cdCAgICBnZW5GdW4ucHJvdG90eXBlID0gX09iamVjdCRjcmVhdGUoR3ApO1xuXHQgICAgcmV0dXJuIGdlbkZ1bjtcblx0ICB9O1xuXG5cdCAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG5cdCAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3Rcblx0ICAvLyBgdmFsdWUgaW5zdGFuY2VvZiBBd2FpdEFyZ3VtZW50YCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcblx0ICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLiBTb21lIG1heSBjb25zaWRlciB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZCB0b29cblx0ICAvLyBjdXRlc3ksIGJ1dCB0aGV5IGFyZSBjdXJtdWRnZW9ucy5cblx0ICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuXHQgICAgcmV0dXJuIG5ldyBBd2FpdEFyZ3VtZW50KGFyZyk7XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIEF3YWl0QXJndW1lbnQoYXJnKSB7XG5cdCAgICB0aGlzLmFyZyA9IGFyZztcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuXHQgICAgLy8gVGhpcyBpbnZva2UgZnVuY3Rpb24gaXMgd3JpdHRlbiBpbiBhIHN0eWxlIHRoYXQgYXNzdW1lcyBzb21lXG5cdCAgICAvLyBjYWxsaW5nIGZ1bmN0aW9uIChvciBQcm9taXNlKSB3aWxsIGhhbmRsZSBleGNlcHRpb25zLlxuXHQgICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSBnZW5lcmF0b3JbbWV0aG9kXShhcmcpO1xuXHQgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG5cdCAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEF3YWl0QXJndW1lbnQgPyBfUHJvbWlzZS5yZXNvbHZlKHZhbHVlLmFyZykudGhlbihpbnZva2VOZXh0LCBpbnZva2VUaHJvdykgOiBfUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uICh1bndyYXBwZWQpIHtcblx0ICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuXHQgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuXHQgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG5cdCAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcblx0ICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuXHQgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2Vcblx0ICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG5cdCAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG5cdCAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG5cdCAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcblx0ICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcblx0ICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG5cdCAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuXHQgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuXHQgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuXHQgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcblx0ICAgICAgICByZXR1cm4gcmVzdWx0O1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSBcIm9iamVjdFwiICYmIHByb2Nlc3MuZG9tYWluKSB7XG5cdCAgICAgIGludm9rZSA9IHByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcblx0ICAgIH1cblxuXHQgICAgdmFyIGludm9rZU5leHQgPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwibmV4dFwiKTtcblx0ICAgIHZhciBpbnZva2VUaHJvdyA9IGludm9rZS5iaW5kKGdlbmVyYXRvciwgXCJ0aHJvd1wiKTtcblx0ICAgIHZhciBpbnZva2VSZXR1cm4gPSBpbnZva2UuYmluZChnZW5lcmF0b3IsIFwicmV0dXJuXCIpO1xuXHQgICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuXHQgICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuXHQgICAgICB2YXIgZW5xdWV1ZVJlc3VsdCA9XG5cdCAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcblx0ICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG5cdCAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcblx0ICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cblx0ICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG5cdCAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG5cdCAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcblx0ICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcblx0ICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcblx0ICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcblx0ICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcblx0ICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuXHQgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIGludm9rZShtZXRob2QsIGFyZyk7XG5cdCAgICAgIH0pIDogbmV3IF9Qcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdCAgICAgICAgcmVzb2x2ZShpbnZva2UobWV0aG9kLCBhcmcpKTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZW5xdWV1ZVJlc3VsdCBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieVxuXHQgICAgICAvLyBsYXRlciBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG5cdCAgICAgIHByZXZpb3VzUHJvbWlzZSA9IGVucXVldWVSZXN1bHRbXCJjYXRjaFwiXShmdW5jdGlvbiAoaWdub3JlZCkge30pO1xuXG5cdCAgICAgIHJldHVybiBlbnF1ZXVlUmVzdWx0O1xuXHQgICAgfVxuXG5cdCAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuXHQgICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG5cdCAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuXHQgIH1cblxuXHQgIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG5cblx0ICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG5cdCAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG5cdCAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG5cdCAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uIChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuXHQgICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcih3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSk7XG5cblx0ICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbikgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cblx0ICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG5cdCAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuXHQgICAgfSk7XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuXHQgICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuXHQgICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuXHQgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcblx0ICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgIHRocm93IGFyZztcblx0ICAgICAgICB9XG5cblx0ICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuXHQgICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcblx0ICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuXHQgICAgICB9XG5cblx0ICAgICAgd2hpbGUgKHRydWUpIHtcblx0ICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXHQgICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuXHQgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIiB8fCBtZXRob2QgPT09IFwidGhyb3dcIiAmJiBkZWxlZ2F0ZS5pdGVyYXRvclttZXRob2RdID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgLy8gQSByZXR1cm4gb3IgdGhyb3cgKHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyB0aHJvd1xuXHQgICAgICAgICAgICAvLyBtZXRob2QpIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cblx0ICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuXHQgICAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG5cdCAgICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXTtcblx0ICAgICAgICAgICAgaWYgKHJldHVybk1ldGhvZCkge1xuXHQgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChyZXR1cm5NZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBhcmcpO1xuXHQgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmV0dXJuIG1ldGhvZCB0aHJldyBhbiBleGNlcHRpb24sIGxldCB0aGF0XG5cdCAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gcHJldmFpbCBvdmVyIHRoZSBvcmlnaW5hbCByZXR1cm4gb3IgdGhyb3cuXG5cdCAgICAgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG5cdCAgICAgICAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgICAgICAgICAgY29udGludWU7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuXHQgICAgICAgICAgICAgIC8vIENvbnRpbnVlIHdpdGggdGhlIG91dGVyIHJldHVybiwgbm93IHRoYXQgdGhlIGRlbGVnYXRlXG5cdCAgICAgICAgICAgICAgLy8gaXRlcmF0b3IgaGFzIGJlZW4gdGVybWluYXRlZC5cblx0ICAgICAgICAgICAgICBjb250aW51ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZGVsZWdhdGUuaXRlcmF0b3JbbWV0aG9kXSwgZGVsZWdhdGUuaXRlcmF0b3IsIGFyZyk7XG5cblx0ICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG5cdCAgICAgICAgICAgIC8vIExpa2UgcmV0dXJuaW5nIGdlbmVyYXRvci50aHJvdyh1bmNhdWdodCksIGJ1dCB3aXRob3V0IHRoZVxuXHQgICAgICAgICAgICAvLyBvdmVyaGVhZCBvZiBhbiBleHRyYSBmdW5jdGlvbiBjYWxsLlxuXHQgICAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG5cdCAgICAgICAgICAgIGFyZyA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgICAgIGNvbnRpbnVlO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAvLyBEZWxlZ2F0ZSBnZW5lcmF0b3IgcmFuIGFuZCBoYW5kbGVkIGl0cyBvd24gZXhjZXB0aW9ucyBzb1xuXHQgICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBtZXRob2Qgd2FzLCB3ZSBjb250aW51ZSBhcyBpZiBpdCBpc1xuXHQgICAgICAgICAgLy8gXCJuZXh0XCIgd2l0aCBhbiB1bmRlZmluZWQgYXJnLlxuXHQgICAgICAgICAgbWV0aG9kID0gXCJuZXh0XCI7XG5cdCAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cblx0ICAgICAgICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblx0ICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcblx0ICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cdCAgICAgICAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cdCAgICAgICAgICAgIHJldHVybiBpbmZvO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAobWV0aG9kID09PSBcIm5leHRcIikge1xuXHQgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkKSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuc2VudCA9IGFyZztcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGNvbnRleHQuc2VudCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcblx0ICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcblx0ICAgICAgICAgICAgdGhyb3cgYXJnO1xuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBpZiAoY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpKSB7XG5cdCAgICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG5cdCAgICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG5cdCAgICAgICAgICAgIG1ldGhvZCA9IFwibmV4dFwiO1xuXHQgICAgICAgICAgICBhcmcgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09IFwicmV0dXJuXCIpIHtcblx0ICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGFyZyk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuXHQgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblx0ICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcblx0ICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cblx0ICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cblx0ICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lID8gR2VuU3RhdGVDb21wbGV0ZWQgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG5cdCAgICAgICAgICB2YXIgaW5mbyA9IHtcblx0ICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG5cdCAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuXHQgICAgICAgICAgfTtcblxuXHQgICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcblx0ICAgICAgICAgICAgaWYgKGNvbnRleHQuZGVsZWdhdGUgJiYgbWV0aG9kID09PSBcIm5leHRcIikge1xuXHQgICAgICAgICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG5cdCAgICAgICAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuXHQgICAgICAgICAgICAgIGFyZyA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGluZm87XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG5cdCAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuXHQgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuXHQgICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihhcmcpIGNhbGwgYWJvdmUuXG5cdCAgICAgICAgICBtZXRob2QgPSBcInRocm93XCI7XG5cdCAgICAgICAgICBhcmcgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfTtcblx0ICB9XG5cblx0ICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuXHQgIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cblx0ICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG5cdCAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgcmV0dXJuIHRoaXM7XG5cdCAgfTtcblxuXHQgIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuXHQgICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG5cdCAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG5cdCAgICBpZiAoMSBpbiBsb2NzKSB7XG5cdCAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcblx0ICAgIH1cblxuXHQgICAgaWYgKDIgaW4gbG9jcykge1xuXHQgICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcblx0ICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuXHQgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG5cdCAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG5cdCAgICBkZWxldGUgcmVjb3JkLmFyZztcblx0ICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuXHQgICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG5cdCAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG5cdCAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG5cdCAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuXHQgICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuXHQgICAgdGhpcy5yZXNldCh0cnVlKTtcblx0ICB9XG5cblx0ICBydW50aW1lLmtleXMgPSBmdW5jdGlvbiAob2JqZWN0KSB7XG5cdCAgICB2YXIga2V5cyA9IFtdO1xuXHQgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuXHQgICAgICBrZXlzLnB1c2goa2V5KTtcblx0ICAgIH1cblx0ICAgIGtleXMucmV2ZXJzZSgpO1xuXG5cdCAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuXHQgICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cblx0ICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuXHQgICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcblx0ICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcblx0ICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuXHQgICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcblx0ICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuXHQgICAgICAgICAgcmV0dXJuIG5leHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG5cdCAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG5cdCAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuXHQgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXHQgICAgICByZXR1cm4gbmV4dDtcblx0ICAgIH07XG5cdCAgfTtcblxuXHQgIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuXHQgICAgaWYgKGl0ZXJhYmxlKSB7XG5cdCAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcblx0ICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcblx0ICAgICAgICByZXR1cm4gaXRlcmFibGU7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcblx0ICAgICAgICB2YXIgaSA9IC0xLFxuXHQgICAgICAgICAgICBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcblx0ICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcblx0ICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuXHQgICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcblx0ICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuXHQgICAgICAgICAgcmV0dXJuIG5leHQ7XG5cdCAgICAgICAgfTtcblxuXHQgICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cblx0ICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcblx0ICB9XG5cdCAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cblx0ICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuXHQgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuXHQgIH1cblxuXHQgIENvbnRleHQucHJvdG90eXBlID0ge1xuXHQgICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cblx0ICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG5cdCAgICAgIHRoaXMucHJldiA9IDA7XG5cdCAgICAgIHRoaXMubmV4dCA9IDA7XG5cdCAgICAgIHRoaXMuc2VudCA9IHVuZGVmaW5lZDtcblx0ICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG5cdCAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG5cdCAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG5cdCAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuXHQgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuXHQgICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcblx0ICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiYgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiYgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuXHQgICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcblx0ICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuXHQgICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuXHQgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuXHQgICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG5cdCAgICB9LFxuXG5cdCAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24gZGlzcGF0Y2hFeGNlcHRpb24oZXhjZXB0aW9uKSB7XG5cdCAgICAgIGlmICh0aGlzLmRvbmUpIHtcblx0ICAgICAgICB0aHJvdyBleGNlcHRpb247XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cdCAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuXHQgICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuXHQgICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG5cdCAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXHQgICAgICAgIHJldHVybiAhIWNhdWdodDtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcblx0ICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG5cdCAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuXHQgICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcblx0ICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuXHQgICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cblx0ICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcblx0ICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuXHQgICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG5cdCAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG5cdCAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBhYnJ1cHQ6IGZ1bmN0aW9uIGFicnVwdCh0eXBlLCBhcmcpIHtcblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHQgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJiBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcblx0ICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChmaW5hbGx5RW50cnkgJiYgKHR5cGUgPT09IFwiYnJlYWtcIiB8fCB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuXHQgICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcblx0ICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG5cdCAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuXHQgICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG5cdCAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cblx0ICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuXHQgICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuY29tcGxldGUocmVjb3JkKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuXHQgICAgfSxcblxuXHQgICAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHJlY29yZCwgYWZ0ZXJMb2MpIHtcblx0ICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHwgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuXHQgICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcblx0ICAgICAgICB0aGlzLnJ2YWwgPSByZWNvcmQuYXJnO1xuXHQgICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG5cdCAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcblx0ICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgZmluaXNoOiBmdW5jdGlvbiBmaW5pc2goZmluYWxseUxvYykge1xuXHQgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG5cdCAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuXHQgICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG5cdCAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcblx0ICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuXHQgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0cnlMb2MpIHtcblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuXHQgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblx0ICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcblx0ICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXHQgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcblx0ICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG5cdCAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHRocm93bjtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cblx0ICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG5cdCAgICB9LFxuXG5cdCAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG5cdCAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG5cdCAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG5cdCAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcblx0ICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG5cdCAgICAgIH07XG5cblx0ICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG5cdCAgICB9XG5cdCAgfTtcblx0fSkoXG5cdC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcblx0Ly8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG5cdC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG5cdHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDogdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdW5kZWZpbmVkKTtcblx0LyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0oKSksIF9fd2VicGFja19yZXF1aXJlX18oNTYpKSlcblxuLyoqKi8gfSxcbi8qIDU2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxuXHR2YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cdHZhciBxdWV1ZSA9IFtdO1xuXHR2YXIgZHJhaW5pbmcgPSBmYWxzZTtcblx0dmFyIGN1cnJlbnRRdWV1ZTtcblx0dmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuXHRmdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG5cdCAgICBkcmFpbmluZyA9IGZhbHNlO1xuXHQgICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcblx0ICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG5cdCAgICB9XG5cdCAgICBpZiAocXVldWUubGVuZ3RoKSB7XG5cdCAgICAgICAgZHJhaW5RdWV1ZSgpO1xuXHQgICAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcblx0ICAgIGlmIChkcmFpbmluZykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuXHQgICAgZHJhaW5pbmcgPSB0cnVlO1xuXG5cdCAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuXHQgICAgd2hpbGUobGVuKSB7XG5cdCAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG5cdCAgICAgICAgcXVldWUgPSBbXTtcblx0ICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG5cdCAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcblx0ICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG5cdCAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuXHQgICAgfVxuXHQgICAgY3VycmVudFF1ZXVlID0gbnVsbDtcblx0ICAgIGRyYWluaW5nID0gZmFsc2U7XG5cdCAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdH1cblxuXHRwcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuXHQgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuXHQgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHQgICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcblx0ICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG5cdCAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcblx0ICAgIH1cblx0fTtcblxuXHQvLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5cdGZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuXHQgICAgdGhpcy5mdW4gPSBmdW47XG5cdCAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG5cdH1cblx0SXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuXHQgICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG5cdH07XG5cdHByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5cdHByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5cdHByb2Nlc3MuZW52ID0ge307XG5cdHByb2Nlc3MuYXJndiA9IFtdO1xuXHRwcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcblx0cHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5cdGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5cdHByb2Nlc3Mub24gPSBub29wO1xuXHRwcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcblx0cHJvY2Vzcy5vbmNlID0gbm9vcDtcblx0cHJvY2Vzcy5vZmYgPSBub29wO1xuXHRwcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcblx0cHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xuXHRwcm9jZXNzLmVtaXQgPSBub29wO1xuXG5cdHByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG5cdCAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdH07XG5cblx0cHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcblx0cHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG5cdH07XG5cdHByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuLyoqKi8gfSxcbi8qIDU3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNTgpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA1OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0X193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMikuU3ltYm9sO1xuXG4vKioqLyB9LFxuLyogNTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0Ly8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxuXHR2YXIgJCAgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgZ2xvYmFsICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgaGFzICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXHQgICwgU1VQUE9SVF9ERVNDICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KVxuXHQgICwgJGRlZiAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgJHJlZGVmICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKVxuXHQgICwgJGZhaWxzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KVxuXHQgICwgc2hhcmVkICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKVxuXHQgICwgc2V0VGFnICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KVxuXHQgICwgdWlkICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKVxuXHQgICwgd2tzICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKVxuXHQgICwga2V5T2YgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKVxuXHQgICwgJG5hbWVzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKVxuXHQgICwgZW51bUtleXMgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYyKVxuXHQgICwgaXNPYmplY3QgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKVxuXHQgICwgYW5PYmplY3QgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgdG9JT2JqZWN0ICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KVxuXHQgICwgY3JlYXRlRGVzYyAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KVxuXHQgICwgZ2V0RGVzYyAgICAgICAgPSAkLmdldERlc2Ncblx0ICAsIHNldERlc2MgICAgICAgID0gJC5zZXREZXNjXG5cdCAgLCBfY3JlYXRlICAgICAgICA9ICQuY3JlYXRlXG5cdCAgLCBnZXROYW1lcyAgICAgICA9ICRuYW1lcy5nZXRcblx0ICAsICRTeW1ib2wgICAgICAgID0gZ2xvYmFsLlN5bWJvbFxuXHQgICwgc2V0dGVyICAgICAgICAgPSBmYWxzZVxuXHQgICwgSElEREVOICAgICAgICAgPSB3a3MoJ19oaWRkZW4nKVxuXHQgICwgaXNFbnVtICAgICAgICAgPSAkLmlzRW51bVxuXHQgICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG5cdCAgLCBBbGxTeW1ib2xzICAgICA9IHNoYXJlZCgnc3ltYm9scycpXG5cdCAgLCB1c2VOYXRpdmUgICAgICA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbidcblx0ICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0LnByb3RvdHlwZTtcblxuXHQvLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcblx0dmFyIHNldFN5bWJvbERlc2MgPSBTVVBQT1JUX0RFU0MgJiYgJGZhaWxzKGZ1bmN0aW9uKCl7XG5cdCAgcmV0dXJuIF9jcmVhdGUoc2V0RGVzYyh7fSwgJ2EnLCB7XG5cdCAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBzZXREZXNjKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuXHQgIH0pKS5hICE9IDc7XG5cdH0pID8gZnVuY3Rpb24oaXQsIGtleSwgRCl7XG5cdCAgdmFyIHByb3RvRGVzYyA9IGdldERlc2MoT2JqZWN0UHJvdG8sIGtleSk7XG5cdCAgaWYocHJvdG9EZXNjKWRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuXHQgIHNldERlc2MoaXQsIGtleSwgRCk7XG5cdCAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylzZXREZXNjKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG5cdH0gOiBzZXREZXNjO1xuXG5cdHZhciB3cmFwID0gZnVuY3Rpb24odGFnKXtcblx0ICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sLnByb3RvdHlwZSk7XG5cdCAgc3ltLl9rID0gdGFnO1xuXHQgIFNVUFBPUlRfREVTQyAmJiBzZXR0ZXIgJiYgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7XG5cdCAgICBjb25maWd1cmFibGU6IHRydWUsXG5cdCAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcblx0ICAgICAgaWYoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSl0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuXHQgICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuXHQgICAgfVxuXHQgIH0pO1xuXHQgIHJldHVybiBzeW07XG5cdH07XG5cblx0dmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpe1xuXHQgIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkpe1xuXHQgICAgaWYoIUQuZW51bWVyYWJsZSl7XG5cdCAgICAgIGlmKCFoYXMoaXQsIEhJRERFTikpc2V0RGVzYyhpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG5cdCAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBpZihoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKWl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuXHQgICAgICBEID0gX2NyZWF0ZShELCB7ZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSl9KTtcblx0ICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG5cdCAgfSByZXR1cm4gc2V0RGVzYyhpdCwga2V5LCBEKTtcblx0fTtcblx0dmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG5cdCAgYW5PYmplY3QoaXQpO1xuXHQgIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSlcblx0ICAgICwgaSAgICA9IDBcblx0ICAgICwgbCA9IGtleXMubGVuZ3RoXG5cdCAgICAsIGtleTtcblx0ICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cdHZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcblx0ICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG5cdH07XG5cdHZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuXHQgIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5KTtcblx0ICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldXG5cdCAgICA/IEUgOiB0cnVlO1xuXHR9O1xuXHR2YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KXtcblx0ICB2YXIgRCA9IGdldERlc2MoaXQgPSB0b0lPYmplY3QoaXQpLCBrZXkpO1xuXHQgIGlmKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSlELmVudW1lcmFibGUgPSB0cnVlO1xuXHQgIHJldHVybiBEO1xuXHR9O1xuXHR2YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcblx0ICB2YXIgbmFtZXMgID0gZ2V0TmFtZXModG9JT2JqZWN0KGl0KSlcblx0ICAgICwgcmVzdWx0ID0gW11cblx0ICAgICwgaSAgICAgID0gMFxuXHQgICAgLCBrZXk7XG5cdCAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4pcmVzdWx0LnB1c2goa2V5KTtcblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9O1xuXHR2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG5cdCAgdmFyIG5hbWVzICA9IGdldE5hbWVzKHRvSU9iamVjdChpdCkpXG5cdCAgICAsIHJlc3VsdCA9IFtdXG5cdCAgICAsIGkgICAgICA9IDBcblx0ICAgICwga2V5O1xuXHQgIHdoaWxlKG5hbWVzLmxlbmd0aCA+IGkpaWYoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pKXJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHQvLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcblx0aWYoIXVzZU5hdGl2ZSl7XG5cdCAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpe1xuXHQgICAgaWYodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcblx0ICAgIHJldHVybiB3cmFwKHVpZChhcmd1bWVudHNbMF0pKTtcblx0ICB9O1xuXHQgICRyZWRlZigkU3ltYm9sLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKXtcblx0ICAgIHJldHVybiB0aGlzLl9rO1xuXHQgIH0pO1xuXG5cdCAgJC5jcmVhdGUgICAgID0gJGNyZWF0ZTtcblx0ICAkLmlzRW51bSAgICAgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG5cdCAgJC5nZXREZXNjICAgID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblx0ICAkLnNldERlc2MgICAgPSAkZGVmaW5lUHJvcGVydHk7XG5cdCAgJC5zZXREZXNjcyAgID0gJGRlZmluZVByb3BlcnRpZXM7XG5cdCAgJC5nZXROYW1lcyAgID0gJG5hbWVzLmdldCA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuXHQgICQuZ2V0U3ltYm9scyA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblx0ICBpZihTVVBQT1JUX0RFU0MgJiYgIV9fd2VicGFja19yZXF1aXJlX18oOSkpe1xuXHQgICAgJHJlZGVmKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuXHQgIH1cblx0fVxuXG5cdC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG5cdGlmKCF1c2VOYXRpdmUgfHwgJGZhaWxzKGZ1bmN0aW9uKCl7XG5cdCAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFskU3ltYm9sKCldKSAhPSAnW251bGxdJztcblx0fSkpJHJlZGVmKCRTeW1ib2wucHJvdG90eXBlLCAndG9KU09OJywgZnVuY3Rpb24gdG9KU09OKCl7XG5cdCAgaWYodXNlTmF0aXZlICYmIGlzT2JqZWN0KHRoaXMpKXJldHVybiB0aGlzO1xuXHR9KTtcblxuXHR2YXIgc3ltYm9sU3RhdGljcyA9IHtcblx0ICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcblx0ICAnZm9yJzogZnVuY3Rpb24oa2V5KXtcblx0ICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcblx0ICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG5cdCAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcblx0ICB9LFxuXHQgIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuXHQgIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKGtleSl7XG5cdCAgICByZXR1cm4ga2V5T2YoU3ltYm9sUmVnaXN0cnksIGtleSk7XG5cdCAgfSxcblx0ICB1c2VTZXR0ZXI6IGZ1bmN0aW9uKCl7IHNldHRlciA9IHRydWU7IH0sXG5cdCAgdXNlU2ltcGxlOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSBmYWxzZTsgfVxuXHR9O1xuXHQvLyAxOS40LjIuMiBTeW1ib2wuaGFzSW5zdGFuY2Vcblx0Ly8gMTkuNC4yLjMgU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZVxuXHQvLyAxOS40LjIuNCBTeW1ib2wuaXRlcmF0b3Jcblx0Ly8gMTkuNC4yLjYgU3ltYm9sLm1hdGNoXG5cdC8vIDE5LjQuMi44IFN5bWJvbC5yZXBsYWNlXG5cdC8vIDE5LjQuMi45IFN5bWJvbC5zZWFyY2hcblx0Ly8gMTkuNC4yLjEwIFN5bWJvbC5zcGVjaWVzXG5cdC8vIDE5LjQuMi4xMSBTeW1ib2wuc3BsaXRcblx0Ly8gMTkuNC4yLjEyIFN5bWJvbC50b1ByaW1pdGl2ZVxuXHQvLyAxOS40LjIuMTMgU3ltYm9sLnRvU3RyaW5nVGFnXG5cdC8vIDE5LjQuMi4xNCBTeW1ib2wudW5zY29wYWJsZXNcblx0JC5lYWNoLmNhbGwoKFxuXHQgICAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCwnICtcblx0ICAgICdzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuXHQgICkuc3BsaXQoJywnKSwgZnVuY3Rpb24oaXQpe1xuXHQgICAgdmFyIHN5bSA9IHdrcyhpdCk7XG5cdCAgICBzeW1ib2xTdGF0aWNzW2l0XSA9IHVzZU5hdGl2ZSA/IHN5bSA6IHdyYXAoc3ltKTtcblx0ICB9XG5cdCk7XG5cblx0c2V0dGVyID0gdHJ1ZTtcblxuXHQkZGVmKCRkZWYuRyArICRkZWYuVywge1N5bWJvbDogJFN5bWJvbH0pO1xuXG5cdCRkZWYoJGRlZi5TLCAnU3ltYm9sJywgc3ltYm9sU3RhdGljcyk7XG5cblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhdXNlTmF0aXZlLCAnT2JqZWN0Jywge1xuXHQgIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcblx0ICBjcmVhdGU6ICRjcmVhdGUsXG5cdCAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG5cdCAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcblx0ICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuXHQgIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuXHQgIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcblx0ICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5cdCAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcblx0ICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcblx0ICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG5cdCAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG5cdH0pO1xuXG5cdC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cblx0c2V0VGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcblx0Ly8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuXHRzZXRUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcblx0Ly8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cblx0c2V0VGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuXG4vKioqLyB9LFxuLyogNjAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgdG9JT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqZWN0LCBlbCl7XG5cdCAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG5cdCAgICAsIGtleXMgICA9ICQuZ2V0S2V5cyhPKVxuXHQgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuXHQgICAgLCBpbmRleCAgPSAwXG5cdCAgICAsIGtleTtcblx0ICB3aGlsZShsZW5ndGggPiBpbmRleClpZihPW2tleSA9IGtleXNbaW5kZXgrK11dID09PSBlbClyZXR1cm4ga2V5O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcblx0dmFyIHRvU3RyaW5nICA9IHt9LnRvU3RyaW5nXG5cdCAgLCB0b0lPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KVxuXHQgICwgZ2V0TmFtZXMgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSkuZ2V0TmFtZXM7XG5cblx0dmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuXHQgID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG5cdHZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uKGl0KXtcblx0ICB0cnkge1xuXHQgICAgcmV0dXJuIGdldE5hbWVzKGl0KTtcblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG5cdCAgfVxuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzLmdldCA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpe1xuXHQgIGlmKHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nKXJldHVybiBnZXRXaW5kb3dOYW1lcyhpdCk7XG5cdCAgcmV0dXJuIGdldE5hbWVzKHRvSU9iamVjdChpdCkpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG5cdHZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuXHQgIHZhciBrZXlzICAgICAgID0gJC5nZXRLZXlzKGl0KVxuXHQgICAgLCBnZXRTeW1ib2xzID0gJC5nZXRTeW1ib2xzO1xuXHQgIGlmKGdldFN5bWJvbHMpe1xuXHQgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KVxuXHQgICAgICAsIGlzRW51bSAgPSAkLmlzRW51bVxuXHQgICAgICAsIGkgICAgICAgPSAwXG5cdCAgICAgICwga2V5O1xuXHQgICAgd2hpbGUoc3ltYm9scy5sZW5ndGggPiBpKWlmKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKWtleXMucHVzaChrZXkpO1xuXHQgIH1cblx0ICByZXR1cm4ga2V5cztcblx0fTtcblxuLyoqKi8gfSxcbi8qIDYzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IF9fd2VicGFja19yZXF1aXJlX18oNjQpLCBfX2VzTW9kdWxlOiB0cnVlIH07XG5cbi8qKiovIH0sXG4vKiA2NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjcmVhdGUoUCwgRCl7XG5cdCAgcmV0dXJuICQuY3JlYXRlKFAsIEQpO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg2NiksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDY2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLlByb21pc2U7XG5cbi8qKiovIH0sXG4vKiA2NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XG5cbi8qKiovIH0sXG4vKiA2OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpXG5cdCAgLCBMSUJSQVJZICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KVxuXHQgICwgZ2xvYmFsICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXG5cdCAgLCBjdHggICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNylcblx0ICAsIGNsYXNzb2YgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KVxuXHQgICwgJGRlZiAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApXG5cdCAgLCBpc09iamVjdCAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGFuT2JqZWN0ICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgYUZ1bmN0aW9uICA9IF9fd2VicGFja19yZXF1aXJlX18oMjgpXG5cdCAgLCBzdHJpY3ROZXcgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSlcblx0ICAsIGZvck9mICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKVxuXHQgICwgc2V0UHJvdG8gICA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpLnNldFxuXHQgICwgc2FtZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzIpXG5cdCAgLCBzcGVjaWVzICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mylcblx0ICAsIFNQRUNJRVMgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKSgnc3BlY2llcycpXG5cdCAgLCBSRUNPUkQgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMikoJ3JlY29yZCcpXG5cdCAgLCBhc2FwICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NClcblx0ICAsIFBST01JU0UgICAgPSAnUHJvbWlzZSdcblx0ICAsIHByb2Nlc3MgICAgPSBnbG9iYWwucHJvY2Vzc1xuXHQgICwgaXNOb2RlICAgICA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnXG5cdCAgLCBQICAgICAgICAgID0gZ2xvYmFsW1BST01JU0VdXG5cdCAgLCBXcmFwcGVyO1xuXG5cdHZhciB0ZXN0UmVzb2x2ZSA9IGZ1bmN0aW9uKHN1Yil7XG5cdCAgdmFyIHRlc3QgPSBuZXcgUChmdW5jdGlvbigpe30pO1xuXHQgIGlmKHN1Yil0ZXN0LmNvbnN0cnVjdG9yID0gT2JqZWN0O1xuXHQgIHJldHVybiBQLnJlc29sdmUodGVzdCkgPT09IHRlc3Q7XG5cdH07XG5cblx0dmFyIHVzZU5hdGl2ZSA9IGZ1bmN0aW9uKCl7XG5cdCAgdmFyIHdvcmtzID0gZmFsc2U7XG5cdCAgZnVuY3Rpb24gUDIoeCl7XG5cdCAgICB2YXIgc2VsZiA9IG5ldyBQKHgpO1xuXHQgICAgc2V0UHJvdG8oc2VsZiwgUDIucHJvdG90eXBlKTtcblx0ICAgIHJldHVybiBzZWxmO1xuXHQgIH1cblx0ICB0cnkge1xuXHQgICAgd29ya3MgPSBQICYmIFAucmVzb2x2ZSAmJiB0ZXN0UmVzb2x2ZSgpO1xuXHQgICAgc2V0UHJvdG8oUDIsIFApO1xuXHQgICAgUDIucHJvdG90eXBlID0gJC5jcmVhdGUoUC5wcm90b3R5cGUsIHtjb25zdHJ1Y3Rvcjoge3ZhbHVlOiBQMn19KTtcblx0ICAgIC8vIGFjdHVhbCBGaXJlZm94IGhhcyBicm9rZW4gc3ViY2xhc3Mgc3VwcG9ydCwgdGVzdCB0aGF0XG5cdCAgICBpZighKFAyLnJlc29sdmUoNSkudGhlbihmdW5jdGlvbigpe30pIGluc3RhbmNlb2YgUDIpKXtcblx0ICAgICAgd29ya3MgPSBmYWxzZTtcblx0ICAgIH1cblx0ICAgIC8vIGFjdHVhbCBWOCBidWcsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTYyXG5cdCAgICBpZih3b3JrcyAmJiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSl7XG5cdCAgICAgIHZhciB0aGVuYWJsZVRoZW5Hb3R0ZW4gPSBmYWxzZTtcblx0ICAgICAgUC5yZXNvbHZlKCQuc2V0RGVzYyh7fSwgJ3RoZW4nLCB7XG5cdCAgICAgICAgZ2V0OiBmdW5jdGlvbigpeyB0aGVuYWJsZVRoZW5Hb3R0ZW4gPSB0cnVlOyB9XG5cdCAgICAgIH0pKTtcblx0ICAgICAgd29ya3MgPSB0aGVuYWJsZVRoZW5Hb3R0ZW47XG5cdCAgICB9XG5cdCAgfSBjYXRjaChlKXsgd29ya3MgPSBmYWxzZTsgfVxuXHQgIHJldHVybiB3b3Jrcztcblx0fSgpO1xuXG5cdC8vIGhlbHBlcnNcblx0dmFyIGlzUHJvbWlzZSA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXNPYmplY3QoaXQpICYmICh1c2VOYXRpdmUgPyBjbGFzc29mKGl0KSA9PSAnUHJvbWlzZScgOiBSRUNPUkQgaW4gaXQpO1xuXHR9O1xuXHR2YXIgc2FtZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24oYSwgYil7XG5cdCAgLy8gbGlicmFyeSB3cmFwcGVyIHNwZWNpYWwgY2FzZVxuXHQgIGlmKExJQlJBUlkgJiYgYSA9PT0gUCAmJiBiID09PSBXcmFwcGVyKXJldHVybiB0cnVlO1xuXHQgIHJldHVybiBzYW1lKGEsIGIpO1xuXHR9O1xuXHR2YXIgZ2V0Q29uc3RydWN0b3IgPSBmdW5jdGlvbihDKXtcblx0ICB2YXIgUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdO1xuXHQgIHJldHVybiBTICE9IHVuZGVmaW5lZCA/IFMgOiBDO1xuXHR9O1xuXHR2YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uKGl0KXtcblx0ICB2YXIgdGhlbjtcblx0ICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG5cdH07XG5cdHZhciBub3RpZnkgPSBmdW5jdGlvbihyZWNvcmQsIGlzUmVqZWN0KXtcblx0ICBpZihyZWNvcmQubilyZXR1cm47XG5cdCAgcmVjb3JkLm4gPSB0cnVlO1xuXHQgIHZhciBjaGFpbiA9IHJlY29yZC5jO1xuXHQgIGFzYXAoZnVuY3Rpb24oKXtcblx0ICAgIHZhciB2YWx1ZSA9IHJlY29yZC52XG5cdCAgICAgICwgb2sgICAgPSByZWNvcmQucyA9PSAxXG5cdCAgICAgICwgaSAgICAgPSAwO1xuXHQgICAgdmFyIHJ1biA9IGZ1bmN0aW9uKHJlYWN0KXtcblx0ICAgICAgdmFyIGNiID0gb2sgPyByZWFjdC5vayA6IHJlYWN0LmZhaWxcblx0ICAgICAgICAsIHJldCwgdGhlbjtcblx0ICAgICAgdHJ5IHtcblx0ICAgICAgICBpZihjYil7XG5cdCAgICAgICAgICBpZighb2spcmVjb3JkLmggPSB0cnVlO1xuXHQgICAgICAgICAgcmV0ID0gY2IgPT09IHRydWUgPyB2YWx1ZSA6IGNiKHZhbHVlKTtcblx0ICAgICAgICAgIGlmKHJldCA9PT0gcmVhY3QuUCl7XG5cdCAgICAgICAgICAgIHJlYWN0LnJlaihUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG5cdCAgICAgICAgICB9IGVsc2UgaWYodGhlbiA9IGlzVGhlbmFibGUocmV0KSl7XG5cdCAgICAgICAgICAgIHRoZW4uY2FsbChyZXQsIHJlYWN0LnJlcywgcmVhY3QucmVqKTtcblx0ICAgICAgICAgIH0gZWxzZSByZWFjdC5yZXMocmV0KTtcblx0ICAgICAgICB9IGVsc2UgcmVhY3QucmVqKHZhbHVlKTtcblx0ICAgICAgfSBjYXRjaChlcnIpe1xuXHQgICAgICAgIHJlYWN0LnJlaihlcnIpO1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgICAgd2hpbGUoY2hhaW4ubGVuZ3RoID4gaSlydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG5cdCAgICBjaGFpbi5sZW5ndGggPSAwO1xuXHQgICAgcmVjb3JkLm4gPSBmYWxzZTtcblx0ICAgIGlmKGlzUmVqZWN0KXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcblx0ICAgICAgdmFyIHByb21pc2UgPSByZWNvcmQucFxuXHQgICAgICAgICwgaGFuZGxlciwgY29uc29sZTtcblx0ICAgICAgaWYoaXNVbmhhbmRsZWQocHJvbWlzZSkpe1xuXHQgICAgICAgIGlmKGlzTm9kZSl7XG5cdCAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcblx0ICAgICAgICB9IGVsc2UgaWYoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbil7XG5cdCAgICAgICAgICBoYW5kbGVyKHtwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlfSk7XG5cdCAgICAgICAgfSBlbHNlIGlmKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3Ipe1xuXHQgICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSByZWNvcmQuYSA9IHVuZGVmaW5lZDtcblx0ICAgIH0sIDEpO1xuXHQgIH0pO1xuXHR9O1xuXHR2YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbihwcm9taXNlKXtcblx0ICB2YXIgcmVjb3JkID0gcHJvbWlzZVtSRUNPUkRdXG5cdCAgICAsIGNoYWluICA9IHJlY29yZC5hIHx8IHJlY29yZC5jXG5cdCAgICAsIGkgICAgICA9IDBcblx0ICAgICwgcmVhY3Q7XG5cdCAgaWYocmVjb3JkLmgpcmV0dXJuIGZhbHNlO1xuXHQgIHdoaWxlKGNoYWluLmxlbmd0aCA+IGkpe1xuXHQgICAgcmVhY3QgPSBjaGFpbltpKytdO1xuXHQgICAgaWYocmVhY3QuZmFpbCB8fCAhaXNVbmhhbmRsZWQocmVhY3QuUCkpcmV0dXJuIGZhbHNlO1xuXHQgIH0gcmV0dXJuIHRydWU7XG5cdH07XG5cdHZhciAkcmVqZWN0ID0gZnVuY3Rpb24odmFsdWUpe1xuXHQgIHZhciByZWNvcmQgPSB0aGlzO1xuXHQgIGlmKHJlY29yZC5kKXJldHVybjtcblx0ICByZWNvcmQuZCA9IHRydWU7XG5cdCAgcmVjb3JkID0gcmVjb3JkLnIgfHwgcmVjb3JkOyAvLyB1bndyYXBcblx0ICByZWNvcmQudiA9IHZhbHVlO1xuXHQgIHJlY29yZC5zID0gMjtcblx0ICByZWNvcmQuYSA9IHJlY29yZC5jLnNsaWNlKCk7XG5cdCAgbm90aWZ5KHJlY29yZCwgdHJ1ZSk7XG5cdH07XG5cdHZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uKHZhbHVlKXtcblx0ICB2YXIgcmVjb3JkID0gdGhpc1xuXHQgICAgLCB0aGVuO1xuXHQgIGlmKHJlY29yZC5kKXJldHVybjtcblx0ICByZWNvcmQuZCA9IHRydWU7XG5cdCAgcmVjb3JkID0gcmVjb3JkLnIgfHwgcmVjb3JkOyAvLyB1bndyYXBcblx0ICB0cnkge1xuXHQgICAgaWYodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKXtcblx0ICAgICAgYXNhcChmdW5jdGlvbigpe1xuXHQgICAgICAgIHZhciB3cmFwcGVyID0ge3I6IHJlY29yZCwgZDogZmFsc2V9OyAvLyB3cmFwXG5cdCAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcblx0ICAgICAgICB9IGNhdGNoKGUpe1xuXHQgICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZWNvcmQudiA9IHZhbHVlO1xuXHQgICAgICByZWNvcmQucyA9IDE7XG5cdCAgICAgIG5vdGlmeShyZWNvcmQsIGZhbHNlKTtcblx0ICAgIH1cblx0ICB9IGNhdGNoKGUpe1xuXHQgICAgJHJlamVjdC5jYWxsKHtyOiByZWNvcmQsIGQ6IGZhbHNlfSwgZSk7IC8vIHdyYXBcblx0ICB9XG5cdH07XG5cblx0Ly8gY29uc3RydWN0b3IgcG9seWZpbGxcblx0aWYoIXVzZU5hdGl2ZSl7XG5cdCAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcblx0ICBQID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcil7XG5cdCAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuXHQgICAgdmFyIHJlY29yZCA9IHtcblx0ICAgICAgcDogc3RyaWN0TmV3KHRoaXMsIFAsIFBST01JU0UpLCAgICAgICAgIC8vIDwtIHByb21pc2Vcblx0ICAgICAgYzogW10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuXHQgICAgICBhOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcblx0ICAgICAgczogMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG5cdCAgICAgIGQ6IGZhbHNlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBkb25lXG5cdCAgICAgIHY6IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuXHQgICAgICBoOiBmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gaGFuZGxlZCByZWplY3Rpb25cblx0ICAgICAgbjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIG5vdGlmeVxuXHQgICAgfTtcblx0ICAgIHRoaXNbUkVDT1JEXSA9IHJlY29yZDtcblx0ICAgIHRyeSB7XG5cdCAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgcmVjb3JkLCAxKSwgY3R4KCRyZWplY3QsIHJlY29yZCwgMSkpO1xuXHQgICAgfSBjYXRjaChlcnIpe1xuXHQgICAgICAkcmVqZWN0LmNhbGwocmVjb3JkLCBlcnIpO1xuXHQgICAgfVxuXHQgIH07XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg3OSkoUC5wcm90b3R5cGUsIHtcblx0ICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG5cdCAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKXtcblx0ICAgICAgdmFyIFMgPSBhbk9iamVjdChhbk9iamVjdCh0aGlzKS5jb25zdHJ1Y3RvcilbU1BFQ0lFU107XG5cdCAgICAgIHZhciByZWFjdCA9IHtcblx0ICAgICAgICBvazogICB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZSxcblx0ICAgICAgICBmYWlsOiB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICA/IG9uUmVqZWN0ZWQgIDogZmFsc2Vcblx0ICAgICAgfTtcblx0ICAgICAgdmFyIHByb21pc2UgPSByZWFjdC5QID0gbmV3IChTICE9IHVuZGVmaW5lZCA/IFMgOiBQKShmdW5jdGlvbihyZXMsIHJlail7XG5cdCAgICAgICAgcmVhY3QucmVzID0gcmVzO1xuXHQgICAgICAgIHJlYWN0LnJlaiA9IHJlajtcblx0ICAgICAgfSk7XG5cdCAgICAgIGFGdW5jdGlvbihyZWFjdC5yZXMpO1xuXHQgICAgICBhRnVuY3Rpb24ocmVhY3QucmVqKTtcblx0ICAgICAgdmFyIHJlY29yZCA9IHRoaXNbUkVDT1JEXTtcblx0ICAgICAgcmVjb3JkLmMucHVzaChyZWFjdCk7XG5cdCAgICAgIGlmKHJlY29yZC5hKXJlY29yZC5hLnB1c2gocmVhY3QpO1xuXHQgICAgICBpZihyZWNvcmQucylub3RpZnkocmVjb3JkLCBmYWxzZSk7XG5cdCAgICAgIHJldHVybiBwcm9taXNlO1xuXHQgICAgfSxcblx0ICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG5cdCAgICAnY2F0Y2gnOiBmdW5jdGlvbihvblJlamVjdGVkKXtcblx0ICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuXHQgICAgfVxuXHQgIH0pO1xuXHR9XG5cblx0Ly8gZXhwb3J0XG5cdCRkZWYoJGRlZi5HICsgJGRlZi5XICsgJGRlZi5GICogIXVzZU5hdGl2ZSwge1Byb21pc2U6IFB9KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXygyNSkoUCwgUFJPTUlTRSk7XG5cdHNwZWNpZXMoUCk7XG5cdHNwZWNpZXMoV3JhcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpW1BST01JU0VdKTtcblxuXHQvLyBzdGF0aWNzXG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogIXVzZU5hdGl2ZSwgUFJPTUlTRSwge1xuXHQgIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG5cdCAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocil7XG5cdCAgICByZXR1cm4gbmV3IHRoaXMoZnVuY3Rpb24ocmVzLCByZWopeyByZWoocik7IH0pO1xuXHQgIH1cblx0fSk7XG5cdCRkZWYoJGRlZi5TICsgJGRlZi5GICogKCF1c2VOYXRpdmUgfHwgdGVzdFJlc29sdmUodHJ1ZSkpLCBQUk9NSVNFLCB7XG5cdCAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG5cdCAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KXtcblx0ICAgIHJldHVybiBpc1Byb21pc2UoeCkgJiYgc2FtZUNvbnN0cnVjdG9yKHguY29uc3RydWN0b3IsIHRoaXMpXG5cdCAgICAgID8geCA6IG5ldyB0aGlzKGZ1bmN0aW9uKHJlcyl7IHJlcyh4KTsgfSk7XG5cdCAgfVxuXHR9KTtcblx0JGRlZigkZGVmLlMgKyAkZGVmLkYgKiAhKHVzZU5hdGl2ZSAmJiBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KShmdW5jdGlvbihpdGVyKXtcblx0ICBQLmFsbChpdGVyKVsnY2F0Y2gnXShmdW5jdGlvbigpe30pO1xuXHR9KSksIFBST01JU0UsIHtcblx0ICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcblx0ICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSl7XG5cdCAgICB2YXIgQyAgICAgID0gZ2V0Q29uc3RydWN0b3IodGhpcylcblx0ICAgICAgLCB2YWx1ZXMgPSBbXTtcblx0ICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbihyZXMsIHJlail7XG5cdCAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgdmFsdWVzLnB1c2gsIHZhbHVlcyk7XG5cdCAgICAgIHZhciByZW1haW5pbmcgPSB2YWx1ZXMubGVuZ3RoXG5cdCAgICAgICAgLCByZXN1bHRzICAgPSBBcnJheShyZW1haW5pbmcpO1xuXHQgICAgICBpZihyZW1haW5pbmcpJC5lYWNoLmNhbGwodmFsdWVzLCBmdW5jdGlvbihwcm9taXNlLCBpbmRleCl7XG5cdCAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuXHQgICAgICAgICAgcmVzdWx0c1tpbmRleF0gPSB2YWx1ZTtcblx0ICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlcyhyZXN1bHRzKTtcblx0ICAgICAgICB9LCByZWopO1xuXHQgICAgICB9KTtcblx0ICAgICAgZWxzZSByZXMocmVzdWx0cyk7XG5cdCAgICB9KTtcblx0ICB9LFxuXHQgIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcblx0ICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKXtcblx0ICAgIHZhciBDID0gZ2V0Q29uc3RydWN0b3IodGhpcyk7XG5cdCAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24ocmVzLCByZWope1xuXHQgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uKHByb21pc2Upe1xuXHQgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKHJlcywgcmVqKTtcblx0ICAgICAgfSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdH0pO1xuXG4vKioqLyB9LFxuLyogNjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQsIENvbnN0cnVjdG9yLCBuYW1lKXtcblx0ICBpZighKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKXRocm93IFR5cGVFcnJvcihuYW1lICsgXCI6IHVzZSB0aGUgJ25ldycgb3BlcmF0b3IhXCIpO1xuXHQgIHJldHVybiBpdDtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDcwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgY3R4ICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgY2FsbCAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKVxuXHQgICwgaXNBcnJheUl0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKVxuXHQgICwgYW5PYmplY3QgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKVxuXHQgICwgdG9MZW5ndGggICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KVxuXHQgICwgZ2V0SXRlckZuICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQpe1xuXHQgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oaXRlcmFibGUpXG5cdCAgICAsIGYgICAgICA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKVxuXHQgICAgLCBpbmRleCAgPSAwXG5cdCAgICAsIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3I7XG5cdCAgaWYodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKXRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuXHQgIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuXHQgIGlmKGlzQXJyYXlJdGVyKGl0ZXJGbikpZm9yKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKXtcblx0ICAgIGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcblx0ICB9IGVsc2UgZm9yKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7ICl7XG5cdCAgICBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG5cdC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cdHZhciBnZXREZXNjICA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpLmdldERlc2Ncblx0ICAsIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cdHZhciBjaGVjayA9IGZ1bmN0aW9uKE8sIHByb3RvKXtcblx0ICBhbk9iamVjdChPKTtcblx0ICBpZighaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKXRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcblx0fTtcblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXHQgICAgZnVuY3Rpb24odGVzdCwgYnVnZ3ksIHNldCl7XG5cdCAgICAgIHRyeSB7XG5cdCAgICAgICAgc2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNykoRnVuY3Rpb24uY2FsbCwgZ2V0RGVzYyhPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcblx0ICAgICAgICBzZXQodGVzdCwgW10pO1xuXHQgICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuXHQgICAgICB9IGNhdGNoKGUpeyBidWdneSA9IHRydWU7IH1cblx0ICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKXtcblx0ICAgICAgICBjaGVjayhPLCBwcm90byk7XG5cdCAgICAgICAgaWYoYnVnZ3kpTy5fX3Byb3RvX18gPSBwcm90bztcblx0ICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG5cdCAgICAgICAgcmV0dXJuIE87XG5cdCAgICAgIH07XG5cdCAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuXHQgIGNoZWNrOiBjaGVja1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpe1xuXHQgIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyICQgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KVxuXHQgICwgU1BFQ0lFUyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApKCdzcGVjaWVzJyk7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQyl7XG5cdCAgaWYoX193ZWJwYWNrX3JlcXVpcmVfXygxNykgJiYgIShTUEVDSUVTIGluIEMpKSQuc2V0RGVzYyhDLCBTUEVDSUVTLCB7XG5cdCAgICBjb25maWd1cmFibGU6IHRydWUsXG5cdCAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiB0aGlzOyB9XG5cdCAgfSk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGdsb2JhbCAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpXHJcblx0ICAsIG1hY3JvdGFzayA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpLnNldFxyXG5cdCAgLCBPYnNlcnZlciAgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlclxyXG5cdCAgLCBwcm9jZXNzICAgPSBnbG9iYWwucHJvY2Vzc1xyXG5cdCAgLCBpc05vZGUgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KShwcm9jZXNzKSA9PSAncHJvY2VzcydcclxuXHQgICwgaGVhZCwgbGFzdCwgbm90aWZ5O1xyXG5cclxuXHR2YXIgZmx1c2ggPSBmdW5jdGlvbigpe1xyXG5cdCAgdmFyIHBhcmVudCwgZG9tYWluO1xyXG5cdCAgaWYoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpe1xyXG5cdCAgICBwcm9jZXNzLmRvbWFpbiA9IG51bGw7XHJcblx0ICAgIHBhcmVudC5leGl0KCk7XHJcblx0ICB9XHJcblx0ICB3aGlsZShoZWFkKXtcclxuXHQgICAgZG9tYWluID0gaGVhZC5kb21haW47XHJcblx0ICAgIGlmKGRvbWFpbilkb21haW4uZW50ZXIoKTtcclxuXHQgICAgaGVhZC5mbi5jYWxsKCk7IC8vIDwtIGN1cnJlbnRseSB3ZSB1c2UgaXQgb25seSBmb3IgUHJvbWlzZSAtIHRyeSAvIGNhdGNoIG5vdCByZXF1aXJlZFxyXG5cdCAgICBpZihkb21haW4pZG9tYWluLmV4aXQoKTtcclxuXHQgICAgaGVhZCA9IGhlYWQubmV4dDtcclxuXHQgIH0gbGFzdCA9IHVuZGVmaW5lZDtcclxuXHQgIGlmKHBhcmVudClwYXJlbnQuZW50ZXIoKTtcclxuXHR9XHJcblxyXG5cdC8vIE5vZGUuanNcclxuXHRpZihpc05vZGUpe1xyXG5cdCAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcclxuXHQgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XHJcblx0ICB9O1xyXG5cdC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlclxyXG5cdH0gZWxzZSBpZihPYnNlcnZlcil7XHJcblx0ICB2YXIgdG9nZ2xlID0gMVxyXG5cdCAgICAsIG5vZGUgICA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcclxuXHQgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZX0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xyXG5cdCAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcclxuXHQgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gLXRvZ2dsZTtcclxuXHQgIH07XHJcblx0Ly8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcclxuXHQvLyAtIHNldEltbWVkaWF0ZVxyXG5cdC8vIC0gTWVzc2FnZUNoYW5uZWxcclxuXHQvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXHJcblx0Ly8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcclxuXHQvLyAtIHNldFRpbWVvdXRcclxuXHR9IGVsc2Uge1xyXG5cdCAgbm90aWZ5ID0gZnVuY3Rpb24oKXtcclxuXHQgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxyXG5cdCAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcclxuXHQgIH07XHJcblx0fVxyXG5cclxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFzYXAoZm4pe1xyXG5cdCAgdmFyIHRhc2sgPSB7Zm46IGZuLCBuZXh0OiB1bmRlZmluZWQsIGRvbWFpbjogaXNOb2RlICYmIHByb2Nlc3MuZG9tYWlufTtcclxuXHQgIGlmKGxhc3QpbGFzdC5uZXh0ID0gdGFzaztcclxuXHQgIGlmKCFoZWFkKXtcclxuXHQgICAgaGVhZCA9IHRhc2s7XHJcblx0ICAgIG5vdGlmeSgpO1xyXG5cdCAgfSBsYXN0ID0gdGFzaztcclxuXHR9O1xuXG4vKioqLyB9LFxuLyogNzUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0dmFyIGN0eCAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpXG5cdCAgLCBpbnZva2UgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KVxuXHQgICwgaHRtbCAgICAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nylcblx0ICAsIGNlbCAgICAgICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpXG5cdCAgLCBnbG9iYWwgICAgICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVxuXHQgICwgcHJvY2VzcyAgICAgICAgICAgID0gZ2xvYmFsLnByb2Nlc3Ncblx0ICAsIHNldFRhc2sgICAgICAgICAgICA9IGdsb2JhbC5zZXRJbW1lZGlhdGVcblx0ICAsIGNsZWFyVGFzayAgICAgICAgICA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZVxuXHQgICwgTWVzc2FnZUNoYW5uZWwgICAgID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsXG5cdCAgLCBjb3VudGVyICAgICAgICAgICAgPSAwXG5cdCAgLCBxdWV1ZSAgICAgICAgICAgICAgPSB7fVxuXHQgICwgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcblx0ICAsIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXHR2YXIgcnVuID0gZnVuY3Rpb24oKXtcblx0ICB2YXIgaWQgPSArdGhpcztcblx0ICBpZihxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpe1xuXHQgICAgdmFyIGZuID0gcXVldWVbaWRdO1xuXHQgICAgZGVsZXRlIHF1ZXVlW2lkXTtcblx0ICAgIGZuKCk7XG5cdCAgfVxuXHR9O1xuXHR2YXIgbGlzdG5lciA9IGZ1bmN0aW9uKGV2ZW50KXtcblx0ICBydW4uY2FsbChldmVudC5kYXRhKTtcblx0fTtcblx0Ly8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuXHRpZighc2V0VGFzayB8fCAhY2xlYXJUYXNrKXtcblx0ICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKXtcblx0ICAgIHZhciBhcmdzID0gW10sIGkgPSAxO1xuXHQgICAgd2hpbGUoYXJndW1lbnRzLmxlbmd0aCA+IGkpYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcblx0ICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbigpe1xuXHQgICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG5cdCAgICB9O1xuXHQgICAgZGVmZXIoY291bnRlcik7XG5cdCAgICByZXR1cm4gY291bnRlcjtcblx0ICB9O1xuXHQgIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKXtcblx0ICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG5cdCAgfTtcblx0ICAvLyBOb2RlLmpzIDAuOC1cblx0ICBpZihfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KShwcm9jZXNzKSA9PSAncHJvY2Vzcycpe1xuXHQgICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG5cdCAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcblx0ICAgIH07XG5cdCAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuXHQgIH0gZWxzZSBpZihNZXNzYWdlQ2hhbm5lbCl7XG5cdCAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsO1xuXHQgICAgcG9ydCAgICA9IGNoYW5uZWwucG9ydDI7XG5cdCAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RuZXI7XG5cdCAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcblx0ICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcblx0ICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuXHQgIH0gZWxzZSBpZihnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdCl7XG5cdCAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcblx0ICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG5cdCAgICB9O1xuXHQgICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0bmVyLCBmYWxzZSk7XG5cdCAgLy8gSUU4LVxuXHQgIH0gZWxzZSBpZihPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSl7XG5cdCAgICBkZWZlciA9IGZ1bmN0aW9uKGlkKXtcblx0ICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24oKXtcblx0ICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuXHQgICAgICAgIHJ1bi5jYWxsKGlkKTtcblx0ICAgICAgfTtcblx0ICAgIH07XG5cdCAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcblx0ICB9IGVsc2Uge1xuXHQgICAgZGVmZXIgPSBmdW5jdGlvbihpZCl7XG5cdCAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcblx0ICAgIH07XG5cdCAgfVxuXHR9XG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIHNldDogICBzZXRUYXNrLFxuXHQgIGNsZWFyOiBjbGVhclRhc2tcblx0fTtcblxuLyoqKi8gfSxcbi8qIDc2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihmbiwgYXJncywgdGhhdCl7XG5cdCAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuXHQgIHN3aXRjaChhcmdzLmxlbmd0aCl7XG5cdCAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcblx0ICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcblx0ICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcblx0ICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblx0ICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcblx0ICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcblx0ICB9IHJldHVybiAgICAgICAgICAgICAgZm4uYXBwbHkodGhhdCwgYXJncyk7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA3NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKS5kb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbi8qKiovIH0sXG4vKiA3OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSkuZG9jdW1lbnRcblx0ICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcblx0ICAsIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcblx0ICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciAkcmVkZWYgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbih0YXJnZXQsIHNyYyl7XG5cdCAgZm9yKHZhciBrZXkgaW4gc3JjKSRyZWRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuXHQgIHJldHVybiB0YXJnZXQ7XG5cdH07XG5cbi8qKiovIH0sXG4vKiA4MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKSwgX19lc01vZHVsZTogdHJ1ZSB9O1xuXG4vKioqLyB9LFxuLyogODEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdF9fd2VicGFja19yZXF1aXJlX18oODIpO1xuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpLk9iamVjdC5rZXlzO1xuXG4vKioqLyB9LFxuLyogODIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxuXHR2YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKSgna2V5cycsIGZ1bmN0aW9uKCRrZXlzKXtcblx0ICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCl7XG5cdCAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcblx0ICB9O1xuXHR9KTtcblxuLyoqKi8gfSxcbi8qIDgzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihLRVksIGV4ZWMpe1xuXHQgIHZhciAkZGVmID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMClcblx0ICAgICwgZm4gICA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV1cblx0ICAgICwgZXhwICA9IHt9O1xuXHQgIGV4cFtLRVldID0gZXhlYyhmbik7XG5cdCAgJGRlZigkZGVmLlMgKyAkZGVmLkYgKiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KShmdW5jdGlvbigpeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogODQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogX193ZWJwYWNrX3JlcXVpcmVfXyg4NSksIF9fZXNNb2R1bGU6IHRydWUgfTtcblxuLyoqKi8gfSxcbi8qIDg1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cdF9fd2VicGFja19yZXF1aXJlX18oODYpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KTtcblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKS5TZXQ7XG5cbi8qKiovIH0sXG4vKiA4NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgc3Ryb25nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XG5cblx0Ly8gMjMuMiBTZXQgT2JqZWN0c1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDg4KSgnU2V0JywgZnVuY3Rpb24oZ2V0KXtcblx0ICByZXR1cm4gZnVuY3Rpb24gU2V0KCl7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzWzBdKTsgfTtcblx0fSwge1xuXHQgIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuXHQgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKXtcblx0ICAgIHJldHVybiBzdHJvbmcuZGVmKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcblx0ICB9XG5cdH0sIHN0cm9uZyk7XG5cbi8qKiovIH0sXG4vKiA4NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHR2YXIgJCAgICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsIGhpZGUgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cdCAgLCBjdHggICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KVxuXHQgICwgc3BlY2llcyAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mylcblx0ICAsIHN0cmljdE5ldyAgICA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpXG5cdCAgLCBkZWZpbmVkICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpXG5cdCAgLCBmb3JPZiAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKVxuXHQgICwgc3RlcCAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSlcblx0ICAsIElEICAgICAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpKCdpZCcpXG5cdCAgLCAkaGFzICAgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KVxuXHQgICwgaXNPYmplY3QgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMilcblx0ICAsIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgaXNPYmplY3Rcblx0ICAsIFNVUFBPUlRfREVTQyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpXG5cdCAgLCBTSVpFICAgICAgICAgPSBTVVBQT1JUX0RFU0MgPyAnX3MnIDogJ3NpemUnXG5cdCAgLCBpZCAgICAgICAgICAgPSAwO1xuXG5cdHZhciBmYXN0S2V5ID0gZnVuY3Rpb24oaXQsIGNyZWF0ZSl7XG5cdCAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuXHQgIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcblx0ICBpZighJGhhcyhpdCwgSUQpKXtcblx0ICAgIC8vIGNhbid0IHNldCBpZCB0byBmcm96ZW4gb2JqZWN0XG5cdCAgICBpZighaXNFeHRlbnNpYmxlKGl0KSlyZXR1cm4gJ0YnO1xuXHQgICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgaWRcblx0ICAgIGlmKCFjcmVhdGUpcmV0dXJuICdFJztcblx0ICAgIC8vIGFkZCBtaXNzaW5nIG9iamVjdCBpZFxuXHQgICAgaGlkZShpdCwgSUQsICsraWQpO1xuXHQgIC8vIHJldHVybiBvYmplY3QgaWQgd2l0aCBwcmVmaXhcblx0ICB9IHJldHVybiAnTycgKyBpdFtJRF07XG5cdH07XG5cblx0dmFyIGdldEVudHJ5ID0gZnVuY3Rpb24odGhhdCwga2V5KXtcblx0ICAvLyBmYXN0IGNhc2Vcblx0ICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSksIGVudHJ5O1xuXHQgIGlmKGluZGV4ICE9PSAnRicpcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuXHQgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuXHQgIGZvcihlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pe1xuXHQgICAgaWYoZW50cnkuayA9PSBrZXkpcmV0dXJuIGVudHJ5O1xuXHQgIH1cblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0ICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24od3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUil7XG5cdCAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24odGhhdCwgaXRlcmFibGUpe1xuXHQgICAgICBzdHJpY3ROZXcodGhhdCwgQywgTkFNRSk7XG5cdCAgICAgIHRoYXQuX2kgPSAkLmNyZWF0ZShudWxsKTsgLy8gaW5kZXhcblx0ICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgICAvLyBmaXJzdCBlbnRyeVxuXHQgICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAgIC8vIGxhc3QgZW50cnlcblx0ICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgICAvLyBzaXplXG5cdCAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG5cdCAgICB9KTtcblx0ICAgIF9fd2VicGFja19yZXF1aXJlX18oNzkpKEMucHJvdG90eXBlLCB7XG5cdCAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuXHQgICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcblx0ICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCl7XG5cdCAgICAgICAgZm9yKHZhciB0aGF0ID0gdGhpcywgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubil7XG5cdCAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcblx0ICAgICAgICAgIGlmKGVudHJ5LnApZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcblx0ICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB0aGF0W1NJWkVdID0gMDtcblx0ICAgICAgfSxcblx0ICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuXHQgICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcblx0ICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uKGtleSl7XG5cdCAgICAgICAgdmFyIHRoYXQgID0gdGhpc1xuXHQgICAgICAgICAgLCBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG5cdCAgICAgICAgaWYoZW50cnkpe1xuXHQgICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uXG5cdCAgICAgICAgICAgICwgcHJldiA9IGVudHJ5LnA7XG5cdCAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcblx0ICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuXHQgICAgICAgICAgaWYocHJldilwcmV2Lm4gPSBuZXh0O1xuXHQgICAgICAgICAgaWYobmV4dCluZXh0LnAgPSBwcmV2O1xuXHQgICAgICAgICAgaWYodGhhdC5fZiA9PSBlbnRyeSl0aGF0Ll9mID0gbmV4dDtcblx0ICAgICAgICAgIGlmKHRoYXQuX2wgPT0gZW50cnkpdGhhdC5fbCA9IHByZXY7XG5cdCAgICAgICAgICB0aGF0W1NJWkVdLS07XG5cdCAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcblx0ICAgICAgfSxcblx0ICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG5cdCAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuXHQgICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyosIHRoYXQgPSB1bmRlZmluZWQgKi8pe1xuXHQgICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSwgMylcblx0ICAgICAgICAgICwgZW50cnk7XG5cdCAgICAgICAgd2hpbGUoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKXtcblx0ICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG5cdCAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcblx0ICAgICAgICAgIHdoaWxlKGVudHJ5ICYmIGVudHJ5LnIpZW50cnkgPSBlbnRyeS5wO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuXHQgICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcblx0ICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KXtcblx0ICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIGlmKFNVUFBPUlRfREVTQykkLnNldERlc2MoQy5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG5cdCAgICAgICAgcmV0dXJuIGRlZmluZWQodGhpc1tTSVpFXSk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIEM7XG5cdCAgfSxcblx0ICBkZWY6IGZ1bmN0aW9uKHRoYXQsIGtleSwgdmFsdWUpe1xuXHQgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KVxuXHQgICAgICAsIHByZXYsIGluZGV4O1xuXHQgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG5cdCAgICBpZihlbnRyeSl7XG5cdCAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcblx0ICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcblx0ICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcblx0ICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG5cdCAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG5cdCAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG5cdCAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcblx0ICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuXHQgICAgICB9O1xuXHQgICAgICBpZighdGhhdC5fZil0aGF0Ll9mID0gZW50cnk7XG5cdCAgICAgIGlmKHByZXYpcHJldi5uID0gZW50cnk7XG5cdCAgICAgIHRoYXRbU0laRV0rKztcblx0ICAgICAgLy8gYWRkIHRvIGluZGV4XG5cdCAgICAgIGlmKGluZGV4ICE9PSAnRicpdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcblx0ICAgIH0gcmV0dXJuIHRoYXQ7XG5cdCAgfSxcblx0ICBnZXRFbnRyeTogZ2V0RW50cnksXG5cdCAgc2V0U3Ryb25nOiBmdW5jdGlvbihDLCBOQU1FLCBJU19NQVApe1xuXHQgICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG5cdCAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG5cdCAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpKEMsIE5BTUUsIGZ1bmN0aW9uKGl0ZXJhdGVkLCBraW5kKXtcblx0ICAgICAgdGhpcy5fdCA9IGl0ZXJhdGVkOyAgLy8gdGFyZ2V0XG5cdCAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgIC8vIGtpbmRcblx0ICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgLy8gcHJldmlvdXNcblx0ICAgIH0sIGZ1bmN0aW9uKCl7XG5cdCAgICAgIHZhciB0aGF0ICA9IHRoaXNcblx0ICAgICAgICAsIGtpbmQgID0gdGhhdC5fa1xuXHQgICAgICAgICwgZW50cnkgPSB0aGF0Ll9sO1xuXHQgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcblx0ICAgICAgd2hpbGUoZW50cnkgJiYgZW50cnkucillbnRyeSA9IGVudHJ5LnA7XG5cdCAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG5cdCAgICAgIGlmKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpe1xuXHQgICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG5cdCAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcblx0ICAgICAgICByZXR1cm4gc3RlcCgxKTtcblx0ICAgICAgfVxuXHQgICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG5cdCAgICAgIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG5cdCAgICAgIGlmKGtpbmQgPT0gJ3ZhbHVlcycpcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG5cdCAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG5cdCAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJyAsICFJU19NQVAsIHRydWUpO1xuXG5cdCAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuXHQgICAgc3BlY2llcyhDKTtcblx0ICAgIHNwZWNpZXMoX193ZWJwYWNrX3JlcXVpcmVfXygxMilbTkFNRV0pOyAvLyBmb3Igd3JhcHBlclxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDg4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdHZhciAkICAgICAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSlcblx0ICAsICRkZWYgICAgICAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKVxuXHQgICwgaGlkZSAgICAgICA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpXG5cdCAgLCBmb3JPZiAgICAgID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MClcblx0ICAsIHN0cmljdE5ldyAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKXtcblx0ICB2YXIgQmFzZSAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKVtOQU1FXVxuXHQgICAgLCBDICAgICA9IEJhc2Vcblx0ICAgICwgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnXG5cdCAgICAsIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZVxuXHQgICAgLCBPICAgICA9IHt9O1xuXHQgIGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KSB8fCB0eXBlb2YgQyAhPSAnZnVuY3Rpb24nXG5cdCAgICB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXygxOCkoZnVuY3Rpb24oKXsgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpOyB9KSlcblx0ICApe1xuXHQgICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3Jcblx0ICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG5cdCAgICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KShDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uKHRhcmdldCwgaXRlcmFibGUpe1xuXHQgICAgICBzdHJpY3ROZXcodGFyZ2V0LCBDLCBOQU1FKTtcblx0ICAgICAgdGFyZ2V0Ll9jID0gbmV3IEJhc2U7XG5cdCAgICAgIGlmKGl0ZXJhYmxlICE9IHVuZGVmaW5lZClmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0YXJnZXRbQURERVJdLCB0YXJnZXQpO1xuXHQgICAgfSk7XG5cdCAgICAkLmVhY2guY2FsbCgnYWRkLGNsZWFyLGRlbGV0ZSxmb3JFYWNoLGdldCxoYXMsc2V0LGtleXMsdmFsdWVzLGVudHJpZXMnLnNwbGl0KCcsJyksZnVuY3Rpb24oS0VZKXtcblx0ICAgICAgdmFyIGNoYWluID0gS0VZID09ICdhZGQnIHx8IEtFWSA9PSAnc2V0Jztcblx0ICAgICAgaWYoS0VZIGluIHByb3RvICYmICEoSVNfV0VBSyAmJiBLRVkgPT0gJ2NsZWFyJykpaGlkZShDLnByb3RvdHlwZSwgS0VZLCBmdW5jdGlvbihhLCBiKXtcblx0ICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY1tLRVldKGEgPT09IDAgPyAwIDogYSwgYik7XG5cdCAgICAgICAgcmV0dXJuIGNoYWluID8gdGhpcyA6IHJlc3VsdDtcblx0ICAgICAgfSk7XG5cdCAgICB9KTtcblx0ICAgIGlmKCdzaXplJyBpbiBwcm90bykkLnNldERlc2MoQy5wcm90b3R5cGUsICdzaXplJywge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uKCl7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuX2Muc2l6ZTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNSkoQywgTkFNRSk7XG5cblx0ICBPW05BTUVdID0gQztcblx0ICAkZGVmKCRkZWYuRyArICRkZWYuVyArICRkZWYuRiwgTyk7XG5cblx0ICBpZighSVNfV0VBSyljb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cblx0ICByZXR1cm4gQztcblx0fTtcblxuLyoqKi8gfSxcbi8qIDg5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG5cdHZhciAkZGVmICA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdCRkZWYoJGRlZi5QLCAnU2V0Jywge3RvSlNPTjogX193ZWJwYWNrX3JlcXVpcmVfXyg5MCkoJ1NldCcpfSk7XG5cbi8qKiovIH0sXG4vKiA5MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxuXHR2YXIgZm9yT2YgICA9IF9fd2VicGFja19yZXF1aXJlX18oNzApXG5cdCAgLCBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkFNRSl7XG5cdCAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpe1xuXHQgICAgaWYoY2xhc3NvZih0aGlzKSAhPSBOQU1FKXRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG5cdCAgICB2YXIgYXJyID0gW107XG5cdCAgICBmb3JPZih0aGlzLCBmYWxzZSwgYXJyLnB1c2gsIGFycik7XG5cdCAgICByZXR1cm4gYXJyO1xuXHQgIH07XG5cdH07XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjsiLCJtb2R1bGUuZXhwb3J0cyA9IERHOyIsIm1vZHVsZS5leHBvcnRzID0gZ3JvazsiLCJtb2R1bGUuZXhwb3J0cyA9IHJ4anM7IiwibW9kdWxlLmV4cG9ydHMgPSB1aTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwidmFyIHNjcmlwdFVybDtcbmlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLmcuaW1wb3J0U2NyaXB0cykgc2NyaXB0VXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmxvY2F0aW9uICsgXCJcIjtcbnZhciBkb2N1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5kb2N1bWVudDtcbmlmICghc2NyaXB0VXJsICYmIGRvY3VtZW50KSB7XG5cdGlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KVxuXHRcdHNjcmlwdFVybCA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjXG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkgc2NyaXB0VXJsID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdLnNyY1xuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmIgPSBkb2N1bWVudC5iYXNlVVJJIHx8IHNlbGYubG9jYXRpb24uaHJlZjtcblxuLy8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3Ncbi8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuLy8gW3Jlc29sdmUsIHJlamVjdCwgUHJvbWlzZV0gPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHRcInRlc3RcIjogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL3BhY2thZ2UtdGVzdC50c1wiKTtcbiIsIiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==