@xpertss/projen-types 0.0.17 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.jsii +20 -20
  2. package/README.md +99 -5
  3. package/lib/actions/action-build-workflow.js +1 -1
  4. package/lib/actions/action-dogfood-workflow.js +1 -1
  5. package/lib/actions/action-sonar-workflow.js +1 -1
  6. package/lib/actions/github-action-project.js +4 -3
  7. package/lib/cdk/app-runtime-scaffold.js +1 -1
  8. package/lib/cdk/cdk-app-project.js +1 -1
  9. package/lib/cdk/cdk-infra-project.js +1 -1
  10. package/lib/cdk/cdk-typescript-base.js +1 -1
  11. package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
  12. package/lib/cdk/components/edge-networking-constructs.js +1 -1
  13. package/lib/cdk/database-component.js +1 -1
  14. package/lib/common/license-file.d.ts +10 -0
  15. package/lib/common/license-file.js +72 -0
  16. package/lib/common/projen-drift-check-workflow.js +1 -1
  17. package/lib/common/workflow-change-notice-workflow.js +1 -1
  18. package/lib/java/components/cdk-deploy-hook.js +1 -1
  19. package/lib/java/components/code-index-workflow.js +1 -1
  20. package/lib/java/components/docker-publish.js +1 -1
  21. package/lib/java/components/flyway-migration.js +1 -1
  22. package/lib/java/components/github-packages-publish.js +1 -1
  23. package/lib/java/components/maven-central-publish.js +1 -1
  24. package/lib/java/components/maven-upgrade-report.js +1 -1
  25. package/lib/java/java-app-project.js +1 -1
  26. package/lib/java/java-library-project.js +1 -1
  27. package/lib/java/java-maven-base.js +4 -3
  28. package/lib/java/java-service-project.js +1 -1
  29. package/lib/java/java-spring-boot-project.js +1 -1
  30. package/lib/java/maven/maven-module.js +1 -1
  31. package/lib/java/maven/maven-pom.js +1 -1
  32. package/package.json +1 -1
@@ -9,6 +9,7 @@ const action_sonar_workflow_1 = require("./action-sonar-workflow");
9
9
  const constants_1 = require("../common/constants");
10
10
  const editorconfig_1 = require("../common/editorconfig");
11
11
  const internal_actions_1 = require("../common/internal-actions");
12
+ const license_file_1 = require("../common/license-file");
12
13
  const projen_drift_check_workflow_1 = require("../common/projen-drift-check-workflow");
13
14
  const projenrc_ts_1 = require("../common/projenrc-ts");
14
15
  const workflow_change_notice_workflow_1 = require("../common/workflow-change-notice-workflow");
@@ -63,7 +64,7 @@ hand-committed.
63
64
  * per the action's own F### spec - this type only lints it.
64
65
  */
65
66
  class GitHubActionProject extends projen_1.github.GitHubProject {
66
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.17" };
67
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubActionProject", version: "0.0.19" };
67
68
  buildWorkflow;
68
69
  dogfoodWorkflow;
69
70
  sonarWorkflow;
@@ -101,7 +102,7 @@ class GitHubActionProject extends projen_1.github.GitHubProject {
101
102
  gheTokenSecret: options.gheTokenSecret ?? constants_1.DEFAULT_GHE_TOKEN_SECRET,
102
103
  });
103
104
  new workflow_change_notice_workflow_1.WorkflowChangeNoticeWorkflow(this);
104
- new projen_1.License(this, {
105
+ (0, license_file_1.addLicenseFile)(this, {
105
106
  spdx: options.license ?? 'MIT',
106
107
  copyrightOwner: 'xpertss',
107
108
  });
@@ -168,4 +169,4 @@ class GitHubActionProject extends projen_1.github.GitHubProject {
168
169
  }
169
170
  }
170
171
  exports.GitHubActionProject = GitHubActionProject;
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWFjdGlvbi1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvZ2l0aHViLWFjdGlvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FPZ0I7QUFDaEIsbUVBQThEO0FBQzlELHVFQUF3RjtBQUN4RixtRUFBOEQ7QUFDOUQsbURBQStEO0FBQy9ELHlEQUF5RDtBQUN6RCxpRUFBMEU7QUFDMUUsdUZBQWlGO0FBQ2pGLHVEQUFpRTtBQUNqRSwrRkFBeUY7QUFDekYsaUVBQWlFO0FBRWpFLDJFQUEyRTtBQUMzRSx5RUFBeUU7QUFDekUsK0RBQStEO0FBQy9ELHlFQUF5RTtBQUN6RSxvRUFBb0U7QUFDcEUsa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxNQUFNLGNBQWMsR0FBVyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDdEUsaUVBQWlFO0FBQ2pFLE1BQU0sb0JBQW9CLEdBQVcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBRTNFLHdFQUF3RTtBQUN4RSw0RUFBNEU7QUFDNUUsbUNBQW1DO0FBQ25DLE1BQU0sc0JBQXNCLEdBQUcsUUFBUSxDQUFDO0FBZ0V4QyxTQUFTLHFCQUFxQixDQUFDLE9BQW1DO0lBQ2hFLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSTs7RUFFeEIsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFOzs7OztrQkFLVCxPQUFPLENBQUMsSUFBSTs7Ozs7Ozs7Ozs7Ozs7O0NBZTdCLENBQUM7QUFDRixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxlQUFNLENBQUMsYUFBYTs7SUFDM0MsYUFBYSxDQUFzQjtJQUNuQyxlQUFlLENBQXdCO0lBQ3ZDLGFBQWEsQ0FBc0I7SUFDbkMsT0FBTyxDQUFrQjtJQUV6QyxZQUFZLE9BQW1DO1FBQzdDLElBQUksQ0FBQyxPQUFPLENB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QixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7WUFDMUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtTQUNuRCxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsa0VBQWtFO1FBQ2xFLGtFQUFrRTtRQUNsRSxxRUFBcUU7UUFDckUsOERBQThEO1FBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxnQkFBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxFQUFFLE1BQU07WUFDZCxtRUFBbUU7WUFDbkUsd0RBQXdEO1lBQ3hELGtCQUFrQixFQUFFLE1BQU07WUFDMUIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDaEMsV0FBVyxFQUFFLGNBQWM7WUFDM0IsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkQsY0FBYyxFQUFFLGdCQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUNuRCxXQUFXLEVBQUUsMEJBQTBCLHNCQUFzQixFQUFFO1lBQy9ELHlCQUF5QixFQUFFO2dCQUN6QixFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2FBQ2hEO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsbUVBQW1FO1FBQ25FLHNFQUFzRTtRQUN0RSxrRUFBa0U7UUFDbEUsNkNBQTZDO1FBQzdDLElBQUEsc0NBQW1CLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsRUFDakQscUZBQXFGLENBQ3RGLENBQUM7SUFDSixDQUFDOztBQTFISCxrREEySEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBKc29uRmlsZSxcbiAgTGljZW5zZSxcbiAgUmVsZWFzYWJsZUNvbW1pdHMsXG4gIFlhbWxGaWxlLFxuICBnaXRodWIsXG4gIHJlbGVhc2UsXG59IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBY3Rpb25CdWlsZFdvcmtmbG93IH0gZnJvbSAnLi9hY3Rpb24tYnVpbGQtd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uRG9nZm9vZE9wdGlvbnMsIEFjdGlvbkRvZ2Zvb2RXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLWRvZ2Zvb2Qtd29ya2Zsb3cnO1xuaW1wb3J0IHsgQWN0aW9uU29uYXJXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLXNvbmFyLXdvcmtmbG93JztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYWRkRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vY29tbW9uL2VkaXRvcmNvbmZpZyc7XG5pbXBvcnQgeyBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzIH0gZnJvbSAnLi4vY29tbW9uL2ludGVybmFsLWFjdGlvbnMnO1xuaW1wb3J0IHsgUHJvamVuRHJpZnRDaGVja1dvcmtmbG93IH0gZnJvbSAnLi4vY29tbW9uL3Byb2plbi1kcmlmdC1jaGVjay13b3JrZmxvdyc7XG5pbXBvcnQgeyBhdHRhY2hUeXBlU2NyaXB0UHJvamVucmMgfSBmcm9tICcuLi9jb21tb24vcHJvamVucmMtdHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1jaGFuZ2Utbm90aWNlLXdvcmtmbG93JztcbmltcG9ydCB7IG5vdGVXb3JrZmxvd1B1cnBvc2UgfSBmcm9tICcuLi9jb21tb24vd29ya2Zsb3ctcHVycG9zZSc7XG5cbi8vIGByZXF1aXJlKCdwcm9qZW4vcGFja2FnZS5qc29uJylgL2ByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKWAgcmVzb2x2ZVxuLy8gdmlhIE5vZGUncyBub3JtYWwgbW9kdWxlIHJlc29sdXRpb24sIHNvIGluIGEgKnB1Ymxpc2hlZCogcGFja2FnZSB0aGVzZVxuLy8gcmVhZCB0aGUgdmVyc2lvbnMgYWN0dWFsbHkgaW5zdGFsbGVkIGluIHRoZSBjb25zdW1pbmcgcmVwbydzXG4vLyBub2RlX21vZHVsZXMgLSBleGFjdGx5IHRoZSBcIlBST0pFTl9WRVJTSU9OIG9mIHRoZSBzeW50aFwiIC8gXCJ2ZXJzaW9uIG9mXG4vLyB0aGlzIHBhY2thZ2UgdGhhdCBzY2FmZm9sZGVkIHRoZSByZXBvXCIgdGhlIHByaXZhdGUgcGFja2FnZS5qc29uJ3Ncbi8vIGRldkRlcGVuZGVuY2llcyBuZWVkIHRvIHBpbiAoc2VlIEYwMTAgQ0ktZGVwZW5kZW5jaWVzIHNlY3Rpb24pLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCdwcm9qZW4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBQUk9KRU5fVFlQRVNfVkVSU0lPTjogc3RyaW5nID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcblxuLy8gRXhhY3QgcGluLCByZWNvcmRlZCBhcyBhIGNvbXBvbmVudCBjb25zdGFudCAoQUQtMDAxOiBubyBsYXRlc3QvbW92aW5nXG4vLyB0YWcvc2VtdmVyIHJhbmdlIGluIGFueXRoaW5nIGEgZ2VuZXJhdGVkIHJlcG8gZGVwZW5kcyBvbikuIFVwZ3JhZGluZyB0aGlzXG4vLyBpcyBhIHJldmlld2VkIGRpZmYgb2YgdGhpcyBmaWxlLlxuY29uc3QgQ09NTUlUX0FORF9UQUdfVkVSU0lPTiA9ICcxMy4yLjEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YkFjdGlvblByb2plY3RPcHRpb25zXG4gIGV4dGVuZHMgZ2l0aHViLkdpdEh1YlByb2plY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIE9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBhY3Rpb24uIFVzZWQgaW4gdGhlIGRlZmF1bHQgUkVBRE1FXG4gICAqIHRlbXBsYXRlIGFuZCByZWNvcmRlZCBpbiB0aGUgcHJpdmF0ZSBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBHaXRIdWIgQWN0aW9ucyBzZWNyZXQgaG9sZGluZyB0aGUgUEFUIHVzZWQgZm9yXG4gICAqIHByb2plbi1hdXRvbWF0aW9uIFBSIGNvbW1lbnRzIChGMDAzKSBhbmQsIHdoZW4gdGhlIGFjdGlvbiBoYXMgYVxuICAgKiBgdG9rZW5gIGlucHV0LCB0aGUgZG9nZm9vZCdzIGludm9jYXRpb24gb2YgaXQuXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiXG4gICAqL1xuICByZWFkb25seSBnaGVUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVVJMIG9mIHRoZSBvcmcncyBTb25hckNsb3VkIGluc3RhbmNlIChlLmcuIGBodHRwczovL3NvbmFyY2xvdWQuaW9gKS5cbiAgICogTVVTVCBiZSByZWFjaGFibGUgZnJvbSBnaXRodWIuY29tLWhvc3RlZCAocHVibGljKSBydW5uZXJzIChBRC0wMDEpLlxuICAgKiBSZXF1aXJlZCwgbm8gZGVmYXVsdDogYSBndWVzc2VkIHNlcnZlciBpcyB3b3JzZSB0aGFuIGEgbG91ZCBmYWlsdXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgc29uYXJIb3N0VXJsOiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IFwiU09OQVJfVE9LRU5cIiAqL1xuICByZWFkb25seSBzb25hclRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBzb25hci55bWxgIGFsc28gcnVucyBvbiBgcHVsbF9yZXF1ZXN0YCBhcyBhIHBhc3MvZmFpbCBnYXRlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzb25hclB1bGxSZXF1ZXN0R2F0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkb2dmb29kIHNjZW5hcmlvIChBRC0wMDEpLiBXaGF0IGZpeHR1cmUgc3RhdGUsIHdoYXQgdG8gYXNzZXJ0LCBhbmRcbiAgICogaG93IHRvIGNsZWFuIHVwIGFyZSBzcGVjaWZpZWQgYnkgdGhlIGFjdGlvbidzIG93biBGIyMjIHNwZWMgLSB0aGVcbiAgICogaGlnaGVzdC1yaXNrIGJlaGF2aW9yIG9mIHRoYXQgYWN0aW9uLlxuICAgKlxuICAgKiBJdHMgdHlwZSBpcyBhIHN0cnVjdCwgd2hpY2ggcHJvamVuJ3MgQ0xJIGNhbm5vdCByZW5kZXIgaW50byBhIHByb2plbnJjLFxuICAgKiBzbyBpdCBjYW4gb25seSBiZSB3cml0dGVuIGJ5IGhhbmQgLSBpdCBpcyB0aGVyZWZvcmUgb3B0aW9uYWwsIGJlY2F1c2UgYVxuICAgKiAqcmVxdWlyZWQqIG9wdGlvbiBgcHJvamVuIG5ld2AgY2Fubm90IHN1cHBseSB3b3VsZCBtYWtlIHRoaXMgcHJvamVjdFxuICAgKiB0eXBlIGltcG9zc2libGUgdG8gc2NhZmZvbGQuIEFELTAwMSdzIFwibmV2ZXIgYSBzaWxlbnQgbm8tb3AgZG9nZm9vZFwiXG4gICAqIHJ1bGUgaXMgZW5mb3JjZWQgaW5zdGVhZCBieSB0aGUgd29ya2Zsb3cgaXQgZ2VuZXJhdGVzIGluIHRoYXQgY2FzZTogYVxuICAgKiBzaW5nbGUgc3RlcCB0aGF0IGZhaWxzIG9uIGV2ZXJ5IFBSIHVudGlsIGEgc2NlbmFyaW8gaXMgZGVjbGFyZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHRlc3QtZG9nZm9vZC55bWxgIHJ1bnMgb25lIGZhaWxpbmcgc3RlcCB0aGF0IHRlbGxzIHlvdSB0b1xuICAgKiBkZWNsYXJlIGEgc2NlbmFyaW9cbiAgICovXG4gIHJlYWRvbmx5IGRvZ2Zvb2Q/OiBBY3Rpb25Eb2dmb29kT3B0aW9ucztcblxuICAvKipcbiAgICogU1BEWCBpZGVudGlmaWVyIGZvciB0aGUgZ2VuZXJhdGVkIGBMSUNFTlNFYC5cbiAgICogQGRlZmF1bHQgXCJNSVRcIlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZT86IHN0cmluZztcblxuICAvKipcbiAgICogV3JpdGUgYSBwcm9qZW4tbWFuYWdlZCBgLmVkaXRvcmNvbmZpZ2AuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvcmNvbmZpZz86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRSZWFkbWVDb250ZW50cyhvcHRpb25zOiBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9ucyk6IHN0cmluZyB7XG4gIHJldHVybiBgIyAke29wdGlvbnMubmFtZX1cblxuJHtvcHRpb25zLmRlc2NyaXB0aW9uID8/ICcnfVxuXG4jIyBVc2FnZVxuXG5cXGBcXGBcXGB5YW1sXG4tIHVzZXM6IHhwZXJ0c3MvJHtvcHRpb25zLm5hbWV9QDxyZWY+XG5cXGBcXGBcXGBcblxuIyMgQnVtcGluZ1xuXG5BIFxcYGZlYXQ6XFxgL1xcYGZpeDpcXGAgY29tbWl0IHB1c2hlZCB0byBcXGBtYWluXFxgIGlzIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHk6IGJ1bXAsXG50YWcgXFxgdlguWS5aXFxgLCBHaXRIdWIgUmVsZWFzZS4gU2VlIFxcYC5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sXFxgLlxuXG4jIyBUcnVzdCBjb250cmFjdFxuXG5UaGlzIGlzIGEgY29tcG9zaXRlIChzaGVsbCkgYWN0aW9uIC0gbm8gTm9kZS9ucG0gYXQgcnVudGltZSwgbm8gRG9ja2VyLiBJdHNcbkNJIGxpbnQgZ2F0ZSAoXFxgYnVpbGQueW1sXFxgKSwgZG9nZm9vZCB0ZXN0IChcXGB0ZXN0LWRvZ2Zvb2QueW1sXFxgKSwgYW5kIFNvbmFyXG5zY2FuIChcXGBzb25hci55bWxcXGApIGFyZSBzY2FmZm9sZGVkIGJ5IFxcYEB4cGVydHNzL3Byb2plbi10eXBlc1xcYCdcblxcYEdpdEh1YkFjdGlvblByb2plY3RcXGA7IG9ubHkgXFxgYWN0aW9uLnltbFxcYCBhbmQgaXRzIHNoZWxsIHNjcmlwdHMgYXJlXG5oYW5kLWNvbW1pdHRlZC5cbmA7XG59XG5cbi8qKlxuICogU2NhZmZvbGRzIHRoZSByZXBvIGxpZmVjeWNsZSAoQUQtMDAxKSBhcm91bmQgYSBoYW5kLWNvbW1pdHRlZCwgY29tcG9zaXRlXG4gKiAoc2hlbGwpIEdpdEh1YiBBY3Rpb246IHRoZSBgYnVpbGRgL2B0ZXN0LWRvZ2Zvb2RgL2Bzb25hcmAvYHJlbGVhc2VgXG4gICogd29ya2Zsb3dzLCB2ZXJzaW9uaW5nIGFuZCByZWxlYXNlIGRpc2NpcGxpbmUsIHRoZSBGMDAzIHZlcmlmeSBjb21wb25lbnRzLFxuICAqIGFuZCByZXBvIGJvaWxlcnBsYXRlIChhIHByaXZhdGUgdmVyc2lvbi1zb3VyY2UgYHBhY2thZ2UuanNvbmAsIGAueWFtbGxpbnRgLFxuICAqIGBMSUNFTlNFYCwgYW5kIGEgYFJFQURNRS5tZGAgdGVtcGxhdGUpLiBUaGVcbiAqIGFjdGlvbidzIG93biBjb250ZW50XG4gKiAoYGFjdGlvbi55bWxgLCBpdHMgc2hlbGwgc2NyaXB0cywgYHRlc3QvYCBmaXh0dXJlcykgaXMgYXV0aG9yZWQgYnkgaGFuZFxuICogcGVyIHRoZSBhY3Rpb24ncyBvd24gRiMjIyBzcGVjIC0gdGhpcyB0eXBlIG9ubHkgbGludHMgaXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRIdWJBY3Rpb25Qcm9qZWN0IGV4dGVuZHMgZ2l0aHViLkdpdEh1YlByb2plY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdzogQWN0aW9uQnVpbGRXb3JrZmxvdztcbiAgcHVibGljIHJlYWRvbmx5IGRvZ2Zvb2RXb3JrZmxvdzogQWN0aW9uRG9nZm9vZFdvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgc29uYXJXb3JrZmxvdzogQWN0aW9uU29uYXJXb3JrZmxvdztcbiAgcHVibGljIHJlYWRvbmx5IHJlbGVhc2U6IHJlbGVhc2UuUmVsZWFzZTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBHaXRIdWJBY3Rpb25Qcm9qZWN0T3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5zb25hckhvc3RVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBzb25hckhvc3RVcmwnKTtcbiAgICB9XG4gICAgLy8gQSBkZWNsYXJlZC1idXQtaW5jb21wbGV0ZSBkb2dmb29kIGlzIHN0aWxsIGFuIGVycm9yIC0gc2VlXG4gICAgLy8gYEFjdGlvbkRvZ2Zvb2RXb3JrZmxvd2AsIHdoaWNoIG93bnMgdGhhdCBjaGVjayAoYW5kIHRoZVxuICAgIC8vIG5vLWRvZ2Zvb2QtZGVjbGFyZWQgY2FzZSkuXG5cbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgLy8gUFIgdGl0bGVzIGFyZSBub3QgZ2F0ZWQ6IGBmZWF0OmAvYGZpeDpgIG1hdHRlciBvbmx5IGJlY2F1c2UgdGhleSBkcml2ZVxuICAgICAgLy8gdGhlIHJlbGVhc2Ugd29ya2Zsb3cgKHZpYSBgcmVsZWFzYWJsZUNvbW1pdHNgKSwgbm90IFBSIGNoZWNrcy4gVGhlXG4gICAgICAvLyBjb252ZW50aW9uYWwtY29tbWl0IFBSLXRpdGxlIGxpbnQgaXMgYWRkZWQgYnkgdGhlIGBHaXRIdWJgIGNvbXBvbmVudFxuICAgICAgLy8gdW5sZXNzIGBnaXRodWJPcHRpb25zLnB1bGxSZXF1ZXN0TGludGAgaXMgYGZhbHNlYCAoaXQgZGVmYXVsdHMgdHJ1ZSkuXG4gICAgICBnaXRodWJPcHRpb25zOiB7IC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucywgcHVsbFJlcXVlc3RMaW50OiBmYWxzZSB9LFxuICAgICAgcmVhZG1lOiBvcHRpb25zLnJlYWRtZSA/PyB7IGNvbnRlbnRzOiBkZWZhdWx0UmVhZG1lQ29udGVudHMob3B0aW9ucykgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGdoID0gdGhpcy5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnR2l0SHViQWN0aW9uUHJvamVjdCByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24gdG8gYmUgZW5hYmxlZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzKGdoKTtcblxuICAgIC8vIEpldEJyYWlucyBJREUgc3RhdGUgKC5pZGVhLykgaXMgbmV2ZXIgdHJhY2tlZCBpbiBnZW5lcmF0ZWQgcmVwb3MsIGFuZFxuICAgIC8vIG5laXRoZXIgaXMgL3NwZWMvIChsb2NhbCBwbGFucyBhbmQgc3BlY3M7IHRoZSBwYXR0ZXJuIGNvdmVycyBldmVyeVxuICAgIC8vIHN1YmRpcmVjdG9yeSkuXG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy8uaWRlYS8qJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy9zcGVjLycpO1xuXG4gICAgaWYgKG9wdGlvbnMuZWRpdG9yY29uZmlnID8/IHRydWUpIHtcbiAgICAgIGFkZEVkaXRvckNvbmZpZyh0aGlzKTtcbiAgICB9XG5cbiAgICBuZXcgUHJvamVuRHJpZnRDaGVja1dvcmtmbG93KHRoaXMsIHtcbiAgICAgIGdoZVRva2VuU2VjcmV0OiBvcHRpb25zLmdoZVRva2VuU2VjcmV0ID8/IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCxcbiAgICB9KTtcbiAgICBuZXcgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyh0aGlzKTtcblxuICAgIG5ldyBMaWNlbnNlKHRoaXMsIHtcbiAgICAgIHNwZHg6IG9wdGlvbnMubGljZW5zZSA/PyAnTUlUJyxcbiAgICAgIGNvcHlyaWdodE93bmVyOiAneHBlcnRzcycsXG4gICAgfSk7XG5cbiAgICAvLyBgLnByb2plbnJjLnRzYCArIGBucHggcHJvamVuYCwgc2FtZSBhcyBldmVyeSBvdGhlciB0eXBlIGhlcmUuIEEgYmFyZVxuICAgIC8vIEdpdEh1YlByb2plY3QgaGFzIG5vIGRlZmF1bHQgdGFzayB0aGF0IHJ1bnMgYSBwcm9qZW5yYyBvbiBpdHMgb3duLCBzb1xuICAgIC8vIHRoaXMgaXMgd2hhdCBtYWtlcyBgbnB4IHByb2plbmAgd29yayBpbiB0aGUgZ2VuZXJhdGVkIHJlcG8gYXQgYWxsLlxuICAgIGF0dGFjaFR5cGVTY3JpcHRQcm9qZW5yYyh0aGlzKTtcblxuICAgIC8vIHByb2plbiBtYXJrcyBnZW5lcmF0ZWQgZmlsZXMgcmVhZC1vbmx5ICgwNDQ0KSBvbiBkaXNrIGJ5IGRlZmF1bHQsIGJ1dFxuICAgIC8vIHRoaXMgb25lIG11c3Qgc3RheSBvd25lci13cml0YWJsZTogdGhlIGRvY3VtZW50ZWQgdXBkYXRlIGZsb3dcbiAgICAvLyAoYG5wbSBpIC1EIEB4cGVydHNzL3Byb2plbi10eXBlc0BsYXRlc3RgKSBuZWVkcyBucG0gdG8gcmV3cml0ZSB0aGVcbiAgICAvLyBwaW5uZWQgdmVyc2lvbnMgaW4gYW4gZXhpc3RpbmcgcmVwby4gSGFuZC1lZGl0cyBhcmUgc3RpbGwgY2F1Z2h0IGJ5XG4gICAgLy8gdGhlIGRyaWZ0IGNoZWNrLlxuICAgIG5ldyBKc29uRmlsZSh0aGlzLCAncGFja2FnZS5qc29uJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgICAgcHJpdmF0ZTogdHJ1ZSxcbiAgICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICAgIGRldkRlcGVuZGVuY2llczoge1xuICAgICAgICAgICdwcm9qZW4nOiBQUk9KRU5fVkVSU0lPTixcbiAgICAgICAgICAnQHhwZXJ0c3MvcHJvamVuLXR5cGVzJzogUFJPSkVOX1RZUEVTX1ZFUlNJT04sXG4gICAgICAgICAgJ2NvbW1pdC1hbmQtdGFnLXZlcnNpb24nOiBDT01NSVRfQU5EX1RBR19WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRvbmx5OiBmYWxzZSxcbiAgICB9KTtcblxuICAgIG5ldyBZYW1sRmlsZSh0aGlzLCAnLnlhbWxsaW50Jywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGV4dGVuZHM6ICdkZWZhdWx0JyxcbiAgICAgICAgcnVsZXM6IHsgJ2xpbmUtbGVuZ3RoJzogeyBtYXg6IDEyMCB9IH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFdvcmtmbG93ID0gbmV3IEFjdGlvbkJ1aWxkV29ya2Zsb3codGhpcyk7XG5cbiAgICB0aGlzLmRvZ2Zvb2RXb3JrZmxvdyA9IG5ldyBBY3Rpb25Eb2dmb29kV29ya2Zsb3codGhpcywgb3B0aW9ucy5kb2dmb29kKTtcblxuICAgIHRoaXMuc29uYXJXb3JrZmxvdyA9IG5ldyBBY3Rpb25Tb25hcldvcmtmbG93KHRoaXMsIHtcbiAgICAgIHNvbmFySG9zdFVybDogb3B0aW9ucy5zb25hckhvc3RVcmwsXG4gICAgICBzb25hclRva2VuU2VjcmV0OiBvcHRpb25zLnNvbmFyVG9rZW5TZWNyZXQsXG4gICAgICBzb25hclB1bGxSZXF1ZXN0R2F0ZTogb3B0aW9ucy5zb25hclB1bGxSZXF1ZXN0R2F0ZSxcbiAgICB9KTtcblxuICAgIC8vIGBnaXRodWJSZWxlYXNlYCBkZWZhdWx0cyB0byB0cnVlLCB3aGljaCBhdXRvLXdpcmVzXG4gICAgLy8gYHB1Ymxpc2hUb0dpdEh1YlJlbGVhc2VzYCAtIGl0cyBgZ2ggcmVsZWFzZSBjcmVhdGUgLi4uIC0tdGFyZ2V0XG4gICAgLy8gJEdJVEhVQl9TSEFgIGNyZWF0ZXMgdGhlIHRhZyAqYW5kKiB0aGUgcmVsZWFzZSB0b2dldGhlciBmb3Igb3VyXG4gICAgLy8gY29udGludW91cyAocHVzaC10by1tYWluKSB0cmlnZ2VyLiBObyBzZXBhcmF0ZSBgcHVibGlzaFRvR2l0YCBjYWxsXG4gICAgLy8gbmVlZGVkICh0aGF0IHBhdGggb25seSBmaXJlcyBmb3IgYSBtYW51YWwgcmVsZWFzZSB0cmlnZ2VyKS5cbiAgICB0aGlzLnJlbGVhc2UgPSBuZXcgcmVsZWFzZS5SZWxlYXNlKHRoaXMsIHtcbiAgICAgIGJyYW5jaDogJ21haW4nLFxuICAgICAgLy8gTm8gYnVpbGQgYXJ0aWZhY3QgZm9yIGEgY29tcG9zaXRlIGFjdGlvbiAoQUQtMDAxKSAtIHRoaXMgaXMgb25seVxuICAgICAgLy8gd2hlcmUgUmVsZWFzZSBzdGFnZXMgaXRzIG93biB2ZXJzaW9uL2NoYW5nZWxvZyBmaWxlcy5cbiAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogJ2Rpc3QnLFxuICAgICAgdGFza3M6IFt0aGlzLmJ1aWxkV29ya2Zsb3cudGFza10sXG4gICAgICB2ZXJzaW9uRmlsZTogJ3BhY2thZ2UuanNvbicsXG4gICAgICByZWxlYXNhYmxlQ29tbWl0czogUmVsZWFzYWJsZUNvbW1pdHMuZmVhdHVyZXNBbmRGaXhlcygpLFxuICAgICAgcmVsZWFzZVRyaWdnZXI6IHJlbGVhc2UuUmVsZWFzZVRyaWdnZXIuY29udGludW91cygpLFxuICAgICAgYnVtcFBhY2thZ2U6IGBjb21taXQtYW5kLXRhZy12ZXJzaW9uQCR7Q09NTUlUX0FORF9UQUdfVkVSU0lPTn1gLFxuICAgICAgcmVsZWFzZVdvcmtmbG93U2V0dXBTdGVwczogW1xuICAgICAgICB7IG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsIHJ1bjogJ25wbSBjaScgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBUaGUgcmVsZWFzZSB3b3JrZmxvdyBpcyBjcmVhdGVkIGluc2lkZSBgcmVsZWFzZS5SZWxlYXNlYCAocHJvamVuXG4gICAgLy8gaW50ZXJuYWwpLCBub3QgYnkgdGhpcyB0eXBlIC0gcmVhY2ggaXRzIGZpbGUgYnkgcGF0aCB0byBhbm5vdGF0ZSBpdFxuICAgIC8vIGxpa2UgZXZlcnkgb3RoZXIgZ2VuZXJhdGVkIHdvcmtmbG93LiBUaGlzIHR5cGUgaXMgYWx3YXlzIGEgcm9vdFxuICAgIC8vIHByb2plY3QsIHNvIHByb2plbiBuYW1lcyBpdCBgcmVsZWFzZS55bWxgLlxuICAgIG5vdGVXb3JrZmxvd1B1cnBvc2UoXG4gICAgICB0aGlzLnRyeUZpbmRGaWxlKCcuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbCcpLFxuICAgICAgJ0NvbnRpbnVvdXMgcmVsZWFzZSBvbiBwdXNoIHRvIG1haW46IGJ1bXAgdmVyc2lvbiwgdGFnLCBhbmQgY3JlYXRlIGEgR2l0SHViIFJlbGVhc2UuJyxcbiAgICApO1xuICB9XG59XG4iXX0=
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWFjdGlvbi1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvZ2l0aHViLWFjdGlvbi1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxtQ0FNZ0I7QUFDaEIsbUVBQThEO0FBQzlELHVFQUF3RjtBQUN4RixtRUFBOEQ7QUFDOUQsbURBQStEO0FBQy9ELHlEQUF5RDtBQUN6RCxpRUFBMEU7QUFDMUUseURBQXdEO0FBQ3hELHVGQUFpRjtBQUNqRix1REFBaUU7QUFDakUsK0ZBQXlGO0FBQ3pGLGlFQUFpRTtBQUVqRSwyRUFBMkU7QUFDM0UseUVBQXlFO0FBQ3pFLCtEQUErRDtBQUMvRCx5RUFBeUU7QUFDekUsb0VBQW9FO0FBQ3BFLGtFQUFrRTtBQUNsRSxpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQVcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFXLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLG1DQUFtQztBQUNuQyxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQztBQWdFeEMsU0FBUyxxQkFBcUIsQ0FBQyxPQUFtQztJQUNoRSxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUk7O0VBRXhCLE9BQU8sQ0FBQyxXQUFXLElBQUksRUFBRTs7Ozs7a0JBS1QsT0FBTyxDQUFDLElBQUk7Ozs7Ozs7Ozs7Ozs7OztDQWU3QixDQUFDO0FBQ0YsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsZUFBTSxDQUFDLGFBQWE7O0lBQzNDLGFBQWEsQ0FBc0I7SUFDbkMsZUFBZSxDQUF3QjtJQUN2QyxhQUFhLENBQXNCO0lBQ25DLE9BQU8sQ0FBa0I7SUFFekMsWUFBWSxPQUFtQztRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsNERBQTREO1FBQzVELDBEQUEwRDtRQUMxRCw2QkFBNkI7UUFFN0IsS0FBSyxDQUFDO1lBQ0osR0FBRyxPQUFPO1lBQ1YseUVBQXlFO1lBQ3pFLHFFQUFxRTtZQUNyRSx1RUFBdUU7WUFDdkUsd0VBQXdFO1lBQ3hFLGFBQWEsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFO1lBQ25FLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1NBQ3ZFLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDYiwrREFBK0QsQ0FDaEUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFBLCtDQUE0QixFQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWpDLHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakMsSUFBQSw4QkFBZSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLHNEQUF3QixDQUFDLElBQUksRUFBRTtZQUNqQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsSUFBSSxvQ0FBd0I7U0FDbkUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSw4REFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxJQUFBLDZCQUFjLEVBQUMsSUFBSSxFQUFFO1lBQ25CLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUs7WUFDOUIsY0FBYyxFQUFFLFNBQVM7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsSUFBQSxzQ0FBd0IsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUUvQix3RUFBd0U7UUFDeEUsZ0VBQWdFO1FBQ2hFLHFFQUFxRTtRQUNyRSxzRUFBc0U7UUFDdEUsbUJBQW1CO1FBQ25CLElBQUksaUJBQVEsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ2pDLEdBQUcsRUFBRTtnQkFDSCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsSUFBSTtnQkFDYixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLGVBQWUsRUFBRTtvQkFDZixRQUFRLEVBQUUsY0FBYztvQkFDeEIsdUJBQXVCLEVBQUUsb0JBQW9CO29CQUM3Qyx3QkFBd0IsRUFBRSxzQkFBc0I7aUJBQ2pEO2FBQ0Y7WUFDRCxRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFFSCxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM5QixHQUFHLEVBQUU7Z0JBQ0gsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTthQUN2QztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSwyQ0FBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksK0NBQXFCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksMkNBQW1CLENBQUMsSUFBSSxFQUFFO1lBQ2pELFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO1lBQzFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxvQkFBb0I7U0FDbkQsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELGtFQUFrRTtRQUNsRSxrRUFBa0U7UUFDbEUscUVBQXFFO1FBQ3JFLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZ0JBQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3ZDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsbUVBQW1FO1lBQ25FLHdEQUF3RDtZQUN4RCxrQkFBa0IsRUFBRSxNQUFNO1lBQzFCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFdBQVcsRUFBRSxjQUFjO1lBQzNCLGlCQUFpQixFQUFFLDBCQUFpQixDQUFDLGdCQUFnQixFQUFFO1lBQ3ZELGNBQWMsRUFBRSxnQkFBTyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsV0FBVyxFQUFFLDBCQUEwQixzQkFBc0IsRUFBRTtZQUMvRCx5QkFBeUIsRUFBRTtnQkFDekIsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTthQUNoRDtTQUNGLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxzRUFBc0U7UUFDdEUsa0VBQWtFO1FBQ2xFLDZDQUE2QztRQUM3QyxJQUFBLHNDQUFtQixFQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLCtCQUErQixDQUFDLEVBQ2pELHFGQUFxRixDQUN0RixDQUFDO0lBQ0osQ0FBQzs7QUExSEgsa0RBMkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSnNvbkZpbGUsXG4gIFJlbGVhc2FibGVDb21taXRzLFxuICBZYW1sRmlsZSxcbiAgZ2l0aHViLFxuICByZWxlYXNlLFxufSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQWN0aW9uQnVpbGRXb3JrZmxvdyB9IGZyb20gJy4vYWN0aW9uLWJ1aWxkLXdvcmtmbG93JztcbmltcG9ydCB7IEFjdGlvbkRvZ2Zvb2RPcHRpb25zLCBBY3Rpb25Eb2dmb29kV29ya2Zsb3cgfSBmcm9tICcuL2FjdGlvbi1kb2dmb29kLXdvcmtmbG93JztcbmltcG9ydCB7IEFjdGlvblNvbmFyV29ya2Zsb3cgfSBmcm9tICcuL2FjdGlvbi1zb25hci13b3JrZmxvdyc7XG5pbXBvcnQgeyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZEVkaXRvckNvbmZpZyB9IGZyb20gJy4uL2NvbW1vbi9lZGl0b3Jjb25maWcnO1xuaW1wb3J0IHsgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyB9IGZyb20gJy4uL2NvbW1vbi9pbnRlcm5hbC1hY3Rpb25zJztcbmltcG9ydCB7IGFkZExpY2Vuc2VGaWxlIH0gZnJvbSAnLi4vY29tbW9uL2xpY2Vuc2UtZmlsZSc7XG5pbXBvcnQgeyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3cgfSBmcm9tICcuLi9jb21tb24vcHJvamVuLWRyaWZ0LWNoZWNrLXdvcmtmbG93JztcbmltcG9ydCB7IGF0dGFjaFR5cGVTY3JpcHRQcm9qZW5yYyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW5yYy10cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93IH0gZnJvbSAnLi4vY29tbW9uL3dvcmtmbG93LWNoYW5nZS1ub3RpY2Utd29ya2Zsb3cnO1xuaW1wb3J0IHsgbm90ZVdvcmtmbG93UHVycG9zZSB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1wdXJwb3NlJztcblxuLy8gYHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKWAvYHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpYCByZXNvbHZlXG4vLyB2aWEgTm9kZSdzIG5vcm1hbCBtb2R1bGUgcmVzb2x1dGlvbiwgc28gaW4gYSAqcHVibGlzaGVkKiBwYWNrYWdlIHRoZXNlXG4vLyByZWFkIHRoZSB2ZXJzaW9ucyBhY3R1YWxseSBpbnN0YWxsZWQgaW4gdGhlIGNvbnN1bWluZyByZXBvJ3Ncbi8vIG5vZGVfbW9kdWxlcyAtIGV4YWN0bHkgdGhlIFwiUFJPSkVOX1ZFUlNJT04gb2YgdGhlIHN5bnRoXCIgLyBcInZlcnNpb24gb2Zcbi8vIHRoaXMgcGFja2FnZSB0aGF0IHNjYWZmb2xkZWQgdGhlIHJlcG9cIiB0aGUgcHJpdmF0ZSBwYWNrYWdlLmpzb24nc1xuLy8gZGV2RGVwZW5kZW5jaWVzIG5lZWQgdG8gcGluIChzZWUgRjAxMCBDSS1kZXBlbmRlbmNpZXMgc2VjdGlvbikuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9UWVBFU19WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG4vLyBFeGFjdCBwaW4sIHJlY29yZGVkIGFzIGEgY29tcG9uZW50IGNvbnN0YW50IChBRC0wMDE6IG5vIGxhdGVzdC9tb3Zpbmdcbi8vIHRhZy9zZW12ZXIgcmFuZ2UgaW4gYW55dGhpbmcgYSBnZW5lcmF0ZWQgcmVwbyBkZXBlbmRzIG9uKS4gVXBncmFkaW5nIHRoaXNcbi8vIGlzIGEgcmV2aWV3ZWQgZGlmZiBvZiB0aGlzIGZpbGUuXG5jb25zdCBDT01NSVRfQU5EX1RBR19WRVJTSU9OID0gJzEzLjIuMSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViQWN0aW9uUHJvamVjdE9wdGlvbnNcbiAgZXh0ZW5kcyBnaXRodWIuR2l0SHViUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogT25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIGFjdGlvbi4gVXNlZCBpbiB0aGUgZGVmYXVsdCBSRUFETUVcbiAgICogdGVtcGxhdGUgYW5kIHJlY29yZGVkIGluIHRoZSBwcml2YXRlIGBwYWNrYWdlLmpzb25gLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIEdpdEh1YiBBY3Rpb25zIHNlY3JldCBob2xkaW5nIHRoZSBQQVQgdXNlZCBmb3JcbiAgICogcHJvamVuLWF1dG9tYXRpb24gUFIgY29tbWVudHMgKEYwMDMpIGFuZCwgd2hlbiB0aGUgYWN0aW9uIGhhcyBhXG4gICAqIGB0b2tlbmAgaW5wdXQsIHRoZSBkb2dmb29kJ3MgaW52b2NhdGlvbiBvZiBpdC5cbiAgICogQGRlZmF1bHQgXCJQUk9KRU5fR0lUSFVCX1RPS0VOXCJcbiAgICovXG4gIHJlYWRvbmx5IGdoZVRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVUkwgb2YgdGhlIG9yZydzIFNvbmFyQ2xvdWQgaW5zdGFuY2UgKGUuZy4gYGh0dHBzOi8vc29uYXJjbG91ZC5pb2ApLlxuICAgKiBNVVNUIGJlIHJlYWNoYWJsZSBmcm9tIGdpdGh1Yi5jb20taG9zdGVkIChwdWJsaWMpIHJ1bm5lcnMgKEFELTAwMSkuXG4gICAqIFJlcXVpcmVkLCBubyBkZWZhdWx0OiBhIGd1ZXNzZWQgc2VydmVyIGlzIHdvcnNlIHRoYW4gYSBsb3VkIGZhaWx1cmUuXG4gICAqL1xuICByZWFkb25seSBzb25hckhvc3RVcmw6IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgXCJTT05BUl9UT0tFTlwiICovXG4gIHJlYWRvbmx5IHNvbmFyVG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYHNvbmFyLnltbGAgYWxzbyBydW5zIG9uIGBwdWxsX3JlcXVlc3RgIGFzIGEgcGFzcy9mYWlsIGdhdGUuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNvbmFyUHVsbFJlcXVlc3RHYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRvZ2Zvb2Qgc2NlbmFyaW8gKEFELTAwMSkuIFdoYXQgZml4dHVyZSBzdGF0ZSwgd2hhdCB0byBhc3NlcnQsIGFuZFxuICAgKiBob3cgdG8gY2xlYW4gdXAgYXJlIHNwZWNpZmllZCBieSB0aGUgYWN0aW9uJ3Mgb3duIEYjIyMgc3BlYyAtIHRoZVxuICAgKiBoaWdoZXN0LXJpc2sgYmVoYXZpb3Igb2YgdGhhdCBhY3Rpb24uXG4gICAqXG4gICAqIEl0cyB0eXBlIGlzIGEgc3RydWN0LCB3aGljaCBwcm9qZW4ncyBDTEkgY2Fubm90IHJlbmRlciBpbnRvIGEgcHJvamVucmMsXG4gICAqIHNvIGl0IGNhbiBvbmx5IGJlIHdyaXR0ZW4gYnkgaGFuZCAtIGl0IGlzIHRoZXJlZm9yZSBvcHRpb25hbCwgYmVjYXVzZSBhXG4gICAqICpyZXF1aXJlZCogb3B0aW9uIGBwcm9qZW4gbmV3YCBjYW5ub3Qgc3VwcGx5IHdvdWxkIG1ha2UgdGhpcyBwcm9qZWN0XG4gICAqIHR5cGUgaW1wb3NzaWJsZSB0byBzY2FmZm9sZC4gQUQtMDAxJ3MgXCJuZXZlciBhIHNpbGVudCBuby1vcCBkb2dmb29kXCJcbiAgICogcnVsZSBpcyBlbmZvcmNlZCBpbnN0ZWFkIGJ5IHRoZSB3b3JrZmxvdyBpdCBnZW5lcmF0ZXMgaW4gdGhhdCBjYXNlOiBhXG4gICAqIHNpbmdsZSBzdGVwIHRoYXQgZmFpbHMgb24gZXZlcnkgUFIgdW50aWwgYSBzY2VuYXJpbyBpcyBkZWNsYXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgdGVzdC1kb2dmb29kLnltbGAgcnVucyBvbmUgZmFpbGluZyBzdGVwIHRoYXQgdGVsbHMgeW91IHRvXG4gICAqIGRlY2xhcmUgYSBzY2VuYXJpb1xuICAgKi9cbiAgcmVhZG9ubHkgZG9nZm9vZD86IEFjdGlvbkRvZ2Zvb2RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBTUERYIGlkZW50aWZpZXIgZm9yIHRoZSBnZW5lcmF0ZWQgYExJQ0VOU0VgLlxuICAgKiBAZGVmYXVsdCBcIk1JVFwiXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXcml0ZSBhIHByb2plbi1tYW5hZ2VkIGAuZWRpdG9yY29uZmlnYC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdG9yY29uZmlnPzogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFJlYWRtZUNvbnRlbnRzKG9wdGlvbnM6IEdpdEh1YkFjdGlvblByb2plY3RPcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAjICR7b3B0aW9ucy5uYW1lfVxuXG4ke29wdGlvbnMuZGVzY3JpcHRpb24gPz8gJyd9XG5cbiMjIFVzYWdlXG5cblxcYFxcYFxcYHlhbWxcbi0gdXNlczogeHBlcnRzcy8ke29wdGlvbnMubmFtZX1APHJlZj5cblxcYFxcYFxcYFxuXG4jIyBCdW1waW5nXG5cbkEgXFxgZmVhdDpcXGAvXFxgZml4OlxcYCBjb21taXQgcHVzaGVkIHRvIFxcYG1haW5cXGAgaXMgcmVsZWFzZWQgYXV0b21hdGljYWxseTogYnVtcCxcbnRhZyBcXGB2WC5ZLlpcXGAsIEdpdEh1YiBSZWxlYXNlLiBTZWUgXFxgLmdpdGh1Yi93b3JrZmxvd3MvcmVsZWFzZS55bWxcXGAuXG5cbiMjIFRydXN0IGNvbnRyYWN0XG5cblRoaXMgaXMgYSBjb21wb3NpdGUgKHNoZWxsKSBhY3Rpb24gLSBubyBOb2RlL25wbSBhdCBydW50aW1lLCBubyBEb2NrZXIuIEl0c1xuQ0kgbGludCBnYXRlIChcXGBidWlsZC55bWxcXGApLCBkb2dmb29kIHRlc3QgKFxcYHRlc3QtZG9nZm9vZC55bWxcXGApLCBhbmQgU29uYXJcbnNjYW4gKFxcYHNvbmFyLnltbFxcYCkgYXJlIHNjYWZmb2xkZWQgYnkgXFxgQHhwZXJ0c3MvcHJvamVuLXR5cGVzXFxgJ1xuXFxgR2l0SHViQWN0aW9uUHJvamVjdFxcYDsgb25seSBcXGBhY3Rpb24ueW1sXFxgIGFuZCBpdHMgc2hlbGwgc2NyaXB0cyBhcmVcbmhhbmQtY29tbWl0dGVkLlxuYDtcbn1cblxuLyoqXG4gKiBTY2FmZm9sZHMgdGhlIHJlcG8gbGlmZWN5Y2xlIChBRC0wMDEpIGFyb3VuZCBhIGhhbmQtY29tbWl0dGVkLCBjb21wb3NpdGVcbiAqIChzaGVsbCkgR2l0SHViIEFjdGlvbjogdGhlIGBidWlsZGAvYHRlc3QtZG9nZm9vZGAvYHNvbmFyYC9gcmVsZWFzZWBcbiAgKiB3b3JrZmxvd3MsIHZlcnNpb25pbmcgYW5kIHJlbGVhc2UgZGlzY2lwbGluZSwgdGhlIEYwMDMgdmVyaWZ5IGNvbXBvbmVudHMsXG4gICogYW5kIHJlcG8gYm9pbGVycGxhdGUgKGEgcHJpdmF0ZSB2ZXJzaW9uLXNvdXJjZSBgcGFja2FnZS5qc29uYCwgYC55YW1sbGludGAsXG4gICogYExJQ0VOU0VgLCBhbmQgYSBgUkVBRE1FLm1kYCB0ZW1wbGF0ZSkuIFRoZVxuICogYWN0aW9uJ3Mgb3duIGNvbnRlbnRcbiAqIChgYWN0aW9uLnltbGAsIGl0cyBzaGVsbCBzY3JpcHRzLCBgdGVzdC9gIGZpeHR1cmVzKSBpcyBhdXRob3JlZCBieSBoYW5kXG4gKiBwZXIgdGhlIGFjdGlvbidzIG93biBGIyMjIHNwZWMgLSB0aGlzIHR5cGUgb25seSBsaW50cyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdpdEh1YkFjdGlvblByb2plY3QgZXh0ZW5kcyBnaXRodWIuR2l0SHViUHJvamVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBidWlsZFdvcmtmbG93OiBBY3Rpb25CdWlsZFdvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgZG9nZm9vZFdvcmtmbG93OiBBY3Rpb25Eb2dmb29kV29ya2Zsb3c7XG4gIHB1YmxpYyByZWFkb25seSBzb25hcldvcmtmbG93OiBBY3Rpb25Tb25hcldvcmtmbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsZWFzZTogcmVsZWFzZS5SZWxlYXNlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEh1YkFjdGlvblByb2plY3RPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnNvbmFySG9zdFVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHaXRIdWJBY3Rpb25Qcm9qZWN0IHJlcXVpcmVzIHNvbmFySG9zdFVybCcpO1xuICAgIH1cbiAgICAvLyBBIGRlY2xhcmVkLWJ1dC1pbmNvbXBsZXRlIGRvZ2Zvb2QgaXMgc3RpbGwgYW4gZXJyb3IgLSBzZWVcbiAgICAvLyBgQWN0aW9uRG9nZm9vZFdvcmtmbG93YCwgd2hpY2ggb3ducyB0aGF0IGNoZWNrIChhbmQgdGhlXG4gICAgLy8gbm8tZG9nZm9vZC1kZWNsYXJlZCBjYXNlKS5cblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBQUiB0aXRsZXMgYXJlIG5vdCBnYXRlZDogYGZlYXQ6YC9gZml4OmAgbWF0dGVyIG9ubHkgYmVjYXVzZSB0aGV5IGRyaXZlXG4gICAgICAvLyB0aGUgcmVsZWFzZSB3b3JrZmxvdyAodmlhIGByZWxlYXNhYmxlQ29tbWl0c2ApLCBub3QgUFIgY2hlY2tzLiBUaGVcbiAgICAgIC8vIGNvbnZlbnRpb25hbC1jb21taXQgUFItdGl0bGUgbGludCBpcyBhZGRlZCBieSB0aGUgYEdpdEh1YmAgY29tcG9uZW50XG4gICAgICAvLyB1bmxlc3MgYGdpdGh1Yk9wdGlvbnMucHVsbFJlcXVlc3RMaW50YCBpcyBgZmFsc2VgIChpdCBkZWZhdWx0cyB0cnVlKS5cbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHsgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zLCBwdWxsUmVxdWVzdExpbnQ6IGZhbHNlIH0sXG4gICAgICByZWFkbWU6IG9wdGlvbnMucmVhZG1lID8/IHsgY29udGVudHM6IGRlZmF1bHRSZWFkbWVDb250ZW50cyhvcHRpb25zKSB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2ggPSB0aGlzLmdpdGh1YjtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdHaXRIdWJBY3Rpb25Qcm9qZWN0IHJlcXVpcmVzIEdpdEh1YiBpbnRlZ3JhdGlvbiB0byBiZSBlbmFibGVkJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGFwcGx5SW50ZXJuYWxBY3Rpb25PdmVycmlkZXMoZ2gpO1xuXG4gICAgLy8gSmV0QnJhaW5zIElERSBzdGF0ZSAoLmlkZWEvKSBpcyBuZXZlciB0cmFja2VkIGluIGdlbmVyYXRlZCByZXBvcywgYW5kXG4gICAgLy8gbmVpdGhlciBpcyAvc3BlYy8gKGxvY2FsIHBsYW5zIGFuZCBzcGVjczsgdGhlIHBhdHRlcm4gY292ZXJzIGV2ZXJ5XG4gICAgLy8gc3ViZGlyZWN0b3J5KS5cbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLy5pZGVhLyonKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnL3NwZWMvJyk7XG5cbiAgICBpZiAob3B0aW9ucy5lZGl0b3Jjb25maWcgPz8gdHJ1ZSkge1xuICAgICAgYWRkRWRpdG9yQ29uZmlnKHRoaXMpO1xuICAgIH1cblxuICAgIG5ldyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3codGhpcywge1xuICAgICAgZ2hlVG9rZW5TZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgIH0pO1xuICAgIG5ldyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93KHRoaXMpO1xuXG4gICAgYWRkTGljZW5zZUZpbGUodGhpcywge1xuICAgICAgc3BkeDogb3B0aW9ucy5saWNlbnNlID8/ICdNSVQnLFxuICAgICAgY29weXJpZ2h0T3duZXI6ICd4cGVydHNzJyxcbiAgICB9KTtcblxuICAgIC8vIGAucHJvamVucmMudHNgICsgYG5weCBwcm9qZW5gLCBzYW1lIGFzIGV2ZXJ5IG90aGVyIHR5cGUgaGVyZS4gQSBiYXJlXG4gICAgLy8gR2l0SHViUHJvamVjdCBoYXMgbm8gZGVmYXVsdCB0YXNrIHRoYXQgcnVucyBhIHByb2plbnJjIG9uIGl0cyBvd24sIHNvXG4gICAgLy8gdGhpcyBpcyB3aGF0IG1ha2VzIGBucHggcHJvamVuYCB3b3JrIGluIHRoZSBnZW5lcmF0ZWQgcmVwbyBhdCBhbGwuXG4gICAgYXR0YWNoVHlwZVNjcmlwdFByb2plbnJjKHRoaXMpO1xuXG4gICAgLy8gcHJvamVuIG1hcmtzIGdlbmVyYXRlZCBmaWxlcyByZWFkLW9ubHkgKDA0NDQpIG9uIGRpc2sgYnkgZGVmYXVsdCwgYnV0XG4gICAgLy8gdGhpcyBvbmUgbXVzdCBzdGF5IG93bmVyLXdyaXRhYmxlOiB0aGUgZG9jdW1lbnRlZCB1cGRhdGUgZmxvd1xuICAgIC8vIChgbnBtIGkgLUQgQHhwZXJ0c3MvcHJvamVuLXR5cGVzQGxhdGVzdGApIG5lZWRzIG5wbSB0byByZXdyaXRlIHRoZVxuICAgIC8vIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbiBleGlzdGluZyByZXBvLiBIYW5kLWVkaXRzIGFyZSBzdGlsbCBjYXVnaHQgYnlcbiAgICAvLyB0aGUgZHJpZnQgY2hlY2suXG4gICAgbmV3IEpzb25GaWxlKHRoaXMsICdwYWNrYWdlLmpzb24nLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBwcml2YXRlOiB0cnVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgJ3Byb2plbic6IFBST0pFTl9WRVJTSU9OLFxuICAgICAgICAgICdAeHBlcnRzcy9wcm9qZW4tdHlwZXMnOiBQUk9KRU5fVFlQRVNfVkVSU0lPTixcbiAgICAgICAgICAnY29tbWl0LWFuZC10YWctdmVyc2lvbic6IENPTU1JVF9BTkRfVEFHX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgbmV3IFlhbWxGaWxlKHRoaXMsICcueWFtbGxpbnQnLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgZXh0ZW5kczogJ2RlZmF1bHQnLFxuICAgICAgICBydWxlczogeyAnbGluZS1sZW5ndGgnOiB7IG1heDogMTIwIH0gfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkV29ya2Zsb3cgPSBuZXcgQWN0aW9uQnVpbGRXb3JrZmxvdyh0aGlzKTtcblxuICAgIHRoaXMuZG9nZm9vZFdvcmtmbG93ID0gbmV3IEFjdGlvbkRvZ2Zvb2RXb3JrZmxvdyh0aGlzLCBvcHRpb25zLmRvZ2Zvb2QpO1xuXG4gICAgdGhpcy5zb25hcldvcmtmbG93ID0gbmV3IEFjdGlvblNvbmFyV29ya2Zsb3codGhpcywge1xuICAgICAgc29uYXJIb3N0VXJsOiBvcHRpb25zLnNvbmFySG9zdFVybCxcbiAgICAgIHNvbmFyVG9rZW5TZWNyZXQ6IG9wdGlvbnMuc29uYXJUb2tlblNlY3JldCxcbiAgICAgIHNvbmFyUHVsbFJlcXVlc3RHYXRlOiBvcHRpb25zLnNvbmFyUHVsbFJlcXVlc3RHYXRlLFxuICAgIH0pO1xuXG4gICAgLy8gYGdpdGh1YlJlbGVhc2VgIGRlZmF1bHRzIHRvIHRydWUsIHdoaWNoIGF1dG8td2lyZXNcbiAgICAvLyBgcHVibGlzaFRvR2l0SHViUmVsZWFzZXNgIC0gaXRzIGBnaCByZWxlYXNlIGNyZWF0ZSAuLi4gLS10YXJnZXRcbiAgICAvLyAkR0lUSFVCX1NIQWAgY3JlYXRlcyB0aGUgdGFnICphbmQqIHRoZSByZWxlYXNlIHRvZ2V0aGVyIGZvciBvdXJcbiAgICAvLyBjb250aW51b3VzIChwdXNoLXRvLW1haW4pIHRyaWdnZXIuIE5vIHNlcGFyYXRlIGBwdWJsaXNoVG9HaXRgIGNhbGxcbiAgICAvLyBuZWVkZWQgKHRoYXQgcGF0aCBvbmx5IGZpcmVzIGZvciBhIG1hbnVhbCByZWxlYXNlIHRyaWdnZXIpLlxuICAgIHRoaXMucmVsZWFzZSA9IG5ldyByZWxlYXNlLlJlbGVhc2UodGhpcywge1xuICAgICAgYnJhbmNoOiAnbWFpbicsXG4gICAgICAvLyBObyBidWlsZCBhcnRpZmFjdCBmb3IgYSBjb21wb3NpdGUgYWN0aW9uIChBRC0wMDEpIC0gdGhpcyBpcyBvbmx5XG4gICAgICAvLyB3aGVyZSBSZWxlYXNlIHN0YWdlcyBpdHMgb3duIHZlcnNpb24vY2hhbmdlbG9nIGZpbGVzLlxuICAgICAgYXJ0aWZhY3RzRGlyZWN0b3J5OiAnZGlzdCcsXG4gICAgICB0YXNrczogW3RoaXMuYnVpbGRXb3JrZmxvdy50YXNrXSxcbiAgICAgIHZlcnNpb25GaWxlOiAncGFja2FnZS5qc29uJyxcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5mZWF0dXJlc0FuZEZpeGVzKCksXG4gICAgICByZWxlYXNlVHJpZ2dlcjogcmVsZWFzZS5SZWxlYXNlVHJpZ2dlci5jb250aW51b3VzKCksXG4gICAgICBidW1wUGFja2FnZTogYGNvbW1pdC1hbmQtdGFnLXZlcnNpb25AJHtDT01NSVRfQU5EX1RBR19WRVJTSU9OfWAsXG4gICAgICByZWxlYXNlV29ya2Zsb3dTZXR1cFN0ZXBzOiBbXG4gICAgICAgIHsgbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJywgcnVuOiAnbnBtIGNpJyB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIFRoZSByZWxlYXNlIHdvcmtmbG93IGlzIGNyZWF0ZWQgaW5zaWRlIGByZWxlYXNlLlJlbGVhc2VgIChwcm9qZW5cbiAgICAvLyBpbnRlcm5hbCksIG5vdCBieSB0aGlzIHR5cGUgLSByZWFjaCBpdHMgZmlsZSBieSBwYXRoIHRvIGFubm90YXRlIGl0XG4gICAgLy8gbGlrZSBldmVyeSBvdGhlciBnZW5lcmF0ZWQgd29ya2Zsb3cuIFRoaXMgdHlwZSBpcyBhbHdheXMgYSByb290XG4gICAgLy8gcHJvamVjdCwgc28gcHJvamVuIG5hbWVzIGl0IGByZWxlYXNlLnltbGAuXG4gICAgbm90ZVdvcmtmbG93UHVycG9zZShcbiAgICAgIHRoaXMudHJ5RmluZEZpbGUoJy5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sJyksXG4gICAgICAnQ29udGludW91cyByZWxlYXNlIG9uIHB1c2ggdG8gbWFpbjogYnVtcCB2ZXJzaW9uLCB0YWcsIGFuZCBjcmVhdGUgYSBHaXRIdWIgUmVsZWFzZS4nLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -8,7 +8,7 @@ const projen_1 = require("projen");
8
8
  * layered on top of `CdkTypescriptProject`'s pure-infra scaffold.
9
9
  */
10
10
  class AppRuntimeScaffold extends projen_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.17" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.AppRuntimeScaffold", version: "0.0.19" };
12
12
  constructor(project, appEntryPoint = 'src/app.ts') {
13
13
  super(project, 'AppRuntimeScaffold');
14
14
  const app = new projen_1.SourceCode(project, appEntryPoint);
@@ -13,7 +13,7 @@ const workflow_purpose_1 = require("../common/workflow-purpose");
13
13
  * application source, a database, and an app-level build/test workflow.
14
14
  */
15
15
  class CdkAppProject extends cdk_infra_project_1.CdkInfraProject {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.17" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkAppProject", version: "0.0.19" };
17
17
  constructor(options) {
18
18
  super(options);
19
19
  new app_runtime_scaffold_1.AppRuntimeScaffold(this, options.appEntryPoint ?? 'src/app.ts');
@@ -11,7 +11,7 @@ const edge_networking_constructs_1 = require("./components/edge-networking-const
11
11
  * externally-built images). Reference example: SimulcastAVDelivery.
12
12
  */
13
13
  class CdkInfraProject extends cdk_typescript_base_1.CdkTypescriptProject {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.17" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkInfraProject", version: "0.0.19" };
15
15
  constructor(options) {
16
16
  super(options);
17
17
  if (options.ecrEcs?.enabled) {
@@ -23,7 +23,7 @@ const PROJEN_TYPES_VERSION = require('../../package.json').version;
23
23
  * `ManualDeployWorkflow` when `environments` is provided.
24
24
  */
25
25
  class CdkTypescriptProject extends projen_1.awscdk.AwsCdkTypeScriptApp {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.17" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkTypescriptProject", version: "0.0.19" };
27
27
  constructor(options) {
28
28
  super({
29
29
  // Spread first, overrides after: forwarding the caller's options is
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
10
10
  * built from this project's own source (app projects).
11
11
  */
12
12
  class EcrEcsConstructs extends projen_1.Component {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.17" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EcrEcsConstructs", version: "0.0.19" };
14
14
  constructor(project, options = {}) {
15
15
  super(project, 'EcrEcsConstructs');
16
16
  const externalImageSource = options.externalImageSource ?? true;
@@ -42,7 +42,7 @@ const HELPERS = {
42
42
  * to whichever `edgeResources` the consuming project type opts into.
43
43
  */
44
44
  class EdgeNetworkingConstructs extends projen_1.Component {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.17" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.EdgeNetworkingConstructs", version: "0.0.19" };
46
46
  constructor(project, resources) {
47
47
  super(project, 'EdgeNetworkingConstructs');
48
48
  if (resources.length === 0) {
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
10
10
  * the consuming team to wire up; no opinionated default is imposed.
11
11
  */
12
12
  class DatabaseComponent extends projen_1.Component {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.17" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DatabaseComponent", version: "0.0.19" };
14
14
  constructor(project, options = {}) {
15
15
  super(project, 'DatabaseComponent');
16
16
  const engine = options.engine ?? 'postgres';
@@ -0,0 +1,10 @@
1
+ import { Project } from 'projen';
2
+ /**
3
+ * Write a `LICENSE` file that prepends a human-readable license name header
4
+ * (e.g. `MIT License`) before the standard SPDX copyright + grant text.
5
+ */
6
+ export declare function addLicenseFile(project: Project, options: {
7
+ readonly spdx: string;
8
+ readonly copyrightOwner?: string;
9
+ readonly copyrightPeriod?: string;
10
+ }): void;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.addLicenseFile = addLicenseFile;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const projen_1 = require("projen");
40
+ const LICENSE_NAMES = {
41
+ MIT: 'MIT License',
42
+ };
43
+ /**
44
+ * Write a `LICENSE` file that prepends a human-readable license name header
45
+ * (e.g. `MIT License`) before the standard SPDX copyright + grant text.
46
+ */
47
+ function addLicenseFile(project, options) {
48
+ const spdx = options.spdx;
49
+ const licenseDir = path.join(path.dirname(require.resolve('projen')), '..', 'license-text');
50
+ const templatePath = path.join(licenseDir, `${spdx}.txt`);
51
+ if (!fs.existsSync(templatePath)) {
52
+ throw new Error(`unsupported license ${spdx}`);
53
+ }
54
+ const years = options.copyrightPeriod ?? new Date().getFullYear().toString();
55
+ const owner = options.copyrightOwner;
56
+ let text = fs.readFileSync(templatePath, 'utf-8');
57
+ text = text.replace(/\$copyright_period/g, years);
58
+ if (text.indexOf('$copyright_owner') !== -1) {
59
+ if (!owner) {
60
+ throw new Error(`The ${spdx} license requires "copyrightOwner" to be specified`);
61
+ }
62
+ text = text.replace(/\$copyright_owner/g, owner);
63
+ }
64
+ const header = LICENSE_NAMES[spdx] ?? spdx;
65
+ const lines = text.trim().split('\n');
66
+ new projen_1.TextFile(project, 'LICENSE', {
67
+ marker: false,
68
+ committed: true,
69
+ lines: [header, '', ...lines],
70
+ });
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS1maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1vbi9saWNlbnNlLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSx3Q0FxQ0M7QUFqREQsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixtQ0FBMkM7QUFFM0MsTUFBTSxhQUFhLEdBQTJCO0lBQzVDLEdBQUcsRUFBRSxhQUFhO0NBQ25CLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BQWdCLEVBQ2hCLE9BSUM7SUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQztJQUUxRCxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxlQUFlLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBRXJDLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWxELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksb0RBQW9ELENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV0QyxJQUFJLGlCQUFRLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtRQUMvQixNQUFNLEVBQUUsS0FBSztRQUNiLFNBQVMsRUFBRSxJQUFJO1FBQ2YsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztLQUM5QixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFByb2plY3QsIFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcblxuY29uc3QgTElDRU5TRV9OQU1FUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgTUlUOiAnTUlUIExpY2Vuc2UnLFxufTtcblxuLyoqXG4gKiBXcml0ZSBhIGBMSUNFTlNFYCBmaWxlIHRoYXQgcHJlcGVuZHMgYSBodW1hbi1yZWFkYWJsZSBsaWNlbnNlIG5hbWUgaGVhZGVyXG4gKiAoZS5nLiBgTUlUIExpY2Vuc2VgKSBiZWZvcmUgdGhlIHN0YW5kYXJkIFNQRFggY29weXJpZ2h0ICsgZ3JhbnQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZExpY2Vuc2VGaWxlKFxuICBwcm9qZWN0OiBQcm9qZWN0LFxuICBvcHRpb25zOiB7XG4gICAgcmVhZG9ubHkgc3BkeDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvcHlyaWdodE93bmVyPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvcHlyaWdodFBlcmlvZD86IHN0cmluZztcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCBzcGR4ID0gb3B0aW9ucy5zcGR4O1xuICBjb25zdCBsaWNlbnNlRGlyID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoJ3Byb2plbicpKSwgJy4uJywgJ2xpY2Vuc2UtdGV4dCcpO1xuICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4obGljZW5zZURpciwgYCR7c3BkeH0udHh0YCk7XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxpY2Vuc2UgJHtzcGR4fWApO1xuICB9XG5cbiAgY29uc3QgeWVhcnMgPSBvcHRpb25zLmNvcHlyaWdodFBlcmlvZCA/PyBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgY29uc3Qgb3duZXIgPSBvcHRpb25zLmNvcHlyaWdodE93bmVyO1xuXG4gIGxldCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCwgJ3V0Zi04Jyk7XG4gIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcJGNvcHlyaWdodF9wZXJpb2QvZywgeWVhcnMpO1xuXG4gIGlmICh0ZXh0LmluZGV4T2YoJyRjb3B5cmlnaHRfb3duZXInKSAhPT0gLTEpIHtcbiAgICBpZiAoIW93bmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAke3NwZHh9IGxpY2Vuc2UgcmVxdWlyZXMgXCJjb3B5cmlnaHRPd25lclwiIHRvIGJlIHNwZWNpZmllZGApO1xuICAgIH1cbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXCRjb3B5cmlnaHRfb3duZXIvZywgb3duZXIpO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyID0gTElDRU5TRV9OQU1FU1tzcGR4XSA/PyBzcGR4O1xuICBjb25zdCBsaW5lcyA9IHRleHQudHJpbSgpLnNwbGl0KCdcXG4nKTtcblxuICBuZXcgVGV4dEZpbGUocHJvamVjdCwgJ0xJQ0VOU0UnLCB7XG4gICAgbWFya2VyOiBmYWxzZSxcbiAgICBjb21taXR0ZWQ6IHRydWUsXG4gICAgbGluZXM6IFtoZWFkZXIsICcnLCAuLi5saW5lc10sXG4gIH0pO1xufVxuIl19
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
6
6
  const ci_steps_1 = require("./ci-steps");
7
7
  const workflow_purpose_1 = require("./workflow-purpose");
8
8
  class ProjenDriftCheckWorkflow extends projen_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ProjenDriftCheckWorkflow", version: "0.0.17" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.ProjenDriftCheckWorkflow", version: "0.0.19" };
10
10
  workflow;
11
11
  constructor(scope, options = {}) {
12
12
  super(scope, 'ProjenDriftCheckWorkflow');
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const projen_1 = require("projen");
6
6
  const workflow_purpose_1 = require("./workflow-purpose");
7
7
  class WorkflowChangeNoticeWorkflow extends projen_1.Component {
8
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.WorkflowChangeNoticeWorkflow", version: "0.0.17" };
8
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.WorkflowChangeNoticeWorkflow", version: "0.0.19" };
9
9
  workflow;
10
10
  constructor(scope, options = {}) {
11
11
  super(scope, 'WorkflowChangeNoticeWorkflow');
@@ -18,7 +18,7 @@ const manual_deploy_workflow_1 = require("../../common/manual-deploy-workflow");
18
18
  * which is exactly when "this repo has no deploy target" needs saying.
19
19
  */
20
20
  class CdkDeployHook extends projen_1.Component {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkDeployHook", version: "0.0.17" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CdkDeployHook", version: "0.0.19" };
22
22
  constructor(project, environments, options = {}) {
23
23
  super(project, 'CdkDeployHook');
24
24
  const targetRepo = options.targetRepo;
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
6
6
  const workflow_purpose_1 = require("../../common/workflow-purpose");
7
7
  /** Generates a code index and publishes it to `.cai/` on checkin. */
8
8
  class CodeIndexWorkflow extends projen_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CodeIndexWorkflow", version: "0.0.17" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.CodeIndexWorkflow", version: "0.0.19" };
10
10
  constructor(project) {
11
11
  super(project, 'CodeIndexWorkflow');
12
12
  const gh = project.github;
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
6
6
  const workflow_purpose_1 = require("../../common/workflow-purpose");
7
7
  /** On-demand build+push of a Docker image, defaulting to Docker Hub. */
8
8
  class DockerPublish extends projen_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DockerPublish", version: "0.0.17" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.DockerPublish", version: "0.0.19" };
10
10
  constructor(project, options = {}) {
11
11
  super(project, 'DockerPublish');
12
12
  const gh = project.github;
@@ -11,7 +11,7 @@ const java_versions_1 = require("../java-versions");
11
11
  * plugin (which Boot's BOM does not manage) is pinned for the Java line.
12
12
  */
13
13
  class FlywayMigration extends projen_1.Component {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.FlywayMigration", version: "0.0.17" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.FlywayMigration", version: "0.0.19" };
15
15
  constructor(project) {
16
16
  super(project, 'FlywayMigration');
17
17
  project.addPlugin(`${java_versions_1.FLYWAY_MAVEN_PLUGIN}@${project.pinnedVersion(java_versions_1.FLYWAY_MAVEN_PLUGIN)}`);
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
6
6
  const workflow_purpose_1 = require("../../common/workflow-purpose");
7
7
  /** On-demand publish to GitHub Packages. */
8
8
  class GitHubPackagesPublish extends projen_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubPackagesPublish", version: "0.0.17" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.GitHubPackagesPublish", version: "0.0.19" };
10
10
  constructor(project, options = {}) {
11
11
  super(project, 'GitHubPackagesPublish');
12
12
  const gh = project.github;
@@ -9,7 +9,7 @@ const workflow_purpose_1 = require("../../common/workflow-purpose");
9
9
  * or OIDC trusted publishing.
10
10
  */
11
11
  class MavenCentralPublish extends projen_1.Component {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenCentralPublish", version: "0.0.17" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenCentralPublish", version: "0.0.19" };
13
13
  constructor(project, options = {}) {
14
14
  super(project, 'MavenCentralPublish');
15
15
  const gh = project.github;
@@ -17,7 +17,7 @@ const workflow_purpose_1 = require("../../common/workflow-purpose");
17
17
  * check. Apply an update by changing the version in `.projenrc.ts`.
18
18
  */
19
19
  class MavenUpgradeReport extends projen_1.Component {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenUpgradeReport", version: "0.0.17" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenUpgradeReport", version: "0.0.19" };
21
21
  workflow;
22
22
  constructor(scope, options) {
23
23
  super(scope, 'MavenUpgradeReport');
@@ -9,7 +9,7 @@ const java_maven_base_1 = require("./java-maven-base");
9
9
  * explicitly excludes Maven Central, Docker, and CDK deploy hooks.
10
10
  */
11
11
  class JavaAppProject extends java_maven_base_1.JavaMavenProject {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaAppProject", version: "0.0.17" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaAppProject", version: "0.0.19" };
13
13
  constructor(options) {
14
14
  super(options);
15
15
  new github_packages_publish_1.GitHubPackagesPublish(this, {
@@ -12,7 +12,7 @@ const java_versions_1 = require("./java-versions");
12
12
  * reactor, every module inherits them).
13
13
  */
14
14
  class JavaLibraryProject extends java_maven_base_1.JavaMavenProject {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaLibraryProject", version: "0.0.17" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaLibraryProject", version: "0.0.19" };
16
16
  constructor(options) {
17
17
  super(options);
18
18
  this.addPlugin(`${java_versions_1.MAVEN_SOURCE_PLUGIN}@${this.pinnedVersion(java_versions_1.MAVEN_SOURCE_PLUGIN)}`, {
@@ -12,6 +12,7 @@ const ci_steps_1 = require("../common/ci-steps");
12
12
  const constants_1 = require("../common/constants");
13
13
  const editorconfig_1 = require("../common/editorconfig");
14
14
  const internal_actions_1 = require("../common/internal-actions");
15
+ const license_file_1 = require("../common/license-file");
15
16
  const projen_drift_check_workflow_1 = require("../common/projen-drift-check-workflow");
16
17
  const projenrc_ts_1 = require("../common/projenrc-ts");
17
18
  const workflow_change_notice_workflow_1 = require("../common/workflow-change-notice-workflow");
@@ -43,7 +44,7 @@ const PROJEN_TYPES_VERSION = require('../../package.json').version;
43
44
  * check, and a nightly report-only update check.
44
45
  */
45
46
  class JavaMavenProject extends projen_1.github.GitHubProject {
46
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaMavenProject", version: "0.0.17" };
47
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaMavenProject", version: "0.0.19" };
47
48
  /** The root `pom.xml`. */
48
49
  pom;
49
50
  /** The canonical Java line the build targets (`1.8`, `17`, `21`, `25`). */
@@ -123,7 +124,7 @@ class JavaMavenProject extends projen_1.github.GitHubProject {
123
124
  this.addGitIgnore('.project');
124
125
  this.addGitIgnore('.settings');
125
126
  if (options.licensed ?? true) {
126
- new projen_1.License(this, {
127
+ (0, license_file_1.addLicenseFile)(this, {
127
128
  spdx: options.license ?? 'MIT',
128
129
  copyrightOwner: options.copyrightOwner ?? 'xpertss',
129
130
  copyrightPeriod: options.copyrightPeriod,
@@ -403,4 +404,4 @@ function normalizeModuleDir(dir) {
403
404
  }
404
405
  return normalized;
405
406
  }
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1tYXZlbi1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvamF2YS1tYXZlbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx5Q0FBa0M7QUFDbEMsbUNBQTBFO0FBQzFFLDRFQUF1RTtBQUN2RSxtREFXeUI7QUFDekIsdURBQW1EO0FBQ25ELGlEQUFpRTtBQUVqRSxpREFBa0U7QUFDbEUsbURBQStEO0FBQy9ELHlEQUF5RDtBQUN6RCxpRUFBMEU7QUFDMUUsdUZBQWlGO0FBQ2pGLHVEQUFpRTtBQUNqRSwrRkFBeUY7QUFDekYsaUVBQWlFO0FBRWpFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUseURBQXlEO0FBQ3pELDBCQUEwQjtBQUMxQixpRUFBaUU7QUFDakUsTUFBTSxjQUFjLEdBQVcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RFLGlFQUFpRTtBQUNqRSxNQUFNLG9CQUFvQixHQUFXLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLGVBQU0sQ0FBQyxhQUFhOztJQUN4RCwwQkFBMEI7SUFDVixHQUFHLENBQVc7SUFFOUIsMkVBQTJFO0lBQzNELFdBQVcsQ0FBUztJQUVwQyx5RUFBeUU7SUFDekQsV0FBVyxDQUFPO0lBRWxDOzs7O09BSUc7SUFDYSxtQkFBbUIsQ0FBc0I7SUFFekQ7OztPQUdHO0lBQ2EsWUFBWSxDQUE2QjtJQUV4QyxRQUFRLENBQWtCO0lBQzFCLGFBQWEsQ0FBVTtJQUN2QixPQUFPLENBQVM7SUFDaEIsTUFBTSxDQUFVO0lBQ2hCLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBRWxELFlBQVksT0FBZ0M7UUFDMUMsS0FBSyxDQUFDO1lBQ0osb0VBQW9FO1lBQ3BFLHNFQUFzRTtZQUN0RSxpRUFBaUU7WUFDakUsd0RBQXdEO1lB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QztJQUM3RCxJQUFJLFVBQVUsS0FBSyxHQUFHLElBQUksVUFBVSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BGLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLDRDQUE0QyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3NpeCB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBKc29uRmlsZSwgTGljZW5zZSwgU2FtcGxlRGlyLCBUYXNrLCBnaXRodWIsIGphdmEgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTWF2ZW5VcGdyYWRlUmVwb3J0IH0gZnJvbSAnLi9jb21wb25lbnRzL21hdmVuLXVwZ3JhZGUtcmVwb3J0JztcbmltcG9ydCB7XG4gIERFRkFVTFRfTUlOX01BVkVOX1ZFUlNJT04sXG4gIEpVTklUX0JPTSxcbiAgSmF2YUxpbmVQcm9maWxlLFxuICBNQVZFTl9DT01QSUxFUl9QTFVHSU4sXG4gIE1BVkVOX0VORk9SQ0VSX1BMVUdJTixcbiAgTUFWRU5fRkFJTFNBRkVfUExVR0lOLFxuICBNQVZFTl9KQVJfUExVR0lOLFxuICBNQVZFTl9TVVJFRklSRV9QTFVHSU4sXG4gIFZFUlNJT05TX01BVkVOX1BMVUdJTixcbiAgcmVzb2x2ZUphdmFMaW5lLFxufSBmcm9tICcuL2phdmEtdmVyc2lvbnMnO1xuaW1wb3J0IHsgTWF2ZW5Nb2R1bGUgfSBmcm9tICcuL21hdmVuL21hdmVuLW1vZHVsZSc7XG5pbXBvcnQgeyBNYXZlblBvbSwgYXNzZXJ0RXhhY3RWZXJzaW9uIH0gZnJvbSAnLi9tYXZlbi9tYXZlbi1wb20nO1xuaW1wb3J0IHsgSmF2YU1hdmVuUHJvamVjdE9wdGlvbnMsIE1hdmVuTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBOUE1fQ0lfU1RFUCwgU0VUVVBfTk9ERV9TVEVQIH0gZnJvbSAnLi4vY29tbW9uL2NpLXN0ZXBzJztcbmltcG9ydCB7IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYWRkRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vY29tbW9uL2VkaXRvcmNvbmZpZyc7XG5pbXBvcnQgeyBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzIH0gZnJvbSAnLi4vY29tbW9uL2ludGVybmFsLWFjdGlvbnMnO1xuaW1wb3J0IHsgUHJvamVuRHJpZnRDaGVja1dvcmtmbG93IH0gZnJvbSAnLi4vY29tbW9uL3Byb2plbi1kcmlmdC1jaGVjay13b3JrZmxvdyc7XG5pbXBvcnQgeyBhdHRhY2hUeXBlU2NyaXB0UHJvamVucmMgfSBmcm9tICcuLi9jb21tb24vcHJvamVucmMtdHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1jaGFuZ2Utbm90aWNlLXdvcmtmbG93JztcbmltcG9ydCB7IG5vdGVXb3JrZmxvd1B1cnBvc2UgfSBmcm9tICcuLi9jb21tb24vd29ya2Zsb3ctcHVycG9zZSc7XG5cbi8vIGByZXF1aXJlKC4uLilgIHJlc29sdmVzIHRocm91Z2ggTm9kZSdzIG5vcm1hbCBtb2R1bGUgcmVzb2x1dGlvbiwgc28gaW4gYVxuLy8gKnB1Ymxpc2hlZCogcGFja2FnZSB0aGVzZSBhcmUgdGhlIHZlcnNpb25zIGluc3RhbGxlZCBpbiB0aGUgY29uc3VtaW5nXG4vLyByZXBvIC0gZXhhY3RseSB3aGF0IGl0cyBwYWNrYWdlLmpzb24gbXVzdCBwaW4gKHNhbWUgYXNcbi8vIGBHaXRIdWJBY3Rpb25Qcm9qZWN0YCkuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJ3Byb2plbi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IFBST0pFTl9UWVBFU19WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG4vKipcbiAqIEJhc2VsaW5lIE1hdmVuIHByb2plY3QsIHNpbmdsZS0gb3IgbXVsdGktbW9kdWxlLCB3aXRoIG5vIGZyYW1ld29ya1xuICogYXNzdW1wdGlvbnMuIEl0IGlzIHRoZSBiYXNlIG9mIGV2ZXJ5IEphdmEgdHlwZSBpbiB0aGlzIHBhY2thZ2UgYW5kIGlzXG4gKiB1c2FibGUgb24gaXRzIG93biAoYHByb2plbiBuZXcgLi4uIGphdmFfbWF2ZW5gKS5cbiAqXG4gKiAtIFRoZSBwb20gaXMgd3JpdHRlbiBieSB0aGlzIHBhY2thZ2UgKGBNYXZlblBvbWApLCBub3QgcHJvamVuJ3NcbiAqICAgYGphdmEuUG9tYDogZXhhY3QgdmVyc2lvbnMgb25seSwgQk9NIGltcG9ydHMsIGA8bW9kdWxlcz5gLFxuICogICBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAsIGA8cGx1Z2luTWFuYWdlbWVudD5gLlxuICogLSBFdmVyeXRoaW5nIEphdmEtdmVyc2lvbi1kZXBlbmRlbnQgKGNvbXBpbGVyIGxldmVsLCBlbmZvcmNlciBydWxlLCBKVW5pdFxuICogICBsaW5lLCBDSSBKREspIGZvbGxvd3MgYGphdmFWZXJzaW9uYC5cbiAqIC0gV2l0aCBubyBgYWRkTW9kdWxlKClgIGNhbGxzIHRoZSByb290IHBvbSBpcyB0aGUgYXJ0aWZhY3QuIEFmdGVyIHRoZVxuICogICBmaXJzdCBgYWRkTW9kdWxlKClgIGl0IGlzIGEgYHBvbWAtcGFja2FnZWQgcmVhY3RvciBwYXJlbnQgYW5kIHRoZVxuICogICBtb2R1bGVzIGluaGVyaXQgaXRzIHBsdWdpbnMgYW5kIHRlc3QgZGVwZW5kZW5jaWVzLlxuICogLSBgbnB4IHByb2plbiBidWlsZGAgc3ludGhlc2l6ZXMsIHRoZW4gcnVucyBNYXZlbiBvbmNlOiBgbXZuIC1CIHZlcmlmeWBcbiAqICAgKHVuaXQgdGVzdHMgdmlhIHN1cmVmaXJlLCBgKklUYCB0ZXN0cyB2aWEgZmFpbHNhZmUpLlxuICogLSBDSTogYSBQUiBidWlsZCAod2l0aCBhbiBvcHRpb25hbCBTb25hclF1YmUgc2NhbiksIHRoZSBwcm9qZW4gZHJpZnRcbiAqICAgY2hlY2ssIGFuZCBhIG5pZ2h0bHkgcmVwb3J0LW9ubHkgdXBkYXRlIGNoZWNrLlxuICovXG5leHBvcnQgY2xhc3MgSmF2YU1hdmVuUHJvamVjdCBleHRlbmRzIGdpdGh1Yi5HaXRIdWJQcm9qZWN0IHtcbiAgLyoqIFRoZSByb290IGBwb20ueG1sYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHBvbTogTWF2ZW5Qb207XG5cbiAgLyoqIFRoZSBjYW5vbmljYWwgSmF2YSBsaW5lIHRoZSBidWlsZCB0YXJnZXRzIChgMS44YCwgYDE3YCwgYDIxYCwgYDI1YCkuICovXG4gIHB1YmxpYyByZWFkb25seSBqYXZhVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKiBQcmludHMgYXZhaWxhYmxlIGRlcGVuZGVuY3kvcGx1Z2luIHVwZGF0ZXMgKGBucHggcHJvamVuIHVwZ3JhZGVgKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZ3JhZGVUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBUaGUgUFIgYnVpbGQgd29ya2Zsb3cgKGBidWlsZC55bWxgKS4gQWRkIGpvYnMgdG8gaXQgd2l0aFxuICAgKiBgYnVpbGRWZXJpZnlXb3JrZmxvdy5hZGRKb2IoaWQsIGpvYilgOyB1c2UgYGNpU2V0dXBTdGVwc2AgZm9yIGEgam9iIHRoYXRcbiAgICogbmVlZHMgTm9kZSwgdGhlIHByb2plbiB0b29sY2hhaW4sIGFuZCB0aGUgSkRLLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkVmVyaWZ5V29ya2Zsb3c6IGdpdGh1Yi5UYXNrV29ya2Zsb3c7XG5cbiAgLyoqXG4gICAqIFN0ZXBzIHRoYXQgaW5zdGFsbCBOb2RlIChwaW5uZWQpLCBgbnBtIGNpYCwgYW5kIHRoZSBwcm9qZWN0J3MgSkRLIHdpdGggYVxuICAgKiBNYXZlbiBjYWNoZSAtIHRoZSBzZXR1cCBldmVyeSBNYXZlbiBDSSBqb2IgaW4gdGhpcyByZXBvIG5lZWRzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpU2V0dXBTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBqYXZhTGluZTogSmF2YUxpbmVQcm9maWxlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb3RQYWNrYWdpbmc/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbXBsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXZlbk1vZHVsZXM6IE1hdmVuTW9kdWxlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBKYXZhTWF2ZW5Qcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC8vIFNwcmVhZCBmaXJzdCwgb3ZlcnJpZGVzIGFmdGVyOiBmb3J3YXJkaW5nIHRoZSBjYWxsZXIncyBvcHRpb25zIGlzXG4gICAgICAvLyB3aGF0IGxldHMgYHByb2plbiBuZXcgLS1mcm9tIEB4cGVydHNzL3Byb2plbi10eXBlcyBqYXZhX21hdmVuYCB3b3JrXG4gICAgICAvLyAtIHByb2plbiBzbXVnZ2xlcyBpdHMgYm9vdHN0cmFwIG1hcmtlciAoYF9fbmV3X19gKSB0aHJvdWdoIHRoZVxuICAgICAgLy8gb3B0aW9ucyBvYmplY3QsIGFuZCBpdCBpcyB0aGF0IG1hcmtlciB3aGljaCBtYWtlcyB0aGVcbiAgICAgIC8vIGBQcm9qZW5yY0ZpbGVgIGNvbXBvbmVudCB3cml0ZSB0aGUgaW5pdGlhbCBgLnByb2plbnJjLnRzYC4gRHJvcCBpdFxuICAgICAgLy8gYW5kIGBwcm9qZW4gbmV3YCBzY2FmZm9sZHMgYSByZXBvIHdpdGggbm8gcHJvamVucmMgYXQgYWxsLlxuICAgICAgLi4uc3RyaW5naWZ5UHJvamVuTmV3QXJncyhvcHRpb25zKSxcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIC8vIFBSIHRpdGxlcyBhcmUgbm90IGdhdGVkOiBgZmVhdDpgL2BmaXg6YCBtYXR0ZXIgb25seSBiZWNhdXNlIHRoZXkgZHJpdmVcbiAgICAgIC8vIHRoZSByZWxlYXNlIHdvcmtmbG93ICh2aWEgYHJlbGVhc2FibGVDb21taXRzYCksIG5vdCBQUiBjaGVja3MuIFRoZVxuICAgICAgLy8gY29udmVudGlvbmFsLWNvbW1pdCBQUi10aXRsZSBsaW50IGlzIGFkZGVkIGJ5IHRoZSBgR2l0SHViYCBjb21wb25lbnRcbiAgICAgIC8vIHVubGVzcyBgZ2l0aHViT3B0aW9ucy5wdWxsUmVxdWVzdExpbnRgIGlzIGBmYWxzZWAgKGl0IGRlZmF1bHRzIHRydWUpLlxuICAgICAgZ2l0aHViT3B0aW9uczogeyBwdWxsUmVxdWVzdExpbnQ6IGZhbHNlIH0sXG4gICAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKHtcbiAgICAgICAgc2VjcmV0OiBvcHRpb25zLmdoZVRva2VuU2VjcmV0ID8/IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB2ZXJzaW9uIG9mIE9iamVjdC52YWx1ZXMob3B0aW9ucy5wbHVnaW5WZXJzaW9ucyA/PyB7fSkpIHtcbiAgICAgIGFzc2VydEV4YWN0VmVyc2lvbih2ZXJzaW9uLCAncGx1Z2luVmVyc2lvbnMnKTtcbiAgICB9XG4gICAgdGhpcy5qYXZhTGluZSA9IHJlc29sdmVKYXZhTGluZShvcHRpb25zLmphdmFWZXJzaW9uLCBvcHRpb25zLnBsdWdpblZlcnNpb25zKTtcbiAgICB0aGlzLmphdmFWZXJzaW9uID0gdGhpcy5qYXZhTGluZS5saW5lO1xuICAgIHRoaXMucm9vdFBhY2thZ2luZyA9IG9wdGlvbnMucGFja2FnaW5nO1xuICAgIHRoaXMuZ3JvdXBJZCA9IG9wdGlvbnMuZ3JvdXBJZDtcbiAgICB0aGlzLnNhbXBsZSA9IG9wdGlvbnMuc2FtcGxlID8/IGZhbHNlO1xuXG4gICAgLy8gYC5wcm9qZW5yYy50c2AgKyBgbnB4IHByb2plbmAsIHNhbWUgYXMgZXZlcnkgb3RoZXIgdHlwZSBoZXJlLiBUaGVcbiAgICAvLyBNYXZlbiByZXBvIG5lZWRzIG5vIFR5cGVTY3JpcHQgdG9vbGNoYWluIG9mIGl0cyBvd24gLSB0aGUgcnVubmVyIGlzXG4gICAgLy8gZmV0Y2hlZCAocGlubmVkKSBieSBucHggYXQgc3ludGggdGltZS5cbiAgICBhdHRhY2hUeXBlU2NyaXB0UHJvamVucmModGhpcyk7XG5cbiAgICAvLyBUaGUgcHJvamVuIHRvb2xjaGFpbiBgbnB4IHByb2plbmAgcnVucywgcGlubmVkIGV4YWN0bHkgc28gZXZlcnlcbiAgICAvLyBtYWNoaW5lIGFuZCBDSSByZXNvbHZlIHRoZSBzYW1lIGdlbmVyYXRvci4gT3duZXItd3JpdGFibGUgb24gZGlzayBzb1xuICAgIC8vIHRoZSBkb2N1bWVudGVkIHVwZGF0ZSBmbG93IChgbnBtIGkgLUQgLUUgQHhwZXJ0c3MvcHJvamVuLXR5cGVzQDx2PmApXG4gICAgLy8gY2FuIHJld3JpdGUgaXQ7IGhhbmQtZWRpdHMgYXJlIHN0aWxsIGNhdWdodCBieSB0aGUgZHJpZnQgY2hlY2suXG4gICAgbmV3IEpzb25GaWxlKHRoaXMsICdwYWNrYWdlLmpzb24nLCB7XG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgICBwcml2YXRlOiB0cnVlLFxuICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgICAncHJvamVuJzogUFJPSkVOX1ZFUlNJT04sXG4gICAgICAgICAgJ0B4cGVydHNzL3Byb2plbi10eXBlcyc6IFBST0pFTl9UWVBFU19WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlYWRvbmx5OiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8vIEpldEJyYWlucyBJREUgc3RhdGUgKC5pZGVhLykgaXMgbmV2ZXIgdHJhY2tlZCBpbiBnZW5lcmF0ZWQgcmVwb3MsIGFuZFxuICAgIC8vIG5laXRoZXIgaXMgL3NwZWMvIChsb2NhbCBwbGFucyBhbmQgc3BlY3M7IHRoZSBwYXR0ZXJuIGNvdmVycyBldmVyeVxuICAgIC8vIHN1YmRpcmVjdG9yeSkuXG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy8uaWRlYS8qJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy9zcGVjLycpO1xuICAgIHRoaXMuYWRkR2l0SWdub3JlKCd0YXJnZXQvJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJy5jbGFzc3BhdGgnKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLnByb2plY3QnKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLnNldHRpbmdzJyk7XG5cbiAgICBpZiAob3B0aW9ucy5saWNlbnNlZCA/PyB0cnVlKSB7XG4gICAgICBuZXcgTGljZW5zZSh0aGlzLCB7XG4gICAgICAgIHNwZHg6IG9wdGlvbnMubGljZW5zZSA/PyAnTUlUJyxcbiAgICAgICAgY29weXJpZ2h0T3duZXI6IG9wdGlvbnMuY29weXJpZ2h0T3duZXIgPz8gJ3hwZXJ0c3MnLFxuICAgICAgICBjb3B5cmlnaHRQZXJpb2Q6IG9wdGlvbnMuY29weXJpZ2h0UGVyaW9kLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVkaXRvcmNvbmZpZyA/PyB0cnVlKSB7XG4gICAgICBhZGRFZGl0b3JDb25maWcodGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5wb20gPSBuZXcgTWF2ZW5Qb20odGhpcywge1xuICAgICAgZ3JvdXBJZDogb3B0aW9ucy5ncm91cElkLFxuICAgICAgYXJ0aWZhY3RJZDogb3B0aW9ucy5hcnRpZmFjdElkLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/ICcwLjEuMCcsXG4gICAgICBwYWNrYWdpbmc6IHRoaXMucm9vdFBhY2thZ2luZyA/PyAnamFyJyxcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZ3VyZUJ1aWxkKG9wdGlvbnMpO1xuXG4gICAgLy8gT25lIE1hdmVuIHJ1biBwZXIgYnVpbGQ6IGB2ZXJpZnlgIHJ1bnMgZXZlcnkgZWFybGllciBwaGFzZSAoY29tcGlsZSxcbiAgICAvLyB1bml0IHRlc3RzLCBwYWNrYWdlKSBwbHVzIGludGVncmF0aW9uIHRlc3RzLiBOb3RoaW5nIGRlcGxveXMuXG4gICAgdGhpcy50ZXN0VGFzay5leGVjKCdtdm4gLUIgdmVyaWZ5Jyk7XG5cbiAgICBjb25zdCBnaCA9IHRoaXMuZ2l0aHViO1xuICAgIGlmICghZ2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSmF2YU1hdmVuUHJvamVjdCByZXF1aXJlcyBHaXRIdWIgaW50ZWdyYXRpb24nKTtcbiAgICB9XG4gICAgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyhnaCk7XG5cbiAgICBuZXcgUHJvamVuRHJpZnRDaGVja1dvcmtmbG93KHRoaXMsIHtcbiAgICAgIGdoZVRva2VuU2VjcmV0OiBvcHRpb25zLmdoZVRva2VuU2VjcmV0ID8/IERFRkFVTFRfR0hFX1RPS0VOX1NFQ1JFVCxcbiAgICB9KTtcbiAgICBuZXcgV29ya2Zsb3dDaGFuZ2VOb3RpY2VXb3JrZmxvdyh0aGlzKTtcblxuICAgIHRoaXMuY2lTZXR1cFN0ZXBzID0gW1xuICAgICAgU0VUVVBfTk9ERV9TVEVQLFxuICAgICAgTlBNX0NJX1NURVAsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZXR1cCBKYXZhJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvc2V0dXAtamF2YUB2NicsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAnZGlzdHJpYnV0aW9uJzogb3B0aW9ucy5qYXZhRGlzdHJpYnV0aW9uID8/ICd0ZW11cmluJyxcbiAgICAgICAgICAnamF2YS12ZXJzaW9uJzogdGhpcy5qYXZhTGluZS5zZXR1cEphdmFWZXJzaW9uLFxuICAgICAgICAgICdjYWNoZSc6ICdtYXZlbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBjb25zdCBwb3N0QnVpbGRTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSBbXTtcbiAgICBpZiAob3B0aW9ucy5zb25hclByb2plY3RLZXkpIHtcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnU29uYXJRdWJlIHNjYW4nLFxuICAgICAgICBydW46IGBtdm4gLUIgc29uYXI6c29uYXIgLURzb25hci5wcm9qZWN0S2V5PSR7b3B0aW9ucy5zb25hclByb2plY3RLZXl9YCxcbiAgICAgICAgZW52OiB7IFNPTkFSX1RPS0VOOiAnJHt7IHNlY3JldHMuU09OQVJfVE9LRU4gfX0nIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1aWxkVmVyaWZ5V29ya2Zsb3cgPSBuZXcgZ2l0aHViLlRhc2tXb3JrZmxvdyhnaCwge1xuICAgICAgbmFtZTogJ2J1aWxkJyxcbiAgICAgIGpvYklkOiAnYnVpbGQnLFxuICAgICAgdGFzazogdGhpcy5idWlsZFRhc2ssXG4gICAgICB0cmlnZ2VyczogeyBwdWxsUmVxdWVzdDoge30sIHdvcmtmbG93RGlzcGF0Y2g6IHt9IH0sXG4gICAgICBwZXJtaXNzaW9uczogeyBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIHByZUJ1aWxkU3RlcHM6IHRoaXMuY2lTZXR1cFN0ZXBzLFxuICAgICAgcG9zdEJ1aWxkU3RlcHMsXG4gICAgfSk7XG4gICAgbm90ZVdvcmtmbG93UHVycG9zZShcbiAgICAgIHRoaXMuYnVpbGRWZXJpZnlXb3JrZmxvdy5maWxlLFxuICAgICAgJ0J1aWxkIGFuZCB0ZXN0IHRoZSBNYXZlbiBwcm9qZWN0IG9uIHB1bGwgcmVxdWVzdHMsIHdpdGggYW4gb3B0aW9uYWwgU29uYXJRdWJlIHNjYW4uJyxcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbnNQbHVnaW4gPSBgb3JnLmNvZGVoYXVzLm1vam86dmVyc2lvbnMtbWF2ZW4tcGx1Z2luOiR7dGhpcy5waW5uZWRWZXJzaW9uKFZFUlNJT05TX01BVkVOX1BMVUdJTil9YDtcbiAgICB0aGlzLnVwZ3JhZGVUYXNrID0gdGhpcy5hZGRUYXNrKCd1cGdyYWRlJywge1xuICAgICAgZXhlYzogYG12biAtQiAke3ZlcnNpb25zUGx1Z2lufTpkaXNwbGF5LWRlcGVuZGVuY3ktdXBkYXRlcyAke3ZlcnNpb25zUGx1Z2lufTpkaXNwbGF5LXBsdWdpbi11cGRhdGVzYCxcbiAgICB9KTtcbiAgICBpZiAob3B0aW9ucy51cGdyYWRlV29ya2Zsb3cgPz8gdHJ1ZSkge1xuICAgICAgbmV3IE1hdmVuVXBncmFkZVJlcG9ydCh0aGlzLCB7XG4gICAgICAgIHRhc2s6IHRoaXMudXBncmFkZVRhc2ssXG4gICAgICAgIHNldHVwU3RlcHM6IHRoaXMuY2lTZXR1cFN0ZXBzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBtb2R1bGVzIGFkZGVkIHdpdGggYGFkZE1vZHVsZSgpYCwgaW4gb3JkZXIuICovXG4gIHB1YmxpYyBnZXQgbW9kdWxlcygpOiBNYXZlbk1vZHVsZVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubWF2ZW5Nb2R1bGVzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgTWF2ZW4gbW9kdWxlIGluIGBkaXJgIChyZWxhdGl2ZSB0byB0aGUgcmVwbyByb290OyBtYXkgYmUgbmVzdGVkLFxuICAgKiBlLmcuIGB0b29scy9zdHViLW1vZGVsYCkgYW5kIHR1cm5zIHRoZSByb290IHBvbSBpbnRvIHRoZSByZWFjdG9yIHBhcmVudFxuICAgKiAoYHBhY2thZ2luZz1wb21gLCBgPG1vZHVsZXM+YCBpbiB0aGUgb3JkZXIgYWRkZWQpLiBUaGUgcGFyZW50IG1hbmFnZXNcbiAgICogZXZlcnkgbW9kdWxlIGF0IGAke3Byb2plY3QudmVyc2lvbn1gLCBzbyBtb2R1bGVzIGRlcGVuZCBvbiBlYWNoIG90aGVyXG4gICAqIHdpdGggYGFkZE1vZHVsZURlcGVuZGVuY3koKWAsIHZlcnNpb25sZXNzLlxuICAgKi9cbiAgcHVibGljIGFkZE1vZHVsZShvcHRpb25zOiBNYXZlbk1vZHVsZU9wdGlvbnMpOiBNYXZlbk1vZHVsZSB7XG4gICAgaWYgKHRoaXMucm9vdFBhY2thZ2luZyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucm9vdFBhY2thZ2luZyAhPT0gJ3BvbScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEEgbXVsdGktbW9kdWxlIHByb2plY3QncyByb290IHBvbSBpcyBwYWNrYWdlZCBhcyBcInBvbVwiOyByZW1vdmUgcGFja2FnaW5nOiBcIiR7dGhpcy5yb290UGFja2FnaW5nfVwiLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXIgPSBub3JtYWxpemVNb2R1bGVEaXIob3B0aW9ucy5kaXIpO1xuICAgIGZvciAoY29uc3QgbSBvZiB0aGlzLm1hdmVuTW9kdWxlcykge1xuICAgICAgaWYgKG0uYXJ0aWZhY3RJZCA9PT0gb3B0aW9ucy5hcnRpZmFjdElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIG1vZHVsZSBhcnRpZmFjdElkIFwiJHtvcHRpb25zLmFydGlmYWN0SWR9XCIgKGRpcnMgXCIke20uZGlyfVwiIGFuZCBcIiR7ZGlyfVwiKS5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChtLmRpciA9PT0gZGlyIHx8IGRpci5zdGFydHNXaXRoKGAke20uZGlyfS9gKSB8fCBtLmRpci5zdGFydHNXaXRoKGAke2Rpcn0vYCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgZGlyIFwiJHtkaXJ9XCIgb3ZlcmxhcHMgbW9kdWxlIGRpciBcIiR7bS5kaXJ9XCI6IG1vZHVsZSBkaXJzIG11c3QgYmUgZGlzdGluY3QgYW5kIG5vdCBuZXN0ZWQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlID0gbmV3IE1hdmVuTW9kdWxlKHRoaXMsIHRoaXMucG9tLCB7IC4uLm9wdGlvbnMsIGRpciB9KTtcbiAgICB0aGlzLm1hdmVuTW9kdWxlcy5wdXNoKG1vZHVsZSk7XG4gICAgdGhpcy5wb20ucGFja2FnaW5nID0gJ3BvbSc7XG4gICAgdGhpcy5wb20ubWFuYWdlUGx1Z2luVmVyc2lvbnMgPSB0cnVlO1xuICAgIHRoaXMucG9tLmFkZE1vZHVsZShkaXIpO1xuICAgIHRoaXMucG9tLmFkZE1hbmFnZWREZXBlbmRlbmN5KGAke3RoaXMuZ3JvdXBJZH0vJHtvcHRpb25zLmFydGlmYWN0SWR9QFxcJHtwcm9qZWN0LnZlcnNpb259YCk7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgQk9NIGludG8gdGhlIHJvb3QgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIChgdHlwZT1wb21gLFxuICAgKiBgc2NvcGU9aW1wb3J0YCkuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmBcbiAgICovXG4gIHB1YmxpYyBhZGRCb20oc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkQm9tKHNwZWMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBpbnMgYSB2ZXJzaW9uIGluIHRoZSByb290IGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCB3aXRob3V0IGFkZGluZyB0aGVcbiAgICogZGVwZW5kZW5jeSwgc28gbW9kdWxlcyAob3IgdGhlIHJvb3QpIGNhbiB1c2UgaXQgdmVyc2lvbmxlc3MuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmBcbiAgICovXG4gIHB1YmxpYyBhZGRNYW5hZ2VkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRNYW5hZ2VkRGVwZW5kZW5jeShzcGVjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcGlsZS1zY29wZSBkZXBlbmRlbmN5IHRvIHRoZSByb290IHBvbS4gSW4gYSBtdWx0aS1tb2R1bGVcbiAgICogcHJvamVjdCBldmVyeSBtb2R1bGUgaW5oZXJpdHMgaXQ7IHVzZSBgTWF2ZW5Nb2R1bGUuYWRkRGVwZW5kZW5jeWAgZm9yXG4gICAqIG9uZSBtb2R1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCAtIGV4YWN0IHZlcnNpb24sIG9yIG5vbmUgd2hlblxuICAgKiBhIEJPTSBtYW5hZ2VzIGl0XG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGREZXBlbmRlbmN5KHNwZWMpO1xuICB9XG5cbiAgLyoqIEFkZHMgYSB0ZXN0LXNjb3BlIGRlcGVuZGVuY3kgdG8gdGhlIHJvb3QgcG9tIChpbmhlcml0ZWQgYnkgZXZlcnkgbW9kdWxlKS4gKi9cbiAgcHVibGljIGFkZFRlc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZFRlc3REZXBlbmRlbmN5KHNwZWMpO1xuICB9XG5cbiAgLyoqIEFkZHMgYSBidWlsZCBwbHVnaW4gdG8gdGhlIHJvb3QgcG9tIChpbmhlcml0ZWQgYnkgZXZlcnkgbW9kdWxlKS4gKi9cbiAgcHVibGljIGFkZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkUGx1Z2luKHNwZWMsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICAgIGlmICh0aGlzLnNhbXBsZSAmJiB0aGlzLm1hdmVuTW9kdWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuYWRkU2FtcGxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBleGFjdCB2ZXJzaW9uIHRoaXMgcHJvamVjdCB1c2VzIGZvciBhIGBncm91cElkL2FydGlmYWN0SWRgIGl0IHBpbnNcbiAgICogYnkgZGVmYXVsdDogdGhlIGBwbHVnaW5WZXJzaW9uc2Agb3ZlcnJpZGUgaWYgc2V0LCBvdGhlcndpc2UgdGhlXG4gICAqIGRlZmF1bHQgZm9yIGBqYXZhVmVyc2lvbmAuXG4gICAqL1xuICBwdWJsaWMgcGlubmVkVmVyc2lvbihjb29yZGluYXRlczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5qYXZhTGluZS52ZXJzaW9uc1tjb29yZGluYXRlc107XG4gICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRlZmF1bHQgdmVyc2lvbiBmb3IgJHtjb29yZGluYXRlc30uYCk7XG4gICAgfVxuICAgIHJldHVybiB2ZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuZXdlc3QgU3ByaW5nIEJvb3QgbWFqb3IgdmVyc2lvbiBgamF2YVZlcnNpb25gIHN1cHBvcnRzLCBvclxuICAgKiB1bmRlZmluZWQgd2hlbiB0aGlzIHBhY2thZ2Uga25vd3Mgb2Ygbm8gY2FwLlxuICAgKi9cbiAgcHJvdGVjdGVkIG1heFNwcmluZ0Jvb3RNYWpvcigpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmphdmFMaW5lLm1heFNwcmluZ0Jvb3RNYWpvcjtcbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlQnVpbGQob3B0aW9uczogSmF2YU1hdmVuUHJvamVjdE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRQcm9wZXJ0eSgncHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZycsICdVVEYtOCcpO1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmphdmFMaW5lLmNvbXBpbGVyUHJvcGVydGllcykpIHtcbiAgICAgIHRoaXMucG9tLmFkZFByb3BlcnR5KG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBKVW5pdCdzIHZlcnNpb24gY29tZXMgZnJvbSBpdHMgQk9NIChvciBmcm9tIGEgZnJhbWV3b3JrIEJPTSB0aGF0XG4gICAgLy8gbWFuYWdlcyBpdCAtIHNlZSBKYXZhU3ByaW5nQm9vdFByb2plY3QpLCBuZXZlciBmcm9tIGEgZGVwZW5kZW5jeS5cbiAgICB0aGlzLnBvbS5hZGRCb20oYCR7SlVOSVRfQk9NfUAke3RoaXMucGlubmVkVmVyc2lvbihKVU5JVF9CT00pfWApO1xuICAgIHRoaXMucG9tLmFkZFRlc3REZXBlbmRlbmN5KCdvcmcuanVuaXQuanVwaXRlci9qdW5pdC1qdXBpdGVyJyk7XG5cbiAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9DT01QSUxFUl9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX0NPTVBJTEVSX1BMVUdJTil9YCk7XG4gICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fU1VSRUZJUkVfUExVR0lOfUAke3RoaXMucGlubmVkVmVyc2lvbihNQVZFTl9TVVJFRklSRV9QTFVHSU4pfWApO1xuICAgIC8vIGZhaWxzYWZlIGhhcyBubyBkZWZhdWx0IGxpZmVjeWNsZSBiaW5kaW5nOyBiaW5kIGl0IHNvIGAqSVRgIHRlc3RzIHJ1blxuICAgIC8vIGluIGBtdm4gdmVyaWZ5YC5cbiAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9GQUlMU0FGRV9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX0ZBSUxTQUZFX1BMVUdJTil9YCwge1xuICAgICAgZXhlY3V0aW9uczogW3sgaWQ6ICdpbnRlZ3JhdGlvbi10ZXN0cycsIGdvYWxzOiBbJ2ludGVncmF0aW9uLXRlc3QnLCAndmVyaWZ5J10gfV0sXG4gICAgfSk7XG4gICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fSkFSX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fSkFSX1BMVUdJTil9YCwge1xuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICBhcmNoaXZlOiB7XG4gICAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICAgIGFkZERlZmF1bHRJbXBsZW1lbnRhdGlvbkVudHJpZXM6IHRydWUsXG4gICAgICAgICAgICBhZGREZWZhdWx0U3BlY2lmaWNhdGlvbkVudHJpZXM6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9ucy5lbmZvcmNlciA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBtaW5NYXZlbiA9IG9wdGlvbnMubWluTWF2ZW5WZXJzaW9uID8/IERFRkFVTFRfTUlOX01BVkVOX1ZFUlNJT047XG4gICAgICBhc3NlcnRFeGFjdFZlcnNpb24obWluTWF2ZW4sICdtaW5NYXZlblZlcnNpb24nKTtcbiAgICAgIHRoaXMuYWRkUGx1Z2luKGAke01BVkVOX0VORk9SQ0VSX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fRU5GT1JDRVJfUExVR0lOKX1gLCB7XG4gICAgICAgIGV4ZWN1dGlvbnM6IFt7IGlkOiAnZW5mb3JjZS12ZXJzaW9ucycsIGdvYWxzOiBbJ2VuZm9yY2UnXSB9XSxcbiAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIHJ1bGVzOiB7XG4gICAgICAgICAgICByZXF1aXJlTWF2ZW5WZXJzaW9uOiB7IHZlcnNpb246IGBbJHttaW5NYXZlbn0sKWAgfSxcbiAgICAgICAgICAgIHJlcXVpcmVKYXZhVmVyc2lvbjogeyB2ZXJzaW9uOiB0aGlzLmphdmFMaW5lLmVuZm9yY2VySmF2YVJhbmdlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkU2FtcGxlKCk6IHZvaWQge1xuICAgIGNvbnN0IHBrZyA9IHRoaXMuZ3JvdXBJZC5yZXBsYWNlKC9bXkEtWmEtejAtOV8uXS9nLCAnXycpO1xuICAgIGNvbnN0IHBhdGggPSBwa2cuc3BsaXQoJy4nKTtcbiAgICBuZXcgU2FtcGxlRGlyKHRoaXMsIHBvc2l4LmpvaW4oJ3NyYy9tYWluL2phdmEnLCAuLi5wYXRoKSwge1xuICAgICAgZmlsZXM6IHtcbiAgICAgICAgJ01haW4uamF2YSc6IFtcbiAgICAgICAgICBgcGFja2FnZSAke3BrZ307YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAncHVibGljIGNsYXNzIE1haW4geycsXG4gICAgICAgICAgJyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7JyxcbiAgICAgICAgICAnICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oXCJIZWxsbywgd29ybGQhXCIpOycsXG4gICAgICAgICAgJyAgICB9JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgJycsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIG5ldyBTYW1wbGVEaXIodGhpcywgcG9zaXguam9pbignc3JjL3Rlc3QvamF2YScsIC4uLnBhdGgpLCB7XG4gICAgICBmaWxlczoge1xuICAgICAgICAnTWFpblRlc3QuamF2YSc6IFtcbiAgICAgICAgICBgcGFja2FnZSAke3BrZ307YCxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OycsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgJ2NsYXNzIE1haW5UZXN0IHsnLFxuICAgICAgICAgICcgICAgQFRlc3QnLFxuICAgICAgICAgICcgICAgdm9pZCBydW5zKCkgeycsXG4gICAgICAgICAgJyAgICAgICAgTWFpbi5tYWluKG5ldyBTdHJpbmdbMF0pOycsXG4gICAgICAgICAgJyAgICB9JyxcbiAgICAgICAgICAnfScsXG4gICAgICAgICAgJycsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogYHByb2plbiBuZXcgLi4uIC0tamF2YS12ZXJzaW9uIDIxYCAob3IgYDEuOGAsIG9yIGAtLW1pbi1tYXZlbi12ZXJzaW9uIDMuOWApXG4gKiByZWFjaGVzIHRoZSBvcHRpb25zIGFzIGEgKm51bWJlcio6IHlhcmdzIHBhcnNlcyBudW1lcmljLWxvb2tpbmcgZmxhZ3MsIGFuZFxuICogcHJvamVuIHBhc3NlcyBzdHJpbmctdHlwZWQgb3B0aW9ucyB0aHJvdWdoIHVuY2hhbmdlZC4gVGhlIGluaXRpYWxcbiAqIGAucHJvamVucmMudHNgIGlzIHJlbmRlcmVkIGZyb20gdGhlIHNhbWUgYXJncywgc28gaXQgd291bGQgcmVhZFxuICogYGphdmFWZXJzaW9uOiAyMWAgYW5kIGZhaWwgdG8gdHlwZS1jaGVjay4gTm8gSmF2YSBvcHRpb24gaXMgbnVtYmVyLXR5cGVkLFxuICogc28gZXZlcnkgbnVtZXJpYyBhcmcgaXMgdHVybmVkIGJhY2sgaW50byB0aGUgc3RyaW5nIHRoZSB1c2VyIHR5cGVkLiBUaGlzXG4gKiBydW5zIGJlZm9yZSB0aGUgUHJvamVjdCBjb25zdHJ1Y3Rvciwgd2hpY2ggaXMgd2hlcmUgcHJvamVuIGNhcHR1cmVzIHRoZVxuICogYXJncyBpdCByZW5kZXJzLiBPcHRpb25zIGZyb20gYSBoYW5kLXdyaXR0ZW4gcHJvamVucmMgYXJlIG5ldmVyIG51bWJlcnNcbiAqICh0aGV5IHR5cGUtY2hlY2sgYXMgc3RyaW5ncykgYW5kIGFyZSBsZWZ0IGFsb25lLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlQcm9qZW5OZXdBcmdzPFQgZXh0ZW5kcyBvYmplY3Q+KG9wdGlvbnM6IFQpOiBUIHtcbiAgY29uc3QgbWFya2VyID0gKG9wdGlvbnMgYXMgYW55KS5fX25ld19fO1xuICBpZiAoIW1hcmtlcj8uYXJncykge1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIFtvcHRpb25zIGFzIGFueSwgbWFya2VyLmFyZ3NdKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhcmdldCkpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVNb2R1bGVEaXIoZGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB1bml4ID0gZGlyLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgaWYgKHVuaXguc3RhcnRzV2l0aCgnLycpIHx8IC9eW0EtWmEtel06Ly50ZXN0KHVuaXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgZGlyIFwiJHtkaXJ9XCIgbXVzdCBiZSByZWxhdGl2ZSB0byB0aGUgcmVwbyByb290LmApO1xuICB9XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBwb3NpeC5ub3JtYWxpemUodW5peCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gIGlmIChub3JtYWxpemVkID09PSAnLicgfHwgbm9ybWFsaXplZCA9PT0gJycgfHwgbm9ybWFsaXplZC5zcGxpdCgnLycpLmluY2x1ZGVzKCcuLicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb2R1bGUgZGlyIFwiJHtkaXJ9XCIgbXVzdCBiZSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwbyByb290LmApO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuIl19
407
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YS1tYXZlbi1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvamF2YS1tYXZlbi1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSx5Q0FBa0M7QUFDbEMsbUNBQWlFO0FBQ2pFLDRFQUF1RTtBQUN2RSxtREFXeUI7QUFDekIsdURBQW1EO0FBQ25ELGlEQUFpRTtBQUVqRSxpREFBa0U7QUFDbEUsbURBQStEO0FBQy9ELHlEQUF5RDtBQUN6RCxpRUFBMEU7QUFDMUUseURBQXdEO0FBQ3hELHVGQUFpRjtBQUNqRix1REFBaUU7QUFDakUsK0ZBQXlGO0FBQ3pGLGlFQUFpRTtBQUVqRSwyRUFBMkU7QUFDM0Usd0VBQXdFO0FBQ3hFLHlEQUF5RDtBQUN6RCwwQkFBMEI7QUFDMUIsaUVBQWlFO0FBQ2pFLE1BQU0sY0FBYyxHQUFXLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN0RSxpRUFBaUU7QUFDakUsTUFBTSxvQkFBb0IsR0FBVyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFFM0U7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxlQUFNLENBQUMsYUFBYTs7SUFDeEQsMEJBQTBCO0lBQ1YsR0FBRyxDQUFXO0lBRTlCLDJFQUEyRTtJQUMzRCxXQUFXLENBQVM7SUFFcEMseUVBQXlFO0lBQ3pELFdBQVcsQ0FBTztJQUVsQzs7OztPQUlHO0lBQ2EsbUJBQW1CLENBQXNCO0lBRXpEOzs7T0FHRztJQUNhLFlBQVksQ0FBNkI7SUFFeEMsUUFBUSxDQUFrQjtJQUMxQixhQUFhLENBQVU7SUFDdkIsT0FBTyxDQUFTO0lBQ2hCLE1BQU0sQ0FBVTtJQUNoQixZQUFZLEdBQWtCLEVBQUUsQ0FBQztJQUVsRCxZQUFZLE9BQWdDO1FBQzFDLEtBQUssQ0FBQztZQUNKLG9FQUFvRTtZQUNwRSxzRUFBc0U7WUFDdEUsaUVBQWlFO1lB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RUFBRSxDQUFDLENBQUM7SUFDN0QsSUFBSSxVQUFVLEtBQUssR0FBRyxJQUFJLFVBQVUsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsR0FBRyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcG9zaXggfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgSnNvbkZpbGUsIFNhbXBsZURpciwgVGFzaywgZ2l0aHViLCBqYXZhIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IE1hdmVuVXBncmFkZVJlcG9ydCB9IGZyb20gJy4vY29tcG9uZW50cy9tYXZlbi11cGdyYWRlLXJlcG9ydCc7XG5pbXBvcnQge1xuICBERUZBVUxUX01JTl9NQVZFTl9WRVJTSU9OLFxuICBKVU5JVF9CT00sXG4gIEphdmFMaW5lUHJvZmlsZSxcbiAgTUFWRU5fQ09NUElMRVJfUExVR0lOLFxuICBNQVZFTl9FTkZPUkNFUl9QTFVHSU4sXG4gIE1BVkVOX0ZBSUxTQUZFX1BMVUdJTixcbiAgTUFWRU5fSkFSX1BMVUdJTixcbiAgTUFWRU5fU1VSRUZJUkVfUExVR0lOLFxuICBWRVJTSU9OU19NQVZFTl9QTFVHSU4sXG4gIHJlc29sdmVKYXZhTGluZSxcbn0gZnJvbSAnLi9qYXZhLXZlcnNpb25zJztcbmltcG9ydCB7IE1hdmVuTW9kdWxlIH0gZnJvbSAnLi9tYXZlbi9tYXZlbi1tb2R1bGUnO1xuaW1wb3J0IHsgTWF2ZW5Qb20sIGFzc2VydEV4YWN0VmVyc2lvbiB9IGZyb20gJy4vbWF2ZW4vbWF2ZW4tcG9tJztcbmltcG9ydCB7IEphdmFNYXZlblByb2plY3RPcHRpb25zLCBNYXZlbk1vZHVsZU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgTlBNX0NJX1NURVAsIFNFVFVQX05PREVfU1RFUCB9IGZyb20gJy4uL2NvbW1vbi9jaS1zdGVwcyc7XG5pbXBvcnQgeyBERUZBVUxUX0dIRV9UT0tFTl9TRUNSRVQgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZEVkaXRvckNvbmZpZyB9IGZyb20gJy4uL2NvbW1vbi9lZGl0b3Jjb25maWcnO1xuaW1wb3J0IHsgYXBwbHlJbnRlcm5hbEFjdGlvbk92ZXJyaWRlcyB9IGZyb20gJy4uL2NvbW1vbi9pbnRlcm5hbC1hY3Rpb25zJztcbmltcG9ydCB7IGFkZExpY2Vuc2VGaWxlIH0gZnJvbSAnLi4vY29tbW9uL2xpY2Vuc2UtZmlsZSc7XG5pbXBvcnQgeyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3cgfSBmcm9tICcuLi9jb21tb24vcHJvamVuLWRyaWZ0LWNoZWNrLXdvcmtmbG93JztcbmltcG9ydCB7IGF0dGFjaFR5cGVTY3JpcHRQcm9qZW5yYyB9IGZyb20gJy4uL2NvbW1vbi9wcm9qZW5yYy10cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93IH0gZnJvbSAnLi4vY29tbW9uL3dvcmtmbG93LWNoYW5nZS1ub3RpY2Utd29ya2Zsb3cnO1xuaW1wb3J0IHsgbm90ZVdvcmtmbG93UHVycG9zZSB9IGZyb20gJy4uL2NvbW1vbi93b3JrZmxvdy1wdXJwb3NlJztcblxuLy8gYHJlcXVpcmUoLi4uKWAgcmVzb2x2ZXMgdGhyb3VnaCBOb2RlJ3Mgbm9ybWFsIG1vZHVsZSByZXNvbHV0aW9uLCBzbyBpbiBhXG4vLyAqcHVibGlzaGVkKiBwYWNrYWdlIHRoZXNlIGFyZSB0aGUgdmVyc2lvbnMgaW5zdGFsbGVkIGluIHRoZSBjb25zdW1pbmdcbi8vIHJlcG8gLSBleGFjdGx5IHdoYXQgaXRzIHBhY2thZ2UuanNvbiBtdXN0IHBpbiAoc2FtZSBhc1xuLy8gYEdpdEh1YkFjdGlvblByb2plY3RgKS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBQUk9KRU5fVkVSU0lPTjogc3RyaW5nID0gcmVxdWlyZSgncHJvamVuL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgUFJPSkVOX1RZUEVTX1ZFUlNJT046IHN0cmluZyA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG5cbi8qKlxuICogQmFzZWxpbmUgTWF2ZW4gcHJvamVjdCwgc2luZ2xlLSBvciBtdWx0aS1tb2R1bGUsIHdpdGggbm8gZnJhbWV3b3JrXG4gKiBhc3N1bXB0aW9ucy4gSXQgaXMgdGhlIGJhc2Ugb2YgZXZlcnkgSmF2YSB0eXBlIGluIHRoaXMgcGFja2FnZSBhbmQgaXNcbiAqIHVzYWJsZSBvbiBpdHMgb3duIChgcHJvamVuIG5ldyAuLi4gamF2YV9tYXZlbmApLlxuICpcbiAqIC0gVGhlIHBvbSBpcyB3cml0dGVuIGJ5IHRoaXMgcGFja2FnZSAoYE1hdmVuUG9tYCksIG5vdCBwcm9qZW4nc1xuICogICBgamF2YS5Qb21gOiBleGFjdCB2ZXJzaW9ucyBvbmx5LCBCT00gaW1wb3J0cywgYDxtb2R1bGVzPmAsXG4gKiAgIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCwgYDxwbHVnaW5NYW5hZ2VtZW50PmAuXG4gKiAtIEV2ZXJ5dGhpbmcgSmF2YS12ZXJzaW9uLWRlcGVuZGVudCAoY29tcGlsZXIgbGV2ZWwsIGVuZm9yY2VyIHJ1bGUsIEpVbml0XG4gKiAgIGxpbmUsIENJIEpESykgZm9sbG93cyBgamF2YVZlcnNpb25gLlxuICogLSBXaXRoIG5vIGBhZGRNb2R1bGUoKWAgY2FsbHMgdGhlIHJvb3QgcG9tIGlzIHRoZSBhcnRpZmFjdC4gQWZ0ZXIgdGhlXG4gKiAgIGZpcnN0IGBhZGRNb2R1bGUoKWAgaXQgaXMgYSBgcG9tYC1wYWNrYWdlZCByZWFjdG9yIHBhcmVudCBhbmQgdGhlXG4gKiAgIG1vZHVsZXMgaW5oZXJpdCBpdHMgcGx1Z2lucyBhbmQgdGVzdCBkZXBlbmRlbmNpZXMuXG4gKiAtIGBucHggcHJvamVuIGJ1aWxkYCBzeW50aGVzaXplcywgdGhlbiBydW5zIE1hdmVuIG9uY2U6IGBtdm4gLUIgdmVyaWZ5YFxuICogICAodW5pdCB0ZXN0cyB2aWEgc3VyZWZpcmUsIGAqSVRgIHRlc3RzIHZpYSBmYWlsc2FmZSkuXG4gKiAtIENJOiBhIFBSIGJ1aWxkICh3aXRoIGFuIG9wdGlvbmFsIFNvbmFyUXViZSBzY2FuKSwgdGhlIHByb2plbiBkcmlmdFxuICogICBjaGVjaywgYW5kIGEgbmlnaHRseSByZXBvcnQtb25seSB1cGRhdGUgY2hlY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBKYXZhTWF2ZW5Qcm9qZWN0IGV4dGVuZHMgZ2l0aHViLkdpdEh1YlByb2plY3Qge1xuICAvKiogVGhlIHJvb3QgYHBvbS54bWxgLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9tOiBNYXZlblBvbTtcblxuICAvKiogVGhlIGNhbm9uaWNhbCBKYXZhIGxpbmUgdGhlIGJ1aWxkIHRhcmdldHMgKGAxLjhgLCBgMTdgLCBgMjFgLCBgMjVgKS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGphdmFWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqIFByaW50cyBhdmFpbGFibGUgZGVwZW5kZW5jeS9wbHVnaW4gdXBkYXRlcyAoYG5weCBwcm9qZW4gdXBncmFkZWApLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBncmFkZVRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIFRoZSBQUiBidWlsZCB3b3JrZmxvdyAoYGJ1aWxkLnltbGApLiBBZGQgam9icyB0byBpdCB3aXRoXG4gICAqIGBidWlsZFZlcmlmeVdvcmtmbG93LmFkZEpvYihpZCwgam9iKWA7IHVzZSBgY2lTZXR1cFN0ZXBzYCBmb3IgYSBqb2IgdGhhdFxuICAgKiBuZWVkcyBOb2RlLCB0aGUgcHJvamVuIHRvb2xjaGFpbiwgYW5kIHRoZSBKREsuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRWZXJpZnlXb3JrZmxvdzogZ2l0aHViLlRhc2tXb3JrZmxvdztcblxuICAvKipcbiAgICogU3RlcHMgdGhhdCBpbnN0YWxsIE5vZGUgKHBpbm5lZCksIGBucG0gY2lgLCBhbmQgdGhlIHByb2plY3QncyBKREsgd2l0aCBhXG4gICAqIE1hdmVuIGNhY2hlIC0gdGhlIHNldHVwIGV2ZXJ5IE1hdmVuIENJIGpvYiBpbiB0aGlzIHJlcG8gbmVlZHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2lTZXR1cFN0ZXBzOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGphdmFMaW5lOiBKYXZhTGluZVByb2ZpbGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdFBhY2thZ2luZz86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBncm91cElkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2FtcGxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hdmVuTW9kdWxlczogTWF2ZW5Nb2R1bGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEphdmFNYXZlblByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLy8gU3ByZWFkIGZpcnN0LCBvdmVycmlkZXMgYWZ0ZXI6IGZvcndhcmRpbmcgdGhlIGNhbGxlcidzIG9wdGlvbnMgaXNcbiAgICAgIC8vIHdoYXQgbGV0cyBgcHJvamVuIG5ldyAtLWZyb20gQHhwZXJ0c3MvcHJvamVuLXR5cGVzIGphdmFfbWF2ZW5gIHdvcmtcbiAgICAgIC8vIC0gcHJvamVuIHNtdWdnbGVzIGl0cyBib290c3RyYXAgbWFya2VyIChgX19uZXdfX2ApIHRocm91Z2ggdGhlXG4gICAgICAvLyBvcHRpb25zIG9iamVjdCwgYW5kIGl0IGlzIHRoYXQgbWFya2VyIHdoaWNoIG1ha2VzIHRoZVxuICAgICAgLy8gYFByb2plbnJjRmlsZWAgY29tcG9uZW50IHdyaXRlIHRoZSBpbml0aWFsIGAucHJvamVucmMudHNgLiBEcm9wIGl0XG4gICAgICAvLyBhbmQgYHByb2plbiBuZXdgIHNjYWZmb2xkcyBhIHJlcG8gd2l0aCBubyBwcm9qZW5yYyBhdCBhbGwuXG4gICAgICAuLi5zdHJpbmdpZnlQcm9qZW5OZXdBcmdzKG9wdGlvbnMpLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgLy8gUFIgdGl0bGVzIGFyZSBub3QgZ2F0ZWQ6IGBmZWF0OmAvYGZpeDpgIG1hdHRlciBvbmx5IGJlY2F1c2UgdGhleSBkcml2ZVxuICAgICAgLy8gdGhlIHJlbGVhc2Ugd29ya2Zsb3cgKHZpYSBgcmVsZWFzYWJsZUNvbW1pdHNgKSwgbm90IFBSIGNoZWNrcy4gVGhlXG4gICAgICAvLyBjb252ZW50aW9uYWwtY29tbWl0IFBSLXRpdGxlIGxpbnQgaXMgYWRkZWQgYnkgdGhlIGBHaXRIdWJgIGNvbXBvbmVudFxuICAgICAgLy8gdW5sZXNzIGBnaXRodWJPcHRpb25zLnB1bGxSZXF1ZXN0TGludGAgaXMgYGZhbHNlYCAoaXQgZGVmYXVsdHMgdHJ1ZSkuXG4gICAgICBnaXRodWJPcHRpb25zOiB7IHB1bGxSZXF1ZXN0TGludDogZmFsc2UgfSxcbiAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW4oe1xuICAgICAgICBzZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHZlcnNpb24gb2YgT2JqZWN0LnZhbHVlcyhvcHRpb25zLnBsdWdpblZlcnNpb25zID8/IHt9KSkge1xuICAgICAgYXNzZXJ0RXhhY3RWZXJzaW9uKHZlcnNpb24sICdwbHVnaW5WZXJzaW9ucycpO1xuICAgIH1cbiAgICB0aGlzLmphdmFMaW5lID0gcmVzb2x2ZUphdmFMaW5lKG9wdGlvbnMuamF2YVZlcnNpb24sIG9wdGlvbnMucGx1Z2luVmVyc2lvbnMpO1xuICAgIHRoaXMuamF2YVZlcnNpb24gPSB0aGlzLmphdmFMaW5lLmxpbmU7XG4gICAgdGhpcy5yb290UGFja2FnaW5nID0gb3B0aW9ucy5wYWNrYWdpbmc7XG4gICAgdGhpcy5ncm91cElkID0gb3B0aW9ucy5ncm91cElkO1xuICAgIHRoaXMuc2FtcGxlID0gb3B0aW9ucy5zYW1wbGUgPz8gZmFsc2U7XG5cbiAgICAvLyBgLnByb2plbnJjLnRzYCArIGBucHggcHJvamVuYCwgc2FtZSBhcyBldmVyeSBvdGhlciB0eXBlIGhlcmUuIFRoZVxuICAgIC8vIE1hdmVuIHJlcG8gbmVlZHMgbm8gVHlwZVNjcmlwdCB0b29sY2hhaW4gb2YgaXRzIG93biAtIHRoZSBydW5uZXIgaXNcbiAgICAvLyBmZXRjaGVkIChwaW5uZWQpIGJ5IG5weCBhdCBzeW50aCB0aW1lLlxuICAgIGF0dGFjaFR5cGVTY3JpcHRQcm9qZW5yYyh0aGlzKTtcblxuICAgIC8vIFRoZSBwcm9qZW4gdG9vbGNoYWluIGBucHggcHJvamVuYCBydW5zLCBwaW5uZWQgZXhhY3RseSBzbyBldmVyeVxuICAgIC8vIG1hY2hpbmUgYW5kIENJIHJlc29sdmUgdGhlIHNhbWUgZ2VuZXJhdG9yLiBPd25lci13cml0YWJsZSBvbiBkaXNrIHNvXG4gICAgLy8gdGhlIGRvY3VtZW50ZWQgdXBkYXRlIGZsb3cgKGBucG0gaSAtRCAtRSBAeHBlcnRzcy9wcm9qZW4tdHlwZXNAPHY+YClcbiAgICAvLyBjYW4gcmV3cml0ZSBpdDsgaGFuZC1lZGl0cyBhcmUgc3RpbGwgY2F1Z2h0IGJ5IHRoZSBkcmlmdCBjaGVjay5cbiAgICBuZXcgSnNvbkZpbGUodGhpcywgJ3BhY2thZ2UuanNvbicsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIHZlcnNpb246ICcwLjAuMCcsXG4gICAgICAgIHByaXZhdGU6IHRydWUsXG4gICAgICAgIGRldkRlcGVuZGVuY2llczoge1xuICAgICAgICAgICdwcm9qZW4nOiBQUk9KRU5fVkVSU0lPTixcbiAgICAgICAgICAnQHhwZXJ0c3MvcHJvamVuLXR5cGVzJzogUFJPSkVOX1RZUEVTX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLy8gSmV0QnJhaW5zIElERSBzdGF0ZSAoLmlkZWEvKSBpcyBuZXZlciB0cmFja2VkIGluIGdlbmVyYXRlZCByZXBvcywgYW5kXG4gICAgLy8gbmVpdGhlciBpcyAvc3BlYy8gKGxvY2FsIHBsYW5zIGFuZCBzcGVjczsgdGhlIHBhdHRlcm4gY292ZXJzIGV2ZXJ5XG4gICAgLy8gc3ViZGlyZWN0b3J5KS5cbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLy5pZGVhLyonKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnL3NwZWMvJyk7XG4gICAgdGhpcy5hZGRHaXRJZ25vcmUoJ3RhcmdldC8nKTtcbiAgICB0aGlzLmFkZEdpdElnbm9yZSgnLmNsYXNzcGF0aCcpO1xuICAgIHRoaXMuYWRkR2l0SWdub3JlKCcucHJvamVjdCcpO1xuICAgIHRoaXMuYWRkR2l0SWdub3JlKCcuc2V0dGluZ3MnKTtcblxuICAgIGlmIChvcHRpb25zLmxpY2Vuc2VkID8/IHRydWUpIHtcbiAgICAgIGFkZExpY2Vuc2VGaWxlKHRoaXMsIHtcbiAgICAgICAgc3BkeDogb3B0aW9ucy5saWNlbnNlID8/ICdNSVQnLFxuICAgICAgICBjb3B5cmlnaHRPd25lcjogb3B0aW9ucy5jb3B5cmlnaHRPd25lciA/PyAneHBlcnRzcycsXG4gICAgICAgIGNvcHlyaWdodFBlcmlvZDogb3B0aW9ucy5jb3B5cmlnaHRQZXJpb2QsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZWRpdG9yY29uZmlnID8/IHRydWUpIHtcbiAgICAgIGFkZEVkaXRvckNvbmZpZyh0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLnBvbSA9IG5ldyBNYXZlblBvbSh0aGlzLCB7XG4gICAgICBncm91cElkOiBvcHRpb25zLmdyb3VwSWQsXG4gICAgICBhcnRpZmFjdElkOiBvcHRpb25zLmFydGlmYWN0SWQsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gJzAuMS4wJyxcbiAgICAgIHBhY2thZ2luZzogdGhpcy5yb290UGFja2FnaW5nID8/ICdqYXInLFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICB1cmw6IG9wdGlvbnMudXJsLFxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlndXJlQnVpbGQob3B0aW9ucyk7XG5cbiAgICAvLyBPbmUgTWF2ZW4gcnVuIHBlciBidWlsZDogYHZlcmlmeWAgcnVucyBldmVyeSBlYXJsaWVyIHBoYXNlIChjb21waWxlLFxuICAgIC8vIHVuaXQgdGVzdHMsIHBhY2thZ2UpIHBsdXMgaW50ZWdyYXRpb24gdGVzdHMuIE5vdGhpbmcgZGVwbG95cy5cbiAgICB0aGlzLnRlc3RUYXNrLmV4ZWMoJ212biAtQiB2ZXJpZnknKTtcblxuICAgIGNvbnN0IGdoID0gdGhpcy5naXRodWI7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdKYXZhTWF2ZW5Qcm9qZWN0IHJlcXVpcmVzIEdpdEh1YiBpbnRlZ3JhdGlvbicpO1xuICAgIH1cbiAgICBhcHBseUludGVybmFsQWN0aW9uT3ZlcnJpZGVzKGdoKTtcblxuICAgIG5ldyBQcm9qZW5EcmlmdENoZWNrV29ya2Zsb3codGhpcywge1xuICAgICAgZ2hlVG9rZW5TZWNyZXQ6IG9wdGlvbnMuZ2hlVG9rZW5TZWNyZXQgPz8gREVGQVVMVF9HSEVfVE9LRU5fU0VDUkVULFxuICAgIH0pO1xuICAgIG5ldyBXb3JrZmxvd0NoYW5nZU5vdGljZVdvcmtmbG93KHRoaXMpO1xuXG4gICAgdGhpcy5jaVNldHVwU3RlcHMgPSBbXG4gICAgICBTRVRVUF9OT0RFX1NURVAsXG4gICAgICBOUE1fQ0lfU1RFUCxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NldHVwIEphdmEnLFxuICAgICAgICB1c2VzOiAnYWN0aW9ucy9zZXR1cC1qYXZhQHY2JyxcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgICdkaXN0cmlidXRpb24nOiBvcHRpb25zLmphdmFEaXN0cmlidXRpb24gPz8gJ3RlbXVyaW4nLFxuICAgICAgICAgICdqYXZhLXZlcnNpb24nOiB0aGlzLmphdmFMaW5lLnNldHVwSmF2YVZlcnNpb24sXG4gICAgICAgICAgJ2NhY2hlJzogJ21hdmVuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IHBvc3RCdWlsZFN0ZXBzOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtdO1xuICAgIGlmIChvcHRpb25zLnNvbmFyUHJvamVjdEtleSkge1xuICAgICAgcG9zdEJ1aWxkU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdTb25hclF1YmUgc2NhbicsXG4gICAgICAgIHJ1bjogYG12biAtQiBzb25hcjpzb25hciAtRHNvbmFyLnByb2plY3RLZXk9JHtvcHRpb25zLnNvbmFyUHJvamVjdEtleX1gLFxuICAgICAgICBlbnY6IHsgU09OQVJfVE9LRU46ICcke3sgc2VjcmV0cy5TT05BUl9UT0tFTiB9fScgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYnVpbGRWZXJpZnlXb3JrZmxvdyA9IG5ldyBnaXRodWIuVGFza1dvcmtmbG93KGdoLCB7XG4gICAgICBuYW1lOiAnYnVpbGQnLFxuICAgICAgam9iSWQ6ICdidWlsZCcsXG4gICAgICB0YXNrOiB0aGlzLmJ1aWxkVGFzayxcbiAgICAgIHRyaWdnZXJzOiB7IHB1bGxSZXF1ZXN0OiB7fSwgd29ya2Zsb3dEaXNwYXRjaDoge30gfSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IGNvbnRlbnRzOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uUkVBRCB9LFxuICAgICAgcHJlQnVpbGRTdGVwczogdGhpcy5jaVNldHVwU3RlcHMsXG4gICAgICBwb3N0QnVpbGRTdGVwcyxcbiAgICB9KTtcbiAgICBub3RlV29ya2Zsb3dQdXJwb3NlKFxuICAgICAgdGhpcy5idWlsZFZlcmlmeVdvcmtmbG93LmZpbGUsXG4gICAgICAnQnVpbGQgYW5kIHRlc3QgdGhlIE1hdmVuIHByb2plY3Qgb24gcHVsbCByZXF1ZXN0cywgd2l0aCBhbiBvcHRpb25hbCBTb25hclF1YmUgc2Nhbi4nLFxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uc1BsdWdpbiA9IGBvcmcuY29kZWhhdXMubW9qbzp2ZXJzaW9ucy1tYXZlbi1wbHVnaW46JHt0aGlzLnBpbm5lZFZlcnNpb24oVkVSU0lPTlNfTUFWRU5fUExVR0lOKX1gO1xuICAgIHRoaXMudXBncmFkZVRhc2sgPSB0aGlzLmFkZFRhc2soJ3VwZ3JhZGUnLCB7XG4gICAgICBleGVjOiBgbXZuIC1CICR7dmVyc2lvbnNQbHVnaW59OmRpc3BsYXktZGVwZW5kZW5jeS11cGRhdGVzICR7dmVyc2lvbnNQbHVnaW59OmRpc3BsYXktcGx1Z2luLXVwZGF0ZXNgLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnVwZ3JhZGVXb3JrZmxvdyA/PyB0cnVlKSB7XG4gICAgICBuZXcgTWF2ZW5VcGdyYWRlUmVwb3J0KHRoaXMsIHtcbiAgICAgICAgdGFzazogdGhpcy51cGdyYWRlVGFzayxcbiAgICAgICAgc2V0dXBTdGVwczogdGhpcy5jaVNldHVwU3RlcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIG1vZHVsZXMgYWRkZWQgd2l0aCBgYWRkTW9kdWxlKClgLCBpbiBvcmRlci4gKi9cbiAgcHVibGljIGdldCBtb2R1bGVzKCk6IE1hdmVuTW9kdWxlW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5tYXZlbk1vZHVsZXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBNYXZlbiBtb2R1bGUgaW4gYGRpcmAgKHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3Q7IG1heSBiZSBuZXN0ZWQsXG4gICAqIGUuZy4gYHRvb2xzL3N0dWItbW9kZWxgKSBhbmQgdHVybnMgdGhlIHJvb3QgcG9tIGludG8gdGhlIHJlYWN0b3IgcGFyZW50XG4gICAqIChgcGFja2FnaW5nPXBvbWAsIGA8bW9kdWxlcz5gIGluIHRoZSBvcmRlciBhZGRlZCkuIFRoZSBwYXJlbnQgbWFuYWdlc1xuICAgKiBldmVyeSBtb2R1bGUgYXQgYCR7cHJvamVjdC52ZXJzaW9ufWAsIHNvIG1vZHVsZXMgZGVwZW5kIG9uIGVhY2ggb3RoZXJcbiAgICogd2l0aCBgYWRkTW9kdWxlRGVwZW5kZW5jeSgpYCwgdmVyc2lvbmxlc3MuXG4gICAqL1xuICBwdWJsaWMgYWRkTW9kdWxlKG9wdGlvbnM6IE1hdmVuTW9kdWxlT3B0aW9ucyk6IE1hdmVuTW9kdWxlIHtcbiAgICBpZiAodGhpcy5yb290UGFja2FnaW5nICE9PSB1bmRlZmluZWQgJiYgdGhpcy5yb290UGFja2FnaW5nICE9PSAncG9tJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQSBtdWx0aS1tb2R1bGUgcHJvamVjdCdzIHJvb3QgcG9tIGlzIHBhY2thZ2VkIGFzIFwicG9tXCI7IHJlbW92ZSBwYWNrYWdpbmc6IFwiJHt0aGlzLnJvb3RQYWNrYWdpbmd9XCIuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRpciA9IG5vcm1hbGl6ZU1vZHVsZURpcihvcHRpb25zLmRpcik7XG4gICAgZm9yIChjb25zdCBtIG9mIHRoaXMubWF2ZW5Nb2R1bGVzKSB7XG4gICAgICBpZiAobS5hcnRpZmFjdElkID09PSBvcHRpb25zLmFydGlmYWN0SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIGFydGlmYWN0SWQgXCIke29wdGlvbnMuYXJ0aWZhY3RJZH1cIiAoZGlycyBcIiR7bS5kaXJ9XCIgYW5kIFwiJHtkaXJ9XCIpLmApO1xuICAgICAgfVxuICAgICAgaWYgKG0uZGlyID09PSBkaXIgfHwgZGlyLnN0YXJ0c1dpdGgoYCR7bS5kaXJ9L2ApIHx8IG0uZGlyLnN0YXJ0c1dpdGgoYCR7ZGlyfS9gKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSBkaXIgXCIke2Rpcn1cIiBvdmVybGFwcyBtb2R1bGUgZGlyIFwiJHttLmRpcn1cIjogbW9kdWxlIGRpcnMgbXVzdCBiZSBkaXN0aW5jdCBhbmQgbm90IG5lc3RlZC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGUgPSBuZXcgTWF2ZW5Nb2R1bGUodGhpcywgdGhpcy5wb20sIHsgLi4ub3B0aW9ucywgZGlyIH0pO1xuICAgIHRoaXMubWF2ZW5Nb2R1bGVzLnB1c2gobW9kdWxlKTtcbiAgICB0aGlzLnBvbS5wYWNrYWdpbmcgPSAncG9tJztcbiAgICB0aGlzLnBvbS5tYW5hZ2VQbHVnaW5WZXJzaW9ucyA9IHRydWU7XG4gICAgdGhpcy5wb20uYWRkTW9kdWxlKGRpcik7XG4gICAgdGhpcy5wb20uYWRkTWFuYWdlZERlcGVuZGVuY3koYCR7dGhpcy5ncm91cElkfS8ke29wdGlvbnMuYXJ0aWZhY3RJZH1AXFwke3Byb2plY3QudmVyc2lvbn1gKTtcbiAgICByZXR1cm4gbW9kdWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBCT00gaW50byB0aGUgcm9vdCBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAgKGB0eXBlPXBvbWAsXG4gICAqIGBzY29wZT1pbXBvcnRgKS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZEB2ZXJzaW9uYFxuICAgKi9cbiAgcHVibGljIGFkZEJvbShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRCb20oc3BlYyk7XG4gIH1cblxuICAvKipcbiAgICogUGlucyBhIHZlcnNpb24gaW4gdGhlIHJvb3QgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIHdpdGhvdXQgYWRkaW5nIHRoZVxuICAgKiBkZXBlbmRlbmN5LCBzbyBtb2R1bGVzIChvciB0aGUgcm9vdCkgY2FuIHVzZSBpdCB2ZXJzaW9ubGVzcy5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZEB2ZXJzaW9uYFxuICAgKi9cbiAgcHVibGljIGFkZE1hbmFnZWREZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZE1hbmFnZWREZXBlbmRlbmN5KHNwZWMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21waWxlLXNjb3BlIGRlcGVuZGVuY3kgdG8gdGhlIHJvb3QgcG9tLiBJbiBhIG11bHRpLW1vZHVsZVxuICAgKiBwcm9qZWN0IGV2ZXJ5IG1vZHVsZSBpbmhlcml0cyBpdDsgdXNlIGBNYXZlbk1vZHVsZS5hZGREZXBlbmRlbmN5YCBmb3JcbiAgICogb25lIG1vZHVsZS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZFtAdmVyc2lvbl1gIC0gZXhhY3QgdmVyc2lvbiwgb3Igbm9uZSB3aGVuXG4gICAqIGEgQk9NIG1hbmFnZXMgaXRcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZERlcGVuZGVuY3koc3BlYyk7XG4gIH1cblxuICAvKiogQWRkcyBhIHRlc3Qtc2NvcGUgZGVwZW5kZW5jeSB0byB0aGUgcm9vdCBwb20gKGluaGVyaXRlZCBieSBldmVyeSBtb2R1bGUpLiAqL1xuICBwdWJsaWMgYWRkVGVzdERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wb20uYWRkVGVzdERlcGVuZGVuY3koc3BlYyk7XG4gIH1cblxuICAvKiogQWRkcyBhIGJ1aWxkIHBsdWdpbiB0byB0aGUgcm9vdCBwb20gKGluaGVyaXRlZCBieSBldmVyeSBtb2R1bGUpLiAqL1xuICBwdWJsaWMgYWRkUGx1Z2luKHNwZWM6IHN0cmluZywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLnBvbS5hZGRQbHVnaW4oc3BlYywgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG4gICAgaWYgKHRoaXMuc2FtcGxlICYmIHRoaXMubWF2ZW5Nb2R1bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGRTYW1wbGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGV4YWN0IHZlcnNpb24gdGhpcyBwcm9qZWN0IHVzZXMgZm9yIGEgYGdyb3VwSWQvYXJ0aWZhY3RJZGAgaXQgcGluc1xuICAgKiBieSBkZWZhdWx0OiB0aGUgYHBsdWdpblZlcnNpb25zYCBvdmVycmlkZSBpZiBzZXQsIG90aGVyd2lzZSB0aGVcbiAgICogZGVmYXVsdCBmb3IgYGphdmFWZXJzaW9uYC5cbiAgICovXG4gIHB1YmxpYyBwaW5uZWRWZXJzaW9uKGNvb3JkaW5hdGVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmphdmFMaW5lLnZlcnNpb25zW2Nvb3JkaW5hdGVzXTtcbiAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZGVmYXVsdCB2ZXJzaW9uIGZvciAke2Nvb3JkaW5hdGVzfS5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5ld2VzdCBTcHJpbmcgQm9vdCBtYWpvciB2ZXJzaW9uIGBqYXZhVmVyc2lvbmAgc3VwcG9ydHMsIG9yXG4gICAqIHVuZGVmaW5lZCB3aGVuIHRoaXMgcGFja2FnZSBrbm93cyBvZiBubyBjYXAuXG4gICAqL1xuICBwcm90ZWN0ZWQgbWF4U3ByaW5nQm9vdE1ham9yKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuamF2YUxpbmUubWF4U3ByaW5nQm9vdE1ham9yO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVCdWlsZChvcHRpb25zOiBKYXZhTWF2ZW5Qcm9qZWN0T3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMucG9tLmFkZFByb3BlcnR5KCdwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nJywgJ1VURi04Jyk7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuamF2YUxpbmUuY29tcGlsZXJQcm9wZXJ0aWVzKSkge1xuICAgICAgdGhpcy5wb20uYWRkUHJvcGVydHkobmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEpVbml0J3MgdmVyc2lvbiBjb21lcyBmcm9tIGl0cyBCT00gKG9yIGZyb20gYSBmcmFtZXdvcmsgQk9NIHRoYXRcbiAgICAvLyBtYW5hZ2VzIGl0IC0gc2VlIEphdmFTcHJpbmdCb290UHJvamVjdCksIG5ldmVyIGZyb20gYSBkZXBlbmRlbmN5LlxuICAgIHRoaXMucG9tLmFkZEJvbShgJHtKVU5JVF9CT019QCR7dGhpcy5waW5uZWRWZXJzaW9uKEpVTklUX0JPTSl9YCk7XG4gICAgdGhpcy5wb20uYWRkVGVzdERlcGVuZGVuY3koJ29yZy5qdW5pdC5qdXBpdGVyL2p1bml0LWp1cGl0ZXInKTtcblxuICAgIHRoaXMuYWRkUGx1Z2luKGAke01BVkVOX0NPTVBJTEVSX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fQ09NUElMRVJfUExVR0lOKX1gKTtcbiAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9TVVJFRklSRV9QTFVHSU59QCR7dGhpcy5waW5uZWRWZXJzaW9uKE1BVkVOX1NVUkVGSVJFX1BMVUdJTil9YCk7XG4gICAgLy8gZmFpbHNhZmUgaGFzIG5vIGRlZmF1bHQgbGlmZWN5Y2xlIGJpbmRpbmc7IGJpbmQgaXQgc28gYCpJVGAgdGVzdHMgcnVuXG4gICAgLy8gaW4gYG12biB2ZXJpZnlgLlxuICAgIHRoaXMuYWRkUGx1Z2luKGAke01BVkVOX0ZBSUxTQUZFX1BMVUdJTn1AJHt0aGlzLnBpbm5lZFZlcnNpb24oTUFWRU5fRkFJTFNBRkVfUExVR0lOKX1gLCB7XG4gICAgICBleGVjdXRpb25zOiBbeyBpZDogJ2ludGVncmF0aW9uLXRlc3RzJywgZ29hbHM6IFsnaW50ZWdyYXRpb24tdGVzdCcsICd2ZXJpZnknXSB9XSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZFBsdWdpbihgJHtNQVZFTl9KQVJfUExVR0lOfUAke3RoaXMucGlubmVkVmVyc2lvbihNQVZFTl9KQVJfUExVR0lOKX1gLCB7XG4gICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgIGFyY2hpdmU6IHtcbiAgICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgICAgYWRkRGVmYXVsdEltcGxlbWVudGF0aW9uRW50cmllczogdHJ1ZSxcbiAgICAgICAgICAgIGFkZERlZmF1bHRTcGVjaWZpY2F0aW9uRW50cmllczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLmVuZm9yY2VyID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IG1pbk1hdmVuID0gb3B0aW9ucy5taW5NYXZlblZlcnNpb24gPz8gREVGQVVMVF9NSU5fTUFWRU5fVkVSU0lPTjtcbiAgICAgIGFzc2VydEV4YWN0VmVyc2lvbihtaW5NYXZlbiwgJ21pbk1hdmVuVmVyc2lvbicpO1xuICAgICAgdGhpcy5hZGRQbHVnaW4oYCR7TUFWRU5fRU5GT1JDRVJfUExVR0lOfUAke3RoaXMucGlubmVkVmVyc2lvbihNQVZFTl9FTkZPUkNFUl9QTFVHSU4pfWAsIHtcbiAgICAgICAgZXhlY3V0aW9uczogW3sgaWQ6ICdlbmZvcmNlLXZlcnNpb25zJywgZ29hbHM6IFsnZW5mb3JjZSddIH1dLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgcnVsZXM6IHtcbiAgICAgICAgICAgIHJlcXVpcmVNYXZlblZlcnNpb246IHsgdmVyc2lvbjogYFske21pbk1hdmVufSwpYCB9LFxuICAgICAgICAgICAgcmVxdWlyZUphdmFWZXJzaW9uOiB7IHZlcnNpb246IHRoaXMuamF2YUxpbmUuZW5mb3JjZXJKYXZhUmFuZ2UgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRTYW1wbGUoKTogdm9pZCB7XG4gICAgY29uc3QgcGtnID0gdGhpcy5ncm91cElkLnJlcGxhY2UoL1teQS1aYS16MC05Xy5dL2csICdfJyk7XG4gICAgY29uc3QgcGF0aCA9IHBrZy5zcGxpdCgnLicpO1xuICAgIG5ldyBTYW1wbGVEaXIodGhpcywgcG9zaXguam9pbignc3JjL21haW4vamF2YScsIC4uLnBhdGgpLCB7XG4gICAgICBmaWxlczoge1xuICAgICAgICAnTWFpbi5qYXZhJzogW1xuICAgICAgICAgIGBwYWNrYWdlICR7cGtnfTtgLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdwdWJsaWMgY2xhc3MgTWFpbiB7JyxcbiAgICAgICAgICAnICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsnLFxuICAgICAgICAgICcgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihcIkhlbGxvLCB3b3JsZCFcIik7JyxcbiAgICAgICAgICAnICAgIH0nLFxuICAgICAgICAgICd9JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbmV3IFNhbXBsZURpcih0aGlzLCBwb3NpeC5qb2luKCdzcmMvdGVzdC9qYXZhJywgLi4ucGF0aCksIHtcbiAgICAgIGZpbGVzOiB7XG4gICAgICAgICdNYWluVGVzdC5qYXZhJzogW1xuICAgICAgICAgIGBwYWNrYWdlICR7cGtnfTtgLFxuICAgICAgICAgICcnLFxuICAgICAgICAgICdpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICAnY2xhc3MgTWFpblRlc3QgeycsXG4gICAgICAgICAgJyAgICBAVGVzdCcsXG4gICAgICAgICAgJyAgICB2b2lkIHJ1bnMoKSB7JyxcbiAgICAgICAgICAnICAgICAgICBNYWluLm1haW4obmV3IFN0cmluZ1swXSk7JyxcbiAgICAgICAgICAnICAgIH0nLFxuICAgICAgICAgICd9JyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBgcHJvamVuIG5ldyAuLi4gLS1qYXZhLXZlcnNpb24gMjFgIChvciBgMS44YCwgb3IgYC0tbWluLW1hdmVuLXZlcnNpb24gMy45YClcbiAqIHJlYWNoZXMgdGhlIG9wdGlvbnMgYXMgYSAqbnVtYmVyKjogeWFyZ3MgcGFyc2VzIG51bWVyaWMtbG9va2luZyBmbGFncywgYW5kXG4gKiBwcm9qZW4gcGFzc2VzIHN0cmluZy10eXBlZCBvcHRpb25zIHRocm91Z2ggdW5jaGFuZ2VkLiBUaGUgaW5pdGlhbFxuICogYC5wcm9qZW5yYy50c2AgaXMgcmVuZGVyZWQgZnJvbSB0aGUgc2FtZSBhcmdzLCBzbyBpdCB3b3VsZCByZWFkXG4gKiBgamF2YVZlcnNpb246IDIxYCBhbmQgZmFpbCB0byB0eXBlLWNoZWNrLiBObyBKYXZhIG9wdGlvbiBpcyBudW1iZXItdHlwZWQsXG4gKiBzbyBldmVyeSBudW1lcmljIGFyZyBpcyB0dXJuZWQgYmFjayBpbnRvIHRoZSBzdHJpbmcgdGhlIHVzZXIgdHlwZWQuIFRoaXNcbiAqIHJ1bnMgYmVmb3JlIHRoZSBQcm9qZWN0IGNvbnN0cnVjdG9yLCB3aGljaCBpcyB3aGVyZSBwcm9qZW4gY2FwdHVyZXMgdGhlXG4gKiBhcmdzIGl0IHJlbmRlcnMuIE9wdGlvbnMgZnJvbSBhIGhhbmQtd3JpdHRlbiBwcm9qZW5yYyBhcmUgbmV2ZXIgbnVtYmVyc1xuICogKHRoZXkgdHlwZS1jaGVjayBhcyBzdHJpbmdzKSBhbmQgYXJlIGxlZnQgYWxvbmUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVByb2plbk5ld0FyZ3M8VCBleHRlbmRzIG9iamVjdD4ob3B0aW9uczogVCk6IFQge1xuICBjb25zdCBtYXJrZXIgPSAob3B0aW9ucyBhcyBhbnkpLl9fbmV3X187XG4gIGlmICghbWFya2VyPy5hcmdzKSB7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbiAgZm9yIChjb25zdCB0YXJnZXQgb2YgW29wdGlvbnMgYXMgYW55LCBtYXJrZXIuYXJnc10pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGFyZ2V0KSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1vZHVsZURpcihkaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHVuaXggPSBkaXIucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICBpZiAodW5peC5zdGFydHNXaXRoKCcvJykgfHwgL15bQS1aYS16XTovLnRlc3QodW5peCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSBkaXIgXCIke2Rpcn1cIiBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QuYCk7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBvc2l4Lm5vcm1hbGl6ZSh1bml4KS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgaWYgKG5vcm1hbGl6ZWQgPT09ICcuJyB8fCBub3JtYWxpemVkID09PSAnJyB8fCBub3JtYWxpemVkLnNwbGl0KCcvJykuaW5jbHVkZXMoJy4uJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZHVsZSBkaXIgXCIke2Rpcn1cIiBtdXN0IGJlIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSByZXBvIHJvb3QuYCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG4iXX0=
@@ -17,7 +17,7 @@ const java_spring_boot_project_1 = require("./java-spring-boot-project");
17
17
  * repo use `JavaSpringBootProject`.
18
18
  */
19
19
  class JavaServiceProject extends java_spring_boot_project_1.JavaSpringBootProject {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaServiceProject", version: "0.0.17" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.JavaServiceProject", version: "0.0.19" };
21
21
  constructor(options) {
22
22
  super(options);
23
23
  this.addDependency('org.springframework.boot/spring-boot-starter-web');