cdk-preflight 0.0.173 → 0.0.175

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.
@@ -32,7 +32,7 @@ cdk-preflight のルール追加パイプライン。AGENTS.md の設計原則
32
32
  - **evidence の拒否文から、制約を名指ししている部分を `repro.expect` に写す**(`expect: "must not be longer than 256 characters"`)。1 行のダブルクォート文字列で、中に `"` と `\` を入れない(月次ランナーは YAML パーサ無しに sed で読む)。evidence に逐語で含まれていないと `bundle-rules` が落ちる。月次はこの文面で照合し、別の理由で倒れたら INCONCLUSIVE にする(#264)。**2026-09-27 以降に足す real-deploy ルールでは必須**。サービスが汎用文しか返さない場合(`GeneralServiceException` など)は、その汎用文を写す
33
33
  - fail テンプレートがデプロイに**成功**したら、それはドキュメント側の誤り(BROKEN-EXPECTATION)。ルールを削除し、証拠を issue に残して終了する。CloudFront では明文化された制約 9 件中 3 件がこれだった(2026-09-02)
34
34
  - **予想と違う理由**で失敗した場合(他アカウントの ARN、ドメイン所有権の検証など)は証拠にならない。サービスエラーが対象の制約そのものを名指しするまでテンプレートを作り直すか、除去できない交絡は `evidence` に明記する
35
- - **月次は別アカウント(`502761806921`)で fail だけを回す**ので、bench(`214794239830`)に実在するロールやバケットをフィクスチャに焼かない。ロールはテンプレートの中で作り、ARN は `Fn::Sub` の `${AWS::AccountId}` で自アカウントを指す。テンプレートに書けない S3 オブジェクト(入れ子スタックの子テンプレート等)は `bench/fixtures/` に置いて `cdkpf-fixtures-${AWS::AccountId}` を指す — 月次は `verify-all.sh` が `bench/fixtures.sh` で毎回同期する。手元で `verify-rule.sh` を直接回すなら先に 1 回 `bash bench/fixtures.sh`(#284)
35
+ - **月次は別アカウント(`502761806921`)で fail だけを回す**ので、フィクスチャは両アカウントに同じ名前で在るものしか指さない。bench(`214794239830`)の ARN を焼かず、`Fn::Sub` の `${AWS::AccountId}` で自アカウントを指す。使い捨てのロールはテンプレートの中で作る。常設が要るものは `bench/fixtures.template.json`(IAM ロール・SNS・ECR・Glue ジョブ)か `bench/fixtures.sh`(S3 は `bench/fixtures/` に置いて `cdkpf-fixtures-${AWS::AccountId}` を指す)に足す。証明書の ARN とレイヤーの版 ID はアカウントごとに違うので `{{resolve:ssm:/cdkpf/fixtures/...}}` で引く。bench の us-east-1 既定 VPC の ID(`vpc-4331593e` など)はそのまま書いてよい — 他のアカウントでは `verify-rule.sh` が自分の既定 VPC に読み替える。月次は fixtures ジョブが毎回 `fixtures.sh` を流す。常設物を足したら手元でも 1 回 `bash bench/fixtures.sh`(#284)
36
36
  - `doc-only` は「再現に安価に作れないリソース(検証済み ACM 証明書、所有ドメイン等)が要る」場合に限る最終手段であって、まだ試していない制約への近道ではない。詳細は AGENTS.md の "A doc sentence is a hypothesis, not evidence" に従う
37
37
  6. **仕上げ**: `npx projen build` 全緑 → ブランチ作成 → **コミットするのは `rules/**` だけ**(`src/rules.generated.ts` は gitignore 済み、`docs/rules.md` と README のバッジ・リソース表は `bundle-docs` が main で書く。ここを触らないので PR 同士が衝突しない)→ conventional commit(`feat(rules): add <rule-id>`)→ PR 本文に: 制約の出典 / 重複チェック結果 / 実機再現ログ。
38
38
 
package/.jsii CHANGED
@@ -9600,6 +9600,6 @@
9600
9600
  "symbolId": "src/index:PreflightOptions"
9601
9601
  }
9602
9602
  },
9603
- "version": "0.0.173",
9604
- "fingerprint": "+xHBBvEkeL/SGBXdY9isMy74+jdGbMpTVtzIjuK6psA="
9603
+ "version": "0.0.175",
9604
+ "fingerprint": "eZw3Y+sPTYTeo290zqErIQ+XLF3NnRS6uqaIM0f5L0w="
9605
9605
  }
package/lib/index.js CHANGED
@@ -17,7 +17,7 @@ const rules_generated_1 = require("./rules.generated");
17
17
  * Preflight.apply(app);
18
18
  */
19
19
  class Preflight {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.173" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-preflight.Preflight", version: "0.0.175" };
21
21
  /**
22
22
  * Register the cdk-preflight rules on an App or Stage.
23
23
  */
@@ -112,4 +112,13 @@ export declare function prune(rules: BundledRuleData[], types: Set<string> | und
112
112
  * 通常は aws-cdk-lib が bundledDependencies として同梱しているコピーに乗る。
113
113
  * (テストからも利用するため export している)
114
114
  */
115
+ /**
116
+ * エンジンの版に依らずテンプレートを評価する。1.7.0-beta〜1.9.0-beta(aws-cdk-lib 2.267〜2.270 の
117
+ * 同梱版)は validateDetailed だけ、1.10.0 は validateTemplate だけ(改名)、1.11.0 以降は両方を
118
+ * 持ち、1.12.1 で validateDetailed は非推奨の別名になった。レポートの形(diagnostics の
119
+ * ruleId/severity/source/propertyPath/entity.logicalId)は両者で同じ(実測 2026-09-28、
120
+ * 1.7.0-beta / 1.10.0 / 1.12.1 で fail テンプレート 400 本の CUSTOM 診断が完全一致)。
121
+ * 先に消えるのは非推奨の側なので validateTemplate を優先する。
122
+ */
123
+ export declare function validateTemplate(eng: any, template: unknown, config: object): any;
115
124
  export declare function loadEngine(): any | undefined;
@@ -44,6 +44,7 @@ exports.observePluginCached = observePluginCached;
44
44
  exports.mergeRuleModules = mergeRuleModules;
45
45
  exports.templateResourceTypes = templateResourceTypes;
46
46
  exports.prune = prune;
47
+ exports.validateTemplate = validateTemplate;
47
48
  exports.loadEngine = loadEngine;
48
49
  const fs = __importStar(require("fs"));
49
50
  const path = __importStar(require("path"));
@@ -135,7 +136,7 @@ class PreflightEnforcePlugin {
135
136
  for (const st of context.stackTemplates) {
136
137
  let report;
137
138
  try {
138
- report = eng.validateDetailed(new engine.TemplateFile(st.templatePath), {
139
+ report = validateTemplate(eng, new engine.TemplateFile(st.templatePath), {
139
140
  pseudoParameterOverrides: {
140
141
  accountId: context.accountId,
141
142
  region: context.region,
@@ -485,6 +486,21 @@ function prune(rules, types) {
485
486
  * 通常は aws-cdk-lib が bundledDependencies として同梱しているコピーに乗る。
486
487
  * (テストからも利用するため export している)
487
488
  */
489
+ /**
490
+ * エンジンの版に依らずテンプレートを評価する。1.7.0-beta〜1.9.0-beta(aws-cdk-lib 2.267〜2.270 の
491
+ * 同梱版)は validateDetailed だけ、1.10.0 は validateTemplate だけ(改名)、1.11.0 以降は両方を
492
+ * 持ち、1.12.1 で validateDetailed は非推奨の別名になった。レポートの形(diagnostics の
493
+ * ruleId/severity/source/propertyPath/entity.logicalId)は両者で同じ(実測 2026-09-28、
494
+ * 1.7.0-beta / 1.10.0 / 1.12.1 で fail テンプレート 400 本の CUSTOM 診断が完全一致)。
495
+ * 先に消えるのは非推奨の側なので validateTemplate を優先する。
496
+ */
497
+ function validateTemplate(eng, template, config) {
498
+ const fn = eng.validateTemplate ?? eng.validateDetailed;
499
+ if (typeof fn !== 'function') {
500
+ throw new Error('@aws/cloudformation-validate has neither validateTemplate nor validateDetailed');
501
+ }
502
+ return fn.call(eng, template, config);
503
+ }
488
504
  function loadEngine() {
489
505
  try {
490
506
  return require('@aws/cloudformation-validate');
@@ -503,4 +519,4 @@ function loadEngine() {
503
519
  return undefined;
504
520
  }
505
521
  }
506
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcml2YXRlL2VuZm9yY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLDBEQU1DO0FBR0QsOENBRUM7QUFNRCw0Q0FFQztBQTZMRCxnREFpQkM7QUF1REQsd0NBaUJDO0FBYUQsc0NBUUM7QUEyQ0Qsa0RBY0M7QUFpQkQsNENBVUM7QUFRRCxzREFtQkM7QUFZRCxzQkFRQztBQU9ELGdDQWVDO0FBeGZELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsNkNBT3FCO0FBRXJCLHdEQUF3RTtBQUV4RSwwREFBMEQ7QUFDMUQ7OERBQzhEO0FBRTlEOzs7R0FHRztBQUNVLFFBQUEsc0JBQXNCLEdBQUcsd0JBQXdCLENBQUM7QUFFL0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYyxFQUFFLFNBQWtCO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkcsT0FBTztRQUNMLElBQUksRUFBRSw4QkFBc0I7UUFDNUIsT0FBTyxFQUFFLCtEQUErRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRTtLQUM3RyxDQUFDO0FBQ0osQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFnQixpQkFBaUIsQ0FBQyxTQUE2QjtJQUM3RCxPQUFPLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUEwQjtJQUN6RCxPQUFPLE9BQU8sTUFBTSxLQUFL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LENBQUM7UUFDUCxlQUFlO0lBQ2pCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsRUFBRTtZQUMxRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzlCLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgQXBwLFxuICBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luLFxuICB0eXBlIElQb2xpY3lWYWxpZGF0aW9uQ29udGV4dCxcbiAgdHlwZSBJUG9saWN5VmFsaWRhdGlvblBsdWdpbixcbiAgdHlwZSBQb2xpY3lWYWxpZGF0aW9uUGx1Z2luUmVwb3J0LFxuICB0eXBlIFBvbGljeVZpb2xhdGlvbixcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCVU5ETEVEX0xJQlMsIHR5cGUgQnVuZGxlZFJ1bGVEYXRhIH0gZnJvbSAnLi4vcnVsZXMuZ2VuZXJhdGVkJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzIC0tIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUg44GvXG4gICBhd3MtY2RrLWxpYiDlkIzmorHjgrPjg5Tjg7zjgpLli5XnmoTop6PmsbrjgZnjgovoqK3oqIjvvIjkvp3lrZjjgavjga/ovInjgZvjgarjgYTvvInjgIJSRUFETUUvQUdFTlRTLm1kIOWPgueFpyAqL1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgUmVnbyBtb2R1bGUgdGhhdCBjYXJyaWVzIHRoZSBkZXBsb3ltZW50XG4gKiBlbnZpcm9ubWVudCBpbnRvIHJ1bGUgZXZhbHVhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IERFUExPWV9FTlZfTU9EVUxFX05BTUUgPSAnX3BmX2RlcGxveV9lbnZpcm9ubWVudCc7XG5cbi8qKlxuICogQnVpbGQgdGhlIGdlbmVyYXRlZCBtb2R1bGUgZGVmaW5pbmcgYGRlcGxveV9yZWdpb25gIGZvciB0aGUgcnVsZSBwYWNrYWdlLlxuICpcbiAqIFJ1bGVzIG11c3QgcmVhZCBpdCBhcyBgZGF0YS5jZGtfcHJlZmxpZ2h0LmRlcGxveV9yZWdpb25gIChuZXZlciBhcyBhIGJhcmVcbiAqIHZhcmlhYmxlKTogdGhlIGRhdGEgcmVmZXJlbmNlIGlzIHNpbXBseSB1bmRlZmluZWQgd2hlbiB0aGUgbW9kdWxlIGlzIG5vdFxuICogaW5qZWN0ZWQg4oCUIHRoZSBydWxlIGJvZHkgZmFpbHMgYW5kIHRoZSBydWxlIHNraXBzIOKAlCB3aGlsZSBhIGJhcmUgdmFyaWFibGVcbiAqIHdvdWxkIGJlIGEgY29tcGlsZSBlcnJvci4gSW5qZWN0ZWQgYnkgdGhlIGVuZm9yY2UgcGx1Z2luIHdoZW4gdGhlIGFwcC1sZXZlbFxuICogcmVnaW9uIGlzIGNvbmNyZXRlOyB0aGUgd2FybiBtb2RlIChDREsgYnVpbHQtaW4gcGx1Z2luKSBuZXZlciBpbmplY3RzIGl0LFxuICogc28gcmVnaW9uLWRlcGVuZGVudCBydWxlcyBvbmx5IGZpcmUgaW4gZW5mb3JjZSBtb2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95RW52aXJvbm1lbnRNb2R1bGUocmVnaW9uOiBzdHJpbmcsIGFjY291bnRJZD86IHN0cmluZyk6IHsgbmFtZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGFjY291bnQgPSBpc0NvbmNyZXRlQWNjb3VudChhY2NvdW50SWQpID8gYGRlcGxveV9hY2NvdW50IDo9ICR7SlNPTi5zdHJpbmdpZnkoYWNjb3VudElkKX1cXG5gIDogJyc7XG4gIHJldHVybiB7XG4gICAgbmFtZTogREVQTE9ZX0VOVl9NT0RVTEVfTkFNRSxcbiAgICBjb250ZW50OiBgcGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG5cXG5kZXBsb3lfcmVnaW9uIDo9ICR7SlNPTi5zdHJpbmdpZnkocmVnaW9uKX1cXG4ke2FjY291bnR9YCxcbiAgfTtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIGFjY291bnQgZnJvbSB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGlzIGEgY29uY3JldGUgMTItZGlnaXQgYWNjb3VudCBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmNyZXRlQWNjb3VudChhY2NvdW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFjY291bnRJZCBpcyBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIGFjY291bnRJZCA9PT0gJ3N0cmluZycgJiYgL15cXGR7MTJ9JC8udGVzdChhY2NvdW50SWQpO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIHJlZ2lvbiBmcm9tIHRoZSB2YWxpZGF0aW9uIGNvbnRleHQgaXMgYSBjb25jcmV0ZSByZWdpb24gbmFtZVxuICogKGFzIG9wcG9zZWQgdG8gdW5kZWZpbmVkLCBhbiB1bnJlc29sdmVkIHRva2VuLCBvciBhIHBsYWNlaG9sZGVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uY3JldGVSZWdpb24ocmVnaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpOiByZWdpb24gaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiByZWdpb24gPT09ICdzdHJpbmcnICYmIC9eW2Etel17Mn0oLVthLXpdKykrLVxcZCskLy50ZXN0KHJlZ2lvbik7XG59XG5cbmludGVyZmFjZSBFbmdpbmVEaWFnbm9zdGljIHtcbiAgcmVhZG9ubHkgcnVsZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNldmVyaXR5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbiAgcmVhZG9ubHkgc291cmNlPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRpdHk/OiB7IHJlYWRvbmx5IGxvZ2ljYWxJZD86IHN0cmluZyB9O1xuICByZWFkb25seSBwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRvY3VtZW50YXRpb25Vcmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogZW5mb3JjZSDjg6Ljg7zjg4nnlKjjga7lhoXpg6jjg5fjg6njgrDjgqTjg7PjgIJcbiAqXG4gKiBDREsg57WE44G/6L6844G/44GuIENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4g44Gv5YWoIGZpbmRpbmcg44KSIHdhcm5pbmcg44Gr5Li444KB44KL44Gf44KBXG4gKiDvvIhhd3MtY2RrLWxpYiAyLjI2Ny4wIOWun+a4rOOAgeaYh+agvOODleODqeOCsOOCgueEoeWKue+8ieOAgeWQjOOBmOOCqOODs+OCuOODs+OCkuebtOaOpeWRvOOBs+OAgVxuICogY2RrLXByZWZsaWdodCDjga7jg6vjg7zjg6vpgZXlj43vvIjjgYrjgojjgbMgc3RyaWN0IOaZguOBr+OCqOODs+OCuOODs+OBruOCqOODqeODvOOCr+ODqeOCue+8ieOCklxuICogcG9saWN5IHZhbGlkYXRpb24g44Gu5aSx5pWX44Go44GX44Gm5aCx5ZGK44GX44GmIHN5bnRoIOOCkuatouOCgeOCi+OAglxuICovXG5leHBvcnQgY2xhc3MgUHJlZmxpZ2h0RW5mb3JjZVBsdWdpbiBpbXBsZW1lbnRzIElQb2xpY3lWYWxpZGF0aW9uUGx1Z2luIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWUgPSBQTFVHSU5fTkFNRTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmljdDogYm9vbGVhbixcbiAgKSB7fVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjb250ZXh0OiBJUG9saWN5VmFsaWRhdGlvbkNvbnRleHQpOiBQb2xpY3lWYWxpZGF0aW9uUGx1Z2luUmVwb3J0IHtcbiAgICBjb25zdCBlbmdpbmUgPSBsb2FkRW5naW5lQ2FjaGVkKCk7XG4gICAgaWYgKCFlbmdpbmUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAnY2RrLXByZWZsaWdodDogY291bGQgbm90IHJlc29sdmUgQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZTsgJyArXG4gICAgICAgICdlbmZvcmNlIG1vZGUgaXMgdW5hdmFpbGFibGUgYW5kIG5vIHByZWZsaWdodCBjaGVja3Mgd2VyZSBydW4uICcgK1xuICAgICAgICAnSW5zdGFsbCBpdCBhcyBhIGRldkRlcGVuZGVuY3kgb3IgdXNlIHRoZSBkZWZhdWx0ICh3YXJuKSBtb2RlLicsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmlvbGF0aW9uczogW10gfTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdpb24gPSBpc0NvbmNyZXRlUmVnaW9uKGNvbnRleHQucmVnaW9uKSA/IGNvbnRleHQucmVnaW9uIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjY291bnQgPSBpc0NvbmNyZXRlQWNjb3VudChjb250ZXh0LmFjY291bnRJZCkgPyBjb250ZXh0LmFjY291bnRJZCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBvdXJzID0gbmV3IFNldCh0aGlzLnJ1bGVzLm1hcCgocikgPT4gci5pZCkpO1xuICAgIGNvbnN0IHZpb2xhdGlvbnM6IFBvbGljeVZpb2xhdGlvbltdID0gW107XG5cbiAgICAvLyDlhajjg4bjg7Pjg5fjg6zjg7zjg4jjga7lkozpm4blkIjjgafliIjjgorovrzjgoDjgILjg4bjg7Pjg5fjg6zjg7zjg4jjgZTjgajjgavliIjjgovjgajjgqjjg7Pjgrjjg7PjgpLkvZXluqbjgoJcbiAgICAvLyDkvZzjgornm7TjgZnjgZPjgajjgavjgarjgorjgIHjgZ3jgaHjgonjga7jgrPjgrnjg4jjga7mlrnjgYzpq5jjgY/jgaTjgY/vvIhyZWdvRW5naW5lQ2FjaGVkIOOBruOCs+ODoeODs+ODiOWPgueFp++8ieOAglxuICAgIGNvbnN0IHJ1bGVzID0gcHJ1bmUodGhpcy5ydWxlcywgdGVtcGxhdGVSZXNvdXJjZVR5cGVzKGNvbnRleHQuc3RhY2tUZW1wbGF0ZXMubWFwKChzdCkgPT4gc3QudGVtcGxhdGVQYXRoKSkpO1xuXG4gICAgLy8gMSDmnKzjgoLmrovjgonjgarjgYQgPSDjgZPjga7jgqLjg5fjg6rjga7jg6rjgr3jg7zjgrnjgavplqLkv4LjgZnjgovjg6vjg7zjg6vjgYznhKHjgYTjgILjgqjjg7Pjgrjjg7PjgpLntYTjgoDlv4XopoHjgoLnhKHjgYRcbiAgICAvLyDvvIhsaWJzIOOBoOOBkeOCkui8ieOBm+OBn+OCqOODs+OCuOODs+OBryB2aW9sYXRpb24g44Or44O844Or44KS5oyB44Gf44Ga44CB6KmV5L6h5pmC44Gr6JC944Gh44KL77yJ44CCXG4gICAgLy8gc3RyaWN0IOOBruOBqOOBjeOBr+e1hOOBv+i+vOOBv+OCqOODs+OCuOODs+OBriBmaW5kaW5ncyDjgpLmi77jgYbku5XkuovjgYzmrovjgovjga7jgafpgJrluLjjganjgYrjgorpgLLjgoDjgIJcbiAgICBpZiAocnVsZXMubGVuZ3RoID09PSAwICYmICF0aGlzLnN0cmljdCkge1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgdmlvbGF0aW9uczogW10gfTtcbiAgICB9XG5cbiAgICBsZXQgZW5nOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIGVuZyA9IHJlZ29FbmdpbmVDYWNoZWQoZW5naW5lLCBydWxlcywgcmVnaW9uLCBhY2NvdW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyDjg6vjg7zjg6vjg5Hjg4Pjgq/jgYzjgrPjg7Pjg5HjgqTjg6vjgafjgY3jgarjgYQgPSDjganjga7jg4bjg7Pjg5fjg6zjg7zjg4jjgoLmpJzmn7vjgafjgY3jgarjgYTjga7jgafjgIFcbiAgICAgIC8vIOWFqOOCueOCv+ODg+OCr+OBtuOCkyB2aW9sYXRpb24g44KS56uL44Gm44KL77yIMSDmnprjgZrjgaTjga4gY2F0Y2gg44Gr44Gv5Yiw6YGU44GX44Gq44GE77yJ44CCXG4gICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSwgdmlvbGF0aW9uczogY29udGV4dC5zdGFja1RlbXBsYXRlcy5tYXAoKHN0KSA9PiBlbmdpbmVFcnJvclZpb2xhdGlvbihzdCwgZSkpIH07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdCBvZiBjb250ZXh0LnN0YWNrVGVtcGxhdGVzKSB7XG4gICAgICBsZXQgcmVwb3J0OiBhbnk7XG4gICAgICB0cnkge1xuICAgICAgICByZXBvcnQgPSBlbmcudmFsaWRhdGVEZXRhaWxlZChuZXcgZW5naW5lLlRlbXBsYXRlRmlsZShzdC50ZW1wbGF0ZVBhdGgpLCB7XG4gICAgICAgICAgcHNldWRvUGFyYW1ldGVyT3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICBhY2NvdW50SWQ6IGNvbnRleHQuYWNjb3VudElkLFxuICAgICAgICAgICAgcmVnaW9uOiBjb250ZXh0LnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIOe1hOOBv+i+vOOBv+ODq+ODvOODq+OBryBDREsg57WE44G/6L6844G/44GuIENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4g44GM5ZCM44GY44OG44Oz44OX44Os44O844OI44GrXG4gICAgICAgICAgLy8g5a++44GX44Gm5pei44Gr6LWw44KJ44Gb44Gm44GE44KL44CCc3RyaWN0IOOBp+OBquOBkeOCjOOBsOe1kOaenOOCguS9v+OCj+OBmuaNqOOBpuOBpuOBhOOCi+OBruOBp+OAgeS4uOOBlOOBqOWIh+OCi1xuICAgICAgICAgIC8vIO+8iOWun+a4rCA3MCDjg6rjgr3jg7zjgrkgMSDmnprjgafliJ3lm54gMy4yN3MgLT4gMC4yMnPvvInjgIJzdHJpY3Qg44Gu44Go44GN44Gg44GR5b+F6KaB44Gr44Gq44KL44CCXG4gICAgICAgICAgZGlzYWJsZUJ1aWx0aW5SdWxlczogIXRoaXMuc3RyaWN0LFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gdGhyb3cg44KS5aSW44Gr5Ye644GZ44GoIENESyDjga/jgZPjga7lkbzjgbPlh7rjgZfjgpIgcGx1Z2luIGZhaWx1cmXvvIh2aW9sYXRpb24g44K844Ot77yJ44Go44GX44GmXG4gICAgICAgIC8vIOiomOmMsuOBmeOCi+OBoOOBkeOBq+OBquOCiuOAgeOBk+OBk+OBvuOBp+OBq+mbhuOCgeOBn+mBleWPjeOCguW+jOe2muODhuODs+ODl+ODrOODvOODiOOBrumBleWPjeOCguS4uOOBlOOBqOa2iOOBiOOAgVxuICAgICAgICAvLyDmrovjgovjga7jga8gYGZhaWxlZDogdW5kZWZpbmVkYCDjgaDjgZHjgavjgarjgovvvIhpc3N1ZSAjMTUx77yJ44CCXG4gICAgICAgIC8vIHN5bnRoIOOCkuatouOCgeOCi+OBruOBryBpbnN0YWxsRW5mb3JjZUdhdGUg44Gu5b2555uu44CC44GT44GT44Gv44CM44Gp44Gu44K544K/44OD44Kv44Gn5L2V44GMXG4gICAgICAgIC8vIOi1t+OBjeOBn+OBi+OAjeOCkuODrOODneODvOODiOOBq+aui+OBl+OAgeS7luOCueOCv+ODg+OCr+OBruODq+ODvOODq+OCkui1sOOCieOBm+e2muOBkeOCi+OBn+OCgeOBruOCguOBruOAglxuICAgICAgICB2aW9sYXRpb25zLnB1c2goZW5naW5lRXJyb3JWaW9sYXRpb24oc3QsIGUpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGQgb2YgKHJlcG9ydC5kaWFnbm9zdGljcyA/PyBbXSkgYXMgRW5naW5lRGlhZ25vc3RpY1tdKSB7XG4gICAgICAgIGNvbnN0IGlzT3VycyA9IGQuc291cmNlID09PSAnQ1VTVE9NJyAmJiBvdXJzLmhhcyhkLnJ1bGVJZCk7XG4gICAgICAgIGNvbnN0IGlzU3RyaWN0SGl0ID0gdGhpcy5zdHJpY3RcbiAgICAgICAgICAmJiBkLnNvdXJjZSAhPT0gJ0NVU1RPTSdcbiAgICAgICAgICAmJiAoZC5zZXZlcml0eSA9PT0gJ0VSUk9SJyB8fCBkLnNldmVyaXR5ID09PSAnRkFUQUwnKTtcbiAgICAgICAgaWYgKCFpc091cnMgJiYgIWlzU3RyaWN0SGl0KSBjb250aW51ZTtcbiAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICBydWxlTmFtZTogZC5ydWxlSWQsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGQubWVzc2FnZSxcbiAgICAgICAgICBzZXZlcml0eTogbWFwU2V2ZXJpdHkoZC5zZXZlcml0eSksXG4gICAgICAgICAgdmlvbGF0aW5nUmVzb3VyY2VzOiBbe1xuICAgICAgICAgICAgcmVzb3VyY2VMb2dpY2FsSWQ6IGQuZW50aXR5Py5sb2dpY2FsSWQgPz8gJyh1bmtub3duKScsXG4gICAgICAgICAgICB0ZW1wbGF0ZVBhdGg6IHN0LnRlbXBsYXRlUGF0aCxcbiAgICAgICAgICAgIGxvY2F0aW9uczogW2QucHJvcGVydHlQYXRoID8/ICcodGVtcGxhdGUpJ10sXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgLi4uKGQuZG9jdW1lbnRhdGlvblVybCA/IHsgcnVsZU1ldGFkYXRhOiB7IERvY3VtZW50YXRpb25Vcmw6IGQuZG9jdW1lbnRhdGlvblVybCB9IH0gOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENESyDntYTjgb/ovrzjgb/jga4gQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgajlkIzjgZjliKTlrprjgIJ3YXJuaW5nIOOBoOOBkeOBquOCiVxuICAgIC8vIOODrOODneODvOODiOOBq+OBr+i8ieOCi+OBjOWQiOaIkOOBr+mAmuOCi++8iENMSSDlgbTjga8gc3VjY2Vzcy9mYWlsdXJlIOOBq+mWouOCj+OCieOBmuW/heOBmuWHuuWKm+OBmeOCi++8ieOAglxuICAgIHJldHVybiB7IHN1Y2Nlc3M6IHZpb2xhdGlvbnMuZXZlcnkoKHYpID0+ICFCTE9DS1NfU1lOVEguaGFzKFN0cmluZyh2LnNldmVyaXR5KSkpLCB2aW9sYXRpb25zIH07XG4gIH1cbn1cblxuLyoqIOWQiOaIkOOCkuatouOCgeOCiyB2aW9sYXRpb24gc2V2ZXJpdHnjgIIgKi9cbmNvbnN0IEJMT0NLU19TWU5USCA9IG5ldyBTZXQoWydlcnJvcicsICdmYXRhbCddKTtcblxuLyoqXG4gKiDjgqjjg7Pjgrjjg7Pjga4gc2V2ZXJpdHkg44KSIHBvbGljeSB2YWxpZGF0aW9uIOOBriBzZXZlcml0eSDjgavlhpnjgZnjgILooajjga8gYXdzLWNkay1saWIgMi4yNjcuMCDjga5cbiAqIENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4g44Go5ZCM5LiA44CCYHJlcHJvLm1ldGhvZDogZG9jLW9ubHlgIOOBruODq+ODvOODq+OBryBXQVJOIOOCkuWHuuOBmeOBruOBp1xuICogd2FybmluZyDjgavjgarjgorjgIHloLHlkYrjga/jgZXjgozjgovjgYwgc3ludGgg44Gv5q2i44KB44Gq44GE77yI6Ki85oug44GM5a6f5qmf44Gu44OH44OX44Ot44Kk5aSx5pWX44Gn44Gv44Gq44GE44Gf44KB77yJ44CCXG4gKi9cbmZ1bmN0aW9uIG1hcFNldmVyaXR5KHNldmVyaXR5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHNldmVyaXR5KSB7XG4gICAgY2FzZSAnRkFUQUwnOlxuICAgIGNhc2UgJ0VSUk9SJzpcbiAgICAgIHJldHVybiAnZXJyb3InO1xuICAgIGNhc2UgJ1dBUk4nOlxuICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgICBjYXNlICdJTkZPJzpcbiAgICAgIHJldHVybiAnaW5mb3JtYXRpb25hbCc7XG4gICAgY2FzZSAnREVCVUcnOlxuICAgICAgcmV0dXJuICdkZWJ1Zyc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnd2FybmluZyc7XG4gIH1cbn1cblxuLyoqXG4gKiDjg6vjg7zjg6voqZXkvqHjgZ3jga7jgoLjga7jgYzlpLHmlZfjgZfjgZ/jgZPjgajjgpLooajjgZkgdmlvbGF0aW9uIOOBriBydWxlTmFtZeOAglxuICog44OQ44Oz44OJ44Or5riI44G/44Or44O844Or44GuIGlkIOOBp+OBr+OBquOBhOOBruOBpyBgZXhjbHVkZWAg44Gn44Gv5raI44Gb44Gq44GE77yI5raI44GX44Gm44KI44GE54q25oWL44Gn44Gv44Gq44GE77yJ44CCXG4gKi9cbmV4cG9ydCBjb25zdCBFTkdJTkVfRVJST1JfUlVMRSA9ICdwZi1lbmdpbmUtZXJyb3InO1xuXG4vKiog44Ko44Oz44K444Oz44GM5oqV44GS44Gf5YCk44KS44Oh44OD44K744O844K444Gr6JC944Go44GZ44CC44Ko44Oz44K444Oz44GvIEVycm9yIOOBp+OBr+OBquOBj+e0oOOBruaWh+Wtl+WIl+OCkuaKleOBkuOCi+OBk+OBqOOBjOOBguOCi+OAgiAqL1xuZnVuY3Rpb24gZW5naW5lRXJyb3JUZXh0KGU6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBtZXNzYWdlID0gKGUgYXMgeyBtZXNzYWdlPzogdW5rbm93biB9IHwgdW5kZWZpbmVkKT8ubWVzc2FnZTtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmxlbmd0aCA+IDAgPyBtZXNzYWdlIDogU3RyaW5nKGUpO1xufVxuXG4vKiogMSDmnprjga7jg4bjg7Pjg5fjg6zjg7zjg4jjgpLmpJzmn7vjgafjgY3jgarjgYvjgaPjgZ/jgZPjgajjgpIgdmlvbGF0aW9uIOOBqOOBl+OBpuWgseWRiuOBmeOCi+OAgiAqL1xuZnVuY3Rpb24gZW5naW5lRXJyb3JWaW9sYXRpb24oc3Q6IHsgc3RhY2tDb25zdHJ1Y3RQYXRoOiBzdHJpbmc7IHRlbXBsYXRlUGF0aDogc3RyaW5nIH0sIGU6IHVua25vd24pOiBQb2xpY3lWaW9sYXRpb24ge1xuICByZXR1cm4ge1xuICAgIHJ1bGVOYW1lOiBFTkdJTkVfRVJST1JfUlVMRSxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdjZGstcHJlZmxpZ2h0IGNvdWxkIG5vdCBldmFsdWF0ZSBpdHMgcnVsZXMgZm9yIHRoaXMgdGVtcGxhdGUsIHNvIG5vIHByZWZsaWdodCBydWxlIHJhbiBmb3IgaXQ6ICdcbiAgICAgICsgZW5naW5lRXJyb3JUZXh0KGUpLFxuICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgIGZpeDogJ1JlcG9ydCB0aGlzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9iYWRtaW50b25jcnllci9jZGstcHJlZmxpZ2h0L2lzc3VlczsgJ1xuICAgICAgKyAndG8gdW5ibG9jayB0aGUgYnVpbGQgbWVhbndoaWxlLCB1c2UgUHJlZmxpZ2h0LmFwcGx5KGFwcCwgeyBlbmZvcmNlOiBmYWxzZSB9KS4nLFxuICAgIHZpb2xhdGluZ1Jlc291cmNlczogW3tcbiAgICAgIGNvbnN0cnVjdFBhdGg6IHN0LnN0YWNrQ29uc3RydWN0UGF0aCxcbiAgICAgIHRlbXBsYXRlUGF0aDogc3QudGVtcGxhdGVQYXRoLFxuICAgICAgbG9jYXRpb25zOiBbJyh0ZW1wbGF0ZSknXSxcbiAgICB9XSxcbiAgfTtcbn1cblxuLyoqIFRoZSBwbHVnaW4gbmFtZSByZWNvcmRlZCBpbiBgdmFsaWRhdGlvbi1yZXBvcnQuanNvbmAgZm9yIG91ciBmaW5kaW5ncy4gKi9cbmV4cG9ydCBjb25zdCBQTFVHSU5fTkFNRSA9ICdjZGstcHJlZmxpZ2h0JztcblxuLyoqIFRoZSBjbG91ZCBhc3NlbWJseSBmaWxlIHRoZSBDREsgd3JpdGVzIGl0cyB2YWxpZGF0aW9uIHJlcG9ydCB0by4gKi9cbmNvbnN0IFZBTElEQVRJT05fUkVQT1JUX0ZJTEUgPSAndmFsaWRhdGlvbi1yZXBvcnQuanNvbic7XG5cbmNvbnN0IEdBVEVfSU5TVEFMTEVEID0gU3ltYm9sLmZvcignY2RrLXByZWZsaWdodC5lbmZvcmNlR2F0ZScpO1xuXG4vKipcbiAqIGVuZm9yY2Ug44Oi44O844OJ44Gu5Y+W44KK44GT44G844GX44KS5aGe44GQ44Ky44O844OI44KSIEFwcCDjgavku5XovrzjgoDjgIJcbiAqXG4gKiBDREsgQ0xJIDIuMTEyOC4xIOS7pemZjeOBryBhcHAg44Gr44CM44Os44Od44O844OI44GvIENMSSDjgYzlh6bnkIbjgZnjgovjgI3jgajkvJ3jgYjjgZ/jgYbjgYjjgadcbiAqIGB2YWxpZGF0aW9uLXJlcG9ydC5qc29uYCDjgpLoh6rliIbjgafoqq3jgoDjgYzjgIHjgZ3jga7ntZ7jgorovrzjgb/vvIh0b29sa2l0LWxpYiDjga5cbiAqIGBmaWx0ZXJSZXBvcnRzQnlTdGFja3Ng77yJ44GMIHZpb2xhdGlvbiDjga4gY29uc3RydWN0UGF0aCDlhYjpoK3jgrvjgrDjg6Hjg7Pjg4jjgpJcbiAqIOmBuOaKnuOCueOCv+ODg+OCr+OBriBoaWVyYXJjaGljYWxJZCDjgajnqoHjgY3lkIjjgo/jgZvjgovjgZ/jgoHjgIFgU3RhZ2UvU3RhY2tgIOW9ouW8j+OBq+OBquOCi1xuICogU3RhZ2Ug5YaF44K544K/44OD44Kv44Gu6YGV5Y+N44GM44GZ44G544Gm5o2o44Gm44KJ44KM44CBc3ludGgg44GM6buZ44Gj44Gm5oiQ5Yqf44GZ44KL77yIaXNzdWUgIzExM++8ieOAglxuICpcbiAqIOOBneOBk+OBpyBzeW50aCDlrozkuoblvozjgavjg6zjg53jg7zjg4jjgpLoqq3jgb/nm7TjgZfjgIFjZGstcHJlZmxpZ2h0IOOBrumBleWPjeOBjOaui+OBo+OBpuOBhOOCjOOBsFxuICog6Ieq5YiG44Gn5aCx5ZGK44GX44GmIHN5bnRoIOOCkuatouOCgeOCi+OAguODqeOCpOODluODqeODquOBjOiHquWKm+OBp+WgseWRiuOBmeOCi+e1jOi3r++8iOe0oOOBriBub2RlIOWun+ihjOOAgVxuICogamVzdOOAgUNMSSAyLjExMjguMSDmnKrmuoDvvInjgafjga8gc3ludGgg44GM5L6L5aSW44KS5oqV44GS44KL44Gf44KB44GT44GT44Gr44Gv5Yiw6YGU44Gb44Ga44CBXG4gKiDkuozph43loLHlkYrjga/otbfjgY3jgarjgYTjgIJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxFbmZvcmNlR2F0ZShzY29wZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICBjb25zdCByb290ID0gc2NvcGUubm9kZS5yb290O1xuICBpZiAoIUFwcC5pc0FwcChyb290KSkgcmV0dXJuO1xuICBjb25zdCBhcHAgPSByb290IGFzIEFwcCAmIHsgW0dBVEVfSU5TVEFMTEVEXT86IGJvb2xlYW4gfTtcbiAgaWYgKGFwcFtHQVRFX0lOU1RBTExFRF0pIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwcCwgR0FURV9JTlNUQUxMRUQsIHsgdmFsdWU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlIH0pO1xuXG4gIGNvbnN0IHN5bnRoID0gYXBwLnN5bnRoLmJpbmQoYXBwKTtcbiAgbGV0IGNoZWNrZWQgPSBmYWxzZTtcbiAgYXBwLnN5bnRoID0gKG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEFwcFsnc3ludGgnXT5bMF0pID0+IHtcbiAgICBjb25zdCBhc3NlbWJseSA9IHN5bnRoKG9wdGlvbnMpO1xuICAgIGlmICghY2hlY2tlZCkge1xuICAgICAgY2hlY2tlZCA9IHRydWU7XG4gICAgICBmYWlsSWZSZXBvcnRVbmhhbmRsZWQoYXNzZW1ibHkuZGlyZWN0b3J5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc2VtYmx5O1xuICB9O1xufVxuXG4vKipcbiAqIOODrOODneODvOODiOOBqyBjZGstcHJlZmxpZ2h0IOOBruWkseaVl+OBjOaui+OBo+OBpuOBhOOCjOOBsOOAgWZpbmRpbmdzIOOCkuWHuuWKm+OBl+OBpiBzeW50aCDjgpLmraLjgoHjgovjgIJcbiAqXG4gKiDliKTlrprjga8gY2RrLXByZWZsaWdodCDjga7jg6zjg53jg7zjg4jjgaDjgZHjgpLopovjgovjgILntYTjgb/ovrzjgb/jgqjjg7Pjgrjjg7PjgoQgY29uc3RydWN0IGFubm90YXRpb25cbiAqIOOBoOOBkeOBjOWkseaVl+OBl+OBpuOBhOOCi+WgtOWQiOOBryBDTEkg44GM5q2j44GX44GP5omx44GI44KL44Gu44Gn44CB44GT44Gh44KJ44Gv6buZ44Gj44GmIENMSSDjgavku7vjgZvjgovjgIJcbiAqIOmAhuOBq+eZuueBq+OBmeOCi+OBqOOBjeOBr+ODrOODneODvOODiOWFqOS9k+OCkuWHuuOBmeOAguOBk+OBk+OBpyBzeW50aCDjgpLmraLjgoHjgovjgaggQ0xJIOWBtOOBruWHuuWKm+OBjFxuICog5LiA5YiH6LWw44KJ44Gq44GE44Gf44KB44CB5ZCM5pmC44Gr5Ye644Gm44GE44Gf44Gv44Ga44Gu5LuW44OX44Op44Kw44Kk44Oz44GuIGZpbmRpbmcg44GM5raI44GI44Gm44GX44G+44GG44CCXG4gKi9cbmZ1bmN0aW9uIGZhaWxJZlJlcG9ydFVuaGFuZGxlZChkaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBsZXQgcGx1Z2luUmVwb3J0czogYW55W107XG4gIHRyeSB7XG4gICAgY29uc3QgcmVwb3J0ID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKGRpcmVjdG9yeSwgVkFMSURBVElPTl9SRVBPUlRfRklMRSksICd1dGY4JykpO1xuICAgIHBsdWdpblJlcG9ydHMgPSByZXBvcnQ/LnBsdWdpblJlcG9ydHMgPz8gW107XG4gIH0gY2F0Y2gge1xuICAgIC8vIOODrOODneODvOODiOOBjOeEoeOBhO+8iOODl+ODqeOCsOOCpOODs+acquWun+ihjO+8ieOBvuOBn+OBr+WjiuOCjOOBpuOBhOOCi+WgtOWQiOOBr+S9leOCguOBl+OBquOBhFxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmYWlsZWQgPSBwbHVnaW5SZXBvcnRzLnNvbWUoXG4gICAgKHIpID0+IHI/LnBsdWdpbk5hbWUgPT09IFBMVUdJTl9OQU1FICYmIHI/LmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyxcbiAgKTtcbiAgaWYgKCFmYWlsZWQpIHJldHVybjtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmVycm9yKGZvcm1hdFJlcG9ydHMocGx1Z2luUmVwb3J0cykpO1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ2Nkay1wcmVmbGlnaHQ6IHZhbGlkYXRpb24gZmFpbGVkLiBGaXggdGhlIGZpbmRpbmdzIGFib3ZlLCAnICtcbiAgICBcImFja25vd2xlZGdlIHRoZW0gd2l0aCBWYWxpZGF0aW9ucy5vZihzY29wZSkuYWNrbm93bGVkZ2UoeyBpZDogJ2Nkay1wcmVmbGlnaHQ6OjxydWxlLWlkPicgfSksIFwiICtcbiAgICAnb3IgZXhjbHVkZSB0aGUgcnVsZSB2aWEgUHJlZmxpZ2h0LmFwcGx5KGFwcCwgeyBleGNsdWRlOiBbLi4uXSB9KS4nLFxuICApO1xufVxuXG4vKipcbiAqIENESyDmnKzkvZPjga7jg5Xjgqnjg7zjg57jg4Pjgr/jgafmlbTlvaLjgZfjgIFDTEkg44Go5ZCM5LiA44Gu6KaL44Gf55uu44Gr44GZ44KL44CCXG4gKiDnp4HmnInjg5Hjgrnjgarjga7jgafop6PmsbrjgafjgY3jgarjgYTjgZPjgajjgYzjgYLjgorjgIHjgZ3jga7loLTlkIjjga/mnIDlsI/pmZDjga7oh6rliY3mlbTlvaLjgavokL3jgajjgZlcbiAqIO+8iOimi+OBn+ebruOCiOOCiuOAjOiQveOBqOOBmeOAjeOBk+OBqOOCkuWEquWFiOOBmeOCi++8ieOAglxuICovXG5mdW5jdGlvbiBmb3JtYXRSZXBvcnRzKHBsdWdpblJlcG9ydHM6IGFueVtdKTogc3RyaW5nIHtcbiAgY29uc3QgZm9ybWF0dGVyID0gbG9hZEZvcm1hdHRlckNhY2hlZCgpO1xuICBpZiAoZm9ybWF0dGVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0VmFsaWRhdGlvblJlcG9ydHMocHJvY2Vzcy5jd2QoKSwgcGx1Z2luUmVwb3J0cykuam9pbignXFxuXFxuJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBmYWxsIHRocm91Z2hcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbGxiYWNrRm9ybWF0KHBsdWdpblJlcG9ydHMpO1xufVxuXG4vKipcbiAqIENESyDmnKzkvZPjga7jg5Xjgqnjg7zjg57jg4Pjgr/jgpLop6PmsbrjgafjgY3jgarjgYTjgajjgY3jga7mnIDlsI/pmZDjga7mlbTlvaLjgIJcbiAqIOimi+OBn+ebruOBr+WKo+OCi+OBjOOAgWZpbmRpbmdzIOOCkuW/heOBmuiqreOCgeOCi+W9ouOBp+WHuuOBmeOBn+OCgeOBruacgOW+jOOBruegpuOAglxuICog77yI44OG44K544OI44GL44KJ44KC5Yip55So44GZ44KL44Gf44KBIGV4cG9ydCDjgZfjgabjgYTjgovvvIlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZhbGxiYWNrRm9ybWF0KHBsdWdpblJlcG9ydHM6IGFueVtdKTogc3RyaW5nIHtcbiAgY29uc3QgYmxvY2tzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJlcG9ydCBvZiBwbHVnaW5SZXBvcnRzKSB7XG4gICAgZm9yIChjb25zdCB2aW9sYXRpb24gb2YgcmVwb3J0Py52aW9sYXRpb25zID8/IFtdKSB7XG4gICAgICBjb25zdCBhY2tJZCA9IFN0cmluZyh2aW9sYXRpb24ucnVsZU5hbWUpLmluY2x1ZGVzKCc6OicpXG4gICAgICAgID8gdmlvbGF0aW9uLnJ1bGVOYW1lXG4gICAgICAgIDogYCR7cmVwb3J0LnBsdWdpbk5hbWV9Ojoke3Zpb2xhdGlvbi5ydWxlTmFtZX1gO1xuICAgICAgZm9yIChjb25zdCBjIG9mIHZpb2xhdGlvbi52aW9sYXRpbmdDb25zdHJ1Y3RzID8/IFtdKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKFxuICAgICAgICAgIGAke1N0cmluZyh2aW9sYXRpb24uc2V2ZXJpdHkgPz8gJ0VSUk9SJykudG9VcHBlckNhc2UoKX0gJHt2aW9sYXRpb24uZGVzY3JpcHRpb259ICgke3JlcG9ydC5wbHVnaW5OYW1lfSlcXG5gICtcbiAgICAgICAgICBgICAgJHtjLmNvbnN0cnVjdFBhdGh9ICgke2MuY2xvdWRGb3JtYXRpb25SZXNvdXJjZT8ubG9naWNhbElkfSkgJHtjLmNvbnN0cnVjdEZxbn1cXG5gICtcbiAgICAgICAgICBgICAgQWNrbm93bGVkZ2Ugd2l0aCAnJHtTdHJpbmcoYWNrSWQpLnJlcGxhY2UoLyAvZywgJy0nKX0nYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJsb2Nrcy5qb2luKCdcXG5cXG4nKTtcbn1cblxuLy8g44OV44Kp44O844Oe44OD44K/44GvIGF3cy1jZGstbGliIOOBruengeacieODkeOCueOBq+OBguOCiiBgZXhwb3J0c2Ag44GL44KJ6KaL44GI44Gq44GE44Gf44KB44CBXG4vLyDjgqjjg7Pjgrjjg7Pop6PmsbrvvIhsb2FkRW5naW5l77yJ44Go5ZCM44GY44GP44OR44OD44Kx44O844K444Or44O844OI44GL44KJ44Gu57W25a++44OR44K544Gn6Kqt44G/6L6844KA44CCXG5sZXQgY2FjaGVkRm9ybWF0dGVyOiBhbnkgfCBmYWxzZSB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGxvYWRGb3JtYXR0ZXJDYWNoZWQoKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNhY2hlZEZvcm1hdHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGVkRm9ybWF0dGVyID0gbG9hZEZvcm1hdHRlcigpID8/IGZhbHNlO1xuICB9XG4gIHJldHVybiBjYWNoZWRGb3JtYXR0ZXIgPT09IGZhbHNlID8gdW5kZWZpbmVkIDogY2FjaGVkRm9ybWF0dGVyO1xufVxuXG4vKiog77yI44OG44K544OI44GL44KJ44KC5Yip55So44GZ44KL44Gf44KBIGV4cG9ydCDjgZfjgabjgYTjgovvvIkgKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRm9ybWF0dGVyKCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgbGliUm9vdCA9IHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoJ2F3cy1jZGstbGliL3BhY2thZ2UuanNvbicpKTtcbiAgICBjb25zdCBtb2QgPSByZXF1aXJlKHBhdGguam9pbihsaWJSb290LCAnY29yZS9saWIvdmFsaWRhdGlvbi9wcml2YXRlL21vZGVybi1mb3JtYXR0ZXIuanMnKSk7XG4gICAgcmV0dXJuIHR5cGVvZiBtb2Q/LmZvcm1hdFZhbGlkYXRpb25SZXBvcnRzID09PSAnZnVuY3Rpb24nID8gbW9kIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8vIOOCqOODs+OCuOODs++8iFdBU03vvInjga7liJ3mnJ/ljJbjga/ph43jgYTjgZ/jgoHjgIHjg6Ljgrjjg6Xjg7zjg6vjg6zjg5njg6vjgafjgq3jg6Pjg4Pjgrfjg6XjgZnjgotcbmxldCBjYWNoZWRFbmdpbmVNb2R1bGU6IGFueSB8IGZhbHNlIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gbG9hZEVuZ2luZUNhY2hlZCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICBpZiAoY2FjaGVkRW5naW5lTW9kdWxlID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZWRFbmdpbmVNb2R1bGUgPSBsb2FkRW5naW5lKCkgPz8gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZEVuZ2luZU1vZHVsZSA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBjYWNoZWRFbmdpbmVNb2R1bGU7XG59XG5cbi8vIOOCqOODs+OCuOODs++8iFdBU03vvInjga8gMSDjg5fjg63jgrvjgrnjgasgMSDjgaTjgaDjgZHnlJ/jgYvjgZnjgILkvZzjgornm7TjgZnliY3jgasgZnJlZSgpIOOBl+OBquOBhOOBqOOCpOODs+OCueOCv+ODs+OCueOBjFxuLy8g56mN44G/5LiK44GM44KK44CBMiDlgIvnm67ku6XpmY3jga7mp4vnr4njgYzotoXnt5rlvaLjgavpgYXjgY/jgarjgovvvIjlrp/muKw6IGZyZWUg54Sh44GX44GnIDMuOHMgLT4gMTEuMnMgLT4gMjIuMXPjgIFcbi8vIOani+evieWJjeOBqyBmcmVlIOOBmeOCi+OBqCAzLjVzIC0+IDAuNHPvvInjgILjg6vjg7zjg6vjgrvjg4Pjg4jjgYzlpInjgo/jgovvvIhTdGFnZSDjgZTjgajjgasgZXhjbHVkZSDjgYzpgZXjgYbjgIFcbi8vIOODhuOCueODiOOBp+ikh+aVsOOCouODl+ODquOCkuWQiOaIkOOBmeOCi++8ieOBn+OBs+OBq+S9nOOCiuebtOOBmeOBruOBp+OAgeOCreODo+ODg+OCt+ODpeOBryAxIOOCueODreODg+ODiOOBp+i2s+OCiuOCi+OAglxubGV0IGNhY2hlZFJlZ29FbmdpbmU6IHsga2V5OiBzdHJpbmc7IGVuZ2luZTogYW55IH0gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiByZWdvRW5naW5lQ2FjaGVkKGVuZ2luZU1vZHVsZTogYW55LCBydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sIHJlZ2lvbj86IHN0cmluZywgYWNjb3VudD86IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IGtleSA9IGAke3JlZ2lvbiA/PyAnJ318JHthY2NvdW50ID8/ICcnfXwke3J1bGVzLm1hcCgocikgPT4gci5pZCkuam9pbignLCcpfWA7XG4gIGlmIChjYWNoZWRSZWdvRW5naW5lPy5rZXkgIT09IGtleSkge1xuICAgIGNhY2hlZFJlZ29FbmdpbmU/LmVuZ2luZT8uZnJlZT8uKCk7XG4gICAgY2FjaGVkUmVnb0VuZ2luZSA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjdXN0b21SdWxlcyA9IFtcbiAgICAgIC4uLkJVTkRMRURfTElCUy5tYXAoKGwpID0+ICh7IG5hbWU6IGwubmFtZSwgY29udGVudDogbC5yZWdvIH0pKSxcbiAgICAgIC4uLm1lcmdlUnVsZU1vZHVsZXMocnVsZXMpLFxuICAgIF07XG4gICAgaWYgKHJlZ2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdXN0b21SdWxlcy5wdXNoKGRlcGxveUVudmlyb25tZW50TW9kdWxlKHJlZ2lvbiwgYWNjb3VudCkpO1xuICAgIH1cbiAgICBjYWNoZWRSZWdvRW5naW5lID0geyBrZXksIGVuZ2luZTogbmV3IGVuZ2luZU1vZHVsZS5SZWdvRW5naW5lKHsgY3VzdG9tUnVsZXMgfSkgfTtcbiAgfVxuICByZXR1cm4gY2FjaGVkUmVnb0VuZ2luZS5lbmdpbmU7XG59XG5cbi8vIOims+a4rOODouODvOODie+8iGVuZm9yY2U6IGZhbHNl77yJ44GvIENESyDntYTjgb/ovrzjgb/jga4gQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgavnm7jkuZfjgorjgZnjgovjgIJcbi8vIOOBguOBoeOCieOBr+OCs+ODs+OCueODiOODqeOCr+OCv+OBp+OCqOODs+OCuOODs+OCkiAxIOOBpOS9nOOBo+OBpiBmcmVlKCkg44GX44Gq44GE44Gu44Gn44CB5ZCM44GY44OX44Ot44K744K544GnIEFwcCDjgpJcbi8vIOS9nOOCiuebtOOBmeOBn+OBs+OBq+OCpOODs+OCueOCv+ODs+OCueOBjOepjeOBv+S4iuOBjOOCiuOAgXJlZ29FbmdpbmVDYWNoZWQg44Go5ZCM44GY6LaF57ea5b2i44Gu5oKq5YyW44KS6LW344GT44GZXG4vLyDvvIjlrp/muKwgMjAyNi0wOS0xMzog5ZCM44GY44Or44O844Or44K744OD44OI44GnIDQg5ZueIHN5bnRoIOOBl+OBpiAzNnMgLT4gOTVzIC0+IDEzMXMgLT4gMTc4c++8ieOAglxuLy8g44Or44O844Or44K744OD44OI44GM5aSJ44KP44KJ44Gq44GE6ZmQ44KK44OX44Op44Kw44Kk44Oz44GU44Go5L2/44GE5Zue44GZ44CCXG4vLyBwb255dGFpbDog44Kt44O844GM5aSJ44KP44Gj44Gf44Go44GN44Gr5Y+k44GE44Ko44Oz44K444Oz44GvIGZyZWUoKSDjgZfjgarjgYTvvIjjgqjjg7Pjgrjjg7Pjga8gQ0RLIOWBtOOBrlxuLy8gcHJpdmF0ZSDjg5XjgqPjg7zjg6vjg4njgafjgIHop6bjgovjgavjga/lhoXpg6jlrp/oo4XjgavmiYvjgpLlhaXjgozjgovjgZPjgajjgavjgarjgovvvInjgILoqK3lrprpgZXjgYTjga4gU3RhZ2Ug44GMXG4vLyBOIOWAi+OBguOCjOOBsCBOIOWAi+epjeOCgOOBjOOAgeWun+OCouODl+ODquOBp+OBryAx44CcMiDlgIvjgILnqY3jgb/kuIrjgYzjgorjgYzllY/poYzjgavjgarjgovjgarjgonjgIHjgZ3jga7jgajjgY3jgatcbi8vIOOCouODg+ODl+OCueODiOODquODvOODoOOBuCBmcmVlL2Rpc3Bvc2Ug44KS5YWl44KM44Gm44KC44KJ44GG44CCXG5sZXQgY2FjaGVkT2JzZXJ2ZVBsdWdpbjogeyBrZXk6IHN0cmluZzsgcGx1Z2luOiBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIH0gfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVBsdWdpbkNhY2hlZChydWxlczogQnVuZGxlZFJ1bGVEYXRhW10pOiBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIHtcbiAgY29uc3Qga2V5ID0gcnVsZXMubWFwKChyKSA9PiByLmlkKS5qb2luKCcsJyk7XG4gIGlmIChjYWNoZWRPYnNlcnZlUGx1Z2luPy5rZXkgIT09IGtleSkge1xuICAgIGNhY2hlZE9ic2VydmVQbHVnaW4gPSB7XG4gICAgICBrZXksXG4gICAgICBwbHVnaW46IG5ldyBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luKHtcbiAgICAgICAgcmVnb1J1bGVzOiBbXG4gICAgICAgICAgLi4uQlVORExFRF9MSUJTLm1hcCgobCkgPT4gKHsgbmFtZTogbC5uYW1lLCBjb250ZW50OiBsLnJlZ28gfSkpLFxuICAgICAgICAgIC4uLm1lcmdlUnVsZU1vZHVsZXMocnVsZXMpLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gY2FjaGVkT2JzZXJ2ZVBsdWdpbi5wbHVnaW47XG59XG5cbi8qKiDlhajjg6vjg7zjg6vjgavlhbHpgJrjga4gcmVnbyDjg5jjg4Pjg4DjgIJidW5kbGUtcnVsZXMg44GMIHBhY2thZ2Ug5ZCN44GoIGltcG9ydCDjgpIgMSDnqK7poZ7jgavlvLfliLbjgZfjgabjgYTjgovjgIIgKi9cbmNvbnN0IFJFR09fSEVBREVSID0gJ3BhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuJztcblxuLyoqXG4gKiDjg6vjg7zjg6vjgpIgc2VydmljZSDjgZTjgajjgasgMSDjg6Ljgrjjg6Xjg7zjg6vjgbjjgb7jgajjgoHjgovjgIJcbiAqXG4gKiDjgrPjg7Pjg5HjgqTjg6vmmYLplpPjga/jg6vjg7zjg6vmnKzkvZPjga7ph4/jgojjgorjg6Ljgrjjg6Xjg7zjg6vmlbDjgaflirnjgYTjgabjgY/jgovvvIjlrp/muKwgMTg0NCDjg6vjg7zjg6vjgpJcbiAqIDEg44Or44O844OrIDEg44Oi44K444Ol44O844Or44Gn6LyJ44Gb44KL44Go57SEIDYuMnPjgIFzZXJ2aWNlIOWNmOS9jeOBriAzOSDjg6Ljgrjjg6Xjg7zjg6vjgavnlbPjgoDjgajntIQgMS4wc++8ieOAglxuICog44Or44O844Or44Gv44KC44Go44KC44Go5YWo6YOoIGBwYWNrYWdlIGNka19wcmVmbGlnaHRgIOOBquOBruOBp+OAgVJlZ28g44GL44KJ6KaL44KM44Gw57WQ5ZCI44GX44Gm44KCXG4gKiDjgZfjgarjgY/jgabjgoLlkIzjgZggMSDjg5Hjg4PjgrHjg7zjgrjigJTigJTjg6Ljgrjjg6Xjg7zjg6vlooPnlYzjgavmhI/lkbPoq5bjga/nhKHjgYTjgILjgZfjgZ/jgYzjgaPjgabnlbPjgoHjgovjga7jgaDjgYzjgIFcbiAqIOijj+OCkui/lOOBm+OBsOOAjOWIpeODq+ODvOODq+OBjOWQjOOBmOWQjeWJjeOBruODmOODq+ODkeODvOOCkuWumue+qeOBmeOCi+OBqOm7meOBo+OBpiAxIOOBpOOBruimj+WJh+OBq+WQiOa1geOBmeOCi+OAjVxuICog44Go44GE44GG5Y2x6Zm644KC57WQ5ZCI5YmN44GL44KJ5a2Y5Zyo44GZ44KL44CCYnVuZGxlLXJ1bGVzIOOBjOODq+ODvOODq+mWk+OBruODiOODg+ODl+ODrOODmeODq+WQjeihneeqgeOCklxuICog5by+44GE44Gm44GE44KL44Gu44Gv44Gd44Gu44Gf44KB77yI5YWx5pyJ44GX44Gf44GE5a6a576p44GvIHJ1bGVzL19saWIvIOOBq+e9ruOBj++8ieOAglxuICog77yI44OG44K544OI44GL44KJ44KC5Yip55So44GZ44KL44Gf44KBIGV4cG9ydCDjgZfjgabjgYTjgovvvIlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlUnVsZU1vZHVsZXMocnVsZXM6IEJ1bmRsZWRSdWxlRGF0YVtdKTogeyBuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9W10ge1xuICBjb25zdCBieVNlcnZpY2UgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIGZvciAoY29uc3QgciBvZiBydWxlcykge1xuICAgIGNvbnN0IGJvZHkgPSByLnJlZ28ucmVwbGFjZSgvXig/OnBhY2thZ2V8aW1wb3J0KVxccy4qXFxuL2dtLCAnJyk7XG4gICAgYnlTZXJ2aWNlLnNldChyLnNlcnZpY2UsIFsuLi5ieVNlcnZpY2UuZ2V0KHIuc2VydmljZSkgPz8gW10sIGJvZHldKTtcbiAgfVxuICByZXR1cm4gWy4uLmJ5U2VydmljZV0ubWFwKChbc2VydmljZSwgYm9kaWVzXSkgPT4gKHtcbiAgICBuYW1lOiBgX3BmX3NlcnZpY2VfJHtzZXJ2aWNlfWAsXG4gICAgY29udGVudDogUkVHT19IRUFERVIgKyBib2RpZXMuam9pbignXFxuJyksXG4gIH0pKTtcbn1cblxuLyoqXG4gKiDjg4bjg7Pjg5fjg6zjg7zjg4jnvqTjgavlh7rjgabjgY/jgovjg6rjgr3jg7zjgrnjgr/jgqTjg5fjgILliIjjgorovrzjgb/jgavkvb/jgYjjgarjgYTjg4bjg7Pjg5fjg6zjg7zjg4jjgYwgMSDmnprjgafjgoLjgYLjgozjgbBcbiAqIHVuZGVmaW5lZCDjgpLov5TjgZfjgIHliIjjgorovrzjgb/jgZ3jga7jgoLjga7jgpLoq6bjgoHjgovvvIjkvZXjgYzovInjgaPjgabjgYTjgovjgYvliIbjgYvjgonjgarjgYTjgb7jgb7okL3jgajjgZnjgajjgIFcbiAqIOODq+ODvOODq+OBjOm7meOBo+OBpueZuueBq+OBl+OBquOBj+OBquOCiyA9IGVuZm9yY2Ug44Gr44Go44Gj44Gm5pyA5oKq44Gu5aOK44KM5pa544Gr44Gq44KL44Gf44KB77yJ44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVSZXNvdXJjZVR5cGVzKHRlbXBsYXRlUGF0aHM6IHN0cmluZ1tdKTogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHRlbXBsYXRlUGF0aCBvZiB0ZW1wbGF0ZVBhdGhzKSB7XG4gICAgbGV0IHRlbXBsYXRlOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHRlbXBsYXRlID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoLCAndXRmOCcpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8vIFRyYW5zZm9ybe+8iFNBTSDnrYnvvInjga/jg57jgq/jg63lsZXplovjgafliKXjga7jg6rjgr3jg7zjgrnjgavljJbjgZHjgovjga7jgafjgIHnlJ/jga7jg4bjg7Pjg5fjg6zjg7zjg4jjgYvjgolcbiAgICAvLyDoqq3jgoHjgovjg6rjgr3jg7zjgrnjgr/jgqTjg5fjga/lvZPjgabjgavjgarjgonjgarjgYTjgIJcbiAgICBpZiAodGVtcGxhdGU/LlRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgT2JqZWN0LnZhbHVlcyh0ZW1wbGF0ZT8uUmVzb3VyY2VzID8/IHt9KSBhcyBhbnlbXSkge1xuICAgICAgLy8gRm46OkZvckVhY2gg44Gq44Gp44GnIFR5cGUg44GM6Z2Z55qE44Gr6Kqt44KB44Gq44GE44Ko44Oz44OI44Oq44GM44GC44KM44Gw6Kum44KB44KL44CCXG4gICAgICBpZiAodHlwZW9mIHJlc291cmNlPy5UeXBlICE9PSAnc3RyaW5nJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIHR5cGVzLmFkZChyZXNvdXJjZS5UeXBlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHR5cGVzO1xufVxuXG4vKipcbiAqIOODhuODs+ODl+ODrOODvOODiOOBq+WHuuOBpuOBj+OCi+ODquOCveODvOOCueOCv+OCpOODl+OBq+mWouS/guOBmeOCi+ODq+ODvOODq+OBoOOBkeOCkumBuOOBtuOAglxuICpcbiAqIOOCqOODs+OCuOODs+OBruOCs+ODs+ODkeOCpOODq+aZgumWk+OBr+ODq+ODvOODq+aVsOOBp+OBu+OBvOaxuuOBvuOCi+OBruOBp++8iOWun+a4rCAxODQ0IOODq+ODvOODq+OBp+e0hCA0LjZz44CBXG4gKiDlhbjlnovnmoTjgarjgqLjg5fjg6rjgavmrovjgosgMTAwIOODq+ODvOODq+WJjeW+jOOBquOCiSAwLjhzIOWJjeW+jO+8ieOAgeOBk+OCjOOBjOWbuuWumuiyu+OBruS4u+OBquWJiuOCiuOBqeOBk+OCjeOAglxuICog5a6J5YWo5oCn44GvIG1ldGEucmVzb3VyY2VUeXBlcyDjga7lrqPoqIDjgavkuZfjgaPjgabjgYTjgos6IOODq+ODvOODq+OBjOimi+OCi+ODquOCveODvOOCueOCv+OCpOODl+OBjFxuICog5a6j6KiA44GL44KJ5ryP44KM44Gm44GE44KL44Go5YiI44KJ44KM44Gm55m654Gr44GX44Gq44GP44Gq44KL44Gf44KB44CBdGVzdC9ydWxlcy50ZXN0LnRzIOOBjOWFqOODq+ODvOODq+OBq+OBpOOBhOOBplxuICog44CM6Ieq5YiG44GuIGZhaWwg44OG44Oz44OX44Os44O844OI44Gn5YiI44KK5q6L44KL44GT44Go44CN44KS5qSc5p+744GX44Gm44GE44KL44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUocnVsZXM6IEJ1bmRsZWRSdWxlRGF0YVtdLCB0eXBlczogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQpOiBCdW5kbGVkUnVsZURhdGFbXSB7XG4gIGlmICh0eXBlcyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcnVsZXM7XG4gIC8vIOWIiOOCi+agueaLoOOBjOeEoeOBhOODq+ODvOODq+OBr+aui+OBmTogXCIqXCLvvIjlhajjg6rjgr3jg7zjgrnlnovjgavlirnjgY/jgr/jgrDns7vjg6vjg7zjg6vvvInjgajjgIFcbiAgLy8gcmVzb3VyY2VUeXBlcyDjgYznqbrjga7jgoLjga7vvIjjg5Djg7Pjg4njg6vmuIjjgb/jg6vjg7zjg6vjga/pnZ7nqbrjgYzkv53oqLzjgZXjgozjgabjgYTjgovjga7jgafjgIHoqbLlvZPjgZnjgovjga7jga9cbiAgLy8g5omL44Gn57WE44G/56uL44Gm44Gf44Or44O844OrID0g44OG44K544OI44KE5bCG5p2l44Gu44OG44Oz44OX44Os44O844OI5bGk44Or44O844Or44Gg44GR77yJ44CCXG4gIHJldHVybiBydWxlcy5maWx0ZXIoKHIpID0+IHIucmVzb3VyY2VUeXBlcy5sZW5ndGggPT09IDBcbiAgICB8fCByLnJlc291cmNlVHlwZXMuaW5jbHVkZXMoJyonKVxuICAgIHx8IHIucmVzb3VyY2VUeXBlcy5zb21lKCh0KSA9PiB0eXBlcy5oYXModCkpKTtcbn1cblxuLyoqXG4gKiBAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIOOCkuino+axuuOBmeOCi+OAglxuICog6YCa5bi444GvIGF3cy1jZGstbGliIOOBjCBidW5kbGVkRGVwZW5kZW5jaWVzIOOBqOOBl+OBpuWQjOaiseOBl+OBpuOBhOOCi+OCs+ODlOODvOOBq+S5l+OCi+OAglxuICog77yI44OG44K544OI44GL44KJ44KC5Yip55So44GZ44KL44Gf44KBIGV4cG9ydCDjgZfjgabjgYTjgovvvIlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbmdpbmUoKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZSgnQGF3cy9jbG91ZGZvcm1hdGlvbi12YWxpZGF0ZScpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBmYWxsIHRocm91Z2hcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGxpYlBrZyA9IHJlcXVpcmUucmVzb2x2ZSgnYXdzLWNkay1saWIvcGFja2FnZS5qc29uJyk7XG4gICAgY29uc3QgZW5nUGtnID0gcmVxdWlyZS5yZXNvbHZlKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlL3BhY2thZ2UuanNvbicsIHtcbiAgICAgIHBhdGhzOiBbcGF0aC5kaXJuYW1lKGxpYlBrZyldLFxuICAgIH0pO1xuICAgIHJldHVybiByZXF1aXJlKHBhdGguZGlybmFtZShlbmdQa2cpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcml2YXRlL2VuZm9yY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLDBEQU1DO0FBR0QsOENBRUM7QUFNRCw0Q0FFQztBQTZMRCxnREFpQkM7QUF1REQsd0NBaUJDO0FBYUQsc0NBUUM7QUEyQ0Qsa0RBY0M7QUFpQkQsNENBVUM7QUFRRCxzREFtQkM7QUFZRCxzQkFRQztBQWVELDRDQU1DO0FBRUQsZ0NBZUM7QUF4Z0JELHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFDN0IsNkNBT3FCO0FBRXJCLHdEQUF3RTtBQUV4RSwwREFBMEQ7QUFDMUQ7OERBQzhEO0FBRTlEOzs7R0FHRztBQUNVLFFBQUEsc0JBQXNCLEdBQUcsd0JBQXdCLENBQUM7QUFFL0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsTUFBYyxFQUFFLFNBQWtCO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkcsT0FBTztRQUNMLElBQUksRUFBRSw4QkFBc0I7UUFDNUIsT0FBTyxFQUFFLCtEQUErRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sRUFBRTtLQUM3RyxDQUFDO0FBQ0osQ0FBQztBQUVELHlGQUF5RjtBQUN6RixTQUFnQixpQkFBaUIsQ0FBQyxTQUE2QjtJQUM3RCxPQUFPLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUEwQjtJQUN6RCxPQUFPLE9B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QUFFLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN4RCxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQWdCLFVBQVU7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsZUFBZTtJQUNqQixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsMkNBQTJDLEVBQUU7WUFDMUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QixDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEFwcCxcbiAgQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbixcbiAgdHlwZSBJUG9saWN5VmFsaWRhdGlvbkNvbnRleHQsXG4gIHR5cGUgSVBvbGljeVZhbGlkYXRpb25QbHVnaW4sXG4gIHR5cGUgUG9saWN5VmFsaWRhdGlvblBsdWdpblJlcG9ydCxcbiAgdHlwZSBQb2xpY3lWaW9sYXRpb24sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQlVORExFRF9MSUJTLCB0eXBlIEJ1bmRsZWRSdWxlRGF0YSB9IGZyb20gJy4uL3J1bGVzLmdlbmVyYXRlZCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAtLSBAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIOOBr1xuICAgYXdzLWNkay1saWIg5ZCM5qKx44Kz44OU44O844KS5YuV55qE6Kej5rG644GZ44KL6Kit6KiI77yI5L6d5a2Y44Gr44Gv6LyJ44Gb44Gq44GE77yJ44CCUkVBRE1FL0FHRU5UUy5tZCDlj4LnhacgKi9cblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIFJlZ28gbW9kdWxlIHRoYXQgY2FycmllcyB0aGUgZGVwbG95bWVudFxuICogZW52aXJvbm1lbnQgaW50byBydWxlIGV2YWx1YXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBERVBMT1lfRU5WX01PRFVMRV9OQU1FID0gJ19wZl9kZXBsb3lfZW52aXJvbm1lbnQnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIGRlZmluaW5nIGBkZXBsb3lfcmVnaW9uYCBmb3IgdGhlIHJ1bGUgcGFja2FnZS5cbiAqXG4gKiBSdWxlcyBtdXN0IHJlYWQgaXQgYXMgYGRhdGEuY2RrX3ByZWZsaWdodC5kZXBsb3lfcmVnaW9uYCAobmV2ZXIgYXMgYSBiYXJlXG4gKiB2YXJpYWJsZSk6IHRoZSBkYXRhIHJlZmVyZW5jZSBpcyBzaW1wbHkgdW5kZWZpbmVkIHdoZW4gdGhlIG1vZHVsZSBpcyBub3RcbiAqIGluamVjdGVkIOKAlCB0aGUgcnVsZSBib2R5IGZhaWxzIGFuZCB0aGUgcnVsZSBza2lwcyDigJQgd2hpbGUgYSBiYXJlIHZhcmlhYmxlXG4gKiB3b3VsZCBiZSBhIGNvbXBpbGUgZXJyb3IuIEluamVjdGVkIGJ5IHRoZSBlbmZvcmNlIHBsdWdpbiB3aGVuIHRoZSBhcHAtbGV2ZWxcbiAqIHJlZ2lvbiBpcyBjb25jcmV0ZTsgdGhlIHdhcm4gbW9kZSAoQ0RLIGJ1aWx0LWluIHBsdWdpbikgbmV2ZXIgaW5qZWN0cyBpdCxcbiAqIHNvIHJlZ2lvbi1kZXBlbmRlbnQgcnVsZXMgb25seSBmaXJlIGluIGVuZm9yY2UgbW9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveUVudmlyb25tZW50TW9kdWxlKHJlZ2lvbjogc3RyaW5nLCBhY2NvdW50SWQ/OiBzdHJpbmcpOiB7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0ge1xuICBjb25zdCBhY2NvdW50ID0gaXNDb25jcmV0ZUFjY291bnQoYWNjb3VudElkKSA/IGBkZXBsb3lfYWNjb3VudCA6PSAke0pTT04uc3RyaW5naWZ5KGFjY291bnRJZCl9XFxuYCA6ICcnO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IERFUExPWV9FTlZfTU9EVUxFX05BTUUsXG4gICAgY29udGVudDogYHBhY2thZ2UgY2RrX3ByZWZsaWdodFxcblxcbmltcG9ydCByZWdvLnYxXFxuXFxuZGVwbG95X3JlZ2lvbiA6PSAke0pTT04uc3RyaW5naWZ5KHJlZ2lvbil9XFxuJHthY2NvdW50fWAsXG4gIH07XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBhY2NvdW50IGZyb20gdGhlIHZhbGlkYXRpb24gY29udGV4dCBpcyBhIGNvbmNyZXRlIDEyLWRpZ2l0IGFjY291bnQgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25jcmV0ZUFjY291bnQoYWNjb3VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhY2NvdW50SWQgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBhY2NvdW50SWQgPT09ICdzdHJpbmcnICYmIC9eXFxkezEyfSQvLnRlc3QoYWNjb3VudElkKTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSByZWdpb24gZnJvbSB0aGUgdmFsaWRhdGlvbiBjb250ZXh0IGlzIGEgY29uY3JldGUgcmVnaW9uIG5hbWVcbiAqIChhcyBvcHBvc2VkIHRvIHVuZGVmaW5lZCwgYW4gdW5yZXNvbHZlZCB0b2tlbiwgb3IgYSBwbGFjZWhvbGRlcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmNyZXRlUmVnaW9uKHJlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogcmVnaW9uIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgcmVnaW9uID09PSAnc3RyaW5nJyAmJiAvXlthLXpdezJ9KC1bYS16XSspKy1cXGQrJC8udGVzdChyZWdpb24pO1xufVxuXG5pbnRlcmZhY2UgRW5naW5lRGlhZ25vc3RpYyB7XG4gIHJlYWRvbmx5IHJ1bGVJZDogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eTogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5PzogeyByZWFkb25seSBsb2dpY2FsSWQ/OiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgcHJvcGVydHlQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBkb2N1bWVudGF0aW9uVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIGVuZm9yY2Ug44Oi44O844OJ55So44Gu5YaF6YOo44OX44Op44Kw44Kk44Oz44CCXG4gKlxuICogQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBr+WFqCBmaW5kaW5nIOOCkiB3YXJuaW5nIOOBq+S4uOOCgeOCi+OBn+OCgVxuICog77yIYXdzLWNkay1saWIgMi4yNjcuMCDlrp/muKzjgIHmmIfmoLzjg5Xjg6njgrDjgoLnhKHlirnvvInjgIHlkIzjgZjjgqjjg7Pjgrjjg7PjgpLnm7TmjqXlkbzjgbPjgIFcbiAqIGNkay1wcmVmbGlnaHQg44Gu44Or44O844Or6YGV5Y+N77yI44GK44KI44GzIHN0cmljdCDmmYLjga/jgqjjg7Pjgrjjg7Pjga7jgqjjg6njg7zjgq/jg6njgrnvvInjgpJcbiAqIHBvbGljeSB2YWxpZGF0aW9uIOOBruWkseaVl+OBqOOBl+OBpuWgseWRiuOBl+OBpiBzeW50aCDjgpLmraLjgoHjgovjgIJcbiAqL1xuZXhwb3J0IGNsYXNzIFByZWZsaWdodEVuZm9yY2VQbHVnaW4gaW1wbGVtZW50cyBJUG9saWN5VmFsaWRhdGlvblBsdWdpbiB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lID0gUExVR0lOX05BTUU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdHJpY3Q6IGJvb2xlYW4sXG4gICkge31cblxuICBwdWJsaWMgdmFsaWRhdGUoY29udGV4dDogSVBvbGljeVZhbGlkYXRpb25Db250ZXh0KTogUG9saWN5VmFsaWRhdGlvblBsdWdpblJlcG9ydCB7XG4gICAgY29uc3QgZW5naW5lID0gbG9hZEVuZ2luZUNhY2hlZCgpO1xuICAgIGlmICghZW5naW5lKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ2Nkay1wcmVmbGlnaHQ6IGNvdWxkIG5vdCByZXNvbHZlIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGU7ICcgK1xuICAgICAgICAnZW5mb3JjZSBtb2RlIGlzIHVuYXZhaWxhYmxlIGFuZCBubyBwcmVmbGlnaHQgY2hlY2tzIHdlcmUgcnVuLiAnICtcbiAgICAgICAgJ0luc3RhbGwgaXQgYXMgYSBkZXZEZXBlbmRlbmN5IG9yIHVzZSB0aGUgZGVmYXVsdCAod2FybikgbW9kZS4nLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZpb2xhdGlvbnM6IFtdIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVnaW9uID0gaXNDb25jcmV0ZVJlZ2lvbihjb250ZXh0LnJlZ2lvbikgPyBjb250ZXh0LnJlZ2lvbiA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhY2NvdW50ID0gaXNDb25jcmV0ZUFjY291bnQoY29udGV4dC5hY2NvdW50SWQpID8gY29udGV4dC5hY2NvdW50SWQgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb3VycyA9IG5ldyBTZXQodGhpcy5ydWxlcy5tYXAoKHIpID0+IHIuaWQpKTtcbiAgICBjb25zdCB2aW9sYXRpb25zOiBQb2xpY3lWaW9sYXRpb25bXSA9IFtdO1xuXG4gICAgLy8g5YWo44OG44Oz44OX44Os44O844OI44Gu5ZKM6ZuG5ZCI44Gn5YiI44KK6L6844KA44CC44OG44Oz44OX44Os44O844OI44GU44Go44Gr5YiI44KL44Go44Ko44Oz44K444Oz44KS5L2V5bqm44KCXG4gICAgLy8g5L2c44KK55u044GZ44GT44Go44Gr44Gq44KK44CB44Gd44Gh44KJ44Gu44Kz44K544OI44Gu5pa544GM6auY44GP44Gk44GP77yIcmVnb0VuZ2luZUNhY2hlZCDjga7jgrPjg6Hjg7Pjg4jlj4LnhafvvInjgIJcbiAgICBjb25zdCBydWxlcyA9IHBydW5lKHRoaXMucnVsZXMsIHRlbXBsYXRlUmVzb3VyY2VUeXBlcyhjb250ZXh0LnN0YWNrVGVtcGxhdGVzLm1hcCgoc3QpID0+IHN0LnRlbXBsYXRlUGF0aCkpKTtcblxuICAgIC8vIDEg5pys44KC5q6L44KJ44Gq44GEID0g44GT44Gu44Ki44OX44Oq44Gu44Oq44K944O844K544Gr6Zai5L+C44GZ44KL44Or44O844Or44GM54Sh44GE44CC44Ko44Oz44K444Oz44KS57WE44KA5b+F6KaB44KC54Sh44GEXG4gICAgLy8g77yIbGlicyDjgaDjgZHjgpLovInjgZvjgZ/jgqjjg7Pjgrjjg7Pjga8gdmlvbGF0aW9uIOODq+ODvOODq+OCkuaMgeOBn+OBmuOAgeipleS+oeaZguOBq+iQveOBoeOCi++8ieOAglxuICAgIC8vIHN0cmljdCDjga7jgajjgY3jga/ntYTjgb/ovrzjgb/jgqjjg7Pjgrjjg7Pjga4gZmluZGluZ3Mg44KS5ou+44GG5LuV5LqL44GM5q6L44KL44Gu44Gn6YCa5bi444Gp44GK44KK6YCy44KA44CCXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5zdHJpY3QpIHtcbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZpb2xhdGlvbnM6IFtdIH07XG4gICAgfVxuXG4gICAgbGV0IGVuZzogYW55O1xuICAgIHRyeSB7XG4gICAgICBlbmcgPSByZWdvRW5naW5lQ2FjaGVkKGVuZ2luZSwgcnVsZXMsIHJlZ2lvbiwgYWNjb3VudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8g44Or44O844Or44OR44OD44Kv44GM44Kz44Oz44OR44Kk44Or44Gn44GN44Gq44GEID0g44Gp44Gu44OG44Oz44OX44Os44O844OI44KC5qSc5p+744Gn44GN44Gq44GE44Gu44Gn44CBXG4gICAgICAvLyDlhajjgrnjgr/jg4Pjgq/jgbbjgpMgdmlvbGF0aW9uIOOCkueri+OBpuOCi++8iDEg5p6a44Ga44Gk44GuIGNhdGNoIOOBq+OBr+WIsOmBlOOBl+OBquOBhO+8ieOAglxuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIHZpb2xhdGlvbnM6IGNvbnRleHQuc3RhY2tUZW1wbGF0ZXMubWFwKChzdCkgPT4gZW5naW5lRXJyb3JWaW9sYXRpb24oc3QsIGUpKSB9O1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3Qgb2YgY29udGV4dC5zdGFja1RlbXBsYXRlcykge1xuICAgICAgbGV0IHJlcG9ydDogYW55O1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVwb3J0ID0gdmFsaWRhdGVUZW1wbGF0ZShlbmcsIG5ldyBlbmdpbmUuVGVtcGxhdGVGaWxlKHN0LnRlbXBsYXRlUGF0aCksIHtcbiAgICAgICAgICBwc2V1ZG9QYXJhbWV0ZXJPdmVycmlkZXM6IHtcbiAgICAgICAgICAgIGFjY291bnRJZDogY29udGV4dC5hY2NvdW50SWQsXG4gICAgICAgICAgICByZWdpb246IGNvbnRleHQucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8g57WE44G/6L6844G/44Or44O844Or44GvIENESyDntYTjgb/ovrzjgb/jga4gQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgYzlkIzjgZjjg4bjg7Pjg5fjg6zjg7zjg4jjgatcbiAgICAgICAgICAvLyDlr77jgZfjgabml6LjgavotbDjgonjgZvjgabjgYTjgovjgIJzdHJpY3Qg44Gn44Gq44GR44KM44Gw57WQ5p6c44KC5L2/44KP44Ga5o2o44Gm44Gm44GE44KL44Gu44Gn44CB5Li444GU44Go5YiH44KLXG4gICAgICAgICAgLy8g77yI5a6f5risIDcwIOODquOCveODvOOCuSAxIOaemuOBp+WIneWbniAzLjI3cyAtPiAwLjIyc++8ieOAgnN0cmljdCDjga7jgajjgY3jgaDjgZHlv4XopoHjgavjgarjgovjgIJcbiAgICAgICAgICBkaXNhYmxlQnVpbHRpblJ1bGVzOiAhdGhpcy5zdHJpY3QsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyB0aHJvdyDjgpLlpJbjgavlh7rjgZnjgaggQ0RLIOOBr+OBk+OBruWRvOOBs+WHuuOBl+OCkiBwbHVnaW4gZmFpbHVyZe+8iHZpb2xhdGlvbiDjgrzjg63vvInjgajjgZfjgaZcbiAgICAgICAgLy8g6KiY6Yyy44GZ44KL44Gg44GR44Gr44Gq44KK44CB44GT44GT44G+44Gn44Gr6ZuG44KB44Gf6YGV5Y+N44KC5b6M57aa44OG44Oz44OX44Os44O844OI44Gu6YGV5Y+N44KC5Li444GU44Go5raI44GI44CBXG4gICAgICAgIC8vIOaui+OCi+OBruOBryBgZmFpbGVkOiB1bmRlZmluZWRgIOOBoOOBkeOBq+OBquOCi++8iGlzc3VlICMxNTHvvInjgIJcbiAgICAgICAgLy8gc3ludGgg44KS5q2i44KB44KL44Gu44GvIGluc3RhbGxFbmZvcmNlR2F0ZSDjga7lvbnnm67jgILjgZPjgZPjga/jgIzjganjga7jgrnjgr/jg4Pjgq/jgafkvZXjgYxcbiAgICAgICAgLy8g6LW344GN44Gf44GL44CN44KS44Os44Od44O844OI44Gr5q6L44GX44CB5LuW44K544K/44OD44Kv44Gu44Or44O844Or44KS6LWw44KJ44Gb57aa44GR44KL44Gf44KB44Gu44KC44Gu44CCXG4gICAgICAgIHZpb2xhdGlvbnMucHVzaChlbmdpbmVFcnJvclZpb2xhdGlvbihzdCwgZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZCBvZiAocmVwb3J0LmRpYWdub3N0aWNzID8/IFtdKSBhcyBFbmdpbmVEaWFnbm9zdGljW10pIHtcbiAgICAgICAgY29uc3QgaXNPdXJzID0gZC5zb3VyY2UgPT09ICdDVVNUT00nICYmIG91cnMuaGFzKGQucnVsZUlkKTtcbiAgICAgICAgY29uc3QgaXNTdHJpY3RIaXQgPSB0aGlzLnN0cmljdFxuICAgICAgICAgICYmIGQuc291cmNlICE9PSAnQ1VTVE9NJ1xuICAgICAgICAgICYmIChkLnNldmVyaXR5ID09PSAnRVJST1InIHx8IGQuc2V2ZXJpdHkgPT09ICdGQVRBTCcpO1xuICAgICAgICBpZiAoIWlzT3VycyAmJiAhaXNTdHJpY3RIaXQpIGNvbnRpbnVlO1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHJ1bGVOYW1lOiBkLnJ1bGVJZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZC5tZXNzYWdlLFxuICAgICAgICAgIHNldmVyaXR5OiBtYXBTZXZlcml0eShkLnNldmVyaXR5KSxcbiAgICAgICAgICB2aW9sYXRpbmdSZXNvdXJjZXM6IFt7XG4gICAgICAgICAgICByZXNvdXJjZUxvZ2ljYWxJZDogZC5lbnRpdHk/LmxvZ2ljYWxJZCA/PyAnKHVua25vd24pJyxcbiAgICAgICAgICAgIHRlbXBsYXRlUGF0aDogc3QudGVtcGxhdGVQYXRoLFxuICAgICAgICAgICAgbG9jYXRpb25zOiBbZC5wcm9wZXJ0eVBhdGggPz8gJyh0ZW1wbGF0ZSknXSxcbiAgICAgICAgICB9XSxcbiAgICAgICAgICAuLi4oZC5kb2N1bWVudGF0aW9uVXJsID8geyBydWxlTWV0YWRhdGE6IHsgRG9jdW1lbnRhdGlvblVybDogZC5kb2N1bWVudGF0aW9uVXJsIH0gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBqOWQjOOBmOWIpOWumuOAgndhcm5pbmcg44Gg44GR44Gq44KJXG4gICAgLy8g44Os44Od44O844OI44Gr44Gv6LyJ44KL44GM5ZCI5oiQ44Gv6YCa44KL77yIQ0xJIOWBtOOBryBzdWNjZXNzL2ZhaWx1cmUg44Gr6Zai44KP44KJ44Ga5b+F44Ga5Ye65Yqb44GZ44KL77yJ44CCXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdmlvbGF0aW9ucy5ldmVyeSgodikgPT4gIUJMT0NLU19TWU5USC5oYXMoU3RyaW5nKHYuc2V2ZXJpdHkpKSksIHZpb2xhdGlvbnMgfTtcbiAgfVxufVxuXG4vKiog5ZCI5oiQ44KS5q2i44KB44KLIHZpb2xhdGlvbiBzZXZlcml0eeOAgiAqL1xuY29uc3QgQkxPQ0tTX1NZTlRIID0gbmV3IFNldChbJ2Vycm9yJywgJ2ZhdGFsJ10pO1xuXG4vKipcbiAqIOOCqOODs+OCuOODs+OBriBzZXZlcml0eSDjgpIgcG9saWN5IHZhbGlkYXRpb24g44GuIHNldmVyaXR5IOOBq+WGmeOBmeOAguihqOOBryBhd3MtY2RrLWxpYiAyLjI2Ny4wIOOBrlxuICogQ2xvdWRGb3JtYXRpb25WYWxpZGF0ZVBsdWdpbiDjgajlkIzkuIDjgIJgcmVwcm8ubWV0aG9kOiBkb2Mtb25seWAg44Gu44Or44O844Or44GvIFdBUk4g44KS5Ye644GZ44Gu44GnXG4gKiB3YXJuaW5nIOOBq+OBquOCiuOAgeWgseWRiuOBr+OBleOCjOOCi+OBjCBzeW50aCDjga/mraLjgoHjgarjgYTvvIjoqLzmi6DjgYzlrp/mqZ/jga7jg4fjg5fjg63jgqTlpLHmlZfjgafjga/jgarjgYTjgZ/jgoHvvInjgIJcbiAqL1xuZnVuY3Rpb24gbWFwU2V2ZXJpdHkoc2V2ZXJpdHk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc2V2ZXJpdHkpIHtcbiAgICBjYXNlICdGQVRBTCc6XG4gICAgY2FzZSAnRVJST1InOlxuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgY2FzZSAnV0FSTic6XG4gICAgICByZXR1cm4gJ3dhcm5pbmcnO1xuICAgIGNhc2UgJ0lORk8nOlxuICAgICAgcmV0dXJuICdpbmZvcm1hdGlvbmFsJztcbiAgICBjYXNlICdERUJVRyc6XG4gICAgICByZXR1cm4gJ2RlYnVnJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd3YXJuaW5nJztcbiAgfVxufVxuXG4vKipcbiAqIOODq+ODvOODq+ipleS+oeOBneOBruOCguOBruOBjOWkseaVl+OBl+OBn+OBk+OBqOOCkuihqOOBmSB2aW9sYXRpb24g44GuIHJ1bGVOYW1l44CCXG4gKiDjg5Djg7Pjg4njg6vmuIjjgb/jg6vjg7zjg6vjga4gaWQg44Gn44Gv44Gq44GE44Gu44GnIGBleGNsdWRlYCDjgafjga/mtojjgZvjgarjgYTvvIjmtojjgZfjgabjgojjgYTnirbmhYvjgafjga/jgarjgYTvvInjgIJcbiAqL1xuZXhwb3J0IGNvbnN0IEVOR0lORV9FUlJPUl9SVUxFID0gJ3BmLWVuZ2luZS1lcnJvcic7XG5cbi8qKiDjgqjjg7Pjgrjjg7PjgYzmipXjgZLjgZ/lgKTjgpLjg6Hjg4Pjgrvjg7zjgrjjgavokL3jgajjgZnjgILjgqjjg7Pjgrjjg7Pjga8gRXJyb3Ig44Gn44Gv44Gq44GP57Sg44Gu5paH5a2X5YiX44KS5oqV44GS44KL44GT44Go44GM44GC44KL44CCICovXG5mdW5jdGlvbiBlbmdpbmVFcnJvclRleHQoZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSAoZSBhcyB7IG1lc3NhZ2U/OiB1bmtub3duIH0gfCB1bmRlZmluZWQpPy5tZXNzYWdlO1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UubGVuZ3RoID4gMCA/IG1lc3NhZ2UgOiBTdHJpbmcoZSk7XG59XG5cbi8qKiAxIOaemuOBruODhuODs+ODl+ODrOODvOODiOOCkuaknOafu+OBp+OBjeOBquOBi+OBo+OBn+OBk+OBqOOCkiB2aW9sYXRpb24g44Go44GX44Gm5aCx5ZGK44GZ44KL44CCICovXG5mdW5jdGlvbiBlbmdpbmVFcnJvclZpb2xhdGlvbihzdDogeyBzdGFja0NvbnN0cnVjdFBhdGg6IHN0cmluZzsgdGVtcGxhdGVQYXRoOiBzdHJpbmcgfSwgZTogdW5rbm93bik6IFBvbGljeVZpb2xhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcnVsZU5hbWU6IEVOR0lORV9FUlJPUl9SVUxFLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ2Nkay1wcmVmbGlnaHQgY291bGQgbm90IGV2YWx1YXRlIGl0cyBydWxlcyBmb3IgdGhpcyB0ZW1wbGF0ZSwgc28gbm8gcHJlZmxpZ2h0IHJ1bGUgcmFuIGZvciBpdDogJ1xuICAgICAgKyBlbmdpbmVFcnJvclRleHQoZSksXG4gICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgZml4OiAnUmVwb3J0IHRoaXMgYXQgaHR0cHM6Ly9naXRodWIuY29tL2JhZG1pbnRvbmNyeWVyL2Nkay1wcmVmbGlnaHQvaXNzdWVzOyAnXG4gICAgICArICd0byB1bmJsb2NrIHRoZSBidWlsZCBtZWFud2hpbGUsIHVzZSBQcmVmbGlnaHQuYXBwbHkoYXBwLCB7IGVuZm9yY2U6IGZhbHNlIH0pLicsXG4gICAgdmlvbGF0aW5nUmVzb3VyY2VzOiBbe1xuICAgICAgY29uc3RydWN0UGF0aDogc3Quc3RhY2tDb25zdHJ1Y3RQYXRoLFxuICAgICAgdGVtcGxhdGVQYXRoOiBzdC50ZW1wbGF0ZVBhdGgsXG4gICAgICBsb2NhdGlvbnM6IFsnKHRlbXBsYXRlKSddLFxuICAgIH1dLFxuICB9O1xufVxuXG4vKiogVGhlIHBsdWdpbiBuYW1lIHJlY29yZGVkIGluIGB2YWxpZGF0aW9uLXJlcG9ydC5qc29uYCBmb3Igb3VyIGZpbmRpbmdzLiAqL1xuZXhwb3J0IGNvbnN0IFBMVUdJTl9OQU1FID0gJ2Nkay1wcmVmbGlnaHQnO1xuXG4vKiogVGhlIGNsb3VkIGFzc2VtYmx5IGZpbGUgdGhlIENESyB3cml0ZXMgaXRzIHZhbGlkYXRpb24gcmVwb3J0IHRvLiAqL1xuY29uc3QgVkFMSURBVElPTl9SRVBPUlRfRklMRSA9ICd2YWxpZGF0aW9uLXJlcG9ydC5qc29uJztcblxuY29uc3QgR0FURV9JTlNUQUxMRUQgPSBTeW1ib2wuZm9yKCdjZGstcHJlZmxpZ2h0LmVuZm9yY2VHYXRlJyk7XG5cbi8qKlxuICogZW5mb3JjZSDjg6Ljg7zjg4njga7lj5bjgorjgZPjgbzjgZfjgpLloZ7jgZDjgrLjg7zjg4jjgpIgQXBwIOOBq+S7lei+vOOCgOOAglxuICpcbiAqIENESyBDTEkgMi4xMTI4LjEg5Lul6ZmN44GvIGFwcCDjgavjgIzjg6zjg53jg7zjg4jjga8gQ0xJIOOBjOWHpueQhuOBmeOCi+OAjeOBqOS8neOBiOOBn+OBhuOBiOOBp1xuICogYHZhbGlkYXRpb24tcmVwb3J0Lmpzb25gIOOCkuiHquWIhuOBp+iqreOCgOOBjOOAgeOBneOBrue1nuOCiui+vOOBv++8iHRvb2xraXQtbGliIOOBrlxuICogYGZpbHRlclJlcG9ydHNCeVN0YWNrc2DvvInjgYwgdmlvbGF0aW9uIOOBriBjb25zdHJ1Y3RQYXRoIOWFiOmgreOCu+OCsOODoeODs+ODiOOCklxuICog6YG45oqe44K544K/44OD44Kv44GuIGhpZXJhcmNoaWNhbElkIOOBqOeqgeOBjeWQiOOCj+OBm+OCi+OBn+OCgeOAgWBTdGFnZS9TdGFja2Ag5b2i5byP44Gr44Gq44KLXG4gKiBTdGFnZSDlhoXjgrnjgr/jg4Pjgq/jga7pgZXlj43jgYzjgZnjgbnjgabmjajjgabjgonjgozjgIFzeW50aCDjgYzpu5njgaPjgabmiJDlip/jgZnjgovvvIhpc3N1ZSAjMTEz77yJ44CCXG4gKlxuICog44Gd44GT44GnIHN5bnRoIOWujOS6huW+jOOBq+ODrOODneODvOODiOOCkuiqreOBv+ebtOOBl+OAgWNkay1wcmVmbGlnaHQg44Gu6YGV5Y+N44GM5q6L44Gj44Gm44GE44KM44GwXG4gKiDoh6rliIbjgafloLHlkYrjgZfjgaYgc3ludGgg44KS5q2i44KB44KL44CC44Op44Kk44OW44Op44Oq44GM6Ieq5Yqb44Gn5aCx5ZGK44GZ44KL57WM6Lev77yI57Sg44GuIG5vZGUg5a6f6KGM44CBXG4gKiBqZXN044CBQ0xJIDIuMTEyOC4xIOacqua6gO+8ieOBp+OBryBzeW50aCDjgYzkvovlpJbjgpLmipXjgZLjgovjgZ/jgoHjgZPjgZPjgavjga/liLDpgZTjgZvjgZrjgIFcbiAqIOS6jOmHjeWgseWRiuOBr+i1t+OBjeOBquOBhOOAglxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEVuZm9yY2VHYXRlKHNjb3BlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gIGNvbnN0IHJvb3QgPSBzY29wZS5ub2RlLnJvb3Q7XG4gIGlmICghQXBwLmlzQXBwKHJvb3QpKSByZXR1cm47XG4gIGNvbnN0IGFwcCA9IHJvb3QgYXMgQXBwICYgeyBbR0FURV9JTlNUQUxMRURdPzogYm9vbGVhbiB9O1xuICBpZiAoYXBwW0dBVEVfSU5TVEFMTEVEXSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXBwLCBHQVRFX0lOU1RBTExFRCwgeyB2YWx1ZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG5cbiAgY29uc3Qgc3ludGggPSBhcHAuc3ludGguYmluZChhcHApO1xuICBsZXQgY2hlY2tlZCA9IGZhbHNlO1xuICBhcHAuc3ludGggPSAob3B0aW9ucz86IFBhcmFtZXRlcnM8QXBwWydzeW50aCddPlswXSkgPT4ge1xuICAgIGNvbnN0IGFzc2VtYmx5ID0gc3ludGgob3B0aW9ucyk7XG4gICAgaWYgKCFjaGVja2VkKSB7XG4gICAgICBjaGVja2VkID0gdHJ1ZTtcbiAgICAgIGZhaWxJZlJlcG9ydFVuaGFuZGxlZChhc3NlbWJseS5kaXJlY3RvcnkpO1xuICAgIH1cbiAgICByZXR1cm4gYXNzZW1ibHk7XG4gIH07XG59XG5cbi8qKlxuICog44Os44Od44O844OI44GrIGNkay1wcmVmbGlnaHQg44Gu5aSx5pWX44GM5q6L44Gj44Gm44GE44KM44Gw44CBZmluZGluZ3Mg44KS5Ye65Yqb44GX44GmIHN5bnRoIOOCkuatouOCgeOCi+OAglxuICpcbiAqIOWIpOWumuOBryBjZGstcHJlZmxpZ2h0IOOBruODrOODneODvOODiOOBoOOBkeOCkuimi+OCi+OAgue1hOOBv+i+vOOBv+OCqOODs+OCuOODs+OChCBjb25zdHJ1Y3QgYW5ub3RhdGlvblxuICog44Gg44GR44GM5aSx5pWX44GX44Gm44GE44KL5aC05ZCI44GvIENMSSDjgYzmraPjgZfjgY/mibHjgYjjgovjga7jgafjgIHjgZPjgaHjgonjga/pu5njgaPjgaYgQ0xJIOOBq+S7u+OBm+OCi+OAglxuICog6YCG44Gr55m654Gr44GZ44KL44Go44GN44Gv44Os44Od44O844OI5YWo5L2T44KS5Ye644GZ44CC44GT44GT44GnIHN5bnRoIOOCkuatouOCgeOCi+OBqCBDTEkg5YG044Gu5Ye65Yqb44GMXG4gKiDkuIDliIfotbDjgonjgarjgYTjgZ/jgoHjgIHlkIzmmYLjgavlh7rjgabjgYTjgZ/jga/jgZrjga7ku5bjg5fjg6njgrDjgqTjg7Pjga4gZmluZGluZyDjgYzmtojjgYjjgabjgZfjgb7jgYbjgIJcbiAqL1xuZnVuY3Rpb24gZmFpbElmUmVwb3J0VW5oYW5kbGVkKGRpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIGxldCBwbHVnaW5SZXBvcnRzOiBhbnlbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXBvcnQgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oZGlyZWN0b3J5LCBWQUxJREFUSU9OX1JFUE9SVF9GSUxFKSwgJ3V0ZjgnKSk7XG4gICAgcGx1Z2luUmVwb3J0cyA9IHJlcG9ydD8ucGx1Z2luUmVwb3J0cyA/PyBbXTtcbiAgfSBjYXRjaCB7XG4gICAgLy8g44Os44Od44O844OI44GM54Sh44GE77yI44OX44Op44Kw44Kk44Oz5pyq5a6f6KGM77yJ44G+44Gf44Gv5aOK44KM44Gm44GE44KL5aC05ZCI44Gv5L2V44KC44GX44Gq44GEXG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGZhaWxlZCA9IHBsdWdpblJlcG9ydHMuc29tZShcbiAgICAocikgPT4gcj8ucGx1Z2luTmFtZSA9PT0gUExVR0lOX05BTUUgJiYgcj8uY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnLFxuICApO1xuICBpZiAoIWZhaWxlZCkgcmV0dXJuO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoZm9ybWF0UmVwb3J0cyhwbHVnaW5SZXBvcnRzKSk7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAnY2RrLXByZWZsaWdodDogdmFsaWRhdGlvbiBmYWlsZWQuIEZpeCB0aGUgZmluZGluZ3MgYWJvdmUsICcgK1xuICAgIFwiYWNrbm93bGVkZ2UgdGhlbSB3aXRoIFZhbGlkYXRpb25zLm9mKHNjb3BlKS5hY2tub3dsZWRnZSh7IGlkOiAnY2RrLXByZWZsaWdodDo6PHJ1bGUtaWQ+JyB9KSwgXCIgK1xuICAgICdvciBleGNsdWRlIHRoZSBydWxlIHZpYSBQcmVmbGlnaHQuYXBwbHkoYXBwLCB7IGV4Y2x1ZGU6IFsuLi5dIH0pLicsXG4gICk7XG59XG5cbi8qKlxuICogQ0RLIOacrOS9k+OBruODleOCqeODvOODnuODg+OCv+OBp+aVtOW9ouOBl+OAgUNMSSDjgajlkIzkuIDjga7opovjgZ/nm67jgavjgZnjgovjgIJcbiAqIOengeacieODkeOCueOBquOBruOBp+ino+axuuOBp+OBjeOBquOBhOOBk+OBqOOBjOOBguOCiuOAgeOBneOBruWgtOWQiOOBr+acgOWwj+mZkOOBruiHquWJjeaVtOW9ouOBq+iQveOBqOOBmVxuICog77yI6KaL44Gf55uu44KI44KK44CM6JC944Go44GZ44CN44GT44Go44KS5YSq5YWI44GZ44KL77yJ44CCXG4gKi9cbmZ1bmN0aW9uIGZvcm1hdFJlcG9ydHMocGx1Z2luUmVwb3J0czogYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBsb2FkRm9ybWF0dGVyQ2FjaGVkKCk7XG4gIGlmIChmb3JtYXR0ZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXRWYWxpZGF0aW9uUmVwb3J0cyhwcm9jZXNzLmN3ZCgpLCBwbHVnaW5SZXBvcnRzKS5qb2luKCdcXG5cXG4nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaFxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsbGJhY2tGb3JtYXQocGx1Z2luUmVwb3J0cyk7XG59XG5cbi8qKlxuICogQ0RLIOacrOS9k+OBruODleOCqeODvOODnuODg+OCv+OCkuino+axuuOBp+OBjeOBquOBhOOBqOOBjeOBruacgOWwj+mZkOOBruaVtOW9ouOAglxuICog6KaL44Gf55uu44Gv5Yqj44KL44GM44CBZmluZGluZ3Mg44KS5b+F44Ga6Kqt44KB44KL5b2i44Gn5Ye644GZ44Gf44KB44Gu5pyA5b6M44Gu56Cm44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFsbGJhY2tGb3JtYXQocGx1Z2luUmVwb3J0czogYW55W10pOiBzdHJpbmcge1xuICBjb25zdCBibG9ja3M6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcmVwb3J0IG9mIHBsdWdpblJlcG9ydHMpIHtcbiAgICBmb3IgKGNvbnN0IHZpb2xhdGlvbiBvZiByZXBvcnQ/LnZpb2xhdGlvbnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IGFja0lkID0gU3RyaW5nKHZpb2xhdGlvbi5ydWxlTmFtZSkuaW5jbHVkZXMoJzo6JylcbiAgICAgICAgPyB2aW9sYXRpb24ucnVsZU5hbWVcbiAgICAgICAgOiBgJHtyZXBvcnQucGx1Z2luTmFtZX06OiR7dmlvbGF0aW9uLnJ1bGVOYW1lfWA7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdmlvbGF0aW9uLnZpb2xhdGluZ0NvbnN0cnVjdHMgPz8gW10pIHtcbiAgICAgICAgYmxvY2tzLnB1c2goXG4gICAgICAgICAgYCR7U3RyaW5nKHZpb2xhdGlvbi5zZXZlcml0eSA/PyAnRVJST1InKS50b1VwcGVyQ2FzZSgpfSAke3Zpb2xhdGlvbi5kZXNjcmlwdGlvbn0gKCR7cmVwb3J0LnBsdWdpbk5hbWV9KVxcbmAgK1xuICAgICAgICAgIGAgICAke2MuY29uc3RydWN0UGF0aH0gKCR7Yy5jbG91ZEZvcm1hdGlvblJlc291cmNlPy5sb2dpY2FsSWR9KSAke2MuY29uc3RydWN0RnFufVxcbmAgK1xuICAgICAgICAgIGAgICBBY2tub3dsZWRnZSB3aXRoICcke1N0cmluZyhhY2tJZCkucmVwbGFjZSgvIC9nLCAnLScpfSdgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYmxvY2tzLmpvaW4oJ1xcblxcbicpO1xufVxuXG4vLyDjg5Xjgqnjg7zjg57jg4Pjgr/jga8gYXdzLWNkay1saWIg44Gu56eB5pyJ44OR44K544Gr44GC44KKIGBleHBvcnRzYCDjgYvjgonopovjgYjjgarjgYTjgZ/jgoHjgIFcbi8vIOOCqOODs+OCuOODs+ino+axuu+8iGxvYWRFbmdpbmXvvInjgajlkIzjgZjjgY/jg5Hjg4PjgrHjg7zjgrjjg6vjg7zjg4jjgYvjgonjga7ntbblr77jg5Hjgrnjgafoqq3jgb/ovrzjgoDjgIJcbmxldCBjYWNoZWRGb3JtYXR0ZXI6IGFueSB8IGZhbHNlIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gbG9hZEZvcm1hdHRlckNhY2hlZCgpOiBhbnkgfCB1bmRlZmluZWQge1xuICBpZiAoY2FjaGVkRm9ybWF0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZWRGb3JtYXR0ZXIgPSBsb2FkRm9ybWF0dGVyKCkgPz8gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZEZvcm1hdHRlciA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBjYWNoZWRGb3JtYXR0ZXI7XG59XG5cbi8qKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGb3JtYXR0ZXIoKTogYW55IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsaWJSb290ID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnYXdzLWNkay1saWIvcGFja2FnZS5qc29uJykpO1xuICAgIGNvbnN0IG1vZCA9IHJlcXVpcmUocGF0aC5qb2luKGxpYlJvb3QsICdjb3JlL2xpYi92YWxpZGF0aW9uL3ByaXZhdGUvbW9kZXJuLWZvcm1hdHRlci5qcycpKTtcbiAgICByZXR1cm4gdHlwZW9mIG1vZD8uZm9ybWF0VmFsaWRhdGlvblJlcG9ydHMgPT09ICdmdW5jdGlvbicgPyBtb2QgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLy8g44Ko44Oz44K444Oz77yIV0FTTe+8ieOBruWIneacn+WMluOBr+mHjeOBhOOBn+OCgeOAgeODouOCuOODpeODvOODq+ODrOODmeODq+OBp+OCreODo+ODg+OCt+ODpeOBmeOCi1xubGV0IGNhY2hlZEVuZ2luZU1vZHVsZTogYW55IHwgZmFsc2UgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBsb2FkRW5naW5lQ2FjaGVkKCk6IGFueSB8IHVuZGVmaW5lZCB7XG4gIGlmIChjYWNoZWRFbmdpbmVNb2R1bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlZEVuZ2luZU1vZHVsZSA9IGxvYWRFbmdpbmUoKSA/PyBmYWxzZTtcbiAgfVxuICByZXR1cm4gY2FjaGVkRW5naW5lTW9kdWxlID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGNhY2hlZEVuZ2luZU1vZHVsZTtcbn1cblxuLy8g44Ko44Oz44K444Oz77yIV0FTTe+8ieOBryAxIOODl+ODreOCu+OCueOBqyAxIOOBpOOBoOOBkeeUn+OBi+OBmeOAguS9nOOCiuebtOOBmeWJjeOBqyBmcmVlKCkg44GX44Gq44GE44Go44Kk44Oz44K544K/44Oz44K544GMXG4vLyDnqY3jgb/kuIrjgYzjgorjgIEyIOWAi+ebruS7pemZjeOBruani+evieOBjOi2hee3muW9ouOBq+mBheOBj+OBquOCi++8iOWun+a4rDogZnJlZSDnhKHjgZfjgacgMy44cyAtPiAxMS4ycyAtPiAyMi4xc+OAgVxuLy8g5qeL56+J5YmN44GrIGZyZWUg44GZ44KL44GoIDMuNXMgLT4gMC40c++8ieOAguODq+ODvOODq+OCu+ODg+ODiOOBjOWkieOCj+OCi++8iFN0YWdlIOOBlOOBqOOBqyBleGNsdWRlIOOBjOmBleOBhuOAgVxuLy8g44OG44K544OI44Gn6KSH5pWw44Ki44OX44Oq44KS5ZCI5oiQ44GZ44KL77yJ44Gf44Gz44Gr5L2c44KK55u044GZ44Gu44Gn44CB44Kt44Oj44OD44K344Ol44GvIDEg44K544Ot44OD44OI44Gn6Laz44KK44KL44CCXG5sZXQgY2FjaGVkUmVnb0VuZ2luZTogeyBrZXk6IHN0cmluZzsgZW5naW5lOiBhbnkgfSB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHJlZ29FbmdpbmVDYWNoZWQoZW5naW5lTW9kdWxlOiBhbnksIHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSwgcmVnaW9uPzogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nKTogYW55IHtcbiAgY29uc3Qga2V5ID0gYCR7cmVnaW9uID8/ICcnfXwke2FjY291bnQgPz8gJyd9fCR7cnVsZXMubWFwKChyKSA9PiByLmlkKS5qb2luKCcsJyl9YDtcbiAgaWYgKGNhY2hlZFJlZ29FbmdpbmU/LmtleSAhPT0ga2V5KSB7XG4gICAgY2FjaGVkUmVnb0VuZ2luZT8uZW5naW5lPy5mcmVlPy4oKTtcbiAgICBjYWNoZWRSZWdvRW5naW5lID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN1c3RvbVJ1bGVzID0gW1xuICAgICAgLi4uQlVORExFRF9MSUJTLm1hcCgobCkgPT4gKHsgbmFtZTogbC5uYW1lLCBjb250ZW50OiBsLnJlZ28gfSkpLFxuICAgICAgLi4ubWVyZ2VSdWxlTW9kdWxlcyhydWxlcyksXG4gICAgXTtcbiAgICBpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGN1c3RvbVJ1bGVzLnB1c2goZGVwbG95RW52aXJvbm1lbnRNb2R1bGUocmVnaW9uLCBhY2NvdW50KSk7XG4gICAgfVxuICAgIGNhY2hlZFJlZ29FbmdpbmUgPSB7IGtleSwgZW5naW5lOiBuZXcgZW5naW5lTW9kdWxlLlJlZ29FbmdpbmUoeyBjdXN0b21SdWxlcyB9KSB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRSZWdvRW5naW5lLmVuZ2luZTtcbn1cblxuLy8g6Kaz5ris44Oi44O844OJ77yIZW5mb3JjZTogZmFsc2XvvInjga8gQ0RLIOe1hOOBv+i+vOOBv+OBriBDbG91ZEZvcm1hdGlvblZhbGlkYXRlUGx1Z2luIOOBq+ebuOS5l+OCiuOBmeOCi+OAglxuLy8g44GC44Gh44KJ44Gv44Kz44Oz44K544OI44Op44Kv44K/44Gn44Ko44Oz44K444Oz44KSIDEg44Gk5L2c44Gj44GmIGZyZWUoKSDjgZfjgarjgYTjga7jgafjgIHlkIzjgZjjg5fjg63jgrvjgrnjgacgQXBwIOOCklxuLy8g5L2c44KK55u044GZ44Gf44Gz44Gr44Kk44Oz44K544K/44Oz44K544GM56mN44G/5LiK44GM44KK44CBcmVnb0VuZ2luZUNhY2hlZCDjgajlkIzjgZjotoXnt5rlvaLjga7mgqrljJbjgpLotbfjgZPjgZlcbi8vIO+8iOWun+a4rCAyMDI2LTA5LTEzOiDlkIzjgZjjg6vjg7zjg6vjgrvjg4Pjg4jjgacgNCDlm54gc3ludGgg44GX44GmIDM2cyAtPiA5NXMgLT4gMTMxcyAtPiAxNzhz77yJ44CCXG4vLyDjg6vjg7zjg6vjgrvjg4Pjg4jjgYzlpInjgo/jgonjgarjgYTpmZDjgorjg5fjg6njgrDjgqTjg7PjgZTjgajkvb/jgYTlm57jgZnjgIJcbi8vIHBvbnl0YWlsOiDjgq3jg7zjgYzlpInjgo/jgaPjgZ/jgajjgY3jgavlj6TjgYTjgqjjg7Pjgrjjg7Pjga8gZnJlZSgpIOOBl+OBquOBhO+8iOOCqOODs+OCuOODs+OBryBDREsg5YG044GuXG4vLyBwcml2YXRlIOODleOCo+ODvOODq+ODieOBp+OAgeinpuOCi+OBq+OBr+WGhemDqOWun+ijheOBq+aJi+OCkuWFpeOCjOOCi+OBk+OBqOOBq+OBquOCi++8ieOAguioreWumumBleOBhOOBriBTdGFnZSDjgYxcbi8vIE4g5YCL44GC44KM44GwIE4g5YCL56mN44KA44GM44CB5a6f44Ki44OX44Oq44Gn44GvIDHjgJwyIOWAi+OAguepjeOBv+S4iuOBjOOCiuOBjOWVj+mhjOOBq+OBquOCi+OBquOCieOAgeOBneOBruOBqOOBjeOBq1xuLy8g44Ki44OD44OX44K544OI44Oq44O844Og44G4IGZyZWUvZGlzcG9zZSDjgpLlhaXjgozjgabjgoLjgonjgYbjgIJcbmxldCBjYWNoZWRPYnNlcnZlUGx1Z2luOiB7IGtleTogc3RyaW5nOyBwbHVnaW46IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4gfSB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUGx1Z2luQ2FjaGVkKHJ1bGVzOiBCdW5kbGVkUnVsZURhdGFbXSk6IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4ge1xuICBjb25zdCBrZXkgPSBydWxlcy5tYXAoKHIpID0+IHIuaWQpLmpvaW4oJywnKTtcbiAgaWYgKGNhY2hlZE9ic2VydmVQbHVnaW4/LmtleSAhPT0ga2V5KSB7XG4gICAgY2FjaGVkT2JzZXJ2ZVBsdWdpbiA9IHtcbiAgICAgIGtleSxcbiAgICAgIHBsdWdpbjogbmV3IENsb3VkRm9ybWF0aW9uVmFsaWRhdGVQbHVnaW4oe1xuICAgICAgICByZWdvUnVsZXM6IFtcbiAgICAgICAgICAuLi5CVU5ETEVEX0xJQlMubWFwKChsKSA9PiAoeyBuYW1lOiBsLm5hbWUsIGNvbnRlbnQ6IGwucmVnbyB9KSksXG4gICAgICAgICAgLi4ubWVyZ2VSdWxlTW9kdWxlcyhydWxlcyksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBjYWNoZWRPYnNlcnZlUGx1Z2luLnBsdWdpbjtcbn1cblxuLyoqIOWFqOODq+ODvOODq+OBq+WFsemAmuOBriByZWdvIOODmOODg+ODgOOAgmJ1bmRsZS1ydWxlcyDjgYwgcGFja2FnZSDlkI3jgaggaW1wb3J0IOOCkiAxIOeorumhnuOBq+W8t+WItuOBl+OBpuOBhOOCi+OAgiAqL1xuY29uc3QgUkVHT19IRUFERVIgPSAncGFja2FnZSBjZGtfcHJlZmxpZ2h0XFxuXFxuaW1wb3J0IHJlZ28udjFcXG4nO1xuXG4vKipcbiAqIOODq+ODvOODq+OCkiBzZXJ2aWNlIOOBlOOBqOOBqyAxIOODouOCuOODpeODvOODq+OBuOOBvuOBqOOCgeOCi+OAglxuICpcbiAqIOOCs+ODs+ODkeOCpOODq+aZgumWk+OBr+ODq+ODvOODq+acrOS9k+OBrumHj+OCiOOCiuODouOCuOODpeODvOODq+aVsOOBp+WKueOBhOOBpuOBj+OCi++8iOWun+a4rCAxODQ0IOODq+ODvOODq+OCklxuICogMSDjg6vjg7zjg6sgMSDjg6Ljgrjjg6Xjg7zjg6vjgafovInjgZvjgovjgajntIQgNi4yc+OAgXNlcnZpY2Ug5Y2Y5L2N44GuIDM5IOODouOCuOODpeODvOODq+OBq+eVs+OCgOOBqOe0hCAxLjBz77yJ44CCXG4gKiDjg6vjg7zjg6vjga/jgoLjgajjgoLjgajlhajpg6ggYHBhY2thZ2UgY2RrX3ByZWZsaWdodGAg44Gq44Gu44Gn44CBUmVnbyDjgYvjgonopovjgozjgbDntZDlkIjjgZfjgabjgoJcbiAqIOOBl+OBquOBj+OBpuOCguWQjOOBmCAxIOODkeODg+OCseODvOOCuOKAlOKAlOODouOCuOODpeODvOODq+Wig+eVjOOBq+aEj+WRs+irluOBr+eEoeOBhOOAguOBl+OBn+OBjOOBo+OBpueVs+OCgeOCi+OBruOBoOOBjOOAgVxuICog6KOP44KS6L+U44Gb44Gw44CM5Yil44Or44O844Or44GM5ZCM44GY5ZCN5YmN44Gu44OY44Or44OR44O844KS5a6a576p44GZ44KL44Go6buZ44Gj44GmIDEg44Gk44Gu6KaP5YmH44Gr5ZCI5rWB44GZ44KL44CNXG4gKiDjgajjgYTjgYbljbHpmbrjgoLntZDlkIjliY3jgYvjgonlrZjlnKjjgZnjgovjgIJidW5kbGUtcnVsZXMg44GM44Or44O844Or6ZaT44Gu44OI44OD44OX44Os44OZ44Or5ZCN6KGd56qB44KSXG4gKiDlvL7jgYTjgabjgYTjgovjga7jga/jgZ3jga7jgZ/jgoHvvIjlhbHmnInjgZfjgZ/jgYTlrprnvqnjga8gcnVsZXMvX2xpYi8g44Gr572u44GP77yJ44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSdWxlTW9kdWxlcyhydWxlczogQnVuZGxlZFJ1bGVEYXRhW10pOiB7IG5hbWU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH1bXSB7XG4gIGNvbnN0IGJ5U2VydmljZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJ1bGVzKSB7XG4gICAgY29uc3QgYm9keSA9IHIucmVnby5yZXBsYWNlKC9eKD86cGFja2FnZXxpbXBvcnQpXFxzLipcXG4vZ20sICcnKTtcbiAgICBieVNlcnZpY2Uuc2V0KHIuc2VydmljZSwgWy4uLmJ5U2VydmljZS5nZXQoci5zZXJ2aWNlKSA/PyBbXSwgYm9keV0pO1xuICB9XG4gIHJldHVybiBbLi4uYnlTZXJ2aWNlXS5tYXAoKFtzZXJ2aWNlLCBib2RpZXNdKSA9PiAoe1xuICAgIG5hbWU6IGBfcGZfc2VydmljZV8ke3NlcnZpY2V9YCxcbiAgICBjb250ZW50OiBSRUdPX0hFQURFUiArIGJvZGllcy5qb2luKCdcXG4nKSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIOODhuODs+ODl+ODrOODvOODiOe+pOOBq+WHuuOBpuOBj+OCi+ODquOCveODvOOCueOCv+OCpOODl+OAguWIiOOCiui+vOOBv+OBq+S9v+OBiOOBquOBhOODhuODs+ODl+ODrOODvOODiOOBjCAxIOaemuOBp+OCguOBguOCjOOBsFxuICogdW5kZWZpbmVkIOOCkui/lOOBl+OAgeWIiOOCiui+vOOBv+OBneOBruOCguOBruOCkuirpuOCgeOCi++8iOS9leOBjOi8ieOBo+OBpuOBhOOCi+OBi+WIhuOBi+OCieOBquOBhOOBvuOBvuiQveOBqOOBmeOBqOOAgVxuICog44Or44O844Or44GM6buZ44Gj44Gm55m654Gr44GX44Gq44GP44Gq44KLID0gZW5mb3JjZSDjgavjgajjgaPjgabmnIDmgqrjga7lo4rjgozmlrnjgavjgarjgovjgZ/jgoHvvInjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZVJlc291cmNlVHlwZXModGVtcGxhdGVQYXRoczogc3RyaW5nW10pOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdGVtcGxhdGVQYXRoIG9mIHRlbXBsYXRlUGF0aHMpIHtcbiAgICBsZXQgdGVtcGxhdGU6IGFueTtcbiAgICB0cnkge1xuICAgICAgdGVtcGxhdGUgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsICd1dGY4JykpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gVHJhbnNmb3Jt77yIU0FNIOetie+8ieOBr+ODnuOCr+ODreWxlemWi+OBp+WIpeOBruODquOCveODvOOCueOBq+WMluOBkeOCi+OBruOBp+OAgeeUn+OBruODhuODs+ODl+ODrOODvOODiOOBi+OCiVxuICAgIC8vIOiqreOCgeOCi+ODquOCveODvOOCueOCv+OCpOODl+OBr+W9k+OBpuOBq+OBquOCieOBquOBhOOAglxuICAgIGlmICh0ZW1wbGF0ZT8uVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiBPYmplY3QudmFsdWVzKHRlbXBsYXRlPy5SZXNvdXJjZXMgPz8ge30pIGFzIGFueVtdKSB7XG4gICAgICAvLyBGbjo6Rm9yRWFjaCDjgarjganjgacgVHlwZSDjgYzpnZnnmoTjgavoqq3jgoHjgarjgYTjgqjjg7Pjg4jjg6rjgYzjgYLjgozjgbDoq6bjgoHjgovjgIJcbiAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2U/LlR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgdHlwZXMuYWRkKHJlc291cmNlLlR5cGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHlwZXM7XG59XG5cbi8qKlxuICog44OG44Oz44OX44Os44O844OI44Gr5Ye644Gm44GP44KL44Oq44K944O844K544K/44Kk44OX44Gr6Zai5L+C44GZ44KL44Or44O844Or44Gg44GR44KS6YG444G244CCXG4gKlxuICog44Ko44Oz44K444Oz44Gu44Kz44Oz44OR44Kk44Or5pmC6ZaT44Gv44Or44O844Or5pWw44Gn44G744G85rG644G+44KL44Gu44Gn77yI5a6f5risIDE4NDQg44Or44O844Or44Gn57SEIDQuNnPjgIFcbiAqIOWFuOWei+eahOOBquOCouODl+ODquOBq+aui+OCiyAxMDAg44Or44O844Or5YmN5b6M44Gq44KJIDAuOHMg5YmN5b6M77yJ44CB44GT44KM44GM5Zu65a6a6LK744Gu5Li744Gq5YmK44KK44Gp44GT44KN44CCXG4gKiDlronlhajmgKfjga8gbWV0YS5yZXNvdXJjZVR5cGVzIOOBruWuo+iogOOBq+S5l+OBo+OBpuOBhOOCizog44Or44O844Or44GM6KaL44KL44Oq44K944O844K544K/44Kk44OX44GMXG4gKiDlrqPoqIDjgYvjgonmvI/jgozjgabjgYTjgovjgajliIjjgonjgozjgabnmbrngavjgZfjgarjgY/jgarjgovjgZ/jgoHjgIF0ZXN0L3J1bGVzLnRlc3QudHMg44GM5YWo44Or44O844Or44Gr44Gk44GE44GmXG4gKiDjgIzoh6rliIbjga4gZmFpbCDjg4bjg7Pjg5fjg6zjg7zjg4jjgafliIjjgormrovjgovjgZPjgajjgI3jgpLmpJzmn7vjgZfjgabjgYTjgovjgIJcbiAqIO+8iOODhuOCueODiOOBi+OCieOCguWIqeeUqOOBmeOCi+OBn+OCgSBleHBvcnQg44GX44Gm44GE44KL77yJXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShydWxlczogQnVuZGxlZFJ1bGVEYXRhW10sIHR5cGVzOiBTZXQ8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IEJ1bmRsZWRSdWxlRGF0YVtdIHtcbiAgaWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHJldHVybiBydWxlcztcbiAgLy8g5YiI44KL5qC55oug44GM54Sh44GE44Or44O844Or44Gv5q6L44GZOiBcIipcIu+8iOWFqOODquOCveODvOOCueWei+OBq+WKueOBj+OCv+OCsOezu+ODq+ODvOODq++8ieOBqOOAgVxuICAvLyByZXNvdXJjZVR5cGVzIOOBjOepuuOBruOCguOBru+8iOODkOODs+ODieODq+a4iOOBv+ODq+ODvOODq+OBr+mdnuepuuOBjOS/neiovOOBleOCjOOBpuOBhOOCi+OBruOBp+OAgeipsuW9k+OBmeOCi+OBruOBr1xuICAvLyDmiYvjgafntYTjgb/nq4vjgabjgZ/jg6vjg7zjg6sgPSDjg4bjgrnjg4jjgoTlsIbmnaXjga7jg4bjg7Pjg5fjg6zjg7zjg4jlsaTjg6vjg7zjg6vjgaDjgZHvvInjgIJcbiAgcmV0dXJuIHJ1bGVzLmZpbHRlcigocikgPT4gci5yZXNvdXJjZVR5cGVzLmxlbmd0aCA9PT0gMFxuICAgIHx8IHIucmVzb3VyY2VUeXBlcy5pbmNsdWRlcygnKicpXG4gICAgfHwgci5yZXNvdXJjZVR5cGVzLnNvbWUoKHQpID0+IHR5cGVzLmhhcyh0KSkpO1xufVxuXG4vKipcbiAqIEBhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUg44KS6Kej5rG644GZ44KL44CCXG4gKiDpgJrluLjjga8gYXdzLWNkay1saWIg44GMIGJ1bmRsZWREZXBlbmRlbmNpZXMg44Go44GX44Gm5ZCM5qKx44GX44Gm44GE44KL44Kz44OU44O844Gr5LmX44KL44CCXG4gKiDvvIjjg4bjgrnjg4jjgYvjgonjgoLliKnnlKjjgZnjgovjgZ/jgoEgZXhwb3J0IOOBl+OBpuOBhOOCi++8iVxuICovXG4vKipcbiAqIOOCqOODs+OCuOODs+OBrueJiOOBq+S+neOCieOBmuODhuODs+ODl+ODrOODvOODiOOCkuipleS+oeOBmeOCi+OAgjEuNy4wLWJldGHjgJwxLjkuMC1iZXRh77yIYXdzLWNkay1saWIgMi4yNjfjgJwyLjI3MCDjga5cbiAqIOWQjOaiseeJiO+8ieOBryB2YWxpZGF0ZURldGFpbGVkIOOBoOOBkeOAgTEuMTAuMCDjga8gdmFsaWRhdGVUZW1wbGF0ZSDjgaDjgZHvvIjmlLnlkI3vvInjgIExLjExLjAg5Lul6ZmN44Gv5Lih5pa544KSXG4gKiDmjIHjgaHjgIExLjEyLjEg44GnIHZhbGlkYXRlRGV0YWlsZWQg44Gv6Z2e5o6o5aWo44Gu5Yil5ZCN44Gr44Gq44Gj44Gf44CC44Os44Od44O844OI44Gu5b2i77yIZGlhZ25vc3RpY3Mg44GuXG4gKiBydWxlSWQvc2V2ZXJpdHkvc291cmNlL3Byb3BlcnR5UGF0aC9lbnRpdHkubG9naWNhbElk77yJ44Gv5Lih6ICF44Gn5ZCM44GY77yI5a6f5risIDIwMjYtMDktMjjjgIFcbiAqIDEuNy4wLWJldGEgLyAxLjEwLjAgLyAxLjEyLjEg44GnIGZhaWwg44OG44Oz44OX44Os44O844OIIDQwMCDmnKzjga4gQ1VTVE9NIOiouuaWreOBjOWujOWFqOS4gOiHtO+8ieOAglxuICog5YWI44Gr5raI44GI44KL44Gu44Gv6Z2e5o6o5aWo44Gu5YG044Gq44Gu44GnIHZhbGlkYXRlVGVtcGxhdGUg44KS5YSq5YWI44GZ44KL44CCXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRlbXBsYXRlKGVuZzogYW55LCB0ZW1wbGF0ZTogdW5rbm93biwgY29uZmlnOiBvYmplY3QpOiBhbnkge1xuICBjb25zdCBmbiA9IGVuZy52YWxpZGF0ZVRlbXBsYXRlID8/IGVuZy52YWxpZGF0ZURldGFpbGVkO1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlIGhhcyBuZWl0aGVyIHZhbGlkYXRlVGVtcGxhdGUgbm9yIHZhbGlkYXRlRGV0YWlsZWQnKTtcbiAgfVxuICByZXR1cm4gZm4uY2FsbChlbmcsIHRlbXBsYXRlLCBjb25maWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEVuZ2luZSgpOiBhbnkgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlKCdAYXdzL2Nsb3VkZm9ybWF0aW9uLXZhbGlkYXRlJyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIGZhbGwgdGhyb3VnaFxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgbGliUGtnID0gcmVxdWlyZS5yZXNvbHZlKCdhd3MtY2RrLWxpYi9wYWNrYWdlLmpzb24nKTtcbiAgICBjb25zdCBlbmdQa2cgPSByZXF1aXJlLnJlc29sdmUoJ0Bhd3MvY2xvdWRmb3JtYXRpb24tdmFsaWRhdGUvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFtwYXRoLmRpcm5hbWUobGliUGtnKV0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcXVpcmUocGF0aC5kaXJuYW1lKGVuZ1BrZykpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -89,7 +89,7 @@
89
89
  "publishConfig": {
90
90
  "access": "public"
91
91
  },
92
- "version": "0.0.173",
92
+ "version": "0.0.175",
93
93
  "jest": {
94
94
  "coverageProvider": "v8",
95
95
  "coveragePathIgnorePatterns": [