@nlabs/lex 1.52.15 → 1.52.17

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.
@@ -58,6 +58,7 @@ export interface LexConfigType {
58
58
  }
59
59
  export type Config = LexConfigType;
60
60
  export declare const defaultConfigValues: LexConfigType;
61
+ export declare const getPackageDir: () => string;
61
62
  export declare const getTypeScriptConfigPath: (configName: string) => string;
62
63
  export declare class LexConfig {
63
64
  static config: LexConfigType;
package/lib/LexConfig.js CHANGED
@@ -79,7 +79,7 @@ export const defaultConfigValues = {
79
79
  staticPath: './src/static'
80
80
  }
81
81
  };
82
- const getPackageDir = ()=>{
82
+ export const getPackageDir = ()=>{
83
83
  const cwd = process.cwd();
84
84
  const currentPkgPath = pathResolve(cwd, 'package.json');
85
85
  if (existsSync(currentPkgPath)) {
@@ -414,4 +414,4 @@ _define_property(LexConfig, "config", {
414
414
  ...defaultConfigValues
415
415
  });
416
416
 
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcm9vdHM/OiBzdHJpbmdbXTtcbiAgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuICB0cmFuc2Zvcm0/OiBSZWNvcmQ8c3RyaW5nLCBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0+O1xuICB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBtb2R1bGVOYW1lTWFwcGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZXh0ZW5zaW9uc1RvVHJlYXRBc0VzbT86IHN0cmluZ1tdO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VicGFja0NvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGVudHJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG91dHB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtb2R1bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcGx1Z2lucz86IHVua25vd25bXTtcbiAgc3RhdGljUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUNvbmZpZyB7XG4gIHByb3ZpZGVyPzogJ2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBlbnRyeUhUTUw/OiBzdHJpbmc7XG4gIGVudHJ5SnM/OiBzdHJpbmc7XG4gIGVudj86IG9iamVjdDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIGplc3Q/OiBKZXN0Q29uZmlnO1xuICBsaWJyYXJ5TmFtZT86IHN0cmluZztcbiAgbGlicmFyeVRhcmdldD86IHN0cmluZztcbiAgb3V0cHV0RmlsZT86IHN0cmluZztcbiAgb3V0cHV0RnVsbFBhdGg/OiBzdHJpbmc7XG4gIG91dHB1dEhhc2g/OiBib29sZWFuO1xuICBvdXRwdXRQYXRoPzogc3RyaW5nO1xuICBwYWNrYWdlTWFuYWdlcj86ICducG0nIHwgJ3lhcm4nO1xuICBwcmVzZXQ/OiAnd2ViJyB8ICdub2RlJyB8ICdsYW1iZGEnIHwgJ21vYmlsZSc7XG4gIHNvdXJjZUZ1bGxQYXRoPzogc3RyaW5nO1xuICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICBzd2M/OiBTV0NPcHRpb25zO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIGplc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIzJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmNvbnN0IGdldFBhY2thZ2VEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgY3VycmVudFBrZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGN1cnJlbnRQa2dQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhjdXJyZW50UGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgcmV0dXJuIGN3ZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGN3ZDtcbiAgICB9XG4gIH1cblxuICBsZXQgc2VhcmNoRGlyID0gY3dkO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKHNlYXJjaERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuXG4gICAgICAgIGlmKCFwa2cud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBzZWFyY2hEaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoc2VhcmNoRGlyKTtcblxuICAgIGlmKHBhcmVudCA9PT0gc2VhcmNoRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VhcmNoRGlyID0gcGFyZW50O1xuICB9XG5cbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGZpbmRGaWxlVXAuc3luYyhgbGV4LmNvbmZpZy4ke2Zvcm1hdH1gLCBjd2QsIDUpO1xuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgcmV0dXJuIGRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN3ZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdEJ1aWxkQ29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocm9vdEJ1aWxkQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RCdWlsZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcubGludC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RMaW50Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHJvb3RMaW50Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RMaW50Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy50ZXN0Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290VGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3Qgcm9vdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocm9vdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHJvb3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShsZXhEaXIsIGNvbmZpZ05hbWUpO1xufTtcblxuZXhwb3J0IGNsYXNzIExleENvbmZpZyB7XG4gIHN0YXRpYyBjb25maWc6IExleENvbmZpZ1R5cGUgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZ1ZhbHVlc1xuICB9O1xuXG4gIHN0YXRpYyBzZXQgdXNlVHlwZXNjcmlwdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIExleENvbmZpZy5jb25maWcudXNlVHlwZXNjcmlwdCA9IHZhbHVlO1xuICAgIGNvbnN0IHtlbnRyeUpzLCBzb3VyY2VGdWxsUGF0aCwgdGFyZ2V0RW52aXJvbm1lbnR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGlmKGVudHJ5SnMgPT09ICdpbmRleC5qcycgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCwgJ2luZGV4LnRzeCcpO1xuICAgICAgY29uc3QgaGFzSW5kZXhUc3g6IGJvb2xlYW4gPSBleGlzdHNTeW5jKGluZGV4UGF0aCk7XG5cbiAgICAgIGlmKGhhc0luZGV4VHN4KSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50c3gnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MucGFyc2VyID0ge1xuICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICB0c3g6IHRydWVcbiAgICB9O1xuXG4gICAgaWYodGFyZ2V0RW52aXJvbm1lbnQgPT09ICd3ZWInKSB7XG4gICAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MudHJhbnNmb3JtID0ge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKHVzZVR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSB1c2VUeXBlc2NyaXB0O1xuICAgIH1cblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvdXRwdXRGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZUZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMub3V0cHV0UGF0aCA9IG91dHB1dFBhdGg7XG4gICAgICBwYXJhbXMub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBvdXRwdXRQYXRoKTtcbiAgICB9IGVsc2UgaWYocGFyYW1zLm91dHB1dFBhdGggJiYgIXBhcmFtcy5vdXRwdXRGdWxsUGF0aCkge1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgcGFyYW1zLm91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnNvdXJjZVBhdGggPSBzb3VyY2VQYXRoO1xuICAgICAgcGFyYW1zLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5zb3VyY2VQYXRoICYmICFwYXJhbXMuc291cmNlRnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHBhcmFtcy5zb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZih0eXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy51c2VUeXBlc2NyaXB0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZihlbnZpcm9ubWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudGFyZ2V0RW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudCA9PT0gJ3dlYicgPyAnd2ViJyA6ICdub2RlJztcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVudi5MRVhfQ09ORklHID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB7XG4gICAgICAgIC4uLkxleENvbmZpZy51cGRhdGVDb25maWcocGFyYW1zKSxcbiAgICAgICAgY29tbWFuZE5hbWU6IGNtZFtuYW1lUHJvcGVydHldLFxuICAgICAgICBpc1N0YXRpYzogY21kLnN0YXRpY1xuICAgICAgfSwgbnVsbCwgMFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGFyc2VDb25maWcoY21kLCBpc1Jvb3Q6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgbGV4Q29uZmlnLCBsZXhDb25maWdOYW1lLCBxdWlldCwgdHlwZXNjcmlwdCwgZGVidWcgPSBmYWxzZX0gPSBjbWQ7XG4gICAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gICAgY29uc3QgY29uZmlnQmFzZU5hbWU6IHN0cmluZyA9IGxleENvbmZpZ05hbWUgfHwgJ2xleC5jb25maWcnO1xuICAgIGxldCBjb25maWdQYXRoOiBzdHJpbmcgPSBsZXhDb25maWcgfHwgJyc7XG4gICAgbGV0IGNvbmZpZ0V4aXN0czogYm9vbGVhbiA9IGxleENvbmZpZyA/IGV4aXN0c1N5bmMoY29uZmlnUGF0aCkgOiBmYWxzZTtcblxuICAgIGlmKCFjb25maWdQYXRoIHx8ICFjb25maWdFeGlzdHMpIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgU2VhcmNoaW5nIGZvciBjb25maWcgZmlsZXMgd2l0aCBiYXNlIG5hbWU6ICR7Y29uZmlnQmFzZU5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgICBjb25zdCBwb3RlbnRpYWxQYXRoID0gaXNSb290XG4gICAgICAgICAgPyBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApXG4gICAgICAgICAgOiByZWxhdGl2ZUZpbGVQYXRoKGAke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gLCBjd2QpO1xuXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBDaGVja2luZyBmb3IgY29uZmlnIGZpbGU6ICR7cG90ZW50aWFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgICAgICBjb25maWdQYXRoID0gcG90ZW50aWFsUGF0aDtcbiAgICAgICAgICBjb25maWdFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnRXhpc3RzKSB7XG4gICAgICBsb2coYFVzaW5nICR7Y2xpTmFtZX0gY29uZmlndXJhdGlvbiBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ25vdGUnLCBxdWlldCk7XG4gICAgICBjb25zdCBleHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGNvbmZpZ1BhdGgpO1xuXG4gICAgICBpZihleHQgPT09ICcuanNvbicpIHtcbiAgICAgICAgY29uc3QgY29uZmlnQ29udGVudDogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGY4Jyk7XG5cbiAgICAgICAgaWYoY29uZmlnQ29udGVudCkge1xuICAgICAgICAgIGxldCBjb25maWdKc29uOiBMZXhDb25maWdUeXBlO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSBKU09OLnBhcnNlKGNvbmZpZ0NvbnRlbnQpPy5kZWZhdWx0IHx8IHt9O1xuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIHBhcnNlIEpTT04gY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgY29uZmlnSnNvbiA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBjb25maWdKc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvbmZpZyBmaWxlIG1hbGZvcm1lZCwgJHtjb25maWdQYXRofWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKFsnLmpzJywgJy5tanMnLCAnLmNqcycsICcudHMnXS5pbmNsdWRlcyhleHQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGxleEN1c3RvbUNvbmZpZztcblxuICAgICAgICAgIGlmKGV4dCA9PT0gJy5janMnKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gbmV3IFVSTChgZmlsZTovLy8ke3BhdGhSZXNvbHZlKGNvbmZpZ1BhdGgpfWApLmhyZWY7XG5cbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgTG9hZGluZyBDb21tb25KUyBjb25maWcgZnJvbTogJHtmaWxlVXJsfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4Q3VzdG9tQ29uZmlnID0gYXdhaXQgaW1wb3J0KGZpbGVVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgRVNNL1RTIGNvbmZpZyBmcm9tOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb25maWcgPSBsZXhDdXN0b21Db25maWcuZGVmYXVsdCB8fCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBMb2FkZWQgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMil9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoIWNvbmZpZykge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IFdhcm5pbmc6IENvbmZpZyBmaWxlIGxvYWRlZCBidXQgbm8gY29uZmlndXJhdGlvbiBmb3VuZGAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBjb25maWcgfHwge30pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtdXN0IGJlIGEgSlMsIENKUywgTUpTLCBUUywgb3IgSlNPTiBmaWxlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKCdObyBjb25maWcgZmlsZSBmb3VuZC4gVXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9ICEhdHlwZXNjcmlwdDtcbiAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG4gICAgY29uc3QgdHNjb25maWdQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnLi90c2NvbmZpZy5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1BhdGgpKSB7XG4gICAgICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG4gICAgICBjb25zdCBiYXNlQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLmJhc2UuanNvbicpO1xuICAgICAgY29uc3QgdGVtcGxhdGVDb25maWdQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVtcGxhdGUuanNvbicpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGV4aXN0c1N5bmMoYmFzZUNvbmZpZ1BhdGgpID8gYmFzZUNvbmZpZ1BhdGggOiB0ZW1wbGF0ZUNvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1BhdGgsIHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNXQ09wdGlvbnMgPSBPcHRpb25zOyJdLCJuYW1lcyI6WyJmaW5kRmlsZVVwIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJkaXJuYW1lIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJVUkwiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZWxhdGl2ZUZpbGVQYXRoIiwibG9nIiwiY3dkIiwicHJvY2VzcyIsImRlZmF1bHRDb25maWdWYWx1ZXMiLCJhaSIsIm1heFRva2VucyIsIm1vZGVsIiwicHJvdmlkZXIiLCJ0ZW1wZXJhdHVyZSIsImNvbmZpZ0ZpbGVzIiwiY29weUZpbGVzIiwiZW50cnlIVE1MIiwiZW50cnlKcyIsImVudiIsImVzbGludCIsImplc3QiLCJvdXRwdXRGdWxsUGF0aCIsIm91dHB1dEhhc2giLCJvdXRwdXRQYXRoIiwicGFja2FnZU1hbmFnZXIiLCJwcmVzZXQiLCJzb3VyY2VGdWxsUGF0aCIsInNvdXJjZVBhdGgiLCJzd2MiLCJpbmxpbmVTb3VyY2VzQ29udGVudCIsImlzTW9kdWxlIiwianNjIiwiZXh0ZXJuYWxIZWxwZXJzIiwia2VlcENsYXNzTmFtZXMiLCJsb29zZSIsInBhcnNlciIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0Iiwic3ludGF4IiwidHN4IiwidGFyZ2V0IiwidHJhbnNmb3JtIiwicmVhY3QiLCJydW50aW1lIiwibWluaWZ5IiwibW9kdWxlIiwibGF6eSIsIm5vSW50ZXJvcCIsInN0cmljdCIsInN0cmljdE1vZGUiLCJ0eXBlIiwic291cmNlTWFwcyIsInRhcmdldEVudmlyb25tZW50IiwidXNlR3JhcGhRbCIsInVzZVR5cGVzY3JpcHQiLCJ3ZWJwYWNrIiwic3RhdGljUGF0aCIsImdldFBhY2thZ2VEaXIiLCJjdXJyZW50UGtnUGF0aCIsInBrZyIsIkpTT04iLCJwYXJzZSIsIndvcmtzcGFjZXMiLCJzZWFyY2hEaXIiLCJpIiwicGtnUGF0aCIsInBhcmVudCIsImNvbmZpZ0Zvcm1hdHMiLCJmb3JtYXQiLCJjb25maWdQYXRoIiwic3luYyIsImdldFR5cGVTY3JpcHRDb25maWdQYXRoIiwiY29uZmlnTmFtZSIsInBhY2thZ2VEaXIiLCJwcm9qZWN0QnVpbGRDb25maWciLCJyb290QnVpbGRDb25maWciLCJwcm9qZWN0TGludENvbmZpZyIsInJvb3RMaW50Q29uZmlnIiwicHJvamVjdFRlc3RDb25maWciLCJyb290VGVzdENvbmZpZyIsInByb2plY3RDb25maWdQYXRoIiwicm9vdENvbmZpZ1BhdGgiLCJsZXhEaXIiLCJMZXhDb25maWciLCJnZXRMZXhEaXIiLCJ2YWx1ZSIsImNvbmZpZyIsImluZGV4UGF0aCIsImhhc0luZGV4VHN4IiwidXBkYXRlQ29uZmlnIiwidXBkYXRlZENvbmZpZyIsInVuZGVmaW5lZCIsIkNVUlNPUl9JREUiLCJhZGRDb25maWdQYXJhbXMiLCJjbWQiLCJwYXJhbXMiLCJuYW1lUHJvcGVydHkiLCJlbnZpcm9ubWVudCIsInR5cGVzY3JpcHQiLCJMRVhfQ09ORklHIiwic3RyaW5naWZ5IiwiY29tbWFuZE5hbWUiLCJpc1N0YXRpYyIsInN0YXRpYyIsInBhcnNlQ29uZmlnIiwiaXNSb290IiwiY2xpTmFtZSIsImxleENvbmZpZyIsImxleENvbmZpZ05hbWUiLCJxdWlldCIsImRlYnVnIiwiY29uZmlnQmFzZU5hbWUiLCJjb25maWdFeGlzdHMiLCJwb3RlbnRpYWxQYXRoIiwiZXh0IiwiY29uZmlnQ29udGVudCIsImNvbmZpZ0pzb24iLCJkZWZhdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJsZXhDdXN0b21Db25maWciLCJmaWxlVXJsIiwiaHJlZiIsImNvbnNvbGUiLCJjaGVja1R5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1BhdGgiLCJiYXNlQ29uZmlnUGF0aCIsInRlbXBsYXRlQ29uZmlnUGF0aCIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwicmVsYXRpdmVPdXREaXIiLCJyZWxhdGl2ZVJvb3REaXIiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdMaW50UGF0aCIsInRlbXBsYXRlUGF0aCIsImNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1Rlc3RQYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7OztDQUdDLEdBQ0QsT0FBT0EsZ0JBQWdCLGVBQWU7QUFDdEMsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQzNELFNBQ0VDLE9BQU8sRUFDUEMsV0FBV0MsV0FBVyxFQUN0QkMsWUFBWUMsWUFBWSxFQUN4QkMsV0FBV0MsV0FBVyxRQUNqQixPQUFPO0FBQ2QsU0FBUUMsR0FBRyxRQUFPLE1BQU07QUFFeEIsU0FBUUMscUJBQXFCLEVBQUVDLGdCQUFnQixRQUFPLGtCQUFrQjtBQUN4RSxTQUFRQyxHQUFHLFFBQU8saUJBQWlCO0FBS25DLE1BQU1DLE1BQWNDLFFBQVFELEdBQUc7QUFrRS9CLE9BQU8sTUFBTUUsc0JBQXFDO0lBQ2hEQyxJQUFJO1FBQ0ZDLFdBQVc7UUFDWEMsT0FBTztR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
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcm9vdHM/OiBzdHJpbmdbXTtcbiAgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuICB0cmFuc2Zvcm0/OiBSZWNvcmQ8c3RyaW5nLCBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0+O1xuICB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBtb2R1bGVOYW1lTWFwcGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZXh0ZW5zaW9uc1RvVHJlYXRBc0VzbT86IHN0cmluZ1tdO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VicGFja0NvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGVudHJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG91dHB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtb2R1bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcGx1Z2lucz86IHVua25vd25bXTtcbiAgc3RhdGljUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUNvbmZpZyB7XG4gIHByb3ZpZGVyPzogJ2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBlbnRyeUhUTUw/OiBzdHJpbmc7XG4gIGVudHJ5SnM/OiBzdHJpbmc7XG4gIGVudj86IG9iamVjdDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIGplc3Q/OiBKZXN0Q29uZmlnO1xuICBsaWJyYXJ5TmFtZT86IHN0cmluZztcbiAgbGlicmFyeVRhcmdldD86IHN0cmluZztcbiAgb3V0cHV0RmlsZT86IHN0cmluZztcbiAgb3V0cHV0RnVsbFBhdGg/OiBzdHJpbmc7XG4gIG91dHB1dEhhc2g/OiBib29sZWFuO1xuICBvdXRwdXRQYXRoPzogc3RyaW5nO1xuICBwYWNrYWdlTWFuYWdlcj86ICducG0nIHwgJ3lhcm4nO1xuICBwcmVzZXQ/OiAnd2ViJyB8ICdub2RlJyB8ICdsYW1iZGEnIHwgJ21vYmlsZSc7XG4gIHNvdXJjZUZ1bGxQYXRoPzogc3RyaW5nO1xuICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICBzd2M/OiBTV0NPcHRpb25zO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIGplc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIzJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGN1cnJlbnRQa2dQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhjdXJyZW50UGtnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoY3VycmVudFBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgaWYoIXBrZy53b3Jrc3BhY2VzKSB7XG4gICAgICAgIHJldHVybiBjd2Q7XG4gICAgICB9XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBjd2Q7XG4gICAgfVxuICB9XG5cbiAgbGV0IHNlYXJjaERpciA9IGN3ZDtcblxuICBmb3IobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoUmVzb2x2ZShzZWFyY2hEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHBrZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpKTtcblxuICAgICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gc2VhcmNoRGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgICAvLyBDb250aW51ZSBzZWFyY2hpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKHNlYXJjaERpcik7XG5cbiAgICBpZihwYXJlbnQgPT09IHNlYXJjaERpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlYXJjaERpciA9IHBhcmVudDtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBmaW5kRmlsZVVwLnN5bmMoYGxleC5jb25maWcuJHtmb3JtYXR9YCwgY3dkLCA1KTtcblxuICAgIGlmKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJldHVybiBkaXJuYW1lKGNvbmZpZ1BhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjd2Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGggPSAoY29uZmlnTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcuYnVpbGQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0QnVpbGRDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0QnVpbGRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdEJ1aWxkQ29uZmlnO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHJvb3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdExpbnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdExpbnRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdExpbnRDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdFRlc3RDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcblxuICAgIGlmKGV4aXN0c1N5bmMocm9vdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcm9vdFRlc3RDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHJvb3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHJvb3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiByb290Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcblxuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7ZW50cnlKcywgc291cmNlRnVsbFBhdGgsIHRhcmdldEVudmlyb25tZW50fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGgsICdpbmRleC50c3gnKTtcbiAgICAgIGNvbnN0IGhhc0luZGV4VHN4OiBib29sZWFuID0gZXhpc3RzU3luYyhpbmRleFBhdGgpO1xuXG4gICAgICBpZihoYXNJbmRleFRzeCkge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHN4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50cyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnBhcnNlciA9IHtcbiAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgdHN4OiB0cnVlXG4gICAgfTtcblxuICAgIGlmKHRhcmdldEVudmlyb25tZW50ID09PSAnd2ViJykge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnRyYW5zZm9ybSA9IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICBydW50aW1lOiAnYXV0b21hdGljJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRMZXhEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGlybmFtZShnZXRMZXhQYWNrYWdlSnNvblBhdGgoKSk7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlQ29uZmlnKHVwZGF0ZWRDb25maWc6IExleENvbmZpZ1R5cGUpOiBMZXhDb25maWdUeXBlIHtcbiAgICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0LCBhaX0gPSB1cGRhdGVkQ29uZmlnO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICBpZih1c2VUeXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gdXNlVHlwZXNjcmlwdDtcbiAgICB9XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQgJiYgb3V0cHV0RnVsbFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlZENvbmZpZy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYoYWkpIHtcbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uYWl9O1xuXG4gICAgICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScgJiYgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgPSAnY3Vyc29yJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnID0gey4uLkxleENvbmZpZy5jb25maWcsIC4uLnVwZGF0ZWRDb25maWd9O1xuXG4gICAgcmV0dXJuIExleENvbmZpZy5jb25maWc7XG4gIH1cblxuICBzdGF0aWMgYWRkQ29uZmlnUGFyYW1zKGNtZCwgcGFyYW1zOiBMZXhDb25maWdUeXBlKSB7XG4gICAgY29uc3QgbmFtZVByb3BlcnR5OiBzdHJpbmcgPSAnX25hbWUnO1xuICAgIGNvbnN0IHtlbnZpcm9ubWVudCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgdHlwZXNjcmlwdH0gPSBjbWQ7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5vdXRwdXRQYXRoICYmICFwYXJhbXMub3V0cHV0RnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHBhcmFtcy5vdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHNvdXJjZVBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMuc291cmNlUGF0aCAmJiAhcGFyYW1zLnNvdXJjZUZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBwYXJhbXMuc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZCwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnUGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgICAgY29uc3QgYmFzZUNvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy5iYXNlLmpzb24nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLnRlbXBsYXRlLmpzb24nKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBleGlzdHNTeW5jKGJhc2VDb25maWdQYXRoKSA/IGJhc2VDb25maWdQYXRoIDogdGVtcGxhdGVDb25maWdQYXRoO1xuXG4gICAgICBpZihleGlzdHNTeW5jKHNvdXJjZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMoc291cmNlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRQYXRoIHx8ICcuL2xpYic7XG4gICAgY29uc3Qgb3V0cHV0RnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlUGF0aCB8fCAnLi9zcmMnO1xuICAgIGNvbnN0IHNvdXJjZUZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZVBhdGgpO1xuICAgIGNvbnN0IHJlbGF0aXZlT3V0RGlyID0gcGF0aFJlbGF0aXZlKGN3ZCwgb3V0cHV0RnVsbFBhdGgpIHx8ICcuL2xpYic7XG4gICAgY29uc3QgcmVsYXRpdmVSb290RGlyID0gcGF0aFJlbGF0aXZlKGN3ZCwgc291cmNlRnVsbFBhdGgpIHx8ICcuL3NyYyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgJy0tZW1pdERlY2xhcmF0aW9uT25seScsIC8vIENSSVRJQ0FMOiBPbmx5IGVtaXQgLmQudHMgZmlsZXMsIG5vIEpTIGZpbGVzXG4gICAgICAnLS1kZWNsYXJhdGlvbicsIC8vIEdlbmVyYXRlIGRlY2xhcmF0aW9uIGZpbGVzXG4gICAgICAnLS1kZWNsYXJhdGlvbk1hcCcsIC8vIEdlbmVyYXRlIHNvdXJjZSBtYXBzIGZvciBkZWNsYXJhdGlvbnNcbiAgICAgICctLW91dERpcicsIHJlbGF0aXZlT3V0RGlyLFxuICAgICAgJy0tcm9vdERpcicsIHJlbGF0aXZlUm9vdERpcixcbiAgICAgICctLXNraXBMaWJDaGVjaycsIC8vIFNraXAgdHlwZSBjaGVja2luZyBvZiBkZWNsYXJhdGlvbiBmaWxlcyAoZmFzdGVyLCBtb3JlIGxlbmllbnQpXG4gICAgICAnLS1lc01vZHVsZUludGVyb3AnLFxuICAgICAgJy0tYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cycsXG4gICAgICAnLS1tb2R1bGUnLCAnTm9kZU5leHQnLFxuICAgICAgJy0tbW9kdWxlUmVzb2x1dGlvbicsICdOb2RlTmV4dCcsXG4gICAgICAnLS10YXJnZXQnLCAnRVNOZXh0JyxcbiAgICAgICctLWpzeCcsICdyZWFjdC1qc3gnLFxuICAgICAgJy0taXNvbGF0ZWRNb2R1bGVzJyxcbiAgICAgICctLXJlc29sdmVKc29uTW9kdWxlJyxcbiAgICAgICctLWFsbG93SnMnXG4gICAgICAvLyBOb3RlOiAtLW5vVW51c2VkTG9jYWxzIGFuZCAtLW5vVW51c2VkUGFyYW1ldGVycyBhcmUgbm90IG5lZWRlZCBmb3IgZGVjbGFyYXRpb24gZ2VuZXJhdGlvblxuICAgICAgLy8gYW5kIHdvdWxkIGFjdHVhbGx5IGVuYWJsZSBzdHJpY3QgY2hlY2tpbmcsIHdoaWNoIHdlIHdhbnQgdG8gYXZvaWQgZm9yIGZhc3RlciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ0xpbnRQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLmxpbnQuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdMaW50UGF0aCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLmxpbnQuanNvbicpO1xuICAgICAgaWYoZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdMaW50UGF0aCwgcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1Rlc3RQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdUZXN0UGF0aCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgICAgaWYoZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdUZXN0UGF0aCwgcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTV0NPcHRpb25zID0gT3B0aW9uczsiXSwibmFtZXMiOlsiZmluZEZpbGVVcCIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiVVJMIiwiZ2V0TGV4UGFja2FnZUpzb25QYXRoIiwicmVsYXRpdmVGaWxlUGF0aCIsImxvZyIsImN3ZCIsInByb2Nlc3MiLCJkZWZhdWx0Q29uZmlnVmFsdWVzIiwiYWkiLCJtYXhUb2tlbnMiLCJtb2RlbCIsInByb3ZpZGVyIiwidGVtcGVyYXR1cmUiLCJjb25maWdGaWxlcyIsImNvcHlGaWxlcyIsImVudHJ5SFRNTCIsImVudHJ5SnMiLCJlbnYiLCJlc2xpbnQiLCJqZXN0Iiwib3V0cHV0RnVsbFBhdGgiLCJvdXRwdXRIYXNoIiwib3V0cHV0UGF0aCIsInBhY2thZ2VNYW5hZ2VyIiwicHJlc2V0Iiwic291cmNlRnVsbFBhdGgiLCJzb3VyY2VQYXRoIiwic3djIiwiaW5saW5lU291cmNlc0NvbnRlbnQiLCJpc01vZHVsZSIsImpzYyIsImV4dGVybmFsSGVscGVycyIsImtlZXBDbGFzc05hbWVzIiwibG9vc2UiLCJwYXJzZXIiLCJkZWNvcmF0b3JzIiwiZHluYW1pY0ltcG9ydCIsInN5bnRheCIsInRzeCIsInRhcmdldCIsInRyYW5zZm9ybSIsInJlYWN0IiwicnVudGltZSIsIm1pbmlmeSIsIm1vZHVsZSIsImxhenkiLCJub0ludGVyb3AiLCJzdHJpY3QiLCJzdHJpY3RNb2RlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJ0YXJnZXRFbnZpcm9ubWVudCIsInVzZUdyYXBoUWwiLCJ1c2VUeXBlc2NyaXB0Iiwid2VicGFjayIsInN0YXRpY1BhdGgiLCJnZXRQYWNrYWdlRGlyIiwiY3VycmVudFBrZ1BhdGgiLCJwa2ciLCJKU09OIiwicGFyc2UiLCJ3b3Jrc3BhY2VzIiwic2VhcmNoRGlyIiwiaSIsInBrZ1BhdGgiLCJwYXJlbnQiLCJjb25maWdGb3JtYXRzIiwiZm9ybWF0IiwiY29uZmlnUGF0aCIsInN5bmMiLCJnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCIsImNvbmZpZ05hbWUiLCJwYWNrYWdlRGlyIiwicHJvamVjdEJ1aWxkQ29uZmlnIiwicm9vdEJ1aWxkQ29uZmlnIiwicHJvamVjdExpbnRDb25maWciLCJyb290TGludENvbmZpZyIsInByb2plY3RUZXN0Q29uZmlnIiwicm9vdFRlc3RDb25maWciLCJwcm9qZWN0Q29uZmlnUGF0aCIsInJvb3RDb25maWdQYXRoIiwibGV4RGlyIiwiTGV4Q29uZmlnIiwiZ2V0TGV4RGlyIiwidmFsdWUiLCJjb25maWciLCJpbmRleFBhdGgiLCJoYXNJbmRleFRzeCIsInVwZGF0ZUNvbmZpZyIsInVwZGF0ZWRDb25maWciLCJ1bmRlZmluZWQiLCJDVVJTT1JfSURFIiwiYWRkQ29uZmlnUGFyYW1zIiwiY21kIiwicGFyYW1zIiwibmFtZVByb3BlcnR5IiwiZW52aXJvbm1lbnQiLCJ0eXBlc2NyaXB0IiwiTEVYX0NPTkZJRyIsInN0cmluZ2lmeSIsImNvbW1hbmROYW1lIiwiaXNTdGF0aWMiLCJzdGF0aWMiLCJwYXJzZUNvbmZpZyIsImlzUm9vdCIsImNsaU5hbWUiLCJsZXhDb25maWciLCJsZXhDb25maWdOYW1lIiwicXVpZXQiLCJkZWJ1ZyIsImNvbmZpZ0Jhc2VOYW1lIiwiY29uZmlnRXhpc3RzIiwicG90ZW50aWFsUGF0aCIsImV4dCIsImNvbmZpZ0NvbnRlbnQiLCJjb25maWdKc29uIiwiZGVmYXVsdCIsImVycm9yIiwibWVzc2FnZSIsImluY2x1ZGVzIiwibGV4Q3VzdG9tQ29uZmlnIiwiZmlsZVVybCIsImhyZWYiLCJjb25zb2xlIiwiY2hlY2tUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdQYXRoIiwiYmFzZUNvbmZpZ1BhdGgiLCJ0ZW1wbGF0ZUNvbmZpZ1BhdGgiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInJlbGF0aXZlT3V0RGlyIiwicmVsYXRpdmVSb290RGlyIiwiY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnTGludFBhdGgiLCJ0ZW1wbGF0ZVBhdGgiLCJjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdUZXN0UGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOzs7Q0FHQyxHQUNELE9BQU9BLGdCQUFnQixlQUFlO0FBQ3RDLFNBQVFDLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUMzRCxTQUNFQyxPQUFPLEVBQ1BDLFdBQVdDLFdBQVcsRUFDdEJDLFlBQVlDLFlBQVksRUFDeEJDLFdBQVdDLFdBQVcsUUFDakIsT0FBTztBQUNkLFNBQVFDLEdBQUcsUUFBTyxNQUFNO0FBRXhCLFNBQVFDLHFCQUFxQixFQUFFQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUFDeEUsU0FBUUMsR0FBRyxRQUFPLGlCQUFpQjtBQUtuQyxNQUFNQyxNQUFjQyxRQUFRRCxHQUFHO0FBa0UvQixPQUFPLE1BQU1FLHNCQUFxQztJQUNoREMsSUFBSTtRQUNGQyxXQUFXO1FBQ1hDLE9BQU87UUFDUEMsVUFBVTtRQUNWQyxhQUFhO0lBQ2Y7SUFDQUMsYUFBYSxFQUFFO0lBQ2ZDLFdBQVcsRUFBRTtJQUNiQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsS0FBSztJQUNMQyxRQUFRLENBQUM7SUFDVEMsTUFBTSxDQUFDO0lBQ1BDLGdCQUFnQnBCLFlBQVlLLEtBQUs7SUFDakNnQixZQUFZO0lBQ1pDLFlBQVk7SUFDWkMsZ0JBQWdCO0lBQ2hCQyxRQUFRO0lBQ1JDLGdCQUFnQnpCLFlBQVlLLEtBQUs7SUFDakNxQixZQUFZO0lBQ1pDLEtBQUs7UUFDSEMsc0JBQXNCO1FBQ3RCQyxVQUFVO1FBQ1ZDLEtBQUs7WUFDSEMsaUJBQWlCO1lBQ2pCQyxnQkFBZ0I7WUFDaEJDLE9BQU87WUFDUEMsUUFBUTtnQkFDTkMsWUFBWTtnQkFDWkMsZUFBZTtnQkFDZkMsUUFBUTtnQkFDUkMsS0FBSztZQUNQO1lBQ0FDLFFBQVE7WUFDUkMsV0FBVztnQkFDVEMsT0FBTztvQkFDTEMsU0FBUztnQkFDWDtZQUNGO1FBQ0Y7UUFDQUMsUUFBUTtRQUNSQyxRQUFRO1lBQ05DLE1BQU07WUFDTkMsV0FBVztZQUNYQyxRQUFRO1lBQ1JDLFlBQVk7WUFDWkMsTUFBTTtRQUNSO1FBQ0FDLFlBQVk7SUFDZDtJQUNBQyxtQkFBbUI7SUFDbkJDLFlBQVk7SUFDWkMsZUFBZTtJQUNmQyxTQUFTO1FBQ1BDLFlBQVk7SUFDZDtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1DLGdCQUFnQjtJQUMzQixNQUFNbkQsTUFBTUMsUUFBUUQsR0FBRztJQUN2QixNQUFNb0QsaUJBQWlCekQsWUFBWUssS0FBSztJQUV4QyxJQUFHZCxXQUFXa0UsaUJBQWlCO1FBQzdCLElBQUk7WUFDRixNQUFNQyxNQUFNQyxLQUFLQyxLQUFLLENBQUNwRSxhQUFhaUUsZ0JBQWdCO1lBQ3BELElBQUcsQ0FBQ0MsSUFBSUcsVUFBVSxFQUFFO2dCQUNsQixPQUFPeEQ7WUFDVDtRQUNGLEVBQUUsT0FBSztZQUNMLE9BQU9BO1FBQ1Q7SUFDRjtJQUVBLElBQUl5RCxZQUFZekQ7SUFFaEIsSUFBSSxJQUFJMEQsSUFBSSxHQUFHQSxJQUFJLElBQUlBLElBQUs7UUFDMUIsTUFBTUMsVUFBVWhFLFlBQVk4RCxXQUFXO1FBQ3ZDLElBQUd2RSxXQUFXeUUsVUFBVTtZQUN0QixJQUFJO2dCQUNGLE1BQU1OLE1BQU1DLEtBQUtDLEtBQUssQ0FBQ3BFLGFBQWF3RSxTQUFTO2dCQUU3QyxJQUFHLENBQUNOLElBQUlHLFVBQVUsRUFBRTtvQkFDbEIsT0FBT0M7Z0JBQ1Q7WUFDRixFQUFFLE9BQUs7WUFDTCxxQkFBcUI7WUFDdkI7UUFDRjtRQUVBLE1BQU1HLFNBQVN2RSxRQUFRb0U7UUFFdkIsSUFBR0csV0FBV0gsV0FBVztZQUN2QjtRQUNGO1FBQ0FBLFlBQVlHO0lBQ2Q7SUFFQSxNQUFNQyxnQkFBZ0I7UUFBQztRQUFNO1FBQU87UUFBTztRQUFNO0tBQU87SUFFeEQsS0FBSSxNQUFNQyxVQUFVRCxjQUFlO1FBQ2pDLE1BQU1FLGFBQWE5RSxXQUFXK0UsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFRixRQUFRLEVBQUU5RCxLQUFLO1FBRWhFLElBQUcrRCxZQUFZO1lBQ2IsT0FBTzFFLFFBQVEwRTtRQUNqQjtJQUNGO0lBRUEsT0FBTy9EO0FBQ1QsRUFBRTtBQUVGLE9BQU8sTUFBTWlFLDBCQUEwQixDQUFDQztJQUN0QyxNQUFNQyxhQUFhaEI7SUFDbkIsTUFBTW5ELE1BQU1DLFFBQVFELEdBQUc7SUFFdkIsSUFBR2tFLGVBQWUsdUJBQXVCO1FBQ3ZDLE1BQU1FLHFCQUFxQnpFLFlBQVl3RSxZQUFZO1FBRW5ELElBQUdqRixXQUFXa0YscUJBQXFCO1lBQ2pDLE9BQU9BO1FBQ1Q7UUFFQSxNQUFNQyxrQkFBa0IxRSxZQUFZSyxLQUFLO1FBQ3pDLElBQUdkLFdBQVdtRixrQkFBa0I7WUFDOUIsT0FBT0E7UUFDVDtJQUNGO0lBRUEsSUFBR0gsZUFBZSxzQkFBc0I7UUFDdEMsTUFBTUksb0JBQW9CM0UsWUFBWXdFLFlBQVk7UUFDbEQsSUFBR2pGLFdBQVdvRixvQkFBb0I7WUFDaEMsT0FBT0E7UUFDVDtRQUVBLE1BQU1DLGlCQUFpQjVFLFlBQVlLLEtBQUs7UUFFeEMsSUFBR2QsV0FBV3FGLGlCQUFpQjtZQUM3QixPQUFPQTtRQUNUO0lBQ0Y7SUFFQSxJQUFHTCxlQUFlLHNCQUFzQjtRQUN0QyxNQUFNTSxvQkFBb0I3RSxZQUFZd0UsWUFBWTtRQUNsRCxJQUFHakYsV0FBV3NGLG9CQUFvQjtZQUNoQyxPQUFPQTtRQUNUO1FBRUEsTUFBTUMsaUJBQWlCOUUsWUFBWUssS0FBSztRQUV4QyxJQUFHZCxXQUFXdUYsaUJBQWlCO1lBQzdCLE9BQU9BO1FBQ1Q7SUFDRjtJQUVBLE1BQU1DLG9CQUFvQi9FLFlBQVl3RSxZQUFZRDtJQUVsRCxJQUFHaEYsV0FBV3dGLG9CQUFvQjtRQUNoQyxPQUFPQTtJQUNUO0lBRUEsTUFBTUMsaUJBQWlCaEYsWUFBWUssS0FBS2tFO0lBRXhDLElBQUdoRixXQUFXeUYsaUJBQWlCO1FBQzdCLE9BQU9BO0lBQ1Q7SUFFQSxNQUFNQyxTQUFTQyxVQUFVQyxTQUFTO0lBRWxDLE9BQU9uRixZQUFZaUYsUUFBUVY7QUFDN0IsRUFBRTtBQUVGLE9BQU8sTUFBTVc7SUFLWCxXQUFXN0IsY0FBYytCLEtBQWMsRUFBRTtRQUN2Q0YsVUFBVUcsTUFBTSxDQUFDaEMsYUFBYSxHQUFHK0I7UUFDakMsTUFBTSxFQUFDcEUsT0FBTyxFQUFFUyxjQUFjLEVBQUUwQixpQkFBaUIsRUFBQyxHQUFHK0IsVUFBVUcsTUFBTTtRQUVyRSxJQUFHckUsWUFBWSxjQUFjb0UsT0FBTztZQUNsQyxNQUFNRSxZQUFvQnRGLFlBQVlLLEtBQUtvQixnQkFBZ0I7WUFDM0QsTUFBTThELGNBQXVCaEcsV0FBVytGO1lBRXhDLElBQUdDLGFBQWE7Z0JBQ2RMLFVBQVVHLE1BQU0sQ0FBQ3JFLE9BQU8sR0FBRztZQUM3QixPQUFPO2dCQUNMa0UsVUFBVUcsTUFBTSxDQUFDckUsT0FBTyxHQUFHO1lBQzdCO1FBQ0Y7UUFFQWtFLFVBQVVHLE1BQU0sQ0FBQzFELEdBQUcsQ0FBQ0csR0FBRyxDQUFDSSxNQUFNLEdBQUc7WUFDaENHLFFBQVE7WUFDUkMsS0FBSztRQUNQO1FBRUEsSUFBR2Esc0JBQXNCLE9BQU87WUFDOUIrQixVQUFVRyxNQUFNLENBQUMxRCxHQUFHLENBQUNHLEdBQUcsQ0FBQ1UsU0FBUyxHQUFHO2dCQUNuQ0MsT0FBTztvQkFDTEMsU0FBUztnQkFDWDtZQUNGO1FBQ0Y7SUFDRjtJQUVBLE9BQU95QyxZQUFvQjtRQUN6QixPQUFPekYsUUFBUVE7SUFDakI7SUFFQSxPQUFPc0YsYUFBYUMsYUFBNEIsRUFBaUI7UUFDL0QsTUFBTSxFQUFDckUsY0FBYyxFQUFFRSxVQUFVLEVBQUVJLFVBQVUsRUFBRUQsY0FBYyxFQUFFNEIsYUFBYSxFQUFFN0MsRUFBRSxFQUFDLEdBQUdpRjtRQUNwRixNQUFNakIsYUFBYWhCO1FBRW5CLElBQUdILGtCQUFrQnFDLFdBQVc7WUFDOUJSLFVBQVU3QixhQUFhLEdBQUdBO1FBQzVCO1FBRUEsSUFBRy9CLGVBQWVvRSxhQUFhdEUsbUJBQW1Cc0UsV0FBVztZQUMzREQsY0FBY3JFLGNBQWMsR0FBR3BCLFlBQVl3RSxZQUFZbEQ7UUFDekQ7UUFFQSxJQUFHSSxlQUFlZ0UsYUFBYWpFLG1CQUFtQmlFLFdBQVc7WUFDM0RELGNBQWNoRSxjQUFjLEdBQUd6QixZQUFZd0UsWUFBWTlDO1FBQ3pEO1FBRUEsSUFBR2xCLElBQUk7WUFDTDBFLFVBQVVHLE1BQU0sQ0FBQzdFLEVBQUUsR0FBRztnQkFBQyxHQUFHMEUsVUFBVUcsTUFBTSxDQUFDN0UsRUFBRTtnQkFBRSxHQUFHQSxFQUFFO1lBQUE7WUFFcEQsSUFBR0YsUUFBUVcsR0FBRyxDQUFDMEUsVUFBVSxLQUFLLFVBQVVULFVBQVVHLE1BQU0sQ0FBQzdFLEVBQUUsQ0FBQ0csUUFBUSxLQUFLLFFBQVE7Z0JBQy9FdUUsVUFBVUcsTUFBTSxDQUFDN0UsRUFBRSxDQUFDRyxRQUFRLEdBQUc7WUFDakM7UUFDRjtRQUVBdUUsVUFBVUcsTUFBTSxHQUFHO1lBQUMsR0FBR0gsVUFBVUcsTUFBTTtZQUFFLEdBQUdJLGFBQWE7UUFBQTtRQUV6RCxPQUFPUCxVQUFVRyxNQUFNO0lBQ3pCO0lBRUEsT0FBT08sZ0JBQWdCQyxHQUFHLEVBQUVDLE1BQXFCLEVBQUU7UUFDakQsTUFBTUMsZUFBdUI7UUFDN0IsTUFBTSxFQUFDQyxXQUFXLEVBQUUxRSxVQUFVLEVBQUVJLFVBQVUsRUFBRXVFLFVBQVUsRUFBQyxHQUFHSjtRQUMxRCxNQUFNckIsYUFBYWhCO1FBRW5CLElBQUdsQyxlQUFlb0UsV0FBVztZQUMzQkksT0FBT3hFLFVBQVUsR0FBR0E7WUFDcEJ3RSxPQUFPMUUsY0FBYyxHQUFHcEIsWUFBWXdFLFlBQVlsRDtRQUNsRCxPQUFPLElBQUd3RSxPQUFPeEUsVUFBVSxJQUFJLENBQUN3RSxPQUFPMUUsY0FBYyxFQUFFO1lBQ3JEMEUsT0FBTzFFLGNBQWMsR0FBR3BCLFlBQVl3RSxZQUFZc0IsT0FBT3hFLFVBQVU7UUFDbkU7UUFFQSxJQUFHSSxlQUFlZ0UsV0FBVztZQUMzQkksT0FBT3BFLFVBQVUsR0FBR0E7WUFDcEJvRSxPQUFPckUsY0FBYyxHQUFHekIsWUFBWXdFLFlBQVk5QztRQUNsRCxPQUFPLElBQUdvRSxPQUFPcEUsVUFBVSxJQUFJLENBQUNvRSxPQUFPckUsY0FBYyxFQUFFO1lBQ3JEcUUsT0FBT3JFLGNBQWMsR0FBR3pCLFlBQVl3RSxZQUFZc0IsT0FBT3BFLFVBQVU7UUFDbkU7UUFFQSxJQUFHdUUsZUFBZVAsV0FBVztZQUMzQkksT0FBT3pDLGFBQWEsR0FBRztRQUN6QjtRQUVBLElBQUcyQyxnQkFBZ0JOLFdBQVc7WUFDNUJJLE9BQU8zQyxpQkFBaUIsR0FBRzZDLGdCQUFnQixRQUFRLFFBQVE7UUFDN0Q7UUFFQTFGLFFBQVFXLEdBQUcsQ0FBQ2lGLFVBQVUsR0FBR3ZDLEtBQUt3QyxTQUFTLENBQ3JDO1lBQ0UsR0FBR2pCLFVBQVVNLFlBQVksQ0FBQ00sT0FBTztZQUNqQ00sYUFBYVAsR0FBRyxDQUFDRSxhQUFhO1lBQzlCTSxVQUFVUixJQUFJUyxNQUFNO1FBQ3RCLEdBQUcsTUFBTTtJQUViO0lBRUEsYUFBYUMsWUFBWVYsR0FBRyxFQUFFVyxTQUFrQixJQUFJLEVBQWlCO1FBQ25FLE1BQU0sRUFBQ0MsVUFBVSxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsYUFBYSxFQUFFQyxLQUFLLEVBQUVYLFVBQVUsRUFBRVksUUFBUSxLQUFLLEVBQUMsR0FBR2hCO1FBQ3RGLE1BQU0zQixnQkFBZ0I7WUFBQztZQUFNO1lBQU87WUFBTztZQUFNO1NBQU87UUFDeEQsTUFBTTRDLGlCQUF5QkgsaUJBQWlCO1FBQ2hELElBQUl2QyxhQUFxQnNDLGFBQWE7UUFDdEMsSUFBSUssZUFBd0JMLFlBQVluSCxXQUFXNkUsY0FBYztRQUVqRSxJQUFHLENBQUNBLGNBQWMsQ0FBQzJDLGNBQWM7WUFDL0IsSUFBR0YsT0FBTztnQkFDUnpHLElBQUksQ0FBQywyQ0FBMkMsRUFBRTBHLGdCQUFnQixFQUFFLFFBQVFGO1lBQzlFO1lBRUEsS0FBSSxNQUFNekMsVUFBVUQsY0FBZTtnQkFDakMsTUFBTThDLGdCQUFnQlIsU0FDbEJ4RyxZQUFZSyxLQUFLLENBQUMsRUFBRSxFQUFFeUcsZUFBZSxDQUFDLEVBQUUzQyxRQUFRLElBQ2hEaEUsaUJBQWlCLEdBQUcyRyxlQUFlLENBQUMsRUFBRTNDLFFBQVEsRUFBRTlEO2dCQUVwRCxJQUFHd0csT0FBTztvQkFDUnpHLElBQUksQ0FBQywwQkFBMEIsRUFBRTRHLGVBQWUsRUFBRSxRQUFRSjtnQkFDNUQ7Z0JBRUEsSUFBR3JILFdBQVd5SCxnQkFBZ0I7b0JBQzVCNUMsYUFBYTRDO29CQUNiRCxlQUFlO29CQUNmO2dCQUNGO1lBQ0Y7UUFDRjtRQUVBLElBQUdBLGNBQWM7WUFDZjNHLElBQUksQ0FBQyxNQUFNLEVBQUVxRyxRQUFRLHFCQUFxQixFQUFFckMsWUFBWSxFQUFFLFFBQVF3QztZQUNsRSxNQUFNSyxNQUFjckgsWUFBWXdFO1lBRWhDLElBQUc2QyxRQUFRLFNBQVM7Z0JBQ2xCLE1BQU1DLGdCQUF3QjFILGFBQWE0RSxZQUFZO2dCQUV2RCxJQUFHOEMsZUFBZTtvQkFDaEIsSUFBSUM7b0JBRUosSUFBSTt3QkFDRkEsYUFBYXhELEtBQUtDLEtBQUssQ0FBQ3NELGdCQUFnQkUsV0FBVyxDQUFDO29CQUN0RCxFQUFFLE9BQU1DLE9BQU87d0JBQ2JqSCxJQUFJLENBQUMsRUFBRSxFQUFFcUcsUUFBUSxxQ0FBcUMsRUFBRVksTUFBTUMsT0FBTyxFQUFFLEVBQUUsU0FBU1Y7d0JBQ2xGTyxhQUFhLENBQUM7b0JBQ2hCO29CQUVBakMsVUFBVVUsZUFBZSxDQUFDQyxLQUFLc0I7Z0JBQ2pDLE9BQU87b0JBQ0wvRyxJQUFJLENBQUMsRUFBRSxFQUFFcUcsUUFBUSwrQkFBK0IsRUFBRXJDLFlBQVksRUFBRSxTQUFTd0M7Z0JBQzNFO1lBQ0YsT0FBTyxJQUFHO2dCQUFDO2dCQUFPO2dCQUFRO2dCQUFRO2FBQU0sQ0FBQ1csUUFBUSxDQUFDTixNQUFNO2dCQUN0RCxJQUFJO29CQUNGLElBQUlPO29CQUVKLElBQUdQLFFBQVEsUUFBUTt3QkFDakIsTUFBTVEsVUFBVSxJQUFJeEgsSUFBSSxDQUFDLFFBQVEsRUFBRUQsWUFBWW9FLGFBQWEsRUFBRXNELElBQUk7d0JBRWxFLElBQUdiLE9BQU87NEJBQ1J6RyxJQUFJLENBQUMsOEJBQThCLEVBQUVxSCxTQUFTLEVBQUUsUUFBUWI7d0JBQzFEO3dCQUNBWSxrQkFBa0IsTUFBTSxNQUFNLENBQUNDO29CQUNqQyxPQUFPO3dCQUNMLElBQUdaLE9BQU87NEJBQ1J6RyxJQUFJLENBQUMsNEJBQTRCLEVBQUVnRSxZQUFZLEVBQUUsUUFBUXdDO3dCQUMzRDt3QkFFQVksa0JBQWtCLE1BQU0sTUFBTSxDQUFDcEQ7b0JBQ2pDO29CQUVBLE1BQU1pQixTQUFTbUMsZ0JBQWdCSixPQUFPLElBQUlJO29CQUUxQyxJQUFHWCxPQUFPO3dCQUNSekcsSUFBSSxDQUFDLGVBQWUsRUFBRXVELEtBQUt3QyxTQUFTLENBQUNkLFFBQVEsTUFBTSxJQUFJLEVBQUUsUUFBUXVCO29CQUNuRTtvQkFFQSxJQUFHLENBQUN2QixRQUFRO3dCQUNWakYsSUFBSSxDQUFDLEVBQUUsRUFBRXFHLFFBQVEsdURBQXVELENBQUMsRUFBRSxRQUFRRztvQkFDckY7b0JBRUExQixVQUFVVSxlQUFlLENBQUNDLEtBQUtSLFVBQVUsQ0FBQztnQkFDNUMsRUFBRSxPQUFNZ0MsT0FBTztvQkFDYmpILElBQUksQ0FBQyxFQUFFLEVBQUVxRyxRQUFRLG9DQUFvQyxFQUFFWSxNQUFNQyxPQUFPLEVBQUUsRUFBRSxTQUFTVjtvQkFDakYsSUFBR0MsT0FBTzt3QkFDUixzQ0FBc0M7d0JBQ3RDYyxRQUFRTixLQUFLLENBQUNBO29CQUNoQjtnQkFDRjtZQUNGLE9BQU87Z0JBQ0xqSCxJQUFJLENBQUMsRUFBRSxFQUFFcUcsUUFBUSw2REFBNkQsQ0FBQyxFQUFFLFNBQVNHO1lBQzVGO1FBQ0YsT0FBTztZQUNMLElBQUdDLE9BQU87Z0JBQ1J6RyxJQUFJLHNEQUFzRCxRQUFRd0c7WUFDcEU7WUFFQTFCLFVBQVU3QixhQUFhLEdBQUcsQ0FBQyxDQUFDNEM7WUFDNUJmLFVBQVVVLGVBQWUsQ0FBQ0MsS0FBS1gsVUFBVUcsTUFBTTtRQUNqRDtJQUNGO0lBRUEsT0FBT3VDLHdCQUF3QjtRQUM3QixNQUFNcEQsYUFBYWhCO1FBQ25CLE1BQU1xRSxlQUF1QjdILFlBQVl3RSxZQUFZO1FBRXJELElBQUcsQ0FBQ2pGLFdBQVdzSSxlQUFlO1lBQzVCLE1BQU01QyxTQUFTQyxVQUFVQyxTQUFTO1lBQ2xDLE1BQU0yQyxpQkFBaUI5SCxZQUFZaUYsUUFBUTtZQUMzQyxNQUFNOEMscUJBQXFCL0gsWUFBWWlGLFFBQVE7WUFDL0MsTUFBTXZELGFBQWFuQyxXQUFXdUksa0JBQWtCQSxpQkFBaUJDO1lBRWpFLElBQUd4SSxXQUFXbUMsYUFBYTtnQkFDekJqQyxjQUFjb0ksY0FBY3JJLGFBQWFrQztZQUMzQztRQUNGO0lBQ0Y7SUFFQSxPQUFPc0csZ0NBQTBDO1FBQy9DLE1BQU0zSCxNQUFNQyxRQUFRRCxHQUFHO1FBQ3ZCLE1BQU1pQixhQUFhNEQsVUFBVUcsTUFBTSxDQUFDL0QsVUFBVSxJQUFJO1FBQ2xELE1BQU1GLGlCQUFpQjhELFVBQVVHLE1BQU0sQ0FBQ2pFLGNBQWMsSUFBSXBCLFlBQVlLLEtBQUtpQjtRQUMzRSxNQUFNSSxhQUFhd0QsVUFBVUcsTUFBTSxDQUFDM0QsVUFBVSxJQUFJO1FBQ2xELE1BQU1ELGlCQUFpQnlELFVBQVVHLE1BQU0sQ0FBQzVELGNBQWMsSUFBSXpCLFlBQVlLLEtBQUtxQjtRQUMzRSxNQUFNdUcsaUJBQWlCbkksYUFBYU8sS0FBS2UsbUJBQW1CO1FBQzVELE1BQU04RyxrQkFBa0JwSSxhQUFhTyxLQUFLb0IsbUJBQW1CO1FBRTdELE9BQU87WUFDTDtZQUNBO1lBQ0E7WUFDQTtZQUFZd0c7WUFDWjtZQUFhQztZQUNiO1lBQ0E7WUFDQTtZQUNBO1lBQVk7WUFDWjtZQUFzQjtZQUN0QjtZQUFZO1lBQ1o7WUFBUztZQUNUO1lBQ0E7WUFDQTtTQUdEO0lBQ0g7SUFFQSxPQUFPQyw0QkFBNEI7UUFDakMsTUFBTWxELFNBQVNDLFVBQVVDLFNBQVM7UUFDbEMsTUFBTWlELG1CQUEyQnBJLFlBQVlpRixRQUFRO1FBRXJELElBQUcsQ0FBQzFGLFdBQVc2SSxtQkFBbUI7WUFDaEMsTUFBTUMsZUFBZXJJLFlBQVlpRixRQUFRO1lBQ3pDLElBQUcxRixXQUFXOEksZUFBZTtnQkFDM0I1SSxjQUFjMkksa0JBQWtCNUksYUFBYTZJO1lBQy9DO1FBQ0Y7SUFDRjtJQUVBLE9BQU9DLDRCQUE0QjtRQUNqQyxNQUFNckQsU0FBU0MsVUFBVUMsU0FBUztRQUNsQyxNQUFNb0QsbUJBQTJCdkksWUFBWWlGLFFBQVE7UUFFckQsSUFBRyxDQUFDMUYsV0FBV2dKLG1CQUFtQjtZQUNoQyxNQUFNRixlQUFlckksWUFBWWlGLFFBQVE7WUFDekMsSUFBRzFGLFdBQVc4SSxlQUFlO2dCQUMzQjVJLGNBQWM4SSxrQkFBa0IvSSxhQUFhNkk7WUFDL0M7UUFDRjtJQUNGO0FBQ0Y7QUEvUUUsaUJBRFduRCxXQUNKRyxVQUF3QjtJQUM3QixHQUFHOUUsbUJBQW1CO0FBQ3hCIn0=
@@ -6,9 +6,9 @@ import chalk from 'chalk';
6
6
  import express from 'express';
7
7
  import { readFileSync, existsSync, mkdirSync, writeFileSync } from 'fs';
8
8
  import { homedir } from 'os';
9
- import { resolve as pathResolve, join } from 'path';
9
+ import { resolve as pathResolve, join, isAbsolute } from 'path';
10
10
  import { WebSocketServer } from 'ws';
11
- import { LexConfig } from '../../LexConfig.js';
11
+ import { LexConfig, getPackageDir } from '../../LexConfig.js';
12
12
  import { createSpinner, removeFiles } from '../../utils/app.js';
13
13
  import { log } from '../../utils/log.js';
14
14
  const getCacheDir = ()=>{
@@ -90,24 +90,62 @@ const displayServerStatus = (httpPort, httpsPort, wsPort, host, quiet, publicIp)
90
90
  };
91
91
  const loadHandler = async (handlerPath, outputDir)=>{
92
92
  try {
93
- const fullPath = pathResolve(outputDir, handlerPath);
94
- log(`Loading handler from: ${fullPath}`, 'info', false);
93
+ // Handle both relative paths and absolute paths
94
+ // If handlerPath includes a file extension, use it as-is
95
+ // Otherwise, try .js, .mjs, .cjs extensions
96
+ let fullPath;
97
+ if (isAbsolute(handlerPath)) {
98
+ fullPath = handlerPath;
99
+ } else {
100
+ fullPath = pathResolve(outputDir, handlerPath);
101
+ }
102
+ // Try different extensions if file doesn't exist
103
+ if (!existsSync(fullPath)) {
104
+ const extensions = [
105
+ '.js',
106
+ '.mjs',
107
+ '.cjs',
108
+ '.ts'
109
+ ];
110
+ const pathWithoutExt = fullPath.replace(/\.(js|mjs|cjs|ts)$/, '');
111
+ for (const ext of extensions){
112
+ const candidatePath = pathWithoutExt + ext;
113
+ if (existsSync(candidatePath)) {
114
+ fullPath = candidatePath;
115
+ break;
116
+ }
117
+ }
118
+ }
119
+ console.log(`[Serverless] Loading handler from: ${fullPath}`);
120
+ console.log(`[Serverless] File exists: ${existsSync(fullPath)}`);
95
121
  if (!existsSync(fullPath)) {
122
+ console.error(`[Serverless] Handler file not found: ${fullPath}`);
123
+ console.error(`[Serverless] Output directory: ${outputDir}`);
124
+ console.error(`[Serverless] Handler path from config: ${handlerPath}`);
96
125
  throw new Error(`Handler file not found: ${fullPath}`);
97
126
  }
98
127
  // Dynamic import of the handler with better error handling
99
128
  try {
100
- const handlerModule = await import(fullPath);
101
- log(`Handler module loaded: ${Object.keys(handlerModule)}`, 'info', false);
129
+ // Add .js extension if importing TypeScript compiled output
130
+ const importPath = fullPath.endsWith('.ts') ? fullPath.replace(/\.ts$/, '.js') : fullPath;
131
+ console.log(`[Serverless] Importing handler from: ${importPath}`);
132
+ const handlerModule = await import(importPath);
133
+ console.log(`[Serverless] Handler module loaded. Exports: ${Object.keys(handlerModule).join(', ')}`);
102
134
  const handler = handlerModule.default || handlerModule.handler || handlerModule;
103
- log(`Handler found: ${typeof handler}`, 'info', false);
135
+ console.log(`[Serverless] Handler found: ${typeof handler}, isFunction: ${typeof handler === 'function'}`);
136
+ if (typeof handler !== 'function') {
137
+ console.error(`[Serverless] Handler is not a function. Type: ${typeof handler}, Value:`, handler);
138
+ return null;
139
+ }
104
140
  return handler;
105
141
  } catch (importError) {
106
- log(`Import error for handler ${handlerPath}: ${importError.message}`, 'error', false);
142
+ console.error(`[Serverless] Import error for handler ${handlerPath}:`, importError.message);
143
+ console.error('[Serverless] Import error stack:', importError.stack);
107
144
  return null;
108
145
  }
109
146
  } catch (error) {
110
- log(`Error loading handler ${handlerPath}: ${error.message}`, 'error', false);
147
+ console.error(`[Serverless] Error loading handler ${handlerPath}:`, error.message);
148
+ console.error('[Serverless] Error stack:', error.stack);
111
149
  return null;
112
150
  }
113
151
  };
@@ -304,19 +342,29 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
304
342
  const url = req.url || '/';
305
343
  const method = req.method || 'GET';
306
344
  const pathname = req.path || url.split('?')[0]; // Extract pathname without query string
307
- log(`${method} ${url} (pathname: ${pathname})`, 'info', false);
345
+ // Always log requests (not affected by quiet flag for debugging)
346
+ console.log(`[Serverless] ${method} ${url} (pathname: ${pathname})`);
308
347
  // Find matching function
309
348
  let matchedFunction = null;
310
349
  if (config.functions) {
350
+ const functionNames = Object.keys(config.functions);
351
+ console.log(`[Serverless] Available functions: ${functionNames.join(', ')}`);
352
+ console.log('[Serverless] Config functions:', JSON.stringify(config.functions, null, 2));
311
353
  for (const [functionName, functionConfig] of Object.entries(config.functions)){
312
354
  if (functionConfig.events) {
313
355
  for (const event of functionConfig.events){
314
356
  if (event.http) {
315
357
  const eventPath = event.http.path || '/';
316
- const eventMethod = event.http.method || 'GET';
358
+ const eventMethod = (event.http.method || 'GET').toUpperCase();
359
+ const requestMethod = method.toUpperCase();
360
+ console.log(`[Serverless] Checking function ${functionName}: path="${eventPath}", method="${eventMethod}" against pathname="${pathname}", method="${requestMethod}"`);
317
361
  // Improved path matching - compare pathname without query string
318
- if (eventPath && eventPath === pathname && eventMethod === method) {
362
+ // Normalize paths (remove trailing slashes for comparison)
363
+ const normalizedEventPath = eventPath.replace(/\/$/, '') || '/';
364
+ const normalizedPathname = pathname.replace(/\/$/, '') || '/';
365
+ if (normalizedEventPath === normalizedPathname && eventMethod === requestMethod) {
319
366
  matchedFunction = functionName;
367
+ console.log(`[Serverless] ✓ Matched function: ${matchedFunction}`);
320
368
  break;
321
369
  }
322
370
  }
@@ -326,12 +374,16 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
326
374
  break;
327
375
  }
328
376
  }
377
+ } else {
378
+ console.log('[Serverless] No functions found in config');
329
379
  }
330
380
  if (matchedFunction && config.functions[matchedFunction]) {
331
381
  // Resolve handler path relative to output directory
332
382
  const handlerPath = config.functions[matchedFunction].handler;
383
+ console.log(`[Serverless] Loading handler: ${handlerPath} from outputDir: ${outputDir}`);
333
384
  const handler = await loadHandler(handlerPath, outputDir);
334
385
  if (handler) {
386
+ console.log(`[Serverless] Handler loaded successfully, type: ${typeof handler}`);
335
387
  const wrappedHandler = captureConsoleLogs(handler, quiet);
336
388
  const event = {
337
389
  body: req.body,
@@ -351,7 +403,9 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
351
403
  memoryLimitInMB: '128'
352
404
  };
353
405
  try {
406
+ console.log('[Serverless] Calling handler with event:', JSON.stringify(event, null, 2));
354
407
  const result = await wrappedHandler(event, context);
408
+ console.log('[Serverless] Handler returned:', JSON.stringify(result, null, 2));
355
409
  if (result && typeof result === 'object' && result.statusCode) {
356
410
  res.status(result.statusCode);
357
411
  if (result.headers) {
@@ -364,17 +418,23 @@ const createExpressServer = async (config, outputDir, httpPort, host, quiet, deb
364
418
  res.json(result);
365
419
  }
366
420
  } catch (error) {
421
+ console.error('[Serverless] Handler error:', error.message);
422
+ console.error('[Serverless] Handler error stack:', error.stack);
367
423
  log(`Handler error: ${error.message}`, 'error', false);
368
424
  res.status(500).json({
369
425
  error: error.message
370
426
  });
371
427
  }
372
428
  } else {
429
+ console.error(`[Serverless] Handler not found for function: ${matchedFunction}`);
430
+ console.error(`[Serverless] Handler path: ${handlerPath}, Output dir: ${outputDir}`);
373
431
  res.status(404).json({
374
432
  error: 'Handler not found'
375
433
  });
376
434
  }
377
435
  } else {
436
+ console.error(`[Serverless] Function not found for pathname: ${pathname}, method: ${method}`);
437
+ console.error(`[Serverless] Available functions: ${config.functions ? Object.keys(config.functions).join(', ') : 'none'}`);
378
438
  res.status(404).json({
379
439
  error: 'Function not found'
380
440
  });
@@ -567,18 +627,43 @@ export const serverless = async (cmd, callback = ()=>({}))=>{
567
627
  // Load serverless configuration
568
628
  let serverlessConfig = {};
569
629
  try {
570
- const configPath = config || pathResolve(process.cwd(), 'lex.config.mjs');
571
- log(`Loading serverless config from: ${configPath}`, 'info', quiet);
572
- if (existsSync(configPath)) {
630
+ // Use getPackageDir to handle npm workspaces correctly
631
+ const packageDir = getPackageDir();
632
+ // Try multiple config file formats
633
+ const configFormats = config ? [
634
+ config
635
+ ] : [
636
+ pathResolve(packageDir, 'lex.config.mjs'),
637
+ pathResolve(packageDir, 'lex.config.js'),
638
+ pathResolve(packageDir, 'lex.config.cjs'),
639
+ pathResolve(packageDir, 'lex.config.ts')
640
+ ];
641
+ let configPath = null;
642
+ for (const candidatePath of configFormats){
643
+ if (existsSync(candidatePath)) {
644
+ configPath = candidatePath;
645
+ break;
646
+ }
647
+ }
648
+ if (configPath) {
649
+ log(`Loading serverless config from: ${configPath}`, 'info', quiet);
573
650
  const configModule = await import(configPath);
574
651
  serverlessConfig = configModule.default?.serverless || configModule.serverless || {};
575
652
  log('Serverless config loaded successfully', 'info', quiet);
576
- log(`Loaded functions: ${Object.keys(serverlessConfig.functions || {}).join(', ')}`, 'info', quiet);
653
+ const functionNames = Object.keys(serverlessConfig.functions || {});
654
+ log(`Loaded functions: ${functionNames.length > 0 ? functionNames.join(', ') : 'none'}`, 'info', quiet);
655
+ // Debug: Print full config if debug mode
656
+ if (debug) {
657
+ log(`Full serverless config: ${JSON.stringify(serverlessConfig, null, 2)}`, 'info', false);
658
+ }
577
659
  } else {
578
- log(`No serverless config found at ${configPath}, using defaults`, 'warn', quiet);
660
+ log(`No serverless config found. Tried: ${configFormats.join(', ')}`, 'warn', quiet);
579
661
  }
580
662
  } catch (error) {
581
663
  log(`Error loading serverless config: ${error.message}`, 'error', quiet);
664
+ if (debug) {
665
+ log(`Config error stack: ${error.stack}`, 'error', false);
666
+ }
582
667
  // Don't exit, continue with empty config
583
668
  }
584
669
  // Merge config with command line options
@@ -653,4 +738,4 @@ export const serverless = async (cmd, callback = ()=>({}))=>{
653
738
  }
654
739
  };
655
740
 
656
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpPT4gdm9pZDtcblxuaW50ZXJmYWNlIFB1YmxpY0lwQ2FjaGUge1xuICBpcDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NIYW5kbGVyIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBldmVudHM/OiBBcnJheTx7XG4gICAgcmVhZG9ubHkgaHR0cD86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgICB9O1xuICAgIHJlYWRvbmx5IHdlYnNvY2tldD86IHtcbiAgICAgIHJlYWRvbmx5IHJvdXRlPzogc3RyaW5nO1xuICAgIH07XG4gIH0+O1xufVxuXG5pbnRlcmZhY2UgU2VydmVybGVzc0NvbmZpZyB7XG4gIHJlYWRvbmx5IGN1c3RvbT86IHtcbiAgICByZWFkb25seSAnc2VydmVybGVzcy1vZmZsaW5lJz86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IGZ1bmN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFNlcnZlcmxlc3NIYW5kbGVyPjtcbn1cblxuY29uc3QgZ2V0Q2FjaGVEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5sZXgtY2FjaGUnKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgbWtkaXJTeW5jKGNhY2hlRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRGlyO1xufTtcblxuY29uc3QgZ2V0Q2FjaGVQYXRoID0gKCk6IHN0cmluZyA9PiBqb2luKGdldENhY2hlRGlyKCksICdwdWJsaWMtaXAuanNvbicpO1xuXG5jb25zdCByZWFkUHVibGljSXBDYWNoZSA9ICgpOiBQdWJsaWNJcENhY2hlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBpZighZXhpc3RzU3luYyhjYWNoZVBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHJlYWRGaWxlU3luYyhjYWNoZVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgY2FjaGU6IFB1YmxpY0lwQ2FjaGUgPSBKU09OLnBhcnNlKGNhY2hlRGF0YSk7XG5cbiAgICAvLyBDaGVjayBpZiBjYWNoZSBpcyBvbGRlciB0aGFuIDEgd2Vla1xuICAgIGNvbnN0IG9uZVdlZWtNcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgIGlmKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiBvbmVXZWVrTXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZTtcbiAgfSBjYXRjaHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgd3JpdGVQdWJsaWNJcENhY2hlID0gKGlwOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgY2FjaGVQYXRoID0gZ2V0Q2FjaGVQYXRoKCk7XG4gIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0ge1xuICAgIGlwLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICB9O1xuICB3cml0ZUZpbGVTeW5jKGNhY2hlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2FjaGUsIG51bGwsIDIpKTtcbn07XG5cbmNvbnN0IGZldGNoUHVibGljSXAgPSAoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgaWYoIWZvcmNlUmVmcmVzaCkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHJlYWRQdWJsaWNJcENhY2hlKCk7XG4gICAgaWYoY2FjaGVkKSB7XG4gICAgICByZXNvbHZlKGNhY2hlZC5pcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIGZldGNoIGluc3RlYWQgb2YgaHR0cHNcbiAgZmV0Y2goJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZycpXG4gICAgLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaXAgPSBkYXRhLnRyaW0oKTtcbiAgICAgIGlmKGlwKSB7XG4gICAgICAgIHdyaXRlUHVibGljSXBDYWNoZShpcCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGlwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpO1xufSk7XG5cbmNvbnN0IGRpc3BsYXlTZXJ2ZXJTdGF0dXMgPSAoXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGh0dHBzUG9ydDogbnVtYmVyLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgcHVibGljSXA/OiBzdHJpbmdcbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGh0dHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH1gO1xuICBjb25zdCBodHRwc1VybCA9IGBodHRwczovLyR7aG9zdH06JHtodHRwc1BvcnR9YDtcbiAgY29uc3Qgd3NVcmwgPSBgd3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG4gIGNvbnN0IHdzc1VybCA9IGB3c3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG5cbiAgbGV0IHVybExpbmVzID0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFA6Jyl9ICAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cFVybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFBTOicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cHNVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXZWJTb2NrZXQ6Jyl9ICR7Y2hhbGsudW5kZXJsaW5lKHdzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV1NTOicpfSAgICAgICAke2NoYWxrLnVuZGVybGluZSh3c3NVcmwpfVxcbmA7XG5cbiAgaWYocHVibGljSXApIHtcbiAgICB1cmxMaW5lcyArPSBgXFxuJHtjaGFsay5ncmVlbignUHVibGljOicpfSAgICAke2NoYWxrLnVuZGVybGluZShgaHR0cDovLyR7cHVibGljSXB9OiR7aHR0cFBvcnR9YCl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+agCBTZXJ2ZXJsZXNzIERldmVsb3BtZW50IFNlcnZlciBSdW5uaW5nJyl9XFxuXFxuJHt1cmxMaW5lc31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1ByZXNzIEN0cmwrQyB0byBzdG9wIHRoZSBzZXJ2ZXInKX1gLFxuICAgIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdjeWFuJyxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgcGFkZGluZzogMVxuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZyhgXFxuJHtzdGF0dXNCb3h9XFxuYCk7XG59O1xuXG5jb25zdCBsb2FkSGFuZGxlciA9IGFzeW5jIChoYW5kbGVyUGF0aDogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBoYW5kbGVyUGF0aCk7XG4gICAgbG9nKGBMb2FkaW5nIGhhbmRsZXIgZnJvbTogJHtmdWxsUGF0aH1gLCAnaW5mbycsIGZhbHNlKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIC8vIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBoYW5kbGVyIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGhhbmRsZXJNb2R1bGUgPSBhd2FpdCBpbXBvcnQoZnVsbFBhdGgpO1xuICAgICAgbG9nKGBIYW5kbGVyIG1vZHVsZSBsb2FkZWQ6ICR7T2JqZWN0LmtleXMoaGFuZGxlck1vZHVsZSl9YCwgJ2luZm8nLCBmYWxzZSk7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBoYW5kbGVyTW9kdWxlLmRlZmF1bHQgfHwgaGFuZGxlck1vZHVsZS5oYW5kbGVyIHx8IGhhbmRsZXJNb2R1bGU7XG4gICAgICBsb2coYEhhbmRsZXIgZm91bmQ6ICR7dHlwZW9mIGhhbmRsZXJ9YCwgJ2luZm8nLCBmYWxzZSk7XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH0gY2F0Y2goaW1wb3J0RXJyb3IpIHtcbiAgICAgIGxvZyhgSW1wb3J0IGVycm9yIGZvciBoYW5kbGVyICR7aGFuZGxlclBhdGh9OiAke2ltcG9ydEVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBFcnJvciBsb2FkaW5nIGhhbmRsZXIgJHtoYW5kbGVyUGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGNhcHR1cmVDb25zb2xlTG9ncyA9IChoYW5kbGVyOiAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KT0+IFByb21pc2U8YW55PiwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm4gaGFuZGxlcjtcbiAgfVxuXG4gIHJldHVybiBhc3luYyAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KSA9PiB7XG4gICAgLy8gQ2FwdHVyZSBjb25zb2xlLmxvZywgY29uc29sZS5lcnJvciwgZXRjLlxuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVXYXJuID0gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUluZm8gPSBjb25zb2xlLmluZm87XG5cbiAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc29sZS5sb2cgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0xPR10gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbRVJST1JdICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS53YXJuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtXQVJOXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlV2FybiguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtJTkZPXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlSW5mbyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAvLyBPdXRwdXQgY2FwdHVyZWQgbG9nc1xuICAgICAgaWYobG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBIYW5kbGVyIENvbnNvbGUgT3V0cHV0IC0tLScpKTtcbiAgICAgICAgbG9ncy5mb3JFYWNoKChsb2cpID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkobG9nKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCctLS0gRW5kIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGNvbnNvbGUgbWV0aG9kc1xuICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICBjb25zb2xlLmVycm9yID0gb3JpZ2luYWxDb25zb2xlRXJyb3I7XG4gICAgICBjb25zb2xlLndhcm4gPSBvcmlnaW5hbENvbnNvbGVXYXJuO1xuICAgICAgY29uc29sZS5pbmZvID0gb3JpZ2luYWxDb25zb2xlSW5mbztcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVFeHByZXNzU2VydmVyID0gYXN5bmMgKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICBodHRwUG9ydDogbnVtYmVyLFxuICBob3N0OiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBFbmFibGUgQ09SU1xuICBhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBQQVRDSCwgT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnKicpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJywgJ3RydWUnKTtcblxuICAgIGlmKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFyc2UgSlNPTiBib2RpZXNcbiAgYXBwLnVzZShleHByZXNzLmpzb24oKSk7XG5cbiAgLy8gTG9hZCBHcmFwaFFMIGhhbmRsZXJcbiAgY29uc3QgbG9hZEdyYXBoUUxTY2hlbWEgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBmaW5kIGEgR3JhcGhRTCBoYW5kbGVyXG4gICAgICBsZXQgZ3JhcGhxbEhhbmRsZXIgPSBudWxsO1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCAmJiBldmVudC5odHRwLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAvLyBMb29rIGZvciBHcmFwaFFMIGVuZHBvaW50c1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9wdWJsaWMnIHx8IGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9ncmFwaHFsJykge1xuICAgICAgICAgICAgICAgICAgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihmdW5jdGlvbkNvbmZpZy5oYW5kbGVyLCBvdXRwdXREaXIpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgbG9nKCdGb3VuZCBHcmFwaFFMIGhhbmRsZXInLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgcmV0dXJuIGdyYXBocWxIYW5kbGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEdyYXBoUUwgaGFuZGxlcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgdXAgR3JhcGhRTCBoYW5kbGVyIGZvciBHcmFwaFFMIHJlcXVlc3RzXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkR3JhcGhRTFNjaGVtYSgpO1xuICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAvLyBGaW5kIHRoZSBHcmFwaFFMIHBhdGggZnJvbSB0aGUgc2VydmVybGVzcyBjb25maWdcbiAgICAgIGxldCBncmFwaHFsUGF0aCA9ICcvZ3JhcGhxbCc7IC8vIGRlZmF1bHQgZmFsbGJhY2tcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBmb3IoY29uc3QgW19mdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudD8uaHR0cD8ucGF0aCkge1xuICAgICAgICAgICAgICAgIGdyYXBocWxQYXRoID0gZXZlbnQuaHR0cC5wYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxQYXRoICE9PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHVwIEdyYXBoUUwgZW5kcG9pbnQgd2l0aCBlbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICBhcHAudXNlKGdyYXBocWxQYXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgLy8gR3JhcGhRTCBEZWJ1ZyBMb2dnaW5nXG4gICAgICAgIGlmKGRlYnVnICYmIHJlcS5ib2R5ICYmIHJlcS5ib2R5LnF1ZXJ5KSB7XG4gICAgICAgICAgbG9nKCfwn5SNIEdyYXBoUUwgRGVidWcgTW9kZTogQW5hbHl6aW5nIHJlcXVlc3QuLi4nLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBsb2coYPCfk50gR3JhcGhRTCBRdWVyeTogJHtyZXEuYm9keS5xdWVyeX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBpZihyZXEuYm9keS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGxvZyhg8J+TiiBHcmFwaFFMIFZhcmlhYmxlczogJHtKU09OLnN0cmluZ2lmeShyZXEuYm9keS52YXJpYWJsZXMsIG51bGwsIDIpfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXEuYm9keS5vcGVyYXRpb25OYW1lKSB7XG4gICAgICAgICAgICBsb2coYPCfj7fvuI8gIEdyYXBoUUwgT3BlcmF0aW9uOiAke3JlcS5ib2R5Lm9wZXJhdGlvbk5hbWV9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY29uc29sZS5sb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgY29uc3QgbG9nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGFyZ3MubWFwKChhcmcpID0+XG4gICAgICAgICAgICAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIDIpIDogU3RyaW5nKGFyZykpXG4gICAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgICAgbG9ncy5wdXNoKGxvZ01lc3NhZ2UpO1xuICAgICAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyhgW0dyYXBoUUxdICR7bG9nTWVzc2FnZX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDcmVhdGUgY29udGV4dCBmb3IgdGhlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogJ2dyYXBocWwnLFxuICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiAnYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjpncmFwaHFsJyxcbiAgICAgICAgICBsb2dHcm91cE5hbWU6ICcvYXdzL2xhbWJkYS9ncmFwaHFsJyxcbiAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgcmVzXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhncmFwaHFsSGFuZGxlciwgcXVpZXQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciB3aXRoIEdyYXBoUUwgcGFyYW1ldGVyc1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgaHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgcGF0aDogZ3JhcGhxbFBhdGgsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHt9XG4gICAgICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3VsdFxuICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICBpZihyZXN1bHQuaGVhZGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICAgICAgbG9nKGBHcmFwaFFMIGhhbmRsZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsb2coYEdyYXBoUUwgZW5kcG9pbnQgYXZhaWxhYmxlIGF0IGh0dHA6Ly8ke2hvc3R9OiR7aHR0cFBvcnR9JHtncmFwaHFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHNldHRpbmcgdXAgR3JhcGhRTDogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIGZvciBub24tR3JhcGhRTCByb3V0ZXMgLSBoYW5kbGUgYWxsIHJlbWFpbmluZyByb3V0ZXNcbiAgYXBwLnVzZSgnLycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSByZXEudXJsIHx8ICcvJztcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IHJlcS5wYXRoIHx8IHVybC5zcGxpdCgnPycpWzBdOyAvLyBFeHRyYWN0IHBhdGhuYW1lIHdpdGhvdXQgcXVlcnkgc3RyaW5nXG5cbiAgICAgIGxvZyhgJHttZXRob2R9ICR7dXJsfSAocGF0aG5hbWU6ICR7cGF0aG5hbWV9KWAsICdpbmZvJywgZmFsc2UpO1xuXG4gICAgICAvLyBGaW5kIG1hdGNoaW5nIGZ1bmN0aW9uXG4gICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICBmb3IoY29uc3QgZXZlbnQgb2YgZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudFBhdGggPSBldmVudC5odHRwLnBhdGggfHwgJy8nO1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TWV0aG9kID0gZXZlbnQuaHR0cC5tZXRob2QgfHwgJ0dFVCc7XG5cbiAgICAgICAgICAgICAgICAvLyBJbXByb3ZlZCBwYXRoIG1hdGNoaW5nIC0gY29tcGFyZSBwYXRobmFtZSB3aXRob3V0IHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50UGF0aCAmJiBldmVudFBhdGggPT09IHBhdGhuYW1lICYmIGV2ZW50TWV0aG9kID09PSBtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgIG1hdGNoZWRGdW5jdGlvbiA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dKSB7XG4gICAgICAgIC8vIFJlc29sdmUgaGFuZGxlciBwYXRoIHJlbGF0aXZlIHRvIG91dHB1dCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0uaGFuZGxlcjtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGhhbmRsZXJQYXRoLCBvdXRwdXREaXIpO1xuXG4gICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHJlcS5ib2R5LFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHJlcS5xdWVyeVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBIYW5kbGVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0hhbmRsZXIgbm90IGZvdW5kJ30pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCkuanNvbih7ZXJyb3I6ICdGdW5jdGlvbiBub3QgZm91bmQnfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBSb3V0ZSBoYW5kbGluZyBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtlcnJvcjogZXJyb3IubWVzc2FnZX0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGFwcDtcbn07XG5cbmNvbnN0IGNyZWF0ZVdlYlNvY2tldFNlcnZlciA9IChcbiAgY29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnLFxuICBvdXRwdXREaXI6IHN0cmluZyxcbiAgd3NQb3J0OiBudW1iZXIsXG4gIHF1aWV0OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IHdzcyA9IG5ldyBXZWJTb2NrZXRTZXJ2ZXIoe3BvcnQ6IHdzUG9ydH0pO1xuXG4gIHdzcy5vbignY29ubmVjdGlvbicsIGFzeW5jICh3cywgcmVxKSA9PiB7XG4gICAgbG9nKGBXZWJTb2NrZXQgY29ubmVjdGlvbiBlc3RhYmxpc2hlZDogJHtyZXEudXJsfWAsICdpbmZvJywgZmFsc2UpO1xuXG4gICAgd3Mub24oJ21lc3NhZ2UnLCBhc3luYyAobWVzc2FnZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UobWVzc2FnZS50b1N0cmluZygpKTtcblxuICAgICAgICAvLyBGaW5kIG1hdGNoaW5nIFdlYlNvY2tldCBmdW5jdGlvblxuICAgICAgICBsZXQgbWF0Y2hlZEZ1bmN0aW9uID0gbnVsbDtcblxuICAgICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgICAgZm9yKGNvbnN0IFtmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgICAgaWYoZnVuY3Rpb25Db25maWcuZXZlbnRzKSB7XG4gICAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgICBpZihldmVudC53ZWJzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlID0gZXZlbnQud2Vic29ja2V0LnJvdXRlIHx8ICckY29ubmVjdCc7XG4gICAgICAgICAgICAgICAgICBpZihyb3V0ZSA9PT0gJyRkZWZhdWx0JyB8fCByb3V0ZSA9PT0gZGF0YS5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbikge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dKSB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGNvbmZpZy5mdW5jdGlvbnNbbWF0Y2hlZEZ1bmN0aW9uXS5oYW5kbGVyLCBvdXRwdXREaXIpO1xuXG4gICAgICAgICAgaWYoaGFuZGxlcikge1xuICAgICAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlZEhhbmRsZXIgPSBjYXB0dXJlQ29uc29sZUxvZ3MoaGFuZGxlciwgcXVpZXQpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgICAgIGJvZHk6IGRhdGEuYm9keSB8fCBudWxsLFxuICAgICAgICAgICAgICByZXF1ZXN0Q29udGV4dDoge1xuICAgICAgICAgICAgICAgIGFwaUdhdGV3YXk6IHtcbiAgICAgICAgICAgICAgICAgIGVuZHBvaW50OiBgd3M6Ly9sb2NhbGhvc3Q6JHt3c1BvcnR9YFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbklkOiAndGVzdC1jb25uZWN0aW9uLWlkJyxcbiAgICAgICAgICAgICAgICByb3V0ZUtleTogZGF0YS5hY3Rpb24gfHwgJyRkZWZhdWx0J1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgICAgICBmdW5jdGlvbk5hbWU6IG1hdGNoZWRGdW5jdGlvbixcbiAgICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgICAgIGludm9rZWRGdW5jdGlvbkFybjogYGFybjphd3M6bGFtYmRhOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6ZnVuY3Rpb246JHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgICAgbG9nU3RyZWFtTmFtZTogJ3Rlc3QtbG9nLXN0cmVhbScsXG4gICAgICAgICAgICAgIG1lbW9yeUxpbWl0SW5NQjogJzEyOCdcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKGV2ZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIExhbWJkYSByZXNwb25zZSBmb3JtYXQgZm9yIFdlYlNvY2tldFxuICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdC5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBMYW1iZGEgcmVzcG9uc2Ugb2JqZWN0LCBleHRyYWN0IHRoZSBib2R5XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXN1bHQuYm9keSB8fCAnJztcbiAgICAgICAgICAgICAgd3Muc2VuZChib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBkaXJlY3QgcmVzcG9uc2UsIHN0cmluZ2lmeSBpdFxuICAgICAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogJ0hhbmRsZXIgbm90IGZvdW5kJ30pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6ICdXZWJTb2NrZXQgZnVuY3Rpb24gbm90IGZvdW5kJ30pKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFdlYlNvY2tldCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7ZXJyb3I6IGVycm9yLm1lc3NhZ2V9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3cy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICBsb2coJ1dlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlZCcsICdpbmZvJywgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gd3NzO1xufTtcblxuY29uc3QgbG9hZEVudkZpbGUgPSAoZW52UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gIGNvbnN0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICBpZighZXhpc3RzU3luYyhlbnZQYXRoKSkge1xuICAgIHJldHVybiBlbnZWYXJzO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnZDb250ZW50ID0gcmVhZEZpbGVTeW5jKGVudlBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgbGluZXMgPSBlbnZDb250ZW50LnNwbGl0KCdcXG4nKTtcblxuICAgIGZvcihjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuXG4gICAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgICAgaWYoIXRyaW1tZWRMaW5lIHx8IHRyaW1tZWRMaW5lLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgS0VZPXZhbHVlIGZvcm1hdFxuICAgICAgY29uc3QgZXF1YWxJbmRleCA9IHRyaW1tZWRMaW5lLmluZGV4T2YoJz0nKTtcbiAgICAgIGlmKGVxdWFsSW5kZXggPiAwKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRyaW1tZWRMaW5lLnN1YnN0cmluZygwLCBlcXVhbEluZGV4KS50cmltKCk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZExpbmUuc3Vic3RyaW5nKGVxdWFsSW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHF1b3RlcyBpZiBwcmVzZW50XG4gICAgICAgIGNvbnN0IGNsZWFuVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKTtcblxuICAgICAgICBpZihrZXkpIHtcbiAgICAgICAgICBlbnZWYXJzW2tleV0gPSBjbGVhblZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBXYXJuaW5nOiBDb3VsZCBub3QgbG9hZCAuZW52IGZpbGUgYXQgJHtlbnZQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICd3YXJuJywgZmFsc2UpO1xuICB9XG5cbiAgcmV0dXJuIGVudlZhcnM7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VydmVybGVzcyA9IGFzeW5jIChcbiAgY21kOiBTZXJ2ZXJsZXNzT3B0aW9ucyxcbiAgY2FsbGJhY2s6IFNlcnZlcmxlc3NDYWxsYmFjayA9ICgpID0+ICh7fSlcbik6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGRlYnVnID0gZmFsc2UsXG4gICAgaG9zdCA9ICdsb2NhbGhvc3QnLFxuICAgIGh0dHBQb3J0ID0gNTAwMCxcbiAgICBodHRwc1BvcnQgPSA1MDAxLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHVzZVB1YmxpY0lwLFxuICAgIHZhcmlhYmxlcyxcbiAgICB3c1BvcnQgPSA1MDAyXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBzdGFydGluZyBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIC8vIExvYWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gLmVudiBmaWxlc1xuICBjb25zdCBlbnZQYXRocyA9IFtcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudicpLFxuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52LmxvY2FsJyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYuZGV2ZWxvcG1lbnQnKVxuICBdO1xuXG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgLy8gTG9hZCBmcm9tIC5lbnYgZmlsZXMgaW4gb3JkZXIgKGxhdGVyIGZpbGVzIG92ZXJyaWRlIGVhcmxpZXIgb25lcylcbiAgZm9yKGNvbnN0IGVudlBhdGggb2YgZW52UGF0aHMpIHtcbiAgICBjb25zdCBmaWxlRW52VmFycyA9IGxvYWRFbnZGaWxlKGVudlBhdGgpO1xuICAgIGlmKE9iamVjdC5rZXlzKGZpbGVFbnZWYXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICBsb2coYExvYWRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbTogJHtlbnZQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH1cbiAgICBlbnZWYXJzID0gey4uLmVudlZhcnMsIC4uLmZpbGVFbnZWYXJzfTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHdpdGggZGVmYXVsdCBOT0RFX0VOViBhbmQgbG9hZGVkIC5lbnYgdmFyaWFibGVzXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ2RldmVsb3BtZW50JywgLi4uZW52VmFyc307XG5cbiAgLy8gT3ZlcnJpZGUgd2l0aCBjb21tYW5kIGxpbmUgdmFyaWFibGVzIGlmIHByb3ZpZGVkXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGlWYXJzID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgICAgdmFyaWFibGVzT2JqID0gey4uLnZhcmlhYmxlc09iaiwgLi4uY2xpVmFyc307XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIC8vIElmIGluIHRlc3QgbW9kZSwgZXhpdCBlYXJseSBhZnRlciBsb2FkaW5nIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICBpZih0ZXN0KSB7XG4gICAgbG9nKCdUZXN0IG1vZGU6IEVudmlyb25tZW50IHZhcmlhYmxlcyBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHJlbW92ZSkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0NsZWFuaW5nIG91dHB1dCBkaXJlY3RvcnkuLi4nKTtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXRGdWxsUGF0aCB8fCAnJyk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdTdWNjZXNzZnVsbHkgY2xlYW5lZCBvdXRwdXQgZGlyZWN0b3J5IScpO1xuICB9XG5cbiAgLy8gTG9hZCBzZXJ2ZXJsZXNzIGNvbmZpZ3VyYXRpb25cbiAgbGV0IHNlcnZlcmxlc3NDb25maWc6IFNlcnZlcmxlc3NDb25maWcgPSB7fTtcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBjb25maWcgfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ2xleC5jb25maWcubWpzJyk7XG4gICAgbG9nKGBMb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgIGlmKGV4aXN0c1N5bmMoY29uZmlnUGF0aCkpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ01vZHVsZSA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgIHNlcnZlcmxlc3NDb25maWcgPSBjb25maWdNb2R1bGUuZGVmYXVsdD8uc2VydmVybGVzcyB8fCBjb25maWdNb2R1bGUuc2VydmVybGVzcyB8fCB7fTtcbiAgICAgIGxvZygnU2VydmVybGVzcyBjb25maWcgbG9hZGVkIHN1Y2Nlc3NmdWxseScsICdpbmZvJywgcXVpZXQpO1xuICAgICAgbG9nKGBMb2FkZWQgZnVuY3Rpb25zOiAke09iamVjdC5rZXlzKHNlcnZlcmxlc3NDb25maWcuZnVuY3Rpb25zIHx8IHt9KS5qb2luKCcsICcpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYE5vIHNlcnZlcmxlc3MgY29uZmlnIGZvdW5kIGF0ICR7Y29uZmlnUGF0aH0sIHVzaW5nIGRlZmF1bHRzYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBFcnJvciBsb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIC8vIERvbid0IGV4aXQsIGNvbnRpbnVlIHdpdGggZW1wdHkgY29uZmlnXG4gIH1cblxuICAvLyBNZXJnZSBjb25maWcgd2l0aCBjb21tYW5kIGxpbmUgb3B0aW9uc1xuICBjb25zdCBmaW5hbENvbmZpZzogU2VydmVybGVzc0NvbmZpZyA9IHtcbiAgICAuLi5zZXJ2ZXJsZXNzQ29uZmlnLFxuICAgIGN1c3RvbToge1xuICAgICAgJ3NlcnZlcmxlc3Mtb2ZmbGluZSc6IHtcbiAgICAgICAgY29yczogc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10/LmNvcnMgIT09IGZhbHNlLFxuICAgICAgICBob3N0OiBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXT8uaG9zdCB8fCBob3N0LFxuICAgICAgICBodHRwUG9ydDogc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10/Lmh0dHBQb3J0IHx8IGh0dHBQb3J0LFxuICAgICAgICBodHRwc1BvcnQ6IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddPy5odHRwc1BvcnQgfHwgaHR0cHNQb3J0LFxuICAgICAgICB3c1BvcnQ6IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddPy53c1BvcnQgfHwgd3NQb3J0XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG91dHB1dERpciA9IG91dHB1dEZ1bGxQYXRoIHx8ICdsaWInO1xuICBsb2coYFVzaW5nIG91dHB1dCBkaXJlY3Rvcnk6ICR7b3V0cHV0RGlyfWAsICdpbmZvJywgcXVpZXQpO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydCgnU3RhcnRpbmcgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuLi4nKTtcblxuICAgIGNvbnN0IGh0dHBQb3J0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmh0dHBQb3J0ITtcbiAgICBjb25zdCB3c1BvcnQgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEud3NQb3J0ITtcbiAgICBjb25zdCBob3N0ID0gZmluYWxDb25maWcuY3VzdG9tIVsnc2VydmVybGVzcy1vZmZsaW5lJ10hLmhvc3QhO1xuXG4gICAgbG9nKGBDcmVhdGluZyBIVFRQIHNlcnZlciBvbiAke2hvc3R9OiR7aHR0cFBvcnR9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgbG9nKGBDcmVhdGluZyBXZWJTb2NrZXQgc2VydmVyIG9uIHBvcnQgJHt3c1BvcnR9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBDcmVhdGUgRXhwcmVzcyBzZXJ2ZXJcbiAgICBjb25zdCBleHByZXNzQXBwID0gYXdhaXQgY3JlYXRlRXhwcmVzc1NlcnZlcihcbiAgICAgIGZpbmFsQ29uZmlnLFxuICAgICAgb3V0cHV0RGlyLFxuICAgICAgaHR0cFBvcnQsXG4gICAgICBob3N0LFxuICAgICAgcXVpZXQsXG4gICAgICBkZWJ1Z1xuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgV2ViU29ja2V0IHNlcnZlclxuICAgIGNvbnN0IHdzU2VydmVyID0gY3JlYXRlV2ViU29ja2V0U2VydmVyKFxuICAgICAgZmluYWxDb25maWcsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICB3c1BvcnQsXG4gICAgICBxdWlldCxcbiAgICAgIGRlYnVnXG4gICAgKTtcblxuICAgIC8vIEhhbmRsZSBzZXJ2ZXIgZXJyb3JzXG4gICAgd3NTZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYFdlYlNvY2tldCBzZXJ2ZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBzdGFydCBXZWJTb2NrZXQgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IHNlcnZlciA9IGV4cHJlc3NBcHAubGlzdGVuKGh0dHBQb3J0LCBob3N0LCAoKSA9PiB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJyk7XG5cbiAgICAgIGRpc3BsYXlTZXJ2ZXJTdGF0dXMoXG4gICAgICAgIGh0dHBQb3J0LFxuICAgICAgICBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cHNQb3J0ISxcbiAgICAgICAgd3NQb3J0LFxuICAgICAgICBob3N0LFxuICAgICAgICBxdWlldFxuICAgICAgKTtcblxuICAgICAgZmV0Y2hQdWJsaWNJcCh1c2VQdWJsaWNJcCkudGhlbigocHVibGljSXApID0+IHtcbiAgICAgICAgaWYocHVibGljSXApIHtcbiAgICAgICAgICBkaXNwbGF5U2VydmVyU3RhdHVzKFxuICAgICAgICAgICAgaHR0cFBvcnQsXG4gICAgICAgICAgICBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cHNQb3J0ISxcbiAgICAgICAgICAgIHdzUG9ydCxcbiAgICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgICBxdWlldCxcbiAgICAgICAgICAgIHB1YmxpY0lwXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgRXhwcmVzcyBzZXJ2ZXIgZXJyb3JzXG4gICAgc2VydmVyLm9uKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgbG9nKGBFeHByZXNzIHNlcnZlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IEV4cHJlc3Mgc2VydmVyLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm47XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZ3JhY2VmdWwgc2h1dGRvd25cbiAgICBjb25zdCBzaHV0ZG93biA9ICgpID0+IHtcbiAgICAgIGxvZygnXFxuU2h1dHRpbmcgZG93biBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICB3c1NlcnZlci5jbG9zZSgpO1xuICAgICAgY2FsbGJhY2soMCk7XG4gICAgfTtcblxuICAgIHByb2Nlc3Mub24oJ1NJR0lOVCcsIHNodXRkb3duKTtcbiAgICBwcm9jZXNzLm9uKCdTSUdURVJNJywgc2h1dGRvd24pO1xuXG4gICAgLy8gS2VlcCB0aGUgcHJvY2VzcyBhbGl2ZVxuICAgIHByb2Nlc3Muc3RkaW4ucmVzdW1lKCk7XG5cbiAgICBsb2coJ1NlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyIGlzIHJ1bm5pbmcuIFByZXNzIEN0cmwrQyB0byBzdG9wLicsICdpbmZvJywgcXVpZXQpO1xuXG4gICAgLy8gRG9uJ3QgY2FsbCBjYWxsYmFjayBoZXJlLCBsZXQgdGhlIHByb2Nlc3Mgc3RheSBhbGl2ZVxuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLicpO1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLCJuYW1lcyI6WyJib3hlbiIsImNoYWxrIiwiZXhwcmVzcyIsInJlYWRGaWxlU3luYyIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiaG9tZWRpciIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImpvaW4iLCJXZWJTb2NrZXRTZXJ2ZXIiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwicmVtb3ZlRmlsZXMiLCJsb2ciLCJnZXRDYWNoZURpciIsImNhY2hlRGlyIiwicmVjdXJzaXZlIiwiZ2V0Q2FjaGVQYXRoIiwicmVhZFB1YmxpY0lwQ2FjaGUiLCJjYWNoZVBhdGgiLCJjYWNoZURhdGEiLCJjYWNoZSIsIkpTT04iLCJwYXJzZSIsIm9uZVdlZWtNcyIsIkRhdGUiLCJub3ciLCJ0aW1lc3RhbXAiLCJ3cml0ZVB1YmxpY0lwQ2FjaGUiLCJpcCIsInN0cmluZ2lmeSIsImZldGNoUHVibGljSXAiLCJmb3JjZVJlZnJlc2giLCJQcm9taXNlIiwiY2FjaGVkIiwiZmV0Y2giLCJ0aGVuIiwicmVzIiwidGV4dCIsImRhdGEiLCJ0cmltIiwiY2F0Y2giLCJ1bmRlZmluZWQiLCJkaXNwbGF5U2VydmVyU3RhdHVzIiwiaHR0cFBvcnQiLCJodHRwc1BvcnQiLCJ3c1BvcnQiLCJob3N0IiwicXVpZXQiLCJwdWJsaWNJcCIsImh0dHBVcmwiLCJodHRwc1VybCIsIndzVXJsIiwid3NzVXJsIiwidXJsTGluZXMiLCJncmVlbiIsInVuZGVybGluZSIsInN0YXR1c0JveCIsImN5YW4iLCJib2xkIiwieWVsbG93IiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJTdHlsZSIsIm1hcmdpbiIsInBhZGRpbmciLCJjb25zb2xlIiwibG9hZEhhbmRsZXIiLCJoYW5kbGVyUGF0aCIsIm91dHB1dERpciIsImZ1bGxQYXRoIiwiRXJyb3IiLCJoYW5kbGVyTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImhhbmRsZXIiLCJkZWZhdWx0IiwiaW1wb3J0RXJyb3IiLCJtZXNzYWdlIiwiZXJyb3IiLCJjYXB0dXJlQ29uc29sZUxvZ3MiLCJldmVudCIsImNvbnRleHQiLCJvcmlnaW5hbENvbnNvbGVMb2ciLCJvcmlnaW5hbENvbnNvbGVFcnJvciIsIm9yaWdpbmFsQ29uc29sZVdhcm4iLCJ3YXJuIiwib3JpZ2luYWxDb25zb2xlSW5mbyIsImluZm8iLCJsb2dzIiwiYXJncyIsInB1c2giLCJyZXN1bHQiLCJsZW5ndGgiLCJncmF5IiwiZm9yRWFjaCIsImNyZWF0ZUV4cHJlc3NTZXJ2ZXIiLCJjb25maWciLCJkZWJ1ZyIsImFwcCIsInVzZSIsInJlcSIsIm5leHQiLCJoZWFkZXIiLCJtZXRob2QiLCJzZW5kU3RhdHVzIiwianNvbiIsImxvYWRHcmFwaFFMU2NoZW1hIiwiZ3JhcGhxbEhhbmRsZXIiLCJmdW5jdGlvbnMiLCJmdW5jdGlvbk5hbWUiLCJmdW5jdGlvbkNvbmZpZyIsImVudHJpZXMiLCJldmVudHMiLCJodHRwIiwicGF0aCIsImdyYXBocWxQYXRoIiwiX2Z1bmN0aW9uTmFtZSIsImJvZHkiLCJxdWVyeSIsInZhcmlhYmxlcyIsIm9wZXJhdGlvbk5hbWUiLCJsb2dNZXNzYWdlIiwibWFwIiwiYXJnIiwiU3RyaW5nIiwiYXdzUmVxdWVzdElkIiwiZnVuY3Rpb25WZXJzaW9uIiwiZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzIiwiaW52b2tlZEZ1bmN0aW9uQXJuIiwibG9nR3JvdXBOYW1lIiwibG9nU3RyZWFtTmFtZSIsIndyYXBwZWRIYW5kbGVyIiwiaGVhZGVycyIsImh0dHBNZXRob2QiLCJxdWVyeVN0cmluZ1BhcmFtZXRlcnMiLCJzdGF0dXNDb2RlIiwic3RhdHVzIiwia2V5IiwidmFsdWUiLCJzZXRIZWFkZXIiLCJzZW5kIiwidXJsIiwicGF0aG5hbWUiLCJzcGxpdCIsIm1hdGNoZWRGdW5jdGlvbiIsImV2ZW50UGF0aCIsImV2ZW50TWV0aG9kIiwibWVtb3J5TGltaXRJbk1CIiwiY3JlYXRlV2ViU29ja2V0U2VydmVyIiwid3NzIiwicG9ydCIsIm9uIiwid3MiLCJ0b1N0cmluZyIsIndlYnNvY2tldCIsInJvdXRlIiwiYWN0aW9uIiwicmVxdWVzdENvbnRleHQiLCJhcGlHYXRld2F5IiwiZW5kcG9pbnQiLCJjb25uZWN0aW9uSWQiLCJyb3V0ZUtleSIsImxvYWRFbnZGaWxlIiwiZW52UGF0aCIsImVudlZhcnMiLCJlbnZDb250ZW50IiwibGluZXMiLCJsaW5lIiwidHJpbW1lZExpbmUiLCJzdGFydHNXaXRoIiwiZXF1YWxJbmRleCIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJjbGVhblZhbHVlIiwicmVwbGFjZSIsInNlcnZlcmxlc3MiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJyZW1vdmUiLCJ0ZXN0IiwidXNlUHVibGljSXAiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsImVudlBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImZpbGVFbnZWYXJzIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJjbGlWYXJzIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJzdWNjZWVkIiwic2VydmVybGVzc0NvbmZpZyIsImNvbmZpZ1BhdGgiLCJjb25maWdNb2R1bGUiLCJmaW5hbENvbmZpZyIsImN1c3RvbSIsImNvcnMiLCJleHByZXNzQXBwIiwid3NTZXJ2ZXIiLCJmYWlsIiwic2VydmVyIiwibGlzdGVuIiwic2h1dGRvd24iLCJjbG9zZSIsInN0ZGluIiwicmVzdW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLGFBQWEsVUFBVTtBQUM5QixTQUFRQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN0RSxTQUFRQyxPQUFPLFFBQU8sS0FBSztBQUMzQixTQUFRQyxXQUFXQyxXQUFXLEVBQUVDLElBQUksUUFBTyxPQUFPO0FBQ2xELFNBQVFDLGVBQWUsUUFBTyxLQUFLO0FBRW5DLFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsYUFBYSxFQUFFQyxXQUFXLFFBQU8scUJBQXFCO0FBQzlELFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFtRHZDLE1BQU1DLGNBQWM7SUFDbEIsTUFBTUMsV0FBV1AsS0FBS0gsV0FBVztJQUNqQyxJQUFHLENBQUNILFdBQVdhLFdBQVc7UUFDeEJaLFVBQVVZ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
741
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9zZXJ2ZXJsZXNzL3NlcnZlcmxlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQge3JlYWRGaWxlU3luYywgZXhpc3RzU3luYywgbWtkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge2hvbWVkaXJ9IGZyb20gJ29zJztcbmltcG9ydCB7cmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSwgam9pbiwgaXNBYnNvbHV0ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1dlYlNvY2tldFNlcnZlcn0gZnJvbSAnd3MnO1xuXG5pbXBvcnQge0xleENvbmZpZywgZ2V0UGFja2FnZURpcn0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2ZXJsZXNzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVidWc/OiBib29sZWFuO1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuICByZWFkb25seSBodHRwUG9ydD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VQdWJsaWNJcD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJsZXNzQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpPT4gdm9pZDtcblxuaW50ZXJmYWNlIFB1YmxpY0lwQ2FjaGUge1xuICBpcDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFNlcnZlcmxlc3NIYW5kbGVyIHtcbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBldmVudHM/OiBBcnJheTx7XG4gICAgcmVhZG9ubHkgaHR0cD86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgbWV0aG9kPzogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbiAgICB9O1xuICAgIHJlYWRvbmx5IHdlYnNvY2tldD86IHtcbiAgICAgIHJlYWRvbmx5IHJvdXRlPzogc3RyaW5nO1xuICAgIH07XG4gIH0+O1xufVxuXG5pbnRlcmZhY2UgU2VydmVybGVzc0NvbmZpZyB7XG4gIHJlYWRvbmx5IGN1c3RvbT86IHtcbiAgICByZWFkb25seSAnc2VydmVybGVzcy1vZmZsaW5lJz86IHtcbiAgICAgIHJlYWRvbmx5IGNvcnM/OiBib29sZWFuO1xuICAgICAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuICAgICAgcmVhZG9ubHkgd3NQb3J0PzogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHJlYWRvbmx5IGZ1bmN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFNlcnZlcmxlc3NIYW5kbGVyPjtcbn1cblxuY29uc3QgZ2V0Q2FjaGVEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5sZXgtY2FjaGUnKTtcbiAgaWYoIWV4aXN0c1N5bmMoY2FjaGVEaXIpKSB7XG4gICAgbWtkaXJTeW5jKGNhY2hlRGlyLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRGlyO1xufTtcblxuY29uc3QgZ2V0Q2FjaGVQYXRoID0gKCk6IHN0cmluZyA9PiBqb2luKGdldENhY2hlRGlyKCksICdwdWJsaWMtaXAuanNvbicpO1xuXG5jb25zdCByZWFkUHVibGljSXBDYWNoZSA9ICgpOiBQdWJsaWNJcENhY2hlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNhY2hlUGF0aCA9IGdldENhY2hlUGF0aCgpO1xuICBpZighZXhpc3RzU3luYyhjYWNoZVBhdGgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHJlYWRGaWxlU3luYyhjYWNoZVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgY2FjaGU6IFB1YmxpY0lwQ2FjaGUgPSBKU09OLnBhcnNlKGNhY2hlRGF0YSk7XG5cbiAgICAvLyBDaGVjayBpZiBjYWNoZSBpcyBvbGRlciB0aGFuIDEgd2Vla1xuICAgIGNvbnN0IG9uZVdlZWtNcyA9IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuICAgIGlmKERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPiBvbmVXZWVrTXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZTtcbiAgfSBjYXRjaHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcblxuY29uc3Qgd3JpdGVQdWJsaWNJcENhY2hlID0gKGlwOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY29uc3QgY2FjaGVQYXRoID0gZ2V0Q2FjaGVQYXRoKCk7XG4gIGNvbnN0IGNhY2hlOiBQdWJsaWNJcENhY2hlID0ge1xuICAgIGlwLFxuICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKVxuICB9O1xuICB3cml0ZUZpbGVTeW5jKGNhY2hlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY2FjaGUsIG51bGwsIDIpKTtcbn07XG5cbmNvbnN0IGZldGNoUHVibGljSXAgPSAoZm9yY2VSZWZyZXNoOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgaWYoIWZvcmNlUmVmcmVzaCkge1xuICAgIGNvbnN0IGNhY2hlZCA9IHJlYWRQdWJsaWNJcENhY2hlKCk7XG4gICAgaWYoY2FjaGVkKSB7XG4gICAgICByZXNvbHZlKGNhY2hlZC5pcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gVXNlIGZldGNoIGluc3RlYWQgb2YgaHR0cHNcbiAgZmV0Y2goJ2h0dHBzOi8vYXBpLmlwaWZ5Lm9yZycpXG4gICAgLnRoZW4oKHJlcykgPT4gcmVzLnRleHQoKSlcbiAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgaXAgPSBkYXRhLnRyaW0oKTtcbiAgICAgIGlmKGlwKSB7XG4gICAgICAgIHdyaXRlUHVibGljSXBDYWNoZShpcCk7XG4gICAgICB9XG4gICAgICByZXNvbHZlKGlwKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpO1xufSk7XG5cbmNvbnN0IGRpc3BsYXlTZXJ2ZXJTdGF0dXMgPSAoXG4gIGh0dHBQb3J0OiBudW1iZXIsXG4gIGh0dHBzUG9ydDogbnVtYmVyLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgaG9zdDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbixcbiAgcHVibGljSXA/OiBzdHJpbmdcbikgPT4ge1xuICBpZihxdWlldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGh0dHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtodHRwUG9ydH1gO1xuICBjb25zdCBodHRwc1VybCA9IGBodHRwczovLyR7aG9zdH06JHtodHRwc1BvcnR9YDtcbiAgY29uc3Qgd3NVcmwgPSBgd3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG4gIGNvbnN0IHdzc1VybCA9IGB3c3M6Ly8ke2hvc3R9OiR7d3NQb3J0fWA7XG5cbiAgbGV0IHVybExpbmVzID0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFA6Jyl9ICAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cFVybCl9XFxuYDtcbiAgdXJsTGluZXMgKz0gYCR7Y2hhbGsuZ3JlZW4oJ0hUVFBTOicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUoaHR0cHNVcmwpfVxcbmA7XG4gIHVybExpbmVzICs9IGAke2NoYWxrLmdyZWVuKCdXZWJTb2NrZXQ6Jyl9ICR7Y2hhbGsudW5kZXJsaW5lKHdzVXJsKX1cXG5gO1xuICB1cmxMaW5lcyArPSBgJHtjaGFsay5ncmVlbignV1NTOicpfSAgICAgICAke2NoYWxrLnVuZGVybGluZSh3c3NVcmwpfVxcbmA7XG5cbiAgaWYocHVibGljSXApIHtcbiAgICB1cmxMaW5lcyArPSBgXFxuJHtjaGFsay5ncmVlbignUHVibGljOicpfSAgICAke2NoYWxrLnVuZGVybGluZShgaHR0cDovLyR7cHVibGljSXB9OiR7aHR0cFBvcnR9YCl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+agCBTZXJ2ZXJsZXNzIERldmVsb3BtZW50IFNlcnZlciBSdW5uaW5nJyl9XFxuXFxuJHt1cmxMaW5lc31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1ByZXNzIEN0cmwrQyB0byBzdG9wIHRoZSBzZXJ2ZXInKX1gLFxuICAgIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdjeWFuJyxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgcGFkZGluZzogMVxuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZyhgXFxuJHtzdGF0dXNCb3h9XFxuYCk7XG59O1xuXG5jb25zdCBsb2FkSGFuZGxlciA9IGFzeW5jIChoYW5kbGVyUGF0aDogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIC8vIEhhbmRsZSBib3RoIHJlbGF0aXZlIHBhdGhzIGFuZCBhYnNvbHV0ZSBwYXRoc1xuICAgIC8vIElmIGhhbmRsZXJQYXRoIGluY2x1ZGVzIGEgZmlsZSBleHRlbnNpb24sIHVzZSBpdCBhcy1pc1xuICAgIC8vIE90aGVyd2lzZSwgdHJ5IC5qcywgLm1qcywgLmNqcyBleHRlbnNpb25zXG4gICAgbGV0IGZ1bGxQYXRoOiBzdHJpbmc7XG5cbiAgICBpZihpc0Fic29sdXRlKGhhbmRsZXJQYXRoKSkge1xuICAgICAgZnVsbFBhdGggPSBoYW5kbGVyUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZnVsbFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIGhhbmRsZXJQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBUcnkgZGlmZmVyZW50IGV4dGVuc2lvbnMgaWYgZmlsZSBkb2Vzbid0IGV4aXN0XG4gICAgaWYoIWV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgICBjb25zdCBleHRlbnNpb25zID0gWycuanMnLCAnLm1qcycsICcuY2pzJywgJy50cyddO1xuICAgICAgY29uc3QgcGF0aFdpdGhvdXRFeHQgPSBmdWxsUGF0aC5yZXBsYWNlKC9cXC4oanN8bWpzfGNqc3x0cykkLywgJycpO1xuICAgICAgZm9yKGNvbnN0IGV4dCBvZiBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVBhdGggPSBwYXRoV2l0aG91dEV4dCArIGV4dDtcbiAgICAgICAgaWYoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgICAgIGZ1bGxQYXRoID0gY2FuZGlkYXRlUGF0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBbU2VydmVybGVzc10gTG9hZGluZyBoYW5kbGVyIGZyb206ICR7ZnVsbFBhdGh9YCk7XG4gICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBGaWxlIGV4aXN0czogJHtleGlzdHNTeW5jKGZ1bGxQYXRoKX1gKTtcblxuICAgIGlmKCFleGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgZmlsZSBub3QgZm91bmQ6ICR7ZnVsbFBhdGh9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gT3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoIGZyb20gY29uZmlnOiAke2hhbmRsZXJQYXRofWApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBIYW5kbGVyIGZpbGUgbm90IGZvdW5kOiAke2Z1bGxQYXRofWApO1xuICAgIH1cblxuICAgIC8vIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBoYW5kbGVyIHdpdGggYmV0dGVyIGVycm9yIGhhbmRsaW5nXG4gICAgdHJ5IHtcbiAgICAgIC8vIEFkZCAuanMgZXh0ZW5zaW9uIGlmIGltcG9ydGluZyBUeXBlU2NyaXB0IGNvbXBpbGVkIG91dHB1dFxuICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IGZ1bGxQYXRoLmVuZHNXaXRoKCcudHMnKSA/IGZ1bGxQYXRoLnJlcGxhY2UoL1xcLnRzJC8sICcuanMnKSA6IGZ1bGxQYXRoO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBJbXBvcnRpbmcgaGFuZGxlciBmcm9tOiAke2ltcG9ydFBhdGh9YCk7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJNb2R1bGUgPSBhd2FpdCBpbXBvcnQoaW1wb3J0UGF0aCk7XG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbW9kdWxlIGxvYWRlZC4gRXhwb3J0czogJHtPYmplY3Qua2V5cyhoYW5kbGVyTW9kdWxlKS5qb2luKCcsICcpfWApO1xuXG4gICAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlck1vZHVsZS5kZWZhdWx0IHx8IGhhbmRsZXJNb2R1bGUuaGFuZGxlciB8fCBoYW5kbGVyTW9kdWxlO1xuICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBIYW5kbGVyIGZvdW5kOiAke3R5cGVvZiBoYW5kbGVyfSwgaXNGdW5jdGlvbjogJHt0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJ31gKTtcblxuICAgICAgaWYodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEhhbmRsZXIgaXMgbm90IGEgZnVuY3Rpb24uIFR5cGU6ICR7dHlwZW9mIGhhbmRsZXJ9LCBWYWx1ZTpgLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYW5kbGVyO1xuICAgIH0gY2F0Y2goaW1wb3J0RXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEltcG9ydCBlcnJvciBmb3IgaGFuZGxlciAke2hhbmRsZXJQYXRofTpgLCBpbXBvcnRFcnJvci5tZXNzYWdlKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBJbXBvcnQgZXJyb3Igc3RhY2s6JywgaW1wb3J0RXJyb3Iuc3RhY2spO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gRXJyb3IgbG9hZGluZyBoYW5kbGVyICR7aGFuZGxlclBhdGh9OmAsIGVycm9yLm1lc3NhZ2UpO1xuICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBFcnJvciBzdGFjazonLCBlcnJvci5zdGFjayk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGNhcHR1cmVDb25zb2xlTG9ncyA9IChoYW5kbGVyOiAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KT0+IFByb21pc2U8YW55PiwgcXVpZXQ6IGJvb2xlYW4pID0+IHtcbiAgaWYocXVpZXQpIHtcbiAgICByZXR1cm4gaGFuZGxlcjtcbiAgfVxuXG4gIHJldHVybiBhc3luYyAoZXZlbnQ6IGFueSwgY29udGV4dDogYW55KSA9PiB7XG4gICAgLy8gQ2FwdHVyZSBjb25zb2xlLmxvZywgY29uc29sZS5lcnJvciwgZXRjLlxuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUxvZyA9IGNvbnNvbGUubG9nO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVXYXJuID0gY29uc29sZS53YXJuO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29uc29sZUluZm8gPSBjb25zb2xlLmluZm87XG5cbiAgICBjb25zdCBsb2dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgY29uc29sZS5sb2cgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGxvZ3MucHVzaChgW0xPR10gJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5lcnJvciA9ICguLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgbG9ncy5wdXNoKGBbRVJST1JdICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgICBvcmlnaW5hbENvbnNvbGVFcnJvciguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS53YXJuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtXQVJOXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlV2FybiguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgY29uc29sZS5pbmZvID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICBsb2dzLnB1c2goYFtJTkZPXSAke2FyZ3Muam9pbignICcpfWApO1xuICAgICAgb3JpZ2luYWxDb25zb2xlSW5mbyguLi5hcmdzKTtcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAvLyBPdXRwdXQgY2FwdHVyZWQgbG9nc1xuICAgICAgaWYobG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJy0tLSBIYW5kbGVyIENvbnNvbGUgT3V0cHV0IC0tLScpKTtcbiAgICAgICAgbG9ncy5mb3JFYWNoKChsb2cpID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkobG9nKSkpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCctLS0gRW5kIEhhbmRsZXIgQ29uc29sZSBPdXRwdXQgLS0tJykpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIGNvbnNvbGUgbWV0aG9kc1xuICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICBjb25zb2xlLmVycm9yID0gb3JpZ2luYWxDb25zb2xlRXJyb3I7XG4gICAgICBjb25zb2xlLndhcm4gPSBvcmlnaW5hbENvbnNvbGVXYXJuO1xuICAgICAgY29uc29sZS5pbmZvID0gb3JpZ2luYWxDb25zb2xlSW5mbztcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVFeHByZXNzU2VydmVyID0gYXN5bmMgKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICBodHRwUG9ydDogbnVtYmVyLFxuICBob3N0OiBzdHJpbmcsXG4gIHF1aWV0OiBib29sZWFuLFxuICBkZWJ1ZzogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IGFwcCA9IGV4cHJlc3MoKTtcblxuICAvLyBFbmFibGUgQ09SU1xuICBhcHAudXNlKChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsICcqJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBQQVRDSCwgT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCAnKicpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJywgJ3RydWUnKTtcblxuICAgIGlmKHJlcS5tZXRob2QgPT09ICdPUFRJT05TJykge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gUGFyc2UgSlNPTiBib2RpZXNcbiAgYXBwLnVzZShleHByZXNzLmpzb24oKSk7XG5cbiAgLy8gTG9hZCBHcmFwaFFMIGhhbmRsZXJcbiAgY29uc3QgbG9hZEdyYXBoUUxTY2hlbWEgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBmaW5kIGEgR3JhcGhRTCBoYW5kbGVyXG4gICAgICBsZXQgZ3JhcGhxbEhhbmRsZXIgPSBudWxsO1xuXG4gICAgICBpZihjb25maWcuZnVuY3Rpb25zKSB7XG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCAmJiBldmVudC5odHRwLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAvLyBMb29rIGZvciBHcmFwaFFMIGVuZHBvaW50c1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9wdWJsaWMnIHx8IGV2ZW50Lmh0dHAucGF0aCA9PT0gJy9ncmFwaHFsJykge1xuICAgICAgICAgICAgICAgICAgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkSGFuZGxlcihmdW5jdGlvbkNvbmZpZy5oYW5kbGVyLCBvdXRwdXREaXIpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoZ3JhcGhxbEhhbmRsZXIpIHtcbiAgICAgICAgbG9nKCdGb3VuZCBHcmFwaFFMIGhhbmRsZXInLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgcmV0dXJuIGdyYXBocWxIYW5kbGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBFcnJvciBsb2FkaW5nIEdyYXBoUUwgaGFuZGxlcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICAvLyBTZXQgdXAgR3JhcGhRTCBoYW5kbGVyIGZvciBHcmFwaFFMIHJlcXVlc3RzXG4gIHRyeSB7XG4gICAgY29uc3QgZ3JhcGhxbEhhbmRsZXIgPSBhd2FpdCBsb2FkR3JhcGhRTFNjaGVtYSgpO1xuICAgIGlmKGdyYXBocWxIYW5kbGVyKSB7XG4gICAgICAvLyBGaW5kIHRoZSBHcmFwaFFMIHBhdGggZnJvbSB0aGUgc2VydmVybGVzcyBjb25maWdcbiAgICAgIGxldCBncmFwaHFsUGF0aCA9ICcvZ3JhcGhxbCc7IC8vIGRlZmF1bHQgZmFsbGJhY2tcblxuICAgICAgaWYoY29uZmlnLmZ1bmN0aW9ucykge1xuICAgICAgICBmb3IoY29uc3QgW19mdW5jdGlvbk5hbWUsIGZ1bmN0aW9uQ29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcuZnVuY3Rpb25zKSkge1xuICAgICAgICAgIGlmKGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICBpZihldmVudD8uaHR0cD8ucGF0aCkge1xuICAgICAgICAgICAgICAgIGdyYXBocWxQYXRoID0gZXZlbnQuaHR0cC5wYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGdyYXBocWxQYXRoICE9PSAnL2dyYXBocWwnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHVwIEdyYXBoUUwgZW5kcG9pbnQgd2l0aCBlbmhhbmNlZCBjb25zb2xlLmxvZyBjYXB0dXJlXG4gICAgICBhcHAudXNlKGdyYXBocWxQYXRoLCBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgLy8gR3JhcGhRTCBEZWJ1ZyBMb2dnaW5nXG4gICAgICAgIGlmKGRlYnVnICYmIHJlcS5ib2R5ICYmIHJlcS5ib2R5LnF1ZXJ5KSB7XG4gICAgICAgICAgbG9nKCfwn5SNIEdyYXBoUUwgRGVidWcgTW9kZTogQW5hbHl6aW5nIHJlcXVlc3QuLi4nLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBsb2coYPCfk50gR3JhcGhRTCBRdWVyeTogJHtyZXEuYm9keS5xdWVyeX1gLCAnaW5mbycsIGZhbHNlKTtcbiAgICAgICAgICBpZihyZXEuYm9keS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGxvZyhg8J+TiiBHcmFwaFFMIFZhcmlhYmxlczogJHtKU09OLnN0cmluZ2lmeShyZXEuYm9keS52YXJpYWJsZXMsIG51bGwsIDIpfWAsICdpbmZvJywgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZihyZXEuYm9keS5vcGVyYXRpb25OYW1lKSB7XG4gICAgICAgICAgICBsb2coYPCfj7fvuI8gIEdyYXBoUUwgT3BlcmF0aW9uOiAke3JlcS5ib2R5Lm9wZXJhdGlvbk5hbWV9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5oYW5jZWQgY29uc29sZS5sb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbnNvbGVMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgY29uc3QgbG9nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBjb25zb2xlLmxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGFyZ3MubWFwKChhcmcpID0+XG4gICAgICAgICAgICAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIDIpIDogU3RyaW5nKGFyZykpXG4gICAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgICAgbG9ncy5wdXNoKGxvZ01lc3NhZ2UpO1xuICAgICAgICAgIG9yaWdpbmFsQ29uc29sZUxvZyhgW0dyYXBoUUxdICR7bG9nTWVzc2FnZX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDcmVhdGUgY29udGV4dCBmb3IgdGhlIGhhbmRsZXJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6ICd0ZXN0LXJlcXVlc3QtaWQnLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogJ2dyYXBocWwnLFxuICAgICAgICAgIGZ1bmN0aW9uVmVyc2lvbjogJyRMQVRFU1QnLFxuICAgICAgICAgIGdldFJlbWFpbmluZ1RpbWVJbk1pbGxpczogKCkgPT4gMzAwMDAsXG4gICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiAnYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjpncmFwaHFsJyxcbiAgICAgICAgICBsb2dHcm91cE5hbWU6ICcvYXdzL2xhbWJkYS9ncmFwaHFsJyxcbiAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgcmVzXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gV3JhcCBoYW5kbGVyIHdpdGggY29uc29sZSBsb2cgY2FwdHVyZVxuICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhncmFwaHFsSGFuZGxlciwgcXVpZXQpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gQ2FsbCB0aGUgaGFuZGxlciB3aXRoIEdyYXBoUUwgcGFyYW1ldGVyc1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBwZWRIYW5kbGVyKHtcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcS5ib2R5KSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzLFxuICAgICAgICAgICAgaHR0cE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgcGF0aDogZ3JhcGhxbFBhdGgsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHt9XG4gICAgICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG5cbiAgICAgICAgICAvLyBIYW5kbGUgdGhlIHJlc3VsdFxuICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICBpZihyZXN1bHQuaGVhZGVycykge1xuICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzLmpzb24ocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAvLyBSZXN0b3JlIGNvbnNvbGUubG9nXG4gICAgICAgICAgY29uc29sZS5sb2cgPSBvcmlnaW5hbENvbnNvbGVMb2c7XG4gICAgICAgICAgbG9nKGBHcmFwaFFMIGhhbmRsZXIgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBmYWxzZSk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBsb2coYEdyYXBoUUwgZW5kcG9pbnQgYXZhaWxhYmxlIGF0IGh0dHA6Ly8ke2hvc3R9OiR7aHR0cFBvcnR9JHtncmFwaHFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHNldHRpbmcgdXAgR3JhcGhRTDogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgfVxuXG4gIC8vIEZhbGxiYWNrIGZvciBub24tR3JhcGhRTCByb3V0ZXMgLSBoYW5kbGUgYWxsIHJlbWFpbmluZyByb3V0ZXNcbiAgYXBwLnVzZSgnLycsIGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSByZXEudXJsIHx8ICcvJztcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2QgfHwgJ0dFVCc7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IHJlcS5wYXRoIHx8IHVybC5zcGxpdCgnPycpWzBdOyAvLyBFeHRyYWN0IHBhdGhuYW1lIHdpdGhvdXQgcXVlcnkgc3RyaW5nXG5cbiAgICAgIC8vIEFsd2F5cyBsb2cgcmVxdWVzdHMgKG5vdCBhZmZlY3RlZCBieSBxdWlldCBmbGFnIGZvciBkZWJ1Z2dpbmcpXG4gICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdICR7bWV0aG9kfSAke3VybH0gKHBhdGhuYW1lOiAke3BhdGhuYW1lfSlgKTtcblxuICAgICAgLy8gRmluZCBtYXRjaGluZyBmdW5jdGlvblxuICAgICAgbGV0IG1hdGNoZWRGdW5jdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbnMpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEF2YWlsYWJsZSBmdW5jdGlvbnM6ICR7ZnVuY3Rpb25OYW1lcy5qb2luKCcsICcpfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnW1NlcnZlcmxlc3NdIENvbmZpZyBmdW5jdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoY29uZmlnLmZ1bmN0aW9ucywgbnVsbCwgMikpO1xuXG4gICAgICAgIGZvcihjb25zdCBbZnVuY3Rpb25OYW1lLCBmdW5jdGlvbkNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLmZ1bmN0aW9ucykpIHtcbiAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgIGZvcihjb25zdCBldmVudCBvZiBmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgaWYoZXZlbnQuaHR0cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50UGF0aCA9IGV2ZW50Lmh0dHAucGF0aCB8fCAnLyc7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRNZXRob2QgPSAoZXZlbnQuaHR0cC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBDaGVja2luZyBmdW5jdGlvbiAke2Z1bmN0aW9uTmFtZX06IHBhdGg9XCIke2V2ZW50UGF0aH1cIiwgbWV0aG9kPVwiJHtldmVudE1ldGhvZH1cIiBhZ2FpbnN0IHBhdGhuYW1lPVwiJHtwYXRobmFtZX1cIiwgbWV0aG9kPVwiJHtyZXF1ZXN0TWV0aG9kfVwiYCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJbXByb3ZlZCBwYXRoIG1hdGNoaW5nIC0gY29tcGFyZSBwYXRobmFtZSB3aXRob3V0IHF1ZXJ5IHN0cmluZ1xuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyAocmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgZm9yIGNvbXBhcmlzb24pXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEV2ZW50UGF0aCA9IGV2ZW50UGF0aC5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGF0aG5hbWUgPSBwYXRobmFtZS5yZXBsYWNlKC9cXC8kLywgJycpIHx8ICcvJztcblxuICAgICAgICAgICAgICAgIGlmKG5vcm1hbGl6ZWRFdmVudFBhdGggPT09IG5vcm1hbGl6ZWRQYXRobmFtZSAmJiBldmVudE1ldGhvZCA9PT0gcmVxdWVzdE1ldGhvZCkge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlZEZ1bmN0aW9uID0gZnVuY3Rpb25OYW1lO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSDinJMgTWF0Y2hlZCBmdW5jdGlvbjogJHttYXRjaGVkRnVuY3Rpb259YCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbU2VydmVybGVzc10gTm8gZnVuY3Rpb25zIGZvdW5kIGluIGNvbmZpZycpO1xuICAgICAgfVxuXG4gICAgICBpZihtYXRjaGVkRnVuY3Rpb24gJiYgY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dKSB7XG4gICAgICAgIC8vIFJlc29sdmUgaGFuZGxlciBwYXRoIHJlbGF0aXZlIHRvIG91dHB1dCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0uaGFuZGxlcjtcbiAgICAgICAgY29uc29sZS5sb2coYFtTZXJ2ZXJsZXNzXSBMb2FkaW5nIGhhbmRsZXI6ICR7aGFuZGxlclBhdGh9IGZyb20gb3V0cHV0RGlyOiAke291dHB1dERpcn1gKTtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IGF3YWl0IGxvYWRIYW5kbGVyKGhhbmRsZXJQYXRoLCBvdXRwdXREaXIpO1xuXG4gICAgICAgIGlmKGhhbmRsZXIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1NlcnZlcmxlc3NdIEhhbmRsZXIgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgdHlwZTogJHt0eXBlb2YgaGFuZGxlcn1gKTtcbiAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG5cbiAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIGJvZHk6IHJlcS5ib2R5LFxuICAgICAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgICAgICBodHRwTWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IHJlcS5xdWVyeVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgICAgICAgYXdzUmVxdWVzdElkOiAndGVzdC1yZXF1ZXN0LWlkJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgZnVuY3Rpb25WZXJzaW9uOiAnJExBVEVTVCcsXG4gICAgICAgICAgICBnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXM6ICgpID0+IDMwMDAwLFxuICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHttYXRjaGVkRnVuY3Rpb259YCxcbiAgICAgICAgICAgIGxvZ1N0cmVhbU5hbWU6ICd0ZXN0LWxvZy1zdHJlYW0nLFxuICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBDYWxsaW5nIGhhbmRsZXIgd2l0aCBldmVudDonLCBKU09OLnN0cmluZ2lmeShldmVudCwgbnVsbCwgMikpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIHJldHVybmVkOicsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCwgbnVsbCwgMikpO1xuXG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICAgIGlmKHJlc3VsdC5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0LmhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlcy5zZW5kKHJlc3VsdC5ib2R5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcy5qc29uKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbU2VydmVybGVzc10gSGFuZGxlciBlcnJvcjonLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tTZXJ2ZXJsZXNzXSBIYW5kbGVyIGVycm9yIHN0YWNrOicsIGVycm9yLnN0YWNrKTtcbiAgICAgICAgICAgIGxvZyhgSGFuZGxlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICAgICAgICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtlcnJvcjogZXJyb3IubWVzc2FnZX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBub3QgZm91bmQgZm9yIGZ1bmN0aW9uOiAke21hdGNoZWRGdW5jdGlvbn1gKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBbU2VydmVybGVzc10gSGFuZGxlciBwYXRoOiAke2hhbmRsZXJQYXRofSwgT3V0cHV0IGRpcjogJHtvdXRwdXREaXJ9YCk7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpLmpzb24oe2Vycm9yOiAnSGFuZGxlciBub3QgZm91bmQnfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtTZXJ2ZXJsZXNzXSBGdW5jdGlvbiBub3QgZm91bmQgZm9yIHBhdGhuYW1lOiAke3BhdGhuYW1lfSwgbWV0aG9kOiAke21ldGhvZH1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW1NlcnZlcmxlc3NdIEF2YWlsYWJsZSBmdW5jdGlvbnM6ICR7Y29uZmlnLmZ1bmN0aW9ucyA/IE9iamVjdC5rZXlzKGNvbmZpZy5mdW5jdGlvbnMpLmpvaW4oJywgJykgOiAnbm9uZSd9YCk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KS5qc29uKHtlcnJvcjogJ0Z1bmN0aW9uIG5vdCBmb3VuZCd9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFJvdXRlIGhhbmRsaW5nIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe2Vycm9yOiBlcnJvci5tZXNzYWdlfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYXBwO1xufTtcblxuY29uc3QgY3JlYXRlV2ViU29ja2V0U2VydmVyID0gKFxuICBjb25maWc6IFNlcnZlcmxlc3NDb25maWcsXG4gIG91dHB1dERpcjogc3RyaW5nLFxuICB3c1BvcnQ6IG51bWJlcixcbiAgcXVpZXQ6IGJvb2xlYW4sXG4gIGRlYnVnOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3Qgd3NzID0gbmV3IFdlYlNvY2tldFNlcnZlcih7cG9ydDogd3NQb3J0fSk7XG5cbiAgd3NzLm9uKCdjb25uZWN0aW9uJywgYXN5bmMgKHdzLCByZXEpID0+IHtcbiAgICBsb2coYFdlYlNvY2tldCBjb25uZWN0aW9uIGVzdGFibGlzaGVkOiAke3JlcS51cmx9YCwgJ2luZm8nLCBmYWxzZSk7XG5cbiAgICB3cy5vbignbWVzc2FnZScsIGFzeW5jIChtZXNzYWdlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIC8vIEZpbmQgbWF0Y2hpbmcgV2ViU29ja2V0IGZ1bmN0aW9uXG4gICAgICAgIGxldCBtYXRjaGVkRnVuY3Rpb24gPSBudWxsO1xuXG4gICAgICAgIGlmKGNvbmZpZy5mdW5jdGlvbnMpIHtcbiAgICAgICAgICBmb3IoY29uc3QgW2Z1bmN0aW9uTmFtZSwgZnVuY3Rpb25Db25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZy5mdW5jdGlvbnMpKSB7XG4gICAgICAgICAgICBpZihmdW5jdGlvbkNvbmZpZy5ldmVudHMpIHtcbiAgICAgICAgICAgICAgZm9yKGNvbnN0IGV2ZW50IG9mIGZ1bmN0aW9uQ29uZmlnLmV2ZW50cykge1xuICAgICAgICAgICAgICAgIGlmKGV2ZW50LndlYnNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGUgPSBldmVudC53ZWJzb2NrZXQucm91dGUgfHwgJyRjb25uZWN0JztcbiAgICAgICAgICAgICAgICAgIGlmKHJvdXRlID09PSAnJGRlZmF1bHQnIHx8IHJvdXRlID09PSBkYXRhLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVkRnVuY3Rpb24gPSBmdW5jdGlvbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYobWF0Y2hlZEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKG1hdGNoZWRGdW5jdGlvbiAmJiBjb25maWcuZnVuY3Rpb25zW21hdGNoZWRGdW5jdGlvbl0pIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgbG9hZEhhbmRsZXIoY29uZmlnLmZ1bmN0aW9uc1ttYXRjaGVkRnVuY3Rpb25dLmhhbmRsZXIsIG91dHB1dERpcik7XG5cbiAgICAgICAgICBpZihoYW5kbGVyKSB7XG4gICAgICAgICAgICAvLyBXcmFwIGhhbmRsZXIgd2l0aCBjb25zb2xlIGxvZyBjYXB0dXJlXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVkSGFuZGxlciA9IGNhcHR1cmVDb25zb2xlTG9ncyhoYW5kbGVyLCBxdWlldCk7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgICAgYm9keTogZGF0YS5ib2R5IHx8IG51bGwsXG4gICAgICAgICAgICAgIHJlcXVlc3RDb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgYXBpR2F0ZXdheToge1xuICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6IGB3czovL2xvY2FsaG9zdDoke3dzUG9ydH1gXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uSWQ6ICd0ZXN0LWNvbm5lY3Rpb24taWQnLFxuICAgICAgICAgICAgICAgIHJvdXRlS2V5OiBkYXRhLmFjdGlvbiB8fCAnJGRlZmF1bHQnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgIGF3c1JlcXVlc3RJZDogJ3Rlc3QtcmVxdWVzdC1pZCcsXG4gICAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbWF0Y2hlZEZ1bmN0aW9uLFxuICAgICAgICAgICAgICBmdW5jdGlvblZlcnNpb246ICckTEFURVNUJyxcbiAgICAgICAgICAgICAgZ2V0UmVtYWluaW5nVGltZUluTWlsbGlzOiAoKSA9PiAzMDAwMCxcbiAgICAgICAgICAgICAgaW52b2tlZEZ1bmN0aW9uQXJuOiBgYXJuOmF3czpsYW1iZGE6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpmdW5jdGlvbjoke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgICBsb2dHcm91cE5hbWU6IGAvYXdzL2xhbWJkYS8ke21hdGNoZWRGdW5jdGlvbn1gLFxuICAgICAgICAgICAgICBsb2dTdHJlYW1OYW1lOiAndGVzdC1sb2ctc3RyZWFtJyxcbiAgICAgICAgICAgICAgbWVtb3J5TGltaXRJbk1COiAnMTI4J1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcHBlZEhhbmRsZXIoZXZlbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgTGFtYmRhIHJlc3BvbnNlIGZvcm1hdCBmb3IgV2ViU29ja2V0XG4gICAgICAgICAgICBpZihyZXN1bHQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0LnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIExhbWJkYSByZXNwb25zZSBvYmplY3QsIGV4dHJhY3QgdGhlIGJvZHlcbiAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlc3VsdC5ib2R5IHx8ICcnO1xuICAgICAgICAgICAgICB3cy5zZW5kKGJvZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGRpcmVjdCByZXNwb25zZSwgc3RyaW5naWZ5IGl0XG4gICAgICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe2Vycm9yOiAnSGFuZGxlciBub3QgZm91bmQnfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogJ1dlYlNvY2tldCBmdW5jdGlvbiBub3QgZm91bmQnfSkpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgIGxvZyhgV2ViU29ja2V0IGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgZmFsc2UpO1xuICAgICAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtlcnJvcjogZXJyb3IubWVzc2FnZX0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHdzLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGxvZygnV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkJywgJ2luZm8nLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB3c3M7XG59O1xuXG5jb25zdCBsb2FkRW52RmlsZSA9IChlbnZQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgY29uc3QgZW52VmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGlmKCFleGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gICAgcmV0dXJuIGVudlZhcnM7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVudkNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZW52UGF0aCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGVudkNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuXG4gICAgZm9yKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWRMaW5lID0gbGluZS50cmltKCk7XG5cbiAgICAgIC8vIFNraXAgZW1wdHkgbGluZXMgYW5kIGNvbW1lbnRzXG4gICAgICBpZighdHJpbW1lZExpbmUgfHwgdHJpbW1lZExpbmUuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXJzZSBLRVk9dmFsdWUgZm9ybWF0XG4gICAgICBjb25zdCBlcXVhbEluZGV4ID0gdHJpbW1lZExpbmUuaW5kZXhPZignPScpO1xuICAgICAgaWYoZXF1YWxJbmRleCA+IDApIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdHJpbW1lZExpbmUuc3Vic3RyaW5nKDAsIGVxdWFsSW5kZXgpLnRyaW0oKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0cmltbWVkTGluZS5zdWJzdHJpbmcoZXF1YWxJbmRleCArIDEpLnRyaW0oKTtcblxuICAgICAgICAvLyBSZW1vdmUgcXVvdGVzIGlmIHByZXNlbnRcbiAgICAgICAgY29uc3QgY2xlYW5WYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgJycpO1xuXG4gICAgICAgIGlmKGtleSkge1xuICAgICAgICAgIGVudlZhcnNba2V5XSA9IGNsZWFuVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFdhcm5pbmc6IENvdWxkIG5vdCBsb2FkIC5lbnYgZmlsZSBhdCAke2VudlBhdGh9OiAke2Vycm9yLm1lc3NhZ2V9YCwgJ3dhcm4nLCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gZW52VmFycztcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJ2ZXJsZXNzID0gYXN5bmMgKFxuICBjbWQ6IFNlcnZlcmxlc3NPcHRpb25zLFxuICBjYWxsYmFjazogU2VydmVybGVzc0NhbGxiYWNrID0gKCkgPT4gKHt9KVxuKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgZGVidWcgPSBmYWxzZSxcbiAgICBob3N0ID0gJ2xvY2FsaG9zdCcsXG4gICAgaHR0cFBvcnQgPSA1MDAwLFxuICAgIGh0dHBzUG9ydCA9IDUwMDEsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICByZW1vdmUgPSBmYWxzZSxcbiAgICB0ZXN0ID0gZmFsc2UsXG4gICAgdXNlUHVibGljSXAsXG4gICAgdmFyaWFibGVzLFxuICAgIHdzUG9ydCA9IDUwMDJcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IHN0YXJ0aW5nIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRofSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgLy8gTG9hZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSAuZW52IGZpbGVzXG4gIGNvbnN0IGVudlBhdGhzID0gW1xuICAgIHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuZW52JyksXG4gICAgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy5lbnYubG9jYWwnKSxcbiAgICBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLmVudi5kZXZlbG9wbWVudCcpXG4gIF07XG5cbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvLyBMb2FkIGZyb20gLmVudiBmaWxlcyBpbiBvcmRlciAobGF0ZXIgZmlsZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzKVxuICBmb3IoY29uc3QgZW52UGF0aCBvZiBlbnZQYXRocykge1xuICAgIGNvbnN0IGZpbGVFbnZWYXJzID0gbG9hZEVudkZpbGUoZW52UGF0aCk7XG4gICAgaWYoT2JqZWN0LmtleXMoZmlsZUVudlZhcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvZyhgTG9hZGVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tOiAke2VudlBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgfVxuICAgIGVudlZhcnMgPSB7Li4uZW52VmFycywgLi4uZmlsZUVudlZhcnN9O1xuICB9XG5cbiAgLy8gU3RhcnQgd2l0aCBkZWZhdWx0IE5PREVfRU5WIGFuZCBsb2FkZWQgLmVudiB2YXJpYWJsZXNcbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnLCAuLi5lbnZWYXJzfTtcblxuICAvLyBPdmVycmlkZSB3aXRoIGNvbW1hbmQgbGluZSB2YXJpYWJsZXMgaWYgcHJvdmlkZWRcbiAgaWYodmFyaWFibGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsaVZhcnMgPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgICB2YXJpYWJsZXNPYmogPSB7Li4udmFyaWFibGVzT2JqLCAuLi5jbGlWYXJzfTtcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgLy8gSWYgaW4gdGVzdCBtb2RlLCBleGl0IGVhcmx5IGFmdGVyIGxvYWRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gIGlmKHRlc3QpIHtcbiAgICBsb2coJ1Rlc3QgbW9kZTogRW52aXJvbm1lbnQgdmFyaWFibGVzIGxvYWRlZCwgZXhpdGluZycsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQ2xlYW5pbmcgb3V0cHV0IGRpcmVjdG9yeS4uLicpO1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dEZ1bGxQYXRoIHx8ICcnKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIG91dHB1dCBkaXJlY3RvcnkhJyk7XG4gIH1cblxuICAvLyBMb2FkIHNlcnZlcmxlc3MgY29uZmlndXJhdGlvblxuICBsZXQgc2VydmVybGVzc0NvbmZpZzogU2VydmVybGVzc0NvbmZpZyA9IHt9O1xuXG4gIHRyeSB7XG4gICAgLy8gVXNlIGdldFBhY2thZ2VEaXIgdG8gaGFuZGxlIG5wbSB3b3Jrc3BhY2VzIGNvcnJlY3RseVxuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICAvLyBUcnkgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9ybWF0c1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBjb25maWcgPyBbY29uZmlnXSA6IFtcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLm1qcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcuanMnKSxcbiAgICAgIHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICdsZXguY29uZmlnLmNqcycpLFxuICAgICAgcGF0aFJlc29sdmUocGFja2FnZURpciwgJ2xleC5jb25maWcudHMnKVxuICAgIF07XG5cbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yKGNvbnN0IGNhbmRpZGF0ZVBhdGggb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgaWYoZXhpc3RzU3luYyhjYW5kaWRhdGVQYXRoKSkge1xuICAgICAgICBjb25maWdQYXRoID0gY2FuZGlkYXRlUGF0aDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgbG9nKGBMb2FkaW5nIHNlcnZlcmxlc3MgY29uZmlnIGZyb206ICR7Y29uZmlnUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIGNvbnN0IGNvbmZpZ01vZHVsZSA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgIHNlcnZlcmxlc3NDb25maWcgPSBjb25maWdNb2R1bGUuZGVmYXVsdD8uc2VydmVybGVzcyB8fCBjb25maWdNb2R1bGUuc2VydmVybGVzcyB8fCB7fTtcbiAgICAgIGxvZygnU2VydmVybGVzcyBjb25maWcgbG9hZGVkIHN1Y2Nlc3NmdWxseScsICdpbmZvJywgcXVpZXQpO1xuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lcyA9IE9iamVjdC5rZXlzKHNlcnZlcmxlc3NDb25maWcuZnVuY3Rpb25zIHx8IHt9KTtcbiAgICAgIGxvZyhgTG9hZGVkIGZ1bmN0aW9uczogJHtmdW5jdGlvbk5hbWVzLmxlbmd0aCA+IDAgPyBmdW5jdGlvbk5hbWVzLmpvaW4oJywgJykgOiAnbm9uZSd9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAgIC8vIERlYnVnOiBQcmludCBmdWxsIGNvbmZpZyBpZiBkZWJ1ZyBtb2RlXG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYEZ1bGwgc2VydmVybGVzcyBjb25maWc6ICR7SlNPTi5zdHJpbmdpZnkoc2VydmVybGVzc0NvbmZpZywgbnVsbCwgMil9YCwgJ2luZm8nLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZyhgTm8gc2VydmVybGVzcyBjb25maWcgZm91bmQuIFRyaWVkOiAke2NvbmZpZ0Zvcm1hdHMuam9pbignLCAnKX1gLCAnd2FybicsIHF1aWV0KTtcbiAgICB9XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIGxvYWRpbmcgc2VydmVybGVzcyBjb25maWc6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgaWYoZGVidWcpIHtcbiAgICAgIGxvZyhgQ29uZmlnIGVycm9yIHN0YWNrOiAke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIGZhbHNlKTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgZXhpdCwgY29udGludWUgd2l0aCBlbXB0eSBjb25maWdcbiAgfVxuXG4gIC8vIE1lcmdlIGNvbmZpZyB3aXRoIGNvbW1hbmQgbGluZSBvcHRpb25zXG4gIGNvbnN0IGZpbmFsQ29uZmlnOiBTZXJ2ZXJsZXNzQ29uZmlnID0ge1xuICAgIC4uLnNlcnZlcmxlc3NDb25maWcsXG4gICAgY3VzdG9tOiB7XG4gICAgICAnc2VydmVybGVzcy1vZmZsaW5lJzoge1xuICAgICAgICBjb3JzOiBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXT8uY29ycyAhPT0gZmFsc2UsXG4gICAgICAgIGhvc3Q6IHNlcnZlcmxlc3NDb25maWcuY3VzdG9tPy5bJ3NlcnZlcmxlc3Mtb2ZmbGluZSddPy5ob3N0IHx8IGhvc3QsXG4gICAgICAgIGh0dHBQb3J0OiBzZXJ2ZXJsZXNzQ29uZmlnLmN1c3RvbT8uWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXT8uaHR0cFBvcnQgfHwgaHR0cFBvcnQsXG4gICAgICAgIGh0dHBzUG9ydDogc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10/Lmh0dHBzUG9ydCB8fCBodHRwc1BvcnQsXG4gICAgICAgIHdzUG9ydDogc2VydmVybGVzc0NvbmZpZy5jdXN0b20/Llsnc2VydmVybGVzcy1vZmZsaW5lJ10/LndzUG9ydCB8fCB3c1BvcnRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gb3V0cHV0RnVsbFBhdGggfHwgJ2xpYic7XG4gIGxvZyhgVXNpbmcgb3V0cHV0IGRpcmVjdG9yeTogJHtvdXRwdXREaXJ9YCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdTdGFydGluZyBzZXJ2ZXJsZXNzIGRldmVsb3BtZW50IHNlcnZlci4uLicpO1xuXG4gICAgY29uc3QgaHR0cFBvcnQgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaHR0cFBvcnQhO1xuICAgIGNvbnN0IHdzUG9ydCA9IGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS53c1BvcnQhO1xuICAgIGNvbnN0IGhvc3QgPSBmaW5hbENvbmZpZy5jdXN0b20hWydzZXJ2ZXJsZXNzLW9mZmxpbmUnXSEuaG9zdCE7XG5cbiAgICBsb2coYENyZWF0aW5nIEhUVFAgc2VydmVyIG9uICR7aG9zdH06JHtodHRwUG9ydH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICBsb2coYENyZWF0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgb24gcG9ydCAke3dzUG9ydH1gLCAnaW5mbycsIHF1aWV0KTtcblxuICAgIC8vIENyZWF0ZSBFeHByZXNzIHNlcnZlclxuICAgIGNvbnN0IGV4cHJlc3NBcHAgPSBhd2FpdCBjcmVhdGVFeHByZXNzU2VydmVyKFxuICAgICAgZmluYWxDb25maWcsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICBodHRwUG9ydCxcbiAgICAgIGhvc3QsXG4gICAgICBxdWlldCxcbiAgICAgIGRlYnVnXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBXZWJTb2NrZXQgc2VydmVyXG4gICAgY29uc3Qgd3NTZXJ2ZXIgPSBjcmVhdGVXZWJTb2NrZXRTZXJ2ZXIoXG4gICAgICBmaW5hbENvbmZpZyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgIHdzUG9ydCxcbiAgICAgIHF1aWV0LFxuICAgICAgZGVidWdcbiAgICApO1xuXG4gICAgLy8gSGFuZGxlIHNlcnZlciBlcnJvcnNcbiAgICB3c1NlcnZlci5vbignZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgIGxvZyhgV2ViU29ja2V0IHNlcnZlciBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHN0YXJ0IFdlYlNvY2tldCBzZXJ2ZXIuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIC8vIFN0YXJ0IEV4cHJlc3Mgc2VydmVyXG4gICAgY29uc3Qgc2VydmVyID0gZXhwcmVzc0FwcC5saXN0ZW4oaHR0cFBvcnQsIGhvc3QsICgpID0+IHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIgc3RhcnRlZC4nKTtcblxuICAgICAgZGlzcGxheVNlcnZlclN0YXR1cyhcbiAgICAgICAgaHR0cFBvcnQsXG4gICAgICAgIGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwc1BvcnQhLFxuICAgICAgICB3c1BvcnQsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHF1aWV0XG4gICAgICApO1xuXG4gICAgICBmZXRjaFB1YmxpY0lwKHVzZVB1YmxpY0lwKS50aGVuKChwdWJsaWNJcCkgPT4ge1xuICAgICAgICBpZihwdWJsaWNJcCkge1xuICAgICAgICAgIGRpc3BsYXlTZXJ2ZXJTdGF0dXMoXG4gICAgICAgICAgICBodHRwUG9ydCxcbiAgICAgICAgICAgIGZpbmFsQ29uZmlnLmN1c3RvbSFbJ3NlcnZlcmxlc3Mtb2ZmbGluZSddIS5odHRwc1BvcnQhLFxuICAgICAgICAgICAgd3NQb3J0LFxuICAgICAgICAgICAgaG9zdCxcbiAgICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgICAgcHVibGljSXBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBFeHByZXNzIHNlcnZlciBlcnJvcnNcbiAgICBzZXJ2ZXIub24oJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICBsb2coYEV4cHJlc3Mgc2VydmVyIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgRXhwcmVzcyBzZXJ2ZXIuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBncmFjZWZ1bCBzaHV0ZG93blxuICAgIGNvbnN0IHNodXRkb3duID0gKCkgPT4ge1xuICAgICAgbG9nKCdcXG5TaHV0dGluZyBkb3duIHNlcnZlcmxlc3MgZGV2ZWxvcG1lbnQgc2VydmVyLi4uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgIHdzU2VydmVyLmNsb3NlKCk7XG4gICAgICBjYWxsYmFjaygwKTtcbiAgICB9O1xuXG4gICAgcHJvY2Vzcy5vbignU0lHSU5UJywgc2h1dGRvd24pO1xuICAgIHByb2Nlc3Mub24oJ1NJR1RFUk0nLCBzaHV0ZG93bik7XG5cbiAgICAvLyBLZWVwIHRoZSBwcm9jZXNzIGFsaXZlXG4gICAgcHJvY2Vzcy5zdGRpbi5yZXN1bWUoKTtcblxuICAgIGxvZygnU2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIgaXMgcnVubmluZy4gUHJlc3MgQ3RybCtDIHRvIHN0b3AuJywgJ2luZm8nLCBxdWlldCk7XG5cbiAgICAvLyBEb24ndCBjYWxsIGNhbGxiYWNrIGhlcmUsIGxldCB0aGUgcHJvY2VzcyBzdGF5IGFsaXZlXG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gc3RhcnQgc2VydmVybGVzcyBkZXZlbG9wbWVudCBzZXJ2ZXIuJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07Il0sIm5hbWVzIjpbImJveGVuIiwiY2hhbGsiLCJleHByZXNzIiwicmVhZEZpbGVTeW5jIiwiZXhpc3RzU3luYyIsIm1rZGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJob21lZGlyIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiam9pbiIsImlzQWJzb2x1dGUiLCJXZWJTb2NrZXRTZXJ2ZXIiLCJMZXhDb25maWciLCJnZXRQYWNrYWdlRGlyIiwiY3JlYXRlU3Bpbm5lciIsInJlbW92ZUZpbGVzIiwibG9nIiwiZ2V0Q2FjaGVEaXIiLCJjYWNoZURpciIsInJlY3Vyc2l2ZSIsImdldENhY2hlUGF0aCIsInJlYWRQdWJsaWNJcENhY2hlIiwiY2FjaGVQYXRoIiwiY2FjaGVEYXRhIiwiY2FjaGUiLCJKU09OIiwicGFyc2UiLCJvbmVXZWVrTXMiLCJEYXRlIiwibm93IiwidGltZXN0YW1wIiwid3JpdGVQdWJsaWNJcENhY2hlIiwiaXAiLCJzdHJpbmdpZnkiLCJmZXRjaFB1YmxpY0lwIiwiZm9yY2VSZWZyZXNoIiwiUHJvbWlzZSIsImNhY2hlZCIsImZldGNoIiwidGhlbiIsInJlcyIsInRleHQiLCJkYXRhIiwidHJpbSIsImNhdGNoIiwidW5kZWZpbmVkIiwiZGlzcGxheVNlcnZlclN0YXR1cyIsImh0dHBQb3J0IiwiaHR0cHNQb3J0Iiwid3NQb3J0IiwiaG9zdCIsInF1aWV0IiwicHVibGljSXAiLCJodHRwVXJsIiwiaHR0cHNVcmwiLCJ3c1VybCIsIndzc1VybCIsInVybExpbmVzIiwiZ3JlZW4iLCJ1bmRlcmxpbmUiLCJzdGF0dXNCb3giLCJjeWFuIiwiYm9sZCIsInllbGxvdyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlckNvbG9yIiwiYm9yZGVyU3R5bGUiLCJtYXJnaW4iLCJwYWRkaW5nIiwiY29uc29sZSIsImxvYWRIYW5kbGVyIiwiaGFuZGxlclBhdGgiLCJvdXRwdXREaXIiLCJmdWxsUGF0aCIsImV4dGVuc2lvbnMiLCJwYXRoV2l0aG91dEV4dCIsInJlcGxhY2UiLCJleHQiLCJjYW5kaWRhdGVQYXRoIiwiZXJyb3IiLCJFcnJvciIsImltcG9ydFBhdGgiLCJlbmRzV2l0aCIsImhhbmRsZXJNb2R1bGUiLCJPYmplY3QiLCJrZXlzIiwiaGFuZGxlciIsImRlZmF1bHQiLCJpbXBvcnRFcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsImNhcHR1cmVDb25zb2xlTG9ncyIsImV2ZW50IiwiY29udGV4dCIsIm9yaWdpbmFsQ29uc29sZUxvZyIsIm9yaWdpbmFsQ29uc29sZUVycm9yIiwib3JpZ2luYWxDb25zb2xlV2FybiIsIndhcm4iLCJvcmlnaW5hbENvbnNvbGVJbmZvIiwiaW5mbyIsImxvZ3MiLCJhcmdzIiwicHVzaCIsInJlc3VsdCIsImxlbmd0aCIsImdyYXkiLCJmb3JFYWNoIiwiY3JlYXRlRXhwcmVzc1NlcnZlciIsImNvbmZpZyIsImRlYnVnIiwiYXBwIiwidXNlIiwicmVxIiwibmV4dCIsImhlYWRlciIsIm1ldGhvZCIsInNlbmRTdGF0dXMiLCJqc29uIiwibG9hZEdyYXBoUUxTY2hlbWEiLCJncmFwaHFsSGFuZGxlciIsImZ1bmN0aW9ucyIsImZ1bmN0aW9uTmFtZSIsImZ1bmN0aW9uQ29uZmlnIiwiZW50cmllcyIsImV2ZW50cyIsImh0dHAiLCJwYXRoIiwiZ3JhcGhxbFBhdGgiLCJfZnVuY3Rpb25OYW1lIiwiYm9keSIsInF1ZXJ5IiwidmFyaWFibGVzIiwib3BlcmF0aW9uTmFtZSIsImxvZ01lc3NhZ2UiLCJtYXAiLCJhcmciLCJTdHJpbmciLCJhd3NSZXF1ZXN0SWQiLCJmdW5jdGlvblZlcnNpb24iLCJnZXRSZW1haW5pbmdUaW1lSW5NaWxsaXMiLCJpbnZva2VkRnVuY3Rpb25Bcm4iLCJsb2dHcm91cE5hbWUiLCJsb2dTdHJlYW1OYW1lIiwid3JhcHBlZEhhbmRsZXIiLCJoZWFkZXJzIiwiaHR0cE1ldGhvZCIsInF1ZXJ5U3RyaW5nUGFyYW1ldGVycyIsInN0YXR1c0NvZGUiLCJzdGF0dXMiLCJrZXkiLCJ2YWx1ZSIsInNldEhlYWRlciIsInNlbmQiLCJ1cmwiLCJwYXRobmFtZSIsInNwbGl0IiwibWF0Y2hlZEZ1bmN0aW9uIiwiZnVuY3Rpb25OYW1lcyIsImV2ZW50UGF0aCIsImV2ZW50TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0TWV0aG9kIiwibm9ybWFsaXplZEV2ZW50UGF0aCIsIm5vcm1hbGl6ZWRQYXRobmFtZSIsIm1lbW9yeUxpbWl0SW5NQiIsImNyZWF0ZVdlYlNvY2tldFNlcnZlciIsIndzcyIsInBvcnQiLCJvbiIsIndzIiwidG9TdHJpbmciLCJ3ZWJzb2NrZXQiLCJyb3V0ZSIsImFjdGlvbiIsInJlcXVlc3RDb250ZXh0IiwiYXBpR2F0ZXdheSIsImVuZHBvaW50IiwiY29ubmVjdGlvbklkIiwicm91dGVLZXkiLCJsb2FkRW52RmlsZSIsImVudlBhdGgiLCJlbnZWYXJzIiwiZW52Q29udGVudCIsImxpbmVzIiwibGluZSIsInRyaW1tZWRMaW5lIiwic3RhcnRzV2l0aCIsImVxdWFsSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyaW5nIiwiY2xlYW5WYWx1ZSIsInNlcnZlcmxlc3MiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJyZW1vdmUiLCJ0ZXN0IiwidXNlUHVibGljSXAiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsImVudlBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImZpbGVFbnZWYXJzIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJjbGlWYXJzIiwiX2Vycm9yIiwiZW52Iiwic3RhcnQiLCJzdWNjZWVkIiwic2VydmVybGVzc0NvbmZpZyIsInBhY2thZ2VEaXIiLCJjb25maWdGb3JtYXRzIiwiY29uZmlnUGF0aCIsImNvbmZpZ01vZHVsZSIsImZpbmFsQ29uZmlnIiwiY3VzdG9tIiwiY29ycyIsImV4cHJlc3NBcHAiLCJ3c1NlcnZlciIsImZhaWwiLCJzZXJ2ZXIiLCJsaXN0ZW4iLCJzaHV0ZG93biIsImNsb3NlIiwic3RkaW4iLCJyZXN1bWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELE9BQU9BLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxXQUFXLFFBQVE7QUFDMUIsT0FBT0MsYUFBYSxVQUFVO0FBQzlCLFNBQVFDLFlBQVksRUFBRUMsVUFBVSxFQUFFQyxTQUFT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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.52.15",
3
+ "version": "1.52.17",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",