genassist-chat-react 1.0.25 → 1.0.26

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.
@@ -1054,7 +1054,7 @@ export var GenAgentChat = function (_a) {
1054
1054
  var base = {
1055
1055
  position: 'fixed',
1056
1056
  borderRadius: '32px',
1057
- zIndex: 999,
1057
+ zIndex: 1004,
1058
1058
  };
1059
1059
  switch (position) {
1060
1060
  case 'bottom-right':
@@ -1249,4 +1249,4 @@ export var GenAgentChat = function (_a) {
1249
1249
  }
1250
1250
  return renderWithReCaptcha(renderChatComponent());
1251
1251
  };
1252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLFFBQVEsTUFBTSx5QkFBeUIsQ0FBQztBQUUvQywwQ0FBMEM7QUFFMUMsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQiwwQkFBMEIsR0FDM0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JGLE1B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QUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzLCBTY2hlZHVsZUl0ZW0sIEF0dGFjaG1lbnQsIEF0dGFjaG1lbnRXaXRoRmlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiwgQWxlcnRDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQ2hhdEJ1YmJsZSB9IGZyb20gJy4vQ2hhdEJ1YmJsZSc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yIH0gZnJvbSAnLi9MYW5ndWFnZVNlbGVjdG9yJztcbmltcG9ydCBjaGF0TG9nbyBmcm9tICcuLi9hc3NldHMvY2hhdC1sb2dvLnBuZyc7XG5cbi8vIFR5cGUgZm9yIGF0dGFjaG1lbnQgd2l0aCBmaWxlIHJlZmVyZW5jZVxuXG5pbXBvcnQge1xuICByZXNvbHZlTGFuZ3VhZ2UsXG4gIG1lcmdlVHJhbnNsYXRpb25zLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25BcnJheSxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgR29vZ2xlUmVDYXB0Y2hhLCBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuXG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgdXNlV3MgPSB0cnVlLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgZGVzY3JpcHRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBhZ2VudE5hbWUsXG4gIGxvZ29VcmwsXG4gIG1vZGUgPSAnZW1iZWRkZWQnLFxuICBmbG9hdGluZ0NvbmZpZyA9IHt9LFxuICBsYW5ndWFnZSxcbiAgdHJhbnNsYXRpb25zOiBjdXN0b21UcmFuc2xhdGlvbnMsXG4gIHJlQ2FwdGNoYUtleSxcbiAgd2lkZ2V0ID0gZmFsc2UsXG4gIHVzZUF1ZGlvID0gZmFsc2UsXG4gIHVzZUZpbGUgPSBmYWxzZSxcbiAgbm9Db2xvckFuaW1hdGlvbiA9IGZhbHNlLFxuICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ID0gdHJ1ZSxcbiAgYWxsb3dlZEV4dGVuc2lvbnMgPSBbXSxcbiAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsLFxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIC8vIExhbmd1YWdlIHNlbGVjdGlvbiBzdGF0ZSAod2l0aCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UpXG4gIGNvbnN0IFtzZWxlY3RlZExhbmd1YWdlLCBzZXRTZWxlY3RlZExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIGNvbnN0IHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScpIDogbnVsbDtcbiAgICBpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuICAgIHJldHVybiByZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYW5ndWFnZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbiBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFsYW5ndWFnZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScsIHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkTGFuZ3VhZ2UsIGxhbmd1YWdlXSk7XG5cbiAgLy8gU3RhdGUgZm9yIHRyYWNraW5nIHNlbGVjdGVkIEZBUSBxdWVyeVxuICBjb25zdCBbc2VsZWN0ZWRGYXFRdWVyeSwgc2V0U2VsZWN0ZWRGYXFRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBSZXNvbHZlIGxhbmd1YWdlOiBwcm9wID4gc2VsZWN0ZWQgPiBicm93c2VyID4gJ2VuJ1xuICBjb25zdCByZXNvbHZlZExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UgfHwgcmVzb2x2ZUxhbmd1YWdlKCkgfHwgJ2VuJztcbiAgfSwgW2xhbmd1YWdlLCBzZWxlY3RlZExhbmd1YWdlXSk7XG5cbiAgLy8gTWVyZ2UgbGFuZ3VhZ2UgYW5kIEZBUSBxdWVyeSBpbnRvIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFkYXRhV2l0aExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihtZXRhZGF0YSB8fCB7fSksXG4gICAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICAgIC4uLihzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHt9KSxcbiAgICB9O1xuICB9LCBbbWV0YWRhdGEsIHJlc29sdmVkTGFuZ3VhZ2UsIHNlbGVjdGVkRmFxUXVlcnldKTtcblxuICAvLyBHZXQgdHJhbnNsYXRpb25zIGJhc2VkIG9uIHJlc29sdmVkIGxhbmd1YWdlLCB0aGVuIG1lcmdlIHdpdGggY3VzdG9tIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBGaXJzdCBnZXQgYmFzZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBsYW5ndWFnZVxuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICAvLyBUaGVuIG1lcmdlIHdpdGggYW55IGN1c3RvbSB0cmFuc2xhdGlvbnMgcHJvdmlkZWRcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIFRyYW5zbGF0aW9uIGhlbHBlciBmdW5jdGlvblxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gR2V0IHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgb3IgdXNlIHByb3ZpZGVkL2RlZmF1bHRcbiAgLy8gTWFrZSBpdCByZWFjdGl2ZSB0byBsYW5ndWFnZSBjaGFuZ2VzXG4gIGNvbnN0IGlucHV0UGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBwbGFjZWhvbGRlciBwcm9wIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQsIHVzZSBpdFxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSB0cmFuc2xhdGlvbiB3aGljaCB3aWxsIHVwZGF0ZSB3aXRoIGxhbmd1YWdlIGNoYW5nZXNcbiAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgdCgnaW5wdXQucGxhY2Vob2xkZXInLCAnQXNrIGEgcXVlc3Rpb24nKTtcbiAgfSwgW3BsYWNlaG9sZGVyLCB0cmFuc2xhdGlvbnNdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2hvd1Jlc2V0Q29uZmlybSwgc2V0U2hvd1Jlc2V0Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TWVudSwgc2V0U2hvd01lbnVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0xhbmd1YWdlRHJvcGRvd24sIHNldFNob3dMYW5ndWFnZURyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRXaXRoRmlsZVtdPihbXSk7XG4gIGNvbnN0IFt1cGxvYWRpbmdGaWxlcywgc2V0VXBsb2FkaW5nRmlsZXNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IFtmaWxlRXJyb3JUb2FzdCwgc2V0RmlsZUVycm9yVG9hc3RdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGZpbGVFcnJvclRvYXN0VGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0ZXh0QXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGVhZGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hlYWRlckhlaWdodCwgc2V0SGVhZGVySGVpZ2h0XSA9IHVzZVN0YXRlKDU2KTtcbiAgY29uc3QgW3Nob3dCYWNrbGlnaHQsIHNldFNob3dCYWNrbGlnaHRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGdWxsc2NyZWVuVG9nZ2xlZCwgc2V0SXNGdWxsc2NyZWVuVG9nZ2xlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gZGVmYXVsdCB0aGlua2luZyBtZXNzYWdlcyBpZiBub25lIHByb3ZpZGVkIGJ5IHdvcmtmbG93XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFRyYW5zbGF0aW9uQXJyYXkoJ3RoaW5raW5nLm1lc3NhZ2VzJywgdHJhbnNsYXRpb25zLCBbXG4gICAgICBcIlRoaW5raW5n4oCmXCIsXG4gICAgICBcIkFuYWx5emluZyB5b3VyIHF1ZXN0aW9u4oCmXCIsXG4gICAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICAgIFwiUHVsbGluZyByZWxldmFudCBpbmZv4oCmXCIsXG4gICAgICBcIkRyYWZ0aW5nIHRoZSBhbnN3ZXLigKZcIixcbiAgICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgICAgXCJUeWluZyBpdCB0b2dldGhlcuKAplwiLFxuICAgICAgXCJBbG1vc3QgdGhlcmXigKZcIixcbiAgICBdKSxcbiAgICBbdHJhbnNsYXRpb25zXVxuICApO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgIG9uRXJyb3IsXG4gICAgb25UYWtlb3ZlcixcbiAgICBvbkZpbmFsaXplLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaGFzQW5jaG9yZWRIaXN0b3J5ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgY2hhdENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHJlQ2FwdGNoYVRva2VuUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgaXNVc2VyQXRCb3R0b21SZWYgPSB1c2VSZWYodHJ1ZSk7XG5cbiAgY29uc3QgYW5jaG9ySGlzdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8ICFtZXNzYWdlcy5sZW5ndGggfHwgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAoZWwuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47IC8vIGhpZGRlbiwgd2FpdCBmb3IgdmlzaWJpbGl0eS9zaXplXG4gICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0O1xuICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IChiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSAnc21vb3RoJywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVsKSByZXR1cm47XG4gICAgXG4gICAgLy8gT25seSBzY3JvbGwgaWYgdXNlciBpcyBhdCBib3R0b20gb3IgaWYgZm9yY2VkIChlLmcuLCBmb3IgYWdlbnQgdHlwaW5nKVxuICAgIGlmICghZm9yY2UgJiYgIWlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZG9TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsVG8oeyB0b3A6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGJlaGF2aW9yIH0pO1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgICBpZiAoYmVoYXZpb3IgPT09ICdhdXRvJykge1xuICAgICAgZG9TY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvU2Nyb2xsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzVXNlck1lc3NhZ2VzID0gbWVzc2FnZXMuc29tZShtZXNzYWdlID0+IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudCA9IG5ldyBBdWRpb1NlcnZpY2UoeyBiYXNlVXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXldKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIC8vIEZvcmNlIHNjcm9sbCB3aGVuIGFnZW50IGlzIHR5cGluZ1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIEVuc3VyZSBjaGF0IGlzIGFsd2F5cyBvcGVuIHdoZW4gbW9kZSBpcyBmdWxsc2NyZWVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiAhaXNGbG9hdGluZ09wZW4pIHtcbiAgICAgIHNldElzRmxvYXRpbmdPcGVuKHRydWUpO1xuICAgIH1cbiAgfSwgW21vZGUsIGlzRmxvYXRpbmdPcGVuXSk7XG5cbiAgLy8gU2Nyb2xsIHRvIGJvdHRvbSB3aGVuIGNoYXQgaXMgcmVvcGVuZWQgaW4gZmxvYXRpbmcgbW9kZVxuICBjb25zdCBwcmV2SXNGbG9hdGluZ09wZW5SZWYgPSB1c2VSZWYoaXNGbG9hdGluZ09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE9ubHkgdHJpZ2dlciB3aGVuIGNoYXQgdHJhbnNpdGlvbnMgZnJvbSBjbG9zZWQgdG8gb3BlblxuICAgIGlmICgobW9kZSA9PT0gJ2Zsb2F0aW5nJyB8fCBtb2RlID09PSAnZnVsbHNjcmVlbicpICYmIGlzRmxvYXRpbmdPcGVuICYmICFwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXNldCB0aGUgYW5jaG9yIGZsYWcgc28gaXQgY2FuIHNjcm9sbCB0byBib3R0b21cbiAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgLy8gV2FpdCBmb3IgY29udGFpbmVyIHRvIGJlIHZpc2libGUgYW5kIHRoZW4gc2Nyb2xsXG4gICAgICBjb25zdCBzY3JvbGxXaGVuVmlzaWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBjb250YWluZXIgaXMgdmlzaWJsZVxuICAgICAgICBpZiAoY29udGFpbmVyLmNsaWVudEhlaWdodCA9PT0gMCkge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBTY3JvbGwgdG8gYm90dG9tXG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gVXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byB3YWl0IGZvciByZW5kZXJcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcHJldklzRmxvYXRpbmdPcGVuUmVmLmN1cnJlbnQgPSBpc0Zsb2F0aW5nT3BlbjtcbiAgfSwgW2lzRmxvYXRpbmdPcGVuLCBtb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIC8vIE9ic2VydmUgc2l6ZS92aXNpYmlsaXR5IGNoYW5nZXMgdG8gYW5jaG9yIGNoYXQgdmlldy5cbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCkge1xuICAgICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG5cbiAgICBhbmNob3JIaXN0b3J5KCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBpc0F0Qm90dG9tID0gKHRocmVzaG9sZDogbnVtYmVyID0gMTAwKTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lcjtcbiAgICAgIHJldHVybiBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPD0gdGhyZXNob2xkO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IGlzQXRCb3R0b20oKTtcbiAgICB9O1xuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICBoYW5kbGVTY3JvbGwoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVIZWFkZXJIZWlnaHQgPSAoKSA9PiB7XG4gICAgICBzZXRIZWFkZXJIZWlnaHQoaGVhZGVyUmVmLmN1cnJlbnQ/Lm9mZnNldEhlaWdodCB8fCA1Nik7XG4gICAgfTtcbiAgICB1cGRhdGVIZWFkZXJIZWlnaHQoKTtcbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB1cGRhdGVIZWFkZXJIZWlnaHQoKSk7XG4gICAgaWYgKGhlYWRlclJlZi5jdXJyZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGhlYWRlclJlZi5jdXJyZW50KTtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBTbW9vdGhseSBzaG93L2hpZGUgdGhlIGJhY2tsaWdodCB3aGlsZSB0aGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldFNob3dCYWNrbGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApOyAvLyBhbGxvdyBmYWRlLW91dFxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtpc0FnZW50VHlwaW5nXSk7XG5cbiAgLy8gU2hvdyBcInRoaW5raW5nXCIgcGhyYXNlcyB3aGlsZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKFtdKTtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSYW5kb21seSBzZWxlY3QgYSBwaHJhc2UgZnJvbSB0aGUgbGlzdFxuICAgIGNvbnN0IGxpc3QgPSAodGhpbmtpbmdQaHJhc2VzICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSA/IHRoaW5raW5nUGhyYXNlcyA6IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVM7XG4gICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaXN0Lmxlbmd0aCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRQaHJhc2UgPSBsaXN0W3JhbmRvbUluZGV4XTtcblxuICAgIC8vIFNwbGl0IGJ5IHwgdG8gZ2V0IHBhcnRzLCBvciB1c2UgdGhlIHBocmFzZSBhcyBhIHNpbmdsZSBwYXJ0IGlmIG5vIHwgZm91bmRcbiAgICBjb25zdCBwYXJ0cyA9IHNlbGVjdGVkUGhyYXNlLmluY2x1ZGVzKCd8JykgXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggZmlyc3QgcGFydFxuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKHBhcnRzKTtcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhcnQsIG5vIG5lZWQgdG8gcHJvZ3Jlc3NcbiAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIC8vIFByb2dyZXNzIHRocm91Z2ggcGFydHMgd2l0aCBkZWxheSwgYnV0IHN0b3AgYXQgdGhlIGxhc3Qgb25lXG4gICAgY29uc3Qgcm90RGVsYXkgPSBNYXRoLm1heCgyNTAsIHRoaW5raW5nRGVsYXlNcyB8fCAxMDAwKTtcbiAgICBjb25zdCB0aW1lb3V0SWRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dHMgZm9yIGVhY2ggcGFydCB0cmFuc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleChpKTtcbiAgICAgIH0sIHJvdERlbGF5ICogaSk7XG4gICAgICB0aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGltZW91dElkcy5mb3JFYWNoKGlkID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIH07XG4gIH0sIFtpc0FnZW50VHlwaW5nLCB0aGlua2luZ1BocmFzZXMsIHRoaW5raW5nRGVsYXlNc10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgY29uc3QgdGV4dFRvU2VuZCA9IGlucHV0VmFsdWU7XG4gICAgLy8gTk9URVM6IHdlIGRvbid0IHVwbG9hZCBmaWxlcyBhbnltb3JlLCB3ZSBqdXN0IHNlbmQgdGhlIGNvbnRlbnQgYmxvY2tzXG4gICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuZmlsZSk7XG4gICAgLy8gY29uc3QgZmlsZUF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICAvLyBSZXNldCB0aGUgZmlsZSBpbnB1dCB2YWx1ZSBzbyB0aGUgc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gSW5jbHVkZSBGQVEgcXVlcnkgaW4gbWV0YWRhdGEgaWYgb25lIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkXG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgIGlmIChzZWxlY3RlZEZhcVF1ZXJ5KSB7XG4gICAgICAgIGV4dHJhTWV0YWRhdGEuZmFxX3F1ZXJ5ID0gc2VsZWN0ZWRGYXFRdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9VcGxvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gc2VuZCBtZXNzYWdlIHdpdGggYXR0YWNobWVudHNcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVpY2tBY3Rpb24gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF0ZXh0LnRyaW0oKSkgcmV0dXJuO1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcbiAgICB0cnkge1xuICAgICAgLy8gSW5jbHVkZSBGQVEgcXVlcnkgaW4gbWV0YWRhdGEgaWYgb25lIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkXG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhID0gc2VsZWN0ZWRGYXFRdWVyeSA/IHsgZmFxX3F1ZXJ5OiBzZWxlY3RlZEZhcVF1ZXJ5IH0gOiB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0LCBbXSwgZXh0cmFNZXRhZGF0YSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZSBxdWljayBhY3Rpb24gZXJyb3JzIHRvIGF2b2lkIGludGVycnVwdGluZyB0aGUgZmxvd1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTY2hlZHVsZUNvbmZpcm0gPSBhc3luYyAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4ge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBgU2NoZWR1bGUgY29uZmlybWVkIHdpdGggJHtzY2hlZHVsZS5yZXN0YXVyYW50cy5sZW5ndGh9IHJlc3RhdXJhbnRzYDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2Uoc3VtbWFyeSwgW10sIHsgY29uZmlybVNjaGVkdWxlOiBKU09OLnN0cmluZ2lmeShzY2hlZHVsZSkgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5ld0ZpbGVzID0gQXJyYXkuZnJvbShlLnRhcmdldC5maWxlcyk7XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgYXR0YWNobWVudHMgd2l0aCBmaWxlcyAoYXR0YWNobWVudCByZWZlcmVuY2Ugd2lsbCBiZSBudWxsIGluaXRpYWxseSlcbiAgICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzOiBBdHRhY2htZW50V2l0aEZpbGVbXSA9IG5ld0ZpbGVzLm1hcChmaWxlID0+ICh7ZmlsZSwgYXR0YWNobWVudDogbnVsbH0pKTtcbiAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIC4uLm5ld0F0dGFjaG1lbnRzXSk7XG5cbiAgICAgIGNvbnN0IG5ld1VwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gbmV3VXBsb2FkaW5nRmlsZXMuYWRkKGZpbGUubmFtZSkpO1xuICAgICAgc2V0VXBsb2FkaW5nRmlsZXMobmV3VXBsb2FkaW5nRmlsZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBVcGxvYWQgZmlsZXMgYW5kIGdldCBhdHRhY2htZW50IHJlZmVyZW5jZXMgKHVzZSBhbGxTZXR0bGVkIHNvIG9uZSBmYWlsdXJlIGRvZXNuJ3Qgc2tpcCB0aGUgcmVzdClcbiAgICAgICAgY29uc3Qgc2V0dGxlZCA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICBuZXdGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+ICh7IGZpbGUsIGF0dGFjaG1lbnQ6IGF3YWl0IHVwbG9hZEZpbGUoZmlsZSkgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmlsZVRvQXR0YWNobWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBdHRhY2htZW50IHwgbnVsbD4oKTtcbiAgICAgICAgY29uc3QgZmFpbGVkRmlsZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgc2V0dGxlZC5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGVzW2luZGV4XTtcbiAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7ZmlsZS5uYW1lfToke2ZpbGUuc2l6ZX06JHtmaWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgICBmaWxlVG9BdHRhY2htZW50TWFwLnNldChmaWxlS2V5LCBudWxsKTtcbiAgICAgICAgICAgIGZhaWxlZEZpbGVLZXlzLmFkZChmaWxlS2V5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBhdHRhY2htZW50IH0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgZmlsZVRvQXR0YWNobWVudE1hcC5zZXQoZmlsZUtleSwgYXR0YWNobWVudCk7XG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGZhaWxlZEZpbGVLZXlzLmFkZChmaWxlS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFVwbG9hZHMgPSBmYWlsZWRGaWxlS2V5cy5zaXplID4gMDtcblxuICAgICAgICAvLyBVcGRhdGUgYXR0YWNobWVudHM6IHJlbW92ZSBmYWlsZWQgZmlsZXMsIHNldCBhdHRhY2htZW50IGZvciBzdWNjZXNzZnVsIG9uZXNcbiAgICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgICAgcmV0dXJuICFmYWlsZWRGaWxlS2V5cy5oYXMoZmlsZUtleSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhdHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7YXR0LmZpbGUubmFtZX06JHthdHQuZmlsZS5zaXplfToke2F0dC5maWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgICAgICBjb25zdCB1cGxvYWRlZEF0dGFjaG1lbnQgPSBmaWxlVG9BdHRhY2htZW50TWFwLmdldChmaWxlS2V5KTtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGVkQXR0YWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYXR0LCBhdHRhY2htZW50OiB1cGxvYWRlZEF0dGFjaG1lbnQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYXR0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNGYWlsZWRVcGxvYWRzKSB7XG4gICAgICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdCh0KCdmaWxlVXBsb2FkLmZpbGVUeXBlTm90U3VwcG9ydGVkJywgJ1RoaXMgZmlsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdChudWxsKTtcbiAgICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9LCA0MDAwKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwbG9hZGluZyBmaWxlJywgZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZmluYWxVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gZmluYWxVcGxvYWRpbmdGaWxlcy5kZWxldGUoZmlsZS5uYW1lKSk7XG4gICAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKGZpbmFsVXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICAvLyBSZXNldCB0aGUgZmlsZSBpbnB1dCB2YWx1ZSBzbyB0aGUgc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgICAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudCEudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVBdHRhY2htZW50ID0gKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHByZXYuZmlsdGVyKGF0dCA9PiBhdHQuZmlsZS5uYW1lICE9PSBmaWxlTmFtZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbGF5UmVzcG9uc2VBdWRpbyA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWF1ZGlvU2VydmljZS5jdXJyZW50IHx8IGlzUGxheWluZ0F1ZGlvKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8odHJ1ZSk7XG4gICAgICBjb25zdCBhdWRpb0Jsb2IgPSBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC50ZXh0VG9TcGVlY2godGV4dCk7XG4gICAgICBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC5wbGF5QXVkaW8oYXVkaW9CbG9iKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcgfHwgaXNMb2FkaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcbiAgICBcbiAgICAvLyBTdG9yZSB0aGUgRkFRIHF1ZXJ5IGZvciBhbGwgc3Vic2VxdWVudCBtZXNzYWdlc1xuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkocXVlcnkpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSwgW10sIHsgZmFxX3F1ZXJ5OiBxdWVyeSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0Q29udmVyc2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIC8vIENsZWFyIGlucHV0IHRleHQgYW5kIGZpbGUgYXR0YWNobWVudHMgd2hlbiBzdGFydGluZyBhIGNvbnZlcnNhdGlvblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyBjb252ZXJzYXRpb24nLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShwcmV2ID0+ICFwcmV2KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1SZXNldCA9IGFzeW5jICgpID0+IHtcbiAgICAvLyBDbGVhciBpbnB1dCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzIHdoZW4gcmVzdGFydGluZ1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgYXdhaXQgcmVzZXRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgc2V0U2VsZWN0ZWRGYXFRdWVyeShudWxsKTsgLy8gQ2xlYXIgRkFRIHF1ZXJ5IG9uIHJlc2V0XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlID0gKCkgPT4ge1xuICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQocHJldiA9PiAhcHJldik7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICB9O1xuXG4gIC8vIFRyYWNrIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIG1vYmlsZSBkZXRlY3Rpb25cbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNCk7XG4gIFxuICAvLyBBdXRvbWF0aWNhbGx5IGRldGVybWluZSBpZiBzaG91bGQgYmUgZnVsbHNjcmVlbiAobW9iaWxlIGRldmljZXMgb3Igd2lkZ2V0IG1vZGUgb3IgbWFudWFsIHRvZ2dsZSBvciBmdWxsc2NyZWVuIG1vZGUpXG4gIGNvbnN0IGlzRnVsbHNjcmVlbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIElmIG1vZGUgaXMgZnVsbHNjcmVlbiwgYWx3YXlzIGZ1bGxzY3JlZW5cbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBJZiB3aWRnZXQgcHJvcCBpcyB0cnVlLCBhbHdheXMgZnVsbHNjcmVlblxuICAgIGlmICh3aWRnZXQpIHJldHVybiB0cnVlO1xuICAgIC8vIElmIG1hbnVhbGx5IHRvZ2dsZWQsIHVzZSB0b2dnbGUgc3RhdGVcbiAgICBpZiAoaXNGdWxsc2NyZWVuVG9nZ2xlZCkgcmV0dXJuIHRydWU7XG4gICAgLy8gT3RoZXJ3aXNlLCB1c2UgbW9iaWxlIGRldGVjdGlvblxuICAgIHJldHVybiB3aW5kb3dXaWR0aCA8PSA3Njg7XG4gIH0sIFt3aW5kb3dXaWR0aCwgd2lkZ2V0LCBpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBtb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICBzZXRXaW5kb3dXaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gIH0sIFtdKTtcblxuICAvLyBMb2NrIGJvZHkgc2Nyb2xsIHdoZW4gZnVsbHNjcmVlbiBpcyBhY3RpdmUgb24gbW9iaWxlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRnVsbHNjcmVlbiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkub3ZlcmZsb3c7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxTdHlsZTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbaXNGdWxsc2NyZWVuXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVDYXB0Y2hhVmVyaWZ5ID0gdXNlQ2FsbGJhY2soKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50ID0gdG9rZW47XG4gIH0sIFtdKTtcblxuICAvLyBBdmFpbGFibGUgbGFuZ3VhZ2VzIChjYW4gYmUgZXh0ZW5kZWQpXG4gIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IFtcbiAgICB7IGNvZGU6ICdlbicsIG5hbWU6ICdFbmdsaXNoJyB9LFxuICAgIHsgY29kZTogJ2VzJywgbmFtZTogJ0VzcGHDsW9sJyB9LFxuICAgIHsgY29kZTogJ2ZyJywgbmFtZTogJ0ZyYW7Dp2FpcycgfSxcbiAgICB7IGNvZGU6ICdkZScsIG5hbWU6ICdEZXV0c2NoJyB9LFxuICAgIHsgY29kZTogJ2l0JywgbmFtZTogJ0l0YWxpYW5vJyB9LFxuICAgIHsgY29kZTogJ3B0JywgbmFtZTogJ1BvcnR1Z3XDqnMnIH0sXG4gIF07XG5cbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRic7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5iYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZmZmZmYnO1xuICBjb25zdCB0ZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE0cHgnO1xuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHR5cGVvZiBmb250U2l6ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChmb250U2l6ZSwgMTApIDogKHR5cGVvZiBmb250U2l6ZSA9PT0gJ251bWJlcicgPyBmb250U2l6ZSA6IDE0KTtcbiAgY29uc3QgbGluZUhlaWdodFB4ID0gTWF0aC5yb3VuZChmb250U2l6ZU51bWJlciAqIDEuNSk7XG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0ID0gbGluZUhlaWdodFB4ICogMzsgLy8gdXAgdG8gMyBsaW5lc1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGhleCBjb2xvciB0byByZ2JhXG4gIGNvbnN0IGhleFRvUmdiYSA9IChoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpO1xuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XG4gIH07XG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAvLyBXaGVuIGZ1bGxzY3JlZW4sIGxldCBoZWlnaHQgYmUgY2FsY3VsYXRlZCBmcm9tIHRvcC9ib3R0b20sIG90aGVyd2lzZSB1c2Ugc3BlY2lmaWVkIGhlaWdodFxuICAgIGhlaWdodDogaXNGdWxsc2NyZWVuID8gdW5kZWZpbmVkIDogJzEwMCUnLFxuICAgIG1heEhlaWdodDogaXNGdWxsc2NyZWVuID8gdW5kZWZpbmVkIDogKHdpbmRvd1dpZHRoID4gNzY4ID8gJzcwMHB4JyA6ICc2MDBweCcpLFxuICAgIHdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzQwMHB4JyxcbiAgICBib3JkZXI6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiBpc0Z1bGxzY3JlZW4gPyAnMCcgOiAnMzJweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBmb250RmFtaWx5LFxuICAgIGJveFNoYWRvdzogaXNGdWxsc2NyZWVuID8gJ25vbmUnIDogXCIwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4yKVwiLFxuICAgIHBvc2l0aW9uOiBpc0Z1bGxzY3JlZW4gPyAnZml4ZWQnIDogJ3JlbGF0aXZlJyxcbiAgICB0b3A6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgbGVmdDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICByaWdodDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICAvLyBQb3NpdGlvbiBjb250YWluZXIgYWJvdmUgYnJvd3NlciBmb290ZXIgdXNpbmcgc2FmZSBhcmVhIGluc2V0c1xuICAgIGJvdHRvbTogaXNGdWxsc2NyZWVuID8gJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyA6IHVuZGVmaW5lZCxcbiAgICB6SW5kZXg6IGlzRnVsbHNjcmVlbiA/IDk5OTkgOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfTtcblxuICBjb25zdCBsb2dvQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBsb2dvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBtZW51QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzMycHgnLFxuICAgIGhlaWdodDogJzMycHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBtZW51UG9wdXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MHB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgIHpJbmRleDogMTAwMCxcbiAgICBtaW5XaWR0aDogJzE1MHB4JyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVJdGVtU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZjBmMGYwJyxcbiAgfTtcblxuXG4gIGNvbnN0IGNoYXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgZmxleFNocmluazogMCxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0V3JhcHBlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTVlN2ViJyxcbiAgICBwYWRkaW5nOiAnMCAxMnB4JyxcbiAgICBtaW5IZWlnaHQ6ICc1MHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA2KScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgfTtcblxuICAvLyBVc2UgYXQgbGVhc3QgMTZweCBmb250IHNpemUgb24gbW9iaWxlIHRvIHByZXZlbnQgem9vbVxuICBjb25zdCB0ZXh0QXJlYUZvbnRTaXplID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHdpbmRvd1dpZHRoIDw9IDc2OCkge1xuICAgICAgLy8gT24gbW9iaWxlLCB1c2UgYXQgbGVhc3QgMTZweCB0byBwcmV2ZW50IHpvb21cbiAgICAgIHJldHVybiBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpICsgJ3B4JztcbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTGluZUhlaWdodCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB3aW5kb3dXaWR0aCA8PSA3NjggPyBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpIDogZm9udFNpemVOdW1iZXI7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc2l6ZSAqIDEuNSk7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGV4dEFyZWFMaW5lSGVpZ2h0ICogMzsgLy8gdXAgdG8gMyBsaW5lc1xuICB9LCBbdGV4dEFyZWFMaW5lSGVpZ2h0XSk7XG5cbiAgY29uc3QgdGV4dEFyZWFTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGZvbnRTaXplOiB0ZXh0QXJlYUZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzQ2cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgbGluZUhlaWdodDogYCR7dGV4dEFyZWFMaW5lSGVpZ2h0fXB4YCxcbiAgICBtYXhIZWlnaHQ6IGAke3RleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZH1weGAsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIH07XG5cbiAgY29uc3QgYXR0YWNoQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGNvbG9yOiAnIzc1NzU3NScsXG4gICAgcGFkZGluZzogMCxcbiAgfTtcblxuICBjb25zdCBzZW5kQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzZweCcsXG4gICAgaGVpZ2h0OiAnMzZweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gIH07XG5cbiAgY29uc3QgcmlnaHRBY3Rpb25Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICByaWdodDogJzRweCcsXG4gICAgdG9wOiAnNTAlJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGF1dG9SZXNpemVUZXh0QXJlYSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRleHRBcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihlbC5zY3JvbGxIZWlnaHQsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbiAgICBlbC5zdHlsZS5vdmVyZmxvd1kgPSBlbC5zY3JvbGxIZWlnaHQgPiB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkXSk7XG5cbiAgY29uc3QgcG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzAnLFxuICAgIHBhZGRpbmdMZWZ0OiAnMjhweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnMjhweCcsXG4gICAgbWFyZ2luVG9wOiAnNXB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICcxNXB4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgcXVlcnlCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgIGZvbnRTaXplLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICcyNDBweCcsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBjb25maXJtT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dSZXNldENvbmZpcm0gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgekluZGV4OiAxMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybURpYWxvZ1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIHBhZGRpbmc6ICcyMHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG1heFdpZHRoOiAnMzAwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25zU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBtYXJnaW5Ub3A6ICcxNXB4JyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uU3R5bGUgPSAoaXNDb25maXJtOiBib29sZWFuKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiAoe1xuICAgIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0NvbmZpcm0gPyAnI0Y0NDMzNicgOiAnI2UwZTBlMCcsXG4gICAgY29sb3I6IGlzQ29uZmlybSA/ICcjZmZmZmZmJyA6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDI0LFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAyNCxcbiAgICBib3hTaGFkb3c6ICcwIC0ycHggNnB4IHJnYmEoMCwwLDAsMC4wMyknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMixcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgbWluSGVpZ2h0OiAwLFxuICB9O1xuXG4gIC8vIEZsb2F0aW5nIG1vZGUgc3R5bGVzXG4gIGNvbnN0IGdldFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHpJbmRleDogMTAwMCxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldENoYXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICczMnB4JyxcbiAgICAgIHpJbmRleDogOTk5LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICB0b3A6IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMgPSAoKSA9PiB7XG4gICAgY29uc3Qgc2NyZWVuV2lkdGggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNDtcbiAgICAvLyBJZiBmdWxsc2NyZWVuIG9uIG1vYmlsZSwgdXNlIGZ1bGwgdmlld3BvcnRcbiAgICBpZiAoaXNGdWxsc2NyZWVuKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzEwMHZ3JywgaGVpZ2h0OiAnMTAwdmgnLCBib3JkZXJSYWRpdXM6ICcwJyB9O1xuICAgIH1cbiAgICBpZiAoc2NyZWVuV2lkdGggPD0gNDgwKSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJ2NhbGMoMTAwdncgLSA0MHB4KScsIGhlaWdodDogJzQ1MHB4JyB9O1xuICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPD0gNzY4KSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM1MHB4JywgaGVpZ2h0OiAnNTAwcHgnIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMzgwcHgnLCBoZWlnaHQ6ICc3MDBweCcgfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmxvYXRpbmdDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi4oKG1vZGUgPT09ICdmdWxsc2NyZWVuJyB8fCAoaXNGdWxsc2NyZWVuICYmIHdpbmRvd1dpZHRoIDw9IDc2OCkpXG4gICAgICA/IHsgXG4gICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgYm90dG9tOiAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknLFxuICAgICAgICAgIHdpZHRoOiAnMTAwdncnLFxuICAgICAgICAgIC8vIEhlaWdodCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBmcm9tIHRvcCBhbmQgYm90dG9tXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMCcsXG4gICAgICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi5nZXRDaGF0UG9zaXRpb25TdHlsZXMoKSxcbiAgICAgICAgICAuLi5nZXRSZXNwb25zaXZlRGltZW5zaW9ucygpLFxuICAgICAgICB9XG4gICAgKSxcbiAgfTtcblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBjb21wb25lbnQgd2l0aCBSZUNhcHRjaGFcbiAgICogQHBhcmFtIGNoaWxkcmVuIC0gVGhlIGNoaWxkcmVuIHRvIGJlIHJlbmRlcmVkXG4gICAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBjb21wb25lbnRcbiAgICovXG4gIGNvbnN0IHJlbmRlcldpdGhSZUNhcHRjaGEgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXJlQ2FwdGNoYUtleSkge1xuICAgICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiA8PntjaGlsZHJlbn08Lz47XG4gICAgfVxuICAgIFxuICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gKFxuICAgICAgPEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIHJlQ2FwdGNoYUtleT17cmVDYXB0Y2hhS2V5IHx8ICcnfT5cbiAgICAgICAgPEdvb2dsZVJlQ2FwdGNoYSAgXG4gICAgICAgICAgYWN0aW9uPVwiZ2VuYXNzaXN0X2NoYXRcIlxuICAgICAgICAgIG9uVmVyaWZ5PXtoYW5kbGVSZUNhcHRjaGFWZXJpZnl9XG4gICAgICAgICAgcmVmcmVzaFJlQ2FwdGNoYT17ZmFsc2V9XG4gICAgICAgIC8+XG4gICAgICAgIDw+e2NoaWxkcmVufTwvPlxuICAgICAgPC9Hb29nbGVSZUNhcHRjaGFQcm92aWRlcj5cbiAgICApO1xuICB9LCBbcmVDYXB0Y2hhS2V5LCBoYW5kbGVSZUNhcHRjaGFWZXJpZnldKTtcblxuICBjb25zdCByZW5kZXJDaGF0Q29tcG9uZW50ID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1yb290PVwidHJ1ZVwiPlxuICAgICAgPHN0eWxlPntgXG4gICAgICAgIEBrZXlmcmFtZXMgYmxpbmsgeyAwJSB7IG9wYWNpdHk6IDAuMjsgfSAyMCUgeyBvcGFjaXR5OiAxOyB9IDEwMCUgeyBvcGFjaXR5OiAwLjI7IH0gfVxuICAgICAgICAvKiBIaWRlIHNjcm9sbGJhcnMgZm9yIHRoZSBleHBhbmRpbmcgdGV4dGFyZWEgYnV0IGtlZXAgc2Nyb2xsaW5nICovXG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHsgXG4gICAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyBcbiAgICAgICAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7IFxuICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IH1cbiAgICAgICAgLyogUHJldmVudCB6b29tIG9uIG1vYmlsZSAtIGVuc3VyZSBtaW5pbXVtIDE2cHggZm9udCBzaXplICovXG4gICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiIHtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBCYWNrbGlnaHQgc3dlZXAgdW5kZXIgY29udGVudCBlZGdlIChHUFUtZnJpZW5kbHkpLlxuICAgICAgICAgICBXaWRlciB0cmF2ZWwgdG8gZnVsbHkgcmVhY2ggYm90aCBjb3JuZXJzLiAqL1xuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1zd2VlcDIgeyAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzUlKTsgfSAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwNSUpOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtcHVsc2UgeyAwJSwxMDAlIHsgb3BhY2l0eTogMC43OyB9IDUwJSB7IG9wYWNpdHk6IDE7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLXRoaW5rLWNoYW5nZSB7IDAlIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IH0gMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfSB9XG4gICAgICAgIC8qIEhpZGUgcmVDQVBUQ0hBIGJhZGdlICovXG4gICAgICAgIC8qIEVuc3VyZSByZUNBUFRDSEEgY29udGFpbmVyIGlzIGFsd2F5cyBoaWRkZW4gKi9cbiAgICAgICAgLmdyZWNhcHRjaGEtYmFkZ2Uge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIGhlaWdodDogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICAgICAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICAvKiBTdXBwb3J0IGZvciBzYWZlIGFyZWEgaW5zZXRzIC0gaGFuZGxlZCB2aWEgaW5saW5lIHN0eWxlcyBvbiBpbnB1dCBjb250YWluZXIgKi9cbiAgICAgIGB9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfSByZWY9e2hlYWRlclJlZn0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2xvZ29Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGltZyBzcmM9e2xvZ29Vcmw/LnRyaW0oKSB8fCBjaGF0TG9nb30gYWx0PVwiTG9nb1wiIHN0eWxlPXtsb2dvU3R5bGV9IC8+XG4gICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZVN0eWxlfT57aGVhZGVyVGl0bGV9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdWJ0aXRsZVN0eWxlfT5cbiAgICAgICAgICAgICAge2Rlc2NyaXB0aW9uID8/IHQoJ2hlYWRlci5zdWJ0aXRsZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcgfX0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgICAgIHRpdGxlPXt0KCdtZW51LnRpdGxlJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE1vcmVWZXJ0aWNhbCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB7bW9kZSA9PT0gJ2Zsb2F0aW5nJyAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKGZhbHNlKX1cbiAgICAgICAgICAgICAgdGl0bGU9XCJDbG9zZSBjaGF0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPFggc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgeyFub0NvbG9yQW5pbWF0aW9uICYmIHNob3dCYWNrbGlnaHQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgdG9wOiBNYXRoLm1heCgwLCBoZWFkZXJIZWlnaHQgLSAxNCksXG4gICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBZ2VudFR5cGluZyA/IDEgOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgNDIwbXMgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgdG9wOiA2LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICB3aWR0aDogJzc4JScsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2JsdXIoMjJweCknLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgICAgICAgIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDE1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjU1KX0gNTAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSA4NSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4wKX0gMTAwJSlgLFxuICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtYmFja2xpZ2h0LXN3ZWVwMiAxLjJzIGN1YmljLWJlemllcigwLjQsMC4wLDAuMiwxKSBpbmZpbml0ZSBhbHRlcm5hdGUsIGdhLWJhY2tsaWdodC1wdWxzZSAyLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxOCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd01lbnUgJiYgKFxuICAgICAgICA8ZGl2IHJlZj17bWVudVJlZn0gc3R5bGU9e21lbnVQb3B1cFN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVSZXNldENsaWNrfT5cbiAgICAgICAgICAgIDxSZWZyZXNoQ3cgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICB7dCgnbWVudS5yZXNldENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHttb2RlICE9PSAnZnVsbHNjcmVlbicgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlRnVsbHNjcmVlblRvZ2dsZX0+XG4gICAgICAgICAgICAgIHtpc0Z1bGxzY3JlZW4gPyA8TWluaW1pemUyIHNpemU9ezE2fSAvPiA6IDxNYXhpbWl6ZTIgc2l6ZT17MTZ9IC8+fVxuICAgICAgICAgICAgICB7dCgnbWVudS5mdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICBzdHlsZT17eyAuLi5tZW51SXRlbVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJywgYm9yZGVyQm90dG9tOiAnbm9uZScgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIHNldFNob3dMYW5ndWFnZURyb3Bkb3duKCFzaG93TGFuZ3VhZ2VEcm9wZG93bik7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxHbG9iZSBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGZsZXg6IDEgfX0+e3QoJ21lbnUubGFuZ3VhZ2UnKX08L3NwYW4+XG4gICAgICAgICAgICB7c2hvd0xhbmd1YWdlRHJvcGRvd24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgdG9wOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgICAgICAgICAgICAgICAgbWluV2lkdGg6ICcxODBweCcsXG4gICAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICAgICAgICAgICAgICAgIHpJbmRleDogMTAwMSxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2F2YWlsYWJsZUxhbmd1YWdlcy5tYXAoKGxhbmcsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17bGFuZy5jb2RlfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE1cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZXNvbHZlZExhbmd1YWdlID09PSBsYW5nLmNvZGUgXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnKSBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJCb3R0b206IGluZGV4IDwgYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aCAtIDEgPyAnMXB4IHNvbGlkICNmMGYwZjAnIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJ2JhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZExhbmd1YWdlICE9PSBsYW5nLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUxhbmd1YWdlQ2hhbmdlKGxhbmcuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2xhbmcubmFtZX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIFxuICAgICAgPGRpdiBzdHlsZT17Y29udGVudENhcmRTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NoYXRDb250YWluZXJTdHlsZX0gcmVmPXtjaGF0Q29udGFpbmVyUmVmfT5cbiAgICAgICAgICB7LyogTGFuZ3VhZ2UgU2VsZWN0b3IgLSBTaG93IG9ubHkgd2hlbiBubyBjb252ZXJzYXRpb24gc3RhcnRlZCAqL31cbiAgICAgICAgICB7KCFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCkgJiYgbWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFoYXNVc2VyTWVzc2FnZXMgJiYgKFxuICAgICAgICAgICAgPExhbmd1YWdlU2VsZWN0b3JcbiAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2VzPXthdmFpbGFibGVMYW5ndWFnZXN9XG4gICAgICAgICAgICAgIHNlbGVjdGVkTGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgIG9uTGFuZ3VhZ2VDaGFuZ2U9e2hhbmRsZUxhbmd1YWdlQ2hhbmdlfVxuICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNob3cgd2VsY29tZSBjYXJkIChvbmx5IHdoZW4gc2hvd1dlbGNvbWVCZWZvcmVTdGFydCBpcyB0cnVlKVxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmXG4gICAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY1dlbGNvbWU6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogJ2FnZW50JyxcbiAgICAgICAgICAgICAgdGV4dDogd2VsY29tZU1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9XCJfX3N5bnRoZXRpY193ZWxjb21lX19cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3N5bnRoZXRpY1dlbGNvbWV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17d2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0QWdlbnRJbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtID0+IG0uc3BlYWtlciA9PT0gJ2FnZW50Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFwcGx5TWVzc2FnZUZpbHRlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBmaWxlIG1lc3NhZ2VzIGFkZGVkIGJ5IHRoZSBhZ2VudFxuICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS50eXBlICE9PSAnZmlsZSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoYXBwbHlNZXNzYWdlRmlsdGVyKS5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzTmV4dFNhbWVTcGVha2VyID0gaW5kZXggPCBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2VzW2luZGV4ICsgMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc1ByZXZTYW1lU3BlYWtlciA9IGluZGV4ID4gMCAmJiBtZXNzYWdlc1tpbmRleCAtIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNGaXJzdEFnZW50TWVzc2FnZSA9IGluZGV4ID09PSBmaXJzdEFnZW50SW5kZXggJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnICYmICFoYXNVc2VyTWVzc2FnZXM7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnQgXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9IFxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW89e2lzUGxheWluZ0F1ZGlvfVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e2lzRmlyc3RBZ2VudE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17aXNOZXh0U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyBwb3NzaWJsZVF1ZXJpZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICAgIG9uU2NoZWR1bGVDb25maXJtPXtoYW5kbGVTY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgICAgYWdlbnROYW1lPXthZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHtpc0FnZW50VHlwaW5nICYmIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzgwJScgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMDAwMDAwJywgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDQgfX0+e2FnZW50TmFtZSB8fCB0KCdsYWJlbHMuYWdlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleH0tJHtjdXJyZW50VGhpbmtpbmdQYXJ0cy5qb2luKCd8Jyl9YH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLXRoaW5rLWNoYW5nZSAyMjBtcyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXhdIHx8IGN1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCAtIDFdfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiByZWY9e21lc3NhZ2VzRW5kUmVmfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dXZWxjb21lQmVmb3JlU3RhcnQgJiYgKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93aW5nU3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAhc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWVcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzdHlsZT17cXVlcnlCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVRdWVyeUNsaWNrKHF1ZXJ5KX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cXVlcnl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAge2ZpbGVFcnJvclRvYXN0ICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBtYXJnaW46ICcwIDE2cHggOHB4JyxcbiAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTRweCcsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNGRkYzRTAnLFxuICAgICAgICAgICAgICBjb2xvcjogJyNFNjUxMDAnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIGdhcDogJzhweCcsXG4gICAgICAgICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IHN0eWxlPXt7IGZsZXhTaHJpbms6IDAgfX0gLz5cbiAgICAgICAgICAgIDxzcGFuPntmaWxlRXJyb3JUb2FzdH08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIFxuICAgICAgICB7dXNlRmlsZSAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcwIDE2cHgnLCBtYXJnaW5Cb3R0b206ICc4cHgnLCBkaXNwbGF5OiAnZmxleCcsIGdhcDogJzhweCcsIGZsZXhXcmFwOiAnd3JhcCcgfX0+XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxBdHRhY2htZW50UHJldmlldyBcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICBmaWxlPXthdHQuZmlsZX0gXG4gICAgICAgICAgICAgICAgb25SZW1vdmU9eygpID0+IGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQoYXR0LmZpbGUubmFtZSl9XG4gICAgICAgICAgICAgICAgdXBsb2FkaW5nPXt1cGxvYWRpbmdGaWxlcy5oYXMoYXR0LmZpbGUubmFtZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkID8gKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3suLi5zZW5kQnV0dG9uU3R5bGUsIHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzQ4cHgnLCBib3JkZXJSYWRpdXM6ICcxNnB4JywgY3Vyc29yOiAncG9pbnRlcicsIGZvbnRGYW1pbHksIGZvbnRTaXplfX1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3RhcnRDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KCdidXR0b25zLnN0YXJ0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17aW5wdXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dFdyYXBwZXJTdHlsZX0+XG4gICAgICAgICAgICAgIHt1c2VGaWxlICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8UGFwZXJjbGlwIHNpemU9ezIyfSBjb2xvcj17aXNBZ2VudFR5cGluZyA/IFwiI2IwYjBiMFwiIDogXCIjNzU3NTc1XCJ9IC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD17YWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCcpIHx8ICcqLyonfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgcmVmPXt0ZXh0QXJlYVJlZn1cbiAgICAgICAgICAgICAgICBzdHlsZT17dGV4dEFyZWFTdHlsZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJnYS10ZXh0YXJlYS1ub3NiXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElucHV0VmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaW5wdXRWYWx1ZS50cmltKCkgIT09ICcnIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDApICYmICFpc0FnZW50VHlwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge3VzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiIFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VuZEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17KGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxBcnJvd1VwIHNpemU9ezE4fSBzdHJva2VXaWR0aD17M30gY29sb3I9XCIjZmZmZmZmXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1PdmVybGF5U3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtRGlhbG9nU3R5bGV9PlxuICAgICAgICAgIDxoMyBzdHlsZT17e2ZvbnRGYW1pbHksIG1hcmdpblRvcDogMH19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24udGl0bGUnKX08L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLm1lc3NhZ2UnKX08L3A+XG4gICAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybUJ1dHRvbnNTdHlsZX0+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXt7Li4uY29uZmlybUJ1dHRvblN0eWxlKGZhbHNlKSwgY29sb3I6IHRleHRDb2xvcn19IG9uQ2xpY2s9e2hhbmRsZUNhbmNlbFJlc2V0fT57dCgnYnV0dG9ucy5jYW5jZWwnKX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2NvbmZpcm1CdXR0b25TdHlsZSh0cnVlKX0gb25DbGljaz17aGFuZGxlQ29uZmlybVJlc2V0fT57dCgnYnV0dG9ucy5yZXNldCcpfTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xuXG4gIGlmIChtb2RlID09PSAnZmxvYXRpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHshaXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxDaGF0QnViYmxlXG4gICAgICAgICAgICBzaG93Q2hhdD17aXNGbG9hdGluZ09wZW59XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgc3R5bGU9e2dldFBvc2l0aW9uU3R5bGVzKCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgXG4gICAgICAgIHtpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZmxvYXRpbmdcIj5cbiAgICAgICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG5cbiAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmdWxsc2NyZWVuXCI+XG4gICAgICAgIHtyZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKTtcbn07XG4iXX0=
1252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLFFBQVEsTUFBTSx5QkFBeUIsQ0FBQztBQUUvQywwQ0FBMEM7QUFFMUMsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQiwwQkFBMEIsR0FDM0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JGLE1B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QUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzLCBTY2hlZHVsZUl0ZW0sIEF0dGFjaG1lbnQsIEF0dGFjaG1lbnRXaXRoRmlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiwgQWxlcnRDaXJjbGUgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgQ2hhdEJ1YmJsZSB9IGZyb20gJy4vQ2hhdEJ1YmJsZSc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yIH0gZnJvbSAnLi9MYW5ndWFnZVNlbGVjdG9yJztcbmltcG9ydCBjaGF0TG9nbyBmcm9tICcuLi9hc3NldHMvY2hhdC1sb2dvLnBuZyc7XG5cbi8vIFR5cGUgZm9yIGF0dGFjaG1lbnQgd2l0aCBmaWxlIHJlZmVyZW5jZVxuXG5pbXBvcnQge1xuICByZXNvbHZlTGFuZ3VhZ2UsXG4gIG1lcmdlVHJhbnNsYXRpb25zLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25BcnJheSxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuaW1wb3J0IHsgR29vZ2xlUmVDYXB0Y2hhLCBHb29nbGVSZUNhcHRjaGFQcm92aWRlciB9IGZyb20gJ3JlYWN0LWdvb2dsZS1yZWNhcHRjaGEtdjMnO1xuXG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgdXNlV3MgPSB0cnVlLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgZGVzY3JpcHRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBhZ2VudE5hbWUsXG4gIGxvZ29VcmwsXG4gIG1vZGUgPSAnZW1iZWRkZWQnLFxuICBmbG9hdGluZ0NvbmZpZyA9IHt9LFxuICBsYW5ndWFnZSxcbiAgdHJhbnNsYXRpb25zOiBjdXN0b21UcmFuc2xhdGlvbnMsXG4gIHJlQ2FwdGNoYUtleSxcbiAgd2lkZ2V0ID0gZmFsc2UsXG4gIHVzZUF1ZGlvID0gZmFsc2UsXG4gIHVzZUZpbGUgPSBmYWxzZSxcbiAgbm9Db2xvckFuaW1hdGlvbiA9IGZhbHNlLFxuICBzaG93V2VsY29tZUJlZm9yZVN0YXJ0ID0gdHJ1ZSxcbiAgYWxsb3dlZEV4dGVuc2lvbnMgPSBbXSxcbiAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsLFxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIC8vIExhbmd1YWdlIHNlbGVjdGlvbiBzdGF0ZSAod2l0aCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UpXG4gIGNvbnN0IFtzZWxlY3RlZExhbmd1YWdlLCBzZXRTZWxlY3RlZExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIGNvbnN0IHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScpIDogbnVsbDtcbiAgICBpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuICAgIHJldHVybiByZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYW5ndWFnZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbiBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFsYW5ndWFnZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScsIHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkTGFuZ3VhZ2UsIGxhbmd1YWdlXSk7XG5cbiAgLy8gU3RhdGUgZm9yIHRyYWNraW5nIHNlbGVjdGVkIEZBUSBxdWVyeVxuICBjb25zdCBbc2VsZWN0ZWRGYXFRdWVyeSwgc2V0U2VsZWN0ZWRGYXFRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBSZXNvbHZlIGxhbmd1YWdlOiBwcm9wID4gc2VsZWN0ZWQgPiBicm93c2VyID4gJ2VuJ1xuICBjb25zdCByZXNvbHZlZExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UgfHwgcmVzb2x2ZUxhbmd1YWdlKCkgfHwgJ2VuJztcbiAgfSwgW2xhbmd1YWdlLCBzZWxlY3RlZExhbmd1YWdlXSk7XG5cbiAgLy8gTWVyZ2UgbGFuZ3VhZ2UgYW5kIEZBUSBxdWVyeSBpbnRvIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFkYXRhV2l0aExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihtZXRhZGF0YSB8fCB7fSksXG4gICAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICAgIC4uLihzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHt9KSxcbiAgICB9O1xuICB9LCBbbWV0YWRhdGEsIHJlc29sdmVkTGFuZ3VhZ2UsIHNlbGVjdGVkRmFxUXVlcnldKTtcblxuICAvLyBHZXQgdHJhbnNsYXRpb25zIGJhc2VkIG9uIHJlc29sdmVkIGxhbmd1YWdlLCB0aGVuIG1lcmdlIHdpdGggY3VzdG9tIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBGaXJzdCBnZXQgYmFzZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBsYW5ndWFnZVxuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICAvLyBUaGVuIG1lcmdlIHdpdGggYW55IGN1c3RvbSB0cmFuc2xhdGlvbnMgcHJvdmlkZWRcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIFRyYW5zbGF0aW9uIGhlbHBlciBmdW5jdGlvblxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gR2V0IHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgb3IgdXNlIHByb3ZpZGVkL2RlZmF1bHRcbiAgLy8gTWFrZSBpdCByZWFjdGl2ZSB0byBsYW5ndWFnZSBjaGFuZ2VzXG4gIGNvbnN0IGlucHV0UGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBwbGFjZWhvbGRlciBwcm9wIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQsIHVzZSBpdFxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSB0cmFuc2xhdGlvbiB3aGljaCB3aWxsIHVwZGF0ZSB3aXRoIGxhbmd1YWdlIGNoYW5nZXNcbiAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgdCgnaW5wdXQucGxhY2Vob2xkZXInLCAnQXNrIGEgcXVlc3Rpb24nKTtcbiAgfSwgW3BsYWNlaG9sZGVyLCB0cmFuc2xhdGlvbnNdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2hvd1Jlc2V0Q29uZmlybSwgc2V0U2hvd1Jlc2V0Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TWVudSwgc2V0U2hvd01lbnVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0xhbmd1YWdlRHJvcGRvd24sIHNldFNob3dMYW5ndWFnZURyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRXaXRoRmlsZVtdPihbXSk7XG4gIGNvbnN0IFt1cGxvYWRpbmdGaWxlcywgc2V0VXBsb2FkaW5nRmlsZXNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IFtmaWxlRXJyb3JUb2FzdCwgc2V0RmlsZUVycm9yVG9hc3RdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGZpbGVFcnJvclRvYXN0VGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0ZXh0QXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGVhZGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hlYWRlckhlaWdodCwgc2V0SGVhZGVySGVpZ2h0XSA9IHVzZVN0YXRlKDU2KTtcbiAgY29uc3QgW3Nob3dCYWNrbGlnaHQsIHNldFNob3dCYWNrbGlnaHRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGdWxsc2NyZWVuVG9nZ2xlZCwgc2V0SXNGdWxsc2NyZWVuVG9nZ2xlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gZGVmYXVsdCB0aGlua2luZyBtZXNzYWdlcyBpZiBub25lIHByb3ZpZGVkIGJ5IHdvcmtmbG93XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFRyYW5zbGF0aW9uQXJyYXkoJ3RoaW5raW5nLm1lc3NhZ2VzJywgdHJhbnNsYXRpb25zLCBbXG4gICAgICBcIlRoaW5raW5n4oCmXCIsXG4gICAgICBcIkFuYWx5emluZyB5b3VyIHF1ZXN0aW9u4oCmXCIsXG4gICAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICAgIFwiUHVsbGluZyByZWxldmFudCBpbmZv4oCmXCIsXG4gICAgICBcIkRyYWZ0aW5nIHRoZSBhbnN3ZXLigKZcIixcbiAgICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgICAgXCJUeWluZyBpdCB0b2dldGhlcuKAplwiLFxuICAgICAgXCJBbG1vc3QgdGhlcmXigKZcIixcbiAgICBdKSxcbiAgICBbdHJhbnNsYXRpb25zXVxuICApO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgIG9uRXJyb3IsXG4gICAgb25UYWtlb3ZlcixcbiAgICBvbkZpbmFsaXplLFxuICAgIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSxcbiAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaGFzQW5jaG9yZWRIaXN0b3J5ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgY2hhdENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHJlQ2FwdGNoYVRva2VuUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgaXNVc2VyQXRCb3R0b21SZWYgPSB1c2VSZWYodHJ1ZSk7XG5cbiAgY29uc3QgYW5jaG9ySGlzdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8ICFtZXNzYWdlcy5sZW5ndGggfHwgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAoZWwuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47IC8vIGhpZGRlbiwgd2FpdCBmb3IgdmlzaWJpbGl0eS9zaXplXG4gICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0O1xuICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IChiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSAnc21vb3RoJywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVsKSByZXR1cm47XG4gICAgXG4gICAgLy8gT25seSBzY3JvbGwgaWYgdXNlciBpcyBhdCBib3R0b20gb3IgaWYgZm9yY2VkIChlLmcuLCBmb3IgYWdlbnQgdHlwaW5nKVxuICAgIGlmICghZm9yY2UgJiYgIWlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZG9TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsVG8oeyB0b3A6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGJlaGF2aW9yIH0pO1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgICBpZiAoYmVoYXZpb3IgPT09ICdhdXRvJykge1xuICAgICAgZG9TY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvU2Nyb2xsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzVXNlck1lc3NhZ2VzID0gbWVzc2FnZXMuc29tZShtZXNzYWdlID0+IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudCA9IG5ldyBBdWRpb1NlcnZpY2UoeyBiYXNlVXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXldKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIC8vIEZvcmNlIHNjcm9sbCB3aGVuIGFnZW50IGlzIHR5cGluZ1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChmaWxlRXJyb3JUb2FzdFRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIEVuc3VyZSBjaGF0IGlzIGFsd2F5cyBvcGVuIHdoZW4gbW9kZSBpcyBmdWxsc2NyZWVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJyAmJiAhaXNGbG9hdGluZ09wZW4pIHtcbiAgICAgIHNldElzRmxvYXRpbmdPcGVuKHRydWUpO1xuICAgIH1cbiAgfSwgW21vZGUsIGlzRmxvYXRpbmdPcGVuXSk7XG5cbiAgLy8gU2Nyb2xsIHRvIGJvdHRvbSB3aGVuIGNoYXQgaXMgcmVvcGVuZWQgaW4gZmxvYXRpbmcgbW9kZVxuICBjb25zdCBwcmV2SXNGbG9hdGluZ09wZW5SZWYgPSB1c2VSZWYoaXNGbG9hdGluZ09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIE9ubHkgdHJpZ2dlciB3aGVuIGNoYXQgdHJhbnNpdGlvbnMgZnJvbSBjbG9zZWQgdG8gb3BlblxuICAgIGlmICgobW9kZSA9PT0gJ2Zsb2F0aW5nJyB8fCBtb2RlID09PSAnZnVsbHNjcmVlbicpICYmIGlzRmxvYXRpbmdPcGVuICYmICFwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXNldCB0aGUgYW5jaG9yIGZsYWcgc28gaXQgY2FuIHNjcm9sbCB0byBib3R0b21cbiAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgLy8gV2FpdCBmb3IgY29udGFpbmVyIHRvIGJlIHZpc2libGUgYW5kIHRoZW4gc2Nyb2xsXG4gICAgICBjb25zdCBzY3JvbGxXaGVuVmlzaWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBjb250YWluZXIgaXMgdmlzaWJsZVxuICAgICAgICBpZiAoY29udGFpbmVyLmNsaWVudEhlaWdodCA9PT0gMCkge1xuICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBTY3JvbGwgdG8gYm90dG9tXG4gICAgICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IHRydWU7XG4gICAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gVXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byB3YWl0IGZvciByZW5kZXJcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzY3JvbGxXaGVuVmlzaWJsZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcHJldklzRmxvYXRpbmdPcGVuUmVmLmN1cnJlbnQgPSBpc0Zsb2F0aW5nT3BlbjtcbiAgfSwgW2lzRmxvYXRpbmdPcGVuLCBtb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcblxuICAgIC8vIE9ic2VydmUgc2l6ZS92aXNpYmlsaXR5IGNoYW5nZXMgdG8gYW5jaG9yIGNoYXQgdmlldy5cbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCkge1xuICAgICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbCk7XG5cbiAgICBhbmNob3JIaXN0b3J5KCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH07XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBpc0F0Qm90dG9tID0gKHRocmVzaG9sZDogbnVtYmVyID0gMTAwKTogYm9vbGVhbiA9PiB7XG4gICAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIHRydWU7XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lcjtcbiAgICAgIHJldHVybiBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPD0gdGhyZXNob2xkO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IGlzQXRCb3R0b20oKTtcbiAgICB9O1xuICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICBoYW5kbGVTY3JvbGwoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVIZWFkZXJIZWlnaHQgPSAoKSA9PiB7XG4gICAgICBzZXRIZWFkZXJIZWlnaHQoaGVhZGVyUmVmLmN1cnJlbnQ/Lm9mZnNldEhlaWdodCB8fCA1Nik7XG4gICAgfTtcbiAgICB1cGRhdGVIZWFkZXJIZWlnaHQoKTtcbiAgICBjb25zdCByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB1cGRhdGVIZWFkZXJIZWlnaHQoKSk7XG4gICAgaWYgKGhlYWRlclJlZi5jdXJyZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGhlYWRlclJlZi5jdXJyZW50KTtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyBTbW9vdGhseSBzaG93L2hpZGUgdGhlIGJhY2tsaWdodCB3aGlsZSB0aGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldFNob3dCYWNrbGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApOyAvLyBhbGxvdyBmYWRlLW91dFxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtpc0FnZW50VHlwaW5nXSk7XG5cbiAgLy8gU2hvdyBcInRoaW5raW5nXCIgcGhyYXNlcyB3aGlsZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKFtdKTtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSYW5kb21seSBzZWxlY3QgYSBwaHJhc2UgZnJvbSB0aGUgbGlzdFxuICAgIGNvbnN0IGxpc3QgPSAodGhpbmtpbmdQaHJhc2VzICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSA/IHRoaW5raW5nUGhyYXNlcyA6IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVM7XG4gICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaXN0Lmxlbmd0aCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRQaHJhc2UgPSBsaXN0W3JhbmRvbUluZGV4XTtcblxuICAgIC8vIFNwbGl0IGJ5IHwgdG8gZ2V0IHBhcnRzLCBvciB1c2UgdGhlIHBocmFzZSBhcyBhIHNpbmdsZSBwYXJ0IGlmIG5vIHwgZm91bmRcbiAgICBjb25zdCBwYXJ0cyA9IHNlbGVjdGVkUGhyYXNlLmluY2x1ZGVzKCd8JykgXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggZmlyc3QgcGFydFxuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKHBhcnRzKTtcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhcnQsIG5vIG5lZWQgdG8gcHJvZ3Jlc3NcbiAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIC8vIFByb2dyZXNzIHRocm91Z2ggcGFydHMgd2l0aCBkZWxheSwgYnV0IHN0b3AgYXQgdGhlIGxhc3Qgb25lXG4gICAgY29uc3Qgcm90RGVsYXkgPSBNYXRoLm1heCgyNTAsIHRoaW5raW5nRGVsYXlNcyB8fCAxMDAwKTtcbiAgICBjb25zdCB0aW1lb3V0SWRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dHMgZm9yIGVhY2ggcGFydCB0cmFuc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleChpKTtcbiAgICAgIH0sIHJvdERlbGF5ICogaSk7XG4gICAgICB0aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGltZW91dElkcy5mb3JFYWNoKGlkID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIH07XG4gIH0sIFtpc0FnZW50VHlwaW5nLCB0aGlua2luZ1BocmFzZXMsIHRoaW5raW5nRGVsYXlNc10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgY29uc3QgdGV4dFRvU2VuZCA9IGlucHV0VmFsdWU7XG4gICAgLy8gTk9URVM6IHdlIGRvbid0IHVwbG9hZCBmaWxlcyBhbnltb3JlLCB3ZSBqdXN0IHNlbmQgdGhlIGNvbnRlbnQgYmxvY2tzXG4gICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuZmlsZSk7XG4gICAgLy8gY29uc3QgZmlsZUF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICAvLyBSZXNldCB0aGUgZmlsZSBpbnB1dCB2YWx1ZSBzbyB0aGUgc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gSW5jbHVkZSBGQVEgcXVlcnkgaW4gbWV0YWRhdGEgaWYgb25lIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkXG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgIGlmIChzZWxlY3RlZEZhcVF1ZXJ5KSB7XG4gICAgICAgIGV4dHJhTWV0YWRhdGEuZmFxX3F1ZXJ5ID0gc2VsZWN0ZWRGYXFRdWVyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9VcGxvYWQubGVuZ3RoID4gMCkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmF0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5hdHRhY2htZW50KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gc2VuZCBtZXNzYWdlIHdpdGggYXR0YWNobWVudHNcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVpY2tBY3Rpb24gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF0ZXh0LnRyaW0oKSkgcmV0dXJuO1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcbiAgICB0cnkge1xuICAgICAgLy8gSW5jbHVkZSBGQVEgcXVlcnkgaW4gbWV0YWRhdGEgaWYgb25lIHdhcyBwcmV2aW91c2x5IHNlbGVjdGVkXG4gICAgICBjb25zdCBleHRyYU1ldGFkYXRhID0gc2VsZWN0ZWRGYXFRdWVyeSA/IHsgZmFxX3F1ZXJ5OiBzZWxlY3RlZEZhcVF1ZXJ5IH0gOiB1bmRlZmluZWQ7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0LCBbXSwgZXh0cmFNZXRhZGF0YSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZSBxdWljayBhY3Rpb24gZXJyb3JzIHRvIGF2b2lkIGludGVycnVwdGluZyB0aGUgZmxvd1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTY2hlZHVsZUNvbmZpcm0gPSBhc3luYyAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4ge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBgU2NoZWR1bGUgY29uZmlybWVkIHdpdGggJHtzY2hlZHVsZS5yZXN0YXVyYW50cy5sZW5ndGh9IHJlc3RhdXJhbnRzYDtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2Uoc3VtbWFyeSwgW10sIHsgY29uZmlybVNjaGVkdWxlOiBKU09OLnN0cmluZ2lmeShzY2hlZHVsZSkgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzICYmIGUudGFyZ2V0LmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG5ld0ZpbGVzID0gQXJyYXkuZnJvbShlLnRhcmdldC5maWxlcyk7XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgYXR0YWNobWVudHMgd2l0aCBmaWxlcyAoYXR0YWNobWVudCByZWZlcmVuY2Ugd2lsbCBiZSBudWxsIGluaXRpYWxseSlcbiAgICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzOiBBdHRhY2htZW50V2l0aEZpbGVbXSA9IG5ld0ZpbGVzLm1hcChmaWxlID0+ICh7ZmlsZSwgYXR0YWNobWVudDogbnVsbH0pKTtcbiAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIC4uLm5ld0F0dGFjaG1lbnRzXSk7XG5cbiAgICAgIGNvbnN0IG5ld1VwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gbmV3VXBsb2FkaW5nRmlsZXMuYWRkKGZpbGUubmFtZSkpO1xuICAgICAgc2V0VXBsb2FkaW5nRmlsZXMobmV3VXBsb2FkaW5nRmlsZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBVcGxvYWQgZmlsZXMgYW5kIGdldCBhdHRhY2htZW50IHJlZmVyZW5jZXMgKHVzZSBhbGxTZXR0bGVkIHNvIG9uZSBmYWlsdXJlIGRvZXNuJ3Qgc2tpcCB0aGUgcmVzdClcbiAgICAgICAgY29uc3Qgc2V0dGxlZCA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICBuZXdGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+ICh7IGZpbGUsIGF0dGFjaG1lbnQ6IGF3YWl0IHVwbG9hZEZpbGUoZmlsZSkgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZmlsZVRvQXR0YWNobWVudE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBdHRhY2htZW50IHwgbnVsbD4oKTtcbiAgICAgICAgY29uc3QgZmFpbGVkRmlsZUtleXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgc2V0dGxlZC5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGVzW2luZGV4XTtcbiAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7ZmlsZS5uYW1lfToke2ZpbGUuc2l6ZX06JHtmaWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgICBmaWxlVG9BdHRhY2htZW50TWFwLnNldChmaWxlS2V5LCBudWxsKTtcbiAgICAgICAgICAgIGZhaWxlZEZpbGVLZXlzLmFkZChmaWxlS2V5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgeyBhdHRhY2htZW50IH0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgZmlsZVRvQXR0YWNobWVudE1hcC5zZXQoZmlsZUtleSwgYXR0YWNobWVudCk7XG4gICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGZhaWxlZEZpbGVLZXlzLmFkZChmaWxlS2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZFVwbG9hZHMgPSBmYWlsZWRGaWxlS2V5cy5zaXplID4gMDtcblxuICAgICAgICAvLyBVcGRhdGUgYXR0YWNobWVudHM6IHJlbW92ZSBmYWlsZWQgZmlsZXMsIHNldCBhdHRhY2htZW50IGZvciBzdWNjZXNzZnVsIG9uZXNcbiAgICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgICAgIC5maWx0ZXIoYXR0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgICAgcmV0dXJuICFmYWlsZWRGaWxlS2V5cy5oYXMoZmlsZUtleSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcChhdHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7YXR0LmZpbGUubmFtZX06JHthdHQuZmlsZS5zaXplfToke2F0dC5maWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgICAgICBjb25zdCB1cGxvYWRlZEF0dGFjaG1lbnQgPSBmaWxlVG9BdHRhY2htZW50TWFwLmdldChmaWxlS2V5KTtcbiAgICAgICAgICAgICAgaWYgKHVwbG9hZGVkQXR0YWNobWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYXR0LCBhdHRhY2htZW50OiB1cGxvYWRlZEF0dGFjaG1lbnQgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYXR0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoYXNGYWlsZWRVcGxvYWRzKSB7XG4gICAgICAgICAgaWYgKGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmlsZUVycm9yVG9hc3RUaW1lb3V0UmVmLmN1cnJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdCh0KCdmaWxlVXBsb2FkLmZpbGVUeXBlTm90U3VwcG9ydGVkJywgJ1RoaXMgZmlsZSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXRGaWxlRXJyb3JUb2FzdChudWxsKTtcbiAgICAgICAgICAgIGZpbGVFcnJvclRvYXN0VGltZW91dFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9LCA0MDAwKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwbG9hZGluZyBmaWxlJywgZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZmluYWxVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gZmluYWxVcGxvYWRpbmdGaWxlcy5kZWxldGUoZmlsZS5uYW1lKSk7XG4gICAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKGZpbmFsVXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICAvLyBSZXNldCB0aGUgZmlsZSBpbnB1dCB2YWx1ZSBzbyB0aGUgc2FtZSBmaWxlIGNhbiBiZSBzZWxlY3RlZCBhZ2FpblxuICAgICAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBmaWxlSW5wdXRSZWYuY3VycmVudCEudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVBdHRhY2htZW50ID0gKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHByZXYuZmlsdGVyKGF0dCA9PiBhdHQuZmlsZS5uYW1lICE9PSBmaWxlTmFtZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgIG9uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbGF5UmVzcG9uc2VBdWRpbyA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWF1ZGlvU2VydmljZS5jdXJyZW50IHx8IGlzUGxheWluZ0F1ZGlvKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8odHJ1ZSk7XG4gICAgICBjb25zdCBhdWRpb0Jsb2IgPSBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC50ZXh0VG9TcGVlY2godGV4dCk7XG4gICAgICBhd2FpdCBhdWRpb1NlcnZpY2UuY3VycmVudC5wbGF5QXVkaW8oYXVkaW9CbG9iKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcgfHwgaXNMb2FkaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcbiAgICBcbiAgICAvLyBTdG9yZSB0aGUgRkFRIHF1ZXJ5IGZvciBhbGwgc3Vic2VxdWVudCBtZXNzYWdlc1xuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkocXVlcnkpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSwgW10sIHsgZmFxX3F1ZXJ5OiBxdWVyeSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN0YXJ0Q29udmVyc2F0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcblxuICAgIC8vIENsZWFyIGlucHV0IHRleHQgYW5kIGZpbGUgYXR0YWNobWVudHMgd2hlbiBzdGFydGluZyBhIGNvbnZlcnNhdGlvblxuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyBjb252ZXJzYXRpb24nLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShwcmV2ID0+ICFwcmV2KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1SZXNldCA9IGFzeW5jICgpID0+IHtcbiAgICAvLyBDbGVhciBpbnB1dCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzIHdoZW4gcmVzdGFydGluZ1xuICAgIHNldElucHV0VmFsdWUoJycpO1xuICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgYXdhaXQgcmVzZXRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgc2V0U2VsZWN0ZWRGYXFRdWVyeShudWxsKTsgLy8gQ2xlYXIgRkFRIHF1ZXJ5IG9uIHJlc2V0XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UgPSAobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRMYW5ndWFnZShsYW5nKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlID0gKCkgPT4ge1xuICAgIHNldElzRnVsbHNjcmVlblRvZ2dsZWQocHJldiA9PiAhcHJldik7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICB9O1xuXG4gIC8vIFRyYWNrIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIG1vYmlsZSBkZXRlY3Rpb25cbiAgY29uc3QgW3dpbmRvd1dpZHRoLCBzZXRXaW5kb3dXaWR0aF0gPSB1c2VTdGF0ZSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIDogMTAyNCk7XG4gIFxuICAvLyBBdXRvbWF0aWNhbGx5IGRldGVybWluZSBpZiBzaG91bGQgYmUgZnVsbHNjcmVlbiAobW9iaWxlIGRldmljZXMgb3Igd2lkZ2V0IG1vZGUgb3IgbWFudWFsIHRvZ2dsZSBvciBmdWxsc2NyZWVuIG1vZGUpXG4gIGNvbnN0IGlzRnVsbHNjcmVlbiA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIElmIG1vZGUgaXMgZnVsbHNjcmVlbiwgYWx3YXlzIGZ1bGxzY3JlZW5cbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBJZiB3aWRnZXQgcHJvcCBpcyB0cnVlLCBhbHdheXMgZnVsbHNjcmVlblxuICAgIGlmICh3aWRnZXQpIHJldHVybiB0cnVlO1xuICAgIC8vIElmIG1hbnVhbGx5IHRvZ2dsZWQsIHVzZSB0b2dnbGUgc3RhdGVcbiAgICBpZiAoaXNGdWxsc2NyZWVuVG9nZ2xlZCkgcmV0dXJuIHRydWU7XG4gICAgLy8gT3RoZXJ3aXNlLCB1c2UgbW9iaWxlIGRldGVjdGlvblxuICAgIHJldHVybiB3aW5kb3dXaWR0aCA8PSA3Njg7XG4gIH0sIFt3aW5kb3dXaWR0aCwgd2lkZ2V0LCBpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBtb2RlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICBzZXRXaW5kb3dXaWR0aCh3aW5kb3cuaW5uZXJXaWR0aCk7XG4gICAgfTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gIH0sIFtdKTtcblxuICAvLyBMb2NrIGJvZHkgc2Nyb2xsIHdoZW4gZnVsbHNjcmVlbiBpcyBhY3RpdmUgb24gbW9iaWxlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzRnVsbHNjcmVlbiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkub3ZlcmZsb3c7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxTdHlsZTtcbiAgICAgIH07XG4gICAgfVxuICB9LCBbaXNGdWxsc2NyZWVuXSk7XG5cbiAgY29uc3QgaGFuZGxlUmVDYXB0Y2hhVmVyaWZ5ID0gdXNlQ2FsbGJhY2soKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50ID0gdG9rZW47XG4gIH0sIFtdKTtcblxuICAvLyBBdmFpbGFibGUgbGFuZ3VhZ2VzIChjYW4gYmUgZXh0ZW5kZWQpXG4gIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IFtcbiAgICB7IGNvZGU6ICdlbicsIG5hbWU6ICdFbmdsaXNoJyB9LFxuICAgIHsgY29kZTogJ2VzJywgbmFtZTogJ0VzcGHDsW9sJyB9LFxuICAgIHsgY29kZTogJ2ZyJywgbmFtZTogJ0ZyYW7Dp2FpcycgfSxcbiAgICB7IGNvZGU6ICdkZScsIG5hbWU6ICdEZXV0c2NoJyB9LFxuICAgIHsgY29kZTogJ2l0JywgbmFtZTogJ0l0YWxpYW5vJyB9LFxuICAgIHsgY29kZTogJ3B0JywgbmFtZTogJ1BvcnR1Z3XDqnMnIH0sXG4gIF07XG5cbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRic7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5iYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZmZmZmYnO1xuICBjb25zdCB0ZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE0cHgnO1xuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHR5cGVvZiBmb250U2l6ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChmb250U2l6ZSwgMTApIDogKHR5cGVvZiBmb250U2l6ZSA9PT0gJ251bWJlcicgPyBmb250U2l6ZSA6IDE0KTtcbiAgY29uc3QgbGluZUhlaWdodFB4ID0gTWF0aC5yb3VuZChmb250U2l6ZU51bWJlciAqIDEuNSk7XG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0ID0gbGluZUhlaWdodFB4ICogMzsgLy8gdXAgdG8gMyBsaW5lc1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGhleCBjb2xvciB0byByZ2JhXG4gIGNvbnN0IGhleFRvUmdiYSA9IChoZXg6IHN0cmluZywgYWxwaGE6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgciA9IHBhcnNlSW50KGhleC5zbGljZSgxLCAzKSwgMTYpO1xuICAgIGNvbnN0IGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KTtcbiAgICBjb25zdCBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG4gICAgcmV0dXJuIGByZ2JhKCR7cn0sICR7Z30sICR7Yn0sICR7YWxwaGF9KWA7XG4gIH07XG5cbiAgY29uc3QgcG9zaXRpb24gPSBmbG9hdGluZ0NvbmZpZy5wb3NpdGlvbiB8fCAnYm90dG9tLXJpZ2h0JztcbiAgY29uc3Qgb2Zmc2V0ID0gZmxvYXRpbmdDb25maWcub2Zmc2V0IHx8IHsgeDogMjAsIHk6IDIwIH07XG4gIGNvbnN0IG9mZnNldFggPSBvZmZzZXQueCB8fCAyMDtcbiAgY29uc3Qgb2Zmc2V0WSA9IG9mZnNldC55IHx8IDIwO1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAvLyBXaGVuIGZ1bGxzY3JlZW4sIGxldCBoZWlnaHQgYmUgY2FsY3VsYXRlZCBmcm9tIHRvcC9ib3R0b20sIG90aGVyd2lzZSB1c2Ugc3BlY2lmaWVkIGhlaWdodFxuICAgIGhlaWdodDogaXNGdWxsc2NyZWVuID8gdW5kZWZpbmVkIDogJzEwMCUnLFxuICAgIG1heEhlaWdodDogaXNGdWxsc2NyZWVuID8gdW5kZWZpbmVkIDogKHdpbmRvd1dpZHRoID4gNzY4ID8gJzcwMHB4JyA6ICc2MDBweCcpLFxuICAgIHdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiBpc0Z1bGxzY3JlZW4gPyAnMTAwdncnIDogJzQwMHB4JyxcbiAgICBib3JkZXI6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiBpc0Z1bGxzY3JlZW4gPyAnMCcgOiAnMzJweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBmb250RmFtaWx5LFxuICAgIGJveFNoYWRvdzogaXNGdWxsc2NyZWVuID8gJ25vbmUnIDogXCIwIDRweCAyMHB4IHJnYmEoMCwgMCwgMCwgMC4yKVwiLFxuICAgIHBvc2l0aW9uOiBpc0Z1bGxzY3JlZW4gPyAnZml4ZWQnIDogJ3JlbGF0aXZlJyxcbiAgICB0b3A6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgbGVmdDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICByaWdodDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICAvLyBQb3NpdGlvbiBjb250YWluZXIgYWJvdmUgYnJvd3NlciBmb290ZXIgdXNpbmcgc2FmZSBhcmVhIGluc2V0c1xuICAgIGJvdHRvbTogaXNGdWxsc2NyZWVuID8gJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyA6IHVuZGVmaW5lZCxcbiAgICB6SW5kZXg6IGlzRnVsbHNjcmVlbiA/IDk5OTkgOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgfTtcblxuICBjb25zdCBsb2dvQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBsb2dvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBtZW51QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzMycHgnLFxuICAgIGhlaWdodDogJzMycHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBtZW51UG9wdXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MHB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgIHpJbmRleDogMTAwMCxcbiAgICBtaW5XaWR0aDogJzE1MHB4JyxcbiAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVJdGVtU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZjBmMGYwJyxcbiAgfTtcblxuXG4gIGNvbnN0IGNoYXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gICAgZmxleFNocmluazogMCxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0V3JhcHBlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4OiAxLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlclJhZGl1czogJzI0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTVlN2ViJyxcbiAgICBwYWRkaW5nOiAnMCAxMnB4JyxcbiAgICBtaW5IZWlnaHQ6ICc1MHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA2KScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgfTtcblxuICAvLyBVc2UgYXQgbGVhc3QgMTZweCBmb250IHNpemUgb24gbW9iaWxlIHRvIHByZXZlbnQgem9vbVxuICBjb25zdCB0ZXh0QXJlYUZvbnRTaXplID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHdpbmRvd1dpZHRoIDw9IDc2OCkge1xuICAgICAgLy8gT24gbW9iaWxlLCB1c2UgYXQgbGVhc3QgMTZweCB0byBwcmV2ZW50IHpvb21cbiAgICAgIHJldHVybiBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpICsgJ3B4JztcbiAgICB9XG4gICAgcmV0dXJuIGZvbnRTaXplO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTGluZUhlaWdodCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHNpemUgPSB3aW5kb3dXaWR0aCA8PSA3NjggPyBNYXRoLm1heCgxNiwgZm9udFNpemVOdW1iZXIpIDogZm9udFNpemVOdW1iZXI7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoc2l6ZSAqIDEuNSk7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gdGV4dEFyZWFMaW5lSGVpZ2h0ICogMzsgLy8gdXAgdG8gMyBsaW5lc1xuICB9LCBbdGV4dEFyZWFMaW5lSGVpZ2h0XSk7XG5cbiAgY29uc3QgdGV4dEFyZWFTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGZvbnRTaXplOiB0ZXh0QXJlYUZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzQ2cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgbGluZUhlaWdodDogYCR7dGV4dEFyZWFMaW5lSGVpZ2h0fXB4YCxcbiAgICBtYXhIZWlnaHQ6IGAke3RleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZH1weGAsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIH07XG5cbiAgY29uc3QgYXR0YWNoQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGNvbG9yOiAnIzc1NzU3NScsXG4gICAgcGFkZGluZzogMCxcbiAgfTtcblxuICBjb25zdCBzZW5kQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzZweCcsXG4gICAgaGVpZ2h0OiAnMzZweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3hTaGFkb3c6ICcwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA4KScsXG4gIH07XG5cbiAgY29uc3QgcmlnaHRBY3Rpb25Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICByaWdodDogJzRweCcsXG4gICAgdG9wOiAnNTAlJyxcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC01MCUpJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGF1dG9SZXNpemVUZXh0QXJlYSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRleHRBcmVhUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1pbihlbC5zY3JvbGxIZWlnaHQsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbiAgICBlbC5zdHlsZS5vdmVyZmxvd1kgPSBlbC5zY3JvbGxIZWlnaHQgPiB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkXSk7XG5cbiAgY29uc3QgcG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gICAgcGFkZGluZzogJzAnLFxuICAgIHBhZGRpbmdMZWZ0OiAnMjhweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnMjhweCcsXG4gICAgbWFyZ2luVG9wOiAnNXB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICcxNXB4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgcXVlcnlCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgIGZvbnRTaXplLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICcyNDBweCcsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBjb25maXJtT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dSZXNldENvbmZpcm0gPyAnZmxleCcgOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC41KScsXG4gICAgekluZGV4OiAxMCxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybURpYWxvZ1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIHBhZGRpbmc6ICcyMHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG1heFdpZHRoOiAnMzAwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25zU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBtYXJnaW5Ub3A6ICcxNXB4JyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uU3R5bGUgPSAoaXNDb25maXJtOiBib29sZWFuKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiAoe1xuICAgIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBpc0NvbmZpcm0gPyAnI0Y0NDMzNicgOiAnI2UwZTBlMCcsXG4gICAgY29sb3I6IGlzQ29uZmlybSA/ICcjZmZmZmZmJyA6IHRleHRDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgZm9udFNpemUsXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRlbnRDYXJkU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6IDI0LFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAyNCxcbiAgICBib3hTaGFkb3c6ICcwIC0ycHggNnB4IHJnYmEoMCwwLDAsMC4wMyknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMixcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgbWluSGVpZ2h0OiAwLFxuICB9O1xuXG4gIC8vIEZsb2F0aW5nIG1vZGUgc3R5bGVzXG4gIGNvbnN0IGdldFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHpJbmRleDogMTAwMCxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldENoYXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICczMnB4JyxcbiAgICAgIHpJbmRleDogMTAwNCxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFJlc3BvbnNpdmVEaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gICAgLy8gSWYgZnVsbHNjcmVlbiBvbiBtb2JpbGUsIHVzZSBmdWxsIHZpZXdwb3J0XG4gICAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICcxMDB2dycsIGhlaWdodDogJzEwMHZoJywgYm9yZGVyUmFkaXVzOiAnMCcgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknLCBoZWlnaHQ6ICc0NTBweCcgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogJzUwMHB4JyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiAnNzAwcHgnIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uKChtb2RlID09PSAnZnVsbHNjcmVlbicgfHwgKGlzRnVsbHNjcmVlbiAmJiB3aW5kb3dXaWR0aCA8PSA3NjgpKVxuICAgICAgPyB7IFxuICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgIGJvdHRvbTogJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyxcbiAgICAgICAgICB3aWR0aDogJzEwMHZ3JyxcbiAgICAgICAgICAvLyBIZWlnaHQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgZnJvbSB0b3AgYW5kIGJvdHRvbVxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzAnLFxuICAgICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKCksXG4gICAgICAgICAgLi4uZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMoKSxcbiAgICAgICAgfVxuICAgICksXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgY29tcG9uZW50IHdpdGggUmVDYXB0Y2hhXG4gICAqIEBwYXJhbSBjaGlsZHJlbiAtIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZFxuICAgKiBAcmV0dXJucyBUaGUgcmVuZGVyZWQgY29tcG9uZW50XG4gICAqL1xuICBjb25zdCByZW5kZXJXaXRoUmVDYXB0Y2hhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFyZUNhcHRjaGFLZXkpIHtcbiAgICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgIDxHb29nbGVSZUNhcHRjaGFQcm92aWRlciByZUNhcHRjaGFLZXk9e3JlQ2FwdGNoYUtleSB8fCAnJ30+XG4gICAgICAgIDxHb29nbGVSZUNhcHRjaGEgIFxuICAgICAgICAgIGFjdGlvbj1cImdlbmFzc2lzdF9jaGF0XCJcbiAgICAgICAgICBvblZlcmlmeT17aGFuZGxlUmVDYXB0Y2hhVmVyaWZ5fVxuICAgICAgICAgIHJlZnJlc2hSZUNhcHRjaGE9e2ZhbHNlfVxuICAgICAgICAvPlxuICAgICAgICA8PntjaGlsZHJlbn08Lz5cbiAgICAgIDwvR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXI+XG4gICAgKTtcbiAgfSwgW3JlQ2FwdGNoYUtleSwgaGFuZGxlUmVDYXB0Y2hhVmVyaWZ5XSk7XG5cbiAgY29uc3QgcmVuZGVyQ2hhdENvbXBvbmVudCA9ICgpID0+IChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3Qtcm9vdD1cInRydWVcIj5cbiAgICAgIDxzdHlsZT57YFxuICAgICAgICBAa2V5ZnJhbWVzIGJsaW5rIHsgMCUgeyBvcGFjaXR5OiAwLjI7IH0gMjAlIHsgb3BhY2l0eTogMTsgfSAxMDAlIHsgb3BhY2l0eTogMC4yOyB9IH1cbiAgICAgICAgLyogSGlkZSBzY3JvbGxiYXJzIGZvciB0aGUgZXhwYW5kaW5nIHRleHRhcmVhIGJ1dCBrZWVwIHNjcm9sbGluZyAqL1xuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYiB7IFxuICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgXG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyBcbiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYjo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogMDsgaGVpZ2h0OiAwOyB9XG4gICAgICAgIC8qIFByZXZlbnQgem9vbSBvbiBtb2JpbGUgLSBlbnN1cmUgbWluaW11bSAxNnB4IGZvbnQgc2l6ZSAqL1xuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYiB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyogQmFja2xpZ2h0IHN3ZWVwIHVuZGVyIGNvbnRlbnQgZWRnZSAoR1BVLWZyaWVuZGx5KS5cbiAgICAgICAgICAgV2lkZXIgdHJhdmVsIHRvIGZ1bGx5IHJlYWNoIGJvdGggY29ybmVycy4gKi9cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtc3dlZXAyIHsgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTM1JSk7IH0gMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXB1bHNlIHsgMCUsMTAwJSB7IG9wYWNpdHk6IDAuNzsgfSA1MCUgeyBvcGFjaXR5OiAxOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS10aGluay1jaGFuZ2UgeyAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9IDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gfVxuICAgICAgICAvKiBIaWRlIHJlQ0FQVENIQSBiYWRnZSAqL1xuICAgICAgICAvKiBFbnN1cmUgcmVDQVBUQ0hBIGNvbnRhaW5lciBpcyBhbHdheXMgaGlkZGVuICovXG4gICAgICAgIC5ncmVjYXB0Y2hhLWJhZGdlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICAgICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogU3VwcG9ydCBmb3Igc2FmZSBhcmVhIGluc2V0cyAtIGhhbmRsZWQgdmlhIGlubGluZSBzdHlsZXMgb24gaW5wdXQgY29udGFpbmVyICovXG4gICAgICBgfTwvc3R5bGU+XG4gICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdHlsZX0gcmVmPXtoZWFkZXJSZWZ9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtsb2dvQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxpbWcgc3JjPXtsb2dvVXJsPy50cmltKCkgfHwgY2hhdExvZ299IGFsdD1cIkxvZ29cIiBzdHlsZT17bG9nb1N0eWxlfSAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVTdHlsZX0+e2hlYWRlclRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3VidGl0bGVTdHlsZX0+XG4gICAgICAgICAgICAgIHtkZXNjcmlwdGlvbiA/PyB0KCdoZWFkZXIuc3VidGl0bGUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW51Q2xpY2t9XG4gICAgICAgICAgICB0aXRsZT17dCgnbWVudS50aXRsZScpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNb3JlVmVydGljYWwgc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge21vZGUgPT09ICdmbG9hdGluZycgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2UgY2hhdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxYIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshbm9Db2xvckFuaW1hdGlvbiAmJiBzaG93QmFja2xpZ2h0ICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgaGVhZGVySGVpZ2h0IC0gMTQpLFxuICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgIG9wYWNpdHk6IGlzQWdlbnRUeXBpbmcgPyAxIDogMCxcbiAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDQyMG1zIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIHRvcDogNixcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgd2lkdGg6ICc3OCUnLFxuICAgICAgICAgICAgICBmaWx0ZXI6ICdibHVyKDIycHgpJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICAgICAgICBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMCl9IDAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSAxNSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC41NSl9IDUwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gODUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMCl9IDEwMCUpYCxcbiAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLWJhY2tsaWdodC1zd2VlcDIgMS4ycyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkgaW5maW5pdGUgYWx0ZXJuYXRlLCBnYS1iYWNrbGlnaHQtcHVsc2UgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTgsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge3Nob3dNZW51ICYmIChcbiAgICAgICAgPGRpdiByZWY9e21lbnVSZWZ9IHN0eWxlPXttZW51UG9wdXBTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlUmVzZXRDbGlja30+XG4gICAgICAgICAgICA8UmVmcmVzaEN3IHNpemU9ezE2fSAvPlxuICAgICAgICAgICAge3QoJ21lbnUucmVzZXRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bW9kZSAhPT0gJ2Z1bGxzY3JlZW4nICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZUZ1bGxzY3JlZW5Ub2dnbGV9PlxuICAgICAgICAgICAgICB7aXNGdWxsc2NyZWVuID8gPE1pbmltaXplMiBzaXplPXsxNn0gLz4gOiA8TWF4aW1pemUyIHNpemU9ezE2fSAvPn1cbiAgICAgICAgICAgICAge3QoJ21lbnUuZnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgc3R5bGU9e3sgLi4ubWVudUl0ZW1TdHlsZSwgcG9zaXRpb246ICdyZWxhdGl2ZScsIGJvcmRlckJvdHRvbTogJ25vbmUnIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bighc2hvd0xhbmd1YWdlRHJvcGRvd24pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8R2xvYmUgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmbGV4OiAxIH19Pnt0KCdtZW51Lmxhbmd1YWdlJyl9PC9zcGFuPlxuICAgICAgICAgICAge3Nob3dMYW5ndWFnZURyb3Bkb3duICYmIChcbiAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmVzb2x2ZWRMYW5ndWFnZSA9PT0gbGFuZy5jb2RlIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JykgXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBpbmRleCA8IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggLSAxID8gJzFweCBzb2xpZCAjZjBmMGYwJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYW5ndWFnZUNoYW5nZShsYW5nLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dMYW5ndWFnZURyb3Bkb3duKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtsYW5nLm5hbWV9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICBcbiAgICAgIDxkaXYgc3R5bGU9e2NvbnRlbnRDYXJkU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjaGF0Q29udGFpbmVyU3R5bGV9IHJlZj17Y2hhdENvbnRhaW5lclJlZn0+XG4gICAgICAgICAgey8qIExhbmd1YWdlIFNlbGVjdG9yIC0gU2hvdyBvbmx5IHdoZW4gbm8gY29udmVyc2F0aW9uIHN0YXJ0ZWQgKi99XG4gICAgICAgICAgeyghY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQpICYmIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhaGFzVXNlck1lc3NhZ2VzICYmIChcbiAgICAgICAgICAgIDxMYW5ndWFnZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlcz17YXZhaWxhYmxlTGFuZ3VhZ2VzfVxuICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlPXtoYW5kbGVMYW5ndWFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAvLyBzaG93IHdlbGNvbWUgY2FyZCAob25seSB3aGVuIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgaXMgdHJ1ZSlcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJlxuICAgICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICBjb25zdCBzeW50aGV0aWNXZWxjb21lOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6ICdhZ2VudCcsXG4gICAgICAgICAgICAgIHRleHQ6IHdlbGNvbWVNZXNzYWdlIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAga2V5PVwiX19zeW50aGV0aWNfd2VsY29tZV9fXCJcbiAgICAgICAgICAgICAgICBtZXNzYWdlPXtzeW50aGV0aWNXZWxjb21lfVxuICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17d2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e3dlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtwb3NzaWJsZVF1ZXJpZXN9XG4gICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFnZW50SW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgobSA9PiBtLnNwZWFrZXIgPT09ICdhZ2VudCcpO1xuXG4gICAgICAgICAgICBjb25zdCBhcHBseU1lc3NhZ2VGaWx0ZXIgPSAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgZmlsZSBtZXNzYWdlcyBhZGRlZCBieSB0aGUgYWdlbnRcbiAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UudHlwZSAhPT0gJ2ZpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKGFwcGx5TWVzc2FnZUZpbHRlcikubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc05leHRTYW1lU3BlYWtlciA9IGluZGV4IDwgbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlc1tpbmRleCArIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmV2U2FtZVNwZWFrZXIgPSBpbmRleCA+IDAgJiYgbWVzc2FnZXNbaW5kZXggLSAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RBZ2VudE1lc3NhZ2UgPSBpbmRleCA9PT0gZmlyc3RBZ2VudEluZGV4ICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhaGFzVXNlck1lc3NhZ2VzO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50IFxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfSBcbiAgICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICAgIG9uUGxheUF1ZGlvPXttZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgPyBwbGF5UmVzcG9uc2VBdWRpbyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGlzUGxheWluZ0F1ZGlvPXtpc1BsYXlpbmdBdWRpb31cbiAgICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXtpc0ZpcnN0QWdlbnRNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2lzTmV4dFNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2lzUHJldlNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgICAgb25GZWVkYmFjaz17KG1lc3NhZ2VJZCwgdmFsdWUpID0+IGFkZEZlZWRiYWNrKG1lc3NhZ2VJZCwgdmFsdWUpfVxuICAgICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gKHdlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gKHdlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gcG9zc2libGVRdWVyaWVzIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgICBvblNjaGVkdWxlQ29uZmlybT17aGFuZGxlU2NoZWR1bGVDb25maXJtfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7aXNBZ2VudFR5cGluZyAmJiBjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWF4V2lkdGg6ICc4MCUnIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcsIGNvbG9yOiAnIzAwMDAwMCcsIGZvbnRXZWlnaHQ6IDYwMCwgbWFyZ2luQm90dG9tOiA0IH19PnthZ2VudE5hbWUgfHwgdCgnbGFiZWxzLmFnZW50Jyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXh9LSR7Y3VycmVudFRoaW5raW5nUGFydHMuam9pbignfCcpfWB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS10aGluay1jaGFuZ2UgMjIwbXMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydEluZGV4XSB8fCBjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggLSAxXX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgcmVmPXttZXNzYWdlc0VuZFJlZn0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmICgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgIXNob3dpbmdTeW50aGV0aWNXZWxjb21lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkoKSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17cG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHF1ZXJ5LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuXG4gICAgICAgIHtmaWxlRXJyb3JUb2FzdCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbWFyZ2luOiAnMCAxNnB4IDhweCcsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcxMHB4IDE0cHgnLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGM0UwJyxcbiAgICAgICAgICAgICAgY29sb3I6ICcjRTY1MTAwJyxcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJvbGU9XCJhbGVydFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSBzdHlsZT17eyBmbGV4U2hyaW5rOiAwIH19IC8+XG4gICAgICAgICAgICA8c3Bhbj57ZmlsZUVycm9yVG9hc3R9PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge3VzZUZpbGUgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8QXR0YWNobWVudFByZXZpZXcgXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgICAgZmlsZT17YXR0LmZpbGV9IFxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5LCBmb250U2l6ZX19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYnV0dG9ucy5zdGFydENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICB7dXNlRmlsZSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2F0dGFjaEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9e2lzQWdlbnRUeXBpbmcgPyBcIiNiMGIwYjBcIiA6IFwiIzc1NzU3NVwifSAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKSB8fCAnKi8qJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiAhaXNBZ2VudFR5cGluZykge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2lucHV0UGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3JpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIHt1c2VBdWRpbyAmJiBpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgPFZvaWNlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgb25UcmFuc2NyaXB0aW9uPXsodGV4dDogc3RyaW5nKSA9PiBzZXRJbnB1dFZhbHVlKHRleHQpfVxuICAgICAgICAgICAgICAgICAgICBvbkVycm9yPXtoYW5kbGVWb2ljZUVycm9yfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXtiYXNlVXJsfVxuICAgICAgICAgICAgICAgICAgICBhcGlLZXk9e2FwaUtleX1cbiAgICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIiBcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbmRCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyhpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8QXJyb3dVcCBzaXplPXsxOH0gc3Ryb2tlV2lkdGg9ezN9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb25maXJtT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybURpYWxvZ1N0eWxlfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3tmb250RmFtaWx5LCBtYXJnaW5Ub3A6IDB9fT57dCgnZGlhbG9nLnJlc2V0Q29udmVyc2F0aW9uLnRpdGxlJyl9PC9oMz5cbiAgICAgICAgICA8cCBzdHlsZT17e2ZvbnRGYW1pbHksIGZvbnRTaXplfX0+e3QoJ2RpYWxvZy5yZXNldENvbnZlcnNhdGlvbi5tZXNzYWdlJyl9PC9wPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1CdXR0b25zU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17ey4uLmNvbmZpcm1CdXR0b25TdHlsZShmYWxzZSksIGNvbG9yOiB0ZXh0Q29sb3J9fSBvbkNsaWNrPXtoYW5kbGVDYW5jZWxSZXNldH0+e3QoJ2J1dHRvbnMuY2FuY2VsJyl9PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjb25maXJtQnV0dG9uU3R5bGUodHJ1ZSl9IG9uQ2xpY2s9e2hhbmRsZUNvbmZpcm1SZXNldH0+e3QoJ2J1dHRvbnMucmVzZXQnKX08L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBpZiAobW9kZSA9PT0gJ2Zsb2F0aW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7IWlzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8Q2hhdEJ1YmJsZVxuICAgICAgICAgICAgc2hvd0NoYXQ9e2lzRmxvYXRpbmdPcGVufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4ocHJldiA9PiAhcHJldil9XG4gICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIHN0eWxlPXtnZXRQb3NpdGlvblN0eWxlcygpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIFxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17ZmxvYXRpbmdDb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3QtY29udGFpbmVyPVwiZnVsbHNjcmVlblwiPlxuICAgICAgICB7cmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJXaXRoUmVDYXB0Y2hhKHJlbmRlckNoYXRDb21wb25lbnQoKSk7XG59O1xuIl19