sonamu 0.8.13 → 0.8.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +2 -3
- package/dist/auth/auth-generator.d.ts +8 -0
- package/dist/auth/auth-generator.d.ts.map +1 -1
- package/dist/auth/auth-generator.js +33 -1
- package/dist/auth/better-auth-entities.d.ts.map +1 -1
- package/dist/auth/better-auth-entities.js +12 -2
- package/dist/bin/cli.js +18 -3
- package/dist/cone/cone-generator.js +10 -4
- package/dist/database/knex.d.ts.map +1 -1
- package/dist/database/knex.js +64 -2
- package/dist/database/puri.d.ts +9 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +42 -1
- package/dist/database/puri.types.d.ts +2 -0
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +6 -2
- package/dist/entity/entity-manager.d.ts +149 -1
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +68 -4
- package/dist/migration/__tests__/code-generation.search-text.test.js +435 -0
- package/dist/migration/code-generation.d.ts.map +1 -1
- package/dist/migration/code-generation.js +696 -32
- package/dist/migration/migration-set.js +3 -1
- package/dist/migration/postgresql-schema-reader.d.ts +16 -2
- package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
- package/dist/migration/postgresql-schema-reader.js +281 -7
- package/dist/stream/sse.js +5 -3
- package/dist/template/__tests__/generated.template.search-text.test.js +99 -0
- package/dist/template/generated.template.test-d.js +24 -0
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +2 -2
- package/dist/template/implementations/init_types.template.d.ts.map +1 -1
- package/dist/template/implementations/init_types.template.js +11 -3
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +6 -2
- package/dist/testing/dev-test-routes.d.ts.map +1 -1
- package/dist/testing/dev-test-routes.js +5 -3
- package/dist/testing/fixture-generator.d.ts +13 -0
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +105 -8
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +19 -2
- package/dist/types/__tests__/entity-json-schema-search-text.test.js +256 -0
- package/dist/types/types.d.ts +494 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +117 -13
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +14 -2
- package/dist/ui/cdd-service.d.ts +16 -14
- package/dist/ui/cdd-service.d.ts.map +1 -1
- package/dist/ui/cdd-service.js +145 -37
- package/dist/ui/cdd-types.d.ts +60 -0
- package/dist/ui/cdd-types.d.ts.map +1 -0
- package/dist/ui/cdd-types.js +3 -0
- package/dist/ui-web/assets/index-D4XFBV-f.css +1 -0
- package/dist/ui-web/assets/{index-CQ_S40bD.js → index-D_19-Pi4.js} +87 -87
- package/dist/ui-web/index.html +2 -2
- package/package.json +7 -3
- package/src/api/sonamu.ts +1 -2
- package/src/auth/auth-generator.ts +38 -0
- package/src/auth/better-auth-entities.ts +18 -1
- package/src/bin/cli.ts +15 -1
- package/src/cone/cone-generator.ts +9 -3
- package/src/database/knex.ts +62 -4
- package/src/database/puri.ts +71 -0
- package/src/database/puri.types.ts +2 -0
- package/src/entity/entity-manager.ts +95 -3
- package/src/migration/__tests__/code-generation.search-text.test.ts +390 -0
- package/src/migration/code-generation.ts +848 -34
- package/src/migration/migration-set.ts +2 -0
- package/src/migration/postgresql-schema-reader.ts +366 -9
- package/src/skills/sonamu/auth-migration.md +80 -0
- package/src/skills/sonamu/cdd.md +148 -28
- package/src/skills/sonamu/cone.md +16 -0
- package/src/skills/sonamu/entity-relations.md +1 -1
- package/src/skills/sonamu/fixture-cli.md +4 -0
- package/src/skills/sonamu/frontend.md +65 -0
- package/src/skills/sonamu/migration.md +3 -1
- package/src/skills/sonamu/model.md +28 -0
- package/src/skills/sonamu/workflow.md +12 -5
- package/src/stream/sse.ts +4 -2
- package/src/template/__tests__/generated.template.search-text.test.ts +89 -0
- package/src/template/generated.template.test-d.ts +46 -0
- package/src/template/implementations/generated.template.ts +4 -1
- package/src/template/implementations/init_types.template.ts +20 -5
- package/src/template/zod-converter.ts +5 -0
- package/src/testing/dev-test-routes.ts +4 -2
- package/src/testing/fixture-generator.ts +157 -9
- package/src/testing/fixture-manager.ts +15 -1
- package/src/types/__tests__/entity-json-schema-search-text.test.ts +179 -0
- package/src/types/types.ts +168 -12
- package/src/ui/api.ts +24 -1
- package/src/ui/cdd-service.ts +195 -55
- package/src/ui/cdd-types.ts +73 -0
- package/dist/ui-web/assets/index-egkMxKos.css +0 -1
package/dist/database/puri.js
CHANGED
|
@@ -3,6 +3,15 @@ import chalk from "chalk";
|
|
|
3
3
|
import inflection from "inflection";
|
|
4
4
|
import { EntityManager } from "../entity/entity-manager.js";
|
|
5
5
|
import { Naite } from "../naite/naite.js";
|
|
6
|
+
import { FUZZY_OPERATORS } from "./puri.types.js";
|
|
7
|
+
function normalizeFuzzyOperator(operator) {
|
|
8
|
+
const normalized = operator?.trim() ?? "<%";
|
|
9
|
+
const fuzzyOperator = FUZZY_OPERATORS.find((candidate)=>candidate === normalized);
|
|
10
|
+
if (!fuzzyOperator) {
|
|
11
|
+
throw new Error(`Invalid fuzzy operator: ${operator ?? ""}`);
|
|
12
|
+
}
|
|
13
|
+
return fuzzyOperator;
|
|
14
|
+
}
|
|
6
15
|
export class Puri {
|
|
7
16
|
knex;
|
|
8
17
|
knexQuery;
|
|
@@ -99,6 +108,24 @@ export class Puri {
|
|
|
99
108
|
_sql: `LOWER(${column})`
|
|
100
109
|
};
|
|
101
110
|
}
|
|
111
|
+
static escapeSqlLiteral(value) {
|
|
112
|
+
return value.replaceAll("'", "''");
|
|
113
|
+
}
|
|
114
|
+
static toTextOperand(column) {
|
|
115
|
+
if (typeof column === "object" && column._type === "sql_expression") {
|
|
116
|
+
return `(${column._sql})::text`;
|
|
117
|
+
}
|
|
118
|
+
return `${column}::text`;
|
|
119
|
+
}
|
|
120
|
+
static wordSimilarity(column, query) {
|
|
121
|
+
return Puri.rawNumber(`word_similarity('${Puri.escapeSqlLiteral(query)}'::text, ${Puri.toTextOperand(column)})`);
|
|
122
|
+
}
|
|
123
|
+
static similarity(column, query) {
|
|
124
|
+
return Puri.rawNumber(`similarity(${Puri.toTextOperand(column)}, '${Puri.escapeSqlLiteral(query)}'::text)`);
|
|
125
|
+
}
|
|
126
|
+
static strictWordSimilarity(column, query) {
|
|
127
|
+
return Puri.rawNumber(`strict_word_similarity('${Puri.escapeSqlLiteral(query)}'::text, ${Puri.toTextOperand(column)})`);
|
|
128
|
+
}
|
|
102
129
|
// Raw functions for SELECT
|
|
103
130
|
static rawString(sql) {
|
|
104
131
|
return {
|
|
@@ -429,6 +456,20 @@ export class Puri {
|
|
|
429
456
|
]);
|
|
430
457
|
return this;
|
|
431
458
|
}
|
|
459
|
+
whereFuzzy(column, value, options) {
|
|
460
|
+
const operator = normalizeFuzzyOperator(options?.operator);
|
|
461
|
+
const textColumnExpr = Puri.toTextOperand(column);
|
|
462
|
+
if (operator === "%") {
|
|
463
|
+
this.knexQuery.whereRaw(`${textColumnExpr} ${operator} ?::text`, [
|
|
464
|
+
value
|
|
465
|
+
]);
|
|
466
|
+
return this;
|
|
467
|
+
}
|
|
468
|
+
this.knexQuery.whereRaw(`?::text ${operator} ${textColumnExpr}`, [
|
|
469
|
+
value
|
|
470
|
+
]);
|
|
471
|
+
return this;
|
|
472
|
+
}
|
|
432
473
|
// WHERE RAW
|
|
433
474
|
whereRaw(sql, bindings) {
|
|
434
475
|
this.knexQuery.whereRaw(sql, bindings);
|
|
@@ -931,4 +972,4 @@ export class JoinClauseGroup {
|
|
|
931
972
|
}
|
|
932
973
|
}
|
|
933
974
|
|
|
934
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogUHVyaeuKlCB0aGVuYWJsZSDsnbjthLDtjpjsnbTsiqTrpbwg6rWs7ZiE7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgVGFibGVTcGVjIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXZhaWxhYmxlQ29sdW1ucyxcbiAgQ29sdW1uS2V5cyxcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBFeHBhbmQsXG4gIEV4dHJhY3RDb2x1bW5UeXBlLFxuICBGdWxsdGV4dENvbHVtbnMsXG4gIEluc2VydERhdGEsXG4gIEluc2VydFJlc3VsdCxcbiAgTGVmdEpvaW5lZE1hcmtlcixcbiAgTGVmdEpvaW5NYXJrZXJGb3IsXG4gIE51bWVyaWNDb2x1bW5zLFxuICBPbkNvbmZsaWN0QWN0aW9uLFxuICBQYXJzZVNlbGVjdE9iamVjdCxcbiAgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgU2VsZWN0QWxsUmVzdWx0LFxuICBTZWxlY3RPYmplY3QsXG4gIFNpbmdsZVRhYmxlVmFsdWUsXG4gIFNxbEV4cHJlc3Npb24sXG4gIFRzSGlnaGxpZ2h0T3B0aW9ucyxcbiAgVHNRdWVyeUNvbmZpZyxcbiAgVHNRdWVyeU9wdGlvbnMsXG4gIFRzUmFua09wdGlvbnMsXG4gIFZlY3RvckNvbHVtbnMsXG4gIFdoZXJlQ29uZGl0aW9uLFxuICBXaGVyZU9wZXJhdG9yLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENsZWFyU3RhdGVtZW50cyB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUmVzdWx0PiB7XG4gIHByaXZhdGUga25leFF1ZXJ5OiBLbmV4LlF1ZXJ5QnVpbGRlcjtcbiAgcHJpdmF0ZSB0YWJsZVNwZWM6IFRhYmxlU3BlYyB8IG51bGwgPSBudWxsO1xuXG4gIC8vIOyDneyEseyekCDsi5zqt7jri4jsspjrk6RcbiAgY29uc3RydWN0b3Ioa25leDogS25leCwgdGFibGVOYW1lOiBzdHJpbmcpO1xuICBjb25zdHJ1Y3RvcihrbmV4OiBLbmV4LCB0YWJsZVNvdXJjZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgUHVyaTxUU2NoZW1hLCBhbnksIGFueT4+KTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXg6IEtuZXgsXG4gICAgdGFibGVOYW1lT3JTb3VyY2U6IGFueSxcbiAgKSB7XG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gQ2FzZTogbmV3IFB1cmkoa25leCwgXCJ1c2Vyc1wiKVxuICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXgodGFibGVOYW1lT3JTb3VyY2UpLmZyb20odGFibGVOYW1lT3JTb3VyY2UpO1xuICAgICAgdGhpcy50YWJsZVNwZWMgPSB0aGlzLnNhZmVHZXRUYWJsZVNwZWModGFibGVOYW1lT3JTb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU291cmNlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGFibGVOYW1lT3JTb3VyY2UpO1xuICAgICAgaWYgKGVudHJpZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIHNwZWMgbXVzdCBoYXZlIGV4YWN0bHkgb25lIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0KGVudHJpZXNbMF0pO1xuICAgICAgY29uc3QgW2FsaWFzLCBzb3VyY2VdID0gZW50cmllc1swXTtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4KHNvdXJjZSkuZnJvbSh7IFthbGlhc106IHNvdXJjZSB9KTtcbiAgICAgICAgdGhpcy50YWJsZVNwZWMgPSB0aGlzLnNhZmVHZXRUYWJsZVNwZWMoc291cmNlKTtcbiAgICAgIH0gZWxzZSBpZiAoc291cmNlIGluc3RhbmNlb2YgUHVyaSkge1xuICAgICAgICBjb25zdCBzdWJxdWVyeUJ1aWxkZXIgPSBzb3VyY2UucmF3UXVlcnkoKTtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkgPSB0aGlzLmtuZXguZnJvbShzdWJxdWVyeUJ1aWxkZXIuYXMoYWxpYXMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgIH1cbiAgfVxuXG4gIHNhZmVHZXRUYWJsZVNwZWModGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZVNwZWMgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0VGFibGVTcGVjKHRhYmxlTmFtZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWMgU1FMIGhlbHBlciBmdW5jdGlvbnMgZm9yIFNFTEVDVFxuICBzdGF0aWMgY291bnQoY29sdW1uOiBzdHJpbmcgPSBcIipcIik6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBDT1VOVCgke2NvbHVtbn0pOjppbnRlZ2VyYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBzdW0oY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgU1VNKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGF2Zyhjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBBVkcoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbWF4KGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYE1BWCgke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBtaW4oY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgTUlOKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIGNvbmNhdCguLi5hcmdzOiBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IGBDT05DQVQoJHthcmdzLmpvaW4oXCIsIFwiKX0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB1cHBlcihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IGBVUFBFUigke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBsb3dlcihjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJzdHJpbmdcIixcbiAgICAgIF9zcWw6IGBMT1dFUigke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG5cbiAgLy8gUmF3IGZ1bmN0aW9ucyBmb3IgU0VMRUNUXG4gIHN0YXRpYyByYXdTdHJpbmcoc3FsOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcInN0cmluZ1wiLCBfc3FsOiBzcWwgfTtcbiAgfVxuICBzdGF0aWMgcmF3U3RyaW5nQXJyYXkoc3FsOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nW11cIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwic3RyaW5nW11cIiwgX3NxbDogc3FsIH07XG4gIH1cbiAgc3RhdGljIHJhd051bWJlcihzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwibnVtYmVyXCIsIF9zcWw6IHNxbCB9O1xuICB9XG4gIHN0YXRpYyByYXdCb29sZWFuKHNxbDogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcImJvb2xlYW5cIj4ge1xuICAgIHJldHVybiB7IF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsIF9yZXR1cm46IFwiYm9vbGVhblwiLCBfc3FsOiBzcWwgfTtcbiAgfVxuICBzdGF0aWMgcmF3RGF0ZShzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJkYXRlXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImRhdGVcIiwgX3NxbDogc3FsIH07XG4gIH1cblxuICAvKipcbiAgICogRlRTIOqygOyDieyWtCDtlZjsnbTrnbzsnbTtjIVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgdGl0bGU6IFB1cmkuaGlnaGxpZ2h0KFwicG9zdHMudGl0bGVcIiwgc2VhcmNoKSxcbiAgICogICBjb250ZW50OiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLmNvbnRlbnRcIiwgc2VhcmNoLCB7XG4gICAqICAgICBzdGFydFNlbDogXCI8bWFyaz5cIixcbiAgICogICAgIHN0b3BTZWw6IFwiPC9tYXJrPlwiLFxuICAgKiAgICAgbWF4RnJhZ21lbnRzOiAzLFxuICAgKiAgIH0pLFxuICAgKiB9KVxuICAgKi9cbiAgc3RhdGljIHRzSGlnaGxpZ2h0KFxuICAgIGNvbHVtbjogc3RyaW5nLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgX29wdGlvbnM/OiBUc0hpZ2hsaWdodE9wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4ge1xuICAgIGNvbnN0IHsgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLCBjb25maWcgPSBcInNpbXBsZVwiLCAuLi5vcHRpb25zIH0gPSBfb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IGhsT3B0aW9uUGFydHMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGAke2luZmxlY3Rpb24uY2FtZWxpemUoa2V5KX09JHt2YWx1ZX1gO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaGxPcHRpb25zID0gaGxPcHRpb25QYXJ0cy5sZW5ndGggPiAwID8gYCwgJyR7aGxPcHRpb25QYXJ0cy5qb2luKFwiLCBcIil9J2AgOiBcIlwiO1xuXG4gICAgLy8gVE9ETzogcmF3QmluZGluZyDrqZTshJzrk5wg66eM65Ok7Ja07IScIFhTUyDrsKnsp4BcbiAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmcoXG4gICAgICBgdHNfaGVhZGxpbmUoJyR7Y29uZmlnfScsICR7Y29sdW1ufSwgJHtwYXJzZXJ9KCcke2NvbmZpZ30nLCAnJHtxdWVyeX0nKSR7aGxPcHRpb25zfSlgLFxuICAgICk7XG4gIH1cblxuICAvLyB0c19yYW5rXG4gIHN0YXRpYyB0c1JhbmsoY29sdW1uOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBUc1JhbmtPcHRpb25zKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkuX3RzUmFuayhcInRzX3JhbmtcIiwgY29sdW1uLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyB0c19yYW5rX2NkXG4gIHN0YXRpYyB0c1JhbmtDZChjb2x1bW46IHN0cmluZywgcXVlcnk6IHN0cmluZywgb3B0aW9ucz86IFRzUmFua09wdGlvbnMpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5fdHNSYW5rKFwidHNfcmFua19jZFwiLCBjb2x1bW4sIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBfdHNSYW5rKFxuICAgIHR5cGU6IFwidHNfcmFua1wiIHwgXCJ0c19yYW5rX2NkXCIsXG4gICAgY29sdW1uOiBzdHJpbmcsXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNSYW5rT3B0aW9ucyxcbiAgKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgY29uc3Qge1xuICAgICAgcGFyc2VyID0gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiLFxuICAgICAgY29uZmlnID0gXCJzaW1wbGVcIixcbiAgICAgIG5vcm1hbGl6YXRpb24sXG4gICAgICB3ZWlnaHRzLFxuICAgIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3Qgd2VpZ2h0Q2xhdXNlID0gd2VpZ2h0cyA/IGBBUlJBWVske3dlaWdodHMuam9pbihcIiwgXCIpfV0sIGAgOiBcIlwiO1xuICAgIGNvbnN0IG5vcm1hbGl6YXRpb25DbGF1c2UgPSBub3JtYWxpemF0aW9uID8gYCwgJHtub3JtYWxpemF0aW9ufWAgOiBcIlwiO1xuXG4gICAgcmV0dXJuIFB1cmkucmF3TnVtYmVyKFxuICAgICAgYCR7dHlwZX0oJHt3ZWlnaHRDbGF1c2V9JHtjb2x1bW59LCAke3BhcnNlcn0oJyR7Y29uZmlnfScsICcke3F1ZXJ5fScpJHtub3JtYWxpemF0aW9uQ2xhdXNlfSlgLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUEdyb29uZ2EgRnVsbFRleHQg7J24642x7IqkIOqygOyDiSDsoJDsiJhcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgc2NvcmU6IFB1cmkuc2NvcmUoKSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyBzY29yZSgpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5yYXdOdW1iZXIoXCJwZ3Jvb25nYV9zY29yZSh0YWJsZW9pZCwgY3RpZClcIik7XG4gIH1cblxuICAvKipcbiAgICogUEdyb29uZ2EgRnVsbFRleHQg7J24642x7IqkIOqygOyDiSDtlZjsnbTrnbzsnbTtjIVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLnNlbGVjdCh7XG4gICAqICAgdGl0bGU6IFB1cmkuaGlnaGxpZ2h0KFwicG9zdHMudGl0bGVcIiwgc2VhcmNoKSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyBoaWdobGlnaHQoY29sdW1uOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj47XG4gIHN0YXRpYyBoaWdobGlnaHQoY29sdW1uczogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFNxbEV4cHJlc3Npb248XCJzdHJpbmdbXVwiPjtcblxuICBzdGF0aWMgaGlnaGxpZ2h0KFxuICAgIGNvbHVtbk9yQ29sdW1uczogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgcXVlcnk6IHN0cmluZyB8IHN0cmluZ1tdLFxuICApOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1tdXCI+IHtcbiAgICBjb25zdCBxdWVyeUNsYXVzZSA9IGBBUlJBWVskeyhBcnJheS5pc0FycmF5KHF1ZXJ5KSA/IHF1ZXJ5IDogW3F1ZXJ5XSkubWFwKChxKSA9PiBgJyR7cX0nYCkuam9pbihcIixcIil9XWA7XG5cbiAgICAvLyDri6jsnbwg7Lus65+87J24IOqyveyasFxuICAgIGlmICh0eXBlb2YgY29sdW1uT3JDb2x1bW5zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmcoYHBncm9vbmdhX2hpZ2hsaWdodF9odG1sKCR7Y29sdW1uT3JDb2x1bW5zfSwgJHtxdWVyeUNsYXVzZX0pYCk7XG4gICAgfVxuXG4gICAgLy8g7Lus65+8IOuwsOyXtOyduCDqsr3smrBcbiAgICByZXR1cm4gUHVyaS5yYXdTdHJpbmdBcnJheShcbiAgICAgIGBwZ3Jvb25nYV9oaWdobGlnaHRfaHRtbChBUlJBWVske2NvbHVtbk9yQ29sdW1ucy5qb2luKFwiLFwiKX1dLCAke3F1ZXJ5Q2xhdXNlfSlgLFxuICAgICk7XG4gIH1cblxuICAvLyBTRUxFQ1QgKG92ZXJ3cml0ZSlcbiAgc2VsZWN0PFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4+KFxuICAgIHNlbGVjdE9iajogVFNlbGVjdCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBQYXJzZVNlbGVjdE9iamVjdDxUVGFibGVzLCBUU2VsZWN0Pj4ge1xuICAgIC8vIOykkeyyqSDqsJ3ssrTrpbwgZmxhdO2VmOqyjCDrs4DtmZhcbiAgICBjb25zdCBmbGF0U2VsZWN0ID0gdGhpcy5mbGF0dGVuU2VsZWN0KHNlbGVjdE9iaik7XG5cbiAgICBjb25zdCBzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb2x1bW5PckZ1bmN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmbGF0U2VsZWN0KSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5PckZ1bmN0aW9uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbk9yRnVuY3Rpb24uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIikge1xuICAgICAgICAvLyBTUUwg7ZWo7IiY7J24IOqyveyasFxuICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2godGhpcy5rbmV4LnJhdyhgJHtjb2x1bW5PckZ1bmN0aW9uLl9zcWx9IGFzIFwiJHthbGlhc31cImApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOydvOuwmCDsu6zrn7zsnbgg6rK97JqwXG4gICAgICAgIGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW5PckZ1bmN0aW9uIGFzIHN0cmluZztcbiAgICAgICAgaWYgKGFsaWFzID09PSBjb2x1bW5QYXRoKSB7XG4gICAgICAgICAgLy8gYWxpYXPsmYAg7Lus65+866qF7J20IOqwmeycvOuptCBhbGlhcyDsg53rnrVcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goY29sdW1uUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYWxpYXMg7KeA7KCVXG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGAke2NvbHVtblBhdGh9IGFzICR7YWxpYXN9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2VsZWN0Q2xhdXNlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIOykkeyyqSDqsJ3ssrTrpbwgZmxhdCDqsJ3ssrTroZwg67OA7ZmYXG4gICAqIOyYiDogeyBwYXJlbnQ6IHsgaWQ6IFwicGFyZW50LmlkXCIsIG5hbWU6IFwicGFyZW50Lm5hbWVcIiB9IH1cbiAgICogICDihpIgeyBwYXJlbnRfX2lkOiBcInBhcmVudC5pZFwiLCBwYXJlbnRfX25hbWU6IFwicGFyZW50Lm5hbWVcIiB9XG4gICAqL1xuICBwcml2YXRlIGZsYXR0ZW5TZWxlY3Qoc2VsZWN0T2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVmaXggPSBcIlwiKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgZmxhdFNlbGVjdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2VsZWN0T2JqKSkge1xuICAgICAgY29uc3QgZnVsbEtleSA9IHByZWZpeCA/IGAke3ByZWZpeH1fXyR7a2V5fWAgOiBrZXk7XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIShcIl90eXBlXCIgaW4gdmFsdWUpKSB7XG4gICAgICAgIC8vIOykkeyyqSDqsJ3ssrTsnbgg6rK97JqwIC0g7J6s6reAIOyymOumrFxuICAgICAgICBjb25zdCBuZXN0ZWQgPSB0aGlzLmZsYXR0ZW5TZWxlY3QodmFsdWUsIGZ1bGxLZXkpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZsYXRTZWxlY3QsIG5lc3RlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDsnbzrsJgg6rCS7J24IOqyveyasCAo7Lus65+8IOqyveuhnCDrmJDripQgU3FsRXhwcmVzc2lvbilcbiAgICAgICAgZmxhdFNlbGVjdFtmdWxsS2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmbGF0U2VsZWN0O1xuICB9XG5cbiAgLy8gU0VMRUNUIChzZWxlY3TripQgb3ZlcndyaXRlLCBhcHBlbmRTZWxlY3TripQgYXBwZW5kKVxuICBhcHBlbmRTZWxlY3Q8VFNlbGVjdCBleHRlbmRzIFNlbGVjdE9iamVjdDxUVGFibGVzPj4oXG4gICAgc2VsZWN0T2JqOiBUU2VsZWN0LFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQgJiBQYXJzZVNlbGVjdE9iamVjdDxUVGFibGVzLCBUU2VsZWN0Pj4ge1xuICAgIC8vIOykkeyyqSDqsJ3ssrTrpbwgZmxhdO2VmOqyjCDrs4DtmZhcbiAgICBjb25zdCBmbGF0U2VsZWN0ID0gdGhpcy5mbGF0dGVuU2VsZWN0KHNlbGVjdE9iaik7XG5cbiAgICBjb25zdCBzZWxlY3RDbGF1c2VzOiAoc3RyaW5nIHwgS25leC5SYXcpW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2FsaWFzLCBjb2x1bW5PckZ1bmN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhmbGF0U2VsZWN0KSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5PckZ1bmN0aW9uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbk9yRnVuY3Rpb24uX3R5cGUgPT09IFwic3FsX2V4cHJlc3Npb25cIikge1xuICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2godGhpcy5rbmV4LnJhdyhgJHtjb2x1bW5PckZ1bmN0aW9uLl9zcWx9IGFzICR7YWxpYXN9YCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29sdW1uUGF0aCA9IGNvbHVtbk9yRnVuY3Rpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoYWxpYXMgPT09IGNvbHVtblBhdGgpIHtcbiAgICAgICAgICBzZWxlY3RDbGF1c2VzLnB1c2goY29sdW1uUGF0aCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGAke2NvbHVtblBhdGh9IGFzICR7YWxpYXN9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmtuZXhRdWVyeS5zZWxlY3Qoc2VsZWN0Q2xhdXNlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gU0VMRUNUICpcbiAgc2VsZWN0QWxsKCk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgU2VsZWN0QWxsUmVzdWx0PFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KFwiKlwiKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBESVNUSU5DVFxuICBkaXN0aW5jdDxUQ29sdW1ucyBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KC4uLmNvbHVtbnM6IFRDb2x1bW5zW10pOiB0aGlzO1xuICBkaXN0aW5jdCguLi5jb2x1bW5zOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmRpc3RpbmN0KC4uLihjb2x1bW5zIGFzIHN0cmluZ1tdKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBDTEVBUlxuICBjbGVhcihzdGF0ZW1lbnQ6IENsZWFyU3RhdGVtZW50cyk6IHRoaXMge1xuICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBrbmV47JeQIOyXhuyWtOyEnCDsp4HsoJEg6rWs7ZiE7ZWoXG4gIGNsZWFySm9pbihhbGlhczogc3RyaW5nKTogdGhpcyB7XG4gICAgKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHMgPSAodGhpcy5rbmV4UXVlcnkgYXMgYW55KS5fc3RhdGVtZW50cy5maWx0ZXIoKHM6IGFueSkgPT4ge1xuICAgICAgaWYgKFwiam9pblR5cGVcIiBpbiBzKSB7XG4gICAgICAgIGNvbnN0IFtfYWxpYXMsIF90YWJsZV0gPSBPYmplY3QuZW50cmllcyhzLnRhYmxlKVswXTtcbiAgICAgICAgcmV0dXJuIF9hbGlhcyAhPT0gYWxpYXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFN1YlJlc3VsdD59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIC8vIOyEnOu4jOy/vOumrOydmCBUUmVzdWx0XG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIFRUYWJsZXMg7ZmV7J6lIVxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7YWM7J2067iU66qFXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4sIC8vIO2FjOydtOu4lOuqheydtCDtgqRcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdD4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJQgKyBBbGlhcyArIOy9nOuwsVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOOiDthYzsnbTruJTrqoUgKyDsvZzrsLFcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPiwgVFJlc3VsdD47XG4gIC8vIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBqb2luKHRhYmxlTmFtZU9yU3BlYzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX19jb21tb25Kb2luKFwiam9pblwiLCB0YWJsZU5hbWVPclNwZWMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLy8gTEVGVCBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhc1xuICBsZWZ0Sm9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU3ViUmVzdWx0Pn1gLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFN1YlJlc3VsdCAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjsgLy8g7ISc67iM7L+866as7J2YIFRSZXN1bHRcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJQgKyBBbGlhc1xuICAvLyBGSyBudWxsYWJsZSDsl6zrtoDsl5Ag65Sw6528IOyekOuPmeycvOuhnCBMZWZ0Sm9pbmVkTWFya2VyIOqysOyglVxuICBsZWZ0Sm9pbjxcbiAgICBUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSxcbiAgICBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLFxuICAgIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBsZWZ0OiBUTGVmdCxcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbk1hcmtlckZvcjxUVGFibGVzLCBUTGVmdD4+LFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJTrqoVcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRMZWZ0IGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGxlZnQ6IFRMZWZ0LFxuICAgIHJpZ2h0OiBgJHtUSm9pblRhYmxlICYgc3RyaW5nfS4ke0NvbHVtbktleXM8VFNjaGVtYVtUSm9pblRhYmxlXT59YCxcbiAgKTogUHVyaTxcbiAgICBUU2NoZW1hLFxuICAgIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luTWFya2VyRm9yPFRUYWJsZXMsIFRMZWZ0Pj4sXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBMRUZUIEpPSU46IOyEnOu4jOy/vOumrCArIEFsaWFzICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQgJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iUICsgQWxpYXMgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsIFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogVEpvaW5UYWJsZSB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lOuqhSArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYT4oXG4gICAgdGFibGVOYW1lOiBUSm9pblRhYmxlLFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdPj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pblRhYmxlLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU4g7Iuk7KCcIOq1rO2YhFxuICBsZWZ0Sm9pbih0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fY29tbW9uSm9pbihcImxlZnRKb2luXCIsIHRhYmxlTmFtZU9yU3BlYywgLi4uYXJncyk7XG4gIH1cblxuICBfX2NvbW1vbkpvaW4oam9pblR5cGU6IFwiam9pblwiIHwgXCJsZWZ0Sm9pblwiLCB0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gQ2FzZSAxOiBqb2luKFwicG9zdHNcIiwgLi4uKVxuICAgICAgY29uc3QgdGFibGVOYW1lID0gdGFibGVOYW1lT3JTcGVjO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgY2FsbGJhY2spXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHRhYmxlTmFtZSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBqb2luKFwicG9zdHNcIiwgbGVmdCwgcmlnaHQpXG4gICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0odGFibGVOYW1lLCBsZWZ0LCByaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTcGVjID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAvLyBDYXNlIDI6IGpvaW4oeyBhbGlhczogXCJ0YWJsZVwiIH0sIC4uLikgb3Igam9pbih7IGFsaWFzOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGFibGVOYW1lT3JTcGVjKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFtbYWxpYXMsIHNwZWNdXSA9IGVudHJpZXM7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3BlYyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyDthYzsnbTruJQ6IGpvaW4oeyBwOiBcInBvc3RzXCIgfSwgLi4uKVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgKGpvaW5DbGF1c2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBKb2luQ2xhdXNlR3JvdXAoam9pbkNsYXVzZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNpbXBsZVxuICAgICAgICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSBhcmdzO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh7IFthbGlhc106IHNwZWMgfSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNwZWMgaW5zdGFuY2VvZiBQdXJpKSB7XG4gICAgICAgIC8vIOyEnOu4jOy/vOumrDogam9pbih7IHNxOiBzdWJxdWVyeSB9LCAuLi4pXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gQ2FsbGJhY2tcbiAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHNwZWMucmF3UXVlcnkoKS5hcyhhbGlhcyksIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW1wbGVcbiAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oc3BlYy5yYXdRdWVyeSgpLmFzKGFsaWFzKSwgbGVmdCwgcmlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYXJndW1lbnRzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkU6IOqwneyytCAtIOyCrOyaqTogLndoZXJlKHsgXCJ1LmlkXCI6IDEsIFwidS5zdGF0dXNcIjogXCJhY3RpdmVcIiB9KVxuICB3aGVyZShjb25kaXRpb25zOiBXaGVyZUNvbmRpdGlvbjxUVGFibGVzPik6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgMSksIC53aGVyZShcInUuaWRcIiwgbnVsbClcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIFdIRVJFOiDsu6zrn7wgLSDsgqzsmqk6IC53aGVyZShcInUuaWRcIiwgXCI+XCIsIDEwKSwgLndoZXJlKFwidS5pZFwiLCBcIiE9XCIsIG51bGwpXG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTogU1FMIO2RnO2YhOyLnSAtIOyCrOyaqTogLndoZXJlKHB1cmkucmF3KFwiQ09OQ0FUKHUubmFtZSwgdS5lbWFpbClcIiksIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgS25leC5SYXc+KGNvbHVtbjogVENvbHVtbiwgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIFwibGlrZVwiLCBcIiV0ZXN0JVwiKVxuICB3aGVyZSguLi5hcmdzOiBbY29sdW1uT3JDb25kaXRpb25zOiBhbnksIG9wZXJhdG9yT3JWYWx1ZT86IGFueSwgdmFsdWU/OiBhbnldKTogdGhpcyB7XG4gICAgY29uc3QgW2NvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZV0gPSBhcmdzO1xuICAgIGlmICh0eXBlb2YgY29sdW1uT3JDb25kaXRpb25zID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiIT1cIikge1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90TnVsbChjb2x1bW5PckNvbmRpdGlvbnMpO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gXCI9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zLCBvcGVyYXRvck9yVmFsdWUsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBXSEVSRSBJTlxuICB3aGVyZUluPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWVzOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZUluKGNvbHVtbiwgdmFsdWVzKTtcbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyBXSEVSRSBOT1QgSU5cbiAgd2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOb3RJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTUFUQ0hcbiAgd2hlcmVNYXRjaDxUQ29sdW1uIGV4dGVuZHMgRnVsbHRleHRDb2x1bW5zPFRUYWJsZXM+Pihjb2x1bW46IFRDb2x1bW4sIHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgTUFUQ0ggKCR7U3RyaW5nKGNvbHVtbil9KSBBR0FJTlNUICg/KWAsIFt2YWx1ZV0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4lcbiAgICogLSDsgqzsmqntlaAgUEdyb29uZ2Eg7J24642x7Iqk7JmAIOuPmeydvO2VnCDsu6zrn7wg6rWs7ISx7Jy866GcIOqygOyDie2VtOyVvCDsnbjrjbHsiqTqsIAg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiDri6jsnbwg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIG5hbWUgJkB+ICdzZWFyY2gnXG4gICAqIGBgYFxuICAgKlxuICAgKiDrs7Xtlakg7Lus65+8IOqygOyDiTpcbiAgICogYGBgc3FsXG4gICAqIFdIRVJFIEFSUkFZW25hbWU6OnRleHQsIGRlc2NyaXB0aW9uOjp0ZXh0XSAmQH4gJ3NlYXJjaCdcbiAgICogYGBgXG4gICAqL1xuICB3aGVyZVNlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uIHwgVENvbHVtbltdLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIHdlaWdodHM/OiBudW1iZXJbXTsgLy8g7KCV7IiYIOuwsOyXtFxuICAgIH0sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHsgd2VpZ2h0cyB9ID0gb3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBjb2x1bW5FeHByID0gQXJyYXkuaXNBcnJheShjb2x1bW4pXG4gICAgICA/IGBBUlJBWVske2NvbHVtbi5tYXAoKGMpID0+IGAke2N9Ojp0ZXh0YCkuam9pbihcIixcIil9XWBcbiAgICAgIDogY29sdW1uO1xuICAgIGNvbnN0IHBncm9vbmdhQ29uZGl0aW9uID0gYHBncm9vbmdhX2NvbmRpdGlvbig/JHt3ZWlnaHRzPy5sZW5ndGggPyBgLCB3ZWlnaHRzID0+IEFSUkFZWyR7d2VpZ2h0cy5qb2luKFwiLFwiKX1dYCA6IFwiXCJ9KWA7XG5cbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHtjb2x1bW5FeHByfSAmQH4gJHtwZ3Jvb25nYUNvbmRpdGlvbn1gLCBbdmFsdWVdKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgRlVMTFRFWFRcbiAgd2hlcmVUc1NlYXJjaDxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdcIj4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBUc1F1ZXJ5T3B0aW9ucyB8IFRzUXVlcnlDb25maWcsXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IG9wdHMgPVxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgPyAoeyBjb25maWc6IG9wdGlvbnMgfSBhcyBUc1F1ZXJ5T3B0aW9ucykgOiAob3B0aW9ucyA/PyB7fSk7XG5cbiAgICBjb25zdCBwYXJzZXIgPSBvcHRzLnBhcnNlciA/PyBcIndlYnNlYXJjaF90b190c3F1ZXJ5XCI7XG4gICAgY29uc3QgY29uZmlnID0gb3B0cy5jb25maWcgPz8gXCJzaW1wbGVcIjtcbiAgICBjb25zdCBjb2x1bW5FeHByID1cbiAgICAgIHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCJcbiAgICAgICAgPyBjb2x1bW4uX3NxbFxuICAgICAgICA6IFN0cmluZyhjb2x1bW4pO1xuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gQEAgJHtwYXJzZXJ9KD8sID8pYCwgW2NvbmZpZywgdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFJBV1xuICB3aGVyZVJhdyhzcWw6IHN0cmluZywgYmluZGluZ3M/OiByZWFkb25seSB1bmtub3duW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhzcWwsIGJpbmRpbmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIOq0hO2YuCDqt7jro7ntlZFcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JXaGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SREVSIEJZXG4gIG9yZGVyQnk8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgKTogdGhpcztcbiAgb3JkZXJCeShjb2x1bW46IHN0cmluZywgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCIgPSBcImFzY1wiKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICog67Kh7YSwIOycoOyCrOuPhCDqsoDsg4kg7ISk7KCVXG4gICAqXG4gICAqIC0gU0VMRUNU7JeQIHNpbWlsYXJpdHkg7Lus65+8IOy2lOqwgFxuICAgKiAtIFdIRVJFIGNvbCBJUyBOT1QgTlVMTCDstpTqsIBcbiAgICogLSB0aHJlc2hvbGTqsIAg7J6I7Jy866m0IFdIRVJFIOyhsOqxtCDstpTqsIBcbiAgICogLSDquLDsobQgT1JERVIgQlnrpbwgY2xlYXLtlZjqs6Ag7JuQ7IucIOyXsOyCsOyekOuhnCDsoJXroKwgKEhOU1cg7J24642x7IqkIOy1nOygge2ZlClcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbiDrsqHthLAg7Lus65+8IOqyveuhnFxuICAgKiBAcGFyYW0gZW1iZWRkaW5nIOy/vOumrCDsnoTrsqDrlKkg67Kh7YSwXG4gICAqIEBwYXJhbSBvcHRpb25zIG1ldGhvZCwgdGhyZXNob2xkLCBhcyDrk7Eg7Ji17IWYXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gY29zaW5lIHNpbWlsYXJpdHkgKOq4sOuzuOqwkilcbiAgICogcWIudmVjdG9yU2ltaWxhcml0eShcImNvbHVtbk5hbWVcIiwgcXVlcnlWZWN0b3IsIHtcbiAgICogICBtZXRob2Q6IFwiY29zaW5lXCIsXG4gICAqICAgdGhyZXNob2xkOiAwLjVcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIEwyIGRpc3RhbmNlXG4gICAqIHFiLnZlY3RvclNpbWlsYXJpdHkoXCJjb2x1bW5OYW1lXCIsIHF1ZXJ5VmVjdG9yLCB7XG4gICAqICAgbWV0aG9kOiBcImwyXCIsXG4gICAqICAgdGhyZXNob2xkOiAxLjUgIC8vIOqxsOumrOqwgCAxLjUg7J207ZWY7J24IOqysOqzvOunjFxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gSW5uZXIgcHJvZHVjdFxuICAgKiBxYi52ZWN0b3JTaW1pbGFyaXR5KFwiY29sdW1uTmFtZVwiLCBxdWVyeVZlY3Rvciwge1xuICAgKiAgIG1ldGhvZDogXCJpbm5lcl9wcm9kdWN0XCIsXG4gICAqICAgdGhyZXNob2xkOiAwLjdcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgdmVjdG9yU2ltaWxhcml0eShcbiAgICBjb2x1bW46IFZlY3RvckNvbHVtbnM8VFRhYmxlcz4sXG4gICAgZW1iZWRkaW5nOiBudW1iZXJbXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBtZXRob2Q/OiBcImNvc2luZVwiIHwgXCJsMlwiIHwgXCJpbm5lcl9wcm9kdWN0XCI7XG4gICAgICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgICBkaXN0aW5jdE9uPzogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPjtcbiAgICB9ID0ge30sXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdCAmIHsgc2ltaWxhcml0eTogbnVtYmVyIH0+IHtcbiAgICBjb25zdCB7IG1ldGhvZCA9IFwiY29zaW5lXCIsIHRocmVzaG9sZCwgZGlzdGluY3RPbiB9ID0gb3B0aW9ucztcblxuICAgIGlmIChcbiAgICAgICFBcnJheS5pc0FycmF5KGVtYmVkZGluZykgfHxcbiAgICAgIGVtYmVkZGluZy5sZW5ndGggPT09IDAgfHxcbiAgICAgIGVtYmVkZGluZy5zb21lKCh2KSA9PiAhTnVtYmVyLmlzRmluaXRlKHYpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBlbWJlZGRpbmcgdmVjdG9yOiBleHBlY3RlZCBhIG5vbi1lbXB0eSBhcnJheSBvZiBmaW5pdGUgbnVtYmVyc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZWN0b3JMaXRlcmFsID0gSlNPTi5zdHJpbmdpZnkoZW1iZWRkaW5nLm1hcCgodikgPT4gTnVtYmVyKHYpKSk7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB7IGNvc2luZTogXCI8PT5cIiwgbDI6IFwiPC0+XCIsIGlubmVyX3Byb2R1Y3Q6IFwiPCM+XCIgfVttZXRob2RdO1xuXG4gICAgLy8gbWV0aG9k67OEIOyXsOyCsOyekCDrsI8gc2ltaWxhcml0eSDqs4TsgrDsi51cbiAgICAvLyAtIGNvc2luZTogPD0+IChjb3NpbmUgZGlzdGFuY2UsIDB+MiksIHNpbWlsYXJpdHkgPSAxIC0gZGlzdGFuY2VcbiAgICAvLyAtIGwyOiA8LT4gKGV1Y2xpZGVhbiBkaXN0YW5jZSksIHNpbWlsYXJpdHkgPSBkaXN0YW5jZSAo64Ku7J2E7IiY66GdIOycoOyCrClcbiAgICAvLyAtIGlubmVyX3Byb2R1Y3Q6IDwjPiAobmVnYXRpdmUgaW5uZXIgcHJvZHVjdCksIHNpbWlsYXJpdHkgPSAtZGlzdGFuY2UgKOuGkuydhOyImOuhnSDsnKDsgqwpXG4gICAgY29uc3Qgc2ltaWxhcml0eUV4cHIgPVxuICAgICAgbWV0aG9kID09PSBcImNvc2luZVwiXG4gICAgICAgID8gdGhpcy5rbmV4LnJhdyhgMSAtICg/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IpIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSlcbiAgICAgICAgOiBtZXRob2QgPT09IFwibDJcIlxuICAgICAgICAgID8gdGhpcy5rbmV4LnJhdyhgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSlcbiAgICAgICAgICA6IHRoaXMua25leC5yYXcoYC0oPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yKSBhcyBzaW1pbGFyaXR5YCwgW2NvbHVtbiwgdmVjdG9yTGl0ZXJhbF0pO1xuXG4gICAgLy8gV0hFUkUgTk9UIE5VTExcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU5vdE51bGwoY29sdW1uKTtcblxuICAgIC8vIOq4sOyhtCBPUkRFUiBCWSBjbGVhclxuICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKFwib3JkZXJcIik7XG4gICAgaWYgKGRpc3RpbmN0T24pIHtcbiAgICAgIC8vIERJU1RJTkNUIE9O7J2AIFNFTEVDVCDsoIjsnZgg66eoIOyVnuyXkCDsmYDslbwg7ZWY66+A66GcLCDquLDsobQgc2VsZWN0KHN1YnNldCDtlYTrk5zrk6Qp66W8IOuztOyhtCDtm4QgY2xlYXLtlZjqs6Ag64uk7IucIOy2lOqwgFxuICAgICAgY29uc3QgZXhpc3RpbmdTdWJzZXRDb2xzID0gKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHNcbiAgICAgICAgLmZpbHRlcigoczogYW55KSA9PiBzLmdyb3VwaW5nID09PSBcImNvbHVtbnNcIilcbiAgICAgICAgLmZsYXRNYXAoKHM6IGFueSkgPT4gcy52YWx1ZSk7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5jbGVhcihcInNlbGVjdFwiKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdCh0aGlzLmtuZXgucmF3KGBESVNUSU5DVCBPTiAoPz8pID8/YCwgW2Rpc3RpbmN0T24sIGRpc3RpbmN0T25dKSk7XG4gICAgICBleGlzdGluZ1N1YnNldENvbHMubWFwKChjb2w6IGFueSkgPT4gdGhpcy5rbmV4UXVlcnkuc2VsZWN0KGNvbCkpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNpbWlsYXJpdHlFeHByKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYD8/LCA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3JgLCBbXG4gICAgICAgIGRpc3RpbmN0T24sXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgdmVjdG9yTGl0ZXJhbCxcbiAgICAgIF0pO1xuXG4gICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leFxuICAgICAgICAuZnJvbSh0aGlzLmtuZXhRdWVyeS5hcyhcImRpc3RpbmN0X3ZlY3RvcnNcIikpXG4gICAgICAgIC5zZWxlY3QoXCIqXCIpXG4gICAgICAgIC5vcmRlckJ5KFwic2ltaWxhcml0eVwiLCBcImRlc2NcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzaW1pbGFyaXR5RXhwcik7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5vcmRlckJ5UmF3KGA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3JgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSk7XG4gICAgfVxuXG4gICAgLy8gdGhyZXNob2xkXG4gICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRocmVzaG9sZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZlY3RvclNpbWlsYXJpdHkgdGhyZXNob2xkOiAke3RocmVzaG9sZH1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpc3RpbmN0T24pIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkT3AgPSBtZXRob2QgPT09IFwibDJcIiA/IFwiPD1cIiA6IFwiPj1cIjtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoXCJzaW1pbGFyaXR5XCIsIHRocmVzaG9sZE9wLCB0aHJlc2hvbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkVmFsdWUgPVxuICAgICAgICAgIG1ldGhvZCA9PT0gXCJjb3NpbmVcIiA/IDEgLSB0aHJlc2hvbGQgOiBtZXRob2QgPT09IFwiaW5uZXJfcHJvZHVjdFwiID8gLXRocmVzaG9sZCA6IHRocmVzaG9sZDtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvciA8PSA/YCwgW1xuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB2ZWN0b3JMaXRlcmFsLFxuICAgICAgICAgIHRocmVzaG9sZFZhbHVlLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyDquLDrs7gg7L+866asIOuplOyEnOuTnOuTpFxuICBsaW1pdChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsaW1pdDogbXVzdCBiZSA+PSAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5saW1pdChjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmZzZXQoY291bnQ6IG51bWJlcik6IHRoaXMge1xuICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb2Zmc2V0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5Lm9mZnNldChjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBHUk9VUCBCWVxuICBncm91cEJ5PFRDb2x1bW5zIGV4dGVuZHMgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oLi4uY29sdW1uczogVENvbHVtbnNbXSk6IHRoaXM7XG4gIGdyb3VwQnkoLi4uY29sdW1uczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5ncm91cEJ5KC4uLihjb2x1bW5zIGFzIHN0cmluZ1tdKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBIQVZJTkdcbiAgaGF2aW5nKGNvbmRpdGlvbjogc3RyaW5nKTogdGhpcztcbiAgaGF2aW5nPFRDb2x1bW4gZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICB2YWx1ZTogYW55LFxuICApOiB0aGlzO1xuICAvLyBIQVZJTkcg6rWs7ZiEXG4gIGhhdmluZyguLi5jb25kaXRpb25zOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gaGF2aW5nKFwiQ09VTlQoKikgPiAxMFwiKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKHRoaXMua25leC5yYXcoY29uZGl0aW9uc1swXSkpO1xuICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8vIGhhdmluZyhcImNvdW50XCIsIFwiPlwiLCAxMClcbiAgICAgIHRoaXMua25leFF1ZXJ5LmhhdmluZyhcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSxcbiAgICAgICAgY29uZGl0aW9uc1sxXSxcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzJdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGF2aW5nIGFyZ3VtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDsi6Ttlokg66mU7ISc65Oc65OkIC0gdGhlbmFibGUg6rWs7ZiEXG4gIHRoZW48VFJlc3VsdDEgPSBFeHBhbmQ8VFJlc3VsdD5bXSwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBFeHBhbmQ8VFJlc3VsdD5bXSkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgTmFpdGUudChcInB1cmk6ZXhlY3V0ZWQtcXVlcnlcIiwgdGhpcy50b1F1ZXJ5KCkpO1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50aGVuKG9uZnVsZmlsbGVkIGFzIGFueSwgb25yZWplY3RlZCk7XG4gIH1cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdCB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG4gIGZpbmFsbHkob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyDtlZjrgpjrp4wg7L+866asXG4gIGZpcnN0KCk6IFJlc29sdmVkUHVyaTxFeHBhbmQ8VFJlc3VsdD4sIG5ldmVyPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZmlyc3QoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIOy/vOumrO2VnCDroIjsvZTrk5zsl5DshJwg7Yq57KCVIOy7rOufvOunjCDstpTstpztlZwg67Cw7Je0IOumrO2EtFxuICBwbHVjazxUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFJlc3VsdCB8IFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFxuICAgIFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0XG4gICAgICA/IFRSZXN1bHRbVENvbHVtbl1bXVxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICAgIG5ldmVyXG4gID4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnBsdWNrKGNvbHVtbiBhcyBzdHJpbmcpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gSU5TRVJUIDog64uo7J28IOqwneyytFxuICBpbnNlcnQoXG4gICAgZGF0YTogSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PixcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj47XG4gIC8vIElOU0VSVDog67Cw7Je0XG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+W10sXG4gICk6IFJlc29sdmVkUHVyaTxJbnNlcnRSZXN1bHQsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+O1xuICAvLyBJTlNFUlQg7Iuk7KCcIOq1rO2YhFxuICBpbnNlcnQoXG4gICAgcmF3RGF0YTogSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB8IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIC8vIEpTT04g7Lus65+8IHN0cmluZ2lmeSDroZzsp4HsnYQg66mU7ISc65Oc66GcIOu2hOumrO2VmOyXrCDspJHrs7Ug7KCc6rGwXG4gICAgY29uc3QgcmVmaW5lZERhdGEgPSB0aGlzLnJlZmluZUpzb25Db2x1bW5zKHJhd0RhdGEpO1xuICAgIHRoaXMua25leFF1ZXJ5Lmluc2VydChyZWZpbmVkRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBVUERBVEVcbiAgdXBkYXRlKHJhd0RhdGE6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIC8vIEpTT04g7Lus65+8IHN0cmluZ2lmeSDroZzsp4HsnYQg66mU7ISc65Oc66GcIOu2hOumrO2VmOyXrCDspJHrs7Ug7KCc6rGwXG4gICAgY29uc3QgcmVmaW5lZERhdGEgPSB0aGlzLnJlZmluZUpzb25Db2x1bW5zKHJhd0RhdGEpO1xuICAgIHRoaXMua25leFF1ZXJ5LnVwZGF0ZShyZWZpbmVkRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvKipcbiAgICogSlNPTiDsu6zrn7zsl5Ag64yA7ZW0IHN0cmluZ2lmeSDsspjrpqzrpbwg7IiY7ZaJ7ZWY64qUIOuCtOu2gCDrqZTshJzrk5zsnoXri4jri6QuXG4gICAqIG9iamVjdCDrmJDripQgb2JqZWN0IOuwsOyXtOydhCDrsJvqs6AsIEpTT04g7Lus65+87J20IOyeiOycvOuptCDsp4HroKztmZTtlZjsl6wg67CY7ZmY7ZWp64uI64ukLlxuICAgKiDsp4HsoJEg6rCS7J2EIOuzgOqyve2VmOuvgOuhnCBzaWRlIGVmZmVjdOqwgCDsnojsirXri4jri6QuXG4gICAqL1xuICBwcml2YXRlIHJlZmluZUpzb25Db2x1bW5zKFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgKTogdHlwZW9mIGRhdGEge1xuICAgIC8vIHRhYmxlU3BlY+ydtOuCmCBqc29uQ29sdW1ucyDsl4bripQg6rK97JqwIOuwlOuhnCDrsJjtmZhcbiAgICBpZiAoIXRoaXMudGFibGVTcGVjIHx8ICF0aGlzLnRhYmxlU3BlYy5qc29uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8vIOuTseuhneuQnCBUYWJsZVNwZWPsnYQg7Ya17ZW0IEpTT07su6zrn7wg66qp66Gd7J2EIOqwgOyguOyZgCBKU09OLnN0cmluZ2lmeSDsspjrpqxcbiAgICBjb25zdCBqc29uQ29sdW1ucyA9IHRoaXMudGFibGVTcGVjLmpzb25Db2x1bW5zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBqc29uQ29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW5dO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpdGVtW2NvbHVtbl0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGpzb25Db2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtjb2x1bW5dO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGRhdGFbY29sdW1uXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8vIEluY3JlbWVudFxuICBpbmNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5jcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG4gIC8vIERlY3JlbWVudFxuICBkZWNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVjcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gREVMRVRFXG4gIGRlbGV0ZSgpOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVsZXRlKCk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyDtmZXsnbgg7L+866asIOumrO2EtFxuICB0b1F1ZXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRvUXVlcnkoKTtcbiAgfVxuXG4gIC8vIOy/vOumrCDrlJTrsoTquYUg66Gc6re4IOy2nOugpVxuICBkZWJ1ZygpOiB0aGlzIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKFwiW1B1cmkgRGVidWddXCIpfSAke2NoYWxrLnllbGxvdyh0aGlzLnRvUXVlcnkoKSl9YCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbG9uZSgpOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICAvLyAnZHVhbCfsnYAg642U66+4IO2FjOydtOu4lOydtOupsCwg67CU66GcIOyVhOuemCDspITsl5DshJwga25leFF1ZXJ56rCAIOuNruyWtOyUjOybjOynkeuLiOuLpC5cbiAgICBjb25zdCBuZXdQdXJpID0gbmV3IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4odGhpcy5rbmV4LCBcImR1YWxcIik7XG4gICAgbmV3UHVyaS5rbmV4UXVlcnkgPSB0aGlzLmtuZXhRdWVyeS5jbG9uZSgpO1xuICAgIHJldHVybiBuZXdQdXJpO1xuICB9XG5cbiAgZm9ybWF0U1FMKHVuZm9ybWF0dGVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNRTCDsmIjslb3slrQg66qp66GdXG4gICAgY29uc3Qga2V5d29yZHMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIklOU0VSVFwiLFxuICAgICAgXCJJTlRPXCIsXG4gICAgICBcIlZBTFVFU1wiLFxuICAgICAgXCJVUERBVEVcIixcbiAgICAgIFwiREVMRVRFXCIsXG4gICAgICBcIkNSRUFURVwiLFxuICAgICAgXCJUQUJMRVwiLFxuICAgICAgXCJBTFRFUlwiLFxuICAgICAgXCJEUk9QXCIsXG4gICAgICBcIkpPSU5cIixcbiAgICAgIFwiT05cIixcbiAgICAgIFwiSU5ORVJcIixcbiAgICAgIFwiTEVGVFwiLFxuICAgICAgXCJSSUdIVFwiLFxuICAgICAgXCJGVUxMXCIsXG4gICAgICBcIk9VVEVSXCIsXG4gICAgICBcIkdST1VQXCIsXG4gICAgICBcIkJZXCIsXG4gICAgICBcIk9SREVSXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJESVNUSU5DVFwiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJPRkZTRVRcIixcbiAgICAgIFwiQVNcIixcbiAgICAgIFwiQU5EXCIsXG4gICAgICBcIk9SXCIsXG4gICAgICBcIk5PVFwiLFxuICAgICAgXCJJTlwiLFxuICAgICAgXCJMSUtFXCIsXG4gICAgICBcIklTXCIsXG4gICAgICBcIk5VTExcIixcbiAgICAgIFwiQ0FTRVwiLFxuICAgICAgXCJXSEVOXCIsXG4gICAgICBcIlRIRU5cIixcbiAgICAgIFwiRUxTRVwiLFxuICAgICAgXCJFTkRcIixcbiAgICAgIFwiVU5JT05cIixcbiAgICAgIFwiQUxMXCIsXG4gICAgICBcIkVYSVNUU1wiLFxuICAgICAgXCJCRVRXRUVOXCIsXG4gICAgXTtcblxuICAgIGxldCBmb3JtYXR0ZWQgPSB1bmZvcm1hdHRlZDtcblxuICAgIC8vIOyYiOyVveyWtOulvCDrjIDrrLjsnpDroZwg67OA7ZmYXG4gICAga2V5d29yZHMuZm9yRWFjaCgoa2V5d29yZCkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7a2V5d29yZH1cXFxcYmAsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwga2V5d29yZC50b1VwcGVyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIC8vIOyjvOyalCDsoIgg7JWe7JeQIOykhOuwlOq/iCDstpTqsIBcbiAgICBjb25zdCBtYWpvckNsYXVzZXMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIkdST1VQIEJZXCIsXG4gICAgICBcIk9SREVSIEJZXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgIF07XG4gICAgbWFqb3JDbGF1c2VzLmZvckVhY2goKGNsYXVzZSkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxccysoJHtjbGF1c2V9KVxcXFxzK2AsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwgYFxcbiR7Y2xhdXNlLnRvVXBwZXJDYXNlKCl9IGApO1xuICAgIH0pO1xuXG4gICAgLy8gSk9JTiDsoIgg7LKY66asXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xccysoKD86SU5ORVJ8TEVGVHxSSUdIVHxGVUxMIE9VVEVSKVxccyspP0pPSU5cXHMrL2dpLCBcIlxcbiQxSk9JTiBcIik7XG5cbiAgICAvLyBBTkQsIE9SIOyhsOqxtCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKyhBTkR8T1IpXFxzKy9naSwgXCJcXG4gICQxIFwiKTtcblxuICAgIC8vIOq0hO2YuCDsspjrpqwg67CPIOuTpOyXrOyTsOq4sFxuICAgIGNvbnN0IGxpbmVzID0gZm9ybWF0dGVkLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGluZGVudGVkTGluZXMgPSBbXTtcbiAgICBsZXQgaW5kZW50TGV2ZWwgPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkTGluZSkgY29udGludWU7XG5cbiAgICAgIC8vIOuLq+uKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg6rCQ7IaMXG4gICAgICBjb25zdCBjbG9zaW5nUGFyZW5zID0gKHRyaW1tZWRMaW5lLm1hdGNoKC9cXCkvZykgfHwgW10pLmxlbmd0aDtcbiAgICAgIGNvbnN0IG9wZW5pbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICBpZiAoY2xvc2luZ1BhcmVucyA+IDAgJiYgb3BlbmluZ1BhcmVucyA9PT0gMCkge1xuICAgICAgICBpbmRlbnRMZXZlbCA9IE1hdGgubWF4KDAsIGluZGVudExldmVsIC0gY2xvc2luZ1BhcmVucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIO2YhOyerCDrk6Tsl6zsk7DquLAg7KCB7JqpXG4gICAgICBjb25zdCBpbmRlbnQgPSBcIiAgXCIucmVwZWF0KGluZGVudExldmVsKTtcbiAgICAgIGluZGVudGVkTGluZXMucHVzaChpbmRlbnQgKyB0cmltbWVkTGluZSk7XG5cbiAgICAgIC8vIOyXrOuKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg7Kad6rCAXG4gICAgICBpZiAob3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHtcbiAgICAgICAgaW5kZW50TGV2ZWwgKz0gb3BlbmluZ1BhcmVucyAtIGNsb3NpbmdQYXJlbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGVudGVkTGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG4gIH1cblxuICByYXcoc3FsOiBzdHJpbmcpOiBLbmV4LlJhdyB7XG4gICAgcmV0dXJuIHRoaXMua25leC5yYXcoc3FsKTtcbiAgfVxuXG4gIC8vIEtuZXgg7L+866asIOu5jOuNlCDsp4HsoJEg7KCR6re8XG4gIHJhd1F1ZXJ5KCk6IEtuZXguUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdoZXJlR3JvdXA8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidWlsZGVyOiBLbmV4LlF1ZXJ5QnVpbGRlcikge31cblxuICAvLyB3aGVyZSDrqZTshJzrk5zrk6RcbiAgd2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIHdoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gd2hlcmVJbiAvIHdoZXJlTm90SW4g66mU7ISc65Oc65OkXG4gIHdoZXJlSW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IHRoaXM7XG4gIHdoZXJlSW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IHRoaXM7XG4gIHdoZXJlTm90SW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVOb3RJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmUg66mU7ISc65Oc65OkXG4gIG9yV2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBvcldoZXJlSW4gLyBvcldoZXJlTm90SW4g66mU7ISc65Oc65OkXG4gIG9yV2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZUluKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZU5vdEluKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVOb3RJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOykkeyyqSDqt7jro7lcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzO1xuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlKChzdWJCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KHN1YkJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIEpPSU4g7KCIIOq3uOujueyXkOuKlCBMZWZ07JmAIFJpZ2h07JeQIOuMgO2VnCDsiJzshJzqsIAg7ZWE7JqU7ZWY7KeAIOyViuycvOuvgOuhnCwg66qo65OgIOqyveyasOydmCDsiJjrpbwg6rOE7IKw7ZW07JW87ZWoLlxuZXhwb3J0IGNsYXNzIEpvaW5DbGF1c2VHcm91cDxcbiAgVExlZnQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUUmlnaHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6IEtuZXguSm9pbkNsYXVzZSkge31cblxuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDsu6zrn7xcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCA9IOqwklxuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDsu6zrn7xcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oQU5EKTog7L2c67CxXG4gIG9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oQU5EKSDqtaztmIRcbiAgb24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OKE9SKTog7Lus65+8ID0g7Lus65+8XG4gIG9yT24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+KTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgPSDqsJJcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihPUik6IOy9nOuwsVxuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VFJpZ2h0LCBUTGVmdD4pID0+IHZvaWQpOiB0aGlzO1xuICAvLyBPTihPUikg6rWs7ZiEXG4gIG9yT24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9yT24oLi4uKGFyZ3MgYXMgW3N0cmluZywgc3RyaW5nXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT04gVkFMKEFORCk6IOy7rOufvCA9IOqwkiAo6rCS7J2EIOy7rOufvCDssLjsobDqsIAg7JWE64uMIO2MjOudvOuvuO2EsOuhnCDrsJTsnbjrlKkpXG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEFORCBPTiBWQUw6IG9uVmFs7J2YIOuqheyLnOyggSBhbGlhcyAoS25leCDtmLjtmZgpXG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5hbmRPblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SIE9OIFZBTDogT1Ig7KGw6rG07Jy866GcIOqwkiDrsJTsnbjrlKlcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vck9uVmFsKC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qXG4gIFRSZXNvbHZlZDog7L+866asIOyLpO2WiSDtm4Qg67CY7ZmY65CgIOqysOqzvCDtg4DsnoVcbiAgVFJldHVybmluZzogUkVUVVJOSU5HIOygiOyXkCDsgqzsmqnrkKAg7YOA7J6FXG4qL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkUHVyaTxUUmVzb2x2ZWQsIFRSZXR1cm5pbmc+IGltcGxlbWVudHMgUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBrbmV4OiBLbmV4LFxuICApIHt9XG5cbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9IFwiUHJvbWlzZVwiO1xuXG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbjxUUmVzdWx0MSA9IFRSZXNvbHZlZCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUUmVzb2x2ZWQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIE5haXRlLnQoXCJwdXJpOmV4ZWN1dGVkLXF1ZXJ5XCIsIHRoaXMudG9RdWVyeSgpKTtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudGhlbihvbmZ1bGZpbGxlZCBhcyBhbnksIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc29sdmVkIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwpOiBQcm9taXNlPFRSZXNvbHZlZD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyBPTiBDT05GTElDVCAtIOy7rOufvCDquLDrsJhcbiAgb25Db25mbGljdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVFJldHVybmluZz4+KFxuICAgIGNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGFjdGlvbj86IE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcz4sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHRhcmdldCA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuXG4gICAgaWYgKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIm5vdGhpbmdcIikge1xuICAgICAgLy8gRE8gTk9USElOR1xuICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLmlnbm9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBETyBVUERBVEVcbiAgICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBhY3Rpb247XG5cbiAgICAgIC8vIGFjdGlvbi51cGRhdGUg67Cw7Je0IO2Yle2DnCA6IFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlKSkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UodXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFjdGlvbi51cGRhdGUg6rCd7LK0IO2Yle2DnDogeyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IHJhdyguLi4pIH1cbiAgICAgICAgY29uc3QgbWVyZ2VPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGUpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgXCJfdHlwZVwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICB2YWx1ZS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTcWxFeHByZXNzaW9uIOKGkiBrbmV4LnJhdygp66GcIOuzgO2ZmFxuICAgICAgICAgICAgbWVyZ2VPYmpba2V5XSA9IHRoaXMua25leC5yYXcoKHZhbHVlIGFzIFNxbEV4cHJlc3Npb248YW55PikuX3NxbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOydvOuwmCDqsJJcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UobWVyZ2VPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gUkVUVVJOSU5HOiBcIipcIiAtIOyghOyytCDsu6zrn7xcbiAgcmV0dXJuaW5nKGNvbHVtbjogXCIqXCIpOiBSZXNvbHZlZFB1cmk8VFJldHVybmluZ1tdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORzog64uo7J28IOy7rOufvFxuICByZXR1cm5pbmc8VENvbHVtbiBleHRlbmRzIENvbHVtbktleXM8VFJldHVybmluZz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFBpY2s8VFJldHVybmluZywgVENvbHVtbj5bXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuzteyImCDsu6zrn7wgKOuwsOyXtClcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBUQ29sdW1uW10sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HIOq1rO2YhFxuICByZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFJlc29sdmVkUHVyaTxhbnlbXSwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5yZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwiaW5mbGVjdGlvbiIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsIlB1cmkiLCJrbmV4UXVlcnkiLCJ0YWJsZVNwZWMiLCJrbmV4IiwidGFibGVOYW1lT3JTb3VyY2UiLCJmcm9tIiwic2FmZUdldFRhYmxlU3BlYyIsImVudHJpZXMiLCJPYmplY3QiLCJsZW5ndGgiLCJFcnJvciIsImFsaWFzIiwic291cmNlIiwic3VicXVlcnlCdWlsZGVyIiwicmF3UXVlcnkiLCJhcyIsInRhYmxlTmFtZSIsImdldFRhYmxlU3BlYyIsImNvdW50IiwiY29sdW1uIiwiX3R5cGUiLCJfcmV0dXJuIiwiX3NxbCIsInN1bSIsImF2ZyIsIm1heCIsIm1pbiIsImNvbmNhdCIsImFyZ3MiLCJqb2luIiwidXBwZXIiLCJsb3dlciIsInJhd1N0cmluZyIsInNxbCIsInJhd1N0cmluZ0FycmF5IiwicmF3TnVtYmVyIiwicmF3Qm9vbGVhbiIsInJhd0RhdGUiLCJ0c0hpZ2hsaWdodCIsInF1ZXJ5IiwiX29wdGlvbnMiLCJwYXJzZXIiLCJjb25maWciLCJvcHRpb25zIiwiaGxPcHRpb25QYXJ0cyIsIm1hcCIsImtleSIsInZhbHVlIiwiY2FtZWxpemUiLCJobE9wdGlvbnMiLCJ0c1JhbmsiLCJfdHNSYW5rIiwidHNSYW5rQ2QiLCJ0eXBlIiwibm9ybWFsaXphdGlvbiIsIndlaWdodHMiLCJ3ZWlnaHRDbGF1c2UiLCJub3JtYWxpemF0aW9uQ2xhdXNlIiwic2NvcmUiLCJoaWdobGlnaHQiLCJjb2x1bW5PckNvbHVtbnMiLCJxdWVyeUNsYXVzZSIsIkFycmF5IiwiaXNBcnJheSIsInEiLCJzZWxlY3QiLCJzZWxlY3RPYmoiLCJmbGF0U2VsZWN0IiwiZmxhdHRlblNlbGVjdCIsInNlbGVjdENsYXVzZXMiLCJjb2x1bW5PckZ1bmN0aW9uIiwicHVzaCIsInJhdyIsImNvbHVtblBhdGgiLCJwcmVmaXgiLCJmdWxsS2V5IiwibmVzdGVkIiwiYXNzaWduIiwiYXBwZW5kU2VsZWN0Iiwic2VsZWN0QWxsIiwiZGlzdGluY3QiLCJjb2x1bW5zIiwiY2xlYXIiLCJzdGF0ZW1lbnQiLCJjbGVhckpvaW4iLCJfc3RhdGVtZW50cyIsImZpbHRlciIsInMiLCJfYWxpYXMiLCJfdGFibGUiLCJ0YWJsZSIsInRhYmxlTmFtZU9yU3BlYyIsIl9fY29tbW9uSm9pbiIsImxlZnRKb2luIiwiam9pblR5cGUiLCJjYWxsYmFjayIsImpvaW5DbGF1c2UiLCJKb2luQ2xhdXNlR3JvdXAiLCJsZWZ0IiwicmlnaHQiLCJzcGVjIiwid2hlcmUiLCJjb2x1bW5PckNvbmRpdGlvbnMiLCJvcGVyYXRvck9yVmFsdWUiLCJ3aGVyZU51bGwiLCJ3aGVyZU5vdE51bGwiLCJ3aGVyZUluIiwidmFsdWVzIiwid2hlcmVOb3RJbiIsIndoZXJlTWF0Y2giLCJ3aGVyZVJhdyIsIlN0cmluZyIsIndoZXJlU2VhcmNoIiwiY29sdW1uRXhwciIsImMiLCJwZ3Jvb25nYUNvbmRpdGlvbiIsIndoZXJlVHNTZWFyY2giLCJvcHRzIiwiYmluZGluZ3MiLCJ3aGVyZUdyb3VwIiwiYnVpbGRlciIsImdyb3VwIiwiV2hlcmVHcm91cCIsIm9yV2hlcmVHcm91cCIsIm9yV2hlcmUiLCJvcmRlckJ5IiwiZGlyZWN0aW9uIiwidmVjdG9yU2ltaWxhcml0eSIsImVtYmVkZGluZyIsIm1ldGhvZCIsInRocmVzaG9sZCIsImRpc3RpbmN0T24iLCJzb21lIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwidmVjdG9yTGl0ZXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJvcGVyYXRvciIsImNvc2luZSIsImwyIiwiaW5uZXJfcHJvZHVjdCIsInNpbWlsYXJpdHlFeHByIiwiZXhpc3RpbmdTdWJzZXRDb2xzIiwiZ3JvdXBpbmciLCJmbGF0TWFwIiwiY29sIiwib3JkZXJCeVJhdyIsInRocmVzaG9sZE9wIiwidGhyZXNob2xkVmFsdWUiLCJsaW1pdCIsIm9mZnNldCIsImdyb3VwQnkiLCJoYXZpbmciLCJjb25kaXRpb25zIiwidGhlbiIsIm9uZnVsZmlsbGVkIiwib25yZWplY3RlZCIsInQiLCJ0b1F1ZXJ5IiwiY2F0Y2giLCJmaW5hbGx5Iiwib25maW5hbGx5IiwiZmlyc3QiLCJSZXNvbHZlZFB1cmkiLCJwbHVjayIsImluc2VydCIsInJhd0RhdGEiLCJyZWZpbmVkRGF0YSIsInJlZmluZUpzb25Db2x1bW5zIiwidXBkYXRlIiwiZGF0YSIsImpzb25Db2x1bW5zIiwiaXRlbSIsInVuZGVmaW5lZCIsImluY3JlbWVudCIsImRlY3JlbWVudCIsImRlbGV0ZSIsImRlYnVnIiwiY29uc29sZSIsImxvZyIsImN5YW4iLCJ5ZWxsb3ciLCJjbG9uZSIsIm5ld1B1cmkiLCJmb3JtYXRTUUwiLCJ1bmZvcm1hdHRlZCIsImtleXdvcmRzIiwiZm9ybWF0dGVkIiwiZm9yRWFjaCIsImtleXdvcmQiLCJyZWdleCIsIlJlZ0V4cCIsInJlcGxhY2UiLCJ0b1VwcGVyQ2FzZSIsIm1ham9yQ2xhdXNlcyIsImNsYXVzZSIsImxpbmVzIiwic3BsaXQiLCJpbmRlbnRlZExpbmVzIiwiaW5kZW50TGV2ZWwiLCJsaW5lIiwidHJpbW1lZExpbmUiLCJ0cmltIiwiY2xvc2luZ1BhcmVucyIsIm1hdGNoIiwib3BlbmluZ1BhcmVucyIsIk1hdGgiLCJpbmRlbnQiLCJyZXBlYXQiLCJzbGljZSIsIm9yV2hlcmVJbiIsIm9yV2hlcmVOb3RJbiIsInN1YkJ1aWxkZXIiLCJzdWJHcm91cCIsIm9uIiwib3JPbiIsIm9uVmFsIiwiYW5kT25WYWwiLCJvck9uVmFsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJvbkNvbmZsaWN0IiwiYWN0aW9uIiwidGFyZ2V0IiwiaWdub3JlIiwibWVyZ2UiLCJtZXJnZU9iaiIsInJldHVybmluZyJdLCJtYXBwaW5ncyI6IkFBQUEsc0ZBQXNGLEdBQ3RGLDZFQUE2RSxHQUU3RSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLGdCQUFnQixhQUFhO0FBRXBDLFNBQVNDLGFBQWEsUUFBd0IsOEJBQTJCO0FBQ3pFLFNBQVNDLEtBQUssUUFBUSxvQkFBaUI7QUE4QnZDLE9BQU8sTUFBTUM7O0lBQ0hDLFVBQTZCO0lBQzdCQyxZQUE4QixLQUFLO0lBSzNDLFlBQ0UsQUFBT0MsSUFBVSxFQUNqQkMsaUJBQXNCLENBQ3RCO2FBRk9ELE9BQUFBO1FBR1AsSUFBSSxPQUFPQyxzQkFBc0IsVUFBVTtZQUN6QyxnQ0FBZ0M7WUFDaEMsSUFBSSxDQUFDSCxTQUFTLEdBQUcsSUFBSSxDQUFDRSxJQUFJLENBQUNDLG1CQUFtQkMsSUFBSSxDQUFDRDtZQUNuRCxJQUFJLENBQUNGLFNBQVMsR0FBRyxJQUFJLENBQUNJLGdCQUFnQixDQUFDRjtRQUN6QyxPQUFPLElBQUksT0FBT0Esc0JBQXNCLFVBQVU7WUFDaEQsTUFBTUcsVUFBVUMsT0FBT0QsT0FBTyxDQUFDSDtZQUMvQixJQUFJRyxRQUFRRSxNQUFNLEtBQUssR0FBRztnQkFDeEIsTUFBTSxJQUFJQyxNQUFNO1lBQ2xCO1lBQ0FmLE9BQU9ZLE9BQU8sQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sQ0FBQ0ksT0FBT0MsT0FBTyxHQUFHTCxPQUFPLENBQUMsRUFBRTtZQUNsQyxJQUFJLE9BQU9LLFdBQVcsVUFBVTtnQkFDOUIsSUFBSSxDQUFDWCxTQUFTLEdBQUcsSUFBSSxDQUFDRSxJQUFJLENBQUNTLFFBQVFQLElBQUksQ0FBQztvQkFBRSxDQUFDTSxNQUFNLEVBQUVDO2dCQUFPO2dCQUMxRCxJQUFJLENBQUNWLFNBQVMsR0FB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
|
|
975
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9wdXJpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub1RoZW5Qcm9wZXJ0eTogUHVyaeuKlCB0aGVuYWJsZSDsnbjthLDtjpjsnbTsiqTrpbwg6rWs7ZiE7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cbi8qKiBiaW9tZS1pZ25vcmUtYWxsIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBQdXJp64qUIOuLpOyWke2VnCDtg4DsnoXsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgVGFibGVTcGVjIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHtcbiAgQXZhaWxhYmxlQ29sdW1ucyxcbiAgQ29sdW1uS2V5cyxcbiAgQ29tcGFyaXNvbk9wZXJhdG9yLFxuICBFeHBhbmQsXG4gIEV4dHJhY3RDb2x1bW5UeXBlLFxuICBGdWxsdGV4dENvbHVtbnMsXG4gIEZ1enp5T3BlcmF0b3IsXG4gIEluc2VydERhdGEsXG4gIEluc2VydFJlc3VsdCxcbiAgTGVmdEpvaW5lZE1hcmtlcixcbiAgTGVmdEpvaW5NYXJrZXJGb3IsXG4gIE51bWVyaWNDb2x1bW5zLFxuICBPbkNvbmZsaWN0QWN0aW9uLFxuICBQYXJzZVNlbGVjdE9iamVjdCxcbiAgUmVzdWx0QXZhaWxhYmxlQ29sdW1ucyxcbiAgU2VsZWN0QWxsUmVzdWx0LFxuICBTZWxlY3RPYmplY3QsXG4gIFNpbmdsZVRhYmxlVmFsdWUsXG4gIFNxbEV4cHJlc3Npb24sXG4gIFRzSGlnaGxpZ2h0T3B0aW9ucyxcbiAgVHNRdWVyeUNvbmZpZyxcbiAgVHNRdWVyeU9wdGlvbnMsXG4gIFRzUmFua09wdGlvbnMsXG4gIFZlY3RvckNvbHVtbnMsXG4gIFdoZXJlQ29uZGl0aW9uLFxuICBXaGVyZU9wZXJhdG9yLFxufSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgeyBGVVpaWV9PUEVSQVRPUlMgfSBmcm9tIFwiLi9wdXJpLnR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IENsZWFyU3RhdGVtZW50cyB9IGZyb20gXCIuL3B1cmktc3Vic2V0LnR5cGVzXCI7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3Iob3BlcmF0b3I/OiBzdHJpbmcpOiBGdXp6eU9wZXJhdG9yIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG9wZXJhdG9yPy50cmltKCkgPz8gXCI8JVwiO1xuICBjb25zdCBmdXp6eU9wZXJhdG9yID0gRlVaWllfT1BFUkFUT1JTLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlID09PSBub3JtYWxpemVkKTtcblxuICBpZiAoIWZ1enp5T3BlcmF0b3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZnV6enkgb3BlcmF0b3I6ICR7b3BlcmF0b3IgPz8gXCJcIn1gKTtcbiAgfVxuXG4gIHJldHVybiBmdXp6eU9wZXJhdG9yO1xufVxuXG5leHBvcnQgY2xhc3MgUHVyaTxUU2NoZW1hLCBUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiwgVFJlc3VsdD4ge1xuICBwcml2YXRlIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXI7XG4gIHByaXZhdGUgdGFibGVTcGVjOiBUYWJsZVNwZWMgfCBudWxsID0gbnVsbDtcblxuICAvLyDsg53shLHsnpAg7Iuc6re464uI7LKY65OkXG4gIGNvbnN0cnVjdG9yKGtuZXg6IEtuZXgsIHRhYmxlTmFtZTogc3RyaW5nKTtcbiAgY29uc3RydWN0b3Ioa25leDogS25leCwgdGFibGVTb3VyY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFB1cmk8VFNjaGVtYSwgYW55LCBhbnk+Pik7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBrbmV4OiBLbmV4LFxuICAgIHRhYmxlTmFtZU9yU291cmNlOiBhbnksXG4gICkge1xuICAgIGlmICh0eXBlb2YgdGFibGVOYW1lT3JTb3VyY2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIENhc2U6IG5ldyBQdXJpKGtuZXgsIFwidXNlcnNcIilcbiAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4KHRhYmxlTmFtZU9yU291cmNlKS5mcm9tKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICAgIHRoaXMudGFibGVTcGVjID0gdGhpcy5zYWZlR2V0VGFibGVTcGVjKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNvdXJjZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRhYmxlTmFtZU9yU291cmNlKTtcbiAgICAgIGlmIChlbnRyaWVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUYWJsZSBzcGVjIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChlbnRyaWVzWzBdKTtcbiAgICAgIGNvbnN0IFthbGlhcywgc291cmNlXSA9IGVudHJpZXNbMF07XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leChzb3VyY2UpLmZyb20oeyBbYWxpYXNdOiBzb3VyY2UgfSk7XG4gICAgICAgIHRoaXMudGFibGVTcGVjID0gdGhpcy5zYWZlR2V0VGFibGVTcGVjKHNvdXJjZSk7XG4gICAgICB9IGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFB1cmkpIHtcbiAgICAgICAgY29uc3Qgc3VicXVlcnlCdWlsZGVyID0gc291cmNlLnJhd1F1ZXJ5KCk7XG4gICAgICAgIHRoaXMua25leFF1ZXJ5ID0gdGhpcy5rbmV4LmZyb20oc3VicXVlcnlCdWlsZGVyLmFzKGFsaWFzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHRhYmxlIHNwZWNpZmljYXRpb25cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdGFibGUgc3BlY2lmaWNhdGlvblwiKTtcbiAgICB9XG4gIH1cblxuICBzYWZlR2V0VGFibGVTcGVjKHRhYmxlTmFtZTogc3RyaW5nKTogVGFibGVTcGVjIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldFRhYmxlU3BlYyh0YWJsZU5hbWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljIFNRTCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTRUxFQ1RcbiAgc3RhdGljIGNvdW50KGNvbHVtbjogc3RyaW5nID0gXCIqXCIpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQ09VTlQoJHtjb2x1bW59KTo6aW50ZWdlcmAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgc3VtKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYFNVTSgke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBhdmcoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwibnVtYmVyXCIsXG4gICAgICBfc3FsOiBgQVZHKCR7Y29sdW1ufSlgLFxuICAgIH07XG4gIH1cbiAgc3RhdGljIG1heChjb2x1bW46IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiB7XG4gICAgICBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLFxuICAgICAgX3JldHVybjogXCJudW1iZXJcIixcbiAgICAgIF9zcWw6IGBNQVgoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbWluKGNvbHVtbjogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNxbF9leHByZXNzaW9uXCIsXG4gICAgICBfcmV0dXJuOiBcIm51bWJlclwiLFxuICAgICAgX3NxbDogYE1JTigke2NvbHVtbn0pYCxcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBjb25jYXQoLi4uYXJnczogc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgQ09OQ0FUKCR7YXJncy5qb2luKFwiLCBcIil9KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgdXBwZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgVVBQRVIoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuICBzdGF0aWMgbG93ZXIoY29sdW1uOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIixcbiAgICAgIF9yZXR1cm46IFwic3RyaW5nXCIsXG4gICAgICBfc3FsOiBgTE9XRVIoJHtjb2x1bW59KWAsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGVzY2FwZVNxbExpdGVyYWwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJydcIik7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB0b1RleHRPcGVyYW5kKGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPik6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09IFwib2JqZWN0XCIgJiYgY29sdW1uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCIpIHtcbiAgICAgIHJldHVybiBgKCR7Y29sdW1uLl9zcWx9KTo6dGV4dGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke2NvbHVtbn06OnRleHRgO1xuICB9XG5cbiAgc3RhdGljIHdvcmRTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5yYXdOdW1iZXIoXG4gICAgICBgd29yZF9zaW1pbGFyaXR5KCcke1B1cmkuZXNjYXBlU3FsTGl0ZXJhbChxdWVyeSl9Jzo6dGV4dCwgJHtQdXJpLnRvVGV4dE9wZXJhbmQoY29sdW1uKX0pYCxcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIHNpbWlsYXJpdHkoXG4gICAgY29sdW1uOiBzdHJpbmcgfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+LFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiBQdXJpLnJhd051bWJlcihcbiAgICAgIGBzaW1pbGFyaXR5KCR7UHVyaS50b1RleHRPcGVyYW5kKGNvbHVtbil9LCAnJHtQdXJpLmVzY2FwZVNxbExpdGVyYWwocXVlcnkpfSc6OnRleHQpYCxcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIHN0cmljdFdvcmRTaW1pbGFyaXR5KFxuICAgIGNvbHVtbjogc3RyaW5nIHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPixcbiAgICBxdWVyeTogc3RyaW5nLFxuICApOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4gUHVyaS5yYXdOdW1iZXIoXG4gICAgICBgc3RyaWN0X3dvcmRfc2ltaWxhcml0eSgnJHtQdXJpLmVzY2FwZVNxbExpdGVyYWwocXVlcnkpfSc6OnRleHQsICR7UHVyaS50b1RleHRPcGVyYW5kKGNvbHVtbil9KWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFJhdyBmdW5jdGlvbnMgZm9yIFNFTEVDVFxuICBzdGF0aWMgcmF3U3RyaW5nKHNxbDogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJzdHJpbmdcIiwgX3NxbDogc3FsIH07XG4gIH1cbiAgc3RhdGljIHJhd1N0cmluZ0FycmF5KHNxbDogc3RyaW5nKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1tdXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcInN0cmluZ1tdXCIsIF9zcWw6IHNxbCB9O1xuICB9XG4gIHN0YXRpYyByYXdOdW1iZXIoc3FsOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwibnVtYmVyXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcIm51bWJlclwiLCBfc3FsOiBzcWwgfTtcbiAgfVxuICBzdGF0aWMgcmF3Qm9vbGVhbihzcWw6IHN0cmluZyk6IFNxbEV4cHJlc3Npb248XCJib29sZWFuXCI+IHtcbiAgICByZXR1cm4geyBfdHlwZTogXCJzcWxfZXhwcmVzc2lvblwiLCBfcmV0dXJuOiBcImJvb2xlYW5cIiwgX3NxbDogc3FsIH07XG4gIH1cbiAgc3RhdGljIHJhd0RhdGUoc3FsOiBzdHJpbmcpOiBTcWxFeHByZXNzaW9uPFwiZGF0ZVwiPiB7XG4gICAgcmV0dXJuIHsgX3R5cGU6IFwic3FsX2V4cHJlc3Npb25cIiwgX3JldHVybjogXCJkYXRlXCIsIF9zcWw6IHNxbCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZUUyDqsoDsg4nslrQg7ZWY7J2065287J207YyFXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHRpdGxlOiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLnRpdGxlXCIsIHNlYXJjaCksXG4gICAqICAgY29udGVudDogUHVyaS5oaWdobGlnaHQoXCJwb3N0cy5jb250ZW50XCIsIHNlYXJjaCwge1xuICAgKiAgICAgc3RhcnRTZWw6IFwiPG1hcms+XCIsXG4gICAqICAgICBzdG9wU2VsOiBcIjwvbWFyaz5cIixcbiAgICogICAgIG1heEZyYWdtZW50czogMyxcbiAgICogICB9KSxcbiAgICogfSlcbiAgICovXG4gIHN0YXRpYyB0c0hpZ2hsaWdodChcbiAgICBjb2x1bW46IHN0cmluZyxcbiAgICBxdWVyeTogc3RyaW5nLFxuICAgIF9vcHRpb25zPzogVHNIaWdobGlnaHRPcHRpb25zLFxuICApOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+IHtcbiAgICBjb25zdCB7IHBhcnNlciA9IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIiwgY29uZmlnID0gXCJzaW1wbGVcIiwgLi4ub3B0aW9ucyB9ID0gX29wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBobE9wdGlvblBhcnRzID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucykubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBgJHtpbmZsZWN0aW9uLmNhbWVsaXplKGtleSl9PSR7dmFsdWV9YDtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhsT3B0aW9ucyA9IGhsT3B0aW9uUGFydHMubGVuZ3RoID4gMCA/IGAsICcke2hsT3B0aW9uUGFydHMuam9pbihcIiwgXCIpfSdgIDogXCJcIjtcblxuICAgIC8vIFRPRE86IHJhd0JpbmRpbmcg66mU7ISc65OcIOunjOuTpOyWtOyEnCBYU1Mg67Cp7KeAXG4gICAgcmV0dXJuIFB1cmkucmF3U3RyaW5nKFxuICAgICAgYHRzX2hlYWRsaW5lKCcke2NvbmZpZ30nLCAke2NvbHVtbn0sICR7cGFyc2VyfSgnJHtjb25maWd9JywgJyR7cXVlcnl9Jykke2hsT3B0aW9uc30pYCxcbiAgICApO1xuICB9XG5cbiAgLy8gdHNfcmFua1xuICBzdGF0aWMgdHNSYW5rKGNvbHVtbjogc3RyaW5nLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogVHNSYW5rT3B0aW9ucyk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIHJldHVybiBQdXJpLl90c1JhbmsoXCJ0c19yYW5rXCIsIGNvbHVtbiwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gdHNfcmFua19jZFxuICBzdGF0aWMgdHNSYW5rQ2QoY29sdW1uOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM/OiBUc1JhbmtPcHRpb25zKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkuX3RzUmFuayhcInRzX3JhbmtfY2RcIiwgY29sdW1uLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBzdGF0aWMgX3RzUmFuayhcbiAgICB0eXBlOiBcInRzX3JhbmtcIiB8IFwidHNfcmFua19jZFwiLFxuICAgIGNvbHVtbjogc3RyaW5nLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFRzUmFua09wdGlvbnMsXG4gICk6IFNxbEV4cHJlc3Npb248XCJudW1iZXJcIj4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcnNlciA9IFwid2Vic2VhcmNoX3RvX3RzcXVlcnlcIixcbiAgICAgIGNvbmZpZyA9IFwic2ltcGxlXCIsXG4gICAgICBub3JtYWxpemF0aW9uLFxuICAgICAgd2VpZ2h0cyxcbiAgICB9ID0gb3B0aW9ucyA/PyB7fTtcblxuICAgIGNvbnN0IHdlaWdodENsYXVzZSA9IHdlaWdodHMgPyBgQVJSQVlbJHt3ZWlnaHRzLmpvaW4oXCIsIFwiKX1dLCBgIDogXCJcIjtcbiAgICBjb25zdCBub3JtYWxpemF0aW9uQ2xhdXNlID0gbm9ybWFsaXphdGlvbiA/IGAsICR7bm9ybWFsaXphdGlvbn1gIDogXCJcIjtcblxuICAgIHJldHVybiBQdXJpLnJhd051bWJlcihcbiAgICAgIGAke3R5cGV9KCR7d2VpZ2h0Q2xhdXNlfSR7Y29sdW1ufSwgJHtwYXJzZXJ9KCcke2NvbmZpZ30nLCAnJHtxdWVyeX0nKSR7bm9ybWFsaXphdGlvbkNsYXVzZX0pYCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4kg7KCQ7IiYXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHNjb3JlOiBQdXJpLnNjb3JlKCksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgc2NvcmUoKTogU3FsRXhwcmVzc2lvbjxcIm51bWJlclwiPiB7XG4gICAgcmV0dXJuIFB1cmkucmF3TnVtYmVyKFwicGdyb29uZ2Ffc2NvcmUodGFibGVvaWQsIGN0aWQpXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBHcm9vbmdhIEZ1bGxUZXh0IOyduOuNseyKpCDqsoDsg4kg7ZWY7J2065287J207YyFXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC5zZWxlY3Qoe1xuICAgKiAgIHRpdGxlOiBQdXJpLmhpZ2hsaWdodChcInBvc3RzLnRpdGxlXCIsIHNlYXJjaCksXG4gICAqIH0pXG4gICAqL1xuICBzdGF0aWMgaGlnaGxpZ2h0KGNvbHVtbjogc3RyaW5nLCBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+O1xuICBzdGF0aWMgaGlnaGxpZ2h0KGNvbHVtbnM6IHN0cmluZ1tdLCBxdWVyeTogc3RyaW5nIHwgc3RyaW5nW10pOiBTcWxFeHByZXNzaW9uPFwic3RyaW5nW11cIj47XG5cbiAgc3RhdGljIGhpZ2hsaWdodChcbiAgICBjb2x1bW5PckNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIHF1ZXJ5OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgKTogU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPiB8IFNxbEV4cHJlc3Npb248XCJzdHJpbmdbXVwiPiB7XG4gICAgY29uc3QgcXVlcnlDbGF1c2UgPSBgQVJSQVlbJHsoQXJyYXkuaXNBcnJheShxdWVyeSkgPyBxdWVyeSA6IFtxdWVyeV0pLm1hcCgocSkgPT4gYCcke3F9J2ApLmpvaW4oXCIsXCIpfV1gO1xuXG4gICAgLy8g64uo7J28IOy7rOufvOyduCDqsr3smrBcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29sdW1ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFB1cmkucmF3U3RyaW5nKGBwZ3Jvb25nYV9oaWdobGlnaHRfaHRtbCgke2NvbHVtbk9yQ29sdW1uc30sICR7cXVlcnlDbGF1c2V9KWApO1xuICAgIH1cblxuICAgIC8vIOy7rOufvCDrsLDsl7Tsnbgg6rK97JqwXG4gICAgcmV0dXJuIFB1cmkucmF3U3RyaW5nQXJyYXkoXG4gICAgICBgcGdyb29uZ2FfaGlnaGxpZ2h0X2h0bWwoQVJSQVlbJHtjb2x1bW5PckNvbHVtbnMuam9pbihcIixcIil9XSwgJHtxdWVyeUNsYXVzZX0pYCxcbiAgICApO1xuICB9XG5cbiAgLy8gU0VMRUNUIChvdmVyd3JpdGUpXG4gIHNlbGVjdDxUU2VsZWN0IGV4dGVuZHMgU2VsZWN0T2JqZWN0PFRUYWJsZXM+PihcbiAgICBzZWxlY3RPYmo6IFRTZWxlY3QsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgUGFyc2VTZWxlY3RPYmplY3Q8VFRhYmxlcywgVFNlbGVjdD4+IHtcbiAgICAvLyDspJHssqkg6rCd7LK066W8IGZsYXTtlZjqsowg67OA7ZmYXG4gICAgY29uc3QgZmxhdFNlbGVjdCA9IHRoaXMuZmxhdHRlblNlbGVjdChzZWxlY3RPYmopO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhdXNlczogKHN0cmluZyB8IEtuZXguUmF3KVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29sdW1uT3JGdW5jdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZmxhdFNlbGVjdCkpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uT3JGdW5jdGlvbiA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW5PckZ1bmN0aW9uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCIpIHtcbiAgICAgICAgLy8gU1FMIO2VqOyImOyduCDqsr3smrBcbiAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKHRoaXMua25leC5yYXcoYCR7Y29sdW1uT3JGdW5jdGlvbi5fc3FsfSBhcyBcIiR7YWxpYXN9XCJgKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDsnbzrsJgg7Lus65+87J24IOqyveyasFxuICAgICAgICBjb25zdCBjb2x1bW5QYXRoID0gY29sdW1uT3JGdW5jdGlvbiBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChhbGlhcyA9PT0gY29sdW1uUGF0aCkge1xuICAgICAgICAgIC8vIGFsaWFz7JmAIOy7rOufvOuqheydtCDqsJnsnLzrqbQgYWxpYXMg7IOd6561XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGNvbHVtblBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGFsaWFzIOyngOyglVxuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChgJHtjb2x1bW5QYXRofSBhcyAke2FsaWFzfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNlbGVjdENsYXVzZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiDspJHssqkg6rCd7LK066W8IGZsYXQg6rCd7LK066GcIOuzgO2ZmFxuICAgKiDsmIg6IHsgcGFyZW50OiB7IGlkOiBcInBhcmVudC5pZFwiLCBuYW1lOiBcInBhcmVudC5uYW1lXCIgfSB9XG4gICAqICAg4oaSIHsgcGFyZW50X19pZDogXCJwYXJlbnQuaWRcIiwgcGFyZW50X19uYW1lOiBcInBhcmVudC5uYW1lXCIgfVxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuU2VsZWN0KHNlbGVjdE9iajogUmVjb3JkPHN0cmluZywgYW55PiwgcHJlZml4ID0gXCJcIik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGZsYXRTZWxlY3Q6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlbGVjdE9iaikpIHtcbiAgICAgIGNvbnN0IGZ1bGxLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9X18ke2tleX1gIDoga2V5O1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmICEoXCJfdHlwZVwiIGluIHZhbHVlKSkge1xuICAgICAgICAvLyDspJHssqkg6rCd7LK07J24IOqyveyasCAtIOyerOq3gCDsspjrpqxcbiAgICAgICAgY29uc3QgbmVzdGVkID0gdGhpcy5mbGF0dGVuU2VsZWN0KHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmbGF0U2VsZWN0LCBuZXN0ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g7J2867CYIOqwkuyduCDqsr3smrAgKOy7rOufvCDqsr3roZwg65iQ64qUIFNxbEV4cHJlc3Npb24pXG4gICAgICAgIGZsYXRTZWxlY3RbZnVsbEtleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdFNlbGVjdDtcbiAgfVxuXG4gIC8vIFNFTEVDVCAoc2VsZWN064qUIG92ZXJ3cml0ZSwgYXBwZW5kU2VsZWN064qUIGFwcGVuZClcbiAgYXBwZW5kU2VsZWN0PFRTZWxlY3QgZXh0ZW5kcyBTZWxlY3RPYmplY3Q8VFRhYmxlcz4+KFxuICAgIHNlbGVjdE9iajogVFNlbGVjdCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0ICYgUGFyc2VTZWxlY3RPYmplY3Q8VFRhYmxlcywgVFNlbGVjdD4+IHtcbiAgICAvLyDspJHssqkg6rCd7LK066W8IGZsYXTtlZjqsowg67OA7ZmYXG4gICAgY29uc3QgZmxhdFNlbGVjdCA9IHRoaXMuZmxhdHRlblNlbGVjdChzZWxlY3RPYmopO1xuXG4gICAgY29uc3Qgc2VsZWN0Q2xhdXNlczogKHN0cmluZyB8IEtuZXguUmF3KVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFthbGlhcywgY29sdW1uT3JGdW5jdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZmxhdFNlbGVjdCkpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uT3JGdW5jdGlvbiA9PT0gXCJvYmplY3RcIiAmJiBjb2x1bW5PckZ1bmN0aW9uLl90eXBlID09PSBcInNxbF9leHByZXNzaW9uXCIpIHtcbiAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKHRoaXMua25leC5yYXcoYCR7Y29sdW1uT3JGdW5jdGlvbi5fc3FsfSBhcyAke2FsaWFzfWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbHVtblBhdGggPSBjb2x1bW5PckZ1bmN0aW9uIGFzIHN0cmluZztcbiAgICAgICAgaWYgKGFsaWFzID09PSBjb2x1bW5QYXRoKSB7XG4gICAgICAgICAgc2VsZWN0Q2xhdXNlcy5wdXNoKGNvbHVtblBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGVjdENsYXVzZXMucHVzaChgJHtjb2x1bW5QYXRofSBhcyAke2FsaWFzfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNlbGVjdENsYXVzZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIFNFTEVDVCAqXG4gIHNlbGVjdEFsbCgpOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFNlbGVjdEFsbFJlc3VsdDxUVGFibGVzPj4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChcIipcIik7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gRElTVElOQ1RcbiAgZGlzdGluY3Q8VENvbHVtbnMgZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PiguLi5jb2x1bW5zOiBUQ29sdW1uc1tdKTogdGhpcztcbiAgZGlzdGluY3QoLi4uY29sdW1uczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5kaXN0aW5jdCguLi4oY29sdW1ucyBhcyBzdHJpbmdbXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gQ0xFQVJcbiAgY2xlYXIoc3RhdGVtZW50OiBDbGVhclN0YXRlbWVudHMpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5jbGVhcihzdGF0ZW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8ga25leOyXkCDsl4bslrTshJwg7KeB7KCRIOq1rO2YhO2VqFxuICBjbGVhckpvaW4oYWxpYXM6IHN0cmluZyk6IHRoaXMge1xuICAgICh0aGlzLmtuZXhRdWVyeSBhcyBhbnkpLl9zdGF0ZW1lbnRzID0gKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHMuZmlsdGVyKChzOiBhbnkpID0+IHtcbiAgICAgIGlmIChcImpvaW5UeXBlXCIgaW4gcykge1xuICAgICAgICBjb25zdCBbX2FsaWFzLCBfdGFibGVdID0gT2JqZWN0LmVudHJpZXMocy50YWJsZSlbMF07XG4gICAgICAgIHJldHVybiBfYWxpYXMgIT09IGFsaWFzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhc1xuICBqb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTdWJSZXN1bHQ+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+LCAvLyDshJzruIzsv7zrpqzsnZggVFJlc3VsdFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gSk9JTjog7YWM7J2067iUICsgQWxpYXNcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5BbGlhc30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCAvLyBUVGFibGVzIO2ZleyepSFcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIEpPSU46IO2FjOydtOu4lOuqhVxuICBqb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hPihcbiAgICB0YWJsZU5hbWU6IFRKb2luVGFibGUsXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPixcbiAgICByaWdodDogYCR7VEpvaW5UYWJsZSAmIHN0cmluZ30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCAvLyDthYzsnbTruJTrqoXsnbQg7YKkXG4gICAgVFJlc3VsdFxuICA+O1xuICAvLyBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhcyArIOy9nOuwsVxuICBqb2luPFRKb2luQWxpYXMgZXh0ZW5kcyBzdHJpbmcsIFRTdWJSZXN1bHQ+KFxuICAgIHRhYmxlU3BlYzogeyBbSyBpbiBUSm9pbkFsaWFzXTogUHVyaTxUU2NoZW1hLCBhbnksIFRTdWJSZXN1bHQ+IH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQ+LCBUUmVzdWx0PjtcbiAgLy8gSk9JTjog7YWM7J2067iUICsgQWxpYXMgKyDsvZzrsLFcbiAgam9pbjxUSm9pblRhYmxlIGV4dGVuZHMga2V5b2YgVFNjaGVtYSwgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgY2FsbGJhY2s6IChqOiBKb2luQ2xhdXNlR3JvdXA8VFRhYmxlcywgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+PikgPT4gdm9pZCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTY2hlbWFbVEpvaW5UYWJsZV0+LCBUUmVzdWx0PjtcbiAgLy8gSk9JTjog7YWM7J2067iU66qFICsg7L2c67CxXG4gIGpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4sIFRSZXN1bHQ+O1xuICAvLyBKT0lOIOyLpOygnCDqtaztmIRcbiAgam9pbih0YWJsZU5hbWVPclNwZWM6IGFueSwgLi4uYXJnczogYW55W10pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9fY29tbW9uSm9pbihcImpvaW5cIiwgdGFibGVOYW1lT3JTcGVjLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8vIExFRlQgSk9JTjog7ISc67iM7L+866asICsgQWxpYXNcbiAgbGVmdEpvaW48VEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZywgVFN1YlJlc3VsdD4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBQdXJpPFRTY2hlbWEsIGFueSwgVFN1YlJlc3VsdD4gfSxcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+LFxuICAgIHJpZ2h0OiBgJHtUSm9pbkFsaWFzfS4ke0NvbHVtbktleXM8VFN1YlJlc3VsdD59YCxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzICYgUmVjb3JkPFRKb2luQWxpYXMsIFRTdWJSZXN1bHQgJiBMZWZ0Sm9pbmVkTWFya2VyPiwgVFJlc3VsdD47IC8vIOyEnOu4jOy/vOumrOydmCBUUmVzdWx0XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iUICsgQWxpYXNcbiAgLy8gRksgbnVsbGFibGUg7Jes67aA7JeQIOuUsOudvCDsnpDrj5nsnLzroZwgTGVmdEpvaW5lZE1hcmtlciDqsrDsoJVcbiAgbGVmdEpvaW48XG4gICAgVEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWEsXG4gICAgVEpvaW5BbGlhcyBleHRlbmRzIHN0cmluZyxcbiAgICBUTGVmdCBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4sXG4gID4oXG4gICAgdGFibGVTcGVjOiB7IFtLIGluIFRKb2luQWxpYXNdOiBUSm9pblRhYmxlIH0sXG4gICAgbGVmdDogVExlZnQsXG4gICAgcmlnaHQ6IGAke1RKb2luQWxpYXN9LiR7Q29sdW1uS2V5czxUU2NoZW1hW1RKb2luVGFibGVdPn1gLFxuICApOiBQdXJpPFxuICAgIFRTY2hlbWEsXG4gICAgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU2NoZW1hW1RKb2luVGFibGVdICYgTGVmdEpvaW5NYXJrZXJGb3I8VFRhYmxlcywgVExlZnQ+PixcbiAgICBUUmVzdWx0XG4gID47XG4gIC8vIExFRlQgSk9JTjog7YWM7J2067iU66qFXG4gIGxlZnRKb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUTGVmdCBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBsZWZ0OiBUTGVmdCxcbiAgICByaWdodDogYCR7VEpvaW5UYWJsZSAmIHN0cmluZ30uJHtDb2x1bW5LZXlzPFRTY2hlbWFbVEpvaW5UYWJsZV0+fWAsXG4gICk6IFB1cmk8XG4gICAgVFNjaGVtYSxcbiAgICBUVGFibGVzICYgUmVjb3JkPFRKb2luVGFibGUsIFRTY2hlbWFbVEpvaW5UYWJsZV0gJiBMZWZ0Sm9pbk1hcmtlckZvcjxUVGFibGVzLCBUTGVmdD4+LFxuICAgIFRSZXN1bHRcbiAgPjtcbiAgLy8gTEVGVCBKT0lOOiDshJzruIzsv7zrpqwgKyBBbGlhcyArIOy9nOuwsVxuICBsZWZ0Sm9pbjxUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nLCBUU3ViUmVzdWx0PihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFB1cmk8VFNjaGVtYSwgYW55LCBUU3ViUmVzdWx0PiB9LFxuICAgIGNhbGxiYWNrOiAoajogSm9pbkNsYXVzZUdyb3VwPFRUYWJsZXMsIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0Pj4pID0+IHZvaWQsXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcyAmIFJlY29yZDxUSm9pbkFsaWFzLCBUU3ViUmVzdWx0ICYgTGVmdEpvaW5lZE1hcmtlcj4sIFRSZXN1bHQ+O1xuICAvLyBMRUZUIEpPSU46IO2FjOydtOu4lCArIEFsaWFzICsg7L2c67CxXG4gIGxlZnRKb2luPFRKb2luVGFibGUgZXh0ZW5kcyBrZXlvZiBUU2NoZW1hLCBUSm9pbkFsaWFzIGV4dGVuZHMgc3RyaW5nPihcbiAgICB0YWJsZVNwZWM6IHsgW0sgaW4gVEpvaW5BbGlhc106IFRKb2luVGFibGUgfSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5BbGlhcywgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjtcbiAgLy8gTEVGVCBKT0lOOiDthYzsnbTruJTrqoUgKyDsvZzrsLFcbiAgbGVmdEpvaW48VEpvaW5UYWJsZSBleHRlbmRzIGtleW9mIFRTY2hlbWE+KFxuICAgIHRhYmxlTmFtZTogVEpvaW5UYWJsZSxcbiAgICBjYWxsYmFjazogKGo6IEpvaW5DbGF1c2VHcm91cDxUVGFibGVzLCBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXT4+KSA9PiB2b2lkLFxuICApOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMgJiBSZWNvcmQ8VEpvaW5UYWJsZSwgVFNjaGVtYVtUSm9pblRhYmxlXSAmIExlZnRKb2luZWRNYXJrZXI+LCBUUmVzdWx0PjtcbiAgLy8gTEVGVCBKT0lOIOyLpOygnCDqtaztmIRcbiAgbGVmdEpvaW4odGFibGVOYW1lT3JTcGVjOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fX2NvbW1vbkpvaW4oXCJsZWZ0Sm9pblwiLCB0YWJsZU5hbWVPclNwZWMsIC4uLmFyZ3MpO1xuICB9XG5cbiAgX19jb21tb25Kb2luKGpvaW5UeXBlOiBcImpvaW5cIiB8IFwibGVmdEpvaW5cIiwgdGFibGVOYW1lT3JTcGVjOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgaWYgKHR5cGVvZiB0YWJsZU5hbWVPclNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIENhc2UgMTogam9pbihcInBvc3RzXCIsIC4uLilcbiAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRhYmxlTmFtZU9yU3BlYztcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gam9pbihcInBvc3RzXCIsIGNhbGxiYWNrKVxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3NbMF07XG4gICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXSh0YWJsZU5hbWUsIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IEpvaW5DbGF1c2VHcm91cChqb2luQ2xhdXNlKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gam9pbihcInBvc3RzXCIsIGxlZnQsIHJpZ2h0KVxuICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHRhYmxlTmFtZSwgbGVmdCwgcmlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRhYmxlTmFtZU9yU3BlYyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgLy8gQ2FzZSAyOiBqb2luKHsgYWxpYXM6IFwidGFibGVcIiB9LCAuLi4pIG9yIGpvaW4oeyBhbGlhczogc3VicXVlcnkgfSwgLi4uKVxuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRhYmxlTmFtZU9yU3BlYyk7XG4gICAgICBpZiAoZW50cmllcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGFibGUgc3BlYyBtdXN0IGhhdmUgZXhhY3RseSBvbmUgZW50cnlcIik7XG4gICAgICB9XG4gICAgICBhc3NlcnQoZW50cmllc1swXSk7XG4gICAgICBjb25zdCBbW2FsaWFzLCBzcGVjXV0gPSBlbnRyaWVzO1xuXG4gICAgICBpZiAodHlwZW9mIHNwZWMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8g7YWM7J2067iUOiBqb2luKHsgcDogXCJwb3N0c1wiIH0sIC4uLilcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAvLyBDYWxsYmFja1xuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gYXJnc1swXTtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oeyBbYWxpYXNdOiBzcGVjIH0sIChqb2luQ2xhdXNlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgSm9pbkNsYXVzZUdyb3VwKGpvaW5DbGF1c2UpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTaW1wbGVcbiAgICAgICAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gYXJncztcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeVtqb2luVHlwZV0oeyBbYWxpYXNdOiBzcGVjIH0sIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzcGVjIGluc3RhbmNlb2YgUHVyaSkge1xuICAgICAgICAvLyDshJzruIzsv7zrpqw6IGpvaW4oeyBzcTogc3VicXVlcnkgfSwgLi4uKVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIC8vIENhbGxiYWNrXG4gICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSBhcmdzWzBdO1xuICAgICAgICAgIHRoaXMua25leFF1ZXJ5W2pvaW5UeXBlXShzcGVjLnJhd1F1ZXJ5KCkuYXMoYWxpYXMpLCAoam9pbkNsYXVzZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2sobmV3IEpvaW5DbGF1c2VHcm91cChqb2luQ2xhdXNlKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2ltcGxlXG4gICAgICAgICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IGFyZ3M7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnlbam9pblR5cGVdKHNwZWMucmF3UXVlcnkoKS5hcyhhbGlhcyksIGxlZnQsIHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0YWJsZSBzcGVjaWZpY2F0aW9uXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50c1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFOiDqsJ3ssrQgLSDsgqzsmqk6IC53aGVyZSh7IFwidS5pZFwiOiAxLCBcInUuc3RhdHVzXCI6IFwiYWN0aXZlXCIgfSlcbiAgd2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIDEpLCAud2hlcmUoXCJ1LmlkXCIsIG51bGwpXG4gIHdoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBXSEVSRTog7Lus65+8IC0g7IKs7JqpOiAud2hlcmUoXCJ1LmlkXCIsIFwiPlwiLCAxMCksIC53aGVyZShcInUuaWRcIiwgXCIhPVwiLCBudWxsKVxuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gV0hFUkU6IFNRTCDtkZztmITsi50gLSDsgqzsmqk6IC53aGVyZShwdXJpLnJhdyhcIkNPTkNBVCh1Lm5hbWUsIHUuZW1haWwpXCIpLCBcImxpa2VcIiwgXCIldGVzdCVcIilcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEtuZXguUmF3Pihjb2x1bW46IFRDb2x1bW4sIG9wZXJhdG9yOiBXaGVyZU9wZXJhdG9yLCB2YWx1ZTogYW55KTogdGhpcztcbiAgLy8gV0hFUkU6IOy7rOufvCAtIOyCrOyaqTogLndoZXJlKFwidS5pZFwiLCBcImxpa2VcIiwgXCIldGVzdCVcIilcbiAgd2hlcmUoLi4uYXJnczogW2NvbHVtbk9yQ29uZGl0aW9uczogYW55LCBvcGVyYXRvck9yVmFsdWU/OiBhbnksIHZhbHVlPzogYW55XSk6IHRoaXMge1xuICAgIGNvbnN0IFtjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSwgdmFsdWVdID0gYXJncztcbiAgICBpZiAodHlwZW9mIGNvbHVtbk9yQ29uZGl0aW9ucyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgaWYgKG9wZXJhdG9yT3JWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZShjb2x1bW5PckNvbmRpdGlvbnMsIG9wZXJhdG9yT3JWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBpZiAob3BlcmF0b3JPclZhbHVlID09PSBcIiE9XCIpIHtcbiAgICAgICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU5vdE51bGwoY29sdW1uT3JDb25kaXRpb25zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvck9yVmFsdWUgPT09IFwiPVwiKSB7XG4gICAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVOdWxsKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucywgb3BlcmF0b3JPclZhbHVlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LndoZXJlKGNvbHVtbk9yQ29uZGl0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV0hFUkUgSU5cbiAgd2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogUHVyaTxUU2NoZW1hLCBUVGFibGVzLCBUUmVzdWx0PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVJbihjb2x1bW4sIHZhbHVlcyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICB9XG5cbiAgLy8gV0hFUkUgTk9UIElOXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4ge1xuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlTm90SW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgIHJldHVybiB0aGlzIGFzIGFueTtcbiAgfVxuXG4gIC8vIFdIRVJFIE1BVENIXG4gIHdoZXJlTWF0Y2g8VENvbHVtbiBleHRlbmRzIEZ1bGx0ZXh0Q29sdW1uczxUVGFibGVzPj4oY29sdW1uOiBUQ29sdW1uLCB2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYE1BVENIICgke1N0cmluZyhjb2x1bW4pfSkgQUdBSU5TVCAoPylgLCBbdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQR3Jvb25nYSBGdWxsVGV4dCDsnbjrjbHsiqQg6rKA7IOJXG4gICAqIC0g7IKs7Jqp7ZWgIFBHcm9vbmdhIOyduOuNseyKpOyZgCDrj5nsnbztlZwg7Lus65+8IOq1rOyEseycvOuhnCDqsoDsg4ntlbTslbwg7J24642x7Iqk6rCAIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICog64uo7J28IOy7rOufvCDqsoDsg4k6XG4gICAqIGBgYHNxbFxuICAgKiBXSEVSRSBuYW1lICZAfiAnc2VhcmNoJ1xuICAgKiBgYGBcbiAgICpcbiAgICog67O17ZWpIOy7rOufvCDqsoDsg4k6XG4gICAqIGBgYHNxbFxuICAgKiBXSEVSRSBBUlJBWVtuYW1lOjp0ZXh0LCBkZXNjcmlwdGlvbjo6dGV4dF0gJkB+ICdzZWFyY2gnXG4gICAqIGBgYFxuICAgKi9cbiAgd2hlcmVTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbiB8IFRDb2x1bW5bXSxcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICB3ZWlnaHRzPzogbnVtYmVyW107IC8vIOygleyImCDrsLDsl7RcbiAgICB9LFxuICApOiB0aGlzIHtcbiAgICBjb25zdCB7IHdlaWdodHMgfSA9IG9wdGlvbnMgPz8ge307XG4gICAgY29uc3QgY29sdW1uRXhwciA9IEFycmF5LmlzQXJyYXkoY29sdW1uKVxuICAgICAgPyBgQVJSQVlbJHtjb2x1bW4ubWFwKChjKSA9PiBgJHtjfTo6dGV4dGApLmpvaW4oXCIsXCIpfV1gXG4gICAgICA6IGNvbHVtbjtcbiAgICBjb25zdCBwZ3Jvb25nYUNvbmRpdGlvbiA9IGBwZ3Jvb25nYV9jb25kaXRpb24oPyR7d2VpZ2h0cz8ubGVuZ3RoID8gYCwgd2VpZ2h0cyA9PiBBUlJBWVske3dlaWdodHMuam9pbihcIixcIil9XWAgOiBcIlwifSlgO1xuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYCR7Y29sdW1uRXhwcn0gJkB+ICR7cGdyb29uZ2FDb25kaXRpb259YCwgW3ZhbHVlXSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIEZVTExURVhUXG4gIHdoZXJlVHNTZWFyY2g8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4gfCBTcWxFeHByZXNzaW9uPFwic3RyaW5nXCI+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogVHNRdWVyeU9wdGlvbnMgfCBUc1F1ZXJ5Q29uZmlnLFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBvcHRzID1cbiAgICAgIHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID8gKHsgY29uZmlnOiBvcHRpb25zIH0gYXMgVHNRdWVyeU9wdGlvbnMpIDogKG9wdGlvbnMgPz8ge30pO1xuXG4gICAgY29uc3QgcGFyc2VyID0gb3B0cy5wYXJzZXIgPz8gXCJ3ZWJzZWFyY2hfdG9fdHNxdWVyeVwiO1xuICAgIGNvbnN0IGNvbmZpZyA9IG9wdHMuY29uZmlnID8/IFwic2ltcGxlXCI7XG4gICAgY29uc3QgY29sdW1uRXhwciA9XG4gICAgICB0eXBlb2YgY29sdW1uID09PSBcIm9iamVjdFwiICYmIGNvbHVtbi5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgID8gY29sdW1uLl9zcWxcbiAgICAgICAgOiBTdHJpbmcoY29sdW1uKTtcblxuICAgIHRoaXMua25leFF1ZXJ5LndoZXJlUmF3KGAke2NvbHVtbkV4cHJ9IEBAICR7cGFyc2VyfSg/LCA/KWAsIFtjb25maWcsIHZhbHVlXSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aGVyZUZ1enp5PFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+IHwgU3FsRXhwcmVzc2lvbjxcInN0cmluZ1wiPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIG9wZXJhdG9yPzogRnV6enlPcGVyYXRvcjtcbiAgICB9LFxuICApOiB0aGlzIHtcbiAgICBjb25zdCBvcGVyYXRvciA9IG5vcm1hbGl6ZUZ1enp5T3BlcmF0b3Iob3B0aW9ucz8ub3BlcmF0b3IpO1xuICAgIGNvbnN0IHRleHRDb2x1bW5FeHByID0gUHVyaS50b1RleHRPcGVyYW5kKGNvbHVtbik7XG5cbiAgICBpZiAob3BlcmF0b3IgPT09IFwiJVwiKSB7XG4gICAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhgJHt0ZXh0Q29sdW1uRXhwcn0gJHtvcGVyYXRvcn0gPzo6dGV4dGAsIFt2YWx1ZV0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD86OnRleHQgJHtvcGVyYXRvcn0gJHt0ZXh0Q29sdW1uRXhwcn1gLCBbdmFsdWVdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIFJBV1xuICB3aGVyZVJhdyhzcWw6IHN0cmluZywgYmluZGluZ3M/OiByZWFkb25seSB1bmtub3duW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZVJhdyhzcWwsIGJpbmRpbmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIFdIRVJFIOq0hO2YuCDqt7jro7ntlZFcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JXaGVyZSgoYnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihidWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKGdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SREVSIEJZXG4gIG9yZGVyQnk8VENvbHVtbiBleHRlbmRzIFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIixcbiAgKTogdGhpcztcbiAgb3JkZXJCeShjb2x1bW46IHN0cmluZywgZGlyZWN0aW9uOiBcImFzY1wiIHwgXCJkZXNjXCIgPSBcImFzY1wiKTogdGhpcyB7XG4gICAgdGhpcy5rbmV4UXVlcnkub3JkZXJCeShjb2x1bW4sIGRpcmVjdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICog67Kh7YSwIOycoOyCrOuPhCDqsoDsg4kg7ISk7KCVXG4gICAqXG4gICAqIC0gU0VMRUNU7JeQIHNpbWlsYXJpdHkg7Lus65+8IOy2lOqwgFxuICAgKiAtIFdIRVJFIGNvbCBJUyBOT1QgTlVMTCDstpTqsIBcbiAgICogLSB0aHJlc2hvbGTqsIAg7J6I7Jy866m0IFdIRVJFIOyhsOqxtCDstpTqsIBcbiAgICogLSDquLDsobQgT1JERVIgQlnrpbwgY2xlYXLtlZjqs6Ag7JuQ7IucIOyXsOyCsOyekOuhnCDsoJXroKwgKEhOU1cg7J24642x7IqkIOy1nOygge2ZlClcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbiDrsqHthLAg7Lus65+8IOqyveuhnFxuICAgKiBAcGFyYW0gZW1iZWRkaW5nIOy/vOumrCDsnoTrsqDrlKkg67Kh7YSwXG4gICAqIEBwYXJhbSBvcHRpb25zIG1ldGhvZCwgdGhyZXNob2xkLCBhcyDrk7Eg7Ji17IWYXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gY29zaW5lIHNpbWlsYXJpdHkgKOq4sOuzuOqwkilcbiAgICogcWIudmVjdG9yU2ltaWxhcml0eShcImNvbHVtbk5hbWVcIiwgcXVlcnlWZWN0b3IsIHtcbiAgICogICBtZXRob2Q6IFwiY29zaW5lXCIsXG4gICAqICAgdGhyZXNob2xkOiAwLjVcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIEwyIGRpc3RhbmNlXG4gICAqIHFiLnZlY3RvclNpbWlsYXJpdHkoXCJjb2x1bW5OYW1lXCIsIHF1ZXJ5VmVjdG9yLCB7XG4gICAqICAgbWV0aG9kOiBcImwyXCIsXG4gICAqICAgdGhyZXNob2xkOiAxLjUgIC8vIOqxsOumrOqwgCAxLjUg7J207ZWY7J24IOqysOqzvOunjFxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gSW5uZXIgcHJvZHVjdFxuICAgKiBxYi52ZWN0b3JTaW1pbGFyaXR5KFwiY29sdW1uTmFtZVwiLCBxdWVyeVZlY3Rvciwge1xuICAgKiAgIG1ldGhvZDogXCJpbm5lcl9wcm9kdWN0XCIsXG4gICAqICAgdGhyZXNob2xkOiAwLjdcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgdmVjdG9yU2ltaWxhcml0eShcbiAgICBjb2x1bW46IFZlY3RvckNvbHVtbnM8VFRhYmxlcz4sXG4gICAgZW1iZWRkaW5nOiBudW1iZXJbXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICBtZXRob2Q/OiBcImNvc2luZVwiIHwgXCJsMlwiIHwgXCJpbm5lcl9wcm9kdWN0XCI7XG4gICAgICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgICBkaXN0aW5jdE9uPzogQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPjtcbiAgICB9ID0ge30sXG4gICk6IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdCAmIHsgc2ltaWxhcml0eTogbnVtYmVyIH0+IHtcbiAgICBjb25zdCB7IG1ldGhvZCA9IFwiY29zaW5lXCIsIHRocmVzaG9sZCwgZGlzdGluY3RPbiB9ID0gb3B0aW9ucztcblxuICAgIGlmIChcbiAgICAgICFBcnJheS5pc0FycmF5KGVtYmVkZGluZykgfHxcbiAgICAgIGVtYmVkZGluZy5sZW5ndGggPT09IDAgfHxcbiAgICAgIGVtYmVkZGluZy5zb21lKCh2KSA9PiAhTnVtYmVyLmlzRmluaXRlKHYpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBlbWJlZGRpbmcgdmVjdG9yOiBleHBlY3RlZCBhIG5vbi1lbXB0eSBhcnJheSBvZiBmaW5pdGUgbnVtYmVyc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZWN0b3JMaXRlcmFsID0gSlNPTi5zdHJpbmdpZnkoZW1iZWRkaW5nLm1hcCgodikgPT4gTnVtYmVyKHYpKSk7XG4gICAgY29uc3Qgb3BlcmF0b3IgPSB7IGNvc2luZTogXCI8PT5cIiwgbDI6IFwiPC0+XCIsIGlubmVyX3Byb2R1Y3Q6IFwiPCM+XCIgfVttZXRob2RdO1xuXG4gICAgLy8gbWV0aG9k67OEIOyXsOyCsOyekCDrsI8gc2ltaWxhcml0eSDqs4TsgrDsi51cbiAgICAvLyAtIGNvc2luZTogPD0+IChjb3NpbmUgZGlzdGFuY2UsIDB+MiksIHNpbWlsYXJpdHkgPSAxIC0gZGlzdGFuY2VcbiAgICAvLyAtIGwyOiA8LT4gKGV1Y2xpZGVhbiBkaXN0YW5jZSksIHNpbWlsYXJpdHkgPSBkaXN0YW5jZSAo64Ku7J2E7IiY66GdIOycoOyCrClcbiAgICAvLyAtIGlubmVyX3Byb2R1Y3Q6IDwjPiAobmVnYXRpdmUgaW5uZXIgcHJvZHVjdCksIHNpbWlsYXJpdHkgPSAtZGlzdGFuY2UgKOuGkuydhOyImOuhnSDsnKDsgqwpXG4gICAgY29uc3Qgc2ltaWxhcml0eUV4cHIgPVxuICAgICAgbWV0aG9kID09PSBcImNvc2luZVwiXG4gICAgICAgID8gdGhpcy5rbmV4LnJhdyhgMSAtICg/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3IpIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSlcbiAgICAgICAgOiBtZXRob2QgPT09IFwibDJcIlxuICAgICAgICAgID8gdGhpcy5rbmV4LnJhdyhgPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yIGFzIHNpbWlsYXJpdHlgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSlcbiAgICAgICAgICA6IHRoaXMua25leC5yYXcoYC0oPz8gJHtvcGVyYXRvcn0gPzo6dmVjdG9yKSBhcyBzaW1pbGFyaXR5YCwgW2NvbHVtbiwgdmVjdG9yTGl0ZXJhbF0pO1xuXG4gICAgLy8gV0hFUkUgTk9UIE5VTExcbiAgICB0aGlzLmtuZXhRdWVyeS53aGVyZU5vdE51bGwoY29sdW1uKTtcblxuICAgIC8vIOq4sOyhtCBPUkRFUiBCWSBjbGVhclxuICAgIHRoaXMua25leFF1ZXJ5LmNsZWFyKFwib3JkZXJcIik7XG4gICAgaWYgKGRpc3RpbmN0T24pIHtcbiAgICAgIC8vIERJU1RJTkNUIE9O7J2AIFNFTEVDVCDsoIjsnZgg66eoIOyVnuyXkCDsmYDslbwg7ZWY66+A66GcLCDquLDsobQgc2VsZWN0KHN1YnNldCDtlYTrk5zrk6Qp66W8IOuztOyhtCDtm4QgY2xlYXLtlZjqs6Ag64uk7IucIOy2lOqwgFxuICAgICAgY29uc3QgZXhpc3RpbmdTdWJzZXRDb2xzID0gKHRoaXMua25leFF1ZXJ5IGFzIGFueSkuX3N0YXRlbWVudHNcbiAgICAgICAgLmZpbHRlcigoczogYW55KSA9PiBzLmdyb3VwaW5nID09PSBcImNvbHVtbnNcIilcbiAgICAgICAgLmZsYXRNYXAoKHM6IGFueSkgPT4gcy52YWx1ZSk7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5jbGVhcihcInNlbGVjdFwiKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdCh0aGlzLmtuZXgucmF3KGBESVNUSU5DVCBPTiAoPz8pID8/YCwgW2Rpc3RpbmN0T24sIGRpc3RpbmN0T25dKSk7XG4gICAgICBleGlzdGluZ1N1YnNldENvbHMubWFwKChjb2w6IGFueSkgPT4gdGhpcy5rbmV4UXVlcnkuc2VsZWN0KGNvbCkpO1xuICAgICAgdGhpcy5rbmV4UXVlcnkuc2VsZWN0KHNpbWlsYXJpdHlFeHByKTtcbiAgICAgIHRoaXMua25leFF1ZXJ5Lm9yZGVyQnlSYXcoYD8/LCA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3JgLCBbXG4gICAgICAgIGRpc3RpbmN0T24sXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgdmVjdG9yTGl0ZXJhbCxcbiAgICAgIF0pO1xuXG4gICAgICB0aGlzLmtuZXhRdWVyeSA9IHRoaXMua25leFxuICAgICAgICAuZnJvbSh0aGlzLmtuZXhRdWVyeS5hcyhcImRpc3RpbmN0X3ZlY3RvcnNcIikpXG4gICAgICAgIC5zZWxlY3QoXCIqXCIpXG4gICAgICAgIC5vcmRlckJ5KFwic2ltaWxhcml0eVwiLCBcImRlc2NcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua25leFF1ZXJ5LnNlbGVjdChzaW1pbGFyaXR5RXhwcik7XG4gICAgICB0aGlzLmtuZXhRdWVyeS5vcmRlckJ5UmF3KGA/PyAke29wZXJhdG9yfSA/Ojp2ZWN0b3JgLCBbY29sdW1uLCB2ZWN0b3JMaXRlcmFsXSk7XG4gICAgfVxuXG4gICAgLy8gdGhyZXNob2xkXG4gICAgaWYgKHR5cGVvZiB0aHJlc2hvbGQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHRocmVzaG9sZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZlY3RvclNpbWlsYXJpdHkgdGhyZXNob2xkOiAke3RocmVzaG9sZH1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRpc3RpbmN0T24pIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkT3AgPSBtZXRob2QgPT09IFwibDJcIiA/IFwiPD1cIiA6IFwiPj1cIjtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmUoXCJzaW1pbGFyaXR5XCIsIHRocmVzaG9sZE9wLCB0aHJlc2hvbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkVmFsdWUgPVxuICAgICAgICAgIG1ldGhvZCA9PT0gXCJjb3NpbmVcIiA/IDEgLSB0aHJlc2hvbGQgOiBtZXRob2QgPT09IFwiaW5uZXJfcHJvZHVjdFwiID8gLXRocmVzaG9sZCA6IHRocmVzaG9sZDtcbiAgICAgICAgdGhpcy5rbmV4UXVlcnkud2hlcmVSYXcoYD8/ICR7b3BlcmF0b3J9ID86OnZlY3RvciA8PSA/YCwgW1xuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB2ZWN0b3JMaXRlcmFsLFxuICAgICAgICAgIHRocmVzaG9sZFZhbHVlLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcyBhcyBhbnk7XG4gIH1cblxuICAvLyDquLDrs7gg7L+866asIOuplOyEnOuTnOuTpFxuICBsaW1pdChjb3VudDogbnVtYmVyKTogdGhpcyB7XG4gICAgaWYgKGNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsaW1pdDogbXVzdCBiZSA+PSAwXCIpO1xuICAgIH1cbiAgICB0aGlzLmtuZXhRdWVyeS5saW1pdChjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvZmZzZXQoY291bnQ6IG51bWJlcik6IHRoaXMge1xuICAgIGlmIChjb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb2Zmc2V0OiBtdXN0IGJlID49IDBcIik7XG4gICAgfVxuICAgIHRoaXMua25leFF1ZXJ5Lm9mZnNldChjb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBHUk9VUCBCWVxuICBncm91cEJ5PFRDb2x1bW5zIGV4dGVuZHMgUmVzdWx0QXZhaWxhYmxlQ29sdW1uczxUVGFibGVzLCBUUmVzdWx0Pj4oLi4uY29sdW1uczogVENvbHVtbnNbXSk6IHRoaXM7XG4gIGdyb3VwQnkoLi4uY29sdW1uczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICB0aGlzLmtuZXhRdWVyeS5ncm91cEJ5KC4uLihjb2x1bW5zIGFzIHN0cmluZ1tdKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBIQVZJTkdcbiAgaGF2aW5nKGNvbmRpdGlvbjogc3RyaW5nKTogdGhpcztcbiAgaGF2aW5nPFRDb2x1bW4gZXh0ZW5kcyBSZXN1bHRBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXMsIFRSZXN1bHQ+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICB2YWx1ZTogYW55LFxuICApOiB0aGlzO1xuICAvLyBIQVZJTkcg6rWs7ZiEXG4gIGhhdmluZyguLi5jb25kaXRpb25zOiBhbnlbXSk6IHRoaXMge1xuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gaGF2aW5nKFwiQ09VTlQoKikgPiAxMFwiKVxuICAgICAgdGhpcy5rbmV4UXVlcnkuaGF2aW5nKHRoaXMua25leC5yYXcoY29uZGl0aW9uc1swXSkpO1xuICAgIH0gZWxzZSBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8vIGhhdmluZyhcImNvdW50XCIsIFwiPlwiLCAxMClcbiAgICAgIHRoaXMua25leFF1ZXJ5LmhhdmluZyhcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzBdKSxcbiAgICAgICAgY29uZGl0aW9uc1sxXSxcbiAgICAgICAgdGhpcy5rbmV4LnJhdyhjb25kaXRpb25zWzJdKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGF2aW5nIGFyZ3VtZW50c1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyDsi6Ttlokg66mU7ISc65Oc65OkIC0gdGhlbmFibGUg6rWs7ZiEXG4gIHRoZW48VFJlc3VsdDEgPSBFeHBhbmQ8VFJlc3VsdD5bXSwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBFeHBhbmQ8VFJlc3VsdD5bXSkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICBvbnJlamVjdGVkPzogKChyZWFzb246IGFueSkgPT4gVFJlc3VsdDIgfCBQcm9taXNlTGlrZTxUUmVzdWx0Mj4pIHwgbnVsbCxcbiAgKTogUHJvbWlzZTxUUmVzdWx0MSB8IFRSZXN1bHQyPiB7XG4gICAgTmFpdGUudChcInB1cmk6ZXhlY3V0ZWQtcXVlcnlcIiwgdGhpcy50b1F1ZXJ5KCkpO1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS50aGVuKG9uZnVsZmlsbGVkIGFzIGFueSwgb25yZWplY3RlZCk7XG4gIH1cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdCB8IFRSZXN1bHQyPiB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LmNhdGNoKG9ucmVqZWN0ZWQpO1xuICB9XG4gIGZpbmFsbHkob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyDtlZjrgpjrp4wg7L+866asXG4gIGZpcnN0KCk6IFJlc29sdmVkUHVyaTxFeHBhbmQ8VFJlc3VsdD4sIG5ldmVyPiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZmlyc3QoKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxuXG4gIC8vIOy/vOumrO2VnCDroIjsvZTrk5zsl5DshJwg7Yq57KCVIOy7rOufvOunjCDstpTstpztlZwg67Cw7Je0IOumrO2EtFxuICBwbHVjazxUQ29sdW1uIGV4dGVuZHMga2V5b2YgVFJlc3VsdCB8IFJlc3VsdEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcywgVFJlc3VsdD4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFxuICAgIFRDb2x1bW4gZXh0ZW5kcyBrZXlvZiBUUmVzdWx0XG4gICAgICA/IFRSZXN1bHRbVENvbHVtbl1bXVxuICAgICAgOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPltdLFxuICAgIG5ldmVyXG4gID4ge1xuICAgIHRoaXMua25leFF1ZXJ5LnBsdWNrKGNvbHVtbiBhcyBzdHJpbmcpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gSU5TRVJUIDog64uo7J28IOqwneyytFxuICBpbnNlcnQoXG4gICAgZGF0YTogSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PixcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj47XG4gIC8vIElOU0VSVDog67Cw7Je0XG4gIGluc2VydChcbiAgICBkYXRhOiBJbnNlcnREYXRhPFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+W10sXG4gICk6IFJlc29sdmVkUHVyaTxJbnNlcnRSZXN1bHQsIFNpbmdsZVRhYmxlVmFsdWU8VFRhYmxlcz4+O1xuICAvLyBJTlNFUlQg7Iuk7KCcIOq1rO2YhFxuICBpbnNlcnQoXG4gICAgcmF3RGF0YTogSW5zZXJ0RGF0YTxTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB8IEluc2VydERhdGE8U2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj5bXSxcbiAgKTogUmVzb2x2ZWRQdXJpPEluc2VydFJlc3VsdCwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIC8vIEpTT04g7Lus65+8IHN0cmluZ2lmeSDroZzsp4HsnYQg66mU7ISc65Oc66GcIOu2hOumrO2VmOyXrCDspJHrs7Ug7KCc6rGwXG4gICAgY29uc3QgcmVmaW5lZERhdGEgPSB0aGlzLnJlZmluZUpzb25Db2x1bW5zKHJhd0RhdGEpO1xuICAgIHRoaXMua25leFF1ZXJ5Lmluc2VydChyZWZpbmVkRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyBVUERBVEVcbiAgdXBkYXRlKHJhd0RhdGE6IFdoZXJlQ29uZGl0aW9uPFRUYWJsZXM+KTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIC8vIEpTT04g7Lus65+8IHN0cmluZ2lmeSDroZzsp4HsnYQg66mU7ISc65Oc66GcIOu2hOumrO2VmOyXrCDspJHrs7Ug7KCc6rGwXG4gICAgY29uc3QgcmVmaW5lZERhdGEgPSB0aGlzLnJlZmluZUpzb25Db2x1bW5zKHJhd0RhdGEpO1xuICAgIHRoaXMua25leFF1ZXJ5LnVwZGF0ZShyZWZpbmVkRGF0YSk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvKipcbiAgICogSlNPTiDsu6zrn7zsl5Ag64yA7ZW0IHN0cmluZ2lmeSDsspjrpqzrpbwg7IiY7ZaJ7ZWY64qUIOuCtOu2gCDrqZTshJzrk5zsnoXri4jri6QuXG4gICAqIG9iamVjdCDrmJDripQgb2JqZWN0IOuwsOyXtOydhCDrsJvqs6AsIEpTT04g7Lus65+87J20IOyeiOycvOuptCDsp4HroKztmZTtlZjsl6wg67CY7ZmY7ZWp64uI64ukLlxuICAgKiDsp4HsoJEg6rCS7J2EIOuzgOqyve2VmOuvgOuhnCBzaWRlIGVmZmVjdOqwgCDsnojsirXri4jri6QuXG4gICAqL1xuICBwcml2YXRlIHJlZmluZUpzb25Db2x1bW5zKFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgKTogdHlwZW9mIGRhdGEge1xuICAgIC8vIHRhYmxlU3BlY+ydtOuCmCBqc29uQ29sdW1ucyDsl4bripQg6rK97JqwIOuwlOuhnCDrsJjtmZhcbiAgICBpZiAoIXRoaXMudGFibGVTcGVjIHx8ICF0aGlzLnRhYmxlU3BlYy5qc29uQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8vIOuTseuhneuQnCBUYWJsZVNwZWPsnYQg7Ya17ZW0IEpTT07su6zrn7wg66qp66Gd7J2EIOqwgOyguOyZgCBKU09OLnN0cmluZ2lmeSDsspjrpqxcbiAgICBjb25zdCBqc29uQ29sdW1ucyA9IHRoaXMudGFibGVTcGVjLmpzb25Db2x1bW5zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBqc29uQ29sdW1ucykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW5dO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpdGVtW2NvbHVtbl0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGpzb25Db2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtjb2x1bW5dO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGRhdGFbY29sdW1uXSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8vIEluY3JlbWVudFxuICBpbmNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuaW5jcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG4gIC8vIERlY3JlbWVudFxuICBkZWNyZW1lbnQ8VENvbHVtbiBleHRlbmRzIE51bWVyaWNDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IG51bWJlcixcbiAgKTogUmVzb2x2ZWRQdXJpPG51bWJlciwgU2luZ2xlVGFibGVWYWx1ZTxUVGFibGVzPj4ge1xuICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyZW1lbnQgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVjcmVtZW50KGNvbHVtbiwgdmFsdWUpO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZWRQdXJpKHRoaXMua25leFF1ZXJ5LCB0aGlzLmtuZXgpO1xuICB9XG5cbiAgLy8gREVMRVRFXG4gIGRlbGV0ZSgpOiBSZXNvbHZlZFB1cmk8bnVtYmVyLCBTaW5nbGVUYWJsZVZhbHVlPFRUYWJsZXM+PiB7XG4gICAgdGhpcy5rbmV4UXVlcnkuZGVsZXRlKCk7XG4gICAgcmV0dXJuIG5ldyBSZXNvbHZlZFB1cmkodGhpcy5rbmV4UXVlcnksIHRoaXMua25leCk7XG4gIH1cblxuICAvLyDtmZXsnbgg7L+866asIOumrO2EtFxuICB0b1F1ZXJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMua25leFF1ZXJ5LnRvUXVlcnkoKTtcbiAgfVxuXG4gIC8vIOy/vOumrCDrlJTrsoTquYUg66Gc6re4IOy2nOugpVxuICBkZWJ1ZygpOiB0aGlzIHtcbiAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKFwiW1B1cmkgRGVidWddXCIpfSAke2NoYWxrLnllbGxvdyh0aGlzLnRvUXVlcnkoKSl9YCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjbG9uZSgpOiBQdXJpPFRTY2hlbWEsIFRUYWJsZXMsIFRSZXN1bHQ+IHtcbiAgICAvLyAnZHVhbCfsnYAg642U66+4IO2FjOydtOu4lOydtOupsCwg67CU66GcIOyVhOuemCDspITsl5DshJwga25leFF1ZXJ56rCAIOuNruyWtOyUjOybjOynkeuLiOuLpC5cbiAgICBjb25zdCBuZXdQdXJpID0gbmV3IFB1cmk8VFNjaGVtYSwgVFRhYmxlcywgVFJlc3VsdD4odGhpcy5rbmV4LCBcImR1YWxcIik7XG4gICAgbmV3UHVyaS5rbmV4UXVlcnkgPSB0aGlzLmtuZXhRdWVyeS5jbG9uZSgpO1xuICAgIHJldHVybiBuZXdQdXJpO1xuICB9XG5cbiAgZm9ybWF0U1FMKHVuZm9ybWF0dGVkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNRTCDsmIjslb3slrQg66qp66GdXG4gICAgY29uc3Qga2V5d29yZHMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIklOU0VSVFwiLFxuICAgICAgXCJJTlRPXCIsXG4gICAgICBcIlZBTFVFU1wiLFxuICAgICAgXCJVUERBVEVcIixcbiAgICAgIFwiREVMRVRFXCIsXG4gICAgICBcIkNSRUFURVwiLFxuICAgICAgXCJUQUJMRVwiLFxuICAgICAgXCJBTFRFUlwiLFxuICAgICAgXCJEUk9QXCIsXG4gICAgICBcIkpPSU5cIixcbiAgICAgIFwiT05cIixcbiAgICAgIFwiSU5ORVJcIixcbiAgICAgIFwiTEVGVFwiLFxuICAgICAgXCJSSUdIVFwiLFxuICAgICAgXCJGVUxMXCIsXG4gICAgICBcIk9VVEVSXCIsXG4gICAgICBcIkdST1VQXCIsXG4gICAgICBcIkJZXCIsXG4gICAgICBcIk9SREVSXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJESVNUSU5DVFwiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJPRkZTRVRcIixcbiAgICAgIFwiQVNcIixcbiAgICAgIFwiQU5EXCIsXG4gICAgICBcIk9SXCIsXG4gICAgICBcIk5PVFwiLFxuICAgICAgXCJJTlwiLFxuICAgICAgXCJMSUtFXCIsXG4gICAgICBcIklTXCIsXG4gICAgICBcIk5VTExcIixcbiAgICAgIFwiQ0FTRVwiLFxuICAgICAgXCJXSEVOXCIsXG4gICAgICBcIlRIRU5cIixcbiAgICAgIFwiRUxTRVwiLFxuICAgICAgXCJFTkRcIixcbiAgICAgIFwiVU5JT05cIixcbiAgICAgIFwiQUxMXCIsXG4gICAgICBcIkVYSVNUU1wiLFxuICAgICAgXCJCRVRXRUVOXCIsXG4gICAgXTtcblxuICAgIGxldCBmb3JtYXR0ZWQgPSB1bmZvcm1hdHRlZDtcblxuICAgIC8vIOyYiOyVveyWtOulvCDrjIDrrLjsnpDroZwg67OA7ZmYXG4gICAga2V5d29yZHMuZm9yRWFjaCgoa2V5d29yZCkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7a2V5d29yZH1cXFxcYmAsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwga2V5d29yZC50b1VwcGVyQ2FzZSgpKTtcbiAgICB9KTtcblxuICAgIC8vIOyjvOyalCDsoIgg7JWe7JeQIOykhOuwlOq/iCDstpTqsIBcbiAgICBjb25zdCBtYWpvckNsYXVzZXMgPSBbXG4gICAgICBcIlNFTEVDVFwiLFxuICAgICAgXCJGUk9NXCIsXG4gICAgICBcIldIRVJFXCIsXG4gICAgICBcIkdST1VQIEJZXCIsXG4gICAgICBcIk9SREVSIEJZXCIsXG4gICAgICBcIkhBVklOR1wiLFxuICAgICAgXCJMSU1JVFwiLFxuICAgICAgXCJVTklPTlwiLFxuICAgIF07XG4gICAgbWFqb3JDbGF1c2VzLmZvckVhY2goKGNsYXVzZSkgPT4ge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxccysoJHtjbGF1c2V9KVxcXFxzK2AsIFwiZ2lcIik7XG4gICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZShyZWdleCwgYFxcbiR7Y2xhdXNlLnRvVXBwZXJDYXNlKCl9IGApO1xuICAgIH0pO1xuXG4gICAgLy8gSk9JTiDsoIgg7LKY66asXG4gICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoL1xccysoKD86SU5ORVJ8TEVGVHxSSUdIVHxGVUxMIE9VVEVSKVxccyspP0pPSU5cXHMrL2dpLCBcIlxcbiQxSk9JTiBcIik7XG5cbiAgICAvLyBBTkQsIE9SIOyhsOqxtCDsspjrpqxcbiAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgvXFxzKyhBTkR8T1IpXFxzKy9naSwgXCJcXG4gICQxIFwiKTtcblxuICAgIC8vIOq0hO2YuCDsspjrpqwg67CPIOuTpOyXrOyTsOq4sFxuICAgIGNvbnN0IGxpbmVzID0gZm9ybWF0dGVkLnNwbGl0KFwiXFxuXCIpO1xuICAgIGNvbnN0IGluZGVudGVkTGluZXMgPSBbXTtcbiAgICBsZXQgaW5kZW50TGV2ZWwgPSAwO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkTGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgaWYgKCF0cmltbWVkTGluZSkgY29udGludWU7XG5cbiAgICAgIC8vIOuLq+uKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg6rCQ7IaMXG4gICAgICBjb25zdCBjbG9zaW5nUGFyZW5zID0gKHRyaW1tZWRMaW5lLm1hdGNoKC9cXCkvZykgfHwgW10pLmxlbmd0aDtcbiAgICAgIGNvbnN0IG9wZW5pbmdQYXJlbnMgPSAodHJpbW1lZExpbmUubWF0Y2goL1xcKC9nKSB8fCBbXSkubGVuZ3RoO1xuXG4gICAgICBpZiAoY2xvc2luZ1BhcmVucyA+IDAgJiYgb3BlbmluZ1BhcmVucyA9PT0gMCkge1xuICAgICAgICBpbmRlbnRMZXZlbCA9IE1hdGgubWF4KDAsIGluZGVudExldmVsIC0gY2xvc2luZ1BhcmVucyk7XG4gICAgICB9XG5cbiAgICAgIC8vIO2YhOyerCDrk6Tsl6zsk7DquLAg7KCB7JqpXG4gICAgICBjb25zdCBpbmRlbnQgPSBcIiAgXCIucmVwZWF0KGluZGVudExldmVsKTtcbiAgICAgIGluZGVudGVkTGluZXMucHVzaChpbmRlbnQgKyB0cmltbWVkTGluZSk7XG5cbiAgICAgIC8vIOyXrOuKlCDqtITtmLjqsIAg7J6I7Jy866m0IOuTpOyXrOyTsOq4sCDroIjrsqgg7Kad6rCAXG4gICAgICBpZiAob3BlbmluZ1BhcmVucyA+IGNsb3NpbmdQYXJlbnMpIHtcbiAgICAgICAgaW5kZW50TGV2ZWwgKz0gb3BlbmluZ1BhcmVucyAtIGNsb3NpbmdQYXJlbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGVudGVkTGluZXMuam9pbihcIlxcblwiKS50cmltKCk7XG4gIH1cblxuICByYXcoc3FsOiBzdHJpbmcpOiBLbmV4LlJhdyB7XG4gICAgcmV0dXJuIHRoaXMua25leC5yYXcoc3FsKTtcbiAgfVxuXG4gIC8vIEtuZXgg7L+866asIOu5jOuNlCDsp4HsoJEg7KCR6re8XG4gIHJhd1F1ZXJ5KCk6IEtuZXguUXVlcnlCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFdoZXJlR3JvdXA8VFRhYmxlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidWlsZGVyOiBLbmV4LlF1ZXJ5QnVpbGRlcikge31cblxuICAvLyB3aGVyZSDrqZTshJzrk5zrk6RcbiAgd2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICB3aGVyZTxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlOiBFeHRyYWN0Q29sdW1uVHlwZTxUVGFibGVzLCBUQ29sdW1uICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgd2hlcmU8VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICBvcGVyYXRvcjogV2hlcmVPcGVyYXRvcixcbiAgICB2YWx1ZTogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIHdoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLndoZXJlKGFyZ3NbMF0sIC4uLmFyZ3Muc2xpY2UoMSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gd2hlcmVJbiAvIHdoZXJlTm90SW4g66mU7ISc65Oc65OkXG4gIHdoZXJlSW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IHRoaXM7XG4gIHdoZXJlSW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdoZXJlTm90SW48VENvbHVtbiBleHRlbmRzIEF2YWlsYWJsZUNvbHVtbnM8VFRhYmxlcz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgICB2YWx1ZXM6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+W10sXG4gICk6IHRoaXM7XG4gIHdoZXJlTm90SW4oLi4uYXJnczogYW55W10pOiBXaGVyZUdyb3VwPFRUYWJsZXM+IHtcbiAgICB0aGlzLmJ1aWxkZXIud2hlcmVOb3RJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIG9yV2hlcmUg66mU7ISc65Oc65OkXG4gIG9yV2hlcmUoY29uZGl0aW9uczogV2hlcmVDb25kaXRpb248VFRhYmxlcz4pOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlPFRDb2x1bW4gZXh0ZW5kcyBBdmFpbGFibGVDb2x1bW5zPFRUYWJsZXM+PihcbiAgICBjb2x1bW46IFRDb2x1bW4sXG4gICAgb3BlcmF0b3I6IFdoZXJlT3BlcmF0b3IsXG4gICAgdmFsdWU6IEV4dHJhY3RDb2x1bW5UeXBlPFRUYWJsZXMsIFRDb2x1bW4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICBvcldoZXJlKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmUoYXJnc1swXSwgLi4uYXJncy5zbGljZSgxKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBvcldoZXJlSW4gLyBvcldoZXJlTm90SW4g66mU7ISc65Oc65OkXG4gIG9yV2hlcmVJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZUluKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG9yV2hlcmVOb3RJbjxUQ29sdW1uIGV4dGVuZHMgQXZhaWxhYmxlQ29sdW1uczxUVGFibGVzPj4oXG4gICAgY29sdW1uOiBUQ29sdW1uLFxuICAgIHZhbHVlczogRXh0cmFjdENvbHVtblR5cGU8VFRhYmxlcywgVENvbHVtbiAmIHN0cmluZz5bXSxcbiAgKTogdGhpcztcbiAgb3JXaGVyZU5vdEluKC4uLmFyZ3M6IGFueVtdKTogV2hlcmVHcm91cDxUVGFibGVzPiB7XG4gICAgdGhpcy5idWlsZGVyLm9yV2hlcmVOb3RJbihhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIOykkeyyqSDqt7jro7lcbiAgd2hlcmVHcm91cChjYWxsYmFjazogKGc6IFdoZXJlR3JvdXA8VFRhYmxlcz4pID0+IHZvaWQpOiB0aGlzO1xuICB3aGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci53aGVyZSgoc3ViQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3Qgc3ViR3JvdXAgPSBuZXcgV2hlcmVHcm91cDxUVGFibGVzPihzdWJCdWlsZGVyKTtcbiAgICAgIGNhbGxiYWNrKHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvcldoZXJlR3JvdXAoY2FsbGJhY2s6IChnOiBXaGVyZUdyb3VwPFRUYWJsZXM+KSA9PiB2b2lkKTogdGhpcztcbiAgb3JXaGVyZUdyb3VwKGNhbGxiYWNrOiAoZzogV2hlcmVHcm91cDxUVGFibGVzPikgPT4gdm9pZCk6IFdoZXJlR3JvdXA8VFRhYmxlcz4ge1xuICAgIHRoaXMuYnVpbGRlci5vcldoZXJlKChzdWJCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IG5ldyBXaGVyZUdyb3VwPFRUYWJsZXM+KHN1YkJ1aWxkZXIpO1xuICAgICAgY2FsbGJhY2soc3ViR3JvdXApO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8vIEpPSU4g7KCIIOq3uOujueyXkOuKlCBMZWZ07JmAIFJpZ2h07JeQIOuMgO2VnCDsiJzshJzqsIAg7ZWE7JqU7ZWY7KeAIOyViuycvOuvgOuhnCwg66qo65OgIOqyveyasOydmCDsiJjrpbwg6rOE7IKw7ZW07JW87ZWoLlxuZXhwb3J0IGNsYXNzIEpvaW5DbGF1c2VHcm91cDxcbiAgVExlZnQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBUUmlnaHQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuPiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6IEtuZXguSm9pbkNsYXVzZSkge31cblxuICAvLyBPTihBTkQpOiDsu6zrn7wgPSDsu6zrn7xcbiAgb24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvbihsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Pik6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCA9IOqwklxuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIHJpZ2h0OiBFeHRyYWN0Q29sdW1uVHlwZTxUUmlnaHQsIEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiAmIHN0cmluZz4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDsu6zrn7xcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICk6IHRoaXM7XG4gIC8vIE9OKEFORCk6IOy7rOufvCAo7Jew7IKw7J6QKSDqsJJcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICAgIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oQU5EKTog7L2c67CxXG4gIG9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvbihjYWxsYmFjazogKG5lc3RlZDogSm9pbkNsYXVzZUdyb3VwPFRSaWdodCwgVExlZnQ+KSA9PiB2b2lkKTogdGhpcztcbiAgLy8gT04oQU5EKSDqtaztmIRcbiAgb24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9uKC4uLihhcmdzIGFzIFtzdHJpbmcsIHN0cmluZ10pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9OKE9SKTog7Lus65+8ID0g7Lus65+8XG4gIG9yT24obGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4pOiB0aGlzO1xuICBvck9uKGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgcmlnaHQ6IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+KTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgPSDqsJJcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgcmlnaHQ6IEV4dHJhY3RDb2x1bW5UeXBlPFRSaWdodCwgQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg7Lus65+8XG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogQXZhaWxhYmxlQ29sdW1uczxUUmlnaHQ+LFxuICApOiB0aGlzO1xuICBvck9uKFxuICAgIGxlZnQ6IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PixcbiAgICBvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLFxuICAgIHJpZ2h0OiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0PixcbiAgKTogdGhpcztcbiAgLy8gT04oT1IpOiDsu6zrn7wgKOyXsOyCsOyekCkg6rCSXG4gIG9yT24oXG4gICAgbGVmdDogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VExlZnQsIEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+ICYgc3RyaW5nPixcbiAgKTogdGhpcztcbiAgb3JPbihcbiAgICBsZWZ0OiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sXG4gICAgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcbiAgICByaWdodDogRXh0cmFjdENvbHVtblR5cGU8VFJpZ2h0LCBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4gJiBzdHJpbmc+LFxuICApOiB0aGlzO1xuICAvLyBPTihPUik6IOy9nOuwsVxuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VExlZnQsIFRSaWdodD4pID0+IHZvaWQpOiB0aGlzO1xuICBvck9uKGNhbGxiYWNrOiAobmVzdGVkOiBKb2luQ2xhdXNlR3JvdXA8VFJpZ2h0LCBUTGVmdD4pID0+IHZvaWQpOiB0aGlzO1xuICAvLyBPTihPUikg6rWs7ZiEXG4gIG9yT24oLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICB0aGlzLmNhbGxiYWNrLm9yT24oLi4uKGFyZ3MgYXMgW3N0cmluZywgc3RyaW5nXSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT04gVkFMKEFORCk6IOy7rOufvCA9IOqwkiAo6rCS7J2EIOy7rOufvCDssLjsobDqsIAg7JWE64uMIO2MjOudvOuvuO2EsOuhnCDrsJTsnbjrlKkpXG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEFORCBPTiBWQUw6IG9uVmFs7J2YIOuqheyLnOyggSBhbGlhcyAoS25leCDtmLjtmZgpXG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKGNvbHVtbjogQXZhaWxhYmxlQ29sdW1uczxUTGVmdD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBhbmRPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIGFuZE9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5hbmRPblZhbCguLi5hcmdzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE9SIE9OIFZBTDogT1Ig7KGw6rG07Jy866GcIOqwkiDrsJTsnbjrlKlcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VExlZnQ+LCB2YWx1ZTogYW55KTogdGhpcztcbiAgb3JPblZhbChjb2x1bW46IEF2YWlsYWJsZUNvbHVtbnM8VFJpZ2h0PiwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRMZWZ0Piwgb3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvciwgdmFsdWU6IGFueSk6IHRoaXM7XG4gIG9yT25WYWwoY29sdW1uOiBBdmFpbGFibGVDb2x1bW5zPFRSaWdodD4sIG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICBvck9uVmFsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgKHRoaXMuY2FsbGJhY2sgYXMgYW55KS5vck9uVmFsKC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qXG4gIFRSZXNvbHZlZDog7L+866asIOyLpO2WiSDtm4Qg67CY7ZmY65CgIOqysOqzvCDtg4DsnoVcbiAgVFJldHVybmluZzogUkVUVVJOSU5HIOygiOyXkCDsgqzsmqnrkKAg7YOA7J6FXG4qL1xuZXhwb3J0IGNsYXNzIFJlc29sdmVkUHVyaTxUUmVzb2x2ZWQsIFRSZXR1cm5pbmc+IGltcGxlbWVudHMgUHJvbWlzZTxUUmVzb2x2ZWQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGtuZXhRdWVyeTogS25leC5RdWVyeUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBrbmV4OiBLbmV4LFxuICApIHt9XG5cbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHN0cmluZyA9IFwiUHJvbWlzZVwiO1xuXG4gIHRvUXVlcnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudG9RdWVyeSgpO1xuICB9XG5cbiAgZGVidWcoKTogdGhpcyB7XG4gICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihcIltQdXJpIERlYnVnXVwiKX0gJHtjaGFsay55ZWxsb3codGhpcy50b1F1ZXJ5KCkpfWApO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGhlbjxUUmVzdWx0MSA9IFRSZXNvbHZlZCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25mdWxmaWxsZWQ/OiAoKHZhbHVlOiBUUmVzb2x2ZWQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIE5haXRlLnQoXCJwdXJpOmV4ZWN1dGVkLXF1ZXJ5XCIsIHRoaXMudG9RdWVyeSgpKTtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkudGhlbihvbmZ1bGZpbGxlZCBhcyBhbnksIG9ucmVqZWN0ZWQpO1xuICB9XG5cbiAgY2F0Y2g8VFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2U8VFJlc29sdmVkIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gdGhpcy5rbmV4UXVlcnkuY2F0Y2gob25yZWplY3RlZCk7XG4gIH1cblxuICBmaW5hbGx5KG9uZmluYWxseT86ICgoKSA9PiB2b2lkKSB8IG51bGwpOiBQcm9taXNlPFRSZXNvbHZlZD4ge1xuICAgIHJldHVybiB0aGlzLmtuZXhRdWVyeS5maW5hbGx5KG9uZmluYWxseSk7XG4gIH1cblxuICAvLyBPTiBDT05GTElDVCAtIOy7rOufvCDquLDrsJhcbiAgb25Db25mbGljdDxUVGFibGVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVFJldHVybmluZz4+KFxuICAgIGNvbHVtbnM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIGFjdGlvbj86IE9uQ29uZmxpY3RBY3Rpb248VFRhYmxlcz4sXG4gICk6IHRoaXMge1xuICAgIGNvbnN0IHRhcmdldCA9IEFycmF5LmlzQXJyYXkoY29sdW1ucykgPyBjb2x1bW5zIDogW2NvbHVtbnNdO1xuXG4gICAgaWYgKCFhY3Rpb24gfHwgYWN0aW9uID09PSBcIm5vdGhpbmdcIikge1xuICAgICAgLy8gRE8gTk9USElOR1xuICAgICAgdGhpcy5rbmV4UXVlcnkub25Db25mbGljdCh0YXJnZXQpLmlnbm9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBETyBVUERBVEVcbiAgICAgIGNvbnN0IHsgdXBkYXRlIH0gPSBhY3Rpb247XG5cbiAgICAgIC8vIGFjdGlvbi51cGRhdGUg67Cw7Je0IO2Yle2DnCA6IFtcIm5hbWVcIiwgXCJlbWFpbFwiXVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodXBkYXRlKSkge1xuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UodXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFjdGlvbi51cGRhdGUg6rCd7LK0IO2Yle2DnDogeyBuYW1lOiBcIkpvaG5cIiwgY291bnQ6IHJhdyguLi4pIH1cbiAgICAgICAgY29uc3QgbWVyZ2VPYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh1cGRhdGUpKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgXCJfdHlwZVwiIGluIHZhbHVlICYmXG4gICAgICAgICAgICB2YWx1ZS5fdHlwZSA9PT0gXCJzcWxfZXhwcmVzc2lvblwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBTcWxFeHByZXNzaW9uIOKGkiBrbmV4LnJhdygp66GcIOuzgO2ZmFxuICAgICAgICAgICAgbWVyZ2VPYmpba2V5XSA9IHRoaXMua25leC5yYXcoKHZhbHVlIGFzIFNxbEV4cHJlc3Npb248YW55PikuX3NxbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOydvOuwmCDqsJJcbiAgICAgICAgICAgIG1lcmdlT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtuZXhRdWVyeS5vbkNvbmZsaWN0KHRhcmdldCkubWVyZ2UobWVyZ2VPYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gUkVUVVJOSU5HOiBcIipcIiAtIOyghOyytCDsu6zrn7xcbiAgcmV0dXJuaW5nKGNvbHVtbjogXCIqXCIpOiBSZXNvbHZlZFB1cmk8VFJldHVybmluZ1tdLCBuZXZlcj47XG4gIC8vIFJFVFVSTklORzog64uo7J28IOy7rOufvFxuICByZXR1cm5pbmc8VENvbHVtbiBleHRlbmRzIENvbHVtbktleXM8VFJldHVybmluZz4+KFxuICAgIGNvbHVtbjogVENvbHVtbixcbiAgKTogUmVzb2x2ZWRQdXJpPFBpY2s8VFJldHVybmluZywgVENvbHVtbj5bXSwgbmV2ZXI+O1xuICAvLyBSRVRVUk5JTkc6IOuzteyImCDsu6zrn7wgKOuwsOyXtClcbiAgcmV0dXJuaW5nPFRDb2x1bW4gZXh0ZW5kcyBDb2x1bW5LZXlzPFRSZXR1cm5pbmc+PihcbiAgICBjb2x1bW5zOiBUQ29sdW1uW10sXG4gICk6IFJlc29sdmVkUHVyaTxQaWNrPFRSZXR1cm5pbmcsIFRDb2x1bW4+W10sIG5ldmVyPjtcbiAgLy8gUkVUVVJOSU5HIOq1rO2YhFxuICByZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFJlc29sdmVkUHVyaTxhbnlbXSwgbmV2ZXI+IHtcbiAgICB0aGlzLmtuZXhRdWVyeS5yZXR1cm5pbmcoY29sdW1uT3JDb2x1bW5zKTtcbiAgICByZXR1cm4gbmV3IFJlc29sdmVkUHVyaSh0aGlzLmtuZXhRdWVyeSwgdGhpcy5rbmV4KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwiaW5mbGVjdGlvbiIsIkVudGl0eU1hbmFnZXIiLCJOYWl0ZSIsIkZVWlpZX09QRVJBVE9SUyIsIm5vcm1hbGl6ZUZ1enp5T3BlcmF0b3IiLCJvcGVyYXRvciIsIm5vcm1hbGl6ZWQiLCJ0cmltIiwiZnV6enlPcGVyYXRvciIsImZpbmQiLCJjYW5kaWRhdGUiLCJFcnJvciIsIlB1cmkiLCJrbmV4UXVlcnkiLCJ0YWJsZVNwZWMiLCJrbmV4IiwidGFibGVOYW1lT3JTb3VyY2UiLCJmcm9tIiwic2FmZUdldFRhYmxlU3BlYyIsImVudHJpZXMiLCJPYmplY3QiLCJsZW5ndGgiLCJhbGlhcyIsInNvdXJjZSIsInN1YnF1ZXJ5QnVpbGRlciIsInJhd1F1ZXJ5IiwiYXMiLCJ0YWJsZU5hbWUiLCJnZXRUYWJsZVNwZWMiLCJjb3VudCIsImNvbHVtbiIsIl90eXBlIiwiX3JldHVybiIsIl9zcWwiLCJzdW0iLCJhdmciLCJtYXgiLCJtaW4iLCJjb25jYXQiLCJhcmdzIiwiam9pbiIsInVwcGVyIiwibG93ZXIiLCJlc2NhcGVTcWxMaXRlcmFsIiwidmFsdWUiLCJyZXBsYWNlQWxsIiwidG9UZXh0T3BlcmFuZCIsIndvcmRTaW1pbGFyaXR5IiwicXVlcnkiLCJyYXdOdW1iZXIiLCJzaW1pbGFyaXR5Iiwic3RyaWN0V29yZFNpbWlsYXJpdHkiLCJyYXdTdHJpbmciLCJzcWwiLCJyYXdTdHJpbmdBcnJheSIsInJhd0Jvb2xlYW4iLCJyYXdEYXRlIiwidHNIaWdobGlnaHQiLCJfb3B0aW9ucyIsInBhcnNlciIsImNvbmZpZyIsIm9wdGlvbnMiLCJobE9wdGlvblBhcnRzIiwibWFwIiwia2V5IiwiY2FtZWxpemUiLCJobE9wdGlvbnMiLCJ0c1JhbmsiLCJfdHNSYW5rIiwidHNSYW5rQ2QiLCJ0eXBlIiwibm9ybWFsaXphdGlvbiIsIndlaWdodHMiLCJ3ZWlnaHRDbGF1c2UiLCJub3JtYWxpemF0aW9uQ2xhdXNlIiwic2NvcmUiLCJoaWdobGlnaHQiLCJjb2x1bW5PckNvbHVtbnMiLCJxdWVyeUNsYXVzZSIsIkFycmF5IiwiaXNBcnJheSIsInEiLCJzZWxlY3QiLCJzZWxlY3RPYmoiLCJmbGF0U2VsZWN0IiwiZmxhdHRlblNlbGVjdCIsInNlbGVjdENsYXVzZXMiLCJjb2x1bW5PckZ1bmN0aW9uIiwicHVzaCIsInJhdyIsImNvbHVtblBhdGgiLCJwcmVmaXgiLCJmdWxsS2V5IiwibmVzdGVkIiwiYXNzaWduIiwiYXBwZW5kU2VsZWN0Iiwic2VsZWN0QWxsIiwiZGlzdGluY3QiLCJjb2x1bW5zIiwiY2xlYXIiLCJzdGF0ZW1lbnQiLCJjbGVhckpvaW4iLCJfc3RhdGVtZW50cyIsImZpbHRlciIsInMiLCJfYWxpYXMiLCJfdGFibGUiLCJ0YWJsZSIsInRhYmxlTmFtZU9yU3BlYyIsIl9fY29tbW9uSm9pbiIsImxlZnRKb2luIiwiam9pblR5cGUiLCJjYWxsYmFjayIsImpvaW5DbGF1c2UiLCJKb2luQ2xhdXNlR3JvdXAiLCJsZWZ0IiwicmlnaHQiLCJzcGVjIiwid2hlcmUiLCJjb2x1bW5PckNvbmRpdGlvbnMiLCJvcGVyYXRvck9yVmFsdWUiLCJ3aGVyZU51bGwiLCJ3aGVyZU5vdE51bGwiLCJ3aGVyZUluIiwidmFsdWVzIiwid2hlcmVOb3RJbiIsIndoZXJlTWF0Y2giLCJ3aGVyZVJhdyIsIlN0cmluZyIsIndoZXJlU2VhcmNoIiwiY29sdW1uRXhwciIsImMiLCJwZ3Jvb25nYUNvbmRpdGlvbiIsIndoZXJlVHNTZWFyY2giLCJvcHRzIiwid2hlcmVGdXp6eSIsInRleHRDb2x1bW5FeHByIiwiYmluZGluZ3MiLCJ3aGVyZUdyb3VwIiwiYnVpbGRlciIsImdyb3VwIiwiV2hlcmVHcm91cCIsIm9yV2hlcmVHcm91cCIsIm9yV2hlcmUiLCJvcmRlckJ5IiwiZGlyZWN0aW9uIiwidmVjdG9yU2ltaWxhcml0eSIsImVtYmVkZGluZyIsIm1ldGhvZCIsInRocmVzaG9sZCIsImRpc3RpbmN0T24iLCJzb21lIiwidiIsIk51bWJlciIsImlzRmluaXRlIiwidmVjdG9yTGl0ZXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb3NpbmUiLCJsMiIsImlubmVyX3Byb2R1Y3QiLCJzaW1pbGFyaXR5RXhwciIsImV4aXN0aW5nU3Vic2V0Q29scyIsImdyb3VwaW5nIiwiZmxhdE1hcCIsImNvbCIsIm9yZGVyQnlSYXciLCJ0aHJlc2hvbGRPcCIsInRocmVzaG9sZFZhbHVlIiwibGltaXQiLCJvZmZzZXQiLCJncm91cEJ5IiwiaGF2aW5nIiwiY29uZGl0aW9ucyIsInRoZW4iLCJvbmZ1bGZpbGxlZCIsIm9ucmVqZWN0ZWQiLCJ0IiwidG9RdWVyeSIsImNhdGNoIiwiZmluYWxseSIsIm9uZmluYWxseSIsImZpcnN0IiwiUmVzb2x2ZWRQdXJpIiwicGx1Y2siLCJpbnNlcnQiLCJyYXdEYXRhIiwicmVmaW5lZERhdGEiLCJyZWZpbmVKc29uQ29sdW1ucyIsInVwZGF0ZSIsImRhdGEiLCJqc29uQ29sdW1ucyIsIml0ZW0iLCJ1bmRlZmluZWQiLCJpbmNyZW1lbnQiLCJkZWNyZW1lbnQiLCJkZWxldGUiLCJkZWJ1ZyIsImNvbnNvbGUiLCJsb2ciLCJjeWFuIiwieWVsbG93IiwiY2xvbmUiLCJuZXdQdXJpIiwiZm9ybWF0U1FMIiwidW5mb3JtYXR0ZWQiLCJrZXl3b3JkcyIsImZvcm1hdHRlZCIsImZvckVhY2giLCJrZXl3b3JkIiwicmVnZXgiLCJSZWdFeHAiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJtYWpvckNsYXVzZXMiLCJjbGF1c2UiLCJsaW5lcyIsInNwbGl0IiwiaW5kZW50ZWRMaW5lcyIsImluZGVudExldmVsIiwibGluZSIsInRyaW1tZWRMaW5lIiwiY2xvc2luZ1BhcmVucyIsIm1hdGNoIiwib3BlbmluZ1BhcmVucyIsIk1hdGgiLCJpbmRlbnQiLCJyZXBlYXQiLCJzbGljZSIsIm9yV2hlcmVJbiIsIm9yV2hlcmVOb3RJbiIsInN1YkJ1aWxkZXIiLCJzdWJHcm91cCIsIm9uIiwib3JPbiIsIm9uVmFsIiwiYW5kT25WYWwiLCJvck9uVmFsIiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJvbkNvbmZsaWN0IiwiYWN0aW9uIiwidGFyZ2V0IiwiaWdub3JlIiwibWVyZ2UiLCJtZXJnZU9iaiIsInJldHVybmluZyJdLCJtYXBwaW5ncyI6IkFBQUEsc0ZBQXNGLEdBQ3RGLDZFQUE2RSxHQUU3RSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLE9BQU9DLGdCQUFnQixhQUFhO0FBRXBDLFNBQVNDLGFBQWEsUUFBd0IsOEJBQTJCO0FBQ3pFLFNBQVNDLEtBQUssUUFBUSxvQkFBaUI7QUE2QnZDLFNBQVNDLGVBQWUsUUFBUSxrQkFBZTtBQUcvQyxTQUFT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
|
|
@@ -70,6 +70,8 @@ export type FulltextColumns<TTables extends Record<string, any>> = {
|
|
|
70
70
|
}[keyof TTables];
|
|
71
71
|
export type ComparisonOperator = "=" | ">" | ">=" | "<" | "<=" | "<>" | "!=";
|
|
72
72
|
export type WhereOperator = ComparisonOperator | "like" | "not like" | "ilike" | "not ilike";
|
|
73
|
+
export declare const FUZZY_OPERATORS: readonly ["<%", "%", "<<%"];
|
|
74
|
+
export type FuzzyOperator = (typeof FUZZY_OPERATORS)[number];
|
|
73
75
|
export type SqlExpression<T extends "string" | "number" | "boolean" | "date" | "string[]"> = {
|
|
74
76
|
_type: "sql_expression";
|
|
75
77
|
_return: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"puri.types.d.ts","sourceRoot":"","sources":["../../src/database/puri.types.ts"],"names":[],"mappings":"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"}
|