deployable-awscdk-app-ts 0.1.798 → 0.1.800

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/.jsii CHANGED
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "constructs": "^10.6.0",
14
- "projen": "^0.99.38"
14
+ "projen": "^0.99.42"
15
15
  },
16
16
  "dependencyClosure": {
17
17
  "constructs": {
@@ -1102,7 +1102,7 @@
1102
1102
  },
1103
1103
  "locationInModule": {
1104
1104
  "filename": "src/steps.ts",
1105
- "line": 778
1105
+ "line": 788
1106
1106
  },
1107
1107
  "name": "getDiffAnnotationJobForEnvironment",
1108
1108
  "parameters": [
@@ -1140,7 +1140,7 @@
1140
1140
  },
1141
1141
  "locationInModule": {
1142
1142
  "filename": "src/steps.ts",
1143
- "line": 747
1143
+ "line": 755
1144
1144
  },
1145
1145
  "name": "getFormattedDiffAnnotationCommentStepForEnvironment",
1146
1146
  "parameters": [
@@ -1591,7 +1591,7 @@
1591
1591
  "immutable": true,
1592
1592
  "locationInModule": {
1593
1593
  "filename": "src/steps.ts",
1594
- "line": 828
1594
+ "line": 844
1595
1595
  },
1596
1596
  "name": "diffAnnotationJobs",
1597
1597
  "type": {
@@ -1988,6 +1988,6 @@
1988
1988
  "symbolId": "src/types:EnvironmentOptions"
1989
1989
  }
1990
1990
  },
1991
- "version": "0.1.798",
1992
- "fingerprint": "C4EJdTjH9UXBjTCgt/AKs+JTF8vU6R7yUlR6HJp+AdA="
1991
+ "version": "0.1.800",
1992
+ "fingerprint": "Na6NEsVIQglLJuTYkMpVlQ1d20NGoXotoB1Zc14V16A="
1993
1993
  }
package/API.md CHANGED
@@ -3081,7 +3081,7 @@ public readonly pnpmVersion: string;
3081
3081
  ```
3082
3082
 
3083
3083
  - *Type:* string
3084
- - *Default:* "9"
3084
+ - *Default:* "10.33.0"
3085
3085
 
3086
3086
  The version of PNPM to use if using PNPM as a package manager.
3087
3087
 
package/lib/index.js CHANGED
@@ -222,5 +222,5 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
222
222
  }
223
223
  exports.DeployableAwsCdkTypeScriptApp = DeployableAwsCdkTypeScriptApp;
224
224
  _a = JSII_RTTI_SYMBOL_1;
225
- DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.798" };
225
+ DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.800" };
226
226
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBNEQ7QUFFNUQsbUNBQW9FO0FBQ3BFLG1DQUF3TTtBQUN4TSxtQ0FBOEM7QUFFOUMsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUNqQywwQ0FBd0I7QUFFeEIsTUFBYSw2QkFBOEIsU0FBUSxlQUFNLENBQUMsbUJBQW1CO0lBRTNFOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRSxPQUFPLENBQUMsVUFBVSxDQUNoQixzQkFBc0IsRUFDdEIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUVyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELFVBQVUsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUN4RCxVQUFVLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDbkYsVUFBVSxDQUFDLElBQUksQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQ2pFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMkRBQTJELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEs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QUcsV0FBVztnQkFDZCx1QkFBdUIsRUFBRSxNQUFNO2FBQ2hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sYUFBYTtRQUVuQixNQUFNLFdBQVcsR0FBRyxJQUFJLGlEQUF5QyxDQUFDLElBQUksRUFBRTtZQUN0RSxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVk7WUFDcEQscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUI7WUFDMUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0I7WUFDN0QsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDbkMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtTQUN0RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVDQUF1QyxDQUFDLHVCQUEwRDtRQUN2RyxpREFBeUMsQ0FBQyx5Q0FBeUMsQ0FDakYsSUFBSSxDQUFDLGFBQWEsRUFDbEIsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQzs7QUF2T0gsc0VBd09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c2NkaywgU291cmNlQ29kZSwgVGFzaywgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0T3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB9IGZyb20gJy4vc3RlcHMnO1xuaW1wb3J0IHsgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBEaWZmT3V0cHV0T3B0aW9ucywgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zLCBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldE1ham9yTm9kZVZlcnNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RlcHMnO1xuXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHAgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBkaWZmIG91dHB1dCBpcyBlbmFibGVkLCBhZGRzIGEgc2NyaXB0IGFuZCBhIGpvYiBzdGVwIHRvIGdlbmVyYXRlIHRoZSBDREsgZGlmZiBvdXRwdXQgdG8gYSBmaWxlIGluIGNkay5vdXRcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhZGREaWZmT3V0cHV0U2NyaXB0KHByb2plY3Q6IGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgcHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJyxcbiAgICAgICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJyxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oJ3NjcmlwdHMnLCAnZ2VuZXJhdGVEaWZmT3V0cHV0LnRzJyk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gbmV3IFNvdXJjZUNvZGUocHJvamVjdCwgZmlsZVBhdGgpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImltcG9ydCB7Y3JlYXRlV3JpdGVTdHJlYW19IGZyb20gJ2ZzJ1wiKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoXCJpbXBvcnQge2Zvcm1hdERpZmZlcmVuY2VzfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcIik7XG4gICAgc291cmNlQ29kZS5saW5lKFwiaW1wb3J0IHtUb29sa2l0fSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XCIpO1xuICAgIHNvdXJjZUNvZGUubGluZSgnJyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdjb25zdCBjZGsgPSBuZXcgVG9vbGtpdCh7fSk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCcnKTtcbiAgICBzb3VyY2VDb2RlLm9wZW4oJ2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKGBjb25zdCBjeCA9IGF3YWl0IGNkay5mcm9tQ2RrQXBwKCd0cy1ub2RlLXRyYW5zcGlsZS1vbmx5ICR7cGF0aC5wb3NpeC5qb2luKHByb2plY3Quc3JjZGlyLCBwcm9qZWN0LmFwcEVudHJ5cG9pbnQpfScpO2ApO1xuICAgIHNvdXJjZUNvZGUubGluZSgnY29uc3QgZGlmZnMgPSBhd2FpdCBjZGsuZGlmZihjeCwge30pOycpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKCcuL2Nkay5vdXQvZGlmZi5sb2cnKTtcIik7XG4gICAgc291cmNlQ29kZS5vcGVuKCdPYmplY3QuZW50cmllcyhkaWZmcykuZm9yRWFjaCgoW3N0YWNrTmFtZSwgZGlmZl0pID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3N0cmVhbS53cml0ZShgRGlmZmVyZW5jZSBmb3Igc3RhY2sgJHtzdGFja05hbWV9OlxcXFxuYCk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdmb3JtYXREaWZmZXJlbmNlcyhzdHJlYW0sIGRpZmYpOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30pOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30nKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJycpO1xuICAgIHNvdXJjZUNvZGUub3BlbignbWFpbigpLmNhdGNoKChlcnIpID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ2NvbnNvbGUuZXJyb3IoZXJyKTsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3Byb2Nlc3MuZXhpdCgxKTsnKTtcbiAgICBzb3VyY2VDb2RlLmNsb3NlKCd9KTsnKTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnZGlmZjpvdXRwdXQnLCB7XG4gICAgICBleGVjOiBgdHMtbm9kZSAtLXRyYW5zcGlsZS1vbmx5ICR7ZmlsZVBhdGh9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYXNrIHRvIGRlcGxveSB5b3VyIGFwcC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXBsb3lXb3JrZmxvd1Rhc2s6IFRhc2s7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lhYmxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlTnZtcmM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93Tm9kZVZlcnNpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZUFydGlmYWN0T3B0aW9ucz86IENvZGVBcnRpZmFjdE9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95Sm9iU3RyYXRlZ3k6IERlcGxveUpvYlN0cmF0ZWd5O1xuICBwcml2YXRlIHJlYWRvbmx5IGRpZmZPdXRwdXRPcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcERpZmZPdXRwdXRPcHRpb25zO1xuXG4gIHByb3RlY3RlZCBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuICBwcm90ZWN0ZWQgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgICBjb25zdCBkZXBsb3lhYmxlID0gb3B0aW9ucy5yZWxlYXNlID8/IHRydWU7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlbGVhc2U6IGRlcGxveWFibGUsXG4gICAgfSk7XG4gICAgdGhpcy5kZXBsb3lhYmxlID0gZGVwbG95YWJsZTtcbiAgICB0aGlzLmdlbmVyYXRlTnZtcmMgPSBvcHRpb25zLmdlbmVyYXRlTnZtcmMgPz8gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA9IG9wdGlvbnMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8/IGZhbHNlO1xuICAgIHRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbjtcbiAgICB0aGlzLmRlcGxveU9wdGlvbnMgPSBvcHRpb25zLmRlcGxveU9wdGlvbnMgPz8geyBlbnZpcm9ubWVudHM6IFtdIH07XG4gICAgdGhpcy5jb2RlQXJ0aWZhY3RPcHRpb25zID0gb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zO1xuICAgIHRoaXMuZGVwbG95Sm9iU3RyYXRlZ3kgPSB0aGlzLmRlcGxveU9wdGlvbnMuam9iU3RyYXRlZ3kgPz8gRGVwbG95Sm9iU3RyYXRlZ3kuTUFUUklYO1xuICAgIHRoaXMuZGlmZk91dHB1dE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGU6IG9wdGlvbnMuZGlmZk91dHB1dD8uZW5hYmxlID8/IGZhbHNlLFxuICAgICAgYW5ub3RhdGVPbkJ1aWxkOiAob3B0aW9ucy5kaWZmT3V0cHV0Py5hbm5vdGF0ZU9uQnVpbGQgPz8gb3B0aW9ucy5kaWZmT3V0cHV0Py5lbmFibGUgPz8gZmFsc2UpLFxuICAgIH07XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2RlcGxveWFibGUtYXdzY2RrLWFwcC10cycpO1xuICAgIHRoaXMuYWRkRGlmZk91dHB1dFNjcmlwdCgpO1xuXG4gICAgaWYgKCFkZXBsb3lhYmxlKSB7dGhpcy5sb2dnZXIud2FybignVGhlIHByb2plY3QgaXMgZXhwbGljaXRseSBzZXQgdG8gbm90IHJlbGVhc2UsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMgJiYgIXRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbikge3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9ICcxNC4xOC4xJzt9XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ICYmIHRoaXMubWFqb3JOb2RlVmVyc2lvbiA+PSAxOCkge3Rocm93IG5ldyBFcnJvcihgbnBtQ29uZmlnRW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSB2ZXJzaW9uIDE4LiBDdXJyZW50IHZlcnNpb24gaXMgJHt0aGlzLm5vZGVWZXJzaW9ufWApO31cblxuICAgIGNvbnN0IGRlcGxveUFyZ3VtZW50ID0gdGhpcy5kZXBsb3lPcHRpb25zLnN0YWNrUGF0dGVybiA/IGAgJHt0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJufWA6ICcnO1xuICAgIGNvbnN0IGRlcGxveUNvbW1hbmQgPSBgY2RrIGRlcGxveSR7ZGVwbG95QXJndW1lbnR9ICR7dGhpcy5nZXRNZXRob2RBcmd1bWVudCgpfSAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJgO1xuICAgIGNvbnN0IHJlcXVpcmVkRW52ID0gdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ID8gW2BucG1fY29uZmlnXyR7dGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50fWBdIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVwbG95V29ya2Zsb3dUYXNrID0gdGhpcy5hZGRUYXNrKCdkZXBsb3k6d29ya2Zsb3cnLCB7XG4gICAgICByZXF1aXJlZEVudixcbiAgICAgIGV4ZWM6IGRlcGxveUNvbW1hbmQsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdkZXBsb3k6aG90c3dhcCcsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogYCR7ZGVwbG95Q29tbWFuZH0gLS1ob3Rzd2FwYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIG1ham9yIG5vZGUgdmVyc2lvbiBzZXQgZm9yIHRoZSBwcm9qZWN0XG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBnZXQgbWFqb3JOb2RlVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYWpvck5vZGVWZXJzaW9uKHRoaXMubm9kZVZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRob2RBcmd1bWVudCgpIHtcbiAgICByZXR1cm4gYC0tbWV0aG9kICR7dGhpcy5kZXBsb3lPcHRpb25zLm1ldGhvZCA/PyAnY2hhbmdlLXNldCd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZGlmZiBvdXRwdXQgaXMgZW5hYmxlZCwgYWRkcyBhIHNjcmlwdCBhbmQgYSBqb2Igc3RlcCB0byBnZW5lcmF0ZSB0aGUgQ0RLIGRpZmYgb3V0cHV0IHRvIGEgZmlsZSBpbiBjZGsub3V0XG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHByaXZhdGUgYWRkRGlmZk91dHB1dFNjcmlwdCgpIHtcbiAgICBpZiAoIXRoaXMuZGlmZk91dHB1dE9wdGlvbnMuZW5hYmxlKSB7cmV0dXJuO31cblxuICAgIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwLmFkZERpZmZPdXRwdXRTY3JpcHQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGRpZmYgb3V0cHV0IGlzIGVuYWJsZWQgd2l0aCBhbm5vdGF0aW9uLCBhZGRzIHRoZSBkaWZmIG91dHB1dCBnZW5lcmF0aW9uIHN0ZXAgYW5kIHRoZSBhbm5vdGF0aW9uIHN0ZXBzIHRvIHRoZSBidWlsZCBqb2JzXG4gICAqIFRoZSBhbm5vdGF0aW9uIHN0ZXBzIHdpbGwgYWRkIGEgY29tbWVudCB0byB0aGUgR2l0SHViIFBSIHdpdGggdGhlIGRpZmYgb3V0cHV0LCBhbmQgYWxzbyBhZGQgYW4gYW5ub3RhdGlvbiB0byB0aGUgbGluZXMgb2YgY29kZSB0aGF0IGFyZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgZGVwbG95ZWQgc3RhY2sgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgb24gUFJcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHJpdmF0ZSBhZGREaWZmQW5ub3RhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlmZk91dHB1dE9wdGlvbnMuYW5ub3RhdGVPbkJ1aWxkKSB7cmV0dXJuO31cblxuICAgIGNvbnN0IHN0ZXBGYWN0b3J5ID0gbmV3IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KHRoaXMsIHtcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgICBhdXRoUHJvdmlkZXI6IHRoaXMuY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoc3RlcEZhY3RvcnkuZGlmZkFubm90YXRpb25Kb2JzKS5mb3JFYWNoKChbbmFtZSwgam9iXSkgPT4ge1xuICAgICAgdGhpcy5idWlsZFdvcmtmbG93Py5hZGRQb3N0QnVpbGRKb2IobmFtZSwgam9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoKCkge1xuICAgIGlmICh0aGlzLmRlcGxveWFibGUpIHt0aGlzLmFkZERlcGxveUpvYnMoKTt9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZU52bXJjKSB7XG4gICAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5udm1yYycsIHtcbiAgICAgICAgbGluZXM6IFt0aGlzLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJyddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaWZmQW5ub3RhdGlvbigpO1xuXG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGVudmlyb25tZW50cyB0byB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGl0ZW1zIGxpc3Qgb2YgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKi9cbiAgYWRkRW52aXJvbm1lbnRzKC4uLml0ZW1zOiBFbnZpcm9ubWVudE9wdGlvbnNbXSkge1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMucHVzaCguLi5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5kZXBsb3lPcHRpb25zLFxuICAgICAgZW52aXJvbm1lbnRzOiBuZXdFbnZpcm9ubWVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgZm9yIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gc2NyaXB0IHRoZSBzY3JpcHQgdG8gYmUgYWRkZWQsIGZvciBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQ6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudHMobmV3RW52aXJvbm1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZUZpbHRlciB0aGUgbmFtZSBvZiBlbnZpcm9ubWVudHMgdG8gYWRkIHRoZSBzY3JpcHRzIHRvLCBpZiBub3QgcHJvdmlkZWQgb3IgZW1wdHkgd2lsbCB1cGRhdGUgYWxsXG4gICAqL1xuICB1cGRhdGVQcmVEZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lKb2JzKCkge1xuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgYXV0aFByb3ZpZGVyOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2U/LmFkZEpvYnMoc3RlcEZhY3RvcnkuZGVwbG95bWVudEpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgYW4gb2JqZWN0IGRlZmluaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVudmlyb25tZW50c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkudmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgICB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICApO1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyA9IGVudmlyb25tZW50RGVwZW5kZW5jaWVzO1xuICB9XG59Il19
package/lib/steps.js CHANGED
@@ -5,6 +5,7 @@ exports.DeployableAwsCdkTypeScriptAppStepsFactory = void 0;
5
5
  exports.getDeployJobId = getDeployJobId;
6
6
  exports.getDiffAnnotationJobId = getDiffAnnotationJobId;
7
7
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
8
+ const projen_1 = require("projen");
8
9
  const github_1 = require("projen/lib/github");
9
10
  const workflows_model_1 = require("projen/lib/github/workflows-model");
10
11
  const javascript_1 = require("projen/lib/javascript");
@@ -533,13 +534,21 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
533
534
  pullRequests: workflows_model_1.JobPermission.WRITE,
534
535
  },
535
536
  steps: [
537
+ projen_1.github.WorkflowSteps.downloadArtifact({
538
+ name: 'Download all diff artifacts',
539
+ with: {
540
+ pattern: 'diff-output-*',
541
+ path: 'diff-outputs',
542
+ mergeMultiple: true,
543
+ },
544
+ }),
536
545
  {
537
546
  name: 'Annotate PR with Diff Output',
538
547
  uses: 'mshick/add-pr-comment@v3',
539
548
  with: {
540
549
  'message-id': 'diff-output',
541
550
  'refresh-message-position': true,
542
- 'message': dependentJobNames.map(jobName => `\${{ needs.${jobName}.outputs.${formattedDiffAnnotationCommentStepId} }}`).join('\n'),
551
+ 'message-path': 'diff-outputs/*.md',
543
552
  },
544
553
  },
545
554
  ],
@@ -555,23 +564,25 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
555
564
  name: 'Get formatted diff annotation comment',
556
565
  id: formattedDiffAnnotationCommentStepId,
557
566
  run: [
558
- 'echo "data<<EOF" >> $GITHUB_OUTPUT',
559
- `echo "### Changes for environment ${environment}" >> $GITHUB_OUTPUT`,
560
- 'echo "" >> $GITHUB_OUTPUT',
561
- 'echo "<details>" >> $GITHUB_OUTPUT',
562
- 'echo "<summary>Show diff</summary>" >> $GITHUB_OUTPUT',
563
- 'echo "" >> $GITHUB_OUTPUT',
564
- "echo '\`\`\`' >> $GITHUB_OUTPUT",
567
+ 'mkdir -p diff-output',
568
+ `echo "### Changes for environment ${environment}" > diff-output/diff-${environment}.md`,
569
+ 'echo "" >> diff-output/diff-${environment}.md',
570
+ 'echo "<details>" >> diff-output/diff-${environment}.md',
571
+ 'echo "<summary>Show diff</summary>" >> diff-output/diff-${environment}.md',
572
+ 'echo "" >> diff-output/diff-${environment}.md',
573
+ "echo '\`\`\`' >> diff-output/diff-${environment}.md",
565
574
  'for file in $(find . -path "**/cdk.out/diff.log" 2>/dev/null); do',
566
- ' echo "========== $file ==========" >> $GITHUB_OUTPUT',
567
- ' sed \'s/\\x1B\\[[0-9;]*[mGKHF]//g\' "$file" >> $GITHUB_OUTPUT',
568
- ' echo "" >> $GITHUB_OUTPUT',
575
+ ' echo "========== $file ==========" >> diff-output/diff-${environment}.md',
576
+ ' sed \'s/\\x1B\\[[0-9;]*[mGKHF]//g\' "$file" >> diff-output/diff-${environment}.md',
577
+ ' echo "" >> diff-output/diff-${environment}.md',
569
578
  'done',
570
- "echo '\`\`\`' >> $GITHUB_OUTPUT",
571
- 'echo "</details>" >> $GITHUB_OUTPUT',
572
- 'echo "" >> $GITHUB_OUTPUT',
573
- 'echo "EOF" >> $GITHUB_OUTPUT',
579
+ "echo '\`\`\`' >> diff-output/diff-${environment}.md",
580
+ 'echo "</details>" >> diff-output/diff-${environment}.md',
581
+ 'echo "" >> diff-output/diff-${environment}.md',
574
582
  ].join('\n'),
583
+ env: {
584
+ environment: environment,
585
+ },
575
586
  };
576
587
  }
577
588
  /**
@@ -594,12 +605,6 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
594
605
  },
595
606
  env: deployJobEnv,
596
607
  steps: [],
597
- outputs: {
598
- [formattedDiffAnnotationCommentStepId]: {
599
- stepId: formattedDiffAnnotationCommentStepId,
600
- outputName: 'data',
601
- },
602
- },
603
608
  };
604
609
  jobDefinition.steps.push(this.checkoutStep);
605
610
  const preInstallDependenciesStep = this.preInstallDependenciesStep;
@@ -614,6 +619,15 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
614
619
  }
615
620
  jobDefinition.steps.push(this.generateDiffStep);
616
621
  jobDefinition.steps.push(this.getFormattedDiffAnnotationCommentStepForEnvironment(name));
622
+ // Upload the diff output as an artifact
623
+ jobDefinition.steps.push(projen_1.github.WorkflowSteps.uploadArtifact({
624
+ name: 'Upload diff output',
625
+ with: {
626
+ name: `diff-output-${name}`,
627
+ path: 'diff-output/',
628
+ retentionDays: 1,
629
+ },
630
+ }));
617
631
  return jobDefinition;
618
632
  }
619
633
  /**
@@ -632,7 +646,7 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
632
646
  }
633
647
  exports.DeployableAwsCdkTypeScriptAppStepsFactory = DeployableAwsCdkTypeScriptAppStepsFactory;
634
648
  _a = JSII_RTTI_SYMBOL_1;
635
- DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.798" };
649
+ DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.800" };
636
650
  /**
637
651
  * Get the deploy job ID for a specific environment
638
652
  * @param environmentName The name of the environment
@@ -649,4 +663,4 @@ function getDeployJobId(environmentName) {
649
663
  function getDiffAnnotationJobId(environmentName) {
650
664
  return `Diff-Annotation-${environmentName}`;
651
665
  }
652
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTQwQkEsd0NBRUM7QUFPRCx3REFFQzs7QUF0MUJELDhDQUFrRDtBQUNsRCx1RUFBZ0Y7QUFDaEYsc0RBQWlFO0FBQ2pFLG1DQUFrSDtBQUVsSCxNQUFNLDJCQUEyQixHQUFHLGtCQUFrQixDQUFDO0FBQ3ZELE1BQU0sc0NBQXNDLEdBQUUsU0FBUywyQkFBMkIsMENBQTBDLENBQUM7QUFDN0gsTUFBTSxvQ0FBb0MsR0FBRyxtQ0FBbUMsQ0FBQztBQXdDakY7OztHQUdHO0FBQ0gsTUFBYSx5Q0FBeUM7SUFFcEQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyx5Q0FBeUMsQ0FDckQsYUFBNEIsRUFDNUIsdUJBQTBEO1FBRzFELElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyx5QkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsd0VBQXdFLENBQUMsQ0FBQztZQUMvRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakIsTUFBTSxpQkFBaUIsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLHNCQUFzQixHQUFHLGdEQUFnRCxDQUFDLENBQUM7Z0JBQzNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUNtQixPQUErQixFQUMvQixLQUFxRDtRQURyRCxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFnRDtJQUNyRSxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsSUFBVyxzQ0FBc0M7UUFDL0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLHNDQUFzQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3BILENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxzQkFBYSxDQUFDLFFBQVEsQ0FBQztZQUM1QixJQUFJLEVBQUU7Z0JBQ0osVUFBVSxFQUFFLENBQUM7Z0JBQ2IsR0FBRyxFQUFFLG1CQUFtQjthQUN6QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLDBCQUEwQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25DLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUMsc0NBQXNDO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQjtZQUNuQyxHQUFHLEVBQUUsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO1NBQ25ELENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxrQ0FBa0M7UUFDM0MsT0FBTyxJQUFJLENBQUMsMENBQTBDLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDBDQUEwQyxDQUFDLFdBQW1CO1FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDdEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU87WUFDTCxFQUFFLEVBQUUsMkJBQTJCO1lBQy9CLElBQUksRUFBRSw2Q0FBNkM7WUFDbkQsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxXQUFXO2FBQ3pCO1lBQ0QsR0FBRyxFQUFFO2dCQUNILFlBQVksRUFBRSw2QkFBNkI7YUFDNUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsaUNBQWlDO1FBQzFDLE9BQU87WUFDTCxJQUFJLENBQUMseUNBQXlDO1lBQzlDLElBQUksQ0FBQywwQkFBMEI7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0kseUNBQXlDLENBQUMsa0JBQXNDO1FBQ3JGLE1BQU0sS0FBSyxHQUFjLEVBQUUsQ0FBQztRQUU1QixNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpREFBaUQsQ0FDaEYsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQzdELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsSUFBSSxtQkFBbUIsRUFDOUUsa0JBQWtCLENBQUMsY0FBYyxDQUFDLHlCQUF5QixJQUFJLHVCQUF1QixFQUN0RixrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUN6QyxDQUFDO1FBRUYsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUM1RCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDN0Qsa0JBQWtCLENBQUMsY0FBYyxDQUFDLHFCQUFxQixJQUFJLG1CQUFtQixFQUM5RSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMseUJBQXlCLElBQUksdUJBQXVCLEVBQ3RGLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQ3hDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksRUFBRSxFQUNwRCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMseUJBQXlCLElBQUksR0FBRyxDQUNuRSxDQUFDO1FBRUYsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLHlDQUF5QztRQUNsRCxPQUFPLElBQUksQ0FBQyxpREFBaUQsQ0FDM0QsbUJBQW1CLEVBQ25CLDhCQUE4QixFQUM5QixrQ0FBa0MsRUFDbEMsc0JBQXNCLENBQ3RCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksaURBQWlELENBQ3RELGNBQWdDLEVBQ2hDLHFCQUE2QixFQUM3Qix5QkFBaUMsRUFDakMsTUFBYztRQUdkLFNBQVMsWUFBWSxDQUFDLE9BQWtEO1lBQ3RFLElBQUksT0FBTyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRyxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzFDLFFBQVEsY0FBYyxrQkFBa0Isc0NBQXNDLEtBQUssQ0FBQyxDQUFDO2dCQUNyRixRQUFRLGNBQWMsZ0JBQWdCLENBQUM7UUFDM0MsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2Ysc0RBQXNEO1lBQ3RELDhEQUE4RDtZQUM5RCwwQ0FBMEM7U0FDM0MsQ0FBQztRQUVGLElBQUksT0FBTyxjQUFjLEtBQUssU0FBUyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQzFELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsT0FBTztZQUNMLEVBQUUsRUFBRSxTQUFTO1lBQ2IsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLEdBQUcsRUFBRTtnQkFDSCxXQUFXLEVBQUUsZ0JBQWdCLHFCQUFxQixNQUFNO2dCQUN4RCxlQUFlLEVBQUUsZ0JBQWdCLHlCQUF5QixNQUFNO2dCQUNoRSxNQUFNO2FBQ1A7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsMEJBQTBCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGtDQUFrQyxDQUM1QyxtQkFBbUIsRUFDbkIsOEJBQThCLEVBQzlCLGtDQUFrQyxFQUNsQyxzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLHlDQUF5QyxDQUN6QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxrQ0FBa0MsQ0FDdkMsY0FBZ0MsRUFDaEMscUJBQTZCLEVBQzdCLHlCQUFpQyxFQUNqQyxNQUFjLEVBQ2QsWUFBb0IsRUFDcEIseUJBQTJDO1FBRTNDLFNBQVMsWUFBWSxDQUFDLE9BQWtEO1lBQ3RFLElBQUksT0FBTyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxTQUFTLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xHLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDMUMsUUFBUSxjQUFjLGlCQUFpQixzQ0FBc0MsS0FBSyxDQUFDLENBQUM7Z0JBQ3BGLFFBQVEsY0FBYyxlQUFlLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksT0FBTyxjQUFjLEtBQUssU0FBUyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQyxNQUFNLGFBQWEsR0FDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUsscUNBQXdCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUMvRTtnQkFDRSxtQkFBbUIsRUFBRSxnQkFBZ0IscUJBQXFCLE1BQU07Z0JBQ2hFLHVCQUF1QixFQUFFLGdCQUFnQix5QkFBeUIsTUFBTTthQUN6RSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbEIsT0FBTztZQUNMLEVBQUUsRUFBRSxTQUFTO1lBQ2IsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixJQUFJLEVBQUUsMENBQTBDO1lBQ2hELElBQUksRUFBRTtnQkFDSixHQUFHLGFBQWE7Z0JBQ2hCLGdCQUFnQixFQUFFLFlBQVk7Z0JBQzlCLFlBQVksRUFBRSxNQUFNO2dCQUNwQix1QkFBdUIsRUFBRSx5QkFBeUI7YUFDbkQ7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsdUJBQXVCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLCtCQUErQixDQUFDLFdBQW1CO1FBQ3hELE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDMUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sdUJBQXVCLEdBQUcsY0FBYyxDQUFDO1FBQy9DLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQyxzQ0FBc0M7WUFDOUMsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixHQUFHLEVBQUU7Z0JBQ0gsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLFdBQVc7YUFDdkM7WUFDRCxHQUFHLEVBQUUsa0JBQWtCLG9CQUFvQixLQUFLLHVCQUF1QixFQUFFO1NBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxnQkFBZ0IsQ0FDckIsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsYUFBK0I7UUFFL0IsU0FBUyxZQUFZLENBQUMsT0FBa0Q7WUFDdEUsSUFBSSxPQUFPLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNuQixPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQztnQkFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEcsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUMxQyxRQUFRLGFBQWEsaUJBQWlCLHNDQUFzQyxLQUFLLENBQUMsQ0FBQztnQkFDbkYsUUFBUSxhQUFhLGVBQWUsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsSUFBSSxPQUFPLGFBQWEsS0FBSyxTQUFTLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6RCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLE9BQU87WUFDTCxFQUFFLEVBQUUsU0FBUztZQUNiLElBQUksRUFBRSxPQUFPLFFBQVEsRUFBRTtZQUN2QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixJQUFJLFVBQVUsRUFBRTtTQUN0RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixJQUFJLENBQ0osQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLDBCQUEwQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxrQ0FBa0MsQ0FDNUMseUJBQXlCLEVBQ3pCLG1DQUFtQyxDQUNuQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxrQ0FBa0MsQ0FDdkMsb0JBQXNDLEVBQ3RDLG1CQUEyQjtRQUczQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixvQkFBb0IsQ0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLDJCQUEyQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxtQ0FBbUMsQ0FDN0MsMEJBQTBCLEVBQzFCLG9DQUFvQyxDQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxtQ0FBbUMsQ0FDeEMscUJBQXVDLEVBQ3ZDLG9CQUE0QjtRQUc1QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FDMUIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixxQkFBcUIsQ0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLGNBQWM7UUFFdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO1FBQy9HLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLHlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7SUFDN0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsdUJBQXVCO1FBRWhDLE1BQU0sRUFBRSxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUUzRSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7WUFDcEQsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLGtCQUFrQixDQUFDO1lBRTlDLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBRWxFLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELFlBQVksRUFBRSxjQUFjLENBQUMsWUFBWTtnQkFDekMseUJBQXlCLEVBQUUsY0FBYyxDQUFDLHlCQUF5QixJQUFJLEdBQUc7YUFDM0UsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWIsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUMscUJBQXFCLElBQUksbUJBQW1CLENBQUM7WUFDMUYsTUFBTSx5QkFBeUIsR0FBRyxjQUFjLENBQUMseUJBQXlCLElBQUksdUJBQXVCLENBQUM7WUFFdEcsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDekYsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFFdkYsT0FBTztnQkFDTCxXQUFXLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtnQkFDcEMscUJBQXFCO2dCQUNyQix5QkFBeUI7Z0JBQ3pCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtnQkFDN0IsVUFBVTtnQkFDVixpQkFBaUI7Z0JBQ2pCLG9CQUFvQixFQUFFLGtCQUFrQixDQUFDLHdCQUF3QixJQUFJLEVBQUU7Z0JBQ3ZFLGdCQUFnQjtnQkFDaEIsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUMsdUJBQXVCLElBQUksRUFBRTtnQkFDckUsR0FBRyxrQkFBa0I7YUFDdEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUMsdUJBQXVCLENBQUMsRUFBRSwyQkFBMkI7U0FDdkQsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsTUFBTSxhQUFhLEdBQVE7WUFDekIsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxPQUFPLEVBQUUsa0NBQWtDO2dCQUMzQyxvQkFBb0IsRUFBRSxLQUFLO2FBQzVCO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLGdCQUFnQjthQUNqQjtZQUNELFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2dCQUM1QixXQUFXLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUsscUNBQXdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywrQkFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUzthQUM1RztZQUNELFFBQVEsRUFBRTtnQkFDUixXQUFXLEVBQUUsQ0FBQztnQkFDZCxNQUFNLEVBQUU7b0JBQ04sTUFBTSxFQUFFO3dCQUNOLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztxQkFDN0M7b0JBQ0QsT0FBTztpQkFDUjthQUNGO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSwyQkFBMkI7YUFDbEM7WUFDRCxHQUFHLEVBQUUsWUFBWTtZQUNqQixLQUFLLEVBQUUsRUFBRTtTQUNWLENBQUM7UUFFRixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFNUMsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUM7UUFDbkUsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO1lBQy9CLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxDQUFDO1FBQ25GLElBQUksa0NBQWtDLEVBQUUsQ0FBQztZQUN2QyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBQ3hELElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMxRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGtDQUFrQyxDQUFDLGVBQXVCO1FBQy9ELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUFDO1lBQ25HLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyx5QkFBeUI7UUFDbEMsTUFBTSxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBaUIsRUFBRTtZQUNsRSxPQUFPLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7UUFDM0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksb0JBQW9CLENBQ3pCLGtCQUFzQyxFQUN0Qyx1QkFBMkM7UUFFM0MsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLGtCQUFrQixDQUFDO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUM3QyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsSUFBSTtTQUNoQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxNQUFNLGFBQWEsR0FBUTtZQUN6QixNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDekIsV0FBVyxFQUFFO2dCQUNYLE9BQU8sRUFBRSxHQUFHLElBQUksU0FBUztnQkFDekIsb0JBQW9CLEVBQUUsS0FBSzthQUM1QjtZQUNELEtBQUssRUFBRSxJQUFJLENBQUMsa0NBQWtDLENBQUMsSUFBSSxDQUFDO1lBQ3BELFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2dCQUM1QixXQUFXLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2dCQUNoQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUsscUNBQXdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywrQkFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUzthQUM1RztZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsSUFBSTthQUNYO1lBQ0QsR0FBRyxFQUFFLFlBQVk7WUFDakIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRUYsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO1FBQ25FLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUMvQixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUVsRSxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RixJQUFJLHlCQUF5QixFQUFFLENBQUM7WUFDOUIsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMseUNBQXlDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FDL0Qsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUN6RCxrQkFBa0IsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQ2pELENBQUM7UUFDRixJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDdEIsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1DQUFtQyxDQUNqRSxrQkFBa0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQzFELGtCQUFrQixDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FDbEQsQ0FBQztRQUNGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQzFCLGFBQWEsRUFDYixzQkFBc0IsRUFDdEIsSUFBSSxDQUNKLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLGlCQUEyQjtRQUNuRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUk7Z0JBQzVCLFlBQVksRUFBRSwrQkFBYSxDQUFDLEtBQUs7YUFDbEM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLDhCQUE4QjtvQkFDcEMsSUFBSSxFQUFFLDBCQUEwQjtvQkFDaEMsSUFBSSxFQUFFO3dCQUNKLFlBQVksRUFBRSxhQUFhO3dCQUMzQiwwQkFBMEIsRUFBRSxJQUFJO3dCQUNoQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxPQUFPLFlBQVksb0NBQW9DLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7cUJBQ25JO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxtREFBbUQsQ0FBQyxXQUFtQjtRQUM1RSxPQUFPO1lBQ0wsSUFBSSxFQUFFLHVDQUF1QztZQUM3QyxFQUFFLEVBQUUsb0NBQW9DO1lBQ3hDLEdBQUcsRUFBRTtnQkFDSCxvQ0FBb0M7Z0JBQ3BDLHFDQUFxQyxXQUFXLHFCQUFxQjtnQkFDckUsMkJBQTJCO2dCQUMzQixvQ0FBb0M7Z0JBQ3BDLHVEQUF1RDtnQkFDdkQsMkJBQTJCO2dCQUMzQixpQ0FBaUM7Z0JBQ2pDLG1FQUFtRTtnQkFDbkUsd0RBQXdEO2dCQUN4RCxpRUFBaUU7Z0JBQ2pFLDZCQUE2QjtnQkFDN0IsTUFBTTtnQkFDTixpQ0FBaUM7Z0JBQ2pDLHFDQUFxQztnQkFDckMsMkJBQTJCO2dCQUMzQiw4QkFBOEI7YUFDL0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGtDQUFrQyxDQUN2QyxrQkFBc0MsRUFDdEMsdUJBQTJDO1FBRTNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUNwQyxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsTUFBTSxhQUFhLEdBQVE7WUFDekIsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNoQixXQUFXLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSTtnQkFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLHFDQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsK0JBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDNUc7WUFDRCxHQUFHLEVBQUUsWUFBWTtZQUNqQixLQUFLLEVBQUUsRUFBRTtZQUNULE9BQU8sRUFBRTtnQkFDUCxDQUFDLG9DQUFvQyxDQUFDLEVBQUU7b0JBQ3RDLE1BQU0sRUFBRSxvQ0FBb0M7b0JBQzVDLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQztRQUNGLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1QyxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUNuRSxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDL0IsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDbEUsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMseUNBQXlDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUV6RixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxrQkFBa0I7UUFDcEIsTUFBTSxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBaUIsRUFBRTtZQUN4RSxPQUFPLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUNqSixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBL3dCSCw4RkFpeEJDOzs7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLGVBQXVCO0lBQ3BELE9BQU8sVUFBVSxlQUFlLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLGVBQXVCO0lBQzVELE9BQU8sbUJBQW1CLGVBQWUsRUFBRSxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IFdvcmtmbG93U3RlcHMgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uLCBKb2JTdGVwLCBKb2IgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyIH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IERlcGxveUpvYlN0cmF0ZWd5LCBEZXBsb3lPcHRpb25zLCBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMsIEVudmlyb25tZW50T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwSWQgPSAnZGVwbG95bWVudC1jaGVjayc7XG5jb25zdCBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbj0gYHN0ZXBzLiR7Y2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkfS5vdXRwdXRzLmhhc19hY3RpdmVfZGVwbG95bWVudCAhPSAndHJ1ZSdgO1xuY29uc3QgZm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcElkID0gJ2Zvcm1hdHRlZF9kaWZmX2Fubm90YXRpb25fY29tbWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2sgZm9yIGFjdGl2ZSBkZXBsb3ltZW50cyBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGRlcGxveW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrQWN0aXZlRGVwbG95bWVudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuIGJlZm9yZSBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcywgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBwcmVJbnN0YWxsVGFza05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlciBmb3IgQ29kZUFydGlmYWN0LCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhQcm92aWRlcj86IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlcjtcblxuICAvKipcbiAgICogVGhlIG5wbSBjb25maWcgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IHRoYXQgaXMgYmVpbmcgZGVwbG95ZWQsIGlmIGFueVxuICAgKiBOb3RlOiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vZGUgdmVyc2lvbnMgYWJvdmUgMThcbiAgICovXG4gIHJlYWRvbmx5IG5wbUNvbmZpZ0Vudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IGpvYiBzdHJhdGVneSwgd2hldGhlciB0byB1c2UgYSBtYXRyaXggam9iIG9yIG11bHRpcGxlIGpvYnMgZm9yIGVhY2ggZW52aXJvbm1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGpvYlN0cmF0ZWd5OiBEZXBsb3lKb2JTdHJhdGVneTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM/OiBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogRmFjdG9yeSB0byBjcmVhdGUgcmV1c2FibGUgc3RlcHMgZm9yIHRoZSBkZXBsb3ltZW50IHdvcmtmbG93XG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjbGFzcyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgdGhlIHByb3ZpZGVkIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSB2YWxpZFxuICAgKiBAcGFyYW0gZGVwbG95T3B0aW9ucyBUaGUgZGVwbG95bWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudERlcGVuZGVuY2llcyBUaGUgZW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgdG8gdmFsaWRhdGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgZGVwbG95T3B0aW9uczogRGVwbG95T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLFxuICApOiB2b2lkIHtcblxuICAgIGlmIChkZXBsb3lPcHRpb25zLmpvYlN0cmF0ZWd5ICE9PSBEZXBsb3lKb2JTdHJhdGVneS5NVUxUSV9KT0IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW52aXJvbm1lbnQgZGVwbG95bWVudCBkZXBlbmRlbmNpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBNVUxUSV9KT0Igc3RyYXRlZ3knKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZW50cmllcyhlbnZpcm9ubWVudERlcGVuZGVuY2llcykuZm9yRWFjaCgoW2VudiwgZGVwc10pID0+IHtcbiAgICAgIGNvbnN0IGhhc0Vudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZW52KTtcbiAgICAgIGlmICghaGFzRW52aXJvbm1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRlZmluZWQgaW4gZGVwZW5kZW5jaWVzIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkZXBzLmZvckVhY2goZGVwID0+IHtcbiAgICAgICAgY29uc3QgaGFzRGVwRW52aXJvbm1lbnQgPSBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5zb21lKGUgPT4gZS5uYW1lID09PSBkZXApO1xuICAgICAgICBpZiAoIWhhc0RlcEVudmlyb25tZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBlbmRlbmN5IGVudmlyb25tZW50IFwiJHtkZXB9XCIgZm9yIGVudmlyb25tZW50IFwiJHtlbnZ9XCIgZG9lcyBub3QgZXhpc3QgaW4gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5XG4gICAqIEBwYXJhbSBwcm9qZWN0IFRoZSBwcm9qZWN0XG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgZmFjdG9yeSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3Q6IGphdmFzY3JpcHQuTm9kZVByb2plY3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnlQcm9wcyxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDb25kaXRpb24gdG8gc2tpcCBhIHN0ZXAgaWYgYW4gYWN0aXZlIGRlcGxveW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50XG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgY29uZGl0aW9uIG9yIHVuZGVmaW5lZCBpZiBjaGVja0FjdGl2ZURlcGxveW1lbnQgaXMgZmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24oKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8geyBpZjogYFxcJHt7ICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGVja291dFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIFdvcmtmbG93U3RlcHMuY2hlY2tvdXQoe1xuICAgICAgd2l0aDoge1xuICAgICAgICBmZXRjaERlcHRoOiAwLFxuICAgICAgICByZWY6ICcke3sgZ2l0aHViLnNoYSB9fScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIGJlZm9yZSBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcyBpZiBleGlzdHNcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gcHJlSW5zdGFsbFRhc2tOYW1lIGlzIHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24sXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZSxcbiAgICAgIHJ1bjogYG5weCBwcm9qZW4gJHt0aGlzLnByb3BzLnByZUluc3RhbGxUYXNrTmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBhY3RpdmUgZGVwbG95bWVudCBmb3IgdGhlIGVudmlyb25tZW50IGluIHRoZSBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50IFRoZSBlbnZpcm9ubWVudCB0byBjaGVja1xuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkLFxuICAgICAgdXNlczogJ0FtaW5GYXpsTW9uZG8vY2hlY2stZGVwbG95ZWQtZW52aXJvbm1lbnRAdjEnLFxuICAgICAgd2l0aDoge1xuICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgZW52OiB7XG4gICAgICAgIEdJVEhVQl9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBbXVxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JNYXRyaXgoKTogSm9iU3RlcFtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5zZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvck1hdHJpeCxcbiAgICAgIHRoaXMuYXNzdW1lQXdzUm9sZVN0ZXBGb3JNYXRyaXgsXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXBzIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEByZXR1cm5zIEpvYlN0ZXBbXVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0ZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zKTogSm9iU3RlcFtdIHtcbiAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdID0gW107XG5cbiAgICBjb25zdCBmcm9tRW52VmFyaWFibGVTdGVwID0gdGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzSW5FbnZpcm9ubWVudEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICApO1xuXG4gICAgaWYgKGZyb21FbnZWYXJpYWJsZVN0ZXApIHtcbiAgICAgIHN0ZXBzLnB1c2goZnJvbUVudlZhcmlhYmxlU3RlcCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzdW1lUm9sZVN0ZXAgPSB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/PyAnJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzID8/IDkwMCxcbiAgICApO1xuXG4gICAgaWYgKGFzc3VtZVJvbGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGFzc3VtZVJvbGVTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RlcHM7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguYXNzdW1lUm9sZScsXG4gICAgICAnbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZScsXG4gICAgICAnbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUnLFxuICAgICAgJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHNldHVwIEFXUyBjcmVkZW50aWFscyBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBBV1MgY3JlZGVudGlhbHMgYXJlIHByb3ZpZGVkLFxuICAgKiBpZiBhc3N1bWVSb2xlRmxhZyBpcyBib29sZWFuIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCByZXR1cm4gYSBKb2JTdGVwIG9ubHkgaWYgZmFsc2VcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICBhc3N1bWVSb2xlRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAnZmFsc2UnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAnZmFsc2UnIH19YDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tYW5kcyA9IFtcbiAgICAgICdlY2hvIFwiQVdTX0FDQ0VTU19LRVlfSUQ9JGFjY2Vzc0tleUlkXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgICAgJ2VjaG8gXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHNlY3JldEFjY2Vzc0tleVwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1JFR0lPTj0kcmVnaW9uXCIgPj4gJEdJVEhVQl9FTlYnLFxuICAgIF07XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiAnQ29uZmlndXJlIEFXUyBDcmVkZW50aWFscycsXG4gICAgICBydW46IGAke2NvbW1hbmRzLmpvaW4oJ1xcbicpfWAsXG4gICAgICBlbnY6IHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGBcXCR7eyBzZWNyZXRzWyR7YWNjZXNzS2V5SWRTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IGBcXCR7eyBzZWNyZXRzWyR7c2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgcmVnaW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gYXNzdW1lIGFuIEFXUyByb2xlIGZvciB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgYXNzdW1lQXdzUm9sZVN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguYXNzdW1lUm9sZScsXG4gICAgICAnbWF0cml4LmFjY2Vzc0tleUlkU2VjcmV0TmFtZScsXG4gICAgICAnbWF0cml4LnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUnLFxuICAgICAgJyR7eyBtYXRyaXgucmVnaW9uIH19JyxcbiAgICAgICcke3sgbWF0cml4LnJvbGVUb0Fzc3VtZSB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUZsYWcgV2hldGhlciB0byBhc3N1bWUgYSByb2xlLCBjYW4gYmUgYSBib29sZWFuIG9yIGEgc3RyaW5nIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHBhcmFtIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgYWNjZXNzIGtleSBJRFxuICAgKiBAcGFyYW0gc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSBUaGUgR2l0SHViIHNlY3JldCBuYW1lIGZvciB0aGUgc2VjcmV0IGFjY2VzcyBrZXlcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uXG4gICAqIEBwYXJhbSByb2xlVG9Bc3N1bWUgVGhlIHJvbGUgdG8gYXNzdW1lXG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIFRoZSBkdXJhdGlvbiBmb3IgYXNzdW1pbmcgdGhlIHJvbGVcbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2VcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0QXNzdW1lQXdzUm9sZVN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBhc3N1bWVSb2xlRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWU6IHN0cmluZyxcbiAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgcm9sZVRvQXNzdW1lOiBzdHJpbmcsXG4gICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcz86IHN0cmluZyB8IG51bWJlcixcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKGZhY3Rvcnk6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KSB7XG4gICAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnICYmICR7c2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb259IH19YCA6XG4gICAgICAgIGBcXCR7eyAke2Fzc3VtZVJvbGVGbGFnfSA9PSAndHJ1ZScgfX1gO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXNzdW1lUm9sZUZsYWcgPT09ICdib29sZWFuJyAmJiAhYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgY29uc3Qgc2VjcmV0c1BhcmFtcyA9XG4gICAgICB0aGlzLnByb3BzLmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSID9cbiAgICAgICAge1xuICAgICAgICAgICdhd3MtYWNjZXNzLWtleS1pZCc6IGBcXCR7eyBzZWNyZXRzWyR7YWNjZXNzS2V5SWRTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICAgICdhd3Mtc2VjcmV0LWFjY2Vzcy1rZXknOiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIH0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiAnQXNzdW1lIEFXUyBSb2xlJyxcbiAgICAgIHVzZXM6ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0JyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uc2VjcmV0c1BhcmFtcyxcbiAgICAgICAgJ3JvbGUtdG8tYXNzdW1lJzogcm9sZVRvQXNzdW1lLFxuICAgICAgICAnYXdzLXJlZ2lvbic6IHJlZ2lvbixcbiAgICAgICAgJ3JvbGUtZHVyYXRpb24tc2Vjb25kcyc6IGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBOUE0gY29uZmlnIGlmIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIG5wbUNvbmZpZyBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBzZXR1cE5wbUNvbmZpZ0Zvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KCcke3sgbWF0cml4LmVudmlyb25tZW50IH19Jyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBucG1Db25maWdFbnZpcm9ubWVudCB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIW5wbUNvbmZpZ0Vudmlyb25tZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVOYW1lID0gJ0NPTkZJR19WQUxVRSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24sXG4gICAgICBuYW1lOiAnU2V0dGluZyBOUE0gQ29uZmlnJyxcbiAgICAgIGVudjoge1xuICAgICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBydW46IGBucG0gY29uZmlnIHNldCAke25wbUNvbmZpZ0Vudmlyb25tZW50fSAkJHtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwIHRvIHJ1biBhIHNwZWNpZmljIHNjcmlwdFxuICAgKiBAcGFyYW0gc2NyaXB0TmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcGFyYW0gc3RlcE5hbWUgVGhlIG5hbWUgb2YgdGhlIHN0ZXAgaW4gdGhlIHdvcmtmbG93XG4gICAqIEBwYXJhbSBoYXNTY3JpcHRGbGFnIFdoZXRoZXIgdGhlIHNjcmlwdCBzaG91bGQgYmUgcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHNjcmlwdCBvciB1bmRlZmluZWQgaWYgbm90IGFwcGxpY2FibGVcbiAgICogSWYgaGFzU2NyaXB0RmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzU2NyaXB0RmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRSdW5TY3JpcHRTdGVwKFxuICAgIHNjcmlwdE5hbWU6IHN0cmluZyxcbiAgICBzdGVwTmFtZTogc3RyaW5nLFxuICAgIGhhc1NjcmlwdEZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgaWYgKCFoYXNTY3JpcHRGbGFnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgPyBza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbiA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/XG4gICAgICAgIGBcXCR7eyAke2hhc1NjcmlwdEZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgfX1gO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGhhc1NjcmlwdEZsYWcgPT09ICdib29sZWFuJyAmJiAhaGFzU2NyaXB0RmxhZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBnZXRDb25kaXRpb24odGhpcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWY6IGNvbmRpdGlvbixcbiAgICAgIG5hbWU6IGBSdW4gJHtzdGVwTmFtZX1gLFxuICAgICAgcnVuOiBgJHt0aGlzLnByb2plY3QucnVuU2NyaXB0Q29tbWFuZH0gJHtzY3JpcHROYW1lfWAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGRlcGxveSB0aGUgd29ya2Zsb3dcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50U3RlcCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgJ2RlcGxveTp3b3JrZmxvdycsXG4gICAgICAnRGVwbG95bWVudCcsXG4gICAgICB0cnVlLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIHBvc3QgZGVwbG95bWVudCBzY3JpcHQgaW4gbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUHJlRGVwbG95VGFzaycsXG4gICAgICAnJHt7IG1hdHJpeC5wcmVEZXBsb3ltZW50U2NyaXB0IH19JyxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByZS1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1ByZURlcGxveVRhc2tGbGFnIFdoZXRoZXIgdGhlIHByZS1kZXBsb3ltZW50IHRhc2sgc2hvdWxkIGJlIHJ1blxuICAgKiBAcGFyYW0gcHJlRGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwcmUtZGVwbG95bWVudCBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1ByZURlcGxveVRhc2tGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlIHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQcmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgIGhhc1ByZURlcGxveVRhc2tGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcHJlRGVwbG95bWVudFNjcmlwdCxcbiAgICAgICdQcmUgRGVwbG95bWVudCcsXG4gICAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gcnVuIHBvc3QgZGVwbG95bWVudCBzY3JpcHQgaW4gbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgJ21hdHJpeC5oYXNQb3N0RGVwbG95VGFzaycsXG4gICAgICAnJHt7IG1hdHJpeC5wb3N0RGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwb3N0LWRlcGxveW1lbnQgc3RlcCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gaGFzUG9zdERlcGxveVRhc2tGbGFnIFdoZXRoZXIgdGhlIHBvc3QtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHBvc3REZXBsb3ltZW50U2NyaXB0IFRoZSBzY3JpcHQgdG8gcnVuXG4gICAqIEByZXR1cm5zIFRoZSBqb2Igc3RlcCB0byBydW4gdGhlIHBvc3QtZGVwbG95bWVudCBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUG9zdERlcGxveVRhc2tGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwb3N0RGVwbG95bWVudFNjcmlwdDogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIHJldHVybiB0aGlzLmdldFJ1blNjcmlwdFN0ZXAoXG4gICAgICBwb3N0RGVwbG95bWVudFNjcmlwdCxcbiAgICAgICdQb3N0IERlcGxveW1lbnQnLFxuICAgICAgaGFzUG9zdERlcGxveVRhc2tGbGFnLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBkZXBsb3ltZW50IGpvYnMgd2hldGhlciBmb3IgbWF0cml4IHN0cmF0ZWd5IG9yIG5vdFxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgcHVibGljIGdldCBkZXBsb3ltZW50Sm9icygpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcblxuICAgIGlmICh0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci53YXJuKCdUaGUgcHJvamVjdCBkb2VzIG5vdCBoYXZlIGFueSBlbnZpcm9ubWVudCBzZXQsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5qb2JTdHJhdGVneSA9PT0gRGVwbG95Sm9iU3RyYXRlZ3kuTUFUUklYID8gdGhpcy5kZXBsb3ltZW50Sm9ic0Zvck1hdHJpeCA6IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNdWx0aUpvYjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVwbG95bWVudCBqb2JzIGZvciBtYXRyaXggc3RyYXRlZ3lcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnNGb3JNYXRyaXgoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBjb25zdCB7IGVudmlyb25tZW50cywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgfSA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucztcblxuICAgIGNvbnN0IGluY2x1ZGUgPSBlbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50T3B0aW9ucyA9PiB7XG4gICAgICBjb25zdCB7IGF3c0NyZWRlbnRpYWxzIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGFzc3VtZVJvbGUgPSBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlU2V0dGluZ3MgPSBhd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB7XG4gICAgICAgIHJvbGVUb0Fzc3VtZTogYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lLFxuICAgICAgICBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzOiBhd3NDcmVkZW50aWFscy5hc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzIHx8IDkwMCxcbiAgICAgIH06IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgYWNjZXNzS2V5SWRTZWNyZXROYW1lID0gYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCc7XG4gICAgICBjb25zdCBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID0gYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJztcblxuICAgICAgY29uc3QgaGFzUG9zdERlcGxveVRhc2sgPSBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgIGNvbnN0IGhhc1ByZURlcGxveVRhc2sgPSBlbnZpcm9ubWVudE9wdGlvbnMucHJlRGVwbG95V29ya2Zsb3dTY3JpcHQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnRPcHRpb25zLm5hbWUsXG4gICAgICAgIGFjY2Vzc0tleUlkU2VjcmV0TmFtZSxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSxcbiAgICAgICAgcmVnaW9uOiBhd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgICAgIGFzc3VtZVJvbGUsXG4gICAgICAgIGhhc1Bvc3REZXBsb3lUYXNrLFxuICAgICAgICBwb3N0RGVwbG95bWVudFNjcmlwdDogZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgaGFzUHJlRGVwbG95VGFzayxcbiAgICAgICAgcHJlRGVwbG95bWVudFNjcmlwdDogZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICAgICAuLi5hc3N1bWVSb2xlU2V0dGluZ3MsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBjb25jdXJyZW5jeToge1xuICAgICAgICAnZ3JvdXAnOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fS1kZXBsb3knLFxuICAgICAgICAnY2FuY2VsLWluLXByb2dyZXNzJzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IFtcbiAgICAgICAgJ3JlbGVhc2VfZ2l0aHViJyxcbiAgICAgIF0sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgc3RyYXRlZ3k6IHtcbiAgICAgICAgbWF4UGFyYWxsZWw6IDEsXG4gICAgICAgIG1hdHJpeDoge1xuICAgICAgICAgIGRvbWFpbjoge1xuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGluY2x1ZGUubWFwKGUgPT4gZS5lbnZpcm9ubWVudCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbmNsdWRlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIG5hbWU6ICcke3sgbWF0cml4LmVudmlyb25tZW50IH19JyxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4ID0gdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4O1xuICAgIGlmIChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLnRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuc2V0dXBOcG1Db25maWdGb3JNYXRyaXg7XG4gICAgaWYgKHNldHVwTnBtQ29uZmlnU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHNldHVwTnBtQ29uZmlnU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucHJlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmRlcGxveW1lbnRTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5wb3N0RGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuXG4gICAgcmV0dXJuIHsgZGVwbG95OiBqb2JEZWZpbml0aW9uIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJRHMgb2YgdGhlIGpvYnMgdGhhdCBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgdGhlIHNwZWNpZmllZCBlbnZpcm9ubWVudCdzIGRlcGxveW1lbnQgam9iXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGpvYiBJRHNcbiAgICovXG4gIHB1YmxpYyBnZXREZXBsb3ltZW50Sm9iUHJlcmVxdWlzaXRlSm9iSWRzKGVudmlyb25tZW50TmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICghdGhpcy5wcm9wcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLmZpbmRJbmRleChlbnYgPT4gZW52Lm5hbWUgPT09IGVudmlyb25tZW50TmFtZSk7XG4gICAgICBjb25zdCBwcmVyZXF1aXNpdGVFbnZpcm9ubWVudCA9IGluZGV4ID4gMCA/IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHNbaW5kZXggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcmVyZXF1aXNpdGVFbnZpcm9ubWVudCkge1xuICAgICAgICByZXN1bHQucHVzaChnZXREZXBsb3lKb2JJZChwcmVyZXF1aXNpdGVFbnZpcm9ubWVudC5uYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXNbZW52aXJvbm1lbnROYW1lXTtcbiAgICAgIGlmIChkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwID0+IHtcbiAgICAgICAgICByZXN1bHQucHVzaChnZXREZXBsb3lKb2JJZChkZXApKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQucHVzaCgncmVsZWFzZV9naXRodWInKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVwbG95bWVudCBqb2JzIGZvciBtdWx0aS1qb2Igc3RyYXRlZ3lcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnNGb3JNdWx0aUpvYigpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcbiAgICBjb25zdCB7IGVudmlyb25tZW50VmFyaWFibGVOYW1lLCBlbnZpcm9ubWVudHMgfSA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucztcbiAgICBjb25zdCBqb2JzID0gZW52aXJvbm1lbnRzLm1hcCgoZW52aXJvbm1lbnRPcHRpb25zKTogW3N0cmluZywgSm9iXSA9PiB7XG4gICAgICByZXR1cm4gW2dldERlcGxveUpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXRKb2JGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lKV07XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhqb2JzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiBkZWZpbml0aW9uIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudE9wdGlvbnMgVGhlIGVudmlyb25tZW50IG9wdGlvbnNcbiAgICogQHBhcmFtIGVudmlyb25tZW50VmFyaWFibGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSwgaWYgYW55XG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgdGhlIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0Sm9iRm9yRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBjb25jdXJyZW5jeToge1xuICAgICAgICAnZ3JvdXAnOiBgJHtuYW1lfS1kZXBsb3lgLFxuICAgICAgICAnY2FuY2VsLWluLXByb2dyZXNzJzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IHRoaXMuZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhuYW1lKSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIGRlcGxveW1lbnRzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICBpZFRva2VuOiB0aGlzLnByb3BzLmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgfSxcbiAgICAgIGVudjogZGVwbG95Sm9iRW52LFxuICAgICAgc3RlcHM6IFtdLFxuICAgIH07XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcblxuICAgIGNvbnN0IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0ZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucykpO1xuXG4gICAgY29uc3Qgc2V0dXBOcG1Db25maWdTdGVwID0gdGhpcy5nZXRTZXR1cE5wbUNvbmZpZ0ZvckVudmlyb25tZW50KG5hbWUpO1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IHByZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRQcmVEZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0IHx8ICcnLFxuICAgICk7XG4gICAgaWYgKHByZURlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlRGVwbG95bWVudFN0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmRlcGxveW1lbnRTdGVwKTtcblxuICAgIGNvbnN0IHBvc3REZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UG9zdERlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMucG9zdERlcGxveVdvcmtmbG93U2NyaXB0ID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwb3N0RGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwb3N0RGVwbG95bWVudFN0ZXApO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JEZWZpbml0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gZ2VuZXJhdGUgdGhlIGRpZmYgb3V0cHV0XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgZ2VuZXJhdGVEaWZmU3RlcCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgJ2RpZmY6b3V0cHV0JyxcbiAgICAgICdHZW5lcmF0ZSBEaWZmIE91dHB1dCcsXG4gICAgICB0cnVlLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgam9iIHRvIGFubm90YXRlIHRoZSBQUiB3aXRoIHRoZSBkaWZmIG91dHB1dCBmb3IgYWxsIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gZGVwZW5kZW50Sm9iTmFtZXMgVGhlIG5hbWVzIG9mIHRoZSBqb2JzIHRoYXQgdGhlIGFubm90YXRpb24gam9iIGRlcGVuZHMgb25cbiAgICogQHJldHVybnMgVGhlIGpvYiBkZWZpbml0aW9uIGZvciBhbm5vdGF0aW5nIHRoZSBQUiB3aXRoIHRoZSBkaWZmIG91dHB1dFxuICAgKi9cbiAgcHVibGljIGdldEFubm90YXRlRGlmZkpvYihkZXBlbmRlbnRKb2JOYW1lczogc3RyaW5nW10pOiBKb2Ige1xuICAgIHJldHVybiB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgbmVlZHM6IGRlcGVuZGVudEpvYk5hbWVzLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgICAgICAgdXNlczogJ21zaGljay9hZGQtcHItY29tbWVudEB2MycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ21lc3NhZ2UtaWQnOiAnZGlmZi1vdXRwdXQnLFxuICAgICAgICAgICAgJ3JlZnJlc2gtbWVzc2FnZS1wb3NpdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnbWVzc2FnZSc6IGRlcGVuZGVudEpvYk5hbWVzLm1hcChqb2JOYW1lID0+IGBcXCR7eyBuZWVkcy4ke2pvYk5hbWV9Lm91dHB1dHMuJHtmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWR9IH19YCkuam9pbignXFxuJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0ZXAgdG8gZm9ybWF0IHRoZSBkaWZmIG91dHB1dCBpbnRvIGEgR2l0SHViIGFubm90YXRpb24gY29tbWVudCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnQgVGhlIGVudmlyb25tZW50IHRvIGZvcm1hdCB0aGUgZGlmZiBmb3JcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldEZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdHZXQgZm9ybWF0dGVkIGRpZmYgYW5ub3RhdGlvbiBjb21tZW50JyxcbiAgICAgIGlkOiBmb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwSWQsXG4gICAgICBydW46IFtcbiAgICAgICAgJ2VjaG8gXCJkYXRhPDxFT0ZcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgIGBlY2hvIFwiIyMjIENoYW5nZXMgZm9yIGVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XCIgPj4gJEdJVEhVQl9PVVRQVVRgLFxuICAgICAgICAnZWNobyBcIlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCI8ZGV0YWlscz5cIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCJcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgIFwiZWNobyAnXFxgXFxgXFxgJyA+PiAkR0lUSFVCX09VVFBVVFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICcgIHNlZCBcXCdzL1xcXFx4MUJcXFxcW1swLTk7XSpbbUdLSEZdLy9nXFwnIFwiJGZpbGVcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICcgIGVjaG8gXCJcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+ICRHSVRIVUJfT1VUUFVUXCIsXG4gICAgICAgICdlY2hvIFwiPC9kZXRhaWxzPlwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCJcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiRU9GXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVwbG95bWVudCBtZXRob2QgYXJndW1lbnQgZm9yIHRoZSBkZXBsb3kgY29tbWFuZFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgZGlmZiBhbm5vdGF0aW9uIGpvYiBmb3IgdGhlIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlmZkFubm90YXRpb25Kb2JGb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICApOiBKb2Ige1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogbmFtZSxcbiAgICB9IDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgam9iRGVmaW5pdGlvbjogSm9iID0ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBbJ2J1aWxkJ10sXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBpZFRva2VuOiB0aGlzLnByb3BzLmF1dGhQcm92aWRlciA9PT0gQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgW2Zvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZF06IHtcbiAgICAgICAgICBzdGVwSWQ6IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCxcbiAgICAgICAgICBvdXRwdXROYW1lOiAnZGF0YScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLnRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zKSk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLmdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKHNldHVwTnBtQ29uZmlnU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHNldHVwTnBtQ29uZmlnU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuZ2VuZXJhdGVEaWZmU3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuZ2V0Rm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcEZvckVudmlyb25tZW50KG5hbWUpKTtcblxuICAgIHJldHVybiBqb2JEZWZpbml0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaWZmIGFubm90YXRpb24gam9icyBmb3IgYWxsIGVudmlyb25tZW50c1xuICAgKiBAcmV0dXJucyBSZWNvcmQgb2Ygam9ic1xuICAgKi9cbiAgZ2V0IGRpZmZBbm5vdGF0aW9uSm9icygpOiBSZWNvcmQ8c3RyaW5nLCBKb2I+IHtcbiAgICBjb25zdCB7IGVudmlyb25tZW50VmFyaWFibGVOYW1lLCBlbnZpcm9ubWVudHMgfSA9IHRoaXMucHJvcHMuZGVwbG95T3B0aW9ucztcbiAgICBjb25zdCBqb2JFbnRyaWVzID0gZW52aXJvbm1lbnRzLm1hcCgoZW52aXJvbm1lbnRPcHRpb25zKTogW3N0cmluZywgSm9iXSA9PiB7XG4gICAgICByZXR1cm4gW2dldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnRPcHRpb25zLm5hbWUpLCB0aGlzLmdldERpZmZBbm5vdGF0aW9uSm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIGNvbnN0IGpvYnMgPSBPYmplY3QuZnJvbUVudHJpZXMoam9iRW50cmllcyk7XG4gICAgam9ic1snRGlmZi1Bbm5vdGF0aW9uLUNvbW1lbnQnXSA9IHRoaXMuZ2V0QW5ub3RhdGVEaWZmSm9iKE9iamVjdC5rZXlzKGpvYnMpKTtcbiAgICByZXR1cm4gam9icztcbiAgfVxuXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZXBsb3kgam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRlcGxveSBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlcGxveUpvYklkKGVudmlyb25tZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBEZXBsb3ktJHtlbnZpcm9ubWVudE5hbWV9YDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSUQgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAqIEBwYXJhbSBlbnZpcm9ubWVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50XG4gKiBAcmV0dXJucyBUaGUgZGlmZiBhbm5vdGF0aW9uIGpvYiBJRFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlmZkFubm90YXRpb25Kb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGlmZi1Bbm5vdGF0aW9uLSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG4iXX0=
666
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTQxQkEsd0NBRUM7QUFPRCx3REFFQzs7QUF2MkJELG1DQUE0QztBQUM1Qyw4Q0FBa0Q7QUFDbEQsdUVBQWdGO0FBQ2hGLHNEQUFpRTtBQUNqRSxtQ0FBa0g7QUFFbEgsTUFBTSwyQkFBMkIsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RCxNQUFNLHNDQUFzQyxHQUFFLFNBQVMsMkJBQTJCLDBDQUEwQyxDQUFDO0FBQzdILE1BQU0sb0NBQW9DLEdBQUcsbUNBQW1DLENBQUM7QUF3Q2pGOzs7R0FHRztBQUNILE1BQWEseUNBQXlDO0lBRXBEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMseUNBQXlDLENBQ3JELGFBQTRCLEVBQzVCLHVCQUEwRDtRQUcxRCxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUsseUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLHdFQUF3RSxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJ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Z0Isc0JBQXNCLENBQUMsZUFBdUI7SUFDNUQsT0FBTyxtQkFBbUIsZUFBZSxFQUFFLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGphdmFzY3JpcHQsIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBXb3JrZmxvd1N0ZXBzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCwgSm9iIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkID0gJ2RlcGxveW1lbnQtY2hlY2snO1xuY29uc3Qgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb249IGBzdGVwcy4ke2NoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZH0ub3V0cHV0cy5oYXNfYWN0aXZlX2RlcGxveW1lbnQgIT0gJ3RydWUnYDtcbmNvbnN0IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCA9ICdmb3JtYXR0ZWRfZGlmZl9hbm5vdGF0aW9uX2NvbW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhY3RpdmUgZGVwbG95bWVudHMgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFRhc2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZm9yIENvZGVBcnRpZmFjdCwgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBhdXRoUHJvdmlkZXI/OiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBucG0gY29uZmlnIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCB0aGF0IGlzIGJlaW5nIGRlcGxveWVkLCBpZiBhbnlcbiAgICogTm90ZTogVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIDE4XG4gICAqL1xuICByZWFkb25seSBucG1Db25maWdFbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBqb2Igc3RyYXRlZ3ksIHdoZXRoZXIgdG8gdXNlIGEgbWF0cml4IGpvYiBvciBtdWx0aXBsZSBqb2JzIGZvciBlYWNoIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50RGVwZW5kZW5jaWVzPzogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY3JlYXRlIHJldXNhYmxlIHN0ZXBzIGZvciB0aGUgZGVwbG95bWVudCB3b3JrZmxvd1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3Rvcnkge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBwcm92aWRlZCBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgdmFsaWRcbiAgICogQHBhcmFtIGRlcGxveU9wdGlvbnMgVGhlIGRlcGxveW1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgVGhlIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIHRvIHZhbGlkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKFxuICAgIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyxcbiAgKTogdm9pZCB7XG5cbiAgICBpZiAoZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSAhPT0gRGVwbG95Sm9iU3RyYXRlZ3kuTVVMVElfSk9CKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgTVVMVElfSk9CIHN0cmF0ZWd5Jyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpLmZvckVhY2goKFtlbnYsIGRlcHNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGVudik7XG4gICAgICBpZiAoIWhhc0Vudmlyb25tZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgXCIke2Vudn1cIiBkZWZpbmVkIGluIGRlcGVuZGVuY2llcyBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgfVxuICAgICAgZGVwcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0RlcEVudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZGVwKTtcbiAgICAgICAgaWYgKCFoYXNEZXBFbnZpcm9ubWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSBlbnZpcm9ubWVudCBcIiR7ZGVwfVwiIGZvciBlbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZhY3RvcnkgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMsXG4gICkge31cblxuICAvKipcbiAgICogQ29uZGl0aW9uIHRvIHNraXAgYSBzdGVwIGlmIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGlzIGFscmVhZHkgcHJlc2VudFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIGNvbmRpdGlvbiBvciB1bmRlZmluZWQgaWYgY2hlY2tBY3RpdmVEZXBsb3ltZW50IGlzIGZhbHNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHsgaWY6IGBcXCR7eyAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlY2tvdXRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiBXb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KHtcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZmV0Y2hEZXB0aDogMCxcbiAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgaWYgZXhpc3RzXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIHByZUluc3RhbGxUYXNrTmFtZSBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUsXG4gICAgICBydW46IGBucHggcHJvamVuICR7dGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gY2hlY2tcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCxcbiAgICAgIHVzZXM6ICdBbWluRmF6bE1vbmRvL2NoZWNrLWRlcGxveWVkLWVudmlyb25tZW50QHYxJyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGVudjoge1xuICAgICAgICBHSVRIVUJfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KCk6IEpvYlN0ZXBbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgsXG4gICAgICB0aGlzLmFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwcyB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtdO1xuXG4gICAgY29uc3QgZnJvbUVudlZhcmlhYmxlU3RlcCA9IHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgKTtcblxuICAgIGlmIChmcm9tRW52VmFyaWFibGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGZyb21FbnZWYXJpYWJsZVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtZVJvbGVTdGVwID0gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPz8gJycsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyA/PyA5MDAsXG4gICAgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChhc3N1bWVSb2xlU3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gQVdTIGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZCxcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuIGEgSm9iU3RlcCBvbmx5IGlmIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyB9fWA7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAnZWNobyBcIkFXU19BQ0NFU1NfS0VZX0lEPSRhY2Nlc3NLZXlJZFwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRzZWNyZXRBY2Nlc3NLZXlcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19SRUdJT049JHJlZ2lvblwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmIGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0NvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHMnLFxuICAgICAgcnVuOiBgJHtjb21tYW5kcy5qb2luKCdcXG4nKX1gLFxuICAgICAgZW52OiB7XG4gICAgICAgIGFjY2Vzc0tleUlkOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5yb2xlVG9Bc3N1bWUgfX0nLFxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcGFyYW0gcm9sZVRvQXNzdW1lIFRoZSByb2xlIHRvIGFzc3VtZVxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyBUaGUgZHVyYXRpb24gZm9yIGFzc3VtaW5nIHRoZSByb2xlXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJvbGVUb0Fzc3VtZTogc3RyaW5nLFxuICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBzdHJpbmcgfCBudW1iZXIsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIGNvbnN0IHNlY3JldHNQYXJhbXMgPVxuICAgICAgdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUiA/XG4gICAgICAgIHtcbiAgICAgICAgICAnYXdzLWFjY2Vzcy1rZXktaWQnOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgICAnYXdzLXNlY3JldC1hY2Nlc3Mta2V5JzogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0Fzc3VtZSBBV1MgUm9sZScsXG4gICAgICB1c2VzOiAnYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NCcsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIC4uLnNlY3JldHNQYXJhbXMsXG4gICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgJ2F3cy1yZWdpb24nOiByZWdpb24sXG4gICAgICAgICdyb2xlLWR1cmF0aW9uLXNlY29uZHMnOiBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgTlBNIGNvbmZpZyBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBucG1Db25maWcgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBOcG1Db25maWdGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgcHVibGljIGdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbnBtQ29uZmlnRW52aXJvbm1lbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFucG1Db25maWdFbnZpcm9ubWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9ICdDT05GSUdfVkFMVUUnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogJ1NldHRpbmcgTlBNIENvbmZpZycsXG4gICAgICBlbnY6IHtcbiAgICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgcnVuOiBgbnBtIGNvbmZpZyBzZXQgJHtucG1Db25maWdFbnZpcm9ubWVudH0gJCR7ZW52aXJvbm1lbnRWYXJpYWJsZU5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBydW4gYSBzcGVjaWZpYyBzY3JpcHRcbiAgICogQHBhcmFtIHNjcmlwdE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW5cbiAgICogQHBhcmFtIHN0ZXBOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGVwIGluIHRoZSB3b3JrZmxvd1xuICAgKiBAcGFyYW0gaGFzU2NyaXB0RmxhZyBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UnVuU2NyaXB0U3RlcChcbiAgICBzY3JpcHROYW1lOiBzdHJpbmcsXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBoYXNTY3JpcHRGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghaGFzU2NyaXB0RmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicgJiYgIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiBgUnVuICR7c3RlcE5hbWV9YCxcbiAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnJ1blNjcmlwdENvbW1hbmR9ICR7c2NyaXB0TmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBkZXBsb3kgdGhlIHdvcmtmbG93XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkZXBsb3k6d29ya2Zsb3cnLFxuICAgICAgJ0RlcGxveW1lbnQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1ByZURlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucHJlRGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmUtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQcmVEZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwcmUtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHByZURlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcHJlLWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHByZURlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUHJlIERlcGxveW1lbnQnLFxuICAgICAgaGFzUHJlRGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvc3REZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUG9zdERlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucG9zdERlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zdC1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwb3N0LWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwb3N0RGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwb3N0LWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUG9zdCBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGVwbG95bWVudCBqb2JzIHdoZXRoZXIgZm9yIG1hdHJpeCBzdHJhdGVneSBvciBub3RcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybignVGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhbnkgZW52aXJvbm1lbnQgc2V0LCBtYWtlIHN1cmUgdGhpcyBpcyBkZXNpcmVkIHNldHRpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuam9iU3RyYXRlZ3kgPT09IERlcGxveUpvYlN0cmF0ZWd5Lk1BVFJJWCA/IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNYXRyaXggOiB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTWF0cml4KCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgY29uc3QgeyBlbnZpcm9ubWVudHMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG5cbiAgICBjb25zdCBpbmNsdWRlID0gZW52aXJvbm1lbnRzLm1hcChlbnZpcm9ubWVudE9wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgeyBhd3NDcmVkZW50aWFscyB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZVNldHRpbmdzID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8ge1xuICAgICAgICByb2xlVG9Bc3N1bWU6IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kczogYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB8fCA5MDAsXG4gICAgICB9OiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFjY2Vzc0tleUlkU2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnO1xuICAgICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSc7XG5cbiAgICAgIGNvbnN0IGhhc1Bvc3REZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICBjb25zdCBoYXNQcmVEZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50T3B0aW9ucy5uYW1lLFxuICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWUsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgICBhc3N1bWVSb2xlLFxuICAgICAgICBoYXNQb3N0RGVwbG95VGFzayxcbiAgICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIGhhc1ByZURlcGxveVRhc2ssXG4gICAgICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgLi4uYXNzdW1lUm9sZVNldHRpbmdzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0tZGVwbG95JyxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbXG4gICAgICAgICdyZWxlYXNlX2dpdGh1YicsXG4gICAgICBdLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5maW5kSW5kZXgoZW52ID0+IGVudi5uYW1lID09PSBlbnZpcm9ubWVudE5hbWUpO1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlRW52aXJvbm1lbnQgPSBpbmRleCA+IDAgPyB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzW2luZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQubmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzW2Vudmlyb25tZW50TmFtZV07XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQoZGVwKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goJ3JlbGVhc2VfZ2l0aHViJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbXVsdGktam9iIHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2IoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE9wdGlvbnMubmFtZSksIHRoaXMuZ2V0Sm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoam9icyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldEpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogYCR7bmFtZX0tZGVwbG95YCxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiB0aGlzLmdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMobmFtZSksXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGdlbmVyYXRlIHRoZSBkaWZmIG91dHB1dFxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdlbmVyYXRlRGlmZlN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkaWZmOm91dHB1dCcsXG4gICAgICAnR2VuZXJhdGUgRGlmZiBPdXRwdXQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiB0byBhbm5vdGF0ZSB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXQgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIGRlcGVuZGVudEpvYk5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgam9icyB0aGF0IHRoZSBhbm5vdGF0aW9uIGpvYiBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYW5ub3RhdGluZyB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXRcbiAgICovXG4gIHB1YmxpYyBnZXRBbm5vdGF0ZURpZmZKb2IoZGVwZW5kZW50Sm9iTmFtZXM6IHN0cmluZ1tdKTogSm9iIHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBkZXBlbmRlbnRKb2JOYW1lcyxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICBnaXRodWIuV29ya2Zsb3dTdGVwcy5kb3dubG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGRpZmYgYXJ0aWZhY3RzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiAnZGlmZi1vdXRwdXQtKicsXG4gICAgICAgICAgICBwYXRoOiAnZGlmZi1vdXRwdXRzJyxcbiAgICAgICAgICAgIG1lcmdlTXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgICAgICAgdXNlczogJ21zaGljay9hZGQtcHItY29tbWVudEB2MycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ21lc3NhZ2UtaWQnOiAnZGlmZi1vdXRwdXQnLFxuICAgICAgICAgICAgJ3JlZnJlc2gtbWVzc2FnZS1wb3NpdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnbWVzc2FnZS1wYXRoJzogJ2RpZmYtb3V0cHV0cy8qLm1kJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBmb3JtYXQgdGhlIGRpZmYgb3V0cHV0IGludG8gYSBHaXRIdWIgYW5ub3RhdGlvbiBjb21tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gZm9ybWF0IHRoZSBkaWZmIGZvclxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0dldCBmb3JtYXR0ZWQgZGlmZiBhbm5vdGF0aW9uIGNvbW1lbnQnLFxuICAgICAgaWQ6IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCxcbiAgICAgIHJ1bjogW1xuICAgICAgICAnbWtkaXIgLXAgZGlmZi1vdXRwdXQnLFxuICAgICAgICBgZWNobyBcIiMjIyBDaGFuZ2VzIGZvciBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVwiID4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZGAsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPGRldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnZWNobyBcIlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICBcImVjaG8gJ1xcYFxcYFxcYCcgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiBkaWZmLW91dHB1dC9kaWZmLSR7ZW52aXJvbm1lbnR9Lm1kJyxcbiAgICAgICAgJyAgc2VkIFxcJ3MvXFxcXHgxQlxcXFxbWzAtOTtdKlttR0tIRl0vL2dcXCcgXCIkZmlsZVwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnICBlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWRcIixcbiAgICAgICAgJ2VjaG8gXCI8L2RldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgZW52OiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGFyZ3VtZW50IGZvciB0aGUgZGVwbG95IGNvbW1hbmRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldERpZmZBbm5vdGF0aW9uSm9iRm9yRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBuZWVkczogWydidWlsZCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZW5lcmF0ZURpZmZTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSkpO1xuXG4gICAgLy8gVXBsb2FkIHRoZSBkaWZmIG91dHB1dCBhcyBhbiBhcnRpZmFjdFxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChcbiAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgbmFtZTogJ1VwbG9hZCBkaWZmIG91dHB1dCcsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBuYW1lOiBgZGlmZi1vdXRwdXQtJHtuYW1lfWAsXG4gICAgICAgICAgcGF0aDogJ2RpZmYtb3V0cHV0LycsXG4gICAgICAgICAgcmV0ZW50aW9uRGF5czogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9iRW50cmllcyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICBjb25zdCBqb2JzID0gT2JqZWN0LmZyb21FbnRyaWVzKGpvYkVudHJpZXMpO1xuICAgIGpvYnNbJ0RpZmYtQW5ub3RhdGlvbi1Db21tZW50J10gPSB0aGlzLmdldEFubm90YXRlRGlmZkpvYihPYmplY3Qua2V5cyhqb2JzKSk7XG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaWZmIGFubm90YXRpb24gam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERpZmYtQW5ub3RhdGlvbi0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuIl19
package/package.json CHANGED
@@ -31,7 +31,7 @@
31
31
  "jsii-docgen": "^10.5.0",
32
32
  "jsii-pacmak": "^1.127.0",
33
33
  "jsii-rosetta": "5.9.x",
34
- "projen": "^0.99.38",
34
+ "projen": "^0.99.42",
35
35
  "ts-jest": "^29.4.9",
36
36
  "ts-node": "^10.9.2",
37
37
  "typescript": "^5.9.3",
@@ -39,10 +39,10 @@
39
39
  },
40
40
  "peerDependencies": {
41
41
  "constructs": "^10.6.0",
42
- "projen": "^0.99.38"
42
+ "projen": "^0.99.42"
43
43
  },
44
44
  "dependencies": {
45
- "projen": "^0.99.38",
45
+ "projen": "^0.99.42",
46
46
  "semver": "^7.7.4"
47
47
  },
48
48
  "bundledDependencies": [
@@ -60,6 +60,7 @@
60
60
  "devEngines": {
61
61
  "packageManager": {
62
62
  "name": "pnpm",
63
+ "version": ">=10",
63
64
  "onFail": "ignore"
64
65
  }
65
66
  },
@@ -68,7 +69,7 @@
68
69
  "publishConfig": {
69
70
  "access": "public"
70
71
  },
71
- "version": "0.1.798",
72
+ "version": "0.1.800",
72
73
  "jest": {
73
74
  "coverageProvider": "v8",
74
75
  "testMatch": [
@@ -124,31 +125,31 @@
124
125
  "rootDir": "src"
125
126
  }
126
127
  },
127
- "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\".",
128
+ "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"pnpm exec projen\".",
128
129
  "scripts": {
129
- "build": "npx projen build",
130
- "bump": "npx projen bump",
131
- "clobber": "npx projen clobber",
132
- "compat": "npx projen compat",
133
- "compile": "npx projen compile",
134
- "default": "npx projen default",
135
- "docgen": "npx projen docgen",
136
- "eject": "npx projen eject",
137
- "eslint": "npx projen eslint",
138
- "package": "npx projen package",
139
- "package-all": "npx projen package-all",
140
- "package:js": "npx projen package:js",
141
- "post-compile": "npx projen post-compile",
142
- "post-upgrade": "npx projen post-upgrade",
143
- "pre-compile": "npx projen pre-compile",
144
- "publish:github": "npx projen publish:github",
145
- "publish:npm": "npx projen publish:npm",
146
- "release": "npx projen release",
147
- "test": "npx projen test",
148
- "test:watch": "npx projen test:watch",
149
- "unbump": "npx projen unbump",
150
- "upgrade": "npx projen upgrade",
151
- "watch": "npx projen watch",
152
- "projen": "npx projen"
130
+ "build": "projen build",
131
+ "bump": "projen bump",
132
+ "clobber": "projen clobber",
133
+ "compat": "projen compat",
134
+ "compile": "projen compile",
135
+ "default": "projen default",
136
+ "docgen": "projen docgen",
137
+ "eject": "projen eject",
138
+ "eslint": "projen eslint",
139
+ "package": "projen package",
140
+ "package-all": "projen package-all",
141
+ "package:js": "projen package:js",
142
+ "post-compile": "projen post-compile",
143
+ "post-upgrade": "projen post-upgrade",
144
+ "pre-compile": "projen pre-compile",
145
+ "publish:github": "projen publish:github",
146
+ "publish:npm": "projen publish:npm",
147
+ "release": "projen release",
148
+ "test": "projen test",
149
+ "test:watch": "projen test:watch",
150
+ "unbump": "projen unbump",
151
+ "upgrade": "projen upgrade",
152
+ "watch": "projen watch",
153
+ "projen": "projen"
153
154
  }
154
155
  }