hyperp 1.0.1 → 1.0.3

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.
package/cdk.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "app": "npx ts-node --prefer-ts-exts bin/hyperp.ts",
2
+ "app": "node dist/bin/hyperp.js",
3
3
  "watch": {
4
4
  "include": ["**"],
5
5
  "exclude": [
@@ -48,9 +48,39 @@ const iam = __importStar(require("aws-cdk-lib/aws-iam"));
48
48
  const events = __importStar(require("aws-cdk-lib/aws-events"));
49
49
  const targets = __importStar(require("aws-cdk-lib/aws-events-targets"));
50
50
  const path = __importStar(require("path"));
51
+ const fs = __importStar(require("fs"));
51
52
  class HyperpStack extends cdk.Stack {
52
53
  constructor(scope, id, props) {
53
54
  super(scope, id, props);
55
+ // Resolve Lambda entry paths - handle both development and npm package contexts
56
+ // When compiled, __dirname is dist/lib/, so we need to go up to package root
57
+ // When in npm package, we need to find the package root
58
+ const getLambdaPath = (lambdaPath) => {
59
+ // Try relative to __dirname first (for npm package - go up 2 levels from dist/lib/)
60
+ const npmPath = path.join(__dirname, "../../lambda", lambdaPath);
61
+ if (fs.existsSync(npmPath)) {
62
+ return npmPath;
63
+ }
64
+ // Try relative to __dirname with one less level (for development - from lib/)
65
+ const devPath = path.join(__dirname, "../lambda", lambdaPath);
66
+ if (fs.existsSync(devPath)) {
67
+ return devPath;
68
+ }
69
+ // Fallback: try to find package root by looking for package.json
70
+ let currentDir = __dirname;
71
+ while (currentDir !== path.dirname(currentDir)) {
72
+ const packageJsonPath = path.join(currentDir, "package.json");
73
+ if (fs.existsSync(packageJsonPath)) {
74
+ const lambdaFullPath = path.join(currentDir, "lambda", lambdaPath);
75
+ if (fs.existsSync(lambdaFullPath)) {
76
+ return lambdaFullPath;
77
+ }
78
+ }
79
+ currentDir = path.dirname(currentDir);
80
+ }
81
+ // Last resort: return the path relative to __dirname (will fail if file doesn't exist)
82
+ return path.join(__dirname, "../lambda", lambdaPath);
83
+ };
54
84
  // Get GitHub App configuration from CDK context
55
85
  const githubAppId = this.node.tryGetContext("githubAppId") || process.env.GITHUB_APP_ID;
56
86
  const githubAppWebhookSecret = this.node.tryGetContext("githubAppWebhookSecret") ||
@@ -325,7 +355,7 @@ class HyperpStack extends cdk.Stack {
325
355
  functionName: "hyperp-efs-controller",
326
356
  runtime: lambda.Runtime.NODEJS_20_X,
327
357
  handler: "handler",
328
- entry: path.join(__dirname, "../lambda/efs-controller/index.ts"),
358
+ entry: getLambdaPath("efs-controller/index.ts"),
329
359
  timeout: cdk.Duration.seconds(30),
330
360
  memorySize: 512,
331
361
  vpc: vpc,
@@ -356,7 +386,7 @@ class HyperpStack extends cdk.Stack {
356
386
  functionName: "hyperp-github-webhook-handler",
357
387
  runtime: lambda.Runtime.NODEJS_20_X,
358
388
  handler: "handler",
359
- entry: path.join(__dirname, "../lambda/github-webhook-handler/index.ts"),
389
+ entry: getLambdaPath("github-webhook-handler/index.ts"),
360
390
  timeout: cdk.Duration.minutes(5),
361
391
  memorySize: 1024,
362
392
  environment: {
@@ -399,7 +429,7 @@ class HyperpStack extends cdk.Stack {
399
429
  functionName: "hyperp-task-state-change-handler",
400
430
  runtime: lambda.Runtime.NODEJS_20_X,
401
431
  handler: "handler",
402
- entry: path.join(__dirname, "../lambda/task-state-change-handler/index.ts"),
432
+ entry: getLambdaPath("task-state-change-handler/index.ts"),
403
433
  timeout: cdk.Duration.minutes(2),
404
434
  memorySize: 512,
405
435
  environment: {
@@ -492,7 +522,7 @@ class HyperpStack extends cdk.Stack {
492
522
  functionName: "hyperp-cli-rest-api",
493
523
  runtime: lambda.Runtime.NODEJS_20_X,
494
524
  handler: "handler",
495
- entry: path.join(__dirname, "../lambda/cli-rest-api/index.ts"),
525
+ entry: getLambdaPath("cli-rest-api/index.ts"),
496
526
  timeout: cdk.Duration.seconds(30),
497
527
  memorySize: 512,
498
528
  environment: {
@@ -531,4 +561,4 @@ class HyperpStack extends cdk.Stack {
531
561
  }
532
562
  }
533
563
  exports.HyperpStack = HyperpStack;
534
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlwZXJwLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2h5cGVycC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFFbkMseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLG1FQUFxRDtBQUNyRCx1REFBeUM7QUFDekMsK0RBQWlEO0FBQ2pELHFFQUE2RTtBQUM3RSwyREFBNkM7QUFDN0MseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFFMUQsMkNBQTZCO0FBRTdCLE1BQWEsV0FBWSxTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQ3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsZ0RBQWdEO1FBQ2hELE1BQU0sV0FBVyxHQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO1FBQ3RFLE1BQU0sc0JBQXNCLEdBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDO1lBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUM7UUFFeEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkVBQTJFLENBQzVFLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FDYixtR0FBbUcsQ0FDcEcsQ0FBQztRQUNKLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsK0VBQStFO1FBQy9FLCtDQUErQztRQUMvQyxNQUFNLEdBQUcsR0FB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QUMsR0FBRztZQUN0QixXQUFXLEVBQUUsMkJBQTJCO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTlsQkQsa0NBOGxCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCAqIGFzIGVjcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0ICogYXMgZWNyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNyXCI7XG5pbXBvcnQgKiBhcyBlZnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lZnNcIjtcbmltcG9ydCAqIGFzIGR5bmFtb2RiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24sIE91dHB1dEZvcm1hdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCI7XG5pbXBvcnQgKiBhcyB0YXJnZXRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHNcIjtcbmltcG9ydCAqIGFzIHMzZGVwbG95IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgY2xhc3MgSHlwZXJwU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IGNkay5TdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBHZXQgR2l0SHViIEFwcCBjb25maWd1cmF0aW9uIGZyb20gQ0RLIGNvbnRleHRcbiAgICBjb25zdCBnaXRodWJBcHBJZCA9XG4gICAgICB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcImdpdGh1YkFwcElkXCIpIHx8IHByb2Nlc3MuZW52LkdJVEhVQl9BUFBfSUQ7XG4gICAgY29uc3QgZ2l0aHViQXBwV2ViaG9va1NlY3JldCA9XG4gICAgICB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcImdpdGh1YkFwcFdlYmhvb2tTZWNyZXRcIikgfHxcbiAgICAgIHByb2Nlc3MuZW52LkdJVEhVQl9BUFBfV0VCSE9PS19TRUNSRVQ7XG5cbiAgICBpZiAoIWdpdGh1YkFwcElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiR2l0SHViIEFwcCBJRCBpcyByZXF1aXJlZC4gUHJvdmlkZSBpdCB2aWEgLS1naXRodWItYXBwLWlkIG9yIENESyBjb250ZXh0LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghZ2l0aHViQXBwV2ViaG9va1NlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkdpdEh1YiBBcHAgd2ViaG9vayBzZWNyZXQgaXMgcmVxdWlyZWQuIFByb3ZpZGUgaXQgdmlhIC0tZ2l0aHViLWFwcC13ZWJob29rLXNlY3JldCBvciBDREsgY29udGV4dC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFZQQyAtIExhcmdlIGFkZHJlc3NhYmxlIFZQQyAoUHVibGljIHN1Ym5ldHMgb25seSB0byBhdm9pZCBOQVQgZ2F0ZXdheSBjb3N0cylcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHZwYyA9IG5ldyBlYzIuVnBjKHRoaXMsIFwiSHlwZXJwVnBjXCIsIHtcbiAgICAgIG1heEF6czogMyxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcihcIjEwLjAuMC4wLzE2XCIpLFxuICAgICAgbmF0R2F0ZXdheXM6IDAsIC8vIE5vIE5BVCBnYXRld2F5cyAtIHVzaW5nIHB1YmxpYyBzdWJuZXRzIG9ubHlcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIGNpZHJNYXNrOiAyMCxcbiAgICAgICAgICBuYW1lOiBcIlB1YmxpY1wiLFxuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFMzIEJ1Y2tldCBmb3IgYXJ0aWZhY3RzIChHaXRIdWIgQXBwIFBFTSBrZXkpXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBMZXQgQ0RLIGdlbmVyYXRlIGEgdW5pcXVlIGJ1Y2tldCBuYW1lIHRvIGF2b2lkIGdsb2JhbCBuYW1pbmcgY29uZmxpY3RzXG4gICAgLy8gVGhlIGJ1Y2tldCBuYW1lIHdpbGwgYmUgYXZhaWxhYmxlIHZpYSBzdGFjayBvdXRwdXRzXG4gICAgY29uc3QgYXJ0aWZhY3RzQnVja2V0ID0gbmV3IHMzLkJ1Y2tldCh0aGlzLCBcIkh5cGVycEFydGlmYWN0c0J1Y2tldFwiLCB7XG4gICAgICAvLyBSZW1vdmVkIGZpeGVkIGJ1Y2tldE5hbWUgdG8gYXZvaWQgZ2xvYmFsIG5hbWluZyBjb25mbGljdHNcbiAgICAgIC8vIENESyB3aWxsIGdlbmVyYXRlOiBoeXBlcnBzdGFjay1oeXBlcnBhcnRpZmFjdHNidWNrZXQtPHJhbmRvbT5cbiAgICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogZmFsc2UsIC8vIEtlZXAgb2JqZWN0cyB3aGVuIHN0YWNrIGlzIGRlbGV0ZWRcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRHluYW1vREIgVGFibGUgd2l0aCBHU0lcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IHRhYmxlID0gbmV3IGR5bmFtb2RiLlRhYmxlKHRoaXMsIFwiSHlwZXJwVGFibGVcIiwge1xuICAgICAgdGFibGVOYW1lOiBcImh5cGVycFwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiUEtcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJTS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgYmlsbGluZ01vZGU6IGR5bmFtb2RiLkJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBHU0kxIGZvciBxdWVyeWluZyB3b3JrZmxvd3MsIHdvcmtmbG93IHJ1bnMsIGV0Yy5cbiAgICB0YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleCh7XG4gICAgICBpbmRleE5hbWU6IFwiR1NJMVwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiR1NJMS1QS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcIkdTSTEtU0tcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICB9KTtcblxuICAgIC8vIEdTSTIgZm9yIHF1ZXJ5aW5nIHdvcmtmbG93IHJ1bnMgYnkgY29tbWl0IGhhc2hcbiAgICB0YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleCh7XG4gICAgICBpbmRleE5hbWU6IFwiR1NJMlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiR1NJMi1QS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcIkdTSTItU0tcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICB9KTtcblxuICAgIC8vIEdTSTMgZm9yIHF1ZXJ5aW5nIGFsbCB3b3JrZmxvdyBydW5zIHNvcnRlZCBieSBjcmVhdGlvbiB0aW1lXG4gICAgdGFibGUuYWRkR2xvYmFsU2Vjb25kYXJ5SW5kZXgoe1xuICAgICAgaW5kZXhOYW1lOiBcIkdTSTNcIixcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcIkdTSTMtUEtcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJHU0kzLVNLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBwcm9qZWN0aW9uVHlwZTogZHluYW1vZGIuUHJvamVjdGlvblR5cGUuSU5DTFVERSxcbiAgICAgIG5vbktleUF0dHJpYnV0ZXM6IFtcbiAgICAgICAgXCJ3b3JrZmxvd05hbWVcIixcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICAgXCJjcmVhdGVkQXRcIixcbiAgICAgICAgXCJ1cGRhdGVkQXRcIixcbiAgICAgICAgXCJlbnRpdHlJZFwiLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRUNSIFJlcG9zaXRvcnlcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGVjclJlcG9zaXRvcnkgPSBuZXcgZWNyLlJlcG9zaXRvcnkodGhpcywgXCJIeXBlcnBSZXBvc2l0b3J5XCIsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiBcImh5cGVycC0xXCIsXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICBpbWFnZVNjYW5PblB1c2g6IGZhbHNlLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIktlZXAgbGFzdCAxMDAgaW1hZ2VzXCIsXG4gICAgICAgICAgbWF4SW1hZ2VDb3VudDogMTAwLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRUNTIENsdXN0ZXJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgZWNzLkNsdXN0ZXIodGhpcywgXCJIeXBlcnBDbHVzdGVyXCIsIHtcbiAgICAgIGNsdXN0ZXJOYW1lOiBcImh5cGVycC0xXCIsXG4gICAgICB2cGM6IHZwYyxcbiAgICAgIGNvbnRhaW5lckluc2lnaHRzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFRlMgRmlsZSBTeXN0ZW0gZm9yIGFydGlmYWN0IHNoYXJpbmdcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGZpbGVTeXN0ZW0gPSBuZXcgZWZzLkZpbGVTeXN0ZW0odGhpcywgXCJIeXBlcnBFZnNcIiwge1xuICAgICAgdnBjOiB2cGMsXG4gICAgICBlbmNyeXB0ZWQ6IHRydWUsXG4gICAgICBsaWZlY3ljbGVQb2xpY3k6IGVmcy5MaWZlY3ljbGVQb2xpY3kuQUZURVJfMTRfREFZUyxcbiAgICAgIHBlcmZvcm1hbmNlTW9kZTogZWZzLlBlcmZvcm1hbmNlTW9kZS5HRU5FUkFMX1BVUlBPU0UsXG4gICAgICB0aHJvdWdocHV0TW9kZTogZWZzLlRocm91Z2hwdXRNb2RlLkVMQVNUSUMsXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgICBmaWxlU3lzdGVtUG9saWN5OiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRNb3VudFwiLFxuICAgICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudFdyaXRlXCIsXG4gICAgICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50Um9vdEFjY2Vzc1wiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByaW5jaXBhbHM6IFtuZXcgaWFtLkFueVByaW5jaXBhbCgpXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICAgICAgQm9vbDoge1xuICAgICAgICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06QWNjZXNzZWRWaWFNb3VudFRhcmdldFwiOiBcInRydWVcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIFNlY3VyaXR5IGdyb3VwIGZvciBFQ1MgdGFza3NcbiAgICBjb25zdCBlY3NUYXNrU2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBcIkVjc1Rhc2tTZWN1cml0eUdyb3VwXCIsXG4gICAgICB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJTZWN1cml0eSBncm91cCBmb3IgRUNTIHRhc2tzXCIsXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFsbG93IEVDUyB0YXNrcyB0byBjb25uZWN0IHRvIEVGUyBvbiBORlMgcG9ydFxuICAgIGZpbGVTeXN0ZW0uY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgZWNzVGFza1NlY3VyaXR5R3JvdXAsXG4gICAgICBlYzIuUG9ydC50Y3AoMjA0OSksXG4gICAgICBcIkFsbG93IE5GUyBmcm9tIEVDUyB0YXNrc1wiXG4gICAgKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBlY3NMb2dHcm91cCA9IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiSHlwZXJwRWNzTG9nR3JvdXBcIiwge1xuICAgICAgbG9nR3JvdXBOYW1lOiBcIi9oeXBlcnBcIixcbiAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gSUFNIFJvbGVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vIEVDUyBUYXNrIEV4ZWN1dGlvbiBSb2xlXG4gICAgY29uc3QgZWNzVGFza0V4ZWN1dGlvblJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJFY3NUYXNrRXhlY3V0aW9uUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeVwiXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgRUNSIHBlcm1pc3Npb25zXG4gICAgZWNyUmVwb3NpdG9yeS5ncmFudFB1bGwoZWNzVGFza0V4ZWN1dGlvblJvbGUpO1xuXG4gICAgLy8gRUNTIFRhc2sgUm9sZSAoZm9yIGNvbnRhaW5lcnMpXG4gICAgY29uc3QgZWNzVGFza1JvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJFY3NUYXNrUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjcy10YXNrcy5hbWF6b25hd3MuY29tXCIpLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgRUZTIHBlcm1pc3Npb25zIHRvIHRhc2sgcm9sZVxuICAgIGVjc1Rhc2tSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRNb3VudFwiLFxuICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50V3JpdGVcIixcbiAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudFJvb3RBY2Nlc3NcIixcbiAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkRlc2NyaWJlTW91bnRUYXJnZXRzXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2ZpbGVTeXN0ZW0uZmlsZVN5c3RlbUFybl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBFQ1IgcHVzaC9wdWxsIGZvciBpbWFnZSBidWlsZHNcbiAgICBlY3JSZXBvc2l0b3J5LmdyYW50UHVsbFB1c2goZWNzVGFza1JvbGUpO1xuXG4gICAgLy8gR3JhbnQgUzMgYWNjZXNzIGZvciByZWFkaW5nIHJlcG9zaXRvcnkgY29udGVudCBhbmQgdXBsb2FkaW5nIGFydGlmYWN0c1xuICAgIGVjc1Rhc2tSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzMzpHZXRPYmplY3RcIiwgXCJzMzpMaXN0QnVja2V0XCIsIFwiczM6UHV0T2JqZWN0XCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBEeW5hbW9EQiBwZXJtaXNzaW9ucyBmb3IgdXNhZ2UgY2FsY3VsYXRvciB0YXNrc1xuICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShlY3NUYXNrUm9sZSk7XG4gICAgLy8gRXhwbGljaXRseSBncmFudCBVcGRhdGVJdGVtIHBlcm1pc3Npb24gdG8gZW5zdXJlIHVzYWdlIGNhbGN1bGF0b3IgY2FuIHVwZGF0ZSBpdGVtc1xuICAgIGVjc1Rhc2tSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJkeW5hbW9kYjpHZXRJdGVtXCIsXG4gICAgICAgICAgXCJkeW5hbW9kYjpQdXRJdGVtXCIsXG4gICAgICAgICAgXCJkeW5hbW9kYjpVcGRhdGVJdGVtXCIsXG4gICAgICAgICAgXCJkeW5hbW9kYjpRdWVyeVwiLFxuICAgICAgICAgIFwiZHluYW1vZGI6U2NhblwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFt0YWJsZS50YWJsZUFybiwgYCR7dGFibGUudGFibGVBcm59L2luZGV4LypgXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTGFtYmRhIEV4ZWN1dGlvbiBSb2xlXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBsYW1iZGFSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSHlwZXJwTGFtYmRhUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImxhbWJkYS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCJcbiAgICAgICAgKSxcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gR3JhbnQgRHluYW1vREIgcGVybWlzc2lvbnNcbiAgICB0YWJsZS5ncmFudFJlYWRXcml0ZURhdGEobGFtYmRhUm9sZSk7XG5cbiAgICAvLyBHcmFudCBTMyBwZXJtaXNzaW9ucyAocmVhZCBhbmQgd3JpdGUgZm9yIGRvd25sb2FkYWJsZSBhcnRpZmFjdHMpXG4gICAgYXJ0aWZhY3RzQnVja2V0LmdyYW50UmVhZFdyaXRlKGxhbWJkYVJvbGUpO1xuXG4gICAgLy8gR3JhbnQgQ2xvdWRXYXRjaCBMb2dzIHBlcm1pc3Npb25zXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wibG9nczpHZXRMb2dFdmVudHNcIiwgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgRUNTIHBlcm1pc3Npb25zIGZvciBkb3dubG9hZGFibGUgY3JlYXRvciB0YXNrc1xuICAgIGxhbWJkYVJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVjczpSZWdpc3RlclRhc2tEZWZpbml0aW9uXCIsXG4gICAgICAgICAgXCJlY3M6UnVuVGFza1wiLFxuICAgICAgICAgIFwiZWNzOkRlc2NyaWJlVGFza3NcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgRUNTIHBlcm1pc3Npb25zXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWNzOlJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBcImVjczpSdW5UYXNrXCIsXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVUYXNrc1wiLFxuICAgICAgICAgIFwiZWNzOlN0b3BUYXNrXCIsXG4gICAgICAgICAgXCJlY3M6TGlzdFRhc2tzXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IElBTSBQYXNzUm9sZSBmb3IgRUNTXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiaWFtOlBhc3NSb2xlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtlY3NUYXNrRXhlY3V0aW9uUm9sZS5yb2xlQXJuLCBlY3NUYXNrUm9sZS5yb2xlQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IEVDUiBwZXJtaXNzaW9uc1xuICAgIGxhbWJkYVJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVjcjpHZXRBdXRob3JpemF0aW9uVG9rZW5cIixcbiAgICAgICAgICBcImVjcjpCYXRjaENoZWNrTGF5ZXJBdmFpbGFiaWxpdHlcIixcbiAgICAgICAgICBcImVjcjpHZXREb3dubG9hZFVybEZvckxheWVyXCIsXG4gICAgICAgICAgXCJlY3I6QmF0Y2hHZXRJbWFnZVwiLFxuICAgICAgICAgIFwiZWNyOkJhdGNoRGVsZXRlSW1hZ2VcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgTGFtYmRhIGludm9rZSBwZXJtaXNzaW9ucyAoZm9yIEVGUyBjb250cm9sbGVyKVxuICAgIGxhbWJkYVJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImxhbWJkYTpJbnZva2VGdW5jdGlvblwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgYGFybjphd3M6bGFtYmRhOiR7dGhpcy5yZWdpb259OiR7dGhpcy5hY2NvdW50fTpmdW5jdGlvbjpoeXBlcnAtZWZzLWNvbnRyb2xsZXJgLFxuICAgICAgICAgIGBhcm46YXdzOmxhbWJkYToke3RoaXMucmVnaW9ufToke3RoaXMuYWNjb3VudH06ZnVuY3Rpb246aHlwZXJwLWVmcy1jb250cm9sbGVyOipgLFxuICAgICAgICBdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFRlMgQ29udHJvbGxlciBMYW1iZGFcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENyZWF0ZSBhbiBhY2Nlc3MgcG9pbnQgZm9yIExhbWJkYSB0byBtb3VudCBFRlNcbiAgICAvLyBNb3VudCBhdCAvaHlwZXJwLWFydGlmYWN0cyBzbyBMYW1iZGEgaGFzIHdyaXRlIGFjY2VzcyB0byB0aGF0IGRpcmVjdG9yeVxuICAgIGNvbnN0IGxhbWJkYUFjY2Vzc1BvaW50ID0gbmV3IGVmcy5BY2Nlc3NQb2ludChcbiAgICAgIHRoaXMsXG4gICAgICBcIkxhbWJkYUVmc0FjY2Vzc1BvaW50XCIsXG4gICAgICB7XG4gICAgICAgIGZpbGVTeXN0ZW06IGZpbGVTeXN0ZW0sXG4gICAgICAgIHBhdGg6IFwiL2h5cGVycC1hcnRpZmFjdHNcIixcbiAgICAgICAgY3JlYXRlQWNsOiB7XG4gICAgICAgICAgb3duZXJHaWQ6IFwiMTAwMFwiLFxuICAgICAgICAgIG93bmVyVWlkOiBcIjEwMDBcIixcbiAgICAgICAgICBwZXJtaXNzaW9uczogXCI3NzdcIiwgLy8gTW9yZSBwZXJtaXNzaXZlIGZvciBMYW1iZGEgdG8gY3JlYXRlIHN1YmRpcmVjdG9yaWVzXG4gICAgICAgIH0sXG4gICAgICAgIHBvc2l4VXNlcjoge1xuICAgICAgICAgIHVpZDogXCIxMDAwXCIsXG4gICAgICAgICAgZ2lkOiBcIjEwMDBcIixcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgZWZzQ29udHJvbGxlckxhbWJkYSA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkh5cGVycEVmc0NvbnRyb2xsZXJcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImh5cGVycC1lZnMtY29udHJvbGxlclwiLFxuICAgICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2xhbWJkYS9lZnMtY29udHJvbGxlci9pbmRleC50c1wiKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9LFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2Vjc1Rhc2tTZWN1cml0eUdyb3VwXSxcbiAgICAgICAgYWxsb3dQdWJsaWNTdWJuZXQ6IHRydWUsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogbGFtYmRhUm9sZSxcbiAgICAgICAgZmlsZXN5c3RlbTogbGFtYmRhLkZpbGVTeXN0ZW0uZnJvbUVmc0FjY2Vzc1BvaW50KFxuICAgICAgICAgIGxhbWJkYUFjY2Vzc1BvaW50LFxuICAgICAgICAgIFwiL21udC9lZnNcIlxuICAgICAgICApLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbGxlY3Qgc3VibmV0IElEcyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBwdWJsaWNTdWJuZXRJZHMgPSB2cGMucHVibGljU3VibmV0c1xuICAgICAgLm1hcCgoc3VibmV0KSA9PiBzdWJuZXQuc3VibmV0SWQpXG4gICAgICAuam9pbihcIixcIik7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEdpdEh1YiBXZWJob29rIEhhbmRsZXIgTGFtYmRhXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnaXRodWJXZWJob29rSGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkh5cGVycEdpdGh1YldlYmhvb2tIYW5kbGVyXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJoeXBlcnAtZ2l0aHViLXdlYmhvb2staGFuZGxlclwiLFxuICAgICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oXG4gICAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICAgIFwiLi4vbGFtYmRhL2dpdGh1Yi13ZWJob29rLWhhbmRsZXIvaW5kZXgudHNcIlxuICAgICAgICApLFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgbWVtb3J5U2l6ZTogMTAyNCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBEWU5BTU9EQl9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgICAgUzNfQlVDS0VUX05BTUU6IGFydGlmYWN0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIEVDU19DTFVTVEVSX0FSTjogY2x1c3Rlci5jbHVzdGVyQXJuLFxuICAgICAgICAgIEVDU19DTFVTVEVSX05BTUU6IGNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgICAgRUNSX1JFUE9TSVRPUllfVVJJOiBlY3JSZXBvc2l0b3J5LnJlcG9zaXRvcnlVcmksXG4gICAgICAgICAgRUNSX1JFUE9TSVRPUllfTkFNRTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICBFQ1NfVEFTS19FWEVDVVRJT05fUk9MRV9BUk46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICAgICAgRUNTX1RBU0tfUk9MRV9BUk46IGVjc1Rhc2tSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgICBFQ1NfVEFTS19TRUNVUklUWV9HUk9VUF9JRDogZWNzVGFza1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgIFBVQkxJQ19TVUJORVRfSURTOiBwdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgRUZTX0NPTlRST0xMRVJfTEFNQkRBX0FSTjogZWZzQ29udHJvbGxlckxhbWJkYS5mdW5jdGlvbkFybixcbiAgICAgICAgICBHSVRIVUJfQVBQX0lEOiBnaXRodWJBcHBJZCxcbiAgICAgICAgICBHSVRIVUJfQVBQX1dFQkhPT0tfU0VDUkVUOiBnaXRodWJBcHBXZWJob29rU2VjcmV0LFxuICAgICAgICAgIEFXU19BQ0NPVU5UX0lEOiB0aGlzLmFjY291bnQsXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IGxhbWJkYVJvbGUsXG4gICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgbWluaWZ5OiB0cnVlLFxuICAgICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgICBmb3JtYXQ6IE91dHB1dEZvcm1hdC5DSlMsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBGdW5jdGlvbiBVUkwgZm9yIEdpdEh1YiBXZWJob29rIEhhbmRsZXJcbiAgICBjb25zdCB3ZWJob29rRnVuY3Rpb25VcmwgPSBnaXRodWJXZWJob29rSGFuZGxlci5hZGRGdW5jdGlvblVybCh7XG4gICAgICBhdXRoVHlwZTogbGFtYmRhLkZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSwgLy8gUHVibGljIGFjY2VzcyBmb3IgR2l0SHViIHdlYmhvb2tzXG4gICAgICBjb3JzOiB7XG4gICAgICAgIGFsbG93ZWRPcmlnaW5zOiBbXCIqXCJdLFxuICAgICAgICBhbGxvd2VkTWV0aG9kczogW2xhbWJkYS5IdHRwTWV0aG9kLlBPU1RdLFxuICAgICAgICBhbGxvd2VkSGVhZGVyczogW1wiKlwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFRhc2sgU3RhdGUgQ2hhbmdlIEhhbmRsZXIgTGFtYmRhXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCB0YXNrU3RhdGVDaGFuZ2VIYW5kbGVyID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSHlwZXJwVGFza1N0YXRlQ2hhbmdlSGFuZGxlclwiLFxuICAgICAge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IFwiaHlwZXJwLXRhc2stc3RhdGUtY2hhbmdlLWhhbmRsZXJcIixcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgICBcIi4uL2xhbWJkYS90YXNrLXN0YXRlLWNoYW5nZS1oYW5kbGVyL2luZGV4LnRzXCJcbiAgICAgICAgKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICAgIG1lbW9yeVNpemU6IDUxMixcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBEWU5BTU9EQl9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgICAgRUNTX0NMVVNURVJfQVJOOiBjbHVzdGVyLmNsdXN0ZXJBcm4sXG4gICAgICAgICAgRUNTX0NMVVNURVJfTkFNRTogY2x1c3Rlci5jbHVzdGVyTmFtZSxcbiAgICAgICAgICBFQ1JfUkVQT1NJVE9SWV9VUkk6IGVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSxcbiAgICAgICAgICBFQ1NfVEFTS19FWEVDVVRJT05fUk9MRV9BUk46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICAgICAgRUNTX1RBU0tfUk9MRV9BUk46IGVjc1Rhc2tSb2xlLnJvbGVBcm4sXG4gICAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgICBFQ1NfVEFTS19TRUNVUklUWV9HUk9VUF9JRDogZWNzVGFza1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICAgIFBVQkxJQ19TVUJORVRfSURTOiBwdWJsaWNTdWJuZXRJZHMsXG4gICAgICAgICAgRUZTX0NPTlRST0xMRVJfTEFNQkRBX0FSTjogZWZzQ29udHJvbGxlckxhbWJkYS5mdW5jdGlvbkFybixcbiAgICAgICAgICBBV1NfQUNDT1VOVF9JRDogdGhpcy5hY2NvdW50LFxuICAgICAgICAgIEZBUkdBVEVfVkNQVV9QUklDRV9QRVJfSE9VUjogXCIwLjA0MDQ4XCIsXG4gICAgICAgICAgRkFSR0FURV9HQl9QUklDRV9QRVJfSE9VUjogXCIwLjAwNDQ0NVwiLFxuICAgICAgICAgIFMzX0JVQ0tFVF9OQU1FOiBhcnRpZmFjdHNCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICBHSVRIVUJfQVBQX0lEOiBnaXRodWJBcHBJZCxcbiAgICAgICAgICBET1dOTE9BREFCTEVfQ1JFQVRPUl9JTUFHRTpcbiAgICAgICAgICAgIFwicHVibGljLmVjci5hd3MvYjZnOXQ4ZjEvZG93bmxvYWRhYmxlLWNyZWF0b3I6bGF0ZXN0XCIsXG4gICAgICAgICAgVVNBR0VfQ0FMQ1VMQVRPUl9JTUFHRTpcbiAgICAgICAgICAgIFwicHVibGljLmVjci5hd3MvYjZnOXQ4ZjEvdXNhZ2UtY2FsY3VsYXRvcjpsYXRlc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogbGFtYmRhUm9sZSxcbiAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgICAgc291cmNlTWFwOiB0cnVlLFxuICAgICAgICAgIGZvcm1hdDogT3V0cHV0Rm9ybWF0LkNKUyxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFdmVudEJyaWRnZSBSdWxlIGZvciBFQ1MgVGFzayBTdGF0ZSBDaGFuZ2VzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBlY3NUYXNrU3RhdGVDaGFuZ2VSdWxlID0gbmV3IGV2ZW50cy5SdWxlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRWNzVGFza1N0YXRlQ2hhbmdlUnVsZVwiLFxuICAgICAge1xuICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICBzb3VyY2U6IFtcImF3cy5lY3NcIl0sXG4gICAgICAgICAgZGV0YWlsVHlwZTogW1wiRUNTIFRhc2sgU3RhdGUgQ2hhbmdlXCJdLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgY2x1c3RlckFybjogW2NsdXN0ZXIuY2x1c3RlckFybl0sXG4gICAgICAgICAgICBsYXN0U3RhdHVzOiBbXCJTVE9QUEVEXCJdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgKTtcblxuICAgIGVjc1Rhc2tTdGF0ZUNoYW5nZVJ1bGUuYWRkVGFyZ2V0KFxuICAgICAgbmV3IHRhcmdldHMuTGFtYmRhRnVuY3Rpb24odGFza1N0YXRlQ2hhbmdlSGFuZGxlcilcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBPdXRwdXRzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlZwY0lkXCIsIHtcbiAgICAgIHZhbHVlOiB2cGMudnBjSWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJWUEMgSURcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiQ2x1c3RlckFyblwiLCB7XG4gICAgICB2YWx1ZTogY2x1c3Rlci5jbHVzdGVyQXJuLFxuICAgICAgZGVzY3JpcHRpb246IFwiRUNTIENsdXN0ZXIgQVJOXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkVjclJlcG9zaXRvcnlVcmlcIiwge1xuICAgICAgdmFsdWU6IGVjclJlcG9zaXRvcnkucmVwb3NpdG9yeVVyaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVDUiBSZXBvc2l0b3J5IFVSSVwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJEeW5hbW9EYlRhYmxlTmFtZVwiLCB7XG4gICAgICB2YWx1ZTogdGFibGUudGFibGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IFwiRHluYW1vREIgVGFibGUgTmFtZVwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJTM0J1Y2tldE5hbWVcIiwge1xuICAgICAgdmFsdWU6IGFydGlmYWN0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgZGVzY3JpcHRpb246IFwiUzMgQXJ0aWZhY3RzIEJ1Y2tldCBOYW1lXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkVmc0ZpbGVTeXN0ZW1JZFwiLCB7XG4gICAgICB2YWx1ZTogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJFRlMgRmlsZSBTeXN0ZW0gSURcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiR2l0aHViV2ViaG9va0hhbmRsZXJBcm5cIiwge1xuICAgICAgdmFsdWU6IGdpdGh1YldlYmhvb2tIYW5kbGVyLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246IFwiR2l0SHViIFdlYmhvb2sgSGFuZGxlciBMYW1iZGEgQVJOXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkdpdGh1YldlYmhvb2tIYW5kbGVyVXJsXCIsIHtcbiAgICAgIHZhbHVlOiB3ZWJob29rRnVuY3Rpb25VcmwudXJsLFxuICAgICAgZGVzY3JpcHRpb246IFwiR2l0SHViIFdlYmhvb2sgSGFuZGxlciBGdW5jdGlvbiBVUkxcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiVGFza1N0YXRlQ2hhbmdlSGFuZGxlckFyblwiLCB7XG4gICAgICB2YWx1ZTogdGFza1N0YXRlQ2hhbmdlSGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRhc2sgU3RhdGUgQ2hhbmdlIEhhbmRsZXIgTGFtYmRhIEFSTlwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJQdWJsaWNTdWJuZXRJZHNcIiwge1xuICAgICAgdmFsdWU6IHB1YmxpY1N1Ym5ldElkcyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlB1YmxpYyBTdWJuZXQgSURzXCIsXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFJFU1QgQVBJIExhbWJkYSBmb3IgQ0xJXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBjbGlSZXN0QXBpTGFtYmRhID0gbmV3IE5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiSHlwZXJwQ2xpUmVzdEFwaVwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwiaHlwZXJwLWNsaS1yZXN0LWFwaVwiLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2xhbWJkYS9jbGktcmVzdC1hcGkvaW5kZXgudHNcIiksXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBEWU5BTU9EQl9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgIEVDU19DTFVTVEVSX05BTUU6IGNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgIEVGU19GSUxFX1NZU1RFTV9JRDogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICAgIFBVQkxJQ19TVUJORVRfSURTOiB2cGMucHVibGljU3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpLmpvaW4oXCIsXCIpLFxuICAgICAgICBFQ1NfVEFTS19TRUNVUklUWV9HUk9VUF9JRDogZWNzVGFza1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICBFQ1NfVEFTS19FWEVDVVRJT05fUk9MRV9BUk46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICAgIEVDU19UQVNLX1JPTEVfQVJOOiBlY3NUYXNrUm9sZS5yb2xlQXJuLFxuICAgICAgICBTM19CVUNLRVRfTkFNRTogYXJ0aWZhY3RzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIERPV05MT0FEQUJMRV9DUkVBVE9SX0lNQUdFOlxuICAgICAgICAgIFwicHVibGljLmVjci5hd3MvYjZnOXQ4ZjEvZG93bmxvYWRhYmxlLWNyZWF0b3I6bGF0ZXN0XCIsXG4gICAgICAgIEdJVEhVQl9BUFBfSUQ6IGdpdGh1YkFwcElkLFxuICAgICAgICBHSVRIVUJfQVBQX1dFQkhPT0tfU0VDUkVUOiBnaXRodWJBcHBXZWJob29rU2VjcmV0LFxuICAgICAgfSxcbiAgICAgIHJvbGU6IGxhbWJkYVJvbGUsXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBGdW5jdGlvbiBVUkxcbiAgICBjb25zdCBmdW5jdGlvblVybCA9IGNsaVJlc3RBcGlMYW1iZGEuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IGxhbWJkYS5GdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsIC8vIFB1YmxpYyBhY2Nlc3MgKGNhbiBiZSBzZWN1cmVkIGxhdGVyKVxuICAgICAgY29yczoge1xuICAgICAgICBhbGxvd2VkT3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtsYW1iZGEuSHR0cE1ldGhvZC5HRVQsIGxhbWJkYS5IdHRwTWV0aG9kLlBPU1RdLFxuICAgICAgICBhbGxvd2VkSGVhZGVyczogW1wiKlwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkNsaVJlc3RBcGlVcmxcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uVXJsLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNMSSBSRVNUIEFQSSBGdW5jdGlvbiBVUkxcIixcbiAgICB9KTtcbiAgfVxufVxuIl19
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlwZXJwLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2h5cGVycC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFFbkMseURBQTJDO0FBQzNDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MseURBQTJDO0FBQzNDLG1FQUFxRDtBQUNyRCx1REFBeUM7QUFDekMsK0RBQWlEO0FBQ2pELHFFQUE2RTtBQUM3RSwyREFBNkM7QUFDN0MseURBQTJDO0FBQzNDLCtEQUFpRDtBQUNqRCx3RUFBMEQ7QUFFMUQsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUV6QixNQUFhLFdBQVksU0FBUSxHQUFHLENBQUMsS0FBSztJQUN4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLGdGQUFnRjtRQUNoRiw2RUFBNkU7UUFDN0Usd0RBQXdEO1FBQ3hELE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBVSxFQUFFO1lBQ25ELG9GQUFvRjtZQUNwRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDakUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFDRCw4RUFBOEU7WUFDOUUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDO1lB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QUFFLFdBQVcsQ0FBQyxHQUFHO1lBQ3RCLFdBQVcsRUFBRSwyQkFBMkI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBdG5CRCxrQ0FzbkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3JcIjtcbmltcG9ydCAqIGFzIGVmcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVmc1wiO1xuaW1wb3J0ICogYXMgZHluYW1vZGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBOb2RlanNGdW5jdGlvbiwgT3V0cHV0Rm9ybWF0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0c1wiO1xuaW1wb3J0ICogYXMgczNkZXBsb3kgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcblxuZXhwb3J0IGNsYXNzIEh5cGVycFN0YWNrIGV4dGVuZHMgY2RrLlN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBjZGsuU3RhY2tQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8gUmVzb2x2ZSBMYW1iZGEgZW50cnkgcGF0aHMgLSBoYW5kbGUgYm90aCBkZXZlbG9wbWVudCBhbmQgbnBtIHBhY2thZ2UgY29udGV4dHNcbiAgICAvLyBXaGVuIGNvbXBpbGVkLCBfX2Rpcm5hbWUgaXMgZGlzdC9saWIvLCBzbyB3ZSBuZWVkIHRvIGdvIHVwIHRvIHBhY2thZ2Ugcm9vdFxuICAgIC8vIFdoZW4gaW4gbnBtIHBhY2thZ2UsIHdlIG5lZWQgdG8gZmluZCB0aGUgcGFja2FnZSByb290XG4gICAgY29uc3QgZ2V0TGFtYmRhUGF0aCA9IChsYW1iZGFQYXRoOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgLy8gVHJ5IHJlbGF0aXZlIHRvIF9fZGlybmFtZSBmaXJzdCAoZm9yIG5wbSBwYWNrYWdlIC0gZ28gdXAgMiBsZXZlbHMgZnJvbSBkaXN0L2xpYi8pXG4gICAgICBjb25zdCBucG1QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi8uLi9sYW1iZGFcIiwgbGFtYmRhUGF0aCk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhucG1QYXRoKSkge1xuICAgICAgICByZXR1cm4gbnBtUGF0aDtcbiAgICAgIH1cbiAgICAgIC8vIFRyeSByZWxhdGl2ZSB0byBfX2Rpcm5hbWUgd2l0aCBvbmUgbGVzcyBsZXZlbCAoZm9yIGRldmVsb3BtZW50IC0gZnJvbSBsaWIvKVxuICAgICAgY29uc3QgZGV2UGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vbGFtYmRhXCIsIGxhbWJkYVBhdGgpO1xuICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoZGV2UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGRldlBhdGg7XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjazogdHJ5IHRvIGZpbmQgcGFja2FnZSByb290IGJ5IGxvb2tpbmcgZm9yIHBhY2thZ2UuanNvblxuICAgICAgbGV0IGN1cnJlbnREaXIgPSBfX2Rpcm5hbWU7XG4gICAgICB3aGlsZSAoY3VycmVudERpciAhPT0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGxhbWJkYUZ1bGxQYXRoID0gcGF0aC5qb2luKGN1cnJlbnREaXIsIFwibGFtYmRhXCIsIGxhbWJkYVBhdGgpO1xuICAgICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGxhbWJkYUZ1bGxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhbWJkYUZ1bGxQYXRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgfVxuICAgICAgLy8gTGFzdCByZXNvcnQ6IHJldHVybiB0aGUgcGF0aCByZWxhdGl2ZSB0byBfX2Rpcm5hbWUgKHdpbGwgZmFpbCBpZiBmaWxlIGRvZXNuJ3QgZXhpc3QpXG4gICAgICByZXR1cm4gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9sYW1iZGFcIiwgbGFtYmRhUGF0aCk7XG4gICAgfTtcblxuICAgIC8vIEdldCBHaXRIdWIgQXBwIGNvbmZpZ3VyYXRpb24gZnJvbSBDREsgY29udGV4dFxuICAgIGNvbnN0IGdpdGh1YkFwcElkID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiZ2l0aHViQXBwSWRcIikgfHwgcHJvY2Vzcy5lbnYuR0lUSFVCX0FQUF9JRDtcbiAgICBjb25zdCBnaXRodWJBcHBXZWJob29rU2VjcmV0ID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwiZ2l0aHViQXBwV2ViaG9va1NlY3JldFwiKSB8fFxuICAgICAgcHJvY2Vzcy5lbnYuR0lUSFVCX0FQUF9XRUJIT09LX1NFQ1JFVDtcblxuICAgIGlmICghZ2l0aHViQXBwSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJHaXRIdWIgQXBwIElEIGlzIHJlcXVpcmVkLiBQcm92aWRlIGl0IHZpYSAtLWdpdGh1Yi1hcHAtaWQgb3IgQ0RLIGNvbnRleHQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFnaXRodWJBcHBXZWJob29rU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiR2l0SHViIEFwcCB3ZWJob29rIHNlY3JldCBpcyByZXF1aXJlZC4gUHJvdmlkZSBpdCB2aWEgLS1naXRodWItYXBwLXdlYmhvb2stc2VjcmV0IG9yIENESyBjb250ZXh0LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gVlBDIC0gTGFyZ2UgYWRkcmVzc2FibGUgVlBDIChQdWJsaWMgc3VibmV0cyBvbmx5IHRvIGF2b2lkIE5BVCBnYXRld2F5IGNvc3RzKVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdnBjID0gbmV3IGVjMi5WcGModGhpcywgXCJIeXBlcnBWcGNcIiwge1xuICAgICAgbWF4QXpzOiAzLFxuICAgICAgaXBBZGRyZXNzZXM6IGVjMi5JcEFkZHJlc3Nlcy5jaWRyKFwiMTAuMC4wLjAvMTZcIiksXG4gICAgICBuYXRHYXRld2F5czogMCwgLy8gTm8gTkFUIGdhdGV3YXlzIC0gdXNpbmcgcHVibGljIHN1Ym5ldHMgb25seVxuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgY2lkck1hc2s6IDIwLFxuICAgICAgICAgIG5hbWU6IFwiUHVibGljXCIsXG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUzMgQnVja2V0IGZvciBhcnRpZmFjdHMgKEdpdEh1YiBBcHAgUEVNIGtleSlcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIExldCBDREsgZ2VuZXJhdGUgYSB1bmlxdWUgYnVja2V0IG5hbWUgdG8gYXZvaWQgZ2xvYmFsIG5hbWluZyBjb25mbGljdHNcbiAgICAvLyBUaGUgYnVja2V0IG5hbWUgd2lsbCBiZSBhdmFpbGFibGUgdmlhIHN0YWNrIG91dHB1dHNcbiAgICBjb25zdCBhcnRpZmFjdHNCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsIFwiSHlwZXJwQXJ0aWZhY3RzQnVja2V0XCIsIHtcbiAgICAgIC8vIFJlbW92ZWQgZml4ZWQgYnVja2V0TmFtZSB0byBhdm9pZCBnbG9iYWwgbmFtaW5nIGNvbmZsaWN0c1xuICAgICAgLy8gQ0RLIHdpbGwgZ2VuZXJhdGU6IGh5cGVycHN0YWNrLWh5cGVycGFydGlmYWN0c2J1Y2tldC08cmFuZG9tPlxuICAgICAgdmVyc2lvbmVkOiB0cnVlLFxuICAgICAgZW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgICAgYmxvY2tQdWJsaWNBY2Nlc3M6IHMzLkJsb2NrUHVibGljQWNjZXNzLkJMT0NLX0FMTCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiBmYWxzZSwgLy8gS2VlcCBvYmplY3RzIHdoZW4gc3RhY2sgaXMgZGVsZXRlZFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBEeW5hbW9EQiBUYWJsZSB3aXRoIEdTSVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdGFibGUgPSBuZXcgZHluYW1vZGIuVGFibGUodGhpcywgXCJIeXBlcnBUYWJsZVwiLCB7XG4gICAgICB0YWJsZU5hbWU6IFwiaHlwZXJwXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJQS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcIlNLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3kuUkVUQUlOLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIEdTSTEgZm9yIHF1ZXJ5aW5nIHdvcmtmbG93cywgd29ya2Zsb3cgcnVucywgZXRjLlxuICAgIHRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHtcbiAgICAgIGluZGV4TmFtZTogXCJHU0kxXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJHU0kxLVBLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiR1NJMS1TS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgIH0pO1xuXG4gICAgLy8gR1NJMiBmb3IgcXVlcnlpbmcgd29ya2Zsb3cgcnVucyBieSBjb21taXQgaGFzaFxuICAgIHRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHtcbiAgICAgIGluZGV4TmFtZTogXCJHU0kyXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJHU0kyLVBLXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiR1NJMi1TS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgIH0pO1xuXG4gICAgLy8gR1NJMyBmb3IgcXVlcnlpbmcgYWxsIHdvcmtmbG93IHJ1bnMgc29ydGVkIGJ5IGNyZWF0aW9uIHRpbWVcbiAgICB0YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleCh7XG4gICAgICBpbmRleE5hbWU6IFwiR1NJM1wiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiR1NJMy1QS1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcIkdTSTMtU0tcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHByb2plY3Rpb25UeXBlOiBkeW5hbW9kYi5Qcm9qZWN0aW9uVHlwZS5JTkNMVURFLFxuICAgICAgbm9uS2V5QXR0cmlidXRlczogW1xuICAgICAgICBcIndvcmtmbG93TmFtZVwiLFxuICAgICAgICBcInN0YXR1c1wiLFxuICAgICAgICBcImNyZWF0ZWRBdFwiLFxuICAgICAgICBcInVwZGF0ZWRBdFwiLFxuICAgICAgICBcImVudGl0eUlkXCIsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFQ1IgUmVwb3NpdG9yeVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZWNyUmVwb3NpdG9yeSA9IG5ldyBlY3IuUmVwb3NpdG9yeSh0aGlzLCBcIkh5cGVycFJlcG9zaXRvcnlcIiwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6IFwiaHlwZXJwLTFcIixcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGltYWdlU2Nhbk9uUHVzaDogZmFsc2UsXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiS2VlcCBsYXN0IDEwMCBpbWFnZXNcIixcbiAgICAgICAgICBtYXhJbWFnZUNvdW50OiAxMDAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBFQ1MgQ2x1c3RlclxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgY2x1c3RlciA9IG5ldyBlY3MuQ2x1c3Rlcih0aGlzLCBcIkh5cGVycENsdXN0ZXJcIiwge1xuICAgICAgY2x1c3Rlck5hbWU6IFwiaHlwZXJwLTFcIixcbiAgICAgIHZwYzogdnBjLFxuICAgICAgY29udGFpbmVySW5zaWdodHM6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVGUyBGaWxlIFN5c3RlbSBmb3IgYXJ0aWZhY3Qgc2hhcmluZ1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgZmlsZVN5c3RlbSA9IG5ldyBlZnMuRmlsZVN5c3RlbSh0aGlzLCBcIkh5cGVycEVmc1wiLCB7XG4gICAgICB2cGM6IHZwYyxcbiAgICAgIGVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIGxpZmVjeWNsZVBvbGljeTogZWZzLkxpZmVjeWNsZVBvbGljeS5BRlRFUl8xNF9EQVlTLFxuICAgICAgcGVyZm9ybWFuY2VNb2RlOiBlZnMuUGVyZm9ybWFuY2VNb2RlLkdFTkVSQUxfUFVSUE9TRSxcbiAgICAgIHRocm91Z2hwdXRNb2RlOiBlZnMuVGhyb3VnaHB1dE1vZGUuRUxBU1RJQyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICAgIGZpbGVTeXN0ZW1Qb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudE1vdW50XCIsXG4gICAgICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50V3JpdGVcIixcbiAgICAgICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRSb290QWNjZXNzXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcHJpbmNpcGFsczogW25ldyBpYW0uQW55UHJpbmNpcGFsKCldLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgICBCb29sOiB7XG4gICAgICAgICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpBY2Nlc3NlZFZpYU1vdW50VGFyZ2V0XCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gU2VjdXJpdHkgZ3JvdXAgZm9yIEVDUyB0YXNrc1xuICAgIGNvbnN0IGVjc1Rhc2tTZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiRWNzVGFza1NlY3VyaXR5R3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlNlY3VyaXR5IGdyb3VwIGZvciBFQ1MgdGFza3NcIixcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQWxsb3cgRUNTIHRhc2tzIHRvIGNvbm5lY3QgdG8gRUZTIG9uIE5GUyBwb3J0XG4gICAgZmlsZVN5c3RlbS5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICBlY3NUYXNrU2VjdXJpdHlHcm91cCxcbiAgICAgIGVjMi5Qb3J0LnRjcCgyMDQ5KSxcbiAgICAgIFwiQWxsb3cgTkZTIGZyb20gRUNTIHRhc2tzXCJcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBDbG91ZFdhdGNoIExvZ3NcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGVjc0xvZ0dyb3VwID0gbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJIeXBlcnBFY3NMb2dHcm91cFwiLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IFwiL2h5cGVycFwiLFxuICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBJQU0gUm9sZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLy8gRUNTIFRhc2sgRXhlY3V0aW9uIFJvbGVcbiAgICBjb25zdCBlY3NUYXNrRXhlY3V0aW9uUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkVjc1Rhc2tFeGVjdXRpb25Sb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5XCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBFQ1IgcGVybWlzc2lvbnNcbiAgICBlY3JSZXBvc2l0b3J5LmdyYW50UHVsbChlY3NUYXNrRXhlY3V0aW9uUm9sZSk7XG5cbiAgICAvLyBFQ1MgVGFzayBSb2xlIChmb3IgY29udGFpbmVycylcbiAgICBjb25zdCBlY3NUYXNrUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkVjc1Rhc2tSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWNzLXRhc2tzLmFtYXpvbmF3cy5jb21cIiksXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBFRlMgcGVybWlzc2lvbnMgdG8gdGFzayByb2xlXG4gICAgZWNzVGFza1JvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImVsYXN0aWNmaWxlc3lzdGVtOkNsaWVudE1vdW50XCIsXG4gICAgICAgICAgXCJlbGFzdGljZmlsZXN5c3RlbTpDbGllbnRXcml0ZVwiLFxuICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06Q2xpZW50Um9vdEFjY2Vzc1wiLFxuICAgICAgICAgIFwiZWxhc3RpY2ZpbGVzeXN0ZW06RGVzY3JpYmVNb3VudFRhcmdldHNcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbZmlsZVN5c3RlbS5maWxlU3lzdGVtQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IEVDUiBwdXNoL3B1bGwgZm9yIGltYWdlIGJ1aWxkc1xuICAgIGVjclJlcG9zaXRvcnkuZ3JhbnRQdWxsUHVzaChlY3NUYXNrUm9sZSk7XG5cbiAgICAvLyBHcmFudCBTMyBhY2Nlc3MgZm9yIHJlYWRpbmcgcmVwb3NpdG9yeSBjb250ZW50IGFuZCB1cGxvYWRpbmcgYXJ0aWZhY3RzXG4gICAgZWNzVGFza1JvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdFwiLCBcInMzOkxpc3RCdWNrZXRcIiwgXCJzMzpQdXRPYmplY3RcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdyYW50IER5bmFtb0RCIHBlcm1pc3Npb25zIGZvciB1c2FnZSBjYWxjdWxhdG9yIHRhc2tzXG4gICAgdGFibGUuZ3JhbnRSZWFkV3JpdGVEYXRhKGVjc1Rhc2tSb2xlKTtcbiAgICAvLyBFeHBsaWNpdGx5IGdyYW50IFVwZGF0ZUl0ZW0gcGVybWlzc2lvbiB0byBlbnN1cmUgdXNhZ2UgY2FsY3VsYXRvciBjYW4gdXBkYXRlIGl0ZW1zXG4gICAgZWNzVGFza1JvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImR5bmFtb2RiOkdldEl0ZW1cIixcbiAgICAgICAgICBcImR5bmFtb2RiOlB1dEl0ZW1cIixcbiAgICAgICAgICBcImR5bmFtb2RiOlVwZGF0ZUl0ZW1cIixcbiAgICAgICAgICBcImR5bmFtb2RiOlF1ZXJ5XCIsXG4gICAgICAgICAgXCJkeW5hbW9kYjpTY2FuXCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW3RhYmxlLnRhYmxlQXJuLCBgJHt0YWJsZS50YWJsZUFybn0vaW5kZXgvKmBdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBMYW1iZGEgRXhlY3V0aW9uIFJvbGVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGxhbWJkYVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJIeXBlcnBMYW1iZGFSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGVcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBHcmFudCBEeW5hbW9EQiBwZXJtaXNzaW9uc1xuICAgIHRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShsYW1iZGFSb2xlKTtcblxuICAgIC8vIEdyYW50IFMzIHBlcm1pc3Npb25zIChyZWFkIGFuZCB3cml0ZSBmb3IgZG93bmxvYWRhYmxlIGFydGlmYWN0cylcbiAgICBhcnRpZmFjdHNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUobGFtYmRhUm9sZSk7XG5cbiAgICAvLyBHcmFudCBDbG91ZFdhdGNoIExvZ3MgcGVybWlzc2lvbnNcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJsb2dzOkdldExvZ0V2ZW50c1wiLCBcImxvZ3M6RGVzY3JpYmVMb2dTdHJlYW1zXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBFQ1MgcGVybWlzc2lvbnMgZm9yIGRvd25sb2FkYWJsZSBjcmVhdG9yIHRhc2tzXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWNzOlJlZ2lzdGVyVGFza0RlZmluaXRpb25cIixcbiAgICAgICAgICBcImVjczpSdW5UYXNrXCIsXG4gICAgICAgICAgXCJlY3M6RGVzY3JpYmVUYXNrc1wiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBFQ1MgcGVybWlzc2lvbnNcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJlY3M6UmVnaXN0ZXJUYXNrRGVmaW5pdGlvblwiLFxuICAgICAgICAgIFwiZWNzOlJ1blRhc2tcIixcbiAgICAgICAgICBcImVjczpEZXNjcmliZVRhc2tzXCIsXG4gICAgICAgICAgXCJlY3M6U3RvcFRhc2tcIixcbiAgICAgICAgICBcImVjczpMaXN0VGFza3NcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgSUFNIFBhc3NSb2xlIGZvciBFQ1NcbiAgICBsYW1iZGFSb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJpYW06UGFzc1JvbGVcIl0sXG4gICAgICAgIHJlc291cmNlczogW2Vjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sIGVjc1Rhc2tSb2xlLnJvbGVBcm5dLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gR3JhbnQgRUNSIHBlcm1pc3Npb25zXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWNyOkdldEF1dGhvcml6YXRpb25Ub2tlblwiLFxuICAgICAgICAgIFwiZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eVwiLFxuICAgICAgICAgIFwiZWNyOkdldERvd25sb2FkVXJsRm9yTGF5ZXJcIixcbiAgICAgICAgICBcImVjcjpCYXRjaEdldEltYWdlXCIsXG4gICAgICAgICAgXCJlY3I6QmF0Y2hEZWxldGVJbWFnZVwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBHcmFudCBMYW1iZGEgaW52b2tlIHBlcm1pc3Npb25zIChmb3IgRUZTIGNvbnRyb2xsZXIpXG4gICAgbGFtYmRhUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wibGFtYmRhOkludm9rZUZ1bmN0aW9uXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpsYW1iZGE6JHt0aGlzLnJlZ2lvbn06JHt0aGlzLmFjY291bnR9OmZ1bmN0aW9uOmh5cGVycC1lZnMtY29udHJvbGxlcmAsXG4gICAgICAgICAgYGFybjphd3M6bGFtYmRhOiR7dGhpcy5yZWdpb259OiR7dGhpcy5hY2NvdW50fTpmdW5jdGlvbjpoeXBlcnAtZWZzLWNvbnRyb2xsZXI6KmAsXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVGUyBDb250cm9sbGVyIExhbWJkYVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQ3JlYXRlIGFuIGFjY2VzcyBwb2ludCBmb3IgTGFtYmRhIHRvIG1vdW50IEVGU1xuICAgIC8vIE1vdW50IGF0IC9oeXBlcnAtYXJ0aWZhY3RzIHNvIExhbWJkYSBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5XG4gICAgY29uc3QgbGFtYmRhQWNjZXNzUG9pbnQgPSBuZXcgZWZzLkFjY2Vzc1BvaW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiTGFtYmRhRWZzQWNjZXNzUG9pbnRcIixcbiAgICAgIHtcbiAgICAgICAgZmlsZVN5c3RlbTogZmlsZVN5c3RlbSxcbiAgICAgICAgcGF0aDogXCIvaHlwZXJwLWFydGlmYWN0c1wiLFxuICAgICAgICBjcmVhdGVBY2w6IHtcbiAgICAgICAgICBvd25lckdpZDogXCIxMDAwXCIsXG4gICAgICAgICAgb3duZXJVaWQ6IFwiMTAwMFwiLFxuICAgICAgICAgIHBlcm1pc3Npb25zOiBcIjc3N1wiLCAvLyBNb3JlIHBlcm1pc3NpdmUgZm9yIExhbWJkYSB0byBjcmVhdGUgc3ViZGlyZWN0b3JpZXNcbiAgICAgICAgfSxcbiAgICAgICAgcG9zaXhVc2VyOiB7XG4gICAgICAgICAgdWlkOiBcIjEwMDBcIixcbiAgICAgICAgICBnaWQ6IFwiMTAwMFwiLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBlZnNDb250cm9sbGVyTGFtYmRhID0gbmV3IE5vZGVqc0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiSHlwZXJwRWZzQ29udHJvbGxlclwiLFxuICAgICAge1xuICAgICAgICBmdW5jdGlvbk5hbWU6IFwiaHlwZXJwLWVmcy1jb250cm9sbGVyXCIsXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJlZnMtY29udHJvbGxlci9pbmRleC50c1wiKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9LFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW2Vjc1Rhc2tTZWN1cml0eUdyb3VwXSxcbiAgICAgICAgYWxsb3dQdWJsaWNTdWJuZXQ6IHRydWUsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgRUZTX0ZJTEVfU1lTVEVNX0lEOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogbGFtYmRhUm9sZSxcbiAgICAgICAgZmlsZXN5c3RlbTogbGFtYmRhLkZpbGVTeXN0ZW0uZnJvbUVmc0FjY2Vzc1BvaW50KFxuICAgICAgICAgIGxhbWJkYUFjY2Vzc1BvaW50LFxuICAgICAgICAgIFwiL21udC9lZnNcIlxuICAgICAgICApLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIENvbGxlY3Qgc3VibmV0IElEcyBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBwdWJsaWNTdWJuZXRJZHMgPSB2cGMucHVibGljU3VibmV0c1xuICAgICAgLm1hcCgoc3VibmV0KSA9PiBzdWJuZXQuc3VibmV0SWQpXG4gICAgICAuam9pbihcIixcIik7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEdpdEh1YiBXZWJob29rIEhhbmRsZXIgTGFtYmRhXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCBnaXRodWJXZWJob29rSGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkh5cGVycEdpdGh1YldlYmhvb2tIYW5kbGVyXCIsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uTmFtZTogXCJoeXBlcnAtZ2l0aHViLXdlYmhvb2staGFuZGxlclwiLFxuICAgICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgICAgaGFuZGxlcjogXCJoYW5kbGVyXCIsXG4gICAgICAgIGVudHJ5OiBnZXRMYW1iZGFQYXRoKFwiZ2l0aHViLXdlYmhvb2staGFuZGxlci9pbmRleC50c1wiKSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgRFlOQU1PREJfVEFCTEVfTkFNRTogdGFibGUudGFibGVOYW1lLFxuICAgICAgICAgIFMzX0JVQ0tFVF9OQU1FOiBhcnRpZmFjdHNCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9BUk46IGNsdXN0ZXIuY2x1c3RlckFybixcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9OQU1FOiBjbHVzdGVyLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIEVDUl9SRVBPU0lUT1JZX1VSSTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJpLFxuICAgICAgICAgIEVDUl9SRVBPU0lUT1JZX05BTUU6IGVjclJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgICAgRUNTX1RBU0tfRVhFQ1VUSU9OX1JPTEVfQVJOOiBlY3NUYXNrRXhlY3V0aW9uUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIEVDU19UQVNLX1JPTEVfQVJOOiBlY3NUYXNrUm9sZS5yb2xlQXJuLFxuICAgICAgICAgIEVGU19GSUxFX1NZU1RFTV9JRDogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICAgICAgRUNTX1RBU0tfU0VDVVJJVFlfR1JPVVBfSUQ6IGVjc1Rhc2tTZWN1cml0eUdyb3VwLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgICBQVUJMSUNfU1VCTkVUX0lEUzogcHVibGljU3VibmV0SWRzLFxuICAgICAgICAgIEVGU19DT05UUk9MTEVSX0xBTUJEQV9BUk46IGVmc0NvbnRyb2xsZXJMYW1iZGEuZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgR0lUSFVCX0FQUF9JRDogZ2l0aHViQXBwSWQsXG4gICAgICAgICAgR0lUSFVCX0FQUF9XRUJIT09LX1NFQ1JFVDogZ2l0aHViQXBwV2ViaG9va1NlY3JldCxcbiAgICAgICAgICBBV1NfQUNDT1VOVF9JRDogdGhpcy5hY2NvdW50LFxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBsYW1iZGFSb2xlLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgRnVuY3Rpb24gVVJMIGZvciBHaXRIdWIgV2ViaG9vayBIYW5kbGVyXG4gICAgY29uc3Qgd2ViaG9va0Z1bmN0aW9uVXJsID0gZ2l0aHViV2ViaG9va0hhbmRsZXIuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IGxhbWJkYS5GdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsIC8vIFB1YmxpYyBhY2Nlc3MgZm9yIEdpdEh1YiB3ZWJob29rc1xuICAgICAgY29yczoge1xuICAgICAgICBhbGxvd2VkT3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtsYW1iZGEuSHR0cE1ldGhvZC5QT1NUXSxcbiAgICAgICAgYWxsb3dlZEhlYWRlcnM6IFtcIipcIl0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUYXNrIFN0YXRlIENoYW5nZSBIYW5kbGVyIExhbWJkYVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgY29uc3QgdGFza1N0YXRlQ2hhbmdlSGFuZGxlciA9IG5ldyBOb2RlanNGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBcIkh5cGVycFRhc2tTdGF0ZUNoYW5nZUhhbmRsZXJcIixcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBcImh5cGVycC10YXNrLXN0YXRlLWNoYW5nZS1oYW5kbGVyXCIsXG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgICBoYW5kbGVyOiBcImhhbmRsZXJcIixcbiAgICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJ0YXNrLXN0YXRlLWNoYW5nZS1oYW5kbGVyL2luZGV4LnRzXCIpLFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygyKSxcbiAgICAgICAgbWVtb3J5U2l6ZTogNTEyLFxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIERZTkFNT0RCX1RBQkxFX05BTUU6IHRhYmxlLnRhYmxlTmFtZSxcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9BUk46IGNsdXN0ZXIuY2x1c3RlckFybixcbiAgICAgICAgICBFQ1NfQ0xVU1RFUl9OQU1FOiBjbHVzdGVyLmNsdXN0ZXJOYW1lLFxuICAgICAgICAgIEVDUl9SRVBPU0lUT1JZX1VSSTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJpLFxuICAgICAgICAgIEVDU19UQVNLX0VYRUNVVElPTl9ST0xFX0FSTjogZWNzVGFza0V4ZWN1dGlvblJvbGUucm9sZUFybixcbiAgICAgICAgICBFQ1NfVEFTS19ST0xFX0FSTjogZWNzVGFza1JvbGUucm9sZUFybixcbiAgICAgICAgICBFRlNfRklMRV9TWVNURU1fSUQ6IGZpbGVTeXN0ZW0uZmlsZVN5c3RlbUlkLFxuICAgICAgICAgIEVDU19UQVNLX1NFQ1VSSVRZX0dST1VQX0lEOiBlY3NUYXNrU2VjdXJpdHlHcm91cC5zZWN1cml0eUdyb3VwSWQsXG4gICAgICAgICAgUFVCTElDX1NVQk5FVF9JRFM6IHB1YmxpY1N1Ym5ldElkcyxcbiAgICAgICAgICBFRlNfQ09OVFJPTExFUl9MQU1CREFfQVJOOiBlZnNDb250cm9sbGVyTGFtYmRhLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIEFXU19BQ0NPVU5UX0lEOiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgRkFSR0FURV9WQ1BVX1BSSUNFX1BFUl9IT1VSOiBcIjAuMDQwNDhcIixcbiAgICAgICAgICBGQVJHQVRFX0dCX1BSSUNFX1BFUl9IT1VSOiBcIjAuMDA0NDQ1XCIsXG4gICAgICAgICAgUzNfQlVDS0VUX05BTUU6IGFydGlmYWN0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIEdJVEhVQl9BUFBfSUQ6IGdpdGh1YkFwcElkLFxuICAgICAgICAgIERPV05MT0FEQUJMRV9DUkVBVE9SX0lNQUdFOlxuICAgICAgICAgICAgXCJwdWJsaWMuZWNyLmF3cy9iNmc5dDhmMS9kb3dubG9hZGFibGUtY3JlYXRvcjpsYXRlc3RcIixcbiAgICAgICAgICBVU0FHRV9DQUxDVUxBVE9SX0lNQUdFOlxuICAgICAgICAgICAgXCJwdWJsaWMuZWNyLmF3cy9iNmc5dDhmMS91c2FnZS1jYWxjdWxhdG9yOmxhdGVzdFwiLFxuICAgICAgICB9LFxuICAgICAgICByb2xlOiBsYW1iZGFSb2xlLFxuICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgIG1pbmlmeTogdHJ1ZSxcbiAgICAgICAgICBzb3VyY2VNYXA6IHRydWUsXG4gICAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEV2ZW50QnJpZGdlIFJ1bGUgZm9yIEVDUyBUYXNrIFN0YXRlIENoYW5nZXNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGVjc1Rhc2tTdGF0ZUNoYW5nZVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCJFY3NUYXNrU3RhdGVDaGFuZ2VSdWxlXCIsXG4gICAgICB7XG4gICAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAgIHNvdXJjZTogW1wiYXdzLmVjc1wiXSxcbiAgICAgICAgICBkZXRhaWxUeXBlOiBbXCJFQ1MgVGFzayBTdGF0ZSBDaGFuZ2VcIl0sXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBjbHVzdGVyQXJuOiBbY2x1c3Rlci5jbHVzdGVyQXJuXSxcbiAgICAgICAgICAgIGxhc3RTdGF0dXM6IFtcIlNUT1BQRURcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgZWNzVGFza1N0YXRlQ2hhbmdlUnVsZS5hZGRUYXJnZXQoXG4gICAgICBuZXcgdGFyZ2V0cy5MYW1iZGFGdW5jdGlvbih0YXNrU3RhdGVDaGFuZ2VIYW5kbGVyKVxuICAgICk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE91dHB1dHNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiVnBjSWRcIiwge1xuICAgICAgdmFsdWU6IHZwYy52cGNJZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlZQQyBJRFwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJDbHVzdGVyQXJuXCIsIHtcbiAgICAgIHZhbHVlOiBjbHVzdGVyLmNsdXN0ZXJBcm4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJFQ1MgQ2x1c3RlciBBUk5cIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiRWNyUmVwb3NpdG9yeVVyaVwiLCB7XG4gICAgICB2YWx1ZTogZWNyUmVwb3NpdG9yeS5yZXBvc2l0b3J5VXJpLFxuICAgICAgZGVzY3JpcHRpb246IFwiRUNSIFJlcG9zaXRvcnkgVVJJXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkR5bmFtb0RiVGFibGVOYW1lXCIsIHtcbiAgICAgIHZhbHVlOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJEeW5hbW9EQiBUYWJsZSBOYW1lXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlMzQnVja2V0TmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYXJ0aWZhY3RzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJTMyBBcnRpZmFjdHMgQnVja2V0IE5hbWVcIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiRWZzRmlsZVN5c3RlbUlkXCIsIHtcbiAgICAgIHZhbHVlOiBmaWxlU3lzdGVtLmZpbGVTeXN0ZW1JZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkVGUyBGaWxlIFN5c3RlbSBJRFwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJHaXRodWJXZWJob29rSGFuZGxlckFyblwiLCB7XG4gICAgICB2YWx1ZTogZ2l0aHViV2ViaG9va0hhbmRsZXIuZnVuY3Rpb25Bcm4sXG4gICAgICBkZXNjcmlwdGlvbjogXCJHaXRIdWIgV2ViaG9vayBIYW5kbGVyIExhbWJkYSBBUk5cIixcbiAgICB9KTtcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsIFwiR2l0aHViV2ViaG9va0hhbmRsZXJVcmxcIiwge1xuICAgICAgdmFsdWU6IHdlYmhvb2tGdW5jdGlvblVybC51cmwsXG4gICAgICBkZXNjcmlwdGlvbjogXCJHaXRIdWIgV2ViaG9vayBIYW5kbGVyIEZ1bmN0aW9uIFVSTFwiLFxuICAgIH0pO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgXCJUYXNrU3RhdGVDaGFuZ2VIYW5kbGVyQXJuXCIsIHtcbiAgICAgIHZhbHVlOiB0YXNrU3RhdGVDaGFuZ2VIYW5kbGVyLmZ1bmN0aW9uQXJuLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGFzayBTdGF0ZSBDaGFuZ2UgSGFuZGxlciBMYW1iZGEgQVJOXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIlB1YmxpY1N1Ym5ldElkc1wiLCB7XG4gICAgICB2YWx1ZTogcHVibGljU3VibmV0SWRzLFxuICAgICAgZGVzY3JpcHRpb246IFwiUHVibGljIFN1Ym5ldCBJRHNcIixcbiAgICB9KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gUkVTVCBBUEkgTGFtYmRhIGZvciBDTElcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGNvbnN0IGNsaVJlc3RBcGlMYW1iZGEgPSBuZXcgTm9kZWpzRnVuY3Rpb24odGhpcywgXCJIeXBlcnBDbGlSZXN0QXBpXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJoeXBlcnAtY2xpLXJlc3QtYXBpXCIsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6IFwiaGFuZGxlclwiLFxuICAgICAgZW50cnk6IGdldExhbWJkYVBhdGgoXCJjbGktcmVzdC1hcGkvaW5kZXgudHNcIiksXG4gICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBtZW1vcnlTaXplOiA1MTIsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBEWU5BTU9EQl9UQUJMRV9OQU1FOiB0YWJsZS50YWJsZU5hbWUsXG4gICAgICAgIEVDU19DTFVTVEVSX05BTUU6IGNsdXN0ZXIuY2x1c3Rlck5hbWUsXG4gICAgICAgIEVGU19GSUxFX1NZU1RFTV9JRDogZmlsZVN5c3RlbS5maWxlU3lzdGVtSWQsXG4gICAgICAgIFBVQkxJQ19TVUJORVRfSURTOiB2cGMucHVibGljU3VibmV0cy5tYXAoKHMpID0+IHMuc3VibmV0SWQpLmpvaW4oXCIsXCIpLFxuICAgICAgICBFQ1NfVEFTS19TRUNVUklUWV9HUk9VUF9JRDogZWNzVGFza1NlY3VyaXR5R3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICBFQ1NfVEFTS19FWEVDVVRJT05fUk9MRV9BUk46IGVjc1Rhc2tFeGVjdXRpb25Sb2xlLnJvbGVBcm4sXG4gICAgICAgIEVDU19UQVNLX1JPTEVfQVJOOiBlY3NUYXNrUm9sZS5yb2xlQXJuLFxuICAgICAgICBTM19CVUNLRVRfTkFNRTogYXJ0aWZhY3RzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIERPV05MT0FEQUJMRV9DUkVBVE9SX0lNQUdFOlxuICAgICAgICAgIFwicHVibGljLmVjci5hd3MvYjZnOXQ4ZjEvZG93bmxvYWRhYmxlLWNyZWF0b3I6bGF0ZXN0XCIsXG4gICAgICAgIEdJVEhVQl9BUFBfSUQ6IGdpdGh1YkFwcElkLFxuICAgICAgICBHSVRIVUJfQVBQX1dFQkhPT0tfU0VDUkVUOiBnaXRodWJBcHBXZWJob29rU2VjcmV0LFxuICAgICAgfSxcbiAgICAgIHJvbGU6IGxhbWJkYVJvbGUsXG4gICAgICBidW5kbGluZzoge1xuICAgICAgICBtaW5pZnk6IHRydWUsXG4gICAgICAgIHNvdXJjZU1hcDogdHJ1ZSxcbiAgICAgICAgZm9ybWF0OiBPdXRwdXRGb3JtYXQuQ0pTLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBGdW5jdGlvbiBVUkxcbiAgICBjb25zdCBmdW5jdGlvblVybCA9IGNsaVJlc3RBcGlMYW1iZGEuYWRkRnVuY3Rpb25Vcmwoe1xuICAgICAgYXV0aFR5cGU6IGxhbWJkYS5GdW5jdGlvblVybEF1dGhUeXBlLk5PTkUsIC8vIFB1YmxpYyBhY2Nlc3MgKGNhbiBiZSBzZWN1cmVkIGxhdGVyKVxuICAgICAgY29yczoge1xuICAgICAgICBhbGxvd2VkT3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFtsYW1iZGEuSHR0cE1ldGhvZC5HRVQsIGxhbWJkYS5IdHRwTWV0aG9kLlBPU1RdLFxuICAgICAgICBhbGxvd2VkSGVhZGVyczogW1wiKlwiXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCBcIkNsaVJlc3RBcGlVcmxcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uVXJsLnVybCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkNMSSBSRVNUIEFQSSBGdW5jdGlvbiBVUkxcIixcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -14,11 +14,42 @@ import * as events from "aws-cdk-lib/aws-events";
14
14
  import * as targets from "aws-cdk-lib/aws-events-targets";
15
15
  import * as s3deploy from "aws-cdk-lib/aws-s3-deployment";
16
16
  import * as path from "path";
17
+ import * as fs from "fs";
17
18
 
18
19
  export class HyperpStack extends cdk.Stack {
19
20
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
20
21
  super(scope, id, props);
21
22
 
23
+ // Resolve Lambda entry paths - handle both development and npm package contexts
24
+ // When compiled, __dirname is dist/lib/, so we need to go up to package root
25
+ // When in npm package, we need to find the package root
26
+ const getLambdaPath = (lambdaPath: string): string => {
27
+ // Try relative to __dirname first (for npm package - go up 2 levels from dist/lib/)
28
+ const npmPath = path.join(__dirname, "../../lambda", lambdaPath);
29
+ if (fs.existsSync(npmPath)) {
30
+ return npmPath;
31
+ }
32
+ // Try relative to __dirname with one less level (for development - from lib/)
33
+ const devPath = path.join(__dirname, "../lambda", lambdaPath);
34
+ if (fs.existsSync(devPath)) {
35
+ return devPath;
36
+ }
37
+ // Fallback: try to find package root by looking for package.json
38
+ let currentDir = __dirname;
39
+ while (currentDir !== path.dirname(currentDir)) {
40
+ const packageJsonPath = path.join(currentDir, "package.json");
41
+ if (fs.existsSync(packageJsonPath)) {
42
+ const lambdaFullPath = path.join(currentDir, "lambda", lambdaPath);
43
+ if (fs.existsSync(lambdaFullPath)) {
44
+ return lambdaFullPath;
45
+ }
46
+ }
47
+ currentDir = path.dirname(currentDir);
48
+ }
49
+ // Last resort: return the path relative to __dirname (will fail if file doesn't exist)
50
+ return path.join(__dirname, "../lambda", lambdaPath);
51
+ };
52
+
22
53
  // Get GitHub App configuration from CDK context
23
54
  const githubAppId =
24
55
  this.node.tryGetContext("githubAppId") || process.env.GITHUB_APP_ID;
@@ -371,7 +402,7 @@ export class HyperpStack extends cdk.Stack {
371
402
  functionName: "hyperp-efs-controller",
372
403
  runtime: lambda.Runtime.NODEJS_20_X,
373
404
  handler: "handler",
374
- entry: path.join(__dirname, "../lambda/efs-controller/index.ts"),
405
+ entry: getLambdaPath("efs-controller/index.ts"),
375
406
  timeout: cdk.Duration.seconds(30),
376
407
  memorySize: 512,
377
408
  vpc: vpc,
@@ -411,10 +442,7 @@ export class HyperpStack extends cdk.Stack {
411
442
  functionName: "hyperp-github-webhook-handler",
412
443
  runtime: lambda.Runtime.NODEJS_20_X,
413
444
  handler: "handler",
414
- entry: path.join(
415
- __dirname,
416
- "../lambda/github-webhook-handler/index.ts"
417
- ),
445
+ entry: getLambdaPath("github-webhook-handler/index.ts"),
418
446
  timeout: cdk.Duration.minutes(5),
419
447
  memorySize: 1024,
420
448
  environment: {
@@ -463,10 +491,7 @@ export class HyperpStack extends cdk.Stack {
463
491
  functionName: "hyperp-task-state-change-handler",
464
492
  runtime: lambda.Runtime.NODEJS_20_X,
465
493
  handler: "handler",
466
- entry: path.join(
467
- __dirname,
468
- "../lambda/task-state-change-handler/index.ts"
469
- ),
494
+ entry: getLambdaPath("task-state-change-handler/index.ts"),
470
495
  timeout: cdk.Duration.minutes(2),
471
496
  memorySize: 512,
472
497
  environment: {
@@ -581,7 +606,7 @@ export class HyperpStack extends cdk.Stack {
581
606
  functionName: "hyperp-cli-rest-api",
582
607
  runtime: lambda.Runtime.NODEJS_20_X,
583
608
  handler: "handler",
584
- entry: path.join(__dirname, "../lambda/cli-rest-api/index.ts"),
609
+ entry: getLambdaPath("cli-rest-api/index.ts"),
585
610
  timeout: cdk.Duration.seconds(30),
586
611
  memorySize: 512,
587
612
  environment: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hyperp",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Fully automated servereless compute platform on AWS",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -52,6 +52,7 @@
52
52
  "@aws-sdk/client-s3": "^3.700.0",
53
53
  "@aws-sdk/lib-dynamodb": "^3.700.0",
54
54
  "@aws-sdk/s3-request-presigner": "^3.700.0",
55
+ "@types/node": "22.19.3",
55
56
  "aws-cdk-lib": "^2.170.0",
56
57
  "axios": "^1.7.9",
57
58
  "commander": "^12.0.0",
@@ -64,7 +65,6 @@
64
65
  "devDependencies": {
65
66
  "@types/aws-lambda": "^8.10.145",
66
67
  "@types/jsonwebtoken": "^9.0.7",
67
- "@types/node": "22.19.3",
68
68
  "aws-cdk": "^2.170.0",
69
69
  "typescript": "^5.7.2"
70
70
  }