@workflow/next 5.0.0-beta.17 → 5.0.0-beta.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA0TvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAqCJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBA0PrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AA0TvC,wBAAgB,YAAY,CAC1B,cAAc,EACV,UAAU,GACV,CAAC,CACC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,KAC/B,OAAO,CAAC,UAAU,CAAC,CAAC,EAC7B,EACE,SAAS,GACV,GAAE;IACD,SAAS,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC;QACF;;;;;;WAMG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;KACjE,CAAC;CACE,IAqCJ,OAAO,MAAM,EACb,KAAK;IAAE,aAAa,EAAE,UAAU,CAAA;CAAE,yBA2PrC"}
package/dist/index.js CHANGED
@@ -346,6 +346,7 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
346
346
  // discover workflows from pages/app entries
347
347
  dirs: ['pages', 'app', 'src/pages', 'src/app'],
348
348
  projectRoot: nextConfig.outputFileTracingRoot,
349
+ moduleSpecifierRoot: process.cwd(),
349
350
  workingDir: process.cwd(),
350
351
  distDir,
351
352
  diagnosticsDir: `${distDir}/diagnostics`,
@@ -469,4 +470,4 @@ function withWorkflow(nextConfigOrFn, { workflows, } = {}) {
469
470
  return nextConfig;
470
471
  };
471
472
  }
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE2VEEsb0NBd1RDO0FBcm5CRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUV0RCxvREFBNEI7QUFDNUIsNkNBSXNCO0FBQ3RCLCtEQUE2RDtBQUU3RCxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFlbEUsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxTQUFpQjtJQUNyRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENB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QjtZQUN4QyxLQUFLLEtBQUsseUJBQXlCLEVBQ25DLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7WUFFbkQsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIG1rZGlyU3luYywgc3RhdFN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNvcHlGaWxlLCBta2RpciwgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICBnZXROZXh0QnVpbGRlcixcbiAgc2hvdWxkVXNlRGVmZXJyZWRCdWlsZGVyLFxuICBXT1JLRkxPV19ERUZFUlJFRF9FTlRSSUVTLFxufSBmcm9tICcuL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VFbnZpcm9ubWVudEZsYWcgfSBmcm9tICcuL2Vudmlyb25tZW50LWZsYWcuanMnO1xuXG5jb25zdCBWRVJDRUxfV09STERfUEFDS0FHRSA9ICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJztcbmNvbnN0IFZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTID0gW1xuICAnQHZlcmNlbC9xdWV1ZScsXG4gICdAdmVyY2VsL29pZGMnLFxuICAnQHZlcmNlbC9jbGktYXV0aCcsXG4gICdAbmFwaS1ycy9rZXlyaW5nJyxcbl07XG5jb25zdCBWRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTID0gW1xuICBWRVJDRUxfV09STERfUEFDS0FHRSxcbiAgLi4uVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMsXG5dO1xuXG5jb25zdCB1c2VXb3JrZmxvd1BhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHdvcmtmbG93XFwxOz9cXHMqJC9tO1xuY29uc3QgdXNlU3RlcFBhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHN0ZXBcXDE7P1xccyokL207XG5jb25zdCB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybiA9IC9mcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMS87XG5jb25zdCB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybiA9XG4gIC9TeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwxXFxzKlxcKS87XG5jb25zdCB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4gPVxuICAvXFxbXFxzKldPUktGTE9XXyg/OlNFUklBTElaRXxERVNFUklBTElaRSlcXHMqXFxdLztcblxuY29uc3QgUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTID0gbmV3IFNldChbJ3NlcnZlci1vbmx5JywgJ2NsaWVudC1vbmx5J10pO1xuY29uc3Qgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmludGVyZmFjZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHtcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIoc3BlY2lmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCcuJykgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLmluY2x1ZGVzKCcqJykgfHwgc3BlY2lmaWVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgY29uc3QgaGFzVXNlV29ya2Zsb3cgPSB1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNVc2VTdGVwID0gdXNlU3RlcFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUltcG9ydCA9IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVTeW1ib2wgPSB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSA9XG4gICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKTtcblxuICByZXR1cm4ge1xuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGU6IGhhc1NlcmRlSW1wb3J0IHx8IGhhc1NlcmRlU3ltYm9sIHx8IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNzdWVMYWJlbHMoZGV0ZWN0ZWQ6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlKTogc3RyaW5nW10ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VXb3JrZmxvdykge1xuICAgIGlzc3Vlcy5wdXNoKCdcInVzZSB3b3JrZmxvd1wiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VTdGVwKSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHN0ZXBcIiBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQuaGFzU2VyZGUpIHtcbiAgICBpc3N1ZXMucHVzaCgnc2VyaWFsaXphdGlvbiBjbGFzc2VzJyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlcztcbn1cblxuZnVuY3Rpb24gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb246IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzXG4gICAgOiB7fTtcbiAgY29uc3QgcGVlckRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcylcbiAgICA/IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0Lmhhc093bihkZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKSB8fFxuICAgIE9iamVjdC5oYXNPd24ocGVlckRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFNlcnZlckV4dGVybmFsUGFja2FnZShcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHwgbnVsbD4ge1xuICBpZiAoIWlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIocGFja2FnZU5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgaGFzVXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgbGV0IGhhc1VzZVN0ZXAgPSBmYWxzZTtcbiAgbGV0IGhhc1NlcmRlID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoYCR7cGFja2FnZU5hbWV9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3QgcGFja2FnZUpzb25Tb3VyY2UgPSBhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvblNvdXJjZSkgYXMgdW5rbm93bjtcbiAgICBoYXNTZXJkZSA9IGhhc1dvcmtmbG93U2VyZGVEZXBlbmRlbmN5KHBhY2thZ2VKc29uKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gQ29udGludWUgdG8gc291cmNlIHNjYW5uaW5nLlxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeVBhdGggPSByZXF1aXJlLnJlc29sdmUocGFja2FnZU5hbWUsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoZW50cnlQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICBoYXNVc2VXb3JrZmxvdyA9IHBhdHRlcm5zLmhhc1VzZVdvcmtmbG93O1xuICAgIGhhc1VzZVN0ZXAgPSBwYXR0ZXJucy5oYXNVc2VTdGVwO1xuICAgIGhhc1NlcmRlIHx8PSBwYXR0ZXJucy5oYXNTZXJkZTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gVXNlIHdoaWNoZXZlciBzaWduYWwgd2UgYWxyZWFkeSBoYXZlLlxuICB9XG5cbiAgaWYgKCFoYXNVc2VXb3JrZmxvdyAmJiAhaGFzVXNlU3RlcCAmJiAhaGFzU2VyZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWUsXG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0QXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzKFxuICBkZXRlY3RlZFBhY2thZ2VzOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZVtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV3bHlEZXRlY3RlZFBhY2thZ2VzID0gZGV0ZWN0ZWRQYWNrYWdlcy5maWx0ZXIoKHsgcGFja2FnZU5hbWUgfSkgPT4ge1xuICAgIHJldHVybiAhd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSk7XG4gIH0pO1xuXG4gIGlmIChuZXdseURldGVjdGVkUGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCB7IHBhY2thZ2VOYW1lIH0gb2YgbmV3bHlEZXRlY3RlZFBhY2thZ2VzKSB7XG4gICAgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmFkZChwYWNrYWdlTmFtZSk7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlRGVzY3JpcHRpb25zID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcChcbiAgICAgIChkZXRlY3RlZCkgPT5cbiAgICAgICAgYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cIiAoJHtnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZCkuam9pbignLCAnKX0pYFxuICAgIClcbiAgICAuam9pbignLCAnKTtcbiAgY29uc3QgcGFja2FnZU5hbWVzID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcCgoZGV0ZWN0ZWQpID0+IGBcIiR7ZGV0ZWN0ZWQucGFja2FnZU5hbWV9XCJgKVxuICAgIC5qb2luKCcsICcpO1xuXG4gIGNvbnNvbGUud2FybihcbiAgICBgXFxu4pqgIFdvcmtmbG93IGZvdW5kIHdvcmtmbG93IGNvZGUgaW4gc2VydmVyRXh0ZXJuYWxQYWNrYWdlczogJHtwYWNrYWdlRGVzY3JpcHRpb25zfS5gICtcbiAgICAgIGBcXG4gIFdvcmtmbG93IHJlbW92ZWQgdGhlIGFmZmVjdGVkIGVudHJpZXMgZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGZvciB0aGlzIGJ1aWxkIGFuZCBpcyBjb21waWxpbmcgdGhlIHBhY2thZ2VzIGFueXdheS5gICtcbiAgICAgIGBcXG4gIFJlbW92ZSAke3BhY2thZ2VOYW1lc30gZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGluIG5leHQuY29uZmlnIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLlxcbmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5leHRWZXJzaW9uKHdvcmtpbmdEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG5cbiAgLy8gVHJ5IHJlc29sdmluZyBmcm9tIHRoZSBjb25zdW1pbmcgcHJvamVjdCdzIHdvcmtpbmcgZGlyZWN0b3J5IGZpcnN0LlxuICAvLyBUaGlzIGhhbmRsZXMgbW9ub3JlcG8gc2V0dXBzIHdoZXJlIGBuZXh0YCBtYXkgbm90IGJlIGhvaXN0ZWQgdG8gdGhlXG4gIC8vIHNhbWUgbG9jYXRpb24gYXMgYEB3b3JrZmxvdy9uZXh0YC5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ25leHQvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhY2thZ2VKc29uID0gcmVxdWlyZShwYWNrYWdlSnNvblBhdGgpIGFzIHtcbiAgICAgIHZlcnNpb24/OiB1bmtub3duO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRQYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9ycy5wdXNoKGUpO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIHJlc29sdmluZyByZWxhdGl2ZSB0byB0aGlzIHBhY2thZ2UncyBsb2NhdGlvbi5cbiAgdHJ5IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gKHJlcXVpcmUoJ25leHQvcGFja2FnZS5qc29uJykgYXMgeyB2ZXJzaW9uPzogdW5rbm93biB9KVxuICAgICAgLnZlcnNpb247XG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgZXJyb3JzLFxuICAgIGBDb3VsZCBub3QgcmVzb2x2ZSBOZXh0LmpzIHZlcnNpb24uIEVuc3VyZSBcXGBuZXh0XFxgIGlzIGluc3RhbGxlZCBpbiB5b3VyIHByb2plY3QgKHdvcmtpbmcgZGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9KS5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhwYXRoKTtcbiAgICByZXR1cm4gc3RhdHMuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKHtcbiAgcHJvamVjdERpcixcbiAgZGlzdERpcixcbn06IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogeyBtYW5pZmVzdFBhdGg6IHN0cmluZzsgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWFuaWZlc3RDYW5kaWRhdGVzID0gW1xuICAgIGpvaW4ocHJvamVjdERpciwgJ2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAnc3JjL2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgXTtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gbWFuaWZlc3RDYW5kaWRhdGVzLmZpbmQoZmlsZUV4aXN0cyk7XG5cbiAgaWYgKCFtYW5pZmVzdFBhdGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvbHZlZERpc3REaXIgPSBpc0Fic29sdXRlKGRpc3REaXIpXG4gICAgPyBkaXN0RGlyXG4gICAgOiBqb2luKHByb2plY3REaXIsIGRpc3REaXIpO1xuICBjb25zdCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCA9IGpvaW4oXG4gICAgcmVzb2x2ZWREaXN0RGlyLFxuICAgICdkaWFnbm9zdGljcycsXG4gICAgJ3dvcmtmbG93cy1tYW5pZmVzdC5qc29uJ1xuICApO1xuICByZXR1cm4geyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3QobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBhd2FpdCBta2RpcihkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNvcHlGaWxlKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIG1rZGlyU3luYyhkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvcHlGaWxlU3luYyhtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBtYXJrZXIgPSAnX193b3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3BpZXMnO1xuICBjb25zdCBnbG9iYWxXaXRoTWFya2VyID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICBbbWFya2VyXT86IEFycmF5PHsgcHJvamVjdERpcjogc3RyaW5nOyBkaXN0RGlyOiBzdHJpbmcgfT47XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0pIHtcbiAgICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gPSBbXTtcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHlNZXRhZGF0YSBvZiBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gfHwgW10pIHtcbiAgICAgICAgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMoY29weU1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXS5wdXNoKG1ldGFkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhXb3JrZmxvdyhcbiAgbmV4dENvbmZpZ09yRm46XG4gICAgfCBOZXh0Q29uZmlnXG4gICAgfCAoKFxuICAgICAgICBwaGFzZTogc3RyaW5nLFxuICAgICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgICApID0+IFByb21pc2U8TmV4dENvbmZpZz4pLFxuICB7XG4gICAgd29ya2Zsb3dzLFxuICB9OiB7XG4gICAgd29ya2Zsb3dzPzoge1xuICAgICAgbGF6eURpc2NvdmVyeT86IGJvb2xlYW47XG4gICAgICBsb2NhbD86IHtcbiAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENvbnRyb2xzIGhvdyBzb3VyY2UgbWFwcyBhcmUgZW1pdHRlZCBmb3Igd29ya2Zsb3cgYnVuZGxlcy4gQWNjZXB0c1xuICAgICAgICogdGhlIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb246IGB0cnVlYC9gJ2lubGluZSdgXG4gICAgICAgKiAoZGVmYXVsdCksIGAnbGlua2VkJ2AsIGAnZXh0ZXJuYWwnYCwgYCdib3RoJ2AsIG9yIGBmYWxzZWAgdG8gb21pdFxuICAgICAgICogc291cmNlIG1hcHMuIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgXG4gICAgICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICAgICAqL1xuICAgICAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuICAgIH07XG4gIH0gPSB7fVxuKSB7XG4gIC8vIGxhenlEaXNjb3ZlcnkgZGVmYXVsdHMgdG8gdHJ1ZTsgcGFzcyBgbGF6eURpc2NvdmVyeTogZmFsc2VgIHRvIGZvcmNlIGVhZ2VyXG4gIC8vIGRpc2NvdmVyeSAoc2Nhbm5pbmcgdGhlIHByb2plY3QgYXQgc3RhcnR1cCkgaW5zdGVhZCBvZiBkZWZlcnJpbmcgd29ya2Zsb3dcbiAgLy8gZGlzY292ZXJ5IHVudGlsIGZpbGVzIGFyZSByZXF1ZXN0ZWQuIFRoZSBgV09SS0ZMT1dfTkVYVF9MQVpZX0RJU0NPVkVSWWBcbiAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldCwgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBvcHRpb24uXG4gIGNvbnN0IGxhenlEaXNjb3ZlcnlPdmVycmlkZSA9IHBhcnNlRW52aXJvbm1lbnRGbGFnKFxuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfTEFaWV9ESVNDT1ZFUllcbiAgKTtcbiAgaWYgKGxhenlEaXNjb3ZlcnlPdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHdvcmtmbG93cz8ubGF6eURpc2NvdmVyeSA9PT0gZmFsc2UpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZID0gJzEnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZID0gbGF6eURpc2NvdmVyeU92ZXJyaWRlXG4gICAgICA/ICcxJ1xuICAgICAgOiAnMCc7XG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCA9ICdsb2NhbCc7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiA9ICcubmV4dC93b3JrZmxvdy1kYXRhJztcbiAgICB9XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAndmVyY2VsJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYnVpbGRDb25maWcoXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICkge1xuICAgIGNvbnN0IGxvYWRlclBhdGggPSByZXF1aXJlLnJlc29sdmUoJy4vbG9hZGVyJyk7XG4gICAgbGV0IHJ1bkRlZmVycmVkQnVpbGRGcm9tQ2FsbGJhY2s6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcblxuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSksXG4gICAgICAgIC8vIEtlZXAgdGhlIFZlcmNlbCB3b3JsZCBhbmQgaXRzIG5hdGl2ZS1wcm9uZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWwgc29cbiAgICAgICAgLy8gbG9jYWwgYnVpbGRzIGRvIG5vdCB0cnkgdG8gcGFyc2UgQHZlcmNlbC9xdWV1ZSdzIGtleXJpbmcgZGVwZW5kZW5jeVxuICAgICAgICAvLyB0cmVlLlxuICAgICAgICAuLi5WRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTLFxuICAgICAgXSksXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbXBpbGVyID0gbmV4dENvbmZpZy5jb21waWxlciA/PyB7fTtcbiAgICBjb25zdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUgPSAoXG4gICAgICBleGlzdGluZ0NvbXBpbGVyIGFzIHtcbiAgICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZT86IChtZXRhZGF0YToge1xuICAgICAgICAgIHByb2plY3REaXI6IHN0cmluZztcbiAgICAgICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgKS5ydW5BZnRlclByb2R1Y3Rpb25Db21waWxlO1xuXG4gICAgY29uc3QgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgKVxuICAgICAgPyBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICAgIDogW107XG4gICAgbGV0IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcblxuICAgIGlmIChjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgICAgaWYgKFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRldGVjdGVkID0gYXdhaXQgZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5wdXNoKGRldGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIE5ldmVyIGJsb2NrIGNvbmZpZyBnZW5lcmF0aW9uLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFja2FnZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5tYXAoKGRldGVjdGVkKSA9PiBkZXRlY3RlZC5wYWNrYWdlTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9XG4gICAgICAgICAgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhY2thZ2VOYW1lKSA9PiAhcmVtb3ZlZFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuICAgICAgICB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBpZiB0dXJib3BhY2sgaXMgYmVpbmcgdXNlZFxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2spIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrID0ge307XG4gICAgfVxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMpIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzID0ge307XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyBhcyBhbnk7XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSByZXNvbHZlTmV4dFZlcnNpb24ocHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3Qgc3VwcG9ydHNUdXJib0NvbmRpdGlvbiA9IHNlbXZlci5ndGUobmV4dFZlcnNpb24sICd2MTYuMC4wJyk7XG4gICAgY29uc3QgdXNlRGVmZXJyZWRCdWlsZGVyID0gc2hvdWxkVXNlRGVmZXJyZWRCdWlsZGVyKG5leHRWZXJzaW9uKTtcblxuICAgIGNvbnN0IHNob3VsZFdhdGNoID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gICAgbGV0IHdvcmtmbG93QnVpbGRlclByb21pc2U6IFByb21pc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaXN0RGlyID0gbmV4dENvbmZpZy5kaXN0RGlyIHx8ICcubmV4dCc7XG5cbiAgICBuZXh0Q29uZmlnLmNvbXBpbGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdDb21waWxlcixcbiAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU6IGFzeW5jIChtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKSB7XG4gICAgICAgICAgYXdhaXQgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhKTtcbiAgICAgICAgcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFdvcmtmbG93QnVpbGRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSkge1xuICAgICAgICB3b3JrZmxvd0J1aWxkZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBOZXh0QnVpbGRlciA9IGF3YWl0IGdldE5leHRCdWlsZGVyKG5leHRWZXJzaW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE5leHRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdhdGNoOiBzaG91bGRXYXRjaCxcbiAgICAgICAgICAgIC8vIGRpc2NvdmVyIHdvcmtmbG93cyBmcm9tIHBhZ2VzL2FwcCBlbnRyaWVzXG4gICAgICAgICAgICBkaXJzOiBbJ3BhZ2VzJywgJ2FwcCcsICdzcmMvcGFnZXMnLCAnc3JjL2FwcCddLFxuICAgICAgICAgICAgcHJvamVjdFJvb3Q6IG5leHRDb25maWcub3V0cHV0RmlsZVRyYWNpbmdSb290LFxuICAgICAgICAgICAgd29ya2luZ0RpcjogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIGRpc3REaXIsXG4gICAgICAgICAgICBkaWFnbm9zdGljc0RpcjogYCR7ZGlzdERpcn0vZGlhZ25vc3RpY3NgLFxuICAgICAgICAgICAgYnVpbGRUYXJnZXQ6ICduZXh0JyxcbiAgICAgICAgICAgIHdvcmtmbG93c0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzdGVwc0J1bmRsZVBhdGg6ICcnLCAvLyBub3QgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICB3ZWJob29rQnVuZGxlUGF0aDogJycsIC8vIG5vZGUgdXNlZCBpbiBiYXNlXG4gICAgICAgICAgICBzb3VyY2VtYXA6IHdvcmtmbG93cz8uc291cmNlbWFwLFxuICAgICAgICAgICAgc3VwcHJlc3NDcmVhdGVXb3JrZmxvd3NCdW5kbGVMb2dzOiB1c2VEZWZlcnJlZEJ1aWxkZXIsXG4gICAgICAgICAgICBzdXBwcmVzc0NyZWF0ZVdvcmtmbG93c0J1bmRsZVdhcm5pbmdzOiB1c2VEZWZlcnJlZEJ1aWxkZXIsXG4gICAgICAgICAgICBzdXBwcmVzc0NyZWF0ZVdlYmhvb2tCdW5kbGVMb2dzOiB1c2VEZWZlcnJlZEJ1aWxkZXIsXG4gICAgICAgICAgICBzdXBwcmVzc0NyZWF0ZU1hbmlmZXN0TG9nczogdXNlRGVmZXJyZWRCdWlsZGVyLFxuICAgICAgICAgICAgZXh0ZXJuYWxQYWNrYWdlczogW1xuICAgICAgICAgICAgICAvLyBzZXJ2ZXItb25seSBhbmQgY2xpZW50LW9ubHkgYXJlIHBzZXVkby1wYWNrYWdlcyBoYW5kbGVkIGJ5IE5leHQuanNcbiAgICAgICAgICAgICAgLy8gZHVyaW5nIGl0cyBidWlsZCBwcm9jZXNzLiBXZSBtYXJrIHRoZW0gYXMgZXh0ZXJuYWwgdG8gcHJldmVudCBlc2J1aWxkXG4gICAgICAgICAgICAgIC8vIGZyb20gZmFpbGluZyB3aGVuIGJ1bmRsaW5nIGNvZGUgdGhhdCBpbXBvcnRzIHRoZW0uXG4gICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2dldHRpbmctc3RhcnRlZC9zZXJ2ZXItYW5kLWNsaWVudC1jb21wb25lbnRzXG4gICAgICAgICAgICAgICdzZXJ2ZXItb25seScsXG4gICAgICAgICAgICAgICdjbGllbnQtb25seScsXG4gICAgICAgICAgICAgIC4uLmVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gd29ya2Zsb3dCdWlsZGVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgaWYgKHVzZURlZmVycmVkQnVpbGRlcikge1xuICAgICAgcnVuRGVmZXJyZWRCdWlsZEZyb21DYWxsYmFjayA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyID0gYXdhaXQgZ2V0V29ya2Zsb3dCdWlsZGVyKCk7XG4gICAgICAgIGlmICh0eXBlb2Ygd29ya2Zsb3dCdWlsZGVyLm9uQmVmb3JlRGVmZXJyZWRFbnRyaWVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgd29ya2Zsb3dCdWlsZGVyLm9uQmVmb3JlRGVmZXJyZWRFbnRyaWVzKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nRXhwZXJpbWVudGFsID0gKG5leHRDb25maWcuZXhwZXJpbWVudGFsID8/IHt9KSBhcyBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgYW55XG4gICAgICA+O1xuICAgICAgY29uc3QgZXhpc3RpbmdEZWZlcnJlZEVudHJpZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgICBleGlzdGluZ0V4cGVyaW1lbnRhbC5kZWZlcnJlZEVudHJpZXNcbiAgICAgIClcbiAgICAgICAgPyBleGlzdGluZ0V4cGVyaW1lbnRhbC5kZWZlcnJlZEVudHJpZXNcbiAgICAgICAgOiBbXTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nT25CZWZvcmVEZWZlcnJlZEVudHJpZXMgPVxuICAgICAgICB0eXBlb2YgZXhpc3RpbmdFeHBlcmltZW50YWwub25CZWZvcmVEZWZlcnJlZEVudHJpZXMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGV4aXN0aW5nRXhwZXJpbWVudGFsLm9uQmVmb3JlRGVmZXJyZWRFbnRyaWVzXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIG5leHRDb25maWcuZXhwZXJpbWVudGFsID0ge1xuICAgICAgICAuLi5leGlzdGluZ0V4cGVyaW1lbnRhbCxcblxuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVHNJZ25vcmU6IGV4cGVjdC1lcnJvciBpcyB3cm9uZyBhcyBpdCB3aWxsIHdvcmsgb24gdmFsaWQgdmVyc2lvblxuICAgICAgICAvLyBAdHMtaWdub3JlIHRoaXMgaXMgb25seSBhdmFpbGFibGUgaW4gY2FuYXJ5IE5leHQuanNcbiAgICAgICAgZGVmZXJyZWRFbnRyaWVzOiBbXG4gICAgICAgICAgLi4ubmV3IFNldChbXG4gICAgICAgICAgICAuLi5leGlzdGluZ0RlZmVycmVkRW50cmllcyxcbiAgICAgICAgICAgIC4uLldPUktGTE9XX0RFRkVSUkVEX0VOVFJJRVMsXG4gICAgICAgICAgXSksXG4gICAgICAgIF0sXG4gICAgICAgIG9uQmVmb3JlRGVmZXJyZWRFbnRyaWVzOiBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nT25CZWZvcmVEZWZlcnJlZEVudHJpZXMpIHtcbiAgICAgICAgICAgIGF3YWl0IGV4aXN0aW5nT25CZWZvcmVEZWZlcnJlZEVudHJpZXMoLi4uYXJncyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChydW5EZWZlcnJlZEJ1aWxkRnJvbUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBhd2FpdCBydW5EZWZlcnJlZEJ1aWxkRnJvbUNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBbXG4gICAgICAnKi50c3gnLFxuICAgICAgJyoudHMnLFxuICAgICAgJyouanN4JyxcbiAgICAgICcqLmpzJyxcbiAgICAgICcqLm1qcycsXG4gICAgICAnKi5tdHMnLFxuICAgICAgJyouY2pzJyxcbiAgICAgICcqLmN0cycsXG4gICAgXSkge1xuICAgICAgbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXNba2V5XSA9IHtcbiAgICAgICAgLi4uKHN1cHBvcnRzVHVyYm9Db25kaXRpb25cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlICdhbGwnIHRvIGNvbWJpbmU6IG11c3QgbWF0Y2ggY29udGVudCBBTkQgbXVzdCBOT1QgYmUgaW4gZ2VuZXJhdGVkIHBhdGhcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSB3aXRoIGFueSBleGlzdGluZyAnYWxsJyBjb25kaXRpb25zIGZyb20gdXNlciBjb25maWdcbiAgICAgICAgICAgICAgICBhbGw6IFtcbiAgICAgICAgICAgICAgICAgIC4uLihleGlzdGluZ1J1bGVzW2tleV0/LmNvbmRpdGlvbj8uYWxsIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAgIC8vIEV4Y2x1ZGUgZ2VuZXJhdGVkIHdvcmtmbG93IHJvdXRlIGZpbGVzIGZyb20gdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgIHsgbm90OiB7IHBhdGg6IC9bL1xcXFxdXFwud2VsbC1rbm93blsvXFxcXF13b3JrZmxvd1svXFxcXF0vIH0gfSxcbiAgICAgICAgICAgICAgICAgIC8vIE1hdGNoIGZpbGVzIHdpdGggd29ya2Zsb3cgZGlyZWN0aXZlcyBvciBjdXN0b20gc2VyaWFsaXphdGlvbiBwYXR0ZXJuc1xuICAgICAgICAgICAgICAgICAgLy8gVXNlcyBiYWNrcmVmZXJlbmNlcyAoXFwyLCBcXDMpIHRvIGVuc3VyZSBtYXRjaGluZyBxdW90ZSB0eXBlc1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OlxuICAgICAgICAgICAgICAgICAgICAgIC8odXNlIHdvcmtmbG93fHVzZSBzdGVwfGZyb21cXHMrKFsnXCJdKUB3b3JrZmxvd1xcL3NlcmRlXFwyfFN5bWJvbFxcLmZvclxccypcXChcXHMqKFsnXCJdKXdvcmtmbG93LSg/OnNlcmlhbGl6ZXxkZXNlcmlhbGl6ZSlcXDNcXHMqXFwpKS8sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGxvYWRlcnM6IFsuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5sb2FkZXJzIHx8IFtdKSwgbG9hZGVyUGF0aF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGNvbmZpZ3VyZSB0aGUgbG9hZGVyIGZvciB3ZWJwYWNrXG4gICAgY29uc3QgZXhpc3RpbmdXZWJwYWNrTW9kaWZ5ID0gbmV4dENvbmZpZy53ZWJwYWNrO1xuICAgIG5leHRDb25maWcud2VicGFjayA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBbd2VicGFja0NvbmZpZ10gPSBhcmdzO1xuICAgICAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZSkge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZSA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKCF3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcykge1xuICAgICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcyA9IFtdO1xuICAgICAgfVxuICAgICAgLy8gbG9hZGVycyBpbiB3ZWJwYWNrIGFwcGx5IGJvdHRvbS0+dXAgc28gZW5zdXJlXG4gICAgICAvLyBvdXJzIGNvbWVzIGJlZm9yZSB0aGUgZGVmYXVsdCBzd2MgdHJhbnNmb3JtXG4gICAgICB3ZWJwYWNrQ29uZmlnLm1vZHVsZS5ydWxlcy5wdXNoKHtcbiAgICAgICAgdGVzdDogLy4qXFwuKG1qc3xjanN8Y3RzfHRzfHRzeHxqc3xqc3gpJC8sXG4gICAgICAgIGxvYWRlcjogbG9hZGVyUGF0aCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZXhpc3RpbmdXZWJwYWNrTW9kaWZ5XG4gICAgICAgID8gKGV4aXN0aW5nV2VicGFja01vZGlmeSguLi5hcmdzKSA/PyB3ZWJwYWNrQ29uZmlnKVxuICAgICAgICA6IHdlYnBhY2tDb25maWc7XG4gICAgfTtcbiAgICAvLyBvbmx5IHJ1biB0aGlzIGluIHRoZSBtYWluIHByb2Nlc3Mgc28gaXQgb25seSBydW5zIG9uY2VcbiAgICAvLyBhcyBOZXh0LmpzIHVzZXMgY2hpbGQgcHJvY2Vzc2VzIGZvciBkaWZmZXJlbnQgYnVpbGRzXG4gICAgaWYgKFxuICAgICAgIXByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfUFJJVkFURV9CVUlMVCAmJlxuICAgICAgcGhhc2UgIT09ICdwaGFzZS1wcm9kdWN0aW9uLXNlcnZlcidcbiAgICApIHtcbiAgICAgIGNvbnN0IHdvcmtmbG93QnVpbGRlciA9IGF3YWl0IGdldFdvcmtmbG93QnVpbGRlcigpO1xuXG4gICAgICBhd2FpdCB3b3JrZmxvd0J1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfUFJJVkFURV9CVUlMVCA9ICcxJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dENvbmZpZztcbiAgfTtcbn1cbiJdfQ==
473
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE2VEEsb0NBeVRDO0FBdG5CRCxxQ0FBNEQ7QUFDNUQsK0NBQTZEO0FBQzdELHlDQUFzRDtBQUV0RCxvREFBNEI7QUFDNUIsNkNBSXNCO0FBQ3RCLCtEQUE2RDtBQUU3RCxNQUFNLG9CQUFvQixHQUFHLHdCQUF3QixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUc7SUFDdkMsZUFBZTtJQUNmLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsa0JBQWtCO0NBQ25CLENBQUM7QUFDRixNQUFNLHFDQUFxQyxHQUFHO0lBQzVDLG9CQUFvQjtJQUNwQixHQUFHLGdDQUFnQztDQUNwQyxDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUM3RCxNQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxNQUFNLDBCQUEwQixHQUFHLGlDQUFpQyxDQUFDO0FBQ3JFLE1BQU0sMEJBQTBCLEdBQzlCLG9FQUFvRSxDQUFDO0FBQ3ZFLE1BQU0sb0NBQW9DLEdBQ3hDLDhDQUE4QyxDQUFDO0FBRWpELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN6RSxNQUFNLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7QUFlbEUsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FBQyxTQUFpQjtJQUNyRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENB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Q3ZELElBQ0UsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtZQUN4QyxLQUFLLEtBQUsseUJBQXlCLEVBQ25DLENBQUM7WUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGtCQUFrQixFQUFFLENBQUM7WUFFbkQsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxHQUFHLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIG1rZGlyU3luYywgc3RhdFN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGNvcHlGaWxlLCBta2RpciwgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQge1xuICBnZXROZXh0QnVpbGRlcixcbiAgc2hvdWxkVXNlRGVmZXJyZWRCdWlsZGVyLFxuICBXT1JLRkxPV19ERUZFUlJFRF9FTlRSSUVTLFxufSBmcm9tICcuL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VFbnZpcm9ubWVudEZsYWcgfSBmcm9tICcuL2Vudmlyb25tZW50LWZsYWcuanMnO1xuXG5jb25zdCBWRVJDRUxfV09STERfUEFDS0FHRSA9ICdAd29ya2Zsb3cvd29ybGQtdmVyY2VsJztcbmNvbnN0IFZFUkNFTF9XT1JMRF9ERVBFTkRFTkNZX1BBQ0tBR0VTID0gW1xuICAnQHZlcmNlbC9xdWV1ZScsXG4gICdAdmVyY2VsL29pZGMnLFxuICAnQHZlcmNlbC9jbGktYXV0aCcsXG4gICdAbmFwaS1ycy9rZXlyaW5nJyxcbl07XG5jb25zdCBWRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTID0gW1xuICBWRVJDRUxfV09STERfUEFDS0FHRSxcbiAgLi4uVkVSQ0VMX1dPUkxEX0RFUEVOREVOQ1lfUEFDS0FHRVMsXG5dO1xuXG5jb25zdCB1c2VXb3JrZmxvd1BhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHdvcmtmbG93XFwxOz9cXHMqJC9tO1xuY29uc3QgdXNlU3RlcFBhdHRlcm4gPSAvXlxccyooWydcIl0pdXNlIHN0ZXBcXDE7P1xccyokL207XG5jb25zdCB3b3JrZmxvd1NlcmRlSW1wb3J0UGF0dGVybiA9IC9mcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMS87XG5jb25zdCB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybiA9XG4gIC9TeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwxXFxzKlxcKS87XG5jb25zdCB3b3JrZmxvd1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eVBhdHRlcm4gPVxuICAvXFxbXFxzKldPUktGTE9XXyg/OlNFUklBTElaRXxERVNFUklBTElaRSlcXHMqXFxdLztcblxuY29uc3QgUFNFVURPX0VYVEVSTkFMX1BBQ0tBR0VTID0gbmV3IFNldChbJ3NlcnZlci1vbmx5JywgJ2NsaWVudC1vbmx5J10pO1xuY29uc3Qgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmludGVyZmFjZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCB7XG4gIGhhc1VzZVdvcmtmbG93OiBib29sZWFuO1xuICBoYXNVc2VTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHtcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgaGFzVXNlV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1VzZVN0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIoc3BlY2lmaWVyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHNwZWNpZmllci5zdGFydHNXaXRoKCcuJykgfHwgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJyQnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoc3BlY2lmaWVyLmluY2x1ZGVzKCcqJykgfHwgc3BlY2lmaWVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFdvcmtmbG93UGF0dGVybk1hdGNoIHtcbiAgY29uc3QgaGFzVXNlV29ya2Zsb3cgPSB1c2VXb3JrZmxvd1BhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNVc2VTdGVwID0gdXNlU3RlcFBhdHRlcm4udGVzdChzb3VyY2UpO1xuICBjb25zdCBoYXNTZXJkZUltcG9ydCA9IHdvcmtmbG93U2VyZGVJbXBvcnRQYXR0ZXJuLnRlc3Qoc291cmNlKTtcbiAgY29uc3QgaGFzU2VyZGVTeW1ib2wgPSB3b3JrZmxvd1NlcmRlU3ltYm9sUGF0dGVybi50ZXN0KHNvdXJjZSk7XG4gIGNvbnN0IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSA9XG4gICAgd29ya2Zsb3dTZXJkZUNvbXB1dGVkUHJvcGVydHlQYXR0ZXJuLnRlc3Qoc291cmNlKTtcblxuICByZXR1cm4ge1xuICAgIGhhc1VzZVdvcmtmbG93LFxuICAgIGhhc1VzZVN0ZXAsXG4gICAgaGFzU2VyZGU6IGhhc1NlcmRlSW1wb3J0IHx8IGhhc1NlcmRlU3ltYm9sIHx8IGhhc1NlcmRlQ29tcHV0ZWRQcm9wZXJ0eSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0SXNzdWVMYWJlbHMoZGV0ZWN0ZWQ6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlKTogc3RyaW5nW10ge1xuICBjb25zdCBpc3N1ZXM6IHN0cmluZ1tdID0gW107XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VXb3JrZmxvdykge1xuICAgIGlzc3Vlcy5wdXNoKCdcInVzZSB3b3JrZmxvd1wiIGZ1bmN0aW9ucycpO1xuICB9XG4gIGlmIChkZXRlY3RlZC5oYXNVc2VTdGVwKSB7XG4gICAgaXNzdWVzLnB1c2goJ1widXNlIHN0ZXBcIiBmdW5jdGlvbnMnKTtcbiAgfVxuICBpZiAoZGV0ZWN0ZWQuaGFzU2VyZGUpIHtcbiAgICBpc3N1ZXMucHVzaCgnc2VyaWFsaXphdGlvbiBjbGFzc2VzJyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlcztcbn1cblxuZnVuY3Rpb24gaGFzV29ya2Zsb3dTZXJkZURlcGVuZGVuY3kocGFja2FnZUpzb246IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHBhY2thZ2VKc29uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKVxuICAgID8gcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzXG4gICAgOiB7fTtcbiAgY29uc3QgcGVlckRlcGVuZGVuY2llcyA9IGlzUGxhaW5PYmplY3QocGFja2FnZUpzb24ucGVlckRlcGVuZGVuY2llcylcbiAgICA/IHBhY2thZ2VKc29uLnBlZXJEZXBlbmRlbmNpZXNcbiAgICA6IHt9O1xuXG4gIHJldHVybiAoXG4gICAgT2JqZWN0Lmhhc093bihkZXBlbmRlbmNpZXMsICdAd29ya2Zsb3cvc2VyZGUnKSB8fFxuICAgIE9iamVjdC5oYXNPd24ocGVlckRlcGVuZGVuY2llcywgJ0B3b3JrZmxvdy9zZXJkZScpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdFNlcnZlckV4dGVybmFsUGFja2FnZShcbiAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlIHwgbnVsbD4ge1xuICBpZiAoIWlzUmVzb2x2YWJsZVBhY2thZ2VTcGVjaWZpZXIocGFja2FnZU5hbWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgaGFzVXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgbGV0IGhhc1VzZVN0ZXAgPSBmYWxzZTtcbiAgbGV0IGhhc1NlcmRlID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoYCR7cGFja2FnZU5hbWV9L3BhY2thZ2UuanNvbmAsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3QgcGFja2FnZUpzb25Tb3VyY2UgPSBhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvblNvdXJjZSkgYXMgdW5rbm93bjtcbiAgICBoYXNTZXJkZSA9IGhhc1dvcmtmbG93U2VyZGVEZXBlbmRlbmN5KHBhY2thZ2VKc29uKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gQ29udGludWUgdG8gc291cmNlIHNjYW5uaW5nLlxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnRyeVBhdGggPSByZXF1aXJlLnJlc29sdmUocGFja2FnZU5hbWUsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl0sXG4gICAgfSk7XG4gICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoZW50cnlQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBwYXR0ZXJucyA9IGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbiAgICBoYXNVc2VXb3JrZmxvdyA9IHBhdHRlcm5zLmhhc1VzZVdvcmtmbG93O1xuICAgIGhhc1VzZVN0ZXAgPSBwYXR0ZXJucy5oYXNVc2VTdGVwO1xuICAgIGhhc1NlcmRlIHx8PSBwYXR0ZXJucy5oYXNTZXJkZTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQmVzdC1lZmZvcnQgb25seS4gVXNlIHdoaWNoZXZlciBzaWduYWwgd2UgYWxyZWFkeSBoYXZlLlxuICB9XG5cbiAgaWYgKCFoYXNVc2VXb3JrZmxvdyAmJiAhaGFzVXNlU3RlcCAmJiAhaGFzU2VyZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGFja2FnZU5hbWUsXG4gICAgaGFzVXNlV29ya2Zsb3csXG4gICAgaGFzVXNlU3RlcCxcbiAgICBoYXNTZXJkZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gd2FybkFib3V0QXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzKFxuICBkZXRlY3RlZFBhY2thZ2VzOiBEZXRlY3RlZFNlcnZlckV4dGVybmFsUGFja2FnZVtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV3bHlEZXRlY3RlZFBhY2thZ2VzID0gZGV0ZWN0ZWRQYWNrYWdlcy5maWx0ZXIoKHsgcGFja2FnZU5hbWUgfSkgPT4ge1xuICAgIHJldHVybiAhd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSk7XG4gIH0pO1xuXG4gIGlmIChuZXdseURldGVjdGVkUGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChjb25zdCB7IHBhY2thZ2VOYW1lIH0gb2YgbmV3bHlEZXRlY3RlZFBhY2thZ2VzKSB7XG4gICAgd2FybmVkQXV0b1JlbW92ZWRTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLmFkZChwYWNrYWdlTmFtZSk7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlRGVzY3JpcHRpb25zID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcChcbiAgICAgIChkZXRlY3RlZCkgPT5cbiAgICAgICAgYFwiJHtkZXRlY3RlZC5wYWNrYWdlTmFtZX1cIiAoJHtnZXRJc3N1ZUxhYmVscyhkZXRlY3RlZCkuam9pbignLCAnKX0pYFxuICAgIClcbiAgICAuam9pbignLCAnKTtcbiAgY29uc3QgcGFja2FnZU5hbWVzID0gbmV3bHlEZXRlY3RlZFBhY2thZ2VzXG4gICAgLm1hcCgoZGV0ZWN0ZWQpID0+IGBcIiR7ZGV0ZWN0ZWQucGFja2FnZU5hbWV9XCJgKVxuICAgIC5qb2luKCcsICcpO1xuXG4gIGNvbnNvbGUud2FybihcbiAgICBgXFxu4pqgIFdvcmtmbG93IGZvdW5kIHdvcmtmbG93IGNvZGUgaW4gc2VydmVyRXh0ZXJuYWxQYWNrYWdlczogJHtwYWNrYWdlRGVzY3JpcHRpb25zfS5gICtcbiAgICAgIGBcXG4gIFdvcmtmbG93IHJlbW92ZWQgdGhlIGFmZmVjdGVkIGVudHJpZXMgZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGZvciB0aGlzIGJ1aWxkIGFuZCBpcyBjb21waWxpbmcgdGhlIHBhY2thZ2VzIGFueXdheS5gICtcbiAgICAgIGBcXG4gIFJlbW92ZSAke3BhY2thZ2VOYW1lc30gZnJvbSBzZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzIGluIG5leHQuY29uZmlnIHRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLlxcbmBcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5leHRWZXJzaW9uKHdvcmtpbmdEaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG5cbiAgLy8gVHJ5IHJlc29sdmluZyBmcm9tIHRoZSBjb25zdW1pbmcgcHJvamVjdCdzIHdvcmtpbmcgZGlyZWN0b3J5IGZpcnN0LlxuICAvLyBUaGlzIGhhbmRsZXMgbW9ub3JlcG8gc2V0dXBzIHdoZXJlIGBuZXh0YCBtYXkgbm90IGJlIGhvaXN0ZWQgdG8gdGhlXG4gIC8vIHNhbWUgbG9jYXRpb24gYXMgYEB3b3JrZmxvdy9uZXh0YC5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ25leHQvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFt3b3JraW5nRGlyXSxcbiAgICB9KTtcbiAgICBjb25zdCByZXNvbHZlZFBhY2thZ2VKc29uID0gcmVxdWlyZShwYWNrYWdlSnNvblBhdGgpIGFzIHtcbiAgICAgIHZlcnNpb24/OiB1bmtub3duO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiByZXNvbHZlZFBhY2thZ2VKc29uLnZlcnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRQYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9ycy5wdXNoKGUpO1xuICB9XG5cbiAgLy8gRmFsbCBiYWNrIHRvIHJlc29sdmluZyByZWxhdGl2ZSB0byB0aGlzIHBhY2thZ2UncyBsb2NhdGlvbi5cbiAgdHJ5IHtcbiAgICBjb25zdCB2ZXJzaW9uID0gKHJlcXVpcmUoJ25leHQvcGFja2FnZS5qc29uJykgYXMgeyB2ZXJzaW9uPzogdW5rbm93biB9KVxuICAgICAgLnZlcnNpb247XG4gICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JzLnB1c2goZSk7XG4gIH1cblxuICB0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IoXG4gICAgZXJyb3JzLFxuICAgIGBDb3VsZCBub3QgcmVzb2x2ZSBOZXh0LmpzIHZlcnNpb24uIEVuc3VyZSBcXGBuZXh0XFxgIGlzIGluc3RhbGxlZCBpbiB5b3VyIHByb2plY3QgKHdvcmtpbmcgZGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9KS5gXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBzdGF0U3luYyhwYXRoKTtcbiAgICByZXR1cm4gc3RhdHMuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKHtcbiAgcHJvamVjdERpcixcbiAgZGlzdERpcixcbn06IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogeyBtYW5pZmVzdFBhdGg6IHN0cmluZzsgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGg6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWFuaWZlc3RDYW5kaWRhdGVzID0gW1xuICAgIGpvaW4ocHJvamVjdERpciwgJ2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAnc3JjL2FwcC8ud2VsbC1rbm93bi93b3JrZmxvdy92MS9tYW5pZmVzdC5qc29uJyksXG4gICAgam9pbihwcm9qZWN0RGlyLCAncHVibGljLy53ZWxsLWtub3duL3dvcmtmbG93L3YxL21hbmlmZXN0Lmpzb24nKSxcbiAgXTtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gbWFuaWZlc3RDYW5kaWRhdGVzLmZpbmQoZmlsZUV4aXN0cyk7XG5cbiAgaWYgKCFtYW5pZmVzdFBhdGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvbHZlZERpc3REaXIgPSBpc0Fic29sdXRlKGRpc3REaXIpXG4gICAgPyBkaXN0RGlyXG4gICAgOiBqb2luKHByb2plY3REaXIsIGRpc3REaXIpO1xuICBjb25zdCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCA9IGpvaW4oXG4gICAgcmVzb2x2ZWREaXN0RGlyLFxuICAgICdkaWFnbm9zdGljcycsXG4gICAgJ3dvcmtmbG93cy1tYW5pZmVzdC5qc29uJ1xuICApO1xuICByZXR1cm4geyBtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3QobWV0YWRhdGE6IHtcbiAgcHJvamVjdERpcjogc3RyaW5nO1xuICBkaXN0RGlyOiBzdHJpbmc7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHBhdGhzID0gZ2V0V29ya2Zsb3dNYW5pZmVzdENvcHlQYXRocyhtZXRhZGF0YSk7XG4gIGlmICghcGF0aHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB7IG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGggfSA9IHBhdGhzO1xuICBhd2FpdCBta2RpcihkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IGNvcHlGaWxlKG1hbmlmZXN0UGF0aCwgZGlhZ25vc3RpY3NNYW5pZmVzdFBhdGgpO1xufVxuXG5mdW5jdGlvbiBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0U3luYyhtZXRhZGF0YToge1xuICBwcm9qZWN0RGlyOiBzdHJpbmc7XG4gIGRpc3REaXI6IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgcGF0aHMgPSBnZXRXb3JrZmxvd01hbmlmZXN0Q29weVBhdGhzKG1ldGFkYXRhKTtcbiAgaWYgKCFwYXRocykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgbWFuaWZlc3RQYXRoLCBkaWFnbm9zdGljc01hbmlmZXN0UGF0aCB9ID0gcGF0aHM7XG4gIG1rZGlyU3luYyhkaXJuYW1lKGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvcHlGaWxlU3luYyhtYW5pZmVzdFBhdGgsIGRpYWdub3N0aWNzTWFuaWZlc3RQYXRoKTtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhOiB7XG4gIHByb2plY3REaXI6IHN0cmluZztcbiAgZGlzdERpcjogc3RyaW5nO1xufSk6IHZvaWQge1xuICBjb25zdCBtYXJrZXIgPSAnX193b3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3BpZXMnO1xuICBjb25zdCBnbG9iYWxXaXRoTWFya2VyID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICBbbWFya2VyXT86IEFycmF5PHsgcHJvamVjdERpcjogc3RyaW5nOyBkaXN0RGlyOiBzdHJpbmcgfT47XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0pIHtcbiAgICBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gPSBbXTtcbiAgICBwcm9jZXNzLm9uY2UoJ2V4aXQnLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHlNZXRhZGF0YSBvZiBnbG9iYWxXaXRoTWFya2VyW21hcmtlcl0gfHwgW10pIHtcbiAgICAgICAgY29weVdvcmtmbG93RGlhZ25vc3RpY3NNYW5pZmVzdFN5bmMoY29weU1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdsb2JhbFdpdGhNYXJrZXJbbWFya2VyXS5wdXNoKG1ldGFkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhXb3JrZmxvdyhcbiAgbmV4dENvbmZpZ09yRm46XG4gICAgfCBOZXh0Q29uZmlnXG4gICAgfCAoKFxuICAgICAgICBwaGFzZTogc3RyaW5nLFxuICAgICAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICAgICApID0+IFByb21pc2U8TmV4dENvbmZpZz4pLFxuICB7XG4gICAgd29ya2Zsb3dzLFxuICB9OiB7XG4gICAgd29ya2Zsb3dzPzoge1xuICAgICAgbGF6eURpc2NvdmVyeT86IGJvb2xlYW47XG4gICAgICBsb2NhbD86IHtcbiAgICAgICAgcG9ydD86IG51bWJlcjtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENvbnRyb2xzIGhvdyBzb3VyY2UgbWFwcyBhcmUgZW1pdHRlZCBmb3Igd29ya2Zsb3cgYnVuZGxlcy4gQWNjZXB0c1xuICAgICAgICogdGhlIHNhbWUgdmFsdWVzIGFzIGVzYnVpbGQncyBgc291cmNlbWFwYCBvcHRpb246IGB0cnVlYC9gJ2lubGluZSdgXG4gICAgICAgKiAoZGVmYXVsdCksIGAnbGlua2VkJ2AsIGAnZXh0ZXJuYWwnYCwgYCdib3RoJ2AsIG9yIGBmYWxzZWAgdG8gb21pdFxuICAgICAgICogc291cmNlIG1hcHMuIENhbiBhbHNvIGJlIHNldCB2aWEgdGhlIGBXT1JLRkxPV19TT1VSQ0VNQVBgXG4gICAgICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICAgICAqL1xuICAgICAgc291cmNlbWFwPzogYm9vbGVhbiB8ICdpbmxpbmUnIHwgJ2xpbmtlZCcgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuICAgIH07XG4gIH0gPSB7fVxuKSB7XG4gIC8vIGxhenlEaXNjb3ZlcnkgZGVmYXVsdHMgdG8gdHJ1ZTsgcGFzcyBgbGF6eURpc2NvdmVyeTogZmFsc2VgIHRvIGZvcmNlIGVhZ2VyXG4gIC8vIGRpc2NvdmVyeSAoc2Nhbm5pbmcgdGhlIHByb2plY3QgYXQgc3RhcnR1cCkgaW5zdGVhZCBvZiBkZWZlcnJpbmcgd29ya2Zsb3dcbiAgLy8gZGlzY292ZXJ5IHVudGlsIGZpbGVzIGFyZSByZXF1ZXN0ZWQuIFRoZSBgV09SS0ZMT1dfTkVYVF9MQVpZX0RJU0NPVkVSWWBcbiAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUsIGlmIHNldCwgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBvcHRpb24uXG4gIGNvbnN0IGxhenlEaXNjb3ZlcnlPdmVycmlkZSA9IHBhcnNlRW52aXJvbm1lbnRGbGFnKFxuICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfTEFaWV9ESVNDT1ZFUllcbiAgKTtcbiAgaWYgKGxhenlEaXNjb3ZlcnlPdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHdvcmtmbG93cz8ubGF6eURpc2NvdmVyeSA9PT0gZmFsc2UpIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZID0gJzEnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0xBWllfRElTQ09WRVJZID0gbGF6eURpc2NvdmVyeU92ZXJyaWRlXG4gICAgICA/ICcxJ1xuICAgICAgOiAnMCc7XG4gIH1cblxuICBpZiAoIXByb2Nlc3MuZW52LlZFUkNFTF9ERVBMT1lNRU5UX0lEKSB7XG4gICAgaWYgKCFwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQpIHtcbiAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX1RBUkdFVF9XT1JMRCA9ICdsb2NhbCc7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19MT0NBTF9EQVRBX0RJUiA9ICcubmV4dC93b3JrZmxvdy1kYXRhJztcbiAgICB9XG4gICAgY29uc3QgbWF5YmVQb3J0ID0gd29ya2Zsb3dzPy5sb2NhbD8ucG9ydDtcbiAgICBpZiAobWF5YmVQb3J0KSB7XG4gICAgICBwcm9jZXNzLmVudi5QT1JUID0gbWF5YmVQb3J0LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghcHJvY2Vzcy5lbnYuV09SS0ZMT1dfVEFSR0VUX1dPUkxEKSB7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19UQVJHRVRfV09STEQgPSAndmVyY2VsJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gYnVpbGRDb25maWcoXG4gICAgcGhhc2U6IHN0cmluZyxcbiAgICBjdHg6IHsgZGVmYXVsdENvbmZpZzogTmV4dENvbmZpZyB9XG4gICkge1xuICAgIGNvbnN0IGxvYWRlclBhdGggPSByZXF1aXJlLnJlc29sdmUoJy4vbG9hZGVyJyk7XG4gICAgbGV0IHJ1bkRlZmVycmVkQnVpbGRGcm9tQ2FsbGJhY2s6ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSB8IHVuZGVmaW5lZDtcblxuICAgIGxldCBuZXh0Q29uZmlnOiBOZXh0Q29uZmlnO1xuXG4gICAgaWYgKHR5cGVvZiBuZXh0Q29uZmlnT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbmV4dENvbmZpZyA9IGF3YWl0IG5leHRDb25maWdPckZuKHBoYXNlLCBjdHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q29uZmlnID0gbmV4dENvbmZpZ09yRm47XG4gICAgfVxuICAgIC8vIHNoYWxsb3cgY2xvbmUgdG8gYXZvaWQgcmVhZC1vbmx5IG9uIHRvcC1sZXZlbFxuICAgIG5leHRDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBuZXh0Q29uZmlnKTtcbiAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFtcbiAgICAgICAgLi4uKG5leHRDb25maWcuc2VydmVyRXh0ZXJuYWxQYWNrYWdlcyB8fCBbXSksXG4gICAgICAgIC8vIEtlZXAgdGhlIFZlcmNlbCB3b3JsZCBhbmQgaXRzIG5hdGl2ZS1wcm9uZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWwgc29cbiAgICAgICAgLy8gbG9jYWwgYnVpbGRzIGRvIG5vdCB0cnkgdG8gcGFyc2UgQHZlcmNlbC9xdWV1ZSdzIGtleXJpbmcgZGVwZW5kZW5jeVxuICAgICAgICAvLyB0cmVlLlxuICAgICAgICAuLi5WRVJDRUxfV09STERfU0VSVkVSX0VYVEVSTkFMX1BBQ0tBR0VTLFxuICAgICAgXSksXG4gICAgXTtcbiAgICBjb25zdCBleGlzdGluZ0NvbXBpbGVyID0gbmV4dENvbmZpZy5jb21waWxlciA/PyB7fTtcbiAgICBjb25zdCBleGlzdGluZ1J1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGUgPSAoXG4gICAgICBleGlzdGluZ0NvbXBpbGVyIGFzIHtcbiAgICAgICAgcnVuQWZ0ZXJQcm9kdWN0aW9uQ29tcGlsZT86IChtZXRhZGF0YToge1xuICAgICAgICAgIHByb2plY3REaXI6IHN0cmluZztcbiAgICAgICAgICBkaXN0RGlyOiBzdHJpbmc7XG4gICAgICAgIH0pID0+IFByb21pc2U8dm9pZD47XG4gICAgICB9XG4gICAgKS5ydW5BZnRlclByb2R1Y3Rpb25Db21waWxlO1xuXG4gICAgY29uc3QgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBBcnJheS5pc0FycmF5KFxuICAgICAgbmV4dENvbmZpZy5zZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzXG4gICAgKVxuICAgICAgPyBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXNcbiAgICAgIDogW107XG4gICAgbGV0IGVmZmVjdGl2ZVNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcztcblxuICAgIGlmIChjb25maWd1cmVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBkZXRlY3RlZFdvcmtmbG93UGFja2FnZXM6IERldGVjdGVkU2VydmVyRXh0ZXJuYWxQYWNrYWdlW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMpIHtcbiAgICAgICAgaWYgKFBTRVVET19FWFRFUk5BTF9QQUNLQUdFUy5oYXMocGFja2FnZU5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRldGVjdGVkID0gYXdhaXQgZGV0ZWN0U2VydmVyRXh0ZXJuYWxQYWNrYWdlKFxuICAgICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzLmN3ZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGV0ZWN0ZWQpIHtcbiAgICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5wdXNoKGRldGVjdGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEJlc3QtZWZmb3J0IG9ubHkuIE5ldmVyIGJsb2NrIGNvbmZpZyBnZW5lcmF0aW9uLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkZXRlY3RlZFdvcmtmbG93UGFja2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVkUGFja2FnZXMgPSBuZXcgU2V0KFxuICAgICAgICAgIGRldGVjdGVkV29ya2Zsb3dQYWNrYWdlcy5tYXAoKGRldGVjdGVkKSA9PiBkZXRlY3RlZC5wYWNrYWdlTmFtZSlcbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0aXZlU2VydmVyRXh0ZXJuYWxQYWNrYWdlcyA9XG4gICAgICAgICAgY29uZmlndXJlZFNlcnZlckV4dGVybmFsUGFja2FnZXMuZmlsdGVyKFxuICAgICAgICAgICAgKHBhY2thZ2VOYW1lKSA9PiAhcmVtb3ZlZFBhY2thZ2VzLmhhcyhwYWNrYWdlTmFtZSlcbiAgICAgICAgICApO1xuICAgICAgICBuZXh0Q29uZmlnLnNlcnZlckV4dGVybmFsUGFja2FnZXMgPSBlZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzO1xuICAgICAgICB3YXJuQWJvdXRBdXRvUmVtb3ZlZFNlcnZlckV4dGVybmFsUGFja2FnZXMoZGV0ZWN0ZWRXb3JrZmxvd1BhY2thZ2VzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBpZiB0dXJib3BhY2sgaXMgYmVpbmcgdXNlZFxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2spIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrID0ge307XG4gICAgfVxuICAgIGlmICghbmV4dENvbmZpZy50dXJib3BhY2sucnVsZXMpIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzID0ge307XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBuZXh0Q29uZmlnLnR1cmJvcGFjay5ydWxlcyBhcyBhbnk7XG4gICAgY29uc3QgbmV4dFZlcnNpb24gPSByZXNvbHZlTmV4dFZlcnNpb24ocHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3Qgc3VwcG9ydHNUdXJib0NvbmRpdGlvbiA9IHNlbXZlci5ndGUobmV4dFZlcnNpb24sICd2MTYuMC4wJyk7XG4gICAgY29uc3QgdXNlRGVmZXJyZWRCdWlsZGVyID0gc2hvdWxkVXNlRGVmZXJyZWRCdWlsZGVyKG5leHRWZXJzaW9uKTtcblxuICAgIGNvbnN0IHNob3VsZFdhdGNoID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCc7XG4gICAgbGV0IHdvcmtmbG93QnVpbGRlclByb21pc2U6IFByb21pc2U8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkaXN0RGlyID0gbmV4dENvbmZpZy5kaXN0RGlyIHx8ICcubmV4dCc7XG5cbiAgICBuZXh0Q29uZmlnLmNvbXBpbGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdDb21waWxlcixcbiAgICAgIHJ1bkFmdGVyUHJvZHVjdGlvbkNvbXBpbGU6IGFzeW5jIChtZXRhZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKSB7XG4gICAgICAgICAgYXdhaXQgZXhpc3RpbmdSdW5BZnRlclByb2R1Y3Rpb25Db21waWxlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBjb3B5V29ya2Zsb3dEaWFnbm9zdGljc01hbmlmZXN0KG1ldGFkYXRhKTtcbiAgICAgICAgcmVnaXN0ZXJXb3JrZmxvd0RpYWdub3N0aWNzTWFuaWZlc3RDb3B5KG1ldGFkYXRhKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGdldFdvcmtmbG93QnVpbGRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghd29ya2Zsb3dCdWlsZGVyUHJvbWlzZSkge1xuICAgICAgICB3b3JrZmxvd0J1aWxkZXJQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBOZXh0QnVpbGRlciA9IGF3YWl0IGdldE5leHRCdWlsZGVyKG5leHRWZXJzaW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE5leHRCdWlsZGVyKHtcbiAgICAgICAgICAgIHdhdGNoOiBzaG91bGRXYXRjaCxcbiAgICAgICAgICAgIC8vIGRpc2NvdmVyIHdvcmtmbG93cyBmcm9tIHBhZ2VzL2FwcCBlbnRyaWVzXG4gICAgICAgICAgICBkaXJzOiBbJ3BhZ2VzJywgJ2FwcCcsICdzcmMvcGFnZXMnLCAnc3JjL2FwcCddLFxuICAgICAgICAgICAgcHJvamVjdFJvb3Q6IG5leHRDb25maWcub3V0cHV0RmlsZVRyYWNpbmdSb290LFxuICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyUm9vdDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgIHdvcmtpbmdEaXI6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICBkaXN0RGlyLFxuICAgICAgICAgICAgZGlhZ25vc3RpY3NEaXI6IGAke2Rpc3REaXJ9L2RpYWdub3N0aWNzYCxcbiAgICAgICAgICAgIGJ1aWxkVGFyZ2V0OiAnbmV4dCcsXG4gICAgICAgICAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc3RlcHNCdW5kbGVQYXRoOiAnJywgLy8gbm90IHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgd2ViaG9va0J1bmRsZVBhdGg6ICcnLCAvLyBub2RlIHVzZWQgaW4gYmFzZVxuICAgICAgICAgICAgc291cmNlbWFwOiB3b3JrZmxvd3M/LnNvdXJjZW1hcCxcbiAgICAgICAgICAgIHN1cHByZXNzQ3JlYXRlV29ya2Zsb3dzQnVuZGxlTG9nczogdXNlRGVmZXJyZWRCdWlsZGVyLFxuICAgICAgICAgICAgc3VwcHJlc3NDcmVhdGVXb3JrZmxvd3NCdW5kbGVXYXJuaW5nczogdXNlRGVmZXJyZWRCdWlsZGVyLFxuICAgICAgICAgICAgc3VwcHJlc3NDcmVhdGVXZWJob29rQnVuZGxlTG9nczogdXNlRGVmZXJyZWRCdWlsZGVyLFxuICAgICAgICAgICAgc3VwcHJlc3NDcmVhdGVNYW5pZmVzdExvZ3M6IHVzZURlZmVycmVkQnVpbGRlcixcbiAgICAgICAgICAgIGV4dGVybmFsUGFja2FnZXM6IFtcbiAgICAgICAgICAgICAgLy8gc2VydmVyLW9ubHkgYW5kIGNsaWVudC1vbmx5IGFyZSBwc2V1ZG8tcGFja2FnZXMgaGFuZGxlZCBieSBOZXh0LmpzXG4gICAgICAgICAgICAgIC8vIGR1cmluZyBpdHMgYnVpbGQgcHJvY2Vzcy4gV2UgbWFyayB0aGVtIGFzIGV4dGVybmFsIHRvIHByZXZlbnQgZXNidWlsZFxuICAgICAgICAgICAgICAvLyBmcm9tIGZhaWxpbmcgd2hlbiBidW5kbGluZyBjb2RlIHRoYXQgaW1wb3J0cyB0aGVtLlxuICAgICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9nZXR0aW5nLXN0YXJ0ZWQvc2VydmVyLWFuZC1jbGllbnQtY29tcG9uZW50c1xuICAgICAgICAgICAgICAnc2VydmVyLW9ubHknLFxuICAgICAgICAgICAgICAnY2xpZW50LW9ubHknLFxuICAgICAgICAgICAgICAuLi5lZmZlY3RpdmVTZXJ2ZXJFeHRlcm5hbFBhY2thZ2VzLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdvcmtmbG93QnVpbGRlclByb21pc2U7XG4gICAgfTtcblxuICAgIGlmICh1c2VEZWZlcnJlZEJ1aWxkZXIpIHtcbiAgICAgIHJ1bkRlZmVycmVkQnVpbGRGcm9tQ2FsbGJhY2sgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93QnVpbGRlciA9IGF3YWl0IGdldFdvcmtmbG93QnVpbGRlcigpO1xuICAgICAgICBpZiAodHlwZW9mIHdvcmtmbG93QnVpbGRlci5vbkJlZm9yZURlZmVycmVkRW50cmllcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGF3YWl0IHdvcmtmbG93QnVpbGRlci5vbkJlZm9yZURlZmVycmVkRW50cmllcygpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBleGlzdGluZ0V4cGVyaW1lbnRhbCA9IChuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbCA/PyB7fSkgYXMgUmVjb3JkPFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGFueVxuICAgICAgPjtcbiAgICAgIGNvbnN0IGV4aXN0aW5nRGVmZXJyZWRFbnRyaWVzID0gQXJyYXkuaXNBcnJheShcbiAgICAgICAgZXhpc3RpbmdFeHBlcmltZW50YWwuZGVmZXJyZWRFbnRyaWVzXG4gICAgICApXG4gICAgICAgID8gZXhpc3RpbmdFeHBlcmltZW50YWwuZGVmZXJyZWRFbnRyaWVzXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBleGlzdGluZ09uQmVmb3JlRGVmZXJyZWRFbnRyaWVzID1cbiAgICAgICAgdHlwZW9mIGV4aXN0aW5nRXhwZXJpbWVudGFsLm9uQmVmb3JlRGVmZXJyZWRFbnRyaWVzID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBleGlzdGluZ0V4cGVyaW1lbnRhbC5vbkJlZm9yZURlZmVycmVkRW50cmllc1xuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbCA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmdFeHBlcmltZW50YWwsXG5cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RzSWdub3JlOiBleHBlY3QtZXJyb3IgaXMgd3JvbmcgYXMgaXQgd2lsbCB3b3JrIG9uIHZhbGlkIHZlcnNpb25cbiAgICAgICAgLy8gQHRzLWlnbm9yZSB0aGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIGNhbmFyeSBOZXh0LmpzXG4gICAgICAgIGRlZmVycmVkRW50cmllczogW1xuICAgICAgICAgIC4uLm5ldyBTZXQoW1xuICAgICAgICAgICAgLi4uZXhpc3RpbmdEZWZlcnJlZEVudHJpZXMsXG4gICAgICAgICAgICAuLi5XT1JLRkxPV19ERUZFUlJFRF9FTlRSSUVTLFxuICAgICAgICAgIF0pLFxuICAgICAgICBdLFxuICAgICAgICBvbkJlZm9yZURlZmVycmVkRW50cmllczogYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgIGlmIChleGlzdGluZ09uQmVmb3JlRGVmZXJyZWRFbnRyaWVzKSB7XG4gICAgICAgICAgICBhd2FpdCBleGlzdGluZ09uQmVmb3JlRGVmZXJyZWRFbnRyaWVzKC4uLmFyZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocnVuRGVmZXJyZWRCdWlsZEZyb21DYWxsYmFjaykge1xuICAgICAgICAgICAgYXdhaXQgcnVuRGVmZXJyZWRCdWlsZEZyb21DYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgW1xuICAgICAgJyoudHN4JyxcbiAgICAgICcqLnRzJyxcbiAgICAgICcqLmpzeCcsXG4gICAgICAnKi5qcycsXG4gICAgICAnKi5tanMnLFxuICAgICAgJyoubXRzJyxcbiAgICAgICcqLmNqcycsXG4gICAgICAnKi5jdHMnLFxuICAgIF0pIHtcbiAgICAgIG5leHRDb25maWcudHVyYm9wYWNrLnJ1bGVzW2tleV0gPSB7XG4gICAgICAgIC4uLihzdXBwb3J0c1R1cmJvQ29uZGl0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgIC8vIFVzZSAnYWxsJyB0byBjb21iaW5lOiBtdXN0IG1hdGNoIGNvbnRlbnQgQU5EIG11c3QgTk9UIGJlIGluIGdlbmVyYXRlZCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgJ2FsbCcgY29uZGl0aW9ucyBmcm9tIHVzZXIgY29uZmlnXG4gICAgICAgICAgICAgICAgYWxsOiBbXG4gICAgICAgICAgICAgICAgICAuLi4oZXhpc3RpbmdSdWxlc1trZXldPy5jb25kaXRpb24/LmFsbCB8fCBbXSksXG4gICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyBmcm9tIHRyYW5zZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICB7IG5vdDogeyBwYXRoOiAvWy9cXFxcXVxcLndlbGwta25vd25bL1xcXFxdd29ya2Zsb3dbL1xcXFxdLyB9IH0sXG4gICAgICAgICAgICAgICAgICAvLyBNYXRjaCBmaWxlcyB3aXRoIHdvcmtmbG93IGRpcmVjdGl2ZXMgb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gcGF0dGVybnNcbiAgICAgICAgICAgICAgICAgIC8vIFVzZXMgYmFja3JlZmVyZW5jZXMgKFxcMiwgXFwzKSB0byBlbnN1cmUgbWF0Y2hpbmcgcXVvdGUgdHlwZXNcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAvKHVzZSB3b3JrZmxvd3x1c2Ugc3RlcHxmcm9tXFxzKyhbJ1wiXSlAd29ya2Zsb3dcXC9zZXJkZVxcMnxTeW1ib2xcXC5mb3JcXHMqXFwoXFxzKihbJ1wiXSl3b3JrZmxvdy0oPzpzZXJpYWxpemV8ZGVzZXJpYWxpemUpXFwzXFxzKlxcKSkvLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBsb2FkZXJzOiBbLi4uKGV4aXN0aW5nUnVsZXNba2V5XT8ubG9hZGVycyB8fCBbXSksIGxvYWRlclBhdGhdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgdGhlIGxvYWRlciBmb3Igd2VicGFja1xuICAgIGNvbnN0IGV4aXN0aW5nV2VicGFja01vZGlmeSA9IG5leHRDb25maWcud2VicGFjaztcbiAgICBuZXh0Q29uZmlnLndlYnBhY2sgPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgW3dlYnBhY2tDb25maWddID0gYXJncztcbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmICghd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMpIHtcbiAgICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICAgIH1cbiAgICAgIC8vIGxvYWRlcnMgaW4gd2VicGFjayBhcHBseSBib3R0b20tPnVwIHNvIGVuc3VyZVxuICAgICAgLy8gb3VycyBjb21lcyBiZWZvcmUgdGhlIGRlZmF1bHQgc3djIHRyYW5zZm9ybVxuICAgICAgd2VicGFja0NvbmZpZy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC8uKlxcLihtanN8Y2pzfGN0c3x0c3x0c3h8anN8anN4KSQvLFxuICAgICAgICBsb2FkZXI6IGxvYWRlclBhdGgsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGV4aXN0aW5nV2VicGFja01vZGlmeVxuICAgICAgICA/IChleGlzdGluZ1dlYnBhY2tNb2RpZnkoLi4uYXJncykgPz8gd2VicGFja0NvbmZpZylcbiAgICAgICAgOiB3ZWJwYWNrQ29uZmlnO1xuICAgIH07XG4gICAgLy8gb25seSBydW4gdGhpcyBpbiB0aGUgbWFpbiBwcm9jZXNzIHNvIGl0IG9ubHkgcnVucyBvbmNlXG4gICAgLy8gYXMgTmV4dC5qcyB1c2VzIGNoaWxkIHByb2Nlc3NlcyBmb3IgZGlmZmVyZW50IGJ1aWxkc1xuICAgIGlmIChcbiAgICAgICFwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgJiZcbiAgICAgIHBoYXNlICE9PSAncGhhc2UtcHJvZHVjdGlvbi1zZXJ2ZXInXG4gICAgKSB7XG4gICAgICBjb25zdCB3b3JrZmxvd0J1aWxkZXIgPSBhd2FpdCBnZXRXb3JrZmxvd0J1aWxkZXIoKTtcblxuICAgICAgYXdhaXQgd29ya2Zsb3dCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX1BSSVZBVEVfQlVJTFQgPSAnMSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRDb25maWc7XG4gIH07XG59XG4iXX0=
package/dist/loader.d.ts CHANGED
@@ -1,3 +1,9 @@
1
+ type DiscoveredPatternState = {
2
+ hasWorkflow: boolean;
3
+ hasStep: boolean;
4
+ hasSerde: boolean;
5
+ };
6
+ export declare function shouldNotifySocketForDiscoveredPattern(patternStateChanged: boolean, patternState: DiscoveredPatternState): boolean;
1
7
  type WorkflowLoaderContext = {
2
8
  resourcePath: string;
3
9
  async?: () => (error: Error | null, content?: string, sourceMap?: any) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAooBA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CA+IjC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AA6BA,KAAK,sBAAsB,GAAG;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAMF,wBAAgB,sCAAsC,CACpD,mBAAmB,EAAE,OAAO,EAC5B,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAOT;AA+lBD,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CACZ,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,KACZ,IAAI,CAAC;IACV,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,GAAG,GACb,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAiJjC"}
package/dist/loader.js CHANGED
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shouldNotifySocketForDiscoveredPattern = shouldNotifySocketForDiscoveredPattern;
3
4
  exports.default = workflowLoader;
4
5
  const node_fs_1 = require("node:fs");
5
6
  const promises_1 = require("node:fs/promises");
@@ -13,6 +14,12 @@ const decoratorOptionsCache = new Map();
13
14
  let cachedBuildersModule = null;
14
15
  let cachedLoaderStaticDependencies = null;
15
16
  const discoveredPatternStateByFilePath = new Map();
17
+ function shouldNotifySocketForDiscoveredPattern(patternStateChanged, patternState) {
18
+ return (patternStateChanged ||
19
+ patternState.hasWorkflow ||
20
+ patternState.hasStep ||
21
+ patternState.hasSerde);
22
+ }
16
23
  // Cache socket connection to avoid reconnecting on every file.
17
24
  let socketClientPromise = null;
18
25
  let socketClient = null;
@@ -505,7 +512,7 @@ function workflowLoader(source, sourceMap) {
505
512
  hasSerde: patterns.hasSerde,
506
513
  };
507
514
  const { shouldNotify } = updateDiscoveredPatternState(filename, nextPatternState);
508
- if (shouldNotify) {
515
+ if (shouldNotifySocketForDiscoveredPattern(shouldNotify, nextPatternState)) {
509
516
  await notifySocketServer(filename, nextPatternState.hasWorkflow, nextPatternState.hasStep, nextPatternState.hasSerde);
510
517
  }
511
518
  // Check if file needs transformation based on patterns and path
@@ -584,4 +591,4 @@ function workflowLoader(source, sourceMap) {
584
591
  callback(error instanceof Error ? error : new Error(String(error)));
585
592
  });
586
593
  }
587
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStvQkEsaUNBbUpDO0FBbHlCRCxxQ0FBcUM7QUFDckMsK0NBQTRDO0FBQzVDLHVDQUFnRDtBQUNoRCx5Q0FBb0Q7QUFDcEQsb0NBQXNDO0FBQ3RDLHlEQUs0QjtBQU01Qix5RkFBeUY7QUFDekYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFHbEMsQ0FBQztBQUNKLHlHQUF5RztBQUN6RyxJQUFJLG9CQUFvQixHQUErQyxJQUFJLENBQUM7QUFLNUUsSUFBSSw4QkFBOEIsR0FBb0MsSUFBSSxDQUFDO0FBTzNFLE1BQU0sZ0NBQWdDLEdBQUcsSUFBSSxHQUFHLEVBRzdDLENBQUM7QUFFSiwrREFBK0Q7QUFDL0QsSUFBSSxtQkFBbUIsR0FBa0MsSUFBSSxDQUFDO0FBQzlELElBQUksWUFBWSxHQUFrQixJQUFJLENBQUM7QUFDdkMsSUFBSSxlQUFlLEdBQWtCLElBQUksQ0FBQztBQU8xQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixhQUFzQixFQUN0QixXQUE4QjtJQUU5QixNQUFNLFNBQVMsR0FDYixhQUFhLFlBQVksS0FBSztRQUM5QixNQUFNLElBQUksYUFBYTtRQUN2QixPQUFRLGFBQW9DLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFDNUQsQ0FBQyxDQUFHLGFBQWtDLENBQUMsSUFBZTtRQUN0RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLE1BQU0sWUFBWSxHQUNoQixhQUFhLFlBQVksS0FBSztRQUM1QixDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU87UUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU1QixNQUFNLEtBQUssR0FBRztRQUNaLDZDQUE2QyxTQUFTLElBQUksWUFBWSxlQUFlLFdBQVcsQ0FBQyxJQUFJLEdBQUc7S0FDekcsQ0FBQztJQUVGLE1BQU0s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N0MsQ0FBQztJQUVELEtBQUssR0FBRyxFQUFFO1NBQ1AsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pELEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO1FBQ3hCLFFBQVEsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGNvbm5lY3QsIHR5cGUgU29ja2V0IH0gZnJvbSAnbm9kZTpuZXQnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiwgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnQHN3Yy9jb3JlJztcbmltcG9ydCB7XG4gIHBhcnNlTWVzc2FnZSxcbiAgU09DS0VUX0lORk9fRklMRU5BTUUsXG4gIHR5cGUgU29ja2V0TWVzc2FnZSxcbiAgc2VyaWFsaXplTWVzc2FnZSxcbn0gZnJvbSAnLi9zb2NrZXQtc2VydmVyLmpzJztcblxudHlwZSBEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGggPVxuICBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLkRlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aDtcbnR5cGUgV29ya2Zsb3dQYXR0ZXJuTWF0Y2ggPSBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpLldvcmtmbG93UGF0dGVybk1hdGNoO1xuXG4vLyBDYWNoZSBkZWNvcmF0b3Igb3B0aW9ucyBwZXIgd29ya2luZyBkaXJlY3RvcnkgdG8gYXZvaWQgcmVhZGluZyB0c2NvbmZpZyBmb3IgZXZlcnkgZmlsZVxuY29uc3QgZGVjb3JhdG9yT3B0aW9uc0NhY2hlID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD5cbj4oKTtcbi8vIENhY2hlIGZvciBzaGFyZWQgdXRpbGl0aWVzIGZyb20gQHdvcmtmbG93L2J1aWxkZXJzIChFU00gbW9kdWxlIGxvYWRlZCBkeW5hbWljYWxseSBpbiBDb21tb25KUyBjb250ZXh0KVxubGV0IGNhY2hlZEJ1aWxkZXJzTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKSB8IG51bGwgPSBudWxsO1xudHlwZSBMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMgPSB7XG4gIHN3Y1BsdWdpblBhdGg6IHN0cmluZztcbiAgZmlsZXM6IHN0cmluZ1tdO1xufTtcbmxldCBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM6IExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyB8IG51bGwgPSBudWxsO1xuXG50eXBlIERpc2NvdmVyZWRQYXR0ZXJuU3RhdGUgPSB7XG4gIGhhc1dvcmtmbG93OiBib29sZWFuO1xuICBoYXNTdGVwOiBib29sZWFuO1xuICBoYXNTZXJkZTogYm9vbGVhbjtcbn07XG5jb25zdCBkaXNjb3ZlcmVkUGF0dGVyblN0YXRlQnlGaWxlUGF0aCA9IG5ldyBNYXA8XG4gIHN0cmluZyxcbiAgRGlzY292ZXJlZFBhdHRlcm5TdGF0ZVxuPigpO1xuXG4vLyBDYWNoZSBzb2NrZXQgY29ubmVjdGlvbiB0byBhdm9pZCByZWNvbm5lY3Rpbmcgb24gZXZlcnkgZmlsZS5cbmxldCBzb2NrZXRDbGllbnRQcm9taXNlOiBQcm9taXNlPFNvY2tldCB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG5sZXQgc29ja2V0Q2xpZW50OiBTb2NrZXQgfCBudWxsID0gbnVsbDtcbmxldCBzb2NrZXRDbGllbnRLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG50eXBlIFNvY2tldENyZWRlbnRpYWxzID0ge1xuICBwb3J0OiBudW1iZXI7XG4gIGF1dGhUb2tlbjogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBXcmFwIGEgVENQIGNvbm5lY3QgZmFpbHVyZSB3aXRoIGNvbnRleHQgYWJvdXQgd2hlcmUgdGhlIGNvbm5lY3Rpb24gd2FzXG4gKiBhdHRlbXB0ZWQsIHdoZXJlIHRoZSBjcmVkZW50aWFscyBjYW1lIGZyb20sIGFuZCB3aGljaCBzb3VyY2UgZmlsZSB3YXNcbiAqIGJlaW5nIHByb2Nlc3NlZCB3aGVuIGl0IGZhaWxlZC4gRUNPTk5SRUZVU0VEIGlzIHRoZSBjb21tb24gY2FzZSBoZXJlLCBhbmRcbiAqIHRoZSBtZXNzYWdlIHBvaW50cyB0aGUgdXNlciBhdCB0aGUgbW9zdCBsaWtlbHkgcm9vdCBjYXVzZSAoc3RhbGVcbiAqIHNvY2tldC1pbmZvIGZpbGUpLlxuICovXG5mdW5jdGlvbiBhbm5vdGF0ZUNvbm5lY3Rpb25FcnJvcihcbiAgb3JpZ2luYWxFcnJvcjogdW5rbm93bixcbiAgY3JlZGVudGlhbHM6IFNvY2tldENyZWRlbnRpYWxzXG4pOiBFcnJvciB7XG4gIGNvbnN0IGVycm9yQ29kZSA9XG4gICAgb3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgJ2NvZGUnIGluIG9yaWdpbmFsRXJyb3IgJiZcbiAgICB0eXBlb2YgKG9yaWdpbmFsRXJyb3IgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlID09PSAnc3RyaW5nJ1xuICAgICAgPyAoKG9yaWdpbmFsRXJyb3IgYXMgeyBjb2RlOiBzdHJpbmcgfSkuY29kZSBhcyBzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICBvcmlnaW5hbEVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgID8gb3JpZ2luYWxFcnJvci5tZXNzYWdlXG4gICAgICA6IFN0cmluZyhvcmlnaW5hbEVycm9yKTtcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgV29ya2Zsb3cgZGlzY292ZXJ5IHNvY2tldCBjb25uZWN0IGZhaWxlZDogJHtlcnJvckNvZGUgPz8gZXJyb3JNZXNzYWdlfSAoMTI3LjAuMC4xOiR7Y3JlZGVudGlhbHMucG9ydH0pYCxcbiAgXTtcblxuICBjb25zdCBhbm5vdGF0ZWQgPSBuZXcgRXJyb3IobGluZXMuam9pbignXFxuJykpO1xuICBpZiAob3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgKGFubm90YXRlZCBhcyB7IGNhdXNlPzogdW5rbm93biB9KS5jYXVzZSA9IG9yaWdpbmFsRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGFubm90YXRlZDtcbn1cblxuY29uc3QgUk9VVEVfU1RVQl9GSUxFX01BUktFUiA9ICdXT1JLRkxPV19ST1VURV9TVFVCX0ZJTEUnO1xuY29uc3QgUk9VVEVfU1RVQl9CVUlMRF9XQUlUX1RJTUVPVVRfTVMgPSAxMjBfMDAwO1xubGV0IHBlbmRpbmdEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiByZWdpc3RlckZpbGVEZXBlbmRlbmN5KFxuICBsb2FkZXJDb250ZXh0OiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIGRlcGVuZGVuY3lQYXRoOiBzdHJpbmdcbik6IHZvaWQge1xuICBsb2FkZXJDb250ZXh0LmFkZERlcGVuZGVuY3k/LihkZXBlbmRlbmN5UGF0aCk7XG4gIGxvYWRlckNvbnRleHQuYWRkQnVpbGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEaXNjb3ZlcmVkUGF0dGVyblN0YXRlKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBuZXh0U3RhdGU6IERpc2NvdmVyZWRQYXR0ZXJuU3RhdGVcbik6IHsgc2hvdWxkTm90aWZ5OiBib29sZWFuOyBwcmV2aW91c1N0YXRlPzogRGlzY292ZXJlZFBhdHRlcm5TdGF0ZSB9IHtcbiAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IGRpc2NvdmVyZWRQYXR0ZXJuU3RhdGVCeUZpbGVQYXRoLmdldChmaWxlUGF0aCk7XG4gIGNvbnN0IGhhc0FueVBhdHRlcm4gPVxuICAgIG5leHRTdGF0ZS5oYXNXb3JrZmxvdyB8fCBuZXh0U3RhdGUuaGFzU3RlcCB8fCBuZXh0U3RhdGUuaGFzU2VyZGU7XG5cbiAgaWYgKCFoYXNBbnlQYXR0ZXJuKSB7XG4gICAgaWYgKCFwcmV2aW91c1N0YXRlKSB7XG4gICAgICByZXR1cm4geyBzaG91bGROb3RpZnk6IGZhbHNlIH07XG4gICAgfVxuICAgIGRpc2NvdmVyZWRQYXR0ZXJuU3RhdGVCeUZpbGVQYXRoLmRlbGV0ZShmaWxlUGF0aCk7XG4gICAgcmV0dXJuIHsgc2hvdWxkTm90aWZ5OiB0cnVlLCBwcmV2aW91c1N0YXRlIH07XG4gIH1cblxuICBpZiAoXG4gICAgcHJldmlvdXNTdGF0ZSAmJlxuICAgIHByZXZpb3VzU3RhdGUuaGFzV29ya2Zsb3cgPT09IG5leHRTdGF0ZS5oYXNXb3JrZmxvdyAmJlxuICAgIHByZXZpb3VzU3RhdGUuaGFzU3RlcCA9PT0gbmV4dFN0YXRlLmhhc1N0ZXAgJiZcbiAgICBwcmV2aW91c1N0YXRlLmhhc1NlcmRlID09PSBuZXh0U3RhdGUuaGFzU2VyZGVcbiAgKSB7XG4gICAgcmV0dXJuIHsgc2hvdWxkTm90aWZ5OiBmYWxzZSwgcHJldmlvdXNTdGF0ZSB9O1xuICB9XG5cbiAgZGlzY292ZXJlZFBhdHRlcm5TdGF0ZUJ5RmlsZVBhdGguc2V0KGZpbGVQYXRoLCBuZXh0U3RhdGUpO1xuICByZXR1cm4geyBzaG91bGROb3RpZnk6IHRydWUsIHByZXZpb3VzU3RhdGUgfTtcbn1cblxuZnVuY3Rpb24gYWRkSWZFeGlzdHMoZmlsZXM6IFNldDxzdHJpbmc+LCBkZXBlbmRlbmN5UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChleGlzdHNTeW5jKGRlcGVuZGVuY3lQYXRoKSkge1xuICAgIGZpbGVzLmFkZChkZXBlbmRlbmN5UGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUxvYWRlclN0YXRpY0RlcGVuZGVuY2llcygpOiBMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMge1xuICBpZiAoY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKSB7XG4gICAgcmV0dXJuIGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcztcbiAgfVxuXG4gIGNvbnN0IHN3Y1BsdWdpblBhdGggPSByZXF1aXJlLnJlc29sdmUoJ0B3b3JrZmxvdy9zd2MtcGx1Z2luJyk7XG4gIGNvbnN0IHN3Y1BsdWdpbkJ1aWxkSGFzaFBhdGggPSByZXF1aXJlLnJlc29sdmUoXG4gICAgJ0B3b3JrZmxvdy9zd2MtcGx1Z2luL2J1aWxkLWhhc2guanNvbidcbiAgKTtcbiAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyc1BhdGggPSByZXF1aXJlLnJlc29sdmUoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuXG4gIC8vIERlcml2ZSBwYWNrYWdlLmpzb24gcGF0aHMgZnJvbSByZXNvbHZlZCBlbnRyeXBvaW50cyB0byBhdm9pZFxuICAvLyBUdXJib3BhY2sgbG9hZGVyLWV2YWwgZmFpbHVyZXMgYXJvdW5kIC4uL3BhY2thZ2UuanNvbiByZXNvbHV0aW9uLlxuICBjb25zdCBzd2NQbHVnaW5QYWNrYWdlSnNvblBhdGggPSBqb2luKGRpcm5hbWUoc3djUGx1Z2luUGF0aCksICdwYWNrYWdlLmpzb24nKTtcbiAgY29uc3Qgd29ya2Zsb3dCdWlsZGVyc1BhY2thZ2VKc29uUGF0aCA9IGpvaW4oXG4gICAgZGlybmFtZSh3b3JrZmxvd0J1aWxkZXJzUGF0aCksXG4gICAgJy4uL3BhY2thZ2UuanNvbidcbiAgKTtcblxuICBjb25zdCBmaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgX19maWxlbmFtZSxcbiAgICByZXF1aXJlLnJlc29sdmUoJy4vc29ja2V0LXNlcnZlcicpLFxuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgc3djUGx1Z2luQnVpbGRIYXNoUGF0aCxcbiAgICB3b3JrZmxvd0J1aWxkZXJzUGF0aCxcbiAgXSk7XG4gIGFkZElmRXhpc3RzKGZpbGVzLCBzd2NQbHVnaW5QYWNrYWdlSnNvblBhdGgpO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgd29ya2Zsb3dCdWlsZGVyc1BhY2thZ2VKc29uUGF0aCk7XG5cbiAgY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzID0ge1xuICAgIHN3Y1BsdWdpblBhdGgsXG4gICAgZmlsZXM6IEFycmF5LmZyb20oZmlsZXMpLFxuICB9O1xuICByZXR1cm4gY2FjaGVkTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlclRyYW5zZm9ybURlcGVuZGVuY2llcyhcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0XG4pOiBzdHJpbmcge1xuICBjb25zdCBzdGF0aWNEZXBlbmRlbmNpZXMgPSByZXNvbHZlTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzKCk7XG4gIGZvciAoY29uc3QgZGVwZW5kZW5jeVBhdGggb2Ygc3RhdGljRGVwZW5kZW5jaWVzLmZpbGVzKSB7XG4gICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShsb2FkZXJDb250ZXh0LCBkZXBlbmRlbmN5UGF0aCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGljRGVwZW5kZW5jaWVzLnN3Y1BsdWdpblBhdGg7XG59XG5cbmZ1bmN0aW9uIHJlc2V0U29ja2V0Q2xpZW50KGNhY2hlZFNvY2tldD86IFNvY2tldCk6IHZvaWQge1xuICBpZiAoY2FjaGVkU29ja2V0ICYmIHNvY2tldENsaWVudCAmJiBzb2NrZXRDbGllbnQgIT09IGNhY2hlZFNvY2tldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNvY2tldENsaWVudFByb21pc2UgPSBudWxsO1xuICBzb2NrZXRDbGllbnQgPSBudWxsO1xuICBzb2NrZXRDbGllbnRLZXkgPSBudWxsO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVNvY2tldE1lc3NhZ2UoXG4gIHNvY2tldDogU29ja2V0LFxuICBtZXNzYWdlOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc29ja2V0LndyaXRlKG1lc3NhZ2UsIChlcnJvcj86IEVycm9yIHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm9GaWxlUGF0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgY29uZmlndXJlZFBhdGggPSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT0NLRVRfSU5GT19QQVRIO1xuICBpZiAoY29uZmlndXJlZFBhdGgpIHtcbiAgICByZXR1cm4gY29uZmlndXJlZFBhdGg7XG4gIH1cblxuICAvLyBGYWxsYmFjayBmb3Igd29ya2VyIHByb2Nlc3NlcyB0aGF0IGRvbid0IGluaGVyaXQgZHluYW1pYyBlbnYgdXBkYXRlc1xuICAvLyBmcm9tIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCB0aGUgc29ja2V0IHNlcnZlci5cbiAgY29uc3QgZGlzdERpciA9IHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfRElTVF9ESVIgfHwgJy5uZXh0JztcbiAgY29uc3QgY3dkRmFsbGJhY2tQYXRoID0gam9pbihwcm9jZXNzLmN3ZCgpLCBkaXN0RGlyLCBTT0NLRVRfSU5GT19GSUxFTkFNRSk7XG4gIGNvbnN0IHByb2plY3RSb290ID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfUFJPSkVDVF9ST09UO1xuICBpZiAocHJvamVjdFJvb3QpIHtcbiAgICBjb25zdCBwcm9qZWN0Um9vdEZhbGxiYWNrUGF0aCA9IGpvaW4oXG4gICAgICBwcm9qZWN0Um9vdCxcbiAgICAgIGRpc3REaXIsXG4gICAgICBTT0NLRVRfSU5GT19GSUxFTkFNRVxuICAgICk7XG4gICAgaWYgKGV4aXN0c1N5bmMocHJvamVjdFJvb3RGYWxsYmFja1BhdGgpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdFJvb3RGYWxsYmFja1BhdGg7XG4gICAgfVxuICB9XG4gIHJldHVybiBjd2RGYWxsYmFja1BhdGg7XG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldENyZWRlbnRpYWxzRnJvbUVudigpOiBTb2NrZXRDcmVkZW50aWFscyB8IG51bGwge1xuICBjb25zdCBzb2NrZXRQb3J0ID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09DS0VUX1BPUlQ7XG4gIGNvbnN0IGF1dGhUb2tlbiA9IHByb2Nlc3MuZW52LldPUktGTE9XX1NPQ0tFVF9BVVRIO1xuICBpZiAoIXNvY2tldFBvcnQgfHwgIWF1dGhUb2tlbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcG9ydCA9IE51bWJlci5wYXJzZUludChzb2NrZXRQb3J0LCAxMCk7XG4gIGlmIChOdW1iZXIuaXNOYU4ocG9ydCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4geyBwb3J0LCBhdXRoVG9rZW4gfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U29ja2V0Q3JlZGVudGlhbHNGcm9tRmlsZSgpOiBQcm9taXNlPFNvY2tldENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICBjb25zdCBzb2NrZXRJbmZvRmlsZVBhdGggPSBnZXRTb2NrZXRJbmZvRmlsZVBhdGgoKTtcbiAgaWYgKCFzb2NrZXRJbmZvRmlsZVBhdGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIWV4aXN0c1N5bmMoc29ja2V0SW5mb0ZpbGVQYXRoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCByZWFkRmlsZShzb2NrZXRJbmZvRmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpIGFzIHtcbiAgICAgIHBvcnQ/OiB1bmtub3duO1xuICAgICAgYXV0aFRva2VuPzogdW5rbm93bjtcbiAgICB9O1xuICAgIGNvbnN0IGF1dGhUb2tlbiA9XG4gICAgICB0eXBlb2YgcGFyc2VkLmF1dGhUb2tlbiA9PT0gJ3N0cmluZycgPyBwYXJzZWQuYXV0aFRva2VuIDogbnVsbDtcbiAgICBjb25zdCBudW1lcmljUG9ydCA9XG4gICAgICB0eXBlb2YgcGFyc2VkLnBvcnQgPT09ICdudW1iZXInXG4gICAgICAgID8gcGFyc2VkLnBvcnRcbiAgICAgICAgOiBOdW1iZXIucGFyc2VJbnQoU3RyaW5nKHBhcnNlZC5wb3J0KSwgMTApO1xuXG4gICAgaWYgKCFhdXRoVG9rZW4gfHwgTnVtYmVyLmlzTmFOKG51bWVyaWNQb3J0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwb3J0OiBudW1lcmljUG9ydCxcbiAgICAgIGF1dGhUb2tlbixcbiAgICB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTb2NrZXRDcmVkZW50aWFscygpOiBQcm9taXNlPFNvY2tldENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICBjb25zdCBlbnZDcmVkZW50aWFscyA9IGdldFNvY2tldENyZWRlbnRpYWxzRnJvbUVudigpO1xuICBpZiAoZW52Q3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4gZW52Q3JlZGVudGlhbHM7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdldFNvY2tldENyZWRlbnRpYWxzRnJvbUZpbGUoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U29ja2V0Q2xpZW50KCk6IFByb21pc2U8U29ja2V0IHwgbnVsbD4ge1xuICBjb25zdCBzb2NrZXRDcmVkZW50aWFscyA9IGF3YWl0IGdldFNvY2tldENyZWRlbnRpYWxzKCk7XG4gIGlmICghc29ja2V0Q3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChzb2NrZXRDbGllbnQ/LmRlc3Ryb3llZCkge1xuICAgIHJlc2V0U29ja2V0Q2xpZW50KHNvY2tldENsaWVudCk7XG4gIH1cblxuICBjb25zdCBjdXJyZW50U29ja2V0S2V5ID0gYCR7c29ja2V0Q3JlZGVudGlhbHMucG9ydH06JHtzb2NrZXRDcmVkZW50aWFscy5hdXRoVG9rZW59YDtcbiAgaWYgKHNvY2tldENsaWVudEtleSAmJiBzb2NrZXRDbGllbnRLZXkgIT09IGN1cnJlbnRTb2NrZXRLZXkpIHtcbiAgICBpZiAoc29ja2V0Q2xpZW50KSB7XG4gICAgICByZXNldFNvY2tldENsaWVudChzb2NrZXRDbGllbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNldFNvY2tldENsaWVudCgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghc29ja2V0Q2xpZW50UHJvbWlzZSkge1xuICAgIHNvY2tldENsaWVudFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc29ja2V0ID0gY29ubmVjdCh7XG4gICAgICAgICAgcG9ydDogc29ja2V0Q3JlZGVudGlhbHMucG9ydCxcbiAgICAgICAgICBob3N0OiAnMTI3LjAuMC4xJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV2FpdCBmb3IgY29ubmVjdGlvblxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb25Db25uZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgc29ja2V0LnNldE5vRGVsYXkodHJ1ZSk7XG4gICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBvbkVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVqZWN0KGFubm90YXRlQ29ubmVjdGlvbkVycm9yKGVycm9yLCBzb2NrZXRDcmVkZW50aWFscykpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgYW5ub3RhdGVDb25uZWN0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICAgbmV3IEVycm9yKCdTb2NrZXQgY29ubmVjdGlvbiB0aW1lb3V0JyksXG4gICAgICAgICAgICAgICAgc29ja2V0Q3JlZGVudGlhbHNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgc29ja2V0Lm9mZignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgICAgICAgICBzb2NrZXQub2ZmKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzb2NrZXQub24oJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgICAgIHNvY2tldC5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc29ja2V0Lm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgICByZXNldFNvY2tldENsaWVudChzb2NrZXQpO1xuICAgICAgICB9KTtcbiAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICByZXNldFNvY2tldENsaWVudChzb2NrZXQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzb2NrZXRDbGllbnQgPSBzb2NrZXQ7XG4gICAgICAgIHNvY2tldENsaWVudEtleSA9IGN1cnJlbnRTb2NrZXRLZXk7XG4gICAgICAgIHJldHVybiBzb2NrZXQ7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXNldFNvY2tldENsaWVudCgpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG4gIHJldHVybiBzb2NrZXRDbGllbnRQcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBub3RpZnlTb2NrZXRTZXJ2ZXIoXG4gIGZpbGVuYW1lOiBzdHJpbmcsXG4gIGhhc1dvcmtmbG93OiBib29sZWFuLFxuICBoYXNTdGVwOiBib29sZWFuLFxuICBoYXNTZXJkZTogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNvY2tldENyZWRlbnRpYWxzID0gYXdhaXQgZ2V0U29ja2V0Q3JlZGVudGlhbHMoKTtcbiAgaWYgKCFzb2NrZXRDcmVkZW50aWFscykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNvY2tldCA9IGF3YWl0IGdldFNvY2tldENsaWVudCgpO1xuICBpZiAoIXNvY2tldCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YXJpYW50OiBtaXNzaW5nIHdvcmtmbG93IHNvY2tldCBjb25uZWN0aW9uJyk7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlOiBTb2NrZXRNZXNzYWdlID0ge1xuICAgIHR5cGU6ICdmaWxlLWRpc2NvdmVyZWQnLFxuICAgIGZpbGVQYXRoOiBmaWxlbmFtZSxcbiAgICBoYXNXb3JrZmxvdyxcbiAgICBoYXNTdGVwLFxuICAgIGhhc1NlcmRlLFxuICB9O1xuICBjb25zdCBzZXJpYWxpemVkTWVzc2FnZSA9IHNlcmlhbGl6ZU1lc3NhZ2UoXG4gICAgbWVzc2FnZSxcbiAgICBzb2NrZXRDcmVkZW50aWFscy5hdXRoVG9rZW5cbiAgKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdyaXRlU29ja2V0TWVzc2FnZShzb2NrZXQsIHNlcmlhbGl6ZWRNZXNzYWdlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNldFNvY2tldENsaWVudChzb2NrZXQpO1xuICAgIGNvbnN0IHJlY29ubmVjdGVkU29ja2V0ID0gYXdhaXQgZ2V0U29ja2V0Q2xpZW50KCk7XG4gICAgaWYgKCFyZWNvbm5lY3RlZFNvY2tldCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGF3YWl0IHdyaXRlU29ja2V0TWVzc2FnZShyZWNvbm5lY3RlZFNvY2tldCwgc2VyaWFsaXplZE1lc3NhZ2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzV29ya2Zsb3dSb3V0ZVN0dWJTb3VyY2Uoc291cmNlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNvdXJjZS5pbmNsdWRlcyhST1VURV9TVFVCX0ZJTEVfTUFSS0VSKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlU29ja2V0Q29ubmVjdGlvbihcbiAgc29ja2V0Q3JlZGVudGlhbHM6IFNvY2tldENyZWRlbnRpYWxzLFxuICB0aW1lb3V0TXMgPSAxXzAwMFxuKTogUHJvbWlzZTxTb2NrZXQ+IHtcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPFNvY2tldD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNvY2tldCA9IGNvbm5lY3Qoe1xuICAgICAgcG9ydDogc29ja2V0Q3JlZGVudGlhbHMucG9ydCxcbiAgICAgIGhvc3Q6ICcxMjcuMC4wLjEnLFxuICAgIH0pO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICByZWplY3QoXG4gICAgICAgIGFubm90YXRlQ29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgIG5ldyBFcnJvcignU29ja2V0IGNvbm5lY3Rpb24gdGltZW91dCcpLFxuICAgICAgICAgIHNvY2tldENyZWRlbnRpYWxzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgc29ja2V0Lm9mZignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgICBzb2NrZXQub2ZmKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIH07XG4gICAgY29uc3Qgb25Db25uZWN0ID0gKCkgPT4ge1xuICAgICAgc29ja2V0LnNldE5vRGVsYXkodHJ1ZSk7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZXNvbHZlKHNvY2tldCk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIHJlamVjdChhbm5vdGF0ZUNvbm5lY3Rpb25FcnJvcihlcnJvciwgc29ja2V0Q3JlZGVudGlhbHMpKTtcbiAgICB9O1xuXG4gICAgc29ja2V0Lm9uKCdjb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25FcnJvcik7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yRGVmZXJyZWRCdWlsZENvbXBsZXRlKFxuICBzb2NrZXQ6IFNvY2tldCxcbiAgYXV0aFRva2VuOiBzdHJpbmcsXG4gIHRpbWVvdXRNcyA9IFJPVVRFX1NUVUJfQlVJTERfV0FJVF9USU1FT1VUX01TXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBidWZmZXIgPSAnJztcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcignVGltZWQgb3V0IHdhaXRpbmcgZm9yIGRlZmVycmVkIHJvdXRlIGJ1aWxkIGNvbXBsZXRpb24nKVxuICAgICAgKTtcbiAgICB9LCB0aW1lb3V0TXMpO1xuICAgIGNvbnN0IGNsZWFudXAgPSAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBzb2NrZXQub2ZmKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIHNvY2tldC5vZmYoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICBzb2NrZXQub2ZmKCdjbG9zZScsIG9uQ2xvc2UpO1xuICAgICAgc29ja2V0Lm9mZignZW5kJywgb25DbG9zZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICByZWplY3QobmV3IEVycm9yKCdTb2NrZXQgY2xvc2VkIGJlZm9yZSBkZWZlcnJlZCByb3V0ZSBidWlsZCBjb21wbGV0ZWQnKSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkRhdGEgPSAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgYnVmZmVyICs9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgICBsZXQgbmV3bGluZUluZGV4ID0gYnVmZmVyLmluZGV4T2YoJ1xcbicpO1xuICAgICAgd2hpbGUgKG5ld2xpbmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGJ1ZmZlci5zbGljZSgwLCBuZXdsaW5lSW5kZXgpO1xuICAgICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UobmV3bGluZUluZGV4ICsgMSk7XG4gICAgICAgIG5ld2xpbmVJbmRleCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlID0gcGFyc2VNZXNzYWdlKGxpbmUsIGF1dGhUb2tlbik7XG4gICAgICAgIGlmIChtZXNzYWdlPy50eXBlID09PSAnYnVpbGQtY29tcGxldGUnKSB7XG4gICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc29ja2V0Lm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICBzb2NrZXQub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgc29ja2V0Lm9uKCdjbG9zZScsIG9uQ2xvc2UpO1xuICAgIHNvY2tldC5vbignZW5kJywgb25DbG9zZSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB0cmlnZ2VyRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZEFuZFdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNvY2tldENyZWRlbnRpYWxzID0gYXdhaXQgZ2V0U29ja2V0Q3JlZGVudGlhbHMoKTtcbiAgaWYgKCFzb2NrZXRDcmVkZW50aWFscykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBjcmVhdGVTb2NrZXRDb25uZWN0aW9uKHNvY2tldENyZWRlbnRpYWxzKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZVNvY2tldE1lc3NhZ2UoXG4gICAgICBzb2NrZXQsXG4gICAgICBzZXJpYWxpemVNZXNzYWdlKHsgdHlwZTogJ3RyaWdnZXItYnVpbGQnIH0sIHNvY2tldENyZWRlbnRpYWxzLmF1dGhUb2tlbilcbiAgICApO1xuICAgIGF3YWl0IHdhaXRGb3JEZWZlcnJlZEJ1aWxkQ29tcGxldGUoc29ja2V0LCBzb2NrZXRDcmVkZW50aWFscy5hdXRoVG9rZW4pO1xuICB9IGZpbmFsbHkge1xuICAgIHNvY2tldC5kZXN0cm95KCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZEFuZFdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2UpIHtcbiAgICByZXR1cm4gcGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlO1xuICB9XG4gIGNvbnN0IHBlbmRpbmdQcm9taXNlID0gdHJpZ2dlckRlZmVycmVkUm91dGVTdHViQnVpbGRBbmRXYWl0KCk7XG4gIHBlbmRpbmdEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkUHJvbWlzZSA9IHBlbmRpbmdQcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgIGlmIChwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2UgPT09IHBlbmRpbmdQcm9taXNlKSB7XG4gICAgICBwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2UgPSBudWxsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEJ1aWxkZXJzTW9kdWxlKCk6IFByb21pc2U8XG4gIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpXG4+IHtcbiAgaWYgKGNhY2hlZEJ1aWxkZXJzTW9kdWxlKSB7XG4gICAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xuICB9XG4gIC8vIER5bmFtaWMgaW1wb3J0IHRvIGhhbmRsZSBFU00gbW9kdWxlIGZyb20gQ29tbW9uSlMgY29udGV4dFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zZWN1cml0eS9ub0dsb2JhbEV2YWw6IE5lZWQgdG8gdXNlIGV2YWwgaGVyZSB0byBhdm9pZCBUeXBlU2NyaXB0IGZyb20gdHJhbnNwaWxpbmcgdGhlIGltcG9ydCBzdGF0ZW1lbnQgaW50byBgcmVxdWlyZSgpYFxuICBjYWNoZWRCdWlsZGVyc01vZHVsZSA9IChhd2FpdCBldmFsKFxuICAgICdpbXBvcnQoXCJAd29ya2Zsb3cvYnVpbGRlcnNcIiknXG4gICkpIGFzIHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpO1xuICByZXR1cm4gY2FjaGVkQnVpbGRlcnNNb2R1bGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldERlY29yYXRvck9wdGlvbnMoXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+IHtcbiAgY29uc3QgY2FjaGVkID0gZGVjb3JhdG9yT3B0aW9uc0NhY2hlLmdldCh3b3JraW5nRGlyKTtcbiAgaWYgKGNhY2hlZCkge1xuICAgIHJldHVybiBjYWNoZWQ7XG4gIH1cblxuICBjb25zdCBwcm9taXNlID0gKGFzeW5jICgpOiBQcm9taXNlPERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aD4gPT4ge1xuICAgIGNvbnN0IHsgZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgICByZXR1cm4gZ2V0RGVjb3JhdG9yT3B0aW9uc0ZvckRpcmVjdG9yeVdpdGhDb25maWdQYXRoKHdvcmtpbmdEaXIpO1xuICB9KSgpO1xuXG4gIGRlY29yYXRvck9wdGlvbnNDYWNoZS5zZXQod29ya2luZ0RpciwgcHJvbWlzZSk7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkZXRlY3RQYXR0ZXJucyhzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8V29ya2Zsb3dQYXR0ZXJuTWF0Y2g+IHtcbiAgY29uc3QgeyBkZXRlY3RXb3JrZmxvd1BhdHRlcm5zIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyhzb3VyY2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja0dlbmVyYXRlZEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUoZmlsZVBhdGgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1Nob3VsZFRyYW5zZm9ybShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgcGF0dGVybnM6IFdvcmtmbG93UGF0dGVybk1hdGNoXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBzaG91bGRUcmFuc2Zvcm1GaWxlIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gc2hvdWxkVHJhbnNmb3JtRmlsZShmaWxlUGF0aCwgcGF0dGVybnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRNb2R1bGVTcGVjaWZpZXIoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVNb2R1bGVTcGVjaWZpZXIoZmlsZVBhdGgsIHByb2plY3RSb290KS5tb2R1bGVTcGVjaWZpZXI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gPSBhd2FpdCBnZXRCdWlsZGVyc01vZHVsZSgpO1xuICByZXR1cm4gcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoZmlsZVBhdGgsIHdvcmtpbmdEaXIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVwYXRoID0gZmlsZW5hbWUucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gIC8vIFdpbmRvd3MgZml4OiBVc2UgY2FzZS1pbnNlbnNpdGl2ZSBjb21wYXJpc29uIHRvIHdvcmsgYXJvdW5kIGRyaXZlIGxldHRlciBjYXNpbmcgaXNzdWVzXG4gIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBsb3dlclBhdGggPSBub3JtYWxpemVkRmlsZXBhdGgudG9Mb3dlckNhc2UoKTtcblxuICBsZXQgcmVsYXRpdmVGaWxlbmFtZTogc3RyaW5nO1xuICBpZiAobG93ZXJQYXRoLnN0YXJ0c1dpdGgoYCR7bG93ZXJXZH0vYCkpIHtcbiAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnN1YnN0cmluZyhcbiAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICApO1xuICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IChzaG91bGRuJ3QgaGFwcGVuKVxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSAnLic7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHJlbGF0aXZlKCkgZm9yIGZpbGVzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gcmVsYXRpdmUod29ya2luZ0RpciwgZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgIGlmIChyZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICBjb25zdCBhbGlhc2VkUmVsYXRpdmVQYXRoID0gYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNQYXRoKFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgd29ya2luZ0RpclxuICAgICAgKTtcbiAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBhbGlhc2VkUmVsYXRpdmVQYXRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlRmlsZW5hbWVcbiAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaW5hbCBzYWZldHkgY2hlY2sgLSBlbnN1cmUgd2UgbmV2ZXIgcGFzcyBhbiBhYnNvbHV0ZSBwYXRoIHRvIFNXQ1xuICBpZiAocmVsYXRpdmVGaWxlbmFtZS5pbmNsdWRlcygnOicpIHx8IHJlbGF0aXZlRmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgcmFyZWx5IGhhcHBlbiwgYnV0IHVzZSBmaWxlbmFtZSBzcGxpdCBhcyBsYXN0IHJlc29ydFxuICAgIHJlbGF0aXZlRmlsZW5hbWUgPSBub3JtYWxpemVkRmlsZXBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAndW5rbm93bi50cyc7XG4gIH1cblxuICByZXR1cm4gcmVsYXRpdmVGaWxlbmFtZTtcbn1cblxuLy8gVGhpcyBsb2FkZXIgYXBwbGllcyB0aGUgXCJ1c2Ugd29ya2Zsb3dcIi9cInVzZSBzdGVwXCIgdHJhbnNmb3JtLlxuLy8gQWxsIGZpbGVzIHVzZSBzdGVwIG1vZGU7IHRoZSBTV0MgcGx1Z2luIGRlY2lkZXMgcGVyLWZ1bmN0aW9uIHdoZXRoZXJcbi8vIHRvIGVtaXQgd29ya2Zsb3cgb3Igc3RlcCBiaW5kaW5ncyBiYXNlZCBvbiB0aGUgc291cmNlJ3MgZGlyZWN0aXZlcy5cbnR5cGUgV29ya2Zsb3dMb2FkZXJDb250ZXh0ID0ge1xuICByZXNvdXJjZVBhdGg6IHN0cmluZztcbiAgYXN5bmM/OiAoKSA9PiAoXG4gICAgZXJyb3I6IEVycm9yIHwgbnVsbCxcbiAgICBjb250ZW50Pzogc3RyaW5nLFxuICAgIHNvdXJjZU1hcD86IGFueVxuICApID0+IHZvaWQ7XG4gIGFkZERlcGVuZGVuY3k/OiAoZGVwZW5kZW5jeTogc3RyaW5nKSA9PiB2b2lkO1xuICBhZGRCdWlsZERlcGVuZGVuY3k/OiAoZGVwZW5kZW5jeTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd29ya2Zsb3dMb2FkZXIoXG4gIHRoaXM6IFdvcmtmbG93TG9hZGVyQ29udGV4dCxcbiAgc291cmNlOiBzdHJpbmcgfCBCdWZmZXIsXG4gIHNvdXJjZU1hcDogYW55XG4pOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfCB2b2lkIHtcbiAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmFzeW5jPy4oKTtcbiAgY29uc3QgcnVuID0gYXN5bmMgKCk6IFByb21pc2U8eyBjb2RlOiBzdHJpbmc7IG1hcDogYW55IH0+ID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMucmVzb3VyY2VQYXRoO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTb3VyY2UgPSBzb3VyY2UudG9TdHJpbmcoKTtcbiAgICBjb25zdCB3b3JraW5nRGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVnaXN0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXModGhpcyk7XG4gICAgY29uc3Qgc291cmNlRm9yVHJhbnNmb3JtID0gbm9ybWFsaXplZFNvdXJjZTtcblxuICAgIGNvbnN0IGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlID0gYXdhaXQgY2hlY2tHZW5lcmF0ZWRGaWxlKGZpbGVuYW1lKTtcbiAgICAvLyBTa2lwIGdlbmVyYXRlZCB3b3JrZmxvdyByb3V0ZSBmaWxlcyB0byBhdm9pZCByZS1wcm9jZXNzaW5nIHRoZW0uXG4gICAgLy8gRGVmZXJyZWQgcm91dGUgc3R1YnMgYXJlIGEgc3BlY2lhbCBjYXNlOiB3YWl0IGZvciB0aGUgZ2VuZXJhdGVkIHJvdXRlXG4gICAgLy8gb3V0cHV0IHRvIGJlY29tZSBhdmFpbGFibGUgYmVmb3JlIHJldHVybmluZy5cbiAgICBpZiAoaXNHZW5lcmF0ZWRXb3JrZmxvd0ZpbGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuV09SS0ZMT1dfTkVYVF9MQVpZX0RJU0NPVkVSWSA9PT0gJzEnICYmXG4gICAgICAgIGlzV29ya2Zsb3dSb3V0ZVN0dWJTb3VyY2Uobm9ybWFsaXplZFNvdXJjZSlcbiAgICAgICkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGVuc3VyZURlZmVycmVkUm91dGVTdHViQnVpbGRBbmRXYWl0KCk7XG4gICAgICAgICAgY29uc3QgcmVmcmVzaGVkU291cmNlID0gYXdhaXQgcmVhZEZpbGUoZmlsZW5hbWUsICd1dGY4Jyk7XG4gICAgICAgICAgaWYgKCFpc1dvcmtmbG93Um91dGVTdHViU291cmNlKHJlZnJlc2hlZFNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGNvZGU6IHJlZnJlc2hlZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFt3b3JrZmxvd10gRmFpbGVkIHdhaXRpbmcgZm9yIGRlZmVycmVkIHJvdXRlIGJ1aWxkIGZvciAke2ZpbGVuYW1lfSwgdXNpbmcgc3R1YiBvdXRwdXRgLFxuICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBjb2RlOiBub3JtYWxpemVkU291cmNlLCBtYXA6IHNvdXJjZU1hcCB9O1xuICAgIH1cblxuICAgIC8vIERldGVjdCB3b3JrZmxvdyBwYXR0ZXJucyBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAgY29uc3QgcGF0dGVybnMgPSBhd2FpdCBkZXRlY3RQYXR0ZXJucyhzb3VyY2VGb3JUcmFuc2Zvcm0pO1xuICAgIC8vIEFsd2F5cyBub3RpZnkgZGlzY292ZXJ5IHRyYWNraW5nLCBldmVuIGZvciBgZmFsc2UvZmFsc2VgLCBzbyBmaWxlcyB0aGF0XG4gICAgLy8gcHJldmlvdXNseSBoYWQgd29ya2Zsb3cvc3RlcCB1c2FnZSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB0cmFja2VkIHNldHMuXG4gICAgY29uc3QgbmV4dFBhdHRlcm5TdGF0ZTogRGlzY292ZXJlZFBhdHRlcm5TdGF0ZSA9IHtcbiAgICAgIGhhc1dvcmtmbG93OiBwYXR0ZXJucy5oYXNVc2VXb3JrZmxvdyxcbiAgICAgIGhhc1N0ZXA6IHBhdHRlcm5zLmhhc1VzZVN0ZXAsXG4gICAgICBoYXNTZXJkZTogcGF0dGVybnMuaGFzU2VyZGUsXG4gICAgfTtcbiAgICBjb25zdCB7IHNob3VsZE5vdGlmeSB9ID0gdXBkYXRlRGlzY292ZXJlZFBhdHRlcm5TdGF0ZShcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbmV4dFBhdHRlcm5TdGF0ZVxuICAgICk7XG4gICAgaWYgKHNob3VsZE5vdGlmeSkge1xuICAgICAgYXdhaXQgbm90aWZ5U29ja2V0U2VydmVyKFxuICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgbmV4dFBhdHRlcm5TdGF0ZS5oYXNXb3JrZmxvdyxcbiAgICAgICAgbmV4dFBhdHRlcm5TdGF0ZS5oYXNTdGVwLFxuICAgICAgICBuZXh0UGF0dGVyblN0YXRlLmhhc1NlcmRlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGZpbGUgbmVlZHMgdHJhbnNmb3JtYXRpb24gYmFzZWQgb24gcGF0dGVybnMgYW5kIHBhdGhcbiAgICBpZiAoIShhd2FpdCBjaGVja1Nob3VsZFRyYW5zZm9ybShmaWxlbmFtZSwgcGF0dGVybnMpKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1R5cGVTY3JpcHQgPVxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy50cycpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLnRzeCcpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLm10cycpIHx8XG4gICAgICBmaWxlbmFtZS5lbmRzV2l0aCgnLmN0cycpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIGZpbGVuYW1lIGZvciBTV0MgcGx1Z2luXG4gICAgLy8gVGhlIFNXQyBwbHVnaW4gdXNlcyBmaWxlbmFtZSB0byBnZW5lcmF0ZSB3b3JrZmxvd0lkLCBzbyBpdCBtdXN0IGJlIHJlbGF0aXZlXG4gICAgY29uc3QgcmVsYXRpdmVGaWxlbmFtZSA9IGF3YWl0IGdldFJlbGF0aXZlRmlsZW5hbWVGb3JTd2MoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIHdvcmtpbmdEaXJcbiAgICApO1xuXG4gICAgLy8gR2V0IGRlY29yYXRvciBvcHRpb25zIGZyb20gdHNjb25maWcgKGNhY2hlZCBwZXIgd29ya2luZyBkaXJlY3RvcnkpXG4gICAgY29uc3QgeyBvcHRpb25zOiBkZWNvcmF0b3JPcHRpb25zLCBjb25maWdQYXRoIH0gPVxuICAgICAgYXdhaXQgZ2V0RGVjb3JhdG9yT3B0aW9ucyh3b3JraW5nRGlyKTtcbiAgICBpZiAoY29uZmlnUGF0aCkge1xuICAgICAgcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeSh0aGlzLCBjb25maWdQYXRoKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIG1vZHVsZSBzcGVjaWZpZXIgZm9yIHBhY2thZ2VzIChub2RlX21vZHVsZXMgb3Igd29ya3NwYWNlIHBhY2thZ2VzKVxuICAgIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IGF3YWl0IGdldE1vZHVsZVNwZWNpZmllcihmaWxlbmFtZSwgd29ya2luZ0Rpcik7XG4gICAgY29uc3QgbW9kZSA9ICdzdGVwJztcblxuICAgIC8vIFRyYW5zZm9ybSB3aXRoIFNXQ1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VGb3JUcmFuc2Zvcm0sIHtcbiAgICAgIGZpbGVuYW1lOiByZWxhdGl2ZUZpbGVuYW1lLFxuICAgICAganNjOiB7XG4gICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgIC4uLihpc1R5cGVTY3JpcHRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICAgICAgICAgIHRzeDogZmlsZW5hbWUuZW5kc1dpdGgoJy50c3gnKSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvcnMsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIHN5bnRheDogJ2VjbWFzY3JpcHQnLFxuICAgICAgICAgICAgICAgIGpzeDogZmlsZW5hbWUuZW5kc1dpdGgoJy5qc3gnKSxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvcnMsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6ICdlczIwMjInLFxuICAgICAgICBleHBlcmltZW50YWw6IHtcbiAgICAgICAgICBwbHVnaW5zOiBbW3N3Y1BsdWdpblBhdGgsIHsgbW9kZSwgbW9kdWxlU3BlY2lmaWVyIH1dXSxcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgIHJ1bnRpbWU6ICdwcmVzZXJ2ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsZWdhY3lEZWNvcmF0b3I6IGRlY29yYXRvck9wdGlvbnMubGVnYWN5RGVjb3JhdG9yLFxuICAgICAgICAgIGRlY29yYXRvck1ldGFkYXRhOiBkZWNvcmF0b3JPcHRpb25zLmRlY29yYXRvck1ldGFkYXRhLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICBpbnB1dFNvdXJjZU1hcDogc291cmNlTWFwLFxuICAgICAgc291cmNlTWFwczogdHJ1ZSxcbiAgICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIH0pO1xuXG4gICAgbGV0IHRyYW5zZm9ybWVkTWFwID0gc291cmNlTWFwO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0Lm1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRyYW5zZm9ybWVkTWFwID0gSlNPTi5wYXJzZShyZXN1bHQubWFwKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0cmFuc2Zvcm1lZE1hcCA9IHJlc3VsdC5tYXA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZXN1bHQubWFwKSB7XG4gICAgICB0cmFuc2Zvcm1lZE1hcCA9IHJlc3VsdC5tYXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LmNvZGUsIG1hcDogdHJhbnNmb3JtZWRNYXAgfTtcbiAgfTtcblxuICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHJ1bigpLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmNvZGUpO1xuICB9XG5cbiAgdm9pZCBydW4oKVxuICAgIC50aGVuKChyZXN1bHQpID0+IGNhbGxiYWNrKG51bGwsIHJlc3VsdC5jb2RlLCByZXN1bHQubWFwKSlcbiAgICAuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICBjYWxsYmFjayhlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuICAgIH0pO1xufVxuIl19
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXVDQSx3RkFVQztBQTBtQkQsaUNBcUpDO0FBaHpCRCxxQ0FBcUM7QUFDckMsK0NBQTRDO0FBQzVDLHVDQUFnRDtBQUNoRCx5Q0FBb0Q7QUFDcEQsb0NBQXNDO0FBQ3RDLHlEQUs0QjtBQU01Qix5RkFBeUY7QUFDekYsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFHbEMsQ0FBQztBQUNKLHlHQUF5RztBQUN6RyxJQUFJLG9CQUFvQixHQUErQyxJQUFJLENBQUM7QUFLNUUsSUFBSSw4QkFBOEIsR0FBb0MsSUFBSSxDQUFDO0FBTzNFLE1BQU0sZ0NBQWdDLEdBQUcsSUFBSSxHQUFHLEVBRzdDLENBQUM7QUFFSixTQUFnQixzQ0FBc0MsQ0FDcEQsbUJBQTRCLEVBQzVCLFlBQW9DO0lBRXBDLE9BQU8sQ0FDTCxtQkFBbUI7UUFDbkIsWUFBWSxDQUFDLFdBQVc7UUFDeEIsWUFBWSxDQUFDLE9BQU87UUFDcEIsWUFBWSxDQUFDLFFBQVEsQ0FDdEIsQ0FBQztBQUNKLENBQUM7QUFFRCwrREFBK0Q7QUFDL0QsSUFBSSxtQkFBbUIsR0FBa0MsSUFBSSxDQUFDO0FBQzlELElBQUksWUFBWSxHQUFrQixJQUFJLENBQUM7QUFDdkMsSUFBSSxlQUFlLEdBQWtCLElBQUksQ0FBQztBQU8xQzs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixhQUFzQixFQUN0QixXQUE4QjtJQUU5QixNQUFNLFNBQVMsR0FDYixhQUFhLFlBQVksS0FBSztRQUM5QixNQUFNLElBQUksYUFBYTtRQUN2QixPQUFRLGFBQW9DLENBQUMsSUFBSSxLQUFLLFFBQVE7UUFDNUQsQ0FBQyxDQUFHLGFBQWtDLENBQUMsSUFBZTtRQUN0RCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLE1BQU0sWUFBWSxHQUNoQixhQUFhLFlBQVksS0FBSztRQUM1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RSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFLENBQUM7SUFDcEQsQ0FBQyxDQUFDO0lBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxHQUFHLEVBQUU7U0FDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQsS0FBSyxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDeEIsUUFBUSxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgY29ubmVjdCwgdHlwZSBTb2NrZXQgfSBmcm9tICdub2RlOm5ldCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZWxhdGl2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtcbiAgcGFyc2VNZXNzYWdlLFxuICBTT0NLRVRfSU5GT19GSUxFTkFNRSxcbiAgdHlwZSBTb2NrZXRNZXNzYWdlLFxuICBzZXJpYWxpemVNZXNzYWdlLFxufSBmcm9tICcuL3NvY2tldC1zZXJ2ZXIuanMnO1xuXG50eXBlIERlY29yYXRvck9wdGlvbnNXaXRoQ29uZmlnUGF0aCA9XG4gIGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuRGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoO1xudHlwZSBXb3JrZmxvd1BhdHRlcm5NYXRjaCA9IGltcG9ydCgnQHdvcmtmbG93L2J1aWxkZXJzJykuV29ya2Zsb3dQYXR0ZXJuTWF0Y2g7XG5cbi8vIENhY2hlIGRlY29yYXRvciBvcHRpb25zIHBlciB3b3JraW5nIGRpcmVjdG9yeSB0byBhdm9pZCByZWFkaW5nIHRzY29uZmlnIGZvciBldmVyeSBmaWxlXG5jb25zdCBkZWNvcmF0b3JPcHRpb25zQ2FjaGUgPSBuZXcgTWFwPFxuICBzdHJpbmcsXG4gIFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPlxuPigpO1xuLy8gQ2FjaGUgZm9yIHNoYXJlZCB1dGlsaXRpZXMgZnJvbSBAd29ya2Zsb3cvYnVpbGRlcnMgKEVTTSBtb2R1bGUgbG9hZGVkIGR5bmFtaWNhbGx5IGluIENvbW1vbkpTIGNvbnRleHQpXG5sZXQgY2FjaGVkQnVpbGRlcnNNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0B3b3JrZmxvdy9idWlsZGVycycpIHwgbnVsbCA9IG51bGw7XG50eXBlIExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgc3djUGx1Z2luUGF0aDogc3RyaW5nO1xuICBmaWxlczogc3RyaW5nW107XG59O1xubGV0IGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llczogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHwgbnVsbCA9IG51bGw7XG5cbnR5cGUgRGlzY292ZXJlZFBhdHRlcm5TdGF0ZSA9IHtcbiAgaGFzV29ya2Zsb3c6IGJvb2xlYW47XG4gIGhhc1N0ZXA6IGJvb2xlYW47XG4gIGhhc1NlcmRlOiBib29sZWFuO1xufTtcbmNvbnN0IGRpc2NvdmVyZWRQYXR0ZXJuU3RhdGVCeUZpbGVQYXRoID0gbmV3IE1hcDxcbiAgc3RyaW5nLFxuICBEaXNjb3ZlcmVkUGF0dGVyblN0YXRlXG4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGROb3RpZnlTb2NrZXRGb3JEaXNjb3ZlcmVkUGF0dGVybihcbiAgcGF0dGVyblN0YXRlQ2hhbmdlZDogYm9vbGVhbixcbiAgcGF0dGVyblN0YXRlOiBEaXNjb3ZlcmVkUGF0dGVyblN0YXRlXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwYXR0ZXJuU3RhdGVDaGFuZ2VkIHx8XG4gICAgcGF0dGVyblN0YXRlLmhhc1dvcmtmbG93IHx8XG4gICAgcGF0dGVyblN0YXRlLmhhc1N0ZXAgfHxcbiAgICBwYXR0ZXJuU3RhdGUuaGFzU2VyZGVcbiAgKTtcbn1cblxuLy8gQ2FjaGUgc29ja2V0IGNvbm5lY3Rpb24gdG8gYXZvaWQgcmVjb25uZWN0aW5nIG9uIGV2ZXJ5IGZpbGUuXG5sZXQgc29ja2V0Q2xpZW50UHJvbWlzZTogUHJvbWlzZTxTb2NrZXQgfCBudWxsPiB8IG51bGwgPSBudWxsO1xubGV0IHNvY2tldENsaWVudDogU29ja2V0IHwgbnVsbCA9IG51bGw7XG5sZXQgc29ja2V0Q2xpZW50S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxudHlwZSBTb2NrZXRDcmVkZW50aWFscyA9IHtcbiAgcG9ydDogbnVtYmVyO1xuICBhdXRoVG9rZW46IHN0cmluZztcbn07XG5cbi8qKlxuICogV3JhcCBhIFRDUCBjb25uZWN0IGZhaWx1cmUgd2l0aCBjb250ZXh0IGFib3V0IHdoZXJlIHRoZSBjb25uZWN0aW9uIHdhc1xuICogYXR0ZW1wdGVkLCB3aGVyZSB0aGUgY3JlZGVudGlhbHMgY2FtZSBmcm9tLCBhbmQgd2hpY2ggc291cmNlIGZpbGUgd2FzXG4gKiBiZWluZyBwcm9jZXNzZWQgd2hlbiBpdCBmYWlsZWQuIEVDT05OUkVGVVNFRCBpcyB0aGUgY29tbW9uIGNhc2UgaGVyZSwgYW5kXG4gKiB0aGUgbWVzc2FnZSBwb2ludHMgdGhlIHVzZXIgYXQgdGhlIG1vc3QgbGlrZWx5IHJvb3QgY2F1c2UgKHN0YWxlXG4gKiBzb2NrZXQtaW5mbyBmaWxlKS5cbiAqL1xuZnVuY3Rpb24gYW5ub3RhdGVDb25uZWN0aW9uRXJyb3IoXG4gIG9yaWdpbmFsRXJyb3I6IHVua25vd24sXG4gIGNyZWRlbnRpYWxzOiBTb2NrZXRDcmVkZW50aWFsc1xuKTogRXJyb3Ige1xuICBjb25zdCBlcnJvckNvZGUgPVxuICAgIG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICdjb2RlJyBpbiBvcmlnaW5hbEVycm9yICYmXG4gICAgdHlwZW9mIChvcmlnaW5hbEVycm9yIGFzIHsgY29kZT86IHVua25vd24gfSkuY29kZSA9PT0gJ3N0cmluZydcbiAgICAgID8gKChvcmlnaW5hbEVycm9yIGFzIHsgY29kZTogc3RyaW5nIH0pLmNvZGUgYXMgc3RyaW5nKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgb3JpZ2luYWxFcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICA/IG9yaWdpbmFsRXJyb3IubWVzc2FnZVxuICAgICAgOiBTdHJpbmcob3JpZ2luYWxFcnJvcik7XG5cbiAgY29uc3QgbGluZXMgPSBbXG4gICAgYFdvcmtmbG93IGRpc2NvdmVyeSBzb2NrZXQgY29ubmVjdCBmYWlsZWQ6ICR7ZXJyb3JDb2RlID8/IGVycm9yTWVzc2FnZX0gKDEyNy4wLjAuMToke2NyZWRlbnRpYWxzLnBvcnR9KWAsXG4gIF07XG5cbiAgY29uc3QgYW5ub3RhdGVkID0gbmV3IEVycm9yKGxpbmVzLmpvaW4oJ1xcbicpKTtcbiAgaWYgKG9yaWdpbmFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIChhbm5vdGF0ZWQgYXMgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2UgPSBvcmlnaW5hbEVycm9yO1xuICB9XG4gIHJldHVybiBhbm5vdGF0ZWQ7XG59XG5cbmNvbnN0IFJPVVRFX1NUVUJfRklMRV9NQVJLRVIgPSAnV09SS0ZMT1dfUk9VVEVfU1RVQl9GSUxFJztcbmNvbnN0IFJPVVRFX1NUVUJfQlVJTERfV0FJVF9USU1FT1VUX01TID0gMTIwXzAwMDtcbmxldCBwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2U6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcblxuZnVuY3Rpb24gcmVnaXN0ZXJGaWxlRGVwZW5kZW5jeShcbiAgbG9hZGVyQ29udGV4dDogV29ya2Zsb3dMb2FkZXJDb250ZXh0LFxuICBkZXBlbmRlbmN5UGF0aDogc3RyaW5nXG4pOiB2b2lkIHtcbiAgbG9hZGVyQ29udGV4dC5hZGREZXBlbmRlbmN5Py4oZGVwZW5kZW5jeVBhdGgpO1xuICBsb2FkZXJDb250ZXh0LmFkZEJ1aWxkRGVwZW5kZW5jeT8uKGRlcGVuZGVuY3lQYXRoKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGlzY292ZXJlZFBhdHRlcm5TdGF0ZShcbiAgZmlsZVBhdGg6IHN0cmluZyxcbiAgbmV4dFN0YXRlOiBEaXNjb3ZlcmVkUGF0dGVyblN0YXRlXG4pOiB7IHNob3VsZE5vdGlmeTogYm9vbGVhbjsgcHJldmlvdXNTdGF0ZT86IERpc2NvdmVyZWRQYXR0ZXJuU3RhdGUgfSB7XG4gIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBkaXNjb3ZlcmVkUGF0dGVyblN0YXRlQnlGaWxlUGF0aC5nZXQoZmlsZVBhdGgpO1xuICBjb25zdCBoYXNBbnlQYXR0ZXJuID1cbiAgICBuZXh0U3RhdGUuaGFzV29ya2Zsb3cgfHwgbmV4dFN0YXRlLmhhc1N0ZXAgfHwgbmV4dFN0YXRlLmhhc1NlcmRlO1xuXG4gIGlmICghaGFzQW55UGF0dGVybikge1xuICAgIGlmICghcHJldmlvdXNTdGF0ZSkge1xuICAgICAgcmV0dXJuIHsgc2hvdWxkTm90aWZ5OiBmYWxzZSB9O1xuICAgIH1cbiAgICBkaXNjb3ZlcmVkUGF0dGVyblN0YXRlQnlGaWxlUGF0aC5kZWxldGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiB7IHNob3VsZE5vdGlmeTogdHJ1ZSwgcHJldmlvdXNTdGF0ZSB9O1xuICB9XG5cbiAgaWYgKFxuICAgIHByZXZpb3VzU3RhdGUgJiZcbiAgICBwcmV2aW91c1N0YXRlLmhhc1dvcmtmbG93ID09PSBuZXh0U3RhdGUuaGFzV29ya2Zsb3cgJiZcbiAgICBwcmV2aW91c1N0YXRlLmhhc1N0ZXAgPT09IG5leHRTdGF0ZS5oYXNTdGVwICYmXG4gICAgcHJldmlvdXNTdGF0ZS5oYXNTZXJkZSA9PT0gbmV4dFN0YXRlLmhhc1NlcmRlXG4gICkge1xuICAgIHJldHVybiB7IHNob3VsZE5vdGlmeTogZmFsc2UsIHByZXZpb3VzU3RhdGUgfTtcbiAgfVxuXG4gIGRpc2NvdmVyZWRQYXR0ZXJuU3RhdGVCeUZpbGVQYXRoLnNldChmaWxlUGF0aCwgbmV4dFN0YXRlKTtcbiAgcmV0dXJuIHsgc2hvdWxkTm90aWZ5OiB0cnVlLCBwcmV2aW91c1N0YXRlIH07XG59XG5cbmZ1bmN0aW9uIGFkZElmRXhpc3RzKGZpbGVzOiBTZXQ8c3RyaW5nPiwgZGVwZW5kZW5jeVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZXhpc3RzU3luYyhkZXBlbmRlbmN5UGF0aCkpIHtcbiAgICBmaWxlcy5hZGQoZGVwZW5kZW5jeVBhdGgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXMoKTogTG9hZGVyU3RhdGljRGVwZW5kZW5jaWVzIHtcbiAgaWYgKGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcykge1xuICAgIHJldHVybiBjYWNoZWRMb2FkZXJTdGF0aWNEZXBlbmRlbmNpZXM7XG4gIH1cblxuICBjb25zdCBzd2NQbHVnaW5QYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvc3djLXBsdWdpbicpO1xuICBjb25zdCBzd2NQbHVnaW5CdWlsZEhhc2hQYXRoID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICdAd29ya2Zsb3cvc3djLXBsdWdpbi9idWlsZC1oYXNoLmpzb24nXG4gICk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYXRoID0gcmVxdWlyZS5yZXNvbHZlKCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcblxuICAvLyBEZXJpdmUgcGFja2FnZS5qc29uIHBhdGhzIGZyb20gcmVzb2x2ZWQgZW50cnlwb2ludHMgdG8gYXZvaWRcbiAgLy8gVHVyYm9wYWNrIGxvYWRlci1ldmFsIGZhaWx1cmVzIGFyb3VuZCAuLi9wYWNrYWdlLmpzb24gcmVzb2x1dGlvbi5cbiAgY29uc3Qgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoID0gam9pbihkaXJuYW1lKHN3Y1BsdWdpblBhdGgpLCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGggPSBqb2luKFxuICAgIGRpcm5hbWUod29ya2Zsb3dCdWlsZGVyc1BhdGgpLFxuICAgICcuLi9wYWNrYWdlLmpzb24nXG4gICk7XG5cbiAgY29uc3QgZmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgIF9fZmlsZW5hbWUsXG4gICAgcmVxdWlyZS5yZXNvbHZlKCcuL3NvY2tldC1zZXJ2ZXInKSxcbiAgICBzd2NQbHVnaW5QYXRoLFxuICAgIHN3Y1BsdWdpbkJ1aWxkSGFzaFBhdGgsXG4gICAgd29ya2Zsb3dCdWlsZGVyc1BhdGgsXG4gIF0pO1xuICBhZGRJZkV4aXN0cyhmaWxlcywgc3djUGx1Z2luUGFja2FnZUpzb25QYXRoKTtcbiAgYWRkSWZFeGlzdHMoZmlsZXMsIHdvcmtmbG93QnVpbGRlcnNQYWNrYWdlSnNvblBhdGgpO1xuXG4gIGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcyA9IHtcbiAgICBzd2NQbHVnaW5QYXRoLFxuICAgIGZpbGVzOiBBcnJheS5mcm9tKGZpbGVzKSxcbiAgfTtcbiAgcmV0dXJuIGNhY2hlZExvYWRlclN0YXRpY0RlcGVuZGVuY2llcztcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMoXG4gIGxvYWRlckNvbnRleHQ6IFdvcmtmbG93TG9hZGVyQ29udGV4dFxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdGljRGVwZW5kZW5jaWVzID0gcmVzb2x2ZUxvYWRlclN0YXRpY0RlcGVuZGVuY2llcygpO1xuICBmb3IgKGNvbnN0IGRlcGVuZGVuY3lQYXRoIG9mIHN0YXRpY0RlcGVuZGVuY2llcy5maWxlcykge1xuICAgIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3kobG9hZGVyQ29udGV4dCwgZGVwZW5kZW5jeVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRpY0RlcGVuZGVuY2llcy5zd2NQbHVnaW5QYXRoO1xufVxuXG5mdW5jdGlvbiByZXNldFNvY2tldENsaWVudChjYWNoZWRTb2NrZXQ/OiBTb2NrZXQpOiB2b2lkIHtcbiAgaWYgKGNhY2hlZFNvY2tldCAmJiBzb2NrZXRDbGllbnQgJiYgc29ja2V0Q2xpZW50ICE9PSBjYWNoZWRTb2NrZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzb2NrZXRDbGllbnRQcm9taXNlID0gbnVsbDtcbiAgc29ja2V0Q2xpZW50ID0gbnVsbDtcbiAgc29ja2V0Q2xpZW50S2V5ID0gbnVsbDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVTb2NrZXRNZXNzYWdlKFxuICBzb2NrZXQ6IFNvY2tldCxcbiAgbWVzc2FnZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNvY2tldC53cml0ZShtZXNzYWdlLCAoZXJyb3I/OiBFcnJvciB8IG51bGwpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvRmlsZVBhdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGNvbmZpZ3VyZWRQYXRoID0gcHJvY2Vzcy5lbnYuV09SS0ZMT1dfU09DS0VUX0lORk9fUEFUSDtcbiAgaWYgKGNvbmZpZ3VyZWRQYXRoKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3VyZWRQYXRoO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgZm9yIHdvcmtlciBwcm9jZXNzZXMgdGhhdCBkb24ndCBpbmhlcml0IGR5bmFtaWMgZW52IHVwZGF0ZXNcbiAgLy8gZnJvbSB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgdGhlIHNvY2tldCBzZXJ2ZXIuXG4gIGNvbnN0IGRpc3REaXIgPSBwcm9jZXNzLmVudi5XT1JLRkxPV19ORVhUX0RJU1RfRElSIHx8ICcubmV4dCc7XG4gIGNvbnN0IGN3ZEZhbGxiYWNrUGF0aCA9IGpvaW4ocHJvY2Vzcy5jd2QoKSwgZGlzdERpciwgU09DS0VUX0lORk9fRklMRU5BTUUpO1xuICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2Nlc3MuZW52LldPUktGTE9XX1BST0pFQ1RfUk9PVDtcbiAgaWYgKHByb2plY3RSb290KSB7XG4gICAgY29uc3QgcHJvamVjdFJvb3RGYWxsYmFja1BhdGggPSBqb2luKFxuICAgICAgcHJvamVjdFJvb3QsXG4gICAgICBkaXN0RGlyLFxuICAgICAgU09DS0VUX0lORk9fRklMRU5BTUVcbiAgICApO1xuICAgIGlmIChleGlzdHNTeW5jKHByb2plY3RSb290RmFsbGJhY2tQYXRoKSkge1xuICAgICAgcmV0dXJuIHByb2plY3RSb290RmFsbGJhY2tQYXRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY3dkRmFsbGJhY2tQYXRoO1xufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRDcmVkZW50aWFsc0Zyb21FbnYoKTogU29ja2V0Q3JlZGVudGlhbHMgfCBudWxsIHtcbiAgY29uc3Qgc29ja2V0UG9ydCA9IHByb2Nlc3MuZW52LldPUktGTE9XX1NPQ0tFVF9QT1JUO1xuICBjb25zdCBhdXRoVG9rZW4gPSBwcm9jZXNzLmVudi5XT1JLRkxPV19TT0NLRVRfQVVUSDtcbiAgaWYgKCFzb2NrZXRQb3J0IHx8ICFhdXRoVG9rZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBvcnQgPSBOdW1iZXIucGFyc2VJbnQoc29ja2V0UG9ydCwgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKHBvcnQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHsgcG9ydCwgYXV0aFRva2VuIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldENyZWRlbnRpYWxzRnJvbUZpbGUoKTogUHJvbWlzZTxTb2NrZXRDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgY29uc3Qgc29ja2V0SW5mb0ZpbGVQYXRoID0gZ2V0U29ja2V0SW5mb0ZpbGVQYXRoKCk7XG4gIGlmICghc29ja2V0SW5mb0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFleGlzdHNTeW5jKHNvY2tldEluZm9GaWxlUGF0aCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUoc29ja2V0SW5mb0ZpbGVQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KSBhcyB7XG4gICAgICBwb3J0PzogdW5rbm93bjtcbiAgICAgIGF1dGhUb2tlbj86IHVua25vd247XG4gICAgfTtcbiAgICBjb25zdCBhdXRoVG9rZW4gPVxuICAgICAgdHlwZW9mIHBhcnNlZC5hdXRoVG9rZW4gPT09ICdzdHJpbmcnID8gcGFyc2VkLmF1dGhUb2tlbiA6IG51bGw7XG4gICAgY29uc3QgbnVtZXJpY1BvcnQgPVxuICAgICAgdHlwZW9mIHBhcnNlZC5wb3J0ID09PSAnbnVtYmVyJ1xuICAgICAgICA/IHBhcnNlZC5wb3J0XG4gICAgICAgIDogTnVtYmVyLnBhcnNlSW50KFN0cmluZyhwYXJzZWQucG9ydCksIDEwKTtcblxuICAgIGlmICghYXV0aFRva2VuIHx8IE51bWJlci5pc05hTihudW1lcmljUG9ydCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcG9ydDogbnVtZXJpY1BvcnQsXG4gICAgICBhdXRoVG9rZW4sXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U29ja2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxTb2NrZXRDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgY29uc3QgZW52Q3JlZGVudGlhbHMgPSBnZXRTb2NrZXRDcmVkZW50aWFsc0Zyb21FbnYoKTtcbiAgaWYgKGVudkNyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIGVudkNyZWRlbnRpYWxzO1xuICB9XG4gIHJldHVybiBhd2FpdCBnZXRTb2NrZXRDcmVkZW50aWFsc0Zyb21GaWxlKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNvY2tldENsaWVudCgpOiBQcm9taXNlPFNvY2tldCB8IG51bGw+IHtcbiAgY29uc3Qgc29ja2V0Q3JlZGVudGlhbHMgPSBhd2FpdCBnZXRTb2NrZXRDcmVkZW50aWFscygpO1xuICBpZiAoIXNvY2tldENyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoc29ja2V0Q2xpZW50Py5kZXN0cm95ZWQpIHtcbiAgICByZXNldFNvY2tldENsaWVudChzb2NrZXRDbGllbnQpO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFNvY2tldEtleSA9IGAke3NvY2tldENyZWRlbnRpYWxzLnBvcnR9OiR7c29ja2V0Q3JlZGVudGlhbHMuYXV0aFRva2VufWA7XG4gIGlmIChzb2NrZXRDbGllbnRLZXkgJiYgc29ja2V0Q2xpZW50S2V5ICE9PSBjdXJyZW50U29ja2V0S2V5KSB7XG4gICAgaWYgKHNvY2tldENsaWVudCkge1xuICAgICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0Q2xpZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzZXRTb2NrZXRDbGllbnQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXNvY2tldENsaWVudFByb21pc2UpIHtcbiAgICBzb2NrZXRDbGllbnRQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNvY2tldCA9IGNvbm5lY3Qoe1xuICAgICAgICAgIHBvcnQ6IHNvY2tldENyZWRlbnRpYWxzLnBvcnQsXG4gICAgICAgICAgaG9zdDogJzEyNy4wLjAuMScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFdhaXQgZm9yIGNvbm5lY3Rpb25cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgIHNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgICAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHJlamVjdChhbm5vdGF0ZUNvbm5lY3Rpb25FcnJvcihlcnJvciwgc29ja2V0Q3JlZGVudGlhbHMpKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICAgICAgICByZWplY3QoXG4gICAgICAgICAgICAgIGFubm90YXRlQ29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIG5ldyBFcnJvcignU29ja2V0IGNvbm5lY3Rpb24gdGltZW91dCcpLFxuICAgICAgICAgICAgICAgIHNvY2tldENyZWRlbnRpYWxzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHNvY2tldC5vZmYoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgICAgICAgc29ja2V0Lm9mZignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc29ja2V0Lm9uKCdjb25uZWN0Jywgb25Db25uZWN0KTtcbiAgICAgICAgICBzb2NrZXQub24oJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc29ja2V0Q2xpZW50ID0gc29ja2V0O1xuICAgICAgICBzb2NrZXRDbGllbnRLZXkgPSBjdXJyZW50U29ja2V0S2V5O1xuICAgICAgICByZXR1cm4gc29ja2V0O1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVzZXRTb2NrZXRDbGllbnQoKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuICByZXR1cm4gc29ja2V0Q2xpZW50UHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbm90aWZ5U29ja2V0U2VydmVyKFxuICBmaWxlbmFtZTogc3RyaW5nLFxuICBoYXNXb3JrZmxvdzogYm9vbGVhbixcbiAgaGFzU3RlcDogYm9vbGVhbixcbiAgaGFzU2VyZGU6IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb2NrZXRDcmVkZW50aWFscyA9IGF3YWl0IGdldFNvY2tldENyZWRlbnRpYWxzKCk7XG4gIGlmICghc29ja2V0Q3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBhd2FpdCBnZXRTb2NrZXRDbGllbnQoKTtcbiAgaWYgKCFzb2NrZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFyaWFudDogbWlzc2luZyB3b3JrZmxvdyBzb2NrZXQgY29ubmVjdGlvbicpO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZTogU29ja2V0TWVzc2FnZSA9IHtcbiAgICB0eXBlOiAnZmlsZS1kaXNjb3ZlcmVkJyxcbiAgICBmaWxlUGF0aDogZmlsZW5hbWUsXG4gICAgaGFzV29ya2Zsb3csXG4gICAgaGFzU3RlcCxcbiAgICBoYXNTZXJkZSxcbiAgfTtcbiAgY29uc3Qgc2VyaWFsaXplZE1lc3NhZ2UgPSBzZXJpYWxpemVNZXNzYWdlKFxuICAgIG1lc3NhZ2UsXG4gICAgc29ja2V0Q3JlZGVudGlhbHMuYXV0aFRva2VuXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZVNvY2tldE1lc3NhZ2Uoc29ja2V0LCBzZXJpYWxpemVkTWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzZXRTb2NrZXRDbGllbnQoc29ja2V0KTtcbiAgICBjb25zdCByZWNvbm5lY3RlZFNvY2tldCA9IGF3YWl0IGdldFNvY2tldENsaWVudCgpO1xuICAgIGlmICghcmVjb25uZWN0ZWRTb2NrZXQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBhd2FpdCB3cml0ZVNvY2tldE1lc3NhZ2UocmVjb25uZWN0ZWRTb2NrZXQsIHNlcmlhbGl6ZWRNZXNzYWdlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1dvcmtmbG93Um91dGVTdHViU291cmNlKHNvdXJjZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzb3VyY2UuaW5jbHVkZXMoUk9VVEVfU1RVQl9GSUxFX01BUktFUik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVNvY2tldENvbm5lY3Rpb24oXG4gIHNvY2tldENyZWRlbnRpYWxzOiBTb2NrZXRDcmVkZW50aWFscyxcbiAgdGltZW91dE1zID0gMV8wMDBcbik6IFByb21pc2U8U29ja2V0PiB7XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxTb2NrZXQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzb2NrZXQgPSBjb25uZWN0KHtcbiAgICAgIHBvcnQ6IHNvY2tldENyZWRlbnRpYWxzLnBvcnQsXG4gICAgICBob3N0OiAnMTI3LjAuMC4xJyxcbiAgICB9KTtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgICAgcmVqZWN0KFxuICAgICAgICBhbm5vdGF0ZUNvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICBuZXcgRXJyb3IoJ1NvY2tldCBjb25uZWN0aW9uIHRpbWVvdXQnKSxcbiAgICAgICAgICBzb2NrZXRDcmVkZW50aWFsc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIHRpbWVvdXRNcyk7XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHNvY2tldC5vZmYoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpO1xuICAgICAgc29ja2V0Lm9mZignZXJyb3InLCBvbkVycm9yKTtcbiAgICB9O1xuICAgIGNvbnN0IG9uQ29ubmVjdCA9ICgpID0+IHtcbiAgICAgIHNvY2tldC5zZXROb0RlbGF5KHRydWUpO1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVzb2x2ZShzb2NrZXQpO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICByZWplY3QoYW5ub3RhdGVDb25uZWN0aW9uRXJyb3IoZXJyb3IsIHNvY2tldENyZWRlbnRpYWxzKSk7XG4gICAgfTtcblxuICAgIHNvY2tldC5vbignY29ubmVjdCcsIG9uQ29ubmVjdCk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRlZmVycmVkQnVpbGRDb21wbGV0ZShcbiAgc29ja2V0OiBTb2NrZXQsXG4gIGF1dGhUb2tlbjogc3RyaW5nLFxuICB0aW1lb3V0TXMgPSBST1VURV9TVFVCX0JVSUxEX1dBSVRfVElNRU9VVF9NU1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgYnVmZmVyID0gJyc7XG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBkZWZlcnJlZCByb3V0ZSBidWlsZCBjb21wbGV0aW9uJylcbiAgICAgICk7XG4gICAgfSwgdGltZW91dE1zKTtcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgc29ja2V0Lm9mZignZGF0YScsIG9uRGF0YSk7XG4gICAgICBzb2NrZXQub2ZmKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgICAgc29ja2V0Lm9mZignY2xvc2UnLCBvbkNsb3NlKTtcbiAgICAgIHNvY2tldC5vZmYoJ2VuZCcsIG9uQ2xvc2UpO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfTtcbiAgICBjb25zdCBvbkNsb3NlID0gKCkgPT4ge1xuICAgICAgY2xlYW51cCgpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcignU29ja2V0IGNsb3NlZCBiZWZvcmUgZGVmZXJyZWQgcm91dGUgYnVpbGQgY29tcGxldGVkJykpO1xuICAgIH07XG4gICAgY29uc3Qgb25EYXRhID0gKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgbGV0IG5ld2xpbmVJbmRleCA9IGJ1ZmZlci5pbmRleE9mKCdcXG4nKTtcbiAgICAgIHdoaWxlIChuZXdsaW5lSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBidWZmZXIuc2xpY2UoMCwgbmV3bGluZUluZGV4KTtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKG5ld2xpbmVJbmRleCArIDEpO1xuICAgICAgICBuZXdsaW5lSW5kZXggPSBidWZmZXIuaW5kZXhPZignXFxuJyk7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHBhcnNlTWVzc2FnZShsaW5lLCBhdXRoVG9rZW4pO1xuICAgICAgICBpZiAobWVzc2FnZT8udHlwZSA9PT0gJ2J1aWxkLWNvbXBsZXRlJykge1xuICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNvY2tldC5vbignZGF0YScsIG9uRGF0YSk7XG4gICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIHNvY2tldC5vbignY2xvc2UnLCBvbkNsb3NlKTtcbiAgICBzb2NrZXQub24oJ2VuZCcsIG9uQ2xvc2UpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJpZ2dlckRlZmVycmVkUm91dGVTdHViQnVpbGRBbmRXYWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzb2NrZXRDcmVkZW50aWFscyA9IGF3YWl0IGdldFNvY2tldENyZWRlbnRpYWxzKCk7XG4gIGlmICghc29ja2V0Q3JlZGVudGlhbHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc29ja2V0ID0gYXdhaXQgY3JlYXRlU29ja2V0Q29ubmVjdGlvbihzb2NrZXRDcmVkZW50aWFscyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgd3JpdGVTb2NrZXRNZXNzYWdlKFxuICAgICAgc29ja2V0LFxuICAgICAgc2VyaWFsaXplTWVzc2FnZSh7IHR5cGU6ICd0cmlnZ2VyLWJ1aWxkJyB9LCBzb2NrZXRDcmVkZW50aWFscy5hdXRoVG9rZW4pXG4gICAgKTtcbiAgICBhd2FpdCB3YWl0Rm9yRGVmZXJyZWRCdWlsZENvbXBsZXRlKHNvY2tldCwgc29ja2V0Q3JlZGVudGlhbHMuYXV0aFRva2VuKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXQuZGVzdHJveSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURlZmVycmVkUm91dGVTdHViQnVpbGRBbmRXYWl0KCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAocGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlKSB7XG4gICAgcmV0dXJuIHBlbmRpbmdEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkUHJvbWlzZTtcbiAgfVxuICBjb25zdCBwZW5kaW5nUHJvbWlzZSA9IHRyaWdnZXJEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkQW5kV2FpdCgpO1xuICBwZW5kaW5nRGVmZXJyZWRSb3V0ZVN0dWJCdWlsZFByb21pc2UgPSBwZW5kaW5nUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICBpZiAocGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlID09PSBwZW5kaW5nUHJvbWlzZSkge1xuICAgICAgcGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcGVuZGluZ0RlZmVycmVkUm91dGVTdHViQnVpbGRQcm9taXNlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRCdWlsZGVyc01vZHVsZSgpOiBQcm9taXNlPFxuICB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKVxuPiB7XG4gIGlmIChjYWNoZWRCdWlsZGVyc01vZHVsZSkge1xuICAgIHJldHVybiBjYWNoZWRCdWlsZGVyc01vZHVsZTtcbiAgfVxuICAvLyBEeW5hbWljIGltcG9ydCB0byBoYW5kbGUgRVNNIG1vZHVsZSBmcm9tIENvbW1vbkpTIGNvbnRleHRcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc2VjdXJpdHkvbm9HbG9iYWxFdmFsOiBOZWVkIHRvIHVzZSBldmFsIGhlcmUgdG8gYXZvaWQgVHlwZVNjcmlwdCBmcm9tIHRyYW5zcGlsaW5nIHRoZSBpbXBvcnQgc3RhdGVtZW50IGludG8gYHJlcXVpcmUoKWBcbiAgY2FjaGVkQnVpbGRlcnNNb2R1bGUgPSAoYXdhaXQgZXZhbChcbiAgICAnaW1wb3J0KFwiQHdvcmtmbG93L2J1aWxkZXJzXCIpJ1xuICApKSBhcyB0eXBlb2YgaW1wb3J0KCdAd29ya2Zsb3cvYnVpbGRlcnMnKTtcbiAgcmV0dXJuIGNhY2hlZEJ1aWxkZXJzTW9kdWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREZWNvcmF0b3JPcHRpb25zKFxuICB3b3JraW5nRGlyOiBzdHJpbmdcbik6IFByb21pc2U8RGVjb3JhdG9yT3B0aW9uc1dpdGhDb25maWdQYXRoPiB7XG4gIGNvbnN0IGNhY2hlZCA9IGRlY29yYXRvck9wdGlvbnNDYWNoZS5nZXQod29ya2luZ0Rpcik7XG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3QgcHJvbWlzZSA9IChhc3luYyAoKTogUHJvbWlzZTxEZWNvcmF0b3JPcHRpb25zV2l0aENvbmZpZ1BhdGg+ID0+IHtcbiAgICBjb25zdCB7IGdldERlY29yYXRvck9wdGlvbnNGb3JEaXJlY3RvcnlXaXRoQ29uZmlnUGF0aCB9ID1cbiAgICAgIGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gICAgcmV0dXJuIGdldERlY29yYXRvck9wdGlvbnNGb3JEaXJlY3RvcnlXaXRoQ29uZmlnUGF0aCh3b3JraW5nRGlyKTtcbiAgfSkoKTtcblxuICBkZWNvcmF0b3JPcHRpb25zQ2FjaGUuc2V0KHdvcmtpbmdEaXIsIHByb21pc2UpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0UGF0dGVybnMoc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPFdvcmtmbG93UGF0dGVybk1hdGNoPiB7XG4gIGNvbnN0IHsgZGV0ZWN0V29ya2Zsb3dQYXR0ZXJucyB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIGRldGVjdFdvcmtmbG93UGF0dGVybnMoc291cmNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tHZW5lcmF0ZWRGaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgeyBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlKGZpbGVQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hlY2tTaG91bGRUcmFuc2Zvcm0oXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHBhdHRlcm5zOiBXb3JrZmxvd1BhdHRlcm5NYXRjaFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHsgc2hvdWxkVHJhbnNmb3JtRmlsZSB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHNob3VsZFRyYW5zZm9ybUZpbGUoZmlsZVBhdGgsIHBhdHRlcm5zKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBwcm9qZWN0Um9vdDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IHJlc29sdmVNb2R1bGVTcGVjaWZpZXIgfSA9IGF3YWl0IGdldEJ1aWxkZXJzTW9kdWxlKCk7XG4gIHJldHVybiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkubW9kdWxlU3BlY2lmaWVyO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV29ya2Zsb3dBbGlhc1BhdGgoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHdvcmtpbmdEaXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCB9ID0gYXdhaXQgZ2V0QnVpbGRlcnNNb2R1bGUoKTtcbiAgcmV0dXJuIHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGZpbGVQYXRoLCB3b3JraW5nRGlyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVGaWxlbmFtZUZvclN3YyhcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgd29ya2luZ0Rpcjogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHdvcmtpbmdEaXJcbiAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRGaWxlcGF0aCA9IGZpbGVuYW1lLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAvLyBXaW5kb3dzIGZpeDogVXNlIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbiB0byB3b3JrIGFyb3VuZCBkcml2ZSBsZXR0ZXIgY2FzaW5nIGlzc3Vlc1xuICBjb25zdCBsb3dlcldkID0gbm9ybWFsaXplZFdvcmtpbmdEaXIudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbG93ZXJQYXRoID0gbm9ybWFsaXplZEZpbGVwYXRoLnRvTG93ZXJDYXNlKCk7XG5cbiAgbGV0IHJlbGF0aXZlRmlsZW5hbWU6IHN0cmluZztcbiAgaWYgKGxvd2VyUGF0aC5zdGFydHNXaXRoKGAke2xvd2VyV2R9L2ApKSB7XG4gICAgLy8gRmlsZSBpcyB1bmRlciB3b3JraW5nIGRpcmVjdG9yeSAtIG1hbnVhbGx5IGNhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoXG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IG5vcm1hbGl6ZWRGaWxlcGF0aC5zdWJzdHJpbmcoXG4gICAgICBub3JtYWxpemVkV29ya2luZ0Rpci5sZW5ndGggKyAxXG4gICAgKTtcbiAgfSBlbHNlIGlmIChsb3dlclBhdGggPT09IGxvd2VyV2QpIHtcbiAgICAvLyBGaWxlIElTIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAoc2hvdWxkbid0IGhhcHBlbilcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gJy4nO1xuICB9IGVsc2Uge1xuICAgIC8vIFVzZSByZWxhdGl2ZSgpIGZvciBmaWxlcyBvdXRzaWRlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgcmVsYXRpdmVGaWxlbmFtZSA9IHJlbGF0aXZlKHdvcmtpbmdEaXIsIGZpbGVuYW1lKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICBpZiAocmVsYXRpdmVGaWxlbmFtZS5zdGFydHNXaXRoKCcuLi8nKSkge1xuICAgICAgY29uc3QgYWxpYXNlZFJlbGF0aXZlUGF0aCA9IGF3YWl0IHJlc29sdmVXb3JrZmxvd0FsaWFzUGF0aChcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIHdvcmtpbmdEaXJcbiAgICAgICk7XG4gICAgICBpZiAoYWxpYXNlZFJlbGF0aXZlUGF0aCkge1xuICAgICAgICByZWxhdGl2ZUZpbGVuYW1lID0gYWxpYXNlZFJlbGF0aXZlUGF0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbGF0aXZlRmlsZW5hbWUgPSByZWxhdGl2ZUZpbGVuYW1lXG4gICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSAnLi4nKVxuICAgICAgICAgIC5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmluYWwgc2FmZXR5IGNoZWNrIC0gZW5zdXJlIHdlIG5ldmVyIHBhc3MgYW4gYWJzb2x1dGUgcGF0aCB0byBTV0NcbiAgaWYgKHJlbGF0aXZlRmlsZW5hbWUuaW5jbHVkZXMoJzonKSB8fCByZWxhdGl2ZUZpbGVuYW1lLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHJhcmVseSBoYXBwZW4sIGJ1dCB1c2UgZmlsZW5hbWUgc3BsaXQgYXMgbGFzdCByZXNvcnRcbiAgICByZWxhdGl2ZUZpbGVuYW1lID0gbm9ybWFsaXplZEZpbGVwYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ3Vua25vd24udHMnO1xuICB9XG5cbiAgcmV0dXJuIHJlbGF0aXZlRmlsZW5hbWU7XG59XG5cbi8vIFRoaXMgbG9hZGVyIGFwcGxpZXMgdGhlIFwidXNlIHdvcmtmbG93XCIvXCJ1c2Ugc3RlcFwiIHRyYW5zZm9ybS5cbi8vIEFsbCBmaWxlcyB1c2Ugc3RlcCBtb2RlOyB0aGUgU1dDIHBsdWdpbiBkZWNpZGVzIHBlci1mdW5jdGlvbiB3aGV0aGVyXG4vLyB0byBlbWl0IHdvcmtmbG93IG9yIHN0ZXAgYmluZGluZ3MgYmFzZWQgb24gdGhlIHNvdXJjZSdzIGRpcmVjdGl2ZXMuXG50eXBlIFdvcmtmbG93TG9hZGVyQ29udGV4dCA9IHtcbiAgcmVzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIGFzeW5jPzogKCkgPT4gKFxuICAgIGVycm9yOiBFcnJvciB8IG51bGwsXG4gICAgY29udGVudD86IHN0cmluZyxcbiAgICBzb3VyY2VNYXA/OiBhbnlcbiAgKSA9PiB2b2lkO1xuICBhZGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbiAgYWRkQnVpbGREZXBlbmRlbmN5PzogKGRlcGVuZGVuY3k6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdvcmtmbG93TG9hZGVyKFxuICB0aGlzOiBXb3JrZmxvd0xvYWRlckNvbnRleHQsXG4gIHNvdXJjZTogc3RyaW5nIHwgQnVmZmVyLFxuICBzb3VyY2VNYXA6IGFueVxuKTogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IHwgdm9pZCB7XG4gIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5hc3luYz8uKCk7XG4gIGNvbnN0IHJ1biA9IGFzeW5jICgpOiBQcm9taXNlPHsgY29kZTogc3RyaW5nOyBtYXA6IGFueSB9PiA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB0aGlzLnJlc291cmNlUGF0aDtcbiAgICBjb25zdCBub3JtYWxpemVkU291cmNlID0gc291cmNlLnRvU3RyaW5nKCk7XG4gICAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgc3djUGx1Z2luUGF0aCA9IHJlZ2lzdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzKHRoaXMpO1xuICAgIGNvbnN0IHNvdXJjZUZvclRyYW5zZm9ybSA9IG5vcm1hbGl6ZWRTb3VyY2U7XG5cbiAgICBjb25zdCBpc0dlbmVyYXRlZFdvcmtmbG93RmlsZSA9IGF3YWl0IGNoZWNrR2VuZXJhdGVkRmlsZShmaWxlbmFtZSk7XG4gICAgLy8gU2tpcCBnZW5lcmF0ZWQgd29ya2Zsb3cgcm91dGUgZmlsZXMgdG8gYXZvaWQgcmUtcHJvY2Vzc2luZyB0aGVtLlxuICAgIC8vIERlZmVycmVkIHJvdXRlIHN0dWJzIGFyZSBhIHNwZWNpYWwgY2FzZTogd2FpdCBmb3IgdGhlIGdlbmVyYXRlZCByb3V0ZVxuICAgIC8vIG91dHB1dCB0byBiZWNvbWUgYXZhaWxhYmxlIGJlZm9yZSByZXR1cm5pbmcuXG4gICAgaWYgKGlzR2VuZXJhdGVkV29ya2Zsb3dGaWxlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb2Nlc3MuZW52LldPUktGTE9XX05FWFRfTEFaWV9ESVNDT1ZFUlkgPT09ICcxJyAmJlxuICAgICAgICBpc1dvcmtmbG93Um91dGVTdHViU291cmNlKG5vcm1hbGl6ZWRTb3VyY2UpXG4gICAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBlbnN1cmVEZWZlcnJlZFJvdXRlU3R1YkJ1aWxkQW5kV2FpdCgpO1xuICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZFNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcpO1xuICAgICAgICAgIGlmICghaXNXb3JrZmxvd1JvdXRlU3R1YlNvdXJjZShyZWZyZXNoZWRTb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBjb2RlOiByZWZyZXNoZWRTb3VyY2UsIG1hcDogc291cmNlTWFwIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbd29ya2Zsb3ddIEZhaWxlZCB3YWl0aW5nIGZvciBkZWZlcnJlZCByb3V0ZSBidWlsZCBmb3IgJHtmaWxlbmFtZX0sIHVzaW5nIHN0dWIgb3V0cHV0YCxcbiAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgY29kZTogbm9ybWFsaXplZFNvdXJjZSwgbWFwOiBzb3VyY2VNYXAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3Qgd29ya2Zsb3cgcGF0dGVybnMgaW4gdGhlIHNvdXJjZSBjb2RlLlxuICAgIGNvbnN0IHBhdHRlcm5zID0gYXdhaXQgZGV0ZWN0UGF0dGVybnMoc291cmNlRm9yVHJhbnNmb3JtKTtcbiAgICAvLyBBbHdheXMgbm90aWZ5IGRpc2NvdmVyeSB0cmFja2luZywgZXZlbiBmb3IgYGZhbHNlL2ZhbHNlYCwgc28gZmlsZXMgdGhhdFxuICAgIC8vIHByZXZpb3VzbHkgaGFkIHdvcmtmbG93L3N0ZXAgdXNhZ2UgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdHJhY2tlZCBzZXRzLlxuICAgIGNvbnN0IG5leHRQYXR0ZXJuU3RhdGU6IERpc2NvdmVyZWRQYXR0ZXJuU3RhdGUgPSB7XG4gICAgICBoYXNXb3JrZmxvdzogcGF0dGVybnMuaGFzVXNlV29ya2Zsb3csXG4gICAgICBoYXNTdGVwOiBwYXR0ZXJucy5oYXNVc2VTdGVwLFxuICAgICAgaGFzU2VyZGU6IHBhdHRlcm5zLmhhc1NlcmRlLFxuICAgIH07XG4gICAgY29uc3QgeyBzaG91bGROb3RpZnkgfSA9IHVwZGF0ZURpc2NvdmVyZWRQYXR0ZXJuU3RhdGUoXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIG5leHRQYXR0ZXJuU3RhdGVcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHNob3VsZE5vdGlmeVNvY2tldEZvckRpc2NvdmVyZWRQYXR0ZXJuKHNob3VsZE5vdGlmeSwgbmV4dFBhdHRlcm5TdGF0ZSlcbiAgICApIHtcbiAgICAgIGF3YWl0IG5vdGlmeVNvY2tldFNlcnZlcihcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIG5leHRQYXR0ZXJuU3RhdGUuaGFzV29ya2Zsb3csXG4gICAgICAgIG5leHRQYXR0ZXJuU3RhdGUuaGFzU3RlcCxcbiAgICAgICAgbmV4dFBhdHRlcm5TdGF0ZS5oYXNTZXJkZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBmaWxlIG5lZWRzIHRyYW5zZm9ybWF0aW9uIGJhc2VkIG9uIHBhdHRlcm5zIGFuZCBwYXRoXG4gICAgaWYgKCEoYXdhaXQgY2hlY2tTaG91bGRUcmFuc2Zvcm0oZmlsZW5hbWUsIHBhdHRlcm5zKSkpIHtcbiAgICAgIHJldHVybiB7IGNvZGU6IG5vcm1hbGl6ZWRTb3VyY2UsIG1hcDogc291cmNlTWFwIH07XG4gICAgfVxuXG4gICAgY29uc3QgaXNUeXBlU2NyaXB0ID1cbiAgICAgIGZpbGVuYW1lLmVuZHNXaXRoKCcudHMnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy50c3gnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy5tdHMnKSB8fFxuICAgICAgZmlsZW5hbWUuZW5kc1dpdGgoJy5jdHMnKTtcblxuICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBmaWxlbmFtZSBmb3IgU1dDIHBsdWdpblxuICAgIC8vIFRoZSBTV0MgcGx1Z2luIHVzZXMgZmlsZW5hbWUgdG8gZ2VuZXJhdGUgd29ya2Zsb3dJZCwgc28gaXQgbXVzdCBiZSByZWxhdGl2ZVxuICAgIGNvbnN0IHJlbGF0aXZlRmlsZW5hbWUgPSBhd2FpdCBnZXRSZWxhdGl2ZUZpbGVuYW1lRm9yU3djKFxuICAgICAgZmlsZW5hbWUsXG4gICAgICB3b3JraW5nRGlyXG4gICAgKTtcblxuICAgIC8vIEdldCBkZWNvcmF0b3Igb3B0aW9ucyBmcm9tIHRzY29uZmlnIChjYWNoZWQgcGVyIHdvcmtpbmcgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHsgb3B0aW9uczogZGVjb3JhdG9yT3B0aW9ucywgY29uZmlnUGF0aCB9ID1cbiAgICAgIGF3YWl0IGdldERlY29yYXRvck9wdGlvbnMod29ya2luZ0Rpcik7XG4gICAgaWYgKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJlZ2lzdGVyRmlsZURlcGVuZGVuY3kodGhpcywgY29uZmlnUGF0aCk7XG4gICAgfVxuXG4gICAgLy8gUmVzb2x2ZSBtb2R1bGUgc3BlY2lmaWVyIGZvciBwYWNrYWdlcyAobm9kZV9tb2R1bGVzIG9yIHdvcmtzcGFjZSBwYWNrYWdlcylcbiAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSBhd2FpdCBnZXRNb2R1bGVTcGVjaWZpZXIoZmlsZW5hbWUsIHdvcmtpbmdEaXIpO1xuICAgIGNvbnN0IG1vZGUgPSAnc3RlcCc7XG5cbiAgICAvLyBUcmFuc2Zvcm0gd2l0aCBTV0NcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0oc291cmNlRm9yVHJhbnNmb3JtLCB7XG4gICAgICBmaWxlbmFtZTogcmVsYXRpdmVGaWxlbmFtZSxcbiAgICAgIGpzYzoge1xuICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAuLi4oaXNUeXBlU2NyaXB0XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgICAgICAgICB0c3g6IGZpbGVuYW1lLmVuZHNXaXRoKCcudHN4JyksXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JzLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBzeW50YXg6ICdlY21hc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBqc3g6IGZpbGVuYW1lLmVuZHNXaXRoKCcuanN4JyksXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JzLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0OiAnZXMyMDIyJyxcbiAgICAgICAgZXhwZXJpbWVudGFsOiB7XG4gICAgICAgICAgcGx1Z2luczogW1tzd2NQbHVnaW5QYXRoLCB7IG1vZGUsIG1vZHVsZVNwZWNpZmllciB9XV0sXG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICBydW50aW1lOiAncHJlc2VydmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbGVnYWN5RGVjb3JhdG9yOiBkZWNvcmF0b3JPcHRpb25zLmxlZ2FjeURlY29yYXRvcixcbiAgICAgICAgICBkZWNvcmF0b3JNZXRhZGF0YTogZGVjb3JhdG9yT3B0aW9ucy5kZWNvcmF0b3JNZXRhZGF0YSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgaW5wdXRTb3VyY2VNYXA6IHNvdXJjZU1hcCxcbiAgICAgIHNvdXJjZU1hcHM6IHRydWUsXG4gICAgICBpbmxpbmVTb3VyY2VzQ29udGVudDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGxldCB0cmFuc2Zvcm1lZE1hcCA9IHNvdXJjZU1hcDtcbiAgICBpZiAodHlwZW9mIHJlc3VsdC5tYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0cmFuc2Zvcm1lZE1hcCA9IEpTT04ucGFyc2UocmVzdWx0Lm1hcCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdHJhbnNmb3JtZWRNYXAgPSByZXN1bHQubWFwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1hcCkge1xuICAgICAgdHJhbnNmb3JtZWRNYXAgPSByZXN1bHQubWFwO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdC5jb2RlLCBtYXA6IHRyYW5zZm9ybWVkTWFwIH07XG4gIH07XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIHJldHVybiBydW4oKS50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5jb2RlKTtcbiAgfVxuXG4gIHZvaWQgcnVuKClcbiAgICAudGhlbigocmVzdWx0KSA9PiBjYWxsYmFjayhudWxsLCByZXN1bHQuY29kZSwgcmVzdWx0Lm1hcCkpXG4gICAgLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgY2FsbGJhY2soZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcbiAgICB9KTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workflow/next",
3
- "version": "5.0.0-beta.17",
3
+ "version": "5.0.0-beta.19",
4
4
  "description": "Next.js integration for Workflow SDK",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",
@@ -29,9 +29,9 @@
29
29
  "@swc/core": "1.15.3",
30
30
  "semver": "7.7.4",
31
31
  "watchpack": "2.5.1",
32
- "@workflow/builders": "5.0.0-beta.17",
33
- "@workflow/core": "5.0.0-beta.17",
34
- "@workflow/swc-plugin": "5.0.0-beta.4"
32
+ "@workflow/builders": "5.0.0-beta.19",
33
+ "@workflow/core": "5.0.0-beta.19",
34
+ "@workflow/swc-plugin": "5.0.0-beta.5"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "22.19.0",