sonamu 0.7.23 → 0.7.24
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/database/upsert-builder.d.ts +1 -0
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +9 -8
- package/dist/entity/entity-manager.d.ts +1 -0
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +1 -1
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +3 -2
- package/package.json +1 -1
- package/src/database/upsert-builder.ts +5 -3
- package/src/entity/entity-manager.ts +1 -0
- package/src/entity/entity.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsert-builder.d.ts","sourceRoot":"","sources":["../../src/database/upsert-builder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7F,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE7E;;;GAGG;AACH,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,KAAK,kBAAkB,CAAC,MAAM,SAAS,SAAS,CAAC,oBAAoB,CAAC,IACpE,MAAM,SAAS,MAAM,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;AAG/F,KAAK,SAAS,GAAG;IACf,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAChC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"upsert-builder.d.ts","sourceRoot":"","sources":["../../src/database/upsert-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,8 @@ export class UpsertBuilder {
|
|
|
28
28
|
references: new Set(),
|
|
29
29
|
rows: [],
|
|
30
30
|
uniqueIndexes: tableSpec?.uniqueIndexes ?? [],
|
|
31
|
-
uniquesMap: new Map()
|
|
31
|
+
uniquesMap: new Map(),
|
|
32
|
+
jsonColumns: tableSpec?.jsonColumns ?? []
|
|
32
33
|
};
|
|
33
34
|
this.tables.set(tableName, tableData);
|
|
34
35
|
return tableData;
|
|
@@ -89,17 +90,17 @@ export class UpsertBuilder {
|
|
|
89
90
|
rowKey,
|
|
90
91
|
rowValue
|
|
91
92
|
];
|
|
92
|
-
} else if (
|
|
93
|
-
//
|
|
93
|
+
} else if (table.jsonColumns.includes(rowKey) && rowValue !== null) {
|
|
94
|
+
// JSON 컬럼인 경우 JSON.stringify 처리 (Knex는 JSON 타입을 지원하지 않음)
|
|
94
95
|
return [
|
|
95
96
|
rowKey,
|
|
96
|
-
rowValue
|
|
97
|
+
JSON.stringify(rowValue)
|
|
97
98
|
];
|
|
98
|
-
} else if (
|
|
99
|
-
//
|
|
99
|
+
} else if (isArray(rowValue)) {
|
|
100
|
+
// 배열은 그대로 저장
|
|
100
101
|
return [
|
|
101
102
|
rowKey,
|
|
102
|
-
rowValue
|
|
103
|
+
rowValue
|
|
103
104
|
];
|
|
104
105
|
} else {
|
|
105
106
|
return [
|
|
@@ -449,4 +450,4 @@ export class UpsertBuilder {
|
|
|
449
450
|
}
|
|
450
451
|
}
|
|
451
452
|
|
|
452
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS91cHNlcnQtYnVpbGRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGlzQXJyYXksIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cywgRGF0YWJhc2VTY2hlbWFFeHRlbmQsIEVudGl0eUluZGV4IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBjaHVuaywgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IGJhdGNoVXBkYXRlLCB0eXBlIFJvd1dpdGhJZCB9IGZyb20gXCIuL19iYXRjaF91cGRhdGVcIjtcbmltcG9ydCB0eXBlIHsgQ29sdW1uS2V5cywgRm9yZWlnbktleUNvbHVtbnMsIFRhYmxlTmFtZSB9IGZyb20gXCIuL3B1cmkudHlwZXNcIjtcblxuLyoqXG4gKiBGSyDtg4DsnoUg7LaU66Gg7J2EIOychO2VtCBEYXRhYmFzZUZvcmVpZ25LZXlzIGV4cG9ydFxuICogKG1vZHVsZSBhdWdtZW50YXRpb24g7J6Q64+ZIOuhnOuTnCDrs7TsnqUpXG4gKi9cbmV4cG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cyB9O1xuXG50eXBlIEluaGVyaXRhYmxlQ29sdW1uczxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PiA9XG4gIFRUYWJsZSBleHRlbmRzIGtleW9mIERhdGFiYXNlU2NoZW1hRXh0ZW5kID8gQ29sdW1uS2V5czxEYXRhYmFzZVNjaGVtYUV4dGVuZFtUVGFibGVdPiA6IG5ldmVyO1xuXG4vLyDthYzsnbTruJQg642w7J207YSwIO2DgOyehVxudHlwZSBUYWJsZURhdGEgPSB7XG4gIHJlZmVyZW5jZXM6IFNldDxzdHJpbmc+O1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICB1bmlxdWVzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuLy8g7LC47KGwIO2VhOuTnCDtg4DsnoVcbmV4cG9ydCB0eXBlIFVCUmVmID0ge1xuICB1dWlkOiBzdHJpbmc7XG4gIG9mOiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbn07XG5cbi8vIHVwc2VydCDsmLXshZhcbmV4cG9ydCB0eXBlIFVwc2VydE9wdGlvbnM8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4gPSB7XG4gIGNodW5rU2l6ZT86IG51bWJlcjtcbiAgY2xlYW5PcnBoYW5zPzogRm9yZWlnbktleUNvbHVtbnM8VFRhYmxlPiB8IEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5bXTtcbiAgaW5oZXJpdD86IEluaGVyaXRhYmxlQ29sdW1uczxUVGFibGU+W107XG59O1xuXG4vLyBpbnNlcnRPbmx5IOyYteyFmFxuZXhwb3J0IHR5cGUgSW5zZXJ0T25seU9wdGlvbnMgPSB7XG4gIGNodW5rU2l6ZT86IG51bWJlcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZkZpZWxkKGZpZWxkOiB1bmtub3duKTogZmllbGQgaXMgVUJSZWYge1xuICByZXR1cm4gKFxuICAgIGZpZWxkICE9PSB1bmRlZmluZWQgJiZcbiAgICBmaWVsZCAhPT0gbnVsbCAmJlxuICAgIChmaWVsZCBhcyBVQlJlZik/Lm9mICE9PSB1bmRlZmluZWQgJiZcbiAgICAoZmllbGQgYXMgVUJSZWYpPy51dWlkICE9PSB1bmRlZmluZWRcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFVwc2VydEJ1aWxkZXIge1xuICB0YWJsZXM6IE1hcDxzdHJpbmcsIFRhYmxlRGF0YT47XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudGFibGVzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgZ2V0VGFibGUodGFibGVOYW1lOiBzdHJpbmcpOiBUYWJsZURhdGEge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZXMuZ2V0KHRhYmxlTmFtZSk7XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVTcGVjID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBFbnRpdHlNYW5hZ2VyLmdldFRhYmxlU3BlYyh0YWJsZU5hbWUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBjb25zdCB0YWJsZURhdGEgPSB7XG4gICAgICByZWZlcmVuY2VzOiBuZXcgU2V0PHN0cmluZz4oKSxcbiAgICAgIHJvd3M6IFtdLFxuICAgICAgdW5pcXVlSW5kZXhlczogdGFibGVTcGVjPy51bmlxdWVJbmRleGVzID8/IFtdLFxuICAgICAgdW5pcXVlc01hcDogbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKSxcbiAgICB9O1xuICAgIHRoaXMudGFibGVzLnNldCh0YWJsZU5hbWUsIHRhYmxlRGF0YSk7XG4gICAgcmV0dXJuIHRhYmxlRGF0YTtcbiAgfVxuXG4gIGhhc1RhYmxlKHRhYmxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVzLmhhcyh0YWJsZU5hbWUpO1xuICB9XG5cbiAgcmVnaXN0ZXI8VCBleHRlbmRzIHN0cmluZz4oXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgcm93OiB7XG4gICAgICBba2V5IGluIFRdPzogVUJSZWYgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYmlnaW50IHwgbnVsbCB8IG9iamVjdCB8IHVua25vd247XG4gICAgfSxcbiAgKTogVUJSZWYge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuXG4gICAgLy8g7ZW064u5IO2FjOydtOu4lOydmCB1bmlxdWUg7J24642x7Iqk66W8IOyInO2ajO2VmOupsCDtgqQg7IOd7ISxXG4gICAgY29uc3QgdW5pcXVlS2V5cyA9IHRhYmxlLnVuaXF1ZUluZGV4ZXNcbiAgICAgIC5tYXAoKHVucUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleUFycmF5ID0gdW5xSW5kZXguY29sdW1ucy5tYXAoKHVucUNvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHJvd1t1bnFDb2wubmFtZSBhcyBrZXlvZiB0eXBlb2Ygcm93XTtcbiAgICAgICAgICBpZiAoaXNSZWZGaWVsZCh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLnV1aWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByb3dbdW5xQ29sLm5hbWUgYXMga2V5b2YgdHlwZW9mIHJvd10gPz8gcmFuZG9tVVVJRCgpOyAvLyBudWxsYWJsZeyduCDqsr3smrAgdXVpZOuhnCDrnpzrjaTqsJIg7IK97J6FXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDqsJLsnbQg66qo65GQIG51bGzsnbgg6rK97JqwIO2CpCDsg53shLEg7Yyo7IqkXG4gICAgICAgIGlmICh1bmlxdWVLZXlBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pcXVlS2V5QXJyYXkuam9pbihcIi0tLWRlbGltaXRlci0tXCIpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIobm9uTnVsbGFibGUpO1xuXG4gICAgLy8gdXVpZCDsg53shLEg66Gc7KeBXG4gICAgY29uc3QgeyB1dWlkLCBpc1JldXNlZCB9ID0gKCgpID0+IHtcbiAgICAgIC8vIO2CpOulvCDsiJztmoztlZjsl6wg7J2066+4IOyhtOyerO2VmOuKlCDtgqTqsIAg7J6I64qU7KeAIO2ZleyduFxuICAgICAgaWYgKHVuaXF1ZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IHVuaXF1ZUtleSBvZiB1bmlxdWVLZXlzKSB7XG4gICAgICAgICAgaWYgKHRhYmxlLnVuaXF1ZXNNYXAuaGFzKHVuaXF1ZUtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHV1aWQ6IGFzc2VydERlZmluZWQodGFibGUudW5pcXVlc01hcC5nZXQodW5pcXVlS2V5KSwgXCJVbmlxdWUga2V5IG5vdCBmb3VuZFwiKSxcbiAgICAgICAgICAgICAgaXNSZXVzZWQ6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDssL7snYQg7IiYIOyXhuuKlCDqsr3smrAg7IOd7ISxXG4gICAgICByZXR1cm4geyB1dWlkOiByYW5kb21VVUlEKCksIGlzUmV1c2VkOiBmYWxzZSB9O1xuICAgIH0pKCk7XG5cbiAgICAvLyDrqqjrk6Ag7Jyg64uI7YGs7YKk7JeQIOuMgO2VtCDsnKDri4jtgazrp7Xsl5AgdXVpZCDsoIDsnqVcbiAgICBpZiAodW5pcXVlS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHVuaXF1ZUtleSBvZiB1bmlxdWVLZXlzKSB7XG4gICAgICAgIHRhYmxlLnVuaXF1ZXNNYXAuc2V0KHVuaXF1ZUtleSwgdXVpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g7J20IO2FjOydtOu4lOyXkCDsgqzsmqnrkJwgUmVmRmllbGTrpbwg7Iic7ZqM7ZWY7JesLCDtmITsnqwg7YWM7J2067iUIOygleuztOyXkCDslrTrlqQg7ZWE65Oc66W8IOywuOyhsO2VmOuKlOyngCDstpTqsIBcbiAgICAvLyDsnbQg7KCV67O066W8IOuCmOykkeyXkCDsuZjtmZjtlaAg65WMIOyCrOyaqVxuICAgIHJvdyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJvdykubWFwKChbcm93S2V5LCByb3dWYWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKGlzUmVmRmllbGQocm93VmFsdWUpKSB7XG4gICAgICAgICAgcm93VmFsdWUudXNlID8/PSBcImlkXCI7XG4gICAgICAgICAgdGFibGUucmVmZXJlbmNlcy5hZGQoYCR7cm93VmFsdWUub2Z9LiR7cm93VmFsdWUudXNlfWApO1xuICAgICAgICAgIHJldHVybiBbcm93S2V5LCByb3dWYWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShyb3dWYWx1ZSkpIHtcbiAgICAgICAgICAvLyDrsLDsl7TsnYAg6re464yA66GcIOyggOyepVxuICAgICAgICAgIHJldHVybiBbcm93S2V5LCByb3dWYWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd1ZhbHVlID09PSBcIm9iamVjdFwiICYmICEocm93VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIC8vIOydvOuwmCBvYmplY3Tsnbgg6rK97JqwIEpTT07snLzroZwg67OA7ZmYXG4gICAgICAgICAgcmV0dXJuIFtyb3dLZXksIHJvd1ZhbHVlID09PSBudWxsID8gbnVsbCA6IEpTT04uc3RyaW5naWZ5KHJvd1ZhbHVlKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtyb3dLZXksIHJvd1ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKSBhcyB7IFtrZXkgaW4gVF0/OiB1bmtub3duIH07XG5cbiAgICB0YWJsZS5yb3dzLnB1c2goe1xuICAgICAgdXVpZCxcbiAgICAgIC4uLnJvdyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdDogVUJSZWYgPSB7XG4gICAgICBvZjogdGFibGVOYW1lLFxuICAgICAgdXVpZDogKHJvdyBhcyB7IHV1aWQ/OiBzdHJpbmcgfSkudXVpZCA/PyB1dWlkLFxuICAgIH07XG5cbiAgICBOYWl0ZS50KFwicHVyaTp1Yi1yZWdpc3RlclwiLCB7XG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1dWlkOiByZXN1bHQudXVpZCxcbiAgICAgIGlzVXVpZFJldXNlZDogaXNSZXVzZWQsXG4gICAgICByb3csXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgdXBzZXJ0PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+KFxuICAgIHdkYjogS25leCxcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBvcHRpb25zPzogVXBzZXJ0T3B0aW9uczxUVGFibGU+LFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0T3JJbnNlcnQod2RiLCB0YWJsZU5hbWUsIFwidXBzZXJ0XCIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0T25seTxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PihcbiAgICB3ZGI6IEtuZXgsXG4gICAgdGFibGVOYW1lOiBUVGFibGUsXG4gICAgb3B0aW9ucz86IEluc2VydE9ubHlPcHRpb25zLFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0T3JJbnNlcnQod2RiLCB0YWJsZU5hbWUsIFwiaW5zZXJ0XCIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgdXBzZXJ0T3JJbnNlcnQ8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4oXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIG1vZGU6IFwidXBzZXJ0XCIgfCBcImluc2VydFwiLFxuICAgIG9wdGlvbnM/OiBVcHNlcnRPcHRpb25zPFRUYWJsZT4sXG4gICk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBpZiAodGhpcy5oYXNUYWJsZSh0YWJsZU5hbWUpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZXMuZ2V0KHRhYmxlTmFtZSk7XG4gICAgaWYgKHRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDthYzsnbTruJQgJHt0YWJsZU5hbWV97JeQIHVwc2VydCDsmpTssq1gKTtcbiAgICB9IGVsc2UgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFibGVOYW1lfeyXkCB1cHNlcnQg7ZWgIOuNsOydtO2EsOqwgCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGFibGUucm93cy5zb21lKChyb3cpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJvdykuc29tZSgoWywgdmFsdWVdKSA9PiBpc1JlZkZpZWxkKHZhbHVlKSAmJiB2YWx1ZS5vZiAhPT0gdGFibGVOYW1lKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV9IO2VtOqysOuQmOyngCDslYrsnYAg7LC47KGw6rCAIOyeiOyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICAvLyDsoITssrQg7YWM7J2067iUIOyInO2ajO2VmOyXrCDtmITsnqwg7YWM7J2067iUIOywuOyhsO2VmOuKlCDrqqjrk6Ag7YWM7J2067iUIOy2lOy2nFxuICAgIGNvbnN0IHsgcmVmZXJlbmNlcywgcmVmVGFibGVzIH0gPSBBcnJheS5mcm9tKHRoaXMudGFibGVzKS5yZWR1Y2UoXG4gICAgICAociwgWywgdGFibGVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IEFycmF5LmZyb20odGFibGUucmVmZXJlbmNlcy52YWx1ZXMoKSkuZmluZCgocmVmKSA9PlxuICAgICAgICAgIHJlZi5pbmNsdWRlcyhgJHt0YWJsZU5hbWV9LmApLFxuICAgICAgICApO1xuICAgICAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICAgICAgci5yZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICAgICAgICByLnJlZlRhYmxlcy5wdXNoKHRhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVmZXJlbmNlczogW10gYXMgc3RyaW5nW10sXG4gICAgICAgIHJlZlRhYmxlczogW10gYXMgVGFibGVEYXRhW10sXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3QgZXh0cmFjdEZpZWxkcyA9IHVuaXF1ZShyZWZlcmVuY2VzKVxuICAgICAgLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2Uuc3BsaXQoXCIuXCIpWzFdKVxuICAgICAgLmZpbHRlcigoZmllbGQpOiBmaWVsZCBpcyBzdHJpbmcgPT4gZmllbGQgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAvLyDsnZjsobTshLEg7Iic7ISc7JeQIOuUsOudvCDroIjrsqjrs4Qg6re466O57ZmUICjsnpDquLAg7LC47KGw6rCAIOyXhuycvOuptCBMZXZlbCAwIO2VmOuCmClcbiAgICBjb25zdCB7IGxldmVscywgaGFzQ2lyY3VsYXIgfSA9IHRoaXMuYnVpbGRJbnNlcnRMZXZlbHModGFibGUucm93cywgdGFibGVOYW1lKTtcblxuICAgIGlmIChoYXNDaXJjdWxhcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RhYmxlTmFtZX3sl5Ag7Iic7ZmYIOyekOq4sCDssLjsobDqsIAg7J6I7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHV1aWRNYXAgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgICBjb25zdCBhbGxJZHM6IG51bWJlcltdID0gW107XG5cbiAgICAvLyDroIjrsqjrs4TroZwg7Iic7LCoIOyymOumrFxuICAgIGZvciAoY29uc3QgbGV2ZWxSb3dzIG9mIGxldmVscykge1xuICAgICAgLy8g7J207KCEIOugiOuyqOyXkOyEnCDslrvsnYAgSUTroZwg7J6Q6riwIOywuOyhsCDtlbTqsrBcbiAgICAgIGNvbnN0IHJlc29sdmVkUm93cyA9IGxldmVsUm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHsgLi4ucm93IH07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJvdykpIHtcbiAgICAgICAgICBpZiAoaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdXVpZE1hcC5nZXQodmFsdWUudXVpZCk7XG5cbiAgICAgICAgICAgIGlmICghcGFyZW50KSB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgdXVpZCAke3ZhbHVlLnV1aWR9IC0tIGluICR7dGFibGVOYW1lfWApO1xuXG4gICAgICAgICAgICByZXNvbHZlZFtrZXldID0gKHBhcmVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbdmFsdWUudXNlID8/IFwiaWRcIl07XG5cbiAgICAgICAgICAgIE5haXRlLnQoXCJwdXJpOnViLXJlZi1yZXNvbHZlZFwiLCB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgZnJvbTogeyBvZjogdmFsdWUub2YsIHV1aWQ6IHZhbHVlLnV1aWQsIHVzZTogdmFsdWUudXNlID8/IFwiaWRcIiB9LFxuICAgICAgICAgICAgICB0bzogcmVzb2x2ZWRba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICB9KTtcblxuICAgICAgLy8g7ZiE7J6sIOugiOuyqCB1cHNlcnRcbiAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IG9wdGlvbnM/LmNodW5rU2l6ZTtcbiAgICAgIGNvbnN0IGxldmVsQ2h1bmtzID0gY2h1bmtTaXplID8gY2h1bmsocmVzb2x2ZWRSb3dzLCBjaHVua1NpemUpIDogW3Jlc29sdmVkUm93c107XG4gICAgICBjb25zdCBzZWxlY3RGaWVsZHMgPSB1bmlxdWUoW1wiaWRcIiwgLi4uZXh0cmFjdEZpZWxkc10pO1xuXG4gICAgICBmb3IgKGNvbnN0IGRhdGFDaHVuayBvZiBsZXZlbENodW5rcykge1xuICAgICAgICBpZiAoZGF0YUNodW5rLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgLy8gdXVpZOulvCDrs4Trj4TroZwg67O06rSA7ZWY6rOgLCBEQuyXkCDsoIDsnqXtlaAg642w7J207YSw7JeQ7IScIOygnOqxsFxuICAgICAgICBjb25zdCBvcmlnaW5hbFV1aWRzID0gZGF0YUNodW5rLm1hcCgocikgPT4gci51dWlkIGFzIHN0cmluZyk7XG4gICAgICAgIGNvbnN0IGRhdGFGb3JEYiA9IGRhdGFDaHVuay5tYXAoKHsgdXVpZCwgLi4ucmVzdCB9KSA9PiByZXN0KTtcblxuICAgICAgICBsZXQgcmVzdWx0Um93czogeyBpZDogbnVtYmVyOyBba2V5OiBzdHJpbmddOiB1bmtub3duIH1bXTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gXCJpbnNlcnRcIikge1xuICAgICAgICAgIC8vIElOU0VSVCDrqqjrk5wgLSBSRVRVUk5JTkcg7IKs7JqpXG4gICAgICAgICAgcmVzdWx0Um93cyA9IGF3YWl0IHdkYi5pbnNlcnQoZGF0YUZvckRiKS5pbnRvKHRhYmxlTmFtZSkucmV0dXJuaW5nKHNlbGVjdEZpZWxkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVVBTRVJUIOuqqOuTnCAtIGlkIOyXhuuKlCByb3frk6TsnZggaWTrpbwg7IKs7KCEIOyhsO2ajOuhnCDssYTsmrDquLBcbiAgICAgICAgICBjb25zdCByb3dzV2l0aG91dElkID0gZGF0YUZvckRiLmZpbHRlcigocm93KSA9PiAhcm93LmlkKTtcblxuICAgICAgICAgIGlmIChyb3dzV2l0aG91dElkLmxlbmd0aCA+IDAgJiYgdGFibGUudW5pcXVlSW5kZXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyDrqqjrk6AgdW5pcXVlSW5kZXhlc+uhnCDquLDsobQg66CI7L2U65OcIOyhsO2ajFxuICAgICAgICAgICAgZm9yIChjb25zdCB1bmlxdWVJbmRleCBvZiB0YWJsZS51bmlxdWVJbmRleGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB1bmlxdWVJbmRleC5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKTtcblxuICAgICAgICAgICAgICAvLyDsobDtmoztlaAg7KGw6rG065OkIOy2lOy2nCAo6rCBIHJvd+ydmCB1bmlxdWUg7Lus65+8IOqwkuuTpClcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uczogdW5rbm93bltdW10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1dpdGhvdXRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbHVtbnMubWFwKChjb2wpID0+IHJvd1tjb2xdKTtcbiAgICAgICAgICAgICAgICAvLyBudWxs7J20IO2PrO2VqOuQnCDsobDqsbTsnYAg7KCc7Jm4IChQb3N0Z3JlU1FMIFVOSVFVReuKlCBOVUxMIOustOyLnClcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5zb21lKCh2KSA9PiB2ID09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2godmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgIC8vIOuwsOy5mCBTRUxFQ1RcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSb3dzID0gKGF3YWl0IHdkYih0YWJsZU5hbWUpXG4gICAgICAgICAgICAgICAgLndoZXJlSW4oY29sdW1ucywgY29uZGl0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdW10pXG4gICAgICAgICAgICAgICAgLnNlbGVjdChcImlkXCIsIC4uLmNvbHVtbnMpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuXG4gICAgICAgICAgICAgIC8vIE1hcCDsg53shLE6IHVuaXF1ZSDsu6zrn7wg7KGw7ZWpIOKGkiBpZFxuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZXhpc3Rpbmcgb2YgZXhpc3RpbmdSb3dzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1uc1xuICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBTdHJpbmcoZXhpc3RpbmdbY29sXSA/PyBcIlwiKSlcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiLS0tZGVsaW1pdGVyLS0tXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZXhpc3RpbmcuaWQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdNYXAuc2V0KGtleSwgaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGlkIOyXhuuKlCByb3frk6Tsl5Ag66ek7Lmt65CY64qUIGlkIOyxhOyasOq4sFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzV2l0aG91dElkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pZCkgY29udGludWU7IC8vIOydtOuvuCDri6TrpbggdW5pcXVlSW5kZXjsl5DshJwg7LGE7JuM7KeEIOqyveyasCDsiqTtgrVcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMubWFwKChjb2wpID0+IFN0cmluZyhyb3dbY29sXSA/PyBcIlwiKSkuam9pbihcIi0tLWRlbGltaXRlci0tLVwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gZXhpc3RpbmdNYXAuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZCkge1xuICAgICAgICAgICAgICAgICAgcm93LmlkID0gZXhpc3RpbmdJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBvbkNvbmZsaWN064qUIGlk66eMIOyCrOyaqSAo66qo65OgIHVuaXF1ZUluZGV4ZXPripQg7J2066+4IOyCrOyghCDsobDtmozroZwg7LKY66as65CoKVxuICAgICAgICAgIGNvbnN0IGNvbmZsaWN0Q29sdW1ucyA9IFtcImlkXCJdO1xuXG4gICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IE9iamVjdC5rZXlzKGRhdGFGb3JEYlswXSk7XG4gICAgICAgICAgbGV0IHVwZGF0ZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoYykgPT4gYyAhPT0gXCJpZFwiKTtcblxuICAgICAgICAgIC8vIGluaGVyaXQg7Ji17IWYIOyymOumrCAtIGluaGVyaXQg7Lus65+87J2AIHVwZGF0ZSDrjIDsg4Hsl5DshJwg7KCc7Jm4XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmluaGVyaXQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5oZXJpdENvbHVtbnMgPSBvcHRpb25zLmluaGVyaXQgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkRnJvbVVwZGF0ZSA9IHVwZGF0ZUNvbHVtbnMuZmlsdGVyKChjKSA9PiBpbmhlcml0Q29sdW1ucy5pbmNsdWRlcyhjKSk7XG4gICAgICAgICAgICB1cGRhdGVDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFpbmhlcml0Q29sdW1ucy5pbmNsdWRlcyhjKSk7XG5cbiAgICAgICAgICAgIC8vIOyLpOygnOuhnCDsoJzsmbjrkJwg7Lus65+8IOuhnOq5hVxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkRnJvbVVwZGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgTmFpdGUudChcInB1cmk6dWItaW5oZXJpdFwiLCB7XG4gICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIGluaGVyaXRDb2x1bW5zLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVkRnJvbVVwZGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdXBkYXRlQ29sdW1uc+qwgCDruYTslrTsnojslrTrj4QgbWVyZ2UoKeulvCDsgqzsmqntlZjsl6wg66qo65OgIO2WieydtCBSRVRVUk5JTkfrkJjrj4TroZ0g67O07J6lXG4gICAgICAgICAgY29uc3QgbWVyZ2VDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5sZW5ndGggPyB1cGRhdGVDb2x1bW5zIDogY29uZmxpY3RDb2x1bW5zO1xuXG4gICAgICAgICAgcmVzdWx0Um93cyA9IGF3YWl0IHdkYlxuICAgICAgICAgICAgLmluc2VydChkYXRhRm9yRGIpXG4gICAgICAgICAgICAuaW50byh0YWJsZU5hbWUpXG4gICAgICAgICAgICAub25Db25mbGljdChjb25mbGljdENvbHVtbnMpXG4gICAgICAgICAgICAubWVyZ2UobWVyZ2VDb2x1bW5zKVxuICAgICAgICAgICAgLnJldHVybmluZyhzZWxlY3RGaWVsZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9yaWdpbmFsVXVpZHMubGVuZ3RoICE9PSByZXN1bHRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV9OiByZWdpc3Rlci9yZXR1cm5pbmcg67aI7J287LmYYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB1dWlkTWFwLnNldChvcmlnaW5hbFV1aWRzW2ldLCByZXN1bHRSb3dzW2ldKTtcbiAgICAgICAgICBhbGxJZHMucHVzaChyZXN1bHRSb3dzW2ldLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIO2VtOuLuSDthYzsnbTruJQg7LC47KGw66W8IOyLpOygnCDrsLjrpZjroZwg67OA6rK9XG4gICAgZm9yIChjb25zdCB0YWJsZSBvZiByZWZUYWJsZXMpIHtcbiAgICAgIHRhYmxlLnJvd3MgPSB0YWJsZS5yb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJvdykpIHtcbiAgICAgICAgICBjb25zdCBwcm9wID0gcm93W2tleV07XG4gICAgICAgICAgaWYgKGlzUmVmRmllbGQocHJvcCkgJiYgcHJvcC5vZiA9PT0gdGFibGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB1dWlkTWFwLmdldChwcm9wLnV1aWQpO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihwcm9wKTtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHV1aWQgJHtwcm9wLnV1aWR9IC0tIGluICR7dGFibGVOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3AudXNlID8/IFwiaWRcIl07XG4gICAgICAgICAgICByb3dba2V5XSA9IHJlc29sdmVkVmFsdWU7XG5cbiAgICAgICAgICAgIE5haXRlLnQoXCJwdXJpOnViLXJlZi1yZXNvbHZlZFwiLCB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgZnJvbTogeyBvZjogcHJvcC5vZiwgdXVpZDogcHJvcC51dWlkLCB1c2U6IHByb3AudXNlID8/IFwiaWRcIiB9LFxuICAgICAgICAgICAgICB0bzogcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmNsZWFuT3JwaGFucykge1xuICAgICAgY29uc3QgY2xlYW5PcnBoYW5zID0gb3B0aW9ucy5jbGVhbk9ycGhhbnM7XG4gICAgICBjb25zdCBma0NvbHVtbnMgPSBpc0FycmF5KGNsZWFuT3JwaGFucylcbiAgICAgICAgPyAoY2xlYW5PcnBoYW5zIGFzIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5bXSlcbiAgICAgICAgOiBbY2xlYW5PcnBoYW5zIGFzIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5dO1xuXG4gICAgICAvLyDtmITsnqwgcmVnaXN0ZXLrkJwg66CI7L2U65Oc65Ok7J2YIEZLIOqwkuuTpCDstpTstpxcbiAgICAgIGNvbnN0IGZrQ29uZGl0aW9ucyA9IGZrQ29sdW1ucy5tYXAoKGZrQ29sKSA9PiB7XG4gICAgICAgIGNvbnN0IGZrVmFsdWVzID0gWy4uLm5ldyBTZXQodGFibGUucm93cy5tYXAoKHJvdykgPT4gcm93W2ZrQ29sXSkuZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwpKV07XG4gICAgICAgIHJldHVybiB7IGNvbHVtbjogZmtDb2wsIHZhbHVlczogZmtWYWx1ZXMgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDrqqjrk6AgRksg7Lus65+87JeQIOqwkuydtCDsnojripQg6rK97Jqw7JeQ66eMIOyCreygnCDsi6TtlolcbiAgICAgIGlmIChma0NvbmRpdGlvbnMuZXZlcnkoKGZjKSA9PiBmYy52YWx1ZXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgbGV0IGRlbGV0ZVF1ZXJ5ID0gd2RiKHRhYmxlTmFtZSk7XG5cbiAgICAgICAgLy8g6rCBIEZLIOy7rOufvOyXkCDrjIDtlZwgV0hFUkUgSU4g7KGw6rG0IOy2lOqwgFxuICAgICAgICBmb3IgKGNvbnN0IHsgY29sdW1uLCB2YWx1ZXMgfSBvZiBma0NvbmRpdGlvbnMpIHtcbiAgICAgICAgICBkZWxldGVRdWVyeSA9IGRlbGV0ZVF1ZXJ5LndoZXJlSW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g67Cp6riIIHVwc2VydO2VnCBJROuKlCDsoJzsmbhcbiAgICAgICAgZGVsZXRlUXVlcnkgPSBkZWxldGVRdWVyeS53aGVyZU5vdEluKFwiaWRcIiwgYWxsSWRzKTtcblxuICAgICAgICBjb25zdCBkZWxldGVkQ291bnQgPSBhd2FpdCBkZWxldGVRdWVyeS5kZWxldGUoKTtcblxuICAgICAgICBOYWl0ZS50KFwicHVyaTp1Yi1jbGVhbi1vcnBoYW5zXCIsIHtcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgY2xlYW5PcnBoYW5zOiBma0NvbHVtbnMsXG4gICAgICAgICAgZGVsZXRlZENvdW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDtlbTri7kg7YWM7J2067iU7J2YIOuNsOydtO2EsCDstIjquLDtmZRcbiAgICB0YWJsZS5yb3dzID0gW107XG4gICAgdGFibGUucmVmZXJlbmNlcy5jbGVhcigpO1xuICAgIHRhYmxlLnVuaXF1ZXNNYXAuY2xlYXIoKTtcblxuICAgIE5haXRlLnQoXCJwdXJpOnViLXVwc2VydGVkXCIsIHtcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIG1vZGUsXG4gICAgICByb3dDb3VudDogYWxsSWRzLmxlbmd0aCxcbiAgICAgIHJldHVybmVkSWRzOiBhbGxJZHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWxsSWRzO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQmF0Y2goXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBjaHVua1NpemU/OiBudW1iZXI7XG4gICAgICB3aGVyZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY2h1bmtTaXplOiBvcHRpb25zPy5jaHVua1NpemUgPz8gNTAwLFxuICAgICAgd2hlcmU6IG9wdGlvbnM/LndoZXJlID8/IFwiaWRcIixcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaGFzVGFibGUodGFibGVOYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlcy5nZXQodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuTseuhneuQmOyngCDslYrsnYAg7YWM7J2067iUICR7dGFibGVOYW1lfeyXkCB1cGRhdGVCYXRjaCDsmpTssq1gKTtcbiAgICB9IGVsc2UgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd2hlcmVDb2x1bW5zID0gQXJyYXkuaXNBcnJheShvcHRpb25zLndoZXJlKSA/IG9wdGlvbnMud2hlcmUgOiBbb3B0aW9ucy53aGVyZSA/PyBcImlkXCJdO1xuICAgIGNvbnN0IHJvd3MgPSB0YWJsZS5yb3dzLm1hcCgoX3JvdykgPT4ge1xuICAgICAgY29uc3QgeyB1dWlkOiBfLCAuLi5yb3cgfSA9IF9yb3c7IC8vIHV1aWQg7KCc7Jm4XG4gICAgICByZXR1cm4gcm93IGFzIFJvd1dpdGhJZDxzdHJpbmc+O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgYmF0Y2hVcGRhdGUod2RiLCB0YWJsZU5hbWUsIHdoZXJlQ29sdW1ucywgcm93cywgb3B0aW9ucy5jaHVua1NpemUpO1xuXG4gICAgTmFpdGUudChcInB1cmk6dWItYmF0Y2gtdXBkYXRlZFwiLCB7XG4gICAgICB0YWJsZU5hbWUsXG4gICAgICByb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICB3aGVyZUNvbHVtbnMsXG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGVCYXRjaCDsmYTro4wg7ZuEIOyymOumrOuQnCDrjbDsnbTthLAg7KCc6rGwXG4gICAgdGFibGUucm93cyA9IFtdO1xuICAgIHRhYmxlLnJlZmVyZW5jZXMuY2xlYXIoKTtcbiAgICB0YWJsZS51bmlxdWVzTWFwLmNsZWFyKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFByaXZhdGUgSGVscGVyIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiByb3dz66W8IOydmOyhtOyEsSDsiJzshJzsl5Ag65Sw6528IOugiOuyqOuzhOuhnCDqt7jro7ntmZRcbiAgICogLSDsnpDquLAg7LC47KGwIOyXhuuKlCDqsr3smrAgOiDrqqjrk6Agcm93c+qwgCBMZXZlbCAwXG4gICAqIC0g7J6Q6riwIOywuOyhsCDsnojripQg6rK97JqwIDog7J6Q6riwIOywuOyhsCDqtIDqs4Trpbwg7JyE7IOBIOygleugrO2VmOyXrCDroIjrsqjrs4TroZwg6re466O57ZmUXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSW5zZXJ0TGV2ZWxzKFxuICAgIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IHsgbGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdW107IGhhc0NpcmN1bGFyOiBib29sZWFuIH0ge1xuICAgIC8vIDEuIOyekOq4sCDssLjsobDqsIAg7JeG7Jy866m0IO2VnCDroIjrsqjroZwg7LKY66asXG4gICAgY29uc3QgaGFzU2VsZlJlZiA9IHJvd3NcbiAgICAgIC5mbGF0TWFwKChyb3cpID0+IE9iamVjdC52YWx1ZXMocm93KSlcbiAgICAgIC5zb21lKCh2YWx1ZSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSk7XG4gICAgaWYgKCFoYXNTZWxmUmVmKSByZXR1cm4geyBsZXZlbHM6IFtyb3dzXSwgaGFzQ2lyY3VsYXI6IGZhbHNlIH07XG5cbiAgICAvLyAyLiB1dWlkIOKGkiByb3cg66ek7ZWRICjspJHrs7UgdXVpZCDrsKnsp4ApXG4gICAgY29uc3Qgcm93QnlVdWlkID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHV1aWQgPSByb3cudXVpZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXV1aWQpIHRocm93IG5ldyBFcnJvcihgYnVpbGRJbnNlcnRMZXZlbHM6IHV1aWTqsIAg7JeG64qUIHJvdyAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgIHJvd0J5VXVpZC5zZXQodXVpZCwgcm93KTtcbiAgICB9XG5cbiAgICBsZXQgcGVuZGluZyA9IEFycmF5LmZyb20ocm93QnlVdWlkLnZhbHVlcygpKTtcbiAgICBjb25zdCBsZXZlbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11bXSA9IFtdO1xuICAgIGNvbnN0IGluc2VydGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyAzLiDroIjrsqjrs4Qg67aE66WYXG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudExldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gICAgICBjb25zdCBuZXh0UGVuZGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwZW5kaW5nKSB7XG4gICAgICAgIC8vIOydtCByb3fqsIAg7LC47KGw7ZWY64qUIOyekOq4sCDssLjsobDrk6RcbiAgICAgICAgY29uc3Qgc2VsZlJlZnMgPSBPYmplY3QudmFsdWVzKHJvdykuZmlsdGVyKFxuICAgICAgICAgICh2YWx1ZSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSxcbiAgICAgICAgKSBhcyBVQlJlZltdO1xuXG4gICAgICAgIC8vIOywuOyhsO2VmOuKlCDrqqjrk6AgdXVpZOqwgCDsnbTrr7ggaW5zZXJ0ZWTsl5Ag7J6I7Ja07JW8IOydtOuyiCDroIjrsqjsl5Ag7Y+s7ZWoXG4gICAgICAgIGNvbnN0IGNhbkluc2VydCA9IHNlbGZSZWZzLmV2ZXJ5KChyZWYpID0+IHtcbiAgICAgICAgICBpZiAoIXJvd0J5VXVpZC5oYXMocmVmLnV1aWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgdXVpZCAke3JlZi51dWlkfSAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluc2VydGVkLmhhcyhyZWYudXVpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjYW5JbnNlcnQpIHtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwucHVzaChyb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRQZW5kaW5nLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDsiJztmZgg7LC47KGwIOqwkOyngFxuICAgICAgaWYgKGN1cnJlbnRMZXZlbC5sZW5ndGggPT09IDApIHJldHVybiB7IGxldmVsczogW10sIGhhc0NpcmN1bGFyOiB0cnVlIH07XG5cbiAgICAgIC8vIOugiOuyqCDtmZXsoJUgKyBpbnNlcnRlZCDqsLHsi6BcbiAgICAgIGxldmVscy5wdXNoKGN1cnJlbnRMZXZlbCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBjdXJyZW50TGV2ZWwpIHtcbiAgICAgICAgaW5zZXJ0ZWQuYWRkKHJvdy51dWlkIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIHBlbmRpbmcgPSBuZXh0UGVuZGluZztcbiAgICB9XG5cbiAgICByZXR1cm4geyBsZXZlbHMsIGhhc0NpcmN1bGFyOiBmYWxzZSB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsImlzQXJyYXkiLCJ1bmlxdWUiLCJFbnRpdHlNYW5hZ2VyIiwiTmFpdGUiLCJhc3NlcnREZWZpbmVkIiwiY2h1bmsiLCJub25OdWxsYWJsZSIsImJhdGNoVXBkYXRlIiwiaXNSZWZGaWVsZCIsImZpZWxkIiwidW5kZWZpbmVkIiwib2YiLCJ1dWlkIiwiVXBzZXJ0QnVpbGRlciIsInRhYmxlcyIsIk1hcCIsImdldFRhYmxlIiwidGFibGVOYW1lIiwidGFibGUiLCJnZXQiLCJ0YWJsZVNwZWMiLCJnZXRUYWJsZVNwZWMiLCJ0YWJsZURhdGEiLCJyZWZlcmVuY2VzIiwiU2V0Iiwicm93cyIsInVuaXF1ZUluZGV4ZXMiLCJ1bmlxdWVzTWFwIiwic2V0IiwiaGFzVGFibGUiLCJoYXMiLCJyZWdpc3RlciIsInJvdyIsInVuaXF1ZUtleXMiLCJtYXAiLCJ1bnFJbmRleCIsInVuaXF1ZUtleUFycmF5IiwiY29sdW1ucyIsInVucUNvbCIsInZhbCIsIm5hbWUiLCJsZW5ndGgiLCJqb2luIiwiZmlsdGVyIiwiaXNSZXVzZWQiLCJ1bmlxdWVLZXkiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJyb3dLZXkiLCJyb3dWYWx1ZSIsInVzZSIsImFkZCIsIkRhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwicHVzaCIsInJlc3VsdCIsInQiLCJpc1V1aWRSZXVzZWQiLCJ1cHNlcnQiLCJ3ZGIiLCJvcHRpb25zIiwidXBzZXJ0T3JJbnNlcnQiLCJpbnNlcnRPbmx5IiwibW9kZSIsIkVycm9yIiwic29tZSIsInZhbHVlIiwicmVmVGFibGVzIiwiQXJyYXkiLCJmcm9tIiwicmVkdWNlIiwiciIsInJlZmVyZW5jZSIsInZhbHVlcyIsImZpbmQiLCJyZWYiLCJpbmNsdWRlcyIsImV4dHJhY3RGaWVsZHMiLCJzcGxpdCIsImxldmVscyIsImhhc0NpcmN1bGFyIiwiYnVpbGRJbnNlcnRMZXZlbHMiLCJ1dWlkTWFwIiwiYWxsSWRzIiwibGV2ZWxSb3dzIiwicmVzb2x2ZWRSb3dzIiwicmVzb2x2ZWQiLCJrZXkiLCJwYXJlbnQiLCJ0byIsImNodW5rU2l6ZSIsImxldmVsQ2h1bmtzIiwic2VsZWN0RmllbGRzIiwiZGF0YUNodW5rIiwib3JpZ2luYWxVdWlkcyIsImRhdGFGb3JEYiIsInJlc3QiLCJyZXN1bHRSb3dzIiwiaW5zZXJ0IiwiaW50byIsInJldHVybmluZyIsInJvd3NXaXRob3V0SWQiLCJpZCIsInVuaXF1ZUluZGV4IiwiYyIsImNvbmRpdGlvbnMiLCJjb2wiLCJ2IiwiZXhpc3RpbmdSb3dzIiwid2hlcmVJbiIsInNlbGVjdCIsImV4aXN0aW5nTWFwIiwiZXhpc3RpbmciLCJTdHJpbmciLCJleGlzdGluZ0lkIiwiY29uZmxpY3RDb2x1bW5zIiwiYWxsQ29sdW1ucyIsImtleXMiLCJ1cGRhdGVDb2x1bW5zIiwiaW5oZXJpdCIsImluaGVyaXRDb2x1bW5zIiwiZXhjbHVkZWRGcm9tVXBkYXRlIiwibWVyZ2VDb2x1bW5zIiwib25Db25mbGljdCIsIm1lcmdlIiwiaSIsInByb3AiLCJjb25zb2xlIiwiZXJyb3IiLCJyZXNvbHZlZFZhbHVlIiwiY2xlYW5PcnBoYW5zIiwiZmtDb2x1bW5zIiwiZmtDb25kaXRpb25zIiwiZmtDb2wiLCJma1ZhbHVlcyIsImNvbHVtbiIsImV2ZXJ5IiwiZmMiLCJkZWxldGVRdWVyeSIsIndoZXJlTm90SW4iLCJkZWxldGVkQ291bnQiLCJkZWxldGUiLCJjbGVhciIsInJvd0NvdW50IiwicmV0dXJuZWRJZHMiLCJ1cGRhdGVCYXRjaCIsIndoZXJlIiwid2hlcmVDb2x1bW5zIiwiX3JvdyIsIl8iLCJoYXNTZWxmUmVmIiwiZmxhdE1hcCIsInJvd0J5VXVpZCIsInBlbmRpbmciLCJpbnNlcnRlZCIsImN1cnJlbnRMZXZlbCIsIm5leHRQZW5kaW5nIiwic2VsZlJlZnMiLCJjYW5JbnNlcnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxTQUFTO0FBRXBDLFNBQVNDLE9BQU8sRUFBRUMsTUFBTSxRQUFRLFVBQVU7QUFDMUMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUFTQyxLQUFLLFFBQVEsb0JBQWlCO0FBRXZDLFNBQVNDLGFBQWEsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLFFBQVEsb0JBQWlCO0FBQ25FLFNBQVNDLFdBQVcsUUFBd0IscUJBQWtCO0FBdUM5RCxPQUFPLFNBQVNDLFdBQVdDLEtBQWM7SUFDdkMsT0FDRUEsVUFBVUMsYUFDVkQsVUFBVSxRQUNWLEFBQUNBLE9BQWlCRSxPQUFPRCxhQUN6QixBQUFDRCxPQUFpQkcsU0FBU0Y7QUFFL0I7QUFFQSxPQUFPLE1BQU1HO0lBQ1hDLE9BQStCO0lBQy9CLGFBQWM7UUFDWixJQUFJLENBQUNBLE1BQU0sR0FBRyxJQUFJQztJQUNwQjtJQUVBQyxTQUFTQyxTQUFpQixFQUFhO1FBQ3JDLE1BQU1DLFFBQVEsSUFBSSxDQUFDSixNQUFNLENBQUNLLEdBQUcsQ0FBQ0Y7UUFDOUIsSUFBSUMsT0FBTztZQUNULE9BQU9BO1FBQ1Q7UUFFQSxNQUFNRSxZQUFZLEFBQUMsQ0FBQTtZQUNqQixJQUFJO2dCQUNGLE9BQU9sQixjQUFjbUIsWUFBWSxDQUFDSjtZQUNwQyxFQUFFLE9BQU07Z0JBQ04sT0FBTztZQUNUO1FBQ0YsQ0FBQTtRQUVBLE1BQU1LLFlBQVk7WUFDaEJDLFlBQVksSUFBSUM7WUFDaEJDLE1BQU0sRUFBRTtZQUNSQyxlQUFlTixXQUFXTSxpQkFBaUIsRUFBRTtZQUM3Q0MsWUFBWSxJQUFJWjtRQUNsQjtRQUNBLElBQUksQ0FBQ0QsTUFBTSxDQUFDYyxHQUFHLENBQUNYLFdBQVdLO1FBQzNCLE9BQU9BO0lBQ1Q7SUFFQU8sU0FBU1osU0FBaUIsRUFBVztRQUNuQyxPQUFPLElBQUksQ0FB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
|
|
453
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS91cHNlcnQtYnVpbGRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcImNyeXB0b1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB7IGlzQXJyYXksIHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cywgRGF0YWJhc2VTY2hlbWFFeHRlbmQsIEVudGl0eUluZGV4IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBhc3NlcnREZWZpbmVkLCBjaHVuaywgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IGJhdGNoVXBkYXRlLCB0eXBlIFJvd1dpdGhJZCB9IGZyb20gXCIuL19iYXRjaF91cGRhdGVcIjtcbmltcG9ydCB0eXBlIHsgQ29sdW1uS2V5cywgRm9yZWlnbktleUNvbHVtbnMsIFRhYmxlTmFtZSB9IGZyb20gXCIuL3B1cmkudHlwZXNcIjtcblxuLyoqXG4gKiBGSyDtg4DsnoUg7LaU66Gg7J2EIOychO2VtCBEYXRhYmFzZUZvcmVpZ25LZXlzIGV4cG9ydFxuICogKG1vZHVsZSBhdWdtZW50YXRpb24g7J6Q64+ZIOuhnOuTnCDrs7TsnqUpXG4gKi9cbmV4cG9ydCB0eXBlIHsgRGF0YWJhc2VGb3JlaWduS2V5cyB9O1xuXG50eXBlIEluaGVyaXRhYmxlQ29sdW1uczxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PiA9XG4gIFRUYWJsZSBleHRlbmRzIGtleW9mIERhdGFiYXNlU2NoZW1hRXh0ZW5kID8gQ29sdW1uS2V5czxEYXRhYmFzZVNjaGVtYUV4dGVuZFtUVGFibGVdPiA6IG5ldmVyO1xuXG4vLyDthYzsnbTruJQg642w7J207YSwIO2DgOyehVxudHlwZSBUYWJsZURhdGEgPSB7XG4gIHJlZmVyZW5jZXM6IFNldDxzdHJpbmc+O1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICB1bmlxdWVzTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBqc29uQ29sdW1uczogc3RyaW5nW107XG59O1xuXG4vLyDssLjsobAg7ZWE65OcIO2DgOyehVxuZXhwb3J0IHR5cGUgVUJSZWYgPSB7XG4gIHV1aWQ6IHN0cmluZztcbiAgb2Y6IHN0cmluZztcbiAgdXNlPzogc3RyaW5nO1xufTtcblxuLy8gdXBzZXJ0IOyYteyFmFxuZXhwb3J0IHR5cGUgVXBzZXJ0T3B0aW9uczxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PiA9IHtcbiAgY2h1bmtTaXplPzogbnVtYmVyO1xuICBjbGVhbk9ycGhhbnM/OiBGb3JlaWduS2V5Q29sdW1uczxUVGFibGU+IHwgRm9yZWlnbktleUNvbHVtbnM8VFRhYmxlPltdO1xuICBpbmhlcml0PzogSW5oZXJpdGFibGVDb2x1bW5zPFRUYWJsZT5bXTtcbn07XG5cbi8vIGluc2VydE9ubHkg7Ji17IWYXG5leHBvcnQgdHlwZSBJbnNlcnRPbmx5T3B0aW9ucyA9IHtcbiAgY2h1bmtTaXplPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmRmllbGQoZmllbGQ6IHVua25vd24pOiBmaWVsZCBpcyBVQlJlZiB7XG4gIHJldHVybiAoXG4gICAgZmllbGQgIT09IHVuZGVmaW5lZCAmJlxuICAgIGZpZWxkICE9PSBudWxsICYmXG4gICAgKGZpZWxkIGFzIFVCUmVmKT8ub2YgIT09IHVuZGVmaW5lZCAmJlxuICAgIChmaWVsZCBhcyBVQlJlZik/LnV1aWQgIT09IHVuZGVmaW5lZFxuICApO1xufVxuXG5leHBvcnQgY2xhc3MgVXBzZXJ0QnVpbGRlciB7XG4gIHRhYmxlczogTWFwPHN0cmluZywgVGFibGVEYXRhPjtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50YWJsZXMgPSBuZXcgTWFwKCk7XG4gIH1cblxuICBnZXRUYWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IFRhYmxlRGF0YSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlcy5nZXQodGFibGVOYW1lKTtcbiAgICBpZiAodGFibGUpIHtcbiAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZVNwZWMgPSAoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEVudGl0eU1hbmFnZXIuZ2V0VGFibGVTcGVjKHRhYmxlTmFtZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IHRhYmxlRGF0YSA9IHtcbiAgICAgIHJlZmVyZW5jZXM6IG5ldyBTZXQ8c3RyaW5nPigpLFxuICAgICAgcm93czogW10sXG4gICAgICB1bmlxdWVJbmRleGVzOiB0YWJsZVNwZWM/LnVuaXF1ZUluZGV4ZXMgPz8gW10sXG4gICAgICB1bmlxdWVzTWFwOiBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpLFxuICAgICAganNvbkNvbHVtbnM6IHRhYmxlU3BlYz8uanNvbkNvbHVtbnMgPz8gW10sXG4gICAgfTtcbiAgICB0aGlzLnRhYmxlcy5zZXQodGFibGVOYW1lLCB0YWJsZURhdGEpO1xuICAgIHJldHVybiB0YWJsZURhdGE7XG4gIH1cblxuICBoYXNUYWJsZSh0YWJsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlcy5oYXModGFibGVOYW1lKTtcbiAgfVxuXG4gIHJlZ2lzdGVyPFQgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHJvdzoge1xuICAgICAgW2tleSBpbiBUXT86IFVCUmVmIHwgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IGJpZ2ludCB8IG51bGwgfCBvYmplY3QgfCB1bmtub3duO1xuICAgIH0sXG4gICk6IFVCUmVmIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcblxuICAgIC8vIO2VtOuLuSDthYzsnbTruJTsnZggdW5pcXVlIOyduOuNseyKpOulvCDsiJztmoztlZjrqbAg7YKkIOyDneyEsVxuICAgIGNvbnN0IHVuaXF1ZUtleXMgPSB0YWJsZS51bmlxdWVJbmRleGVzXG4gICAgICAubWFwKCh1bnFJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB1bmlxdWVLZXlBcnJheSA9IHVucUluZGV4LmNvbHVtbnMubWFwKCh1bnFDb2wpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSByb3dbdW5xQ29sLm5hbWUgYXMga2V5b2YgdHlwZW9mIHJvd107XG4gICAgICAgICAgaWYgKGlzUmVmRmllbGQodmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbC51dWlkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcm93W3VucUNvbC5uYW1lIGFzIGtleW9mIHR5cGVvZiByb3ddID8/IHJhbmRvbVVVSUQoKTsgLy8gbnVsbGFibGXsnbgg6rK97JqwIHV1aWTroZwg656c642k6rCSIOyCveyehVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g6rCS7J20IOuqqOuRkCBudWxs7J24IOqyveyasCDtgqQg7IOd7ISxIO2MqOyKpFxuICAgICAgICBpZiAodW5pcXVlS2V5QXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuaXF1ZUtleUFycmF5LmpvaW4oXCItLS1kZWxpbWl0ZXItLVwiKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKG5vbk51bGxhYmxlKTtcblxuICAgIC8vIHV1aWQg7IOd7ISxIOuhnOyngVxuICAgIGNvbnN0IHsgdXVpZCwgaXNSZXVzZWQgfSA9ICgoKSA9PiB7XG4gICAgICAvLyDtgqTrpbwg7Iic7ZqM7ZWY7JesIOydtOuvuCDsobTsnqztlZjripQg7YKk6rCAIOyeiOuKlOyngCDtmZXsnbhcbiAgICAgIGlmICh1bmlxdWVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCB1bmlxdWVLZXkgb2YgdW5pcXVlS2V5cykge1xuICAgICAgICAgIGlmICh0YWJsZS51bmlxdWVzTWFwLmhhcyh1bmlxdWVLZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB1dWlkOiBhc3NlcnREZWZpbmVkKHRhYmxlLnVuaXF1ZXNNYXAuZ2V0KHVuaXF1ZUtleSksIFwiVW5pcXVlIGtleSBub3QgZm91bmRcIiksXG4gICAgICAgICAgICAgIGlzUmV1c2VkOiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8g7LC+7J2EIOyImCDsl4bripQg6rK97JqwIOyDneyEsVxuICAgICAgcmV0dXJuIHsgdXVpZDogcmFuZG9tVVVJRCgpLCBpc1JldXNlZDogZmFsc2UgfTtcbiAgICB9KSgpO1xuXG4gICAgLy8g66qo65OgIOycoOuLiO2BrO2CpOyXkCDrjIDtlbQg7Jyg64uI7YGs66e17JeQIHV1aWQg7KCA7J6lXG4gICAgaWYgKHVuaXF1ZUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCB1bmlxdWVLZXkgb2YgdW5pcXVlS2V5cykge1xuICAgICAgICB0YWJsZS51bmlxdWVzTWFwLnNldCh1bmlxdWVLZXksIHV1aWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOydtCDthYzsnbTruJTsl5Ag7IKs7Jqp65CcIFJlZkZpZWxk66W8IOyInO2ajO2VmOyXrCwg7ZiE7J6sIO2FjOydtOu4lCDsoJXrs7Tsl5Ag7Ja065akIO2VhOuTnOulvCDssLjsobDtlZjripTsp4Ag7LaU6rCAXG4gICAgLy8g7J20IOygleuztOulvCDrgpjspJHsl5Ag7LmY7ZmY7ZWgIOuVjCDsgqzsmqlcbiAgICByb3cgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhyb3cpLm1hcCgoW3Jvd0tleSwgcm93VmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChpc1JlZkZpZWxkKHJvd1ZhbHVlKSkge1xuICAgICAgICAgIHJvd1ZhbHVlLnVzZSA/Pz0gXCJpZFwiO1xuICAgICAgICAgIHRhYmxlLnJlZmVyZW5jZXMuYWRkKGAke3Jvd1ZhbHVlLm9mfS4ke3Jvd1ZhbHVlLnVzZX1gKTtcbiAgICAgICAgICByZXR1cm4gW3Jvd0tleSwgcm93VmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHRhYmxlLmpzb25Db2x1bW5zLmluY2x1ZGVzKHJvd0tleSkgJiYgcm93VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBKU09OIOy7rOufvOyduCDqsr3smrAgSlNPTi5zdHJpbmdpZnkg7LKY66asIChLbmV464qUIEpTT04g7YOA7J6F7J2EIOyngOybkO2VmOyngCDslYrsnYwpXG4gICAgICAgICAgcmV0dXJuIFtyb3dLZXksIEpTT04uc3RyaW5naWZ5KHJvd1ZhbHVlKV07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShyb3dWYWx1ZSkpIHtcbiAgICAgICAgICAvLyDrsLDsl7TsnYAg6re464yA66GcIOyggOyepVxuICAgICAgICAgIHJldHVybiBbcm93S2V5LCByb3dWYWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtyb3dLZXksIHJvd1ZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKSBhcyB7IFtrZXkgaW4gVF0/OiB1bmtub3duIH07XG5cbiAgICB0YWJsZS5yb3dzLnB1c2goe1xuICAgICAgdXVpZCxcbiAgICAgIC4uLnJvdyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdDogVUJSZWYgPSB7XG4gICAgICBvZjogdGFibGVOYW1lLFxuICAgICAgdXVpZDogKHJvdyBhcyB7IHV1aWQ/OiBzdHJpbmcgfSkudXVpZCA/PyB1dWlkLFxuICAgIH07XG5cbiAgICBOYWl0ZS50KFwicHVyaTp1Yi1yZWdpc3RlclwiLCB7XG4gICAgICB0YWJsZU5hbWUsXG4gICAgICB1dWlkOiByZXN1bHQudXVpZCxcbiAgICAgIGlzVXVpZFJldXNlZDogaXNSZXVzZWQsXG4gICAgICByb3csXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgdXBzZXJ0PFRUYWJsZSBleHRlbmRzIFRhYmxlTmFtZTxEYXRhYmFzZVNjaGVtYUV4dGVuZD4+KFxuICAgIHdkYjogS25leCxcbiAgICB0YWJsZU5hbWU6IFRUYWJsZSxcbiAgICBvcHRpb25zPzogVXBzZXJ0T3B0aW9uczxUVGFibGU+LFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0T3JJbnNlcnQod2RiLCB0YWJsZU5hbWUsIFwidXBzZXJ0XCIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgaW5zZXJ0T25seTxUVGFibGUgZXh0ZW5kcyBUYWJsZU5hbWU8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+PihcbiAgICB3ZGI6IEtuZXgsXG4gICAgdGFibGVOYW1lOiBUVGFibGUsXG4gICAgb3B0aW9ucz86IEluc2VydE9ubHlPcHRpb25zLFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMudXBzZXJ0T3JJbnNlcnQod2RiLCB0YWJsZU5hbWUsIFwiaW5zZXJ0XCIsIG9wdGlvbnMpO1xuICB9XG5cbiAgYXN5bmMgdXBzZXJ0T3JJbnNlcnQ8VFRhYmxlIGV4dGVuZHMgVGFibGVOYW1lPERhdGFiYXNlU2NoZW1hRXh0ZW5kPj4oXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogVFRhYmxlLFxuICAgIG1vZGU6IFwidXBzZXJ0XCIgfCBcImluc2VydFwiLFxuICAgIG9wdGlvbnM/OiBVcHNlcnRPcHRpb25zPFRUYWJsZT4sXG4gICk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBpZiAodGhpcy5oYXNUYWJsZSh0YWJsZU5hbWUpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZXMuZ2V0KHRhYmxlTmFtZSk7XG4gICAgaWYgKHRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCDthYzsnbTruJQgJHt0YWJsZU5hbWV97JeQIHVwc2VydCDsmpTssq1gKTtcbiAgICB9IGVsc2UgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFibGVOYW1lfeyXkCB1cHNlcnQg7ZWgIOuNsOydtO2EsOqwgCDsl4bsirXri4jri6QuYCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGFibGUucm93cy5zb21lKChyb3cpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJvdykuc29tZSgoWywgdmFsdWVdKSA9PiBpc1JlZkZpZWxkKHZhbHVlKSAmJiB2YWx1ZS5vZiAhPT0gdGFibGVOYW1lKSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV9IO2VtOqysOuQmOyngCDslYrsnYAg7LC47KGw6rCAIOyeiOyKteuLiOuLpC5gKTtcbiAgICB9XG5cbiAgICAvLyDsoITssrQg7YWM7J2067iUIOyInO2ajO2VmOyXrCDtmITsnqwg7YWM7J2067iUIOywuOyhsO2VmOuKlCDrqqjrk6Ag7YWM7J2067iUIOy2lOy2nFxuICAgIGNvbnN0IHsgcmVmZXJlbmNlcywgcmVmVGFibGVzIH0gPSBBcnJheS5mcm9tKHRoaXMudGFibGVzKS5yZWR1Y2UoXG4gICAgICAociwgWywgdGFibGVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IEFycmF5LmZyb20odGFibGUucmVmZXJlbmNlcy52YWx1ZXMoKSkuZmluZCgocmVmKSA9PlxuICAgICAgICAgIHJlZi5pbmNsdWRlcyhgJHt0YWJsZU5hbWV9LmApLFxuICAgICAgICApO1xuICAgICAgICBpZiAocmVmZXJlbmNlKSB7XG4gICAgICAgICAgci5yZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKTtcbiAgICAgICAgICByLnJlZlRhYmxlcy5wdXNoKHRhYmxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcmVmZXJlbmNlczogW10gYXMgc3RyaW5nW10sXG4gICAgICAgIHJlZlRhYmxlczogW10gYXMgVGFibGVEYXRhW10sXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3QgZXh0cmFjdEZpZWxkcyA9IHVuaXF1ZShyZWZlcmVuY2VzKVxuICAgICAgLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2Uuc3BsaXQoXCIuXCIpWzFdKVxuICAgICAgLmZpbHRlcigoZmllbGQpOiBmaWVsZCBpcyBzdHJpbmcgPT4gZmllbGQgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAvLyDsnZjsobTshLEg7Iic7ISc7JeQIOuUsOudvCDroIjrsqjrs4Qg6re466O57ZmUICjsnpDquLAg7LC47KGw6rCAIOyXhuycvOuptCBMZXZlbCAwIO2VmOuCmClcbiAgICBjb25zdCB7IGxldmVscywgaGFzQ2lyY3VsYXIgfSA9IHRoaXMuYnVpbGRJbnNlcnRMZXZlbHModGFibGUucm93cywgdGFibGVOYW1lKTtcblxuICAgIGlmIChoYXNDaXJjdWxhcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RhYmxlTmFtZX3sl5Ag7Iic7ZmYIOyekOq4sCDssLjsobDqsIAg7J6I7Iq164uI64ukLmApO1xuICAgIH1cblxuICAgIGNvbnN0IHV1aWRNYXAgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgICBjb25zdCBhbGxJZHM6IG51bWJlcltdID0gW107XG5cbiAgICAvLyDroIjrsqjrs4TroZwg7Iic7LCoIOyymOumrFxuICAgIGZvciAoY29uc3QgbGV2ZWxSb3dzIG9mIGxldmVscykge1xuICAgICAgLy8g7J207KCEIOugiOuyqOyXkOyEnCDslrvsnYAgSUTroZwg7J6Q6riwIOywuOyhsCDtlbTqsrBcbiAgICAgIGNvbnN0IHJlc29sdmVkUm93cyA9IGxldmVsUm93cy5tYXAoKHJvdykgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHsgLi4ucm93IH07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJvdykpIHtcbiAgICAgICAgICBpZiAoaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdXVpZE1hcC5nZXQodmFsdWUudXVpZCk7XG5cbiAgICAgICAgICAgIGlmICghcGFyZW50KSB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgdXVpZCAke3ZhbHVlLnV1aWR9IC0tIGluICR7dGFibGVOYW1lfWApO1xuXG4gICAgICAgICAgICByZXNvbHZlZFtrZXldID0gKHBhcmVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbdmFsdWUudXNlID8/IFwiaWRcIl07XG5cbiAgICAgICAgICAgIE5haXRlLnQoXCJwdXJpOnViLXJlZi1yZXNvbHZlZFwiLCB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgZnJvbTogeyBvZjogdmFsdWUub2YsIHV1aWQ6IHZhbHVlLnV1aWQsIHVzZTogdmFsdWUudXNlID8/IFwiaWRcIiB9LFxuICAgICAgICAgICAgICB0bzogcmVzb2x2ZWRba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICB9KTtcblxuICAgICAgLy8g7ZiE7J6sIOugiOuyqCB1cHNlcnRcbiAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IG9wdGlvbnM/LmNodW5rU2l6ZTtcbiAgICAgIGNvbnN0IGxldmVsQ2h1bmtzID0gY2h1bmtTaXplID8gY2h1bmsocmVzb2x2ZWRSb3dzLCBjaHVua1NpemUpIDogW3Jlc29sdmVkUm93c107XG4gICAgICBjb25zdCBzZWxlY3RGaWVsZHMgPSB1bmlxdWUoW1wiaWRcIiwgLi4uZXh0cmFjdEZpZWxkc10pO1xuXG4gICAgICBmb3IgKGNvbnN0IGRhdGFDaHVuayBvZiBsZXZlbENodW5rcykge1xuICAgICAgICBpZiAoZGF0YUNodW5rLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgLy8gdXVpZOulvCDrs4Trj4TroZwg67O06rSA7ZWY6rOgLCBEQuyXkCDsoIDsnqXtlaAg642w7J207YSw7JeQ7IScIOygnOqxsFxuICAgICAgICBjb25zdCBvcmlnaW5hbFV1aWRzID0gZGF0YUNodW5rLm1hcCgocikgPT4gci51dWlkIGFzIHN0cmluZyk7XG4gICAgICAgIGNvbnN0IGRhdGFGb3JEYiA9IGRhdGFDaHVuay5tYXAoKHsgdXVpZCwgLi4ucmVzdCB9KSA9PiByZXN0KTtcblxuICAgICAgICBsZXQgcmVzdWx0Um93czogeyBpZDogbnVtYmVyOyBba2V5OiBzdHJpbmddOiB1bmtub3duIH1bXTtcblxuICAgICAgICBpZiAobW9kZSA9PT0gXCJpbnNlcnRcIikge1xuICAgICAgICAgIC8vIElOU0VSVCDrqqjrk5wgLSBSRVRVUk5JTkcg7IKs7JqpXG4gICAgICAgICAgcmVzdWx0Um93cyA9IGF3YWl0IHdkYi5pbnNlcnQoZGF0YUZvckRiKS5pbnRvKHRhYmxlTmFtZSkucmV0dXJuaW5nKHNlbGVjdEZpZWxkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVVBTRVJUIOuqqOuTnCAtIGlkIOyXhuuKlCByb3frk6TsnZggaWTrpbwg7IKs7KCEIOyhsO2ajOuhnCDssYTsmrDquLBcbiAgICAgICAgICBjb25zdCByb3dzV2l0aG91dElkID0gZGF0YUZvckRiLmZpbHRlcigocm93KSA9PiAhcm93LmlkKTtcblxuICAgICAgICAgIGlmIChyb3dzV2l0aG91dElkLmxlbmd0aCA+IDAgJiYgdGFibGUudW5pcXVlSW5kZXhlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyDrqqjrk6AgdW5pcXVlSW5kZXhlc+uhnCDquLDsobQg66CI7L2U65OcIOyhsO2ajFxuICAgICAgICAgICAgZm9yIChjb25zdCB1bmlxdWVJbmRleCBvZiB0YWJsZS51bmlxdWVJbmRleGVzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB1bmlxdWVJbmRleC5jb2x1bW5zLm1hcCgoYykgPT4gYy5uYW1lKTtcblxuICAgICAgICAgICAgICAvLyDsobDtmoztlaAg7KGw6rG065OkIOy2lOy2nCAo6rCBIHJvd+ydmCB1bmlxdWUg7Lus65+8IOqwkuuTpClcbiAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uczogdW5rbm93bltdW10gPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93c1dpdGhvdXRJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbHVtbnMubWFwKChjb2wpID0+IHJvd1tjb2xdKTtcbiAgICAgICAgICAgICAgICAvLyBudWxs7J20IO2PrO2VqOuQnCDsobDqsbTsnYAg7KCc7Jm4IChQb3N0Z3JlU1FMIFVOSVFVReuKlCBOVUxMIOustOyLnClcbiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5zb21lKCh2KSA9PiB2ID09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2godmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgIC8vIOuwsOy5mCBTRUxFQ1RcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSb3dzID0gKGF3YWl0IHdkYih0YWJsZU5hbWUpXG4gICAgICAgICAgICAgICAgLndoZXJlSW4oY29sdW1ucywgY29uZGl0aW9ucyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdW10pXG4gICAgICAgICAgICAgICAgLnNlbGVjdChcImlkXCIsIC4uLmNvbHVtbnMpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuXG4gICAgICAgICAgICAgIC8vIE1hcCDsg53shLE6IHVuaXF1ZSDsu6zrn7wg7KGw7ZWpIOKGkiBpZFxuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ01hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZXhpc3Rpbmcgb2YgZXhpc3RpbmdSb3dzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1uc1xuICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBTdHJpbmcoZXhpc3RpbmdbY29sXSA/PyBcIlwiKSlcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiLS0tZGVsaW1pdGVyLS0tXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZXhpc3RpbmcuaWQ7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdNYXAuc2V0KGtleSwgaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGlkIOyXhuuKlCByb3frk6Tsl5Ag66ek7Lmt65CY64qUIGlkIOyxhOyasOq4sFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzV2l0aG91dElkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pZCkgY29udGludWU7IC8vIOydtOuvuCDri6TrpbggdW5pcXVlSW5kZXjsl5DshJwg7LGE7JuM7KeEIOqyveyasCDsiqTtgrVcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNvbHVtbnMubWFwKChjb2wpID0+IFN0cmluZyhyb3dbY29sXSA/PyBcIlwiKSkuam9pbihcIi0tLWRlbGltaXRlci0tLVwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gZXhpc3RpbmdNYXAuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZCkge1xuICAgICAgICAgICAgICAgICAgcm93LmlkID0gZXhpc3RpbmdJZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBvbkNvbmZsaWN064qUIGlk66eMIOyCrOyaqSAo66qo65OgIHVuaXF1ZUluZGV4ZXPripQg7J2066+4IOyCrOyghCDsobDtmozroZwg7LKY66as65CoKVxuICAgICAgICAgIGNvbnN0IGNvbmZsaWN0Q29sdW1ucyA9IFtcImlkXCJdO1xuXG4gICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IE9iamVjdC5rZXlzKGRhdGFGb3JEYlswXSk7XG4gICAgICAgICAgbGV0IHVwZGF0ZUNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoYykgPT4gYyAhPT0gXCJpZFwiKTtcblxuICAgICAgICAgIC8vIGluaGVyaXQg7Ji17IWYIOyymOumrCAtIGluaGVyaXQg7Lus65+87J2AIHVwZGF0ZSDrjIDsg4Hsl5DshJwg7KCc7Jm4XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmluaGVyaXQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5oZXJpdENvbHVtbnMgPSBvcHRpb25zLmluaGVyaXQgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkRnJvbVVwZGF0ZSA9IHVwZGF0ZUNvbHVtbnMuZmlsdGVyKChjKSA9PiBpbmhlcml0Q29sdW1ucy5pbmNsdWRlcyhjKSk7XG4gICAgICAgICAgICB1cGRhdGVDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5maWx0ZXIoKGMpID0+ICFpbmhlcml0Q29sdW1ucy5pbmNsdWRlcyhjKSk7XG5cbiAgICAgICAgICAgIC8vIOyLpOygnOuhnCDsoJzsmbjrkJwg7Lus65+8IOuhnOq5hVxuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkRnJvbVVwZGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgTmFpdGUudChcInB1cmk6dWItaW5oZXJpdFwiLCB7XG4gICAgICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgICAgIGluaGVyaXRDb2x1bW5zLFxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVkRnJvbVVwZGF0ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gdXBkYXRlQ29sdW1uc+qwgCDruYTslrTsnojslrTrj4QgbWVyZ2UoKeulvCDsgqzsmqntlZjsl6wg66qo65OgIO2WieydtCBSRVRVUk5JTkfrkJjrj4TroZ0g67O07J6lXG4gICAgICAgICAgY29uc3QgbWVyZ2VDb2x1bW5zID0gdXBkYXRlQ29sdW1ucy5sZW5ndGggPyB1cGRhdGVDb2x1bW5zIDogY29uZmxpY3RDb2x1bW5zO1xuXG4gICAgICAgICAgcmVzdWx0Um93cyA9IGF3YWl0IHdkYlxuICAgICAgICAgICAgLmluc2VydChkYXRhRm9yRGIpXG4gICAgICAgICAgICAuaW50byh0YWJsZU5hbWUpXG4gICAgICAgICAgICAub25Db25mbGljdChjb25mbGljdENvbHVtbnMpXG4gICAgICAgICAgICAubWVyZ2UobWVyZ2VDb2x1bW5zKVxuICAgICAgICAgICAgLnJldHVybmluZyhzZWxlY3RGaWVsZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9yaWdpbmFsVXVpZHMubGVuZ3RoICE9PSByZXN1bHRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJsZU5hbWV9OiByZWdpc3Rlci9yZXR1cm5pbmcg67aI7J287LmYYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB1dWlkTWFwLnNldChvcmlnaW5hbFV1aWRzW2ldLCByZXN1bHRSb3dzW2ldKTtcbiAgICAgICAgICBhbGxJZHMucHVzaChyZXN1bHRSb3dzW2ldLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIO2VtOuLuSDthYzsnbTruJQg7LC47KGw66W8IOyLpOygnCDrsLjrpZjroZwg67OA6rK9XG4gICAgZm9yIChjb25zdCB0YWJsZSBvZiByZWZUYWJsZXMpIHtcbiAgICAgIHRhYmxlLnJvd3MgPSB0YWJsZS5yb3dzLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJvdykpIHtcbiAgICAgICAgICBjb25zdCBwcm9wID0gcm93W2tleV07XG4gICAgICAgICAgaWYgKGlzUmVmRmllbGQocHJvcCkgJiYgcHJvcC5vZiA9PT0gdGFibGVOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB1dWlkTWFwLmdldChwcm9wLnV1aWQpO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihwcm9wKTtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIHV1aWQgJHtwcm9wLnV1aWR9IC0tIGluICR7dGFibGVOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IChwYXJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3Byb3AudXNlID8/IFwiaWRcIl07XG4gICAgICAgICAgICByb3dba2V5XSA9IHJlc29sdmVkVmFsdWU7XG5cbiAgICAgICAgICAgIE5haXRlLnQoXCJwdXJpOnViLXJlZi1yZXNvbHZlZFwiLCB7XG4gICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgZnJvbTogeyBvZjogcHJvcC5vZiwgdXVpZDogcHJvcC51dWlkLCB1c2U6IHByb3AudXNlID8/IFwiaWRcIiB9LFxuICAgICAgICAgICAgICB0bzogcmVzb2x2ZWRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmNsZWFuT3JwaGFucykge1xuICAgICAgY29uc3QgY2xlYW5PcnBoYW5zID0gb3B0aW9ucy5jbGVhbk9ycGhhbnM7XG4gICAgICBjb25zdCBma0NvbHVtbnMgPSBpc0FycmF5KGNsZWFuT3JwaGFucylcbiAgICAgICAgPyAoY2xlYW5PcnBoYW5zIGFzIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5bXSlcbiAgICAgICAgOiBbY2xlYW5PcnBoYW5zIGFzIEZvcmVpZ25LZXlDb2x1bW5zPFRUYWJsZT5dO1xuXG4gICAgICAvLyDtmITsnqwgcmVnaXN0ZXLrkJwg66CI7L2U65Oc65Ok7J2YIEZLIOqwkuuTpCDstpTstpxcbiAgICAgIGNvbnN0IGZrQ29uZGl0aW9ucyA9IGZrQ29sdW1ucy5tYXAoKGZrQ29sKSA9PiB7XG4gICAgICAgIGNvbnN0IGZrVmFsdWVzID0gWy4uLm5ldyBTZXQodGFibGUucm93cy5tYXAoKHJvdykgPT4gcm93W2ZrQ29sXSkuZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwpKV07XG4gICAgICAgIHJldHVybiB7IGNvbHVtbjogZmtDb2wsIHZhbHVlczogZmtWYWx1ZXMgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyDrqqjrk6AgRksg7Lus65+87JeQIOqwkuydtCDsnojripQg6rK97Jqw7JeQ66eMIOyCreygnCDsi6TtlolcbiAgICAgIGlmIChma0NvbmRpdGlvbnMuZXZlcnkoKGZjKSA9PiBmYy52YWx1ZXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgbGV0IGRlbGV0ZVF1ZXJ5ID0gd2RiKHRhYmxlTmFtZSk7XG5cbiAgICAgICAgLy8g6rCBIEZLIOy7rOufvOyXkCDrjIDtlZwgV0hFUkUgSU4g7KGw6rG0IOy2lOqwgFxuICAgICAgICBmb3IgKGNvbnN0IHsgY29sdW1uLCB2YWx1ZXMgfSBvZiBma0NvbmRpdGlvbnMpIHtcbiAgICAgICAgICBkZWxldGVRdWVyeSA9IGRlbGV0ZVF1ZXJ5LndoZXJlSW4oY29sdW1uLCB2YWx1ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g67Cp6riIIHVwc2VydO2VnCBJROuKlCDsoJzsmbhcbiAgICAgICAgZGVsZXRlUXVlcnkgPSBkZWxldGVRdWVyeS53aGVyZU5vdEluKFwiaWRcIiwgYWxsSWRzKTtcblxuICAgICAgICBjb25zdCBkZWxldGVkQ291bnQgPSBhd2FpdCBkZWxldGVRdWVyeS5kZWxldGUoKTtcblxuICAgICAgICBOYWl0ZS50KFwicHVyaTp1Yi1jbGVhbi1vcnBoYW5zXCIsIHtcbiAgICAgICAgICB0YWJsZU5hbWUsXG4gICAgICAgICAgY2xlYW5PcnBoYW5zOiBma0NvbHVtbnMsXG4gICAgICAgICAgZGVsZXRlZENvdW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDtlbTri7kg7YWM7J2067iU7J2YIOuNsOydtO2EsCDstIjquLDtmZRcbiAgICB0YWJsZS5yb3dzID0gW107XG4gICAgdGFibGUucmVmZXJlbmNlcy5jbGVhcigpO1xuICAgIHRhYmxlLnVuaXF1ZXNNYXAuY2xlYXIoKTtcblxuICAgIE5haXRlLnQoXCJwdXJpOnViLXVwc2VydGVkXCIsIHtcbiAgICAgIHRhYmxlTmFtZSxcbiAgICAgIG1vZGUsXG4gICAgICByb3dDb3VudDogYWxsSWRzLmxlbmd0aCxcbiAgICAgIHJldHVybmVkSWRzOiBhbGxJZHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWxsSWRzO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQmF0Y2goXG4gICAgd2RiOiBLbmV4LFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBjaHVua1NpemU/OiBudW1iZXI7XG4gICAgICB3aGVyZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgY2h1bmtTaXplOiBvcHRpb25zPy5jaHVua1NpemUgPz8gNTAwLFxuICAgICAgd2hlcmU6IG9wdGlvbnM/LndoZXJlID8/IFwiaWRcIixcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaGFzVGFibGUodGFibGVOYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlcy5nZXQodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuTseuhneuQmOyngCDslYrsnYAg7YWM7J2067iUICR7dGFibGVOYW1lfeyXkCB1cGRhdGVCYXRjaCDsmpTssq1gKTtcbiAgICB9IGVsc2UgaWYgKHRhYmxlLnJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd2hlcmVDb2x1bW5zID0gQXJyYXkuaXNBcnJheShvcHRpb25zLndoZXJlKSA/IG9wdGlvbnMud2hlcmUgOiBbb3B0aW9ucy53aGVyZSA/PyBcImlkXCJdO1xuICAgIGNvbnN0IHJvd3MgPSB0YWJsZS5yb3dzLm1hcCgoX3JvdykgPT4ge1xuICAgICAgY29uc3QgeyB1dWlkOiBfLCAuLi5yb3cgfSA9IF9yb3c7IC8vIHV1aWQg7KCc7Jm4XG4gICAgICByZXR1cm4gcm93IGFzIFJvd1dpdGhJZDxzdHJpbmc+O1xuICAgIH0pO1xuXG4gICAgYXdhaXQgYmF0Y2hVcGRhdGUod2RiLCB0YWJsZU5hbWUsIHdoZXJlQ29sdW1ucywgcm93cywgb3B0aW9ucy5jaHVua1NpemUpO1xuXG4gICAgTmFpdGUudChcInB1cmk6dWItYmF0Y2gtdXBkYXRlZFwiLCB7XG4gICAgICB0YWJsZU5hbWUsXG4gICAgICByb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgICB3aGVyZUNvbHVtbnMsXG4gICAgfSk7XG5cbiAgICAvLyB1cGRhdGVCYXRjaCDsmYTro4wg7ZuEIOyymOumrOuQnCDrjbDsnbTthLAg7KCc6rGwXG4gICAgdGFibGUucm93cyA9IFtdO1xuICAgIHRhYmxlLnJlZmVyZW5jZXMuY2xlYXIoKTtcbiAgICB0YWJsZS51bmlxdWVzTWFwLmNsZWFyKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFByaXZhdGUgSGVscGVyIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiByb3dz66W8IOydmOyhtOyEsSDsiJzshJzsl5Ag65Sw6528IOugiOuyqOuzhOuhnCDqt7jro7ntmZRcbiAgICogLSDsnpDquLAg7LC47KGwIOyXhuuKlCDqsr3smrAgOiDrqqjrk6Agcm93c+qwgCBMZXZlbCAwXG4gICAqIC0g7J6Q6riwIOywuOyhsCDsnojripQg6rK97JqwIDog7J6Q6riwIOywuOyhsCDqtIDqs4Trpbwg7JyE7IOBIOygleugrO2VmOyXrCDroIjrsqjrs4TroZwg6re466O57ZmUXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSW5zZXJ0TGV2ZWxzKFxuICAgIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICk6IHsgbGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdW107IGhhc0NpcmN1bGFyOiBib29sZWFuIH0ge1xuICAgIC8vIDEuIOyekOq4sCDssLjsobDqsIAg7JeG7Jy866m0IO2VnCDroIjrsqjroZwg7LKY66asXG4gICAgY29uc3QgaGFzU2VsZlJlZiA9IHJvd3NcbiAgICAgIC5mbGF0TWFwKChyb3cpID0+IE9iamVjdC52YWx1ZXMocm93KSlcbiAgICAgIC5zb21lKCh2YWx1ZSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSk7XG4gICAgaWYgKCFoYXNTZWxmUmVmKSByZXR1cm4geyBsZXZlbHM6IFtyb3dzXSwgaGFzQ2lyY3VsYXI6IGZhbHNlIH07XG5cbiAgICAvLyAyLiB1dWlkIOKGkiByb3cg66ek7ZWRICjspJHrs7UgdXVpZCDrsKnsp4ApXG4gICAgY29uc3Qgcm93QnlVdWlkID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgIGNvbnN0IHV1aWQgPSByb3cudXVpZCBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXV1aWQpIHRocm93IG5ldyBFcnJvcihgYnVpbGRJbnNlcnRMZXZlbHM6IHV1aWTqsIAg7JeG64qUIHJvdyAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgIHJvd0J5VXVpZC5zZXQodXVpZCwgcm93KTtcbiAgICB9XG5cbiAgICBsZXQgcGVuZGluZyA9IEFycmF5LmZyb20ocm93QnlVdWlkLnZhbHVlcygpKTtcbiAgICBjb25zdCBsZXZlbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W11bXSA9IFtdO1xuICAgIGNvbnN0IGluc2VydGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyAzLiDroIjrsqjrs4Qg67aE66WYXG4gICAgd2hpbGUgKHBlbmRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VycmVudExldmVsOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG4gICAgICBjb25zdCBuZXh0UGVuZGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwZW5kaW5nKSB7XG4gICAgICAgIC8vIOydtCByb3fqsIAg7LC47KGw7ZWY64qUIOyekOq4sCDssLjsobDrk6RcbiAgICAgICAgY29uc3Qgc2VsZlJlZnMgPSBPYmplY3QudmFsdWVzKHJvdykuZmlsdGVyKFxuICAgICAgICAgICh2YWx1ZSkgPT4gaXNSZWZGaWVsZCh2YWx1ZSkgJiYgdmFsdWUub2YgPT09IHRhYmxlTmFtZSxcbiAgICAgICAgKSBhcyBVQlJlZltdO1xuXG4gICAgICAgIC8vIOywuOyhsO2VmOuKlCDrqqjrk6AgdXVpZOqwgCDsnbTrr7ggaW5zZXJ0ZWTsl5Ag7J6I7Ja07JW8IOydtOuyiCDroIjrsqjsl5Ag7Y+s7ZWoXG4gICAgICAgIGNvbnN0IGNhbkluc2VydCA9IHNlbGZSZWZzLmV2ZXJ5KChyZWYpID0+IHtcbiAgICAgICAgICBpZiAoIXJvd0J5VXVpZC5oYXMocmVmLnV1aWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgdXVpZCAke3JlZi51dWlkfSAtLSBpbiAke3RhYmxlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluc2VydGVkLmhhcyhyZWYudXVpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjYW5JbnNlcnQpIHtcbiAgICAgICAgICBjdXJyZW50TGV2ZWwucHVzaChyb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRQZW5kaW5nLnB1c2gocm93KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDsiJztmZgg7LC47KGwIOqwkOyngFxuICAgICAgaWYgKGN1cnJlbnRMZXZlbC5sZW5ndGggPT09IDApIHJldHVybiB7IGxldmVsczogW10sIGhhc0NpcmN1bGFyOiB0cnVlIH07XG5cbiAgICAgIC8vIOugiOuyqCDtmZXsoJUgKyBpbnNlcnRlZCDqsLHsi6BcbiAgICAgIGxldmVscy5wdXNoKGN1cnJlbnRMZXZlbCk7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBjdXJyZW50TGV2ZWwpIHtcbiAgICAgICAgaW5zZXJ0ZWQuYWRkKHJvdy51dWlkIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIHBlbmRpbmcgPSBuZXh0UGVuZGluZztcbiAgICB9XG5cbiAgICByZXR1cm4geyBsZXZlbHMsIGhhc0NpcmN1bGFyOiBmYWxzZSB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsImlzQXJyYXkiLCJ1bmlxdWUiLCJFbnRpdHlNYW5hZ2VyIiwiTmFpdGUiLCJhc3NlcnREZWZpbmVkIiwiY2h1bmsiLCJub25OdWxsYWJsZSIsImJhdGNoVXBkYXRlIiwiaXNSZWZGaWVsZCIsImZpZWxkIiwidW5kZWZpbmVkIiwib2YiLCJ1dWlkIiwiVXBzZXJ0QnVpbGRlciIsInRhYmxlcyIsIk1hcCIsImdldFRhYmxlIiwidGFibGVOYW1lIiwidGFibGUiLCJnZXQiLCJ0YWJsZVNwZWMiLCJnZXRUYWJsZVNwZWMiLCJ0YWJsZURhdGEiLCJyZWZlcmVuY2VzIiwiU2V0Iiwicm93cyIsInVuaXF1ZUluZGV4ZXMiLCJ1bmlxdWVzTWFwIiwianNvbkNvbHVtbnMiLCJzZXQiLCJoYXNUYWJsZSIsImhhcyIsInJlZ2lzdGVyIiwicm93IiwidW5pcXVlS2V5cyIsIm1hcCIsInVucUluZGV4IiwidW5pcXVlS2V5QXJyYXkiLCJjb2x1bW5zIiwidW5xQ29sIiwidmFsIiwibmFtZSIsImxlbmd0aCIsImpvaW4iLCJmaWx0ZXIiLCJpc1JldXNlZCIsInVuaXF1ZUtleSIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsInJvd0tleSIsInJvd1ZhbHVlIiwidXNlIiwiYWRkIiwiaW5jbHVkZXMiLCJKU09OIiwic3RyaW5naWZ5IiwicHVzaCIsInJlc3VsdCIsInQiLCJpc1V1aWRSZXVzZWQiLCJ1cHNlcnQiLCJ3ZGIiLCJvcHRpb25zIiwidXBzZXJ0T3JJbnNlcnQiLCJpbnNlcnRPbmx5IiwibW9kZSIsIkVycm9yIiwic29tZSIsInZhbHVlIiwicmVmVGFibGVzIiwiQXJyYXkiLCJmcm9tIiwicmVkdWNlIiwiciIsInJlZmVyZW5jZSIsInZhbHVlcyIsImZpbmQiLCJyZWYiLCJleHRyYWN0RmllbGRzIiwic3BsaXQiLCJsZXZlbHMiLCJoYXNDaXJjdWxhciIsImJ1aWxkSW5zZXJ0TGV2ZWxzIiwidXVpZE1hcCIsImFsbElkcyIsImxldmVsUm93cyIsInJlc29sdmVkUm93cyIsInJlc29sdmVkIiwia2V5IiwicGFyZW50IiwidG8iLCJjaHVua1NpemUiLCJsZXZlbENodW5rcyIsInNlbGVjdEZpZWxkcyIsImRhdGFDaHVuayIsIm9yaWdpbmFsVXVpZHMiLCJkYXRhRm9yRGIiLCJyZXN0IiwicmVzdWx0Um93cyIsImluc2VydCIsImludG8iLCJyZXR1cm5pbmciLCJyb3dzV2l0aG91dElkIiwiaWQiLCJ1bmlxdWVJbmRleCIsImMiLCJjb25kaXRpb25zIiwiY29sIiwidiIsImV4aXN0aW5nUm93cyIsIndoZXJlSW4iLCJzZWxlY3QiLCJleGlzdGluZ01hcCIsImV4aXN0aW5nIiwiU3RyaW5nIiwiZXhpc3RpbmdJZCIsImNvbmZsaWN0Q29sdW1ucyIsImFsbENvbHVtbnMiLCJrZXlzIiwidXBkYXRlQ29sdW1ucyIsImluaGVyaXQiLCJpbmhlcml0Q29sdW1ucyIsImV4Y2x1ZGVkRnJvbVVwZGF0ZSIsIm1lcmdlQ29sdW1ucyIsIm9uQ29uZmxpY3QiLCJtZXJnZSIsImkiLCJwcm9wIiwiY29uc29sZSIsImVycm9yIiwicmVzb2x2ZWRWYWx1ZSIsImNsZWFuT3JwaGFucyIsImZrQ29sdW1ucyIsImZrQ29uZGl0aW9ucyIsImZrQ29sIiwiZmtWYWx1ZXMiLCJjb2x1bW4iLCJldmVyeSIsImZjIiwiZGVsZXRlUXVlcnkiLCJ3aGVyZU5vdEluIiwiZGVsZXRlZENvdW50IiwiZGVsZXRlIiwiY2xlYXIiLCJyb3dDb3VudCIsInJldHVybmVkSWRzIiwidXBkYXRlQmF0Y2giLCJ3aGVyZSIsIndoZXJlQ29sdW1ucyIsIl9yb3ciLCJfIiwiaGFzU2VsZlJlZiIsImZsYXRNYXAiLCJyb3dCeVV1aWQiLCJwZW5kaW5nIiwiaW5zZXJ0ZWQiLCJjdXJyZW50TGV2ZWwiLCJuZXh0UGVuZGluZyIsInNlbGZSZWZzIiwiY2FuSW5zZXJ0Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxVQUFVLFFBQVEsU0FBUztBQUVwQyxTQUFTQyxPQUFPLEVBQUVDLE1BQU0sUUFBUSxVQUFVO0FBQzFDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FBU0MsS0FBSyxRQUFRLG9CQUFpQjtBQUV2QyxTQUFTQyxhQUFhLEVBQUVDLEtBQUssRUFBRUMsV0FBVyxRQUFRLG9CQUFpQjtBQUNuRSxTQUFTQyxXQUFXLFFBQXdCLHFCQUFrQjtBQXdDOUQsT0FBTyxTQUFTQyxXQUFXQyxLQUFjO0lBQ3ZDLE9BQ0VBLFVBQVVDLGFBQ1ZELFVBQVUsUUFDVixBQUFDQSxPQUFpQkUsT0FBT0QsYUFDekIsQUFBQ0QsT0FBaUJHLFNBQVNGO0FBRS9CO0FBRUEsT0FBTyxNQUFNRztJQUNYQyxPQUErQjtJQUMvQixhQUFjO1FBQ1osSUFBSSxDQUFDQSxNQUFNLEdBQUcsSUFBSUM7SUFDcEI7SUFFQUMsU0FBU0MsU0FBaUIsRUFBYTtRQUNyQyxNQUFNQyxRQUFRLElBQUksQ0FBQ0osTUFBTSxDQUFDSyxHQUFHLENBQUNGO1FBQzlCLElBQUlDLE9BQU87WUFDVCxPQUFPQTtRQUNUO1FBRUEsTUFBTUUsWUFBWSxBQUFDLENBQUE7WUFDakIsSUFBSTtnQkFDRixPQUFPbEIsY0FBY21CLFlBQVksQ0FBQ0o7WUFDcEMsRUFBRSxPQUFNO2dCQUNOLE9BQU87WUFDVDtRQUNGLENBQUE7UUFFQSxNQUFNSyxZQUFZO1lBQ2hCQyxZQUFZLElBQUlDO1lBQ2hCQyxNQUFNLEVBQUU7WUFDUkMsZUFBZU4sV0FBV00saUJBQWlCLEVBQUU7WUFDN0NDLFlBQVksSUFBSVo7WUFDaEJhLGFBQWFS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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,EAChG,MAAM,CACP,CAAC;AACF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/entity/entity-manager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAoB,MAAM,gBAAgB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CACpC,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,OAAO,GAAG,UAAU,EAChG,MAAM,CACP,CAAC;AACF,KAAK,SAAS,GAAG;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AACF,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAkC;IAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACpD,OAAO,CAAC,UAAU,CAAqC;IAChD,YAAY,EAAE,OAAO,CAAS;IAG/B,QAAQ,CAAC,CAAC,GAAE,OAAe;IA+BjC,cAAc,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKtB,MAAM,CAAC,QAAQ,GAAE,OAAe;IAShC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAS7B,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IASjC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKjC,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe,IAAI,MAAM,EAAE;IAO3B,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAO1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpD,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASlC,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS;IASpC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAmBnD;;;;OAIG;IACH,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;CAKpD;AAED,eAAO,MAAM,aAAa,oBAA2B,CAAC"}
|
|
@@ -134,4 +134,4 @@ class EntityManagerClass {
|
|
|
134
134
|
}
|
|
135
135
|
export const EntityManager = new EntityManagerClass();
|
|
136
136
|
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5SnNvbiwgRW50aXR5SnNvblNjaGVtYSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5XCI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkID0gUmVjb3JkPFxuICBcImZzXCIgfCBcImZzUGx1cmFsXCIgfCBcImNhbWVsXCIgfCBcImNhbWVsUGx1cmFsXCIgfCBcImNhcGl0YWxcIiB8IFwiY2FwaXRhbFBsdXJhbFwiIHwgXCJ1cHBlclwiIHwgXCJjb25zdGFudFwiLFxuICBzdHJpbmdcbj47XG50eXBlIFRhYmxlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xufTtcbmNsYXNzIEVudGl0eU1hbmFnZXJDbGFzcyB7XG4gIHByaXZhdGUgZW50aXRpZXM6IE1hcDxzdHJpbmcsIEVudGl0eT4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBtb2R1bGVQYXRoczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSB0YWJsZVNwZWNzOiBNYXA8c3RyaW5nLCBUYWJsZVNwZWM+ID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgaXNBdXRvbG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g6rK966GcIOyghOuLrOuwm+yVhCDrqqjrk6AgZW50aXR5Lmpzb24g7YyM7J28IOuhnOuTnFxuICBhc3luYyBhdXRvbG9hZChfOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0F1dG9sb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF0aFBhdHRlcm4gPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcIi9zcmMvYXBwbGljYXRpb24vKiovKi5lbnRpdHkuanNvblwiKTtcblxuICAgIGZvciBhd2FpdCAoY29uc3QgZmlsZSBvZiBnbG9iKHBhdGgucmVzb2x2ZShwYXRoUGF0dGVybikpKSB7XG4gICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZSgoYXdhaXQgcmVhZEZpbGUoZmlsZSkpLnRvU3RyaW5nKCkpO1xuXG4gICAgICAvLyBlbnRpdHkuanNvbiDsiqTtgqTrp4gg6rKA7KadXG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuc2NoZW1hVmFsaWRhdGUoanNvbik7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGZpbGUpO1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBwcmV0dGlmeUVycm9yKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBjaGFsay5yZWQoYEludmFsaWQgZW50aXR5Lmpzb24gc2NoZW1hOiAke3JlbGF0aXZlUGF0aH1cXG4ke2NoYWxrLnllbGxvdyhlcnJvck1lc3NhZ2UpfWApLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLnJlZ2lzdGVyKGpzb24pO1xuICAgIH1cbiAgICAvLyAhZG9TaWxlbnQgJiZcbiAgICAvLyAgIGNvbnNvbGUubG9nKFxuICAgIC8vICAgICBjaGFsay5ncmF5KFxuICAgIC8vICAgICAgIGBbTG9hZGluZ10gTG9hZGVkIGVudGl0eSBkZWZpbml0aW9ucyBmcm9tIFwiKi5lbnRpdHkuanNvblwiIGZpbGVzOiAke2NvdW50fSBmaWxlcy5gXG4gICAgLy8gICAgIClcbiAgICAvLyAgICk7XG5cbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBzY2hlbWFWYWxpZGF0ZShqc29uOiB1bmtub3duKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gRW50aXR5SnNvblNjaGVtYS5zYWZlUGFyc2UoanNvbik7XG4gICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzID8gbnVsbCA6IHJlc3VsdC5lcnJvcjtcbiAgfVxuXG4gIGFzeW5jIHJlbG9hZChkb1NpbGVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5lbnRpdGllcy5jbGVhcigpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuY2xlYXIoKTtcbiAgICB0aGlzLnRhYmxlU3BlY3MuY2xlYXIoKTtcbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXV0b2xvYWQoZG9TaWxlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXIoanNvbjogRW50aXR5SnNvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVudGl0eSA9IG5ldyBFbnRpdHkoanNvbik7XG4gICAgYXdhaXQgZW50aXR5LnJlZ2lzdGVyTW9kdWxlUGF0aHMoKTtcbiAgICBlbnRpdHkucmVnaXN0ZXJUYWJsZVNwZWNzKCk7XG4gICAgdGhpcy5lbnRpdGllcy5zZXQoanNvbi5pZCwgZW50aXR5KTtcbiAgfVxuXG4gIGdldChlbnRpdHlJZDogc3RyaW5nKTogRW50aXR5IHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgRW50aXR5IOyalOyyrSAke2VudGl0eUlkfWApO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBnZXRCeVRhYmxlKHRhYmxlOiBzdHJpbmcpOiBFbnRpdHkge1xuICAgIGNvbnN0IGVudGl0eSA9IEFycmF5LmZyb20odGhpcy5lbnRpdGllcy52YWx1ZXMoKSkuZmluZCgoZW50aXR5KSA9PiBlbnRpdHkudGFibGUgPT09IHRhYmxlKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHkg7JqU7LKtICR7dGFibGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGV4aXN0cyhlbnRpdHlJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZW50aXR5ID0gdGhpcy5lbnRpdGllcy5nZXQoZW50aXR5SWQpO1xuICAgIHJldHVybiBlbnRpdHkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEFsbElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oRW50aXR5TWFuYWdlci5lbnRpdGllcy5rZXlzKCkpLnNvcnQoKTtcbiAgfVxuXG4gIGdldEFsbFBhcmVudElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsSWRzKCkuZmlsdGVyKChlbnRpdHlJZCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5nZXQoZW50aXR5SWQpO1xuICAgICAgcmV0dXJuIGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW5JZHMocGFyZW50SWQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSBwYXJlbnRJZDtcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1vZHVsZVBhdGgoa2V5OiBzdHJpbmcsIG1vZHVsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoY2hhbGsuY3lhbihgc2V0TW9kdWxlUGF0aCA6OiAke2tleX0gOjogJHttb2R1bGVQYXRofWApKTtcbiAgICB0aGlzLm1vZHVsZVBhdGhzLnNldChrZXksIG1vZHVsZVBhdGgpO1xuICB9XG5cbiAgZ2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IHRoaXMubW9kdWxlUGF0aHMuZ2V0KGtleSk7XG4gICAgaWYgKG1vZHVsZVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIOuqqOuTiCDtjKjsiqQg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVQYXRoO1xuICB9XG5cbiAgc2V0VGFibGVTcGVjKHRhYmxlU3BlYzogVGFibGVTcGVjKSB7XG4gICAgdGhpcy50YWJsZVNwZWNzLnNldCh0YWJsZVNwZWMubmFtZSwgdGFibGVTcGVjKTtcbiAgfVxuXG4gIGdldFRhYmxlU3BlYyhrZXk6IHN0cmluZyk6IFRhYmxlU3BlYyB7XG4gICAgY29uc3QgdGFibGVTcGVjID0gdGhpcy50YWJsZVNwZWNzLmdldChrZXkpO1xuICAgIGlmICh0YWJsZVNwZWMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIO2FjOydtOu4lCDsiqTtjpkg7JqU7LKtICR7a2V5fWApO1xuICAgIH1cblxuICAgIHJldHVybiB0YWJsZVNwZWM7XG4gIH1cblxuICBnZXROYW1lc0Zyb21JZChlbnRpdHlJZDogc3RyaW5nKTogRW50aXR5TmFtZXNSZWNvcmQge1xuICAgIC8vIGVudGl0eUlk6rCAIOuLqOuzteyImCDrj5ntmJUg64uo7Ja07J24IOqyveyasCBMaXN0IOu2meyXrOyEnCDsg53shLFcbiAgICBjb25zdCBwbHVyYWxpemVkID1cbiAgICAgIGluZmxlY3Rpb24ucGx1cmFsaXplKGVudGl0eUlkKSA9PT0gZW50aXR5SWRcbiAgICAgICAgPyBgJHtlbnRpdHlJZH1MaXN0YFxuICAgICAgICA6IGluZmxlY3Rpb24ucGx1cmFsaXplKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBmczogaW5mbGVjdGlvbi5kYXNoZXJpemUoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGZzUGx1cmFsOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGx1cmFsaXplZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBjYW1lbDogaW5mbGVjdGlvbi5jYW1lbGl6ZShlbnRpdHlJZCwgdHJ1ZSksXG4gICAgICBjYW1lbFBsdXJhbDogaW5mbGVjdGlvbi5jYW1lbGl6ZShwbHVyYWxpemVkLCB0cnVlKSxcbiAgICAgIGNhcGl0YWw6IGVudGl0eUlkLFxuICAgICAgY2FwaXRhbFBsdXJhbDogcGx1cmFsaXplZCxcbiAgICAgIHVwcGVyOiBlbnRpdHlJZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgY29uc3RhbnQ6IGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHlJZCkudG9VcHBlckNhc2UoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVudGl0eUlk64qUIE1vZGVs7J2EIOygnOyZuO2VnCBQYXNjYWxDYXNlIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJcIilcbiAgICogQHBhcmFtIGZpbGVQYXRoXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRFbnRpdHlJZEZyb21QYXRoKGZpbGVQYXRoOiBBYnNvbHV0ZVBhdGgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hdGNoZWQgPSBmaWxlUGF0aC5tYXRjaCgvYXBwbGljYXRpb25cXC8oLispXFwvLyk7XG4gICAgYXNzZXJ0KG1hdGNoZWQ/LlsxXSk7XG4gICAgcmV0dXJuIGluZmxlY3Rpb24uY2FtZWxpemUobWF0Y2hlZFsxXS5yZXBsYWNlKC8tL2csIFwiX1wiKSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudGl0eU1hbmFnZXIgPSBuZXcgRW50aXR5TWFuYWdlckNsYXNzKCk7XG4iXSwibmFtZXMiOlsiYXNzZXJ0IiwiY2hhbGsiLCJnbG9iIiwicmVhZEZpbGUiLCJpbmZsZWN0aW9uIiwicGF0aCIsInByZXR0aWZ5RXJyb3IiLCJTb25hbXUiLCJFbnRpdHlKc29uU2NoZW1hIiwiRW50aXR5IiwiRW50aXR5TWFuYWdlckNsYXNzIiwiZW50aXRpZXMiLCJNYXAiLCJtb2R1bGVQYXRocyIsInRhYmxlU3BlY3MiLCJpc0F1dG9sb2FkZWQiLCJhdXRvbG9hZCIsIl8iLCJwYXRoUGF0dGVybiIsImpvaW4iLCJhcGlSb290UGF0aCIsImZpbGUiLCJyZXNvbHZlIiwianNvbiIsIkpTT04iLCJwYXJzZSIsInRvU3RyaW5nIiwiZXJyb3IiLCJzY2hlbWFWYWxpZGF0ZSIsInJlbGF0aXZlUGF0aCIsInJlbGF0aXZlIiwiZXJyb3JNZXNzYWdlIiwiY29uc29sZSIsInJlZCIsInllbGxvdyIsInJlZ2lzdGVyIiwicmVzdWx0Iiwic2FmZVBhcnNlIiwic3VjY2VzcyIsInJlbG9hZCIsImRvU2lsZW50IiwiY2xlYXIiLCJlbnRpdHkiLCJyZWdpc3Rlck1vZHVsZVBhdGhzIiwicmVnaXN0ZXJUYWJsZVNwZWNzIiwic2V0IiwiaWQiLCJnZXQiLCJlbnRpdHlJZCIsInVuZGVmaW5lZCIsIkVycm9yIiwiZ2V0QnlUYWJsZSIsInRhYmxlIiwiQXJyYXkiLCJmcm9tIiwidmFsdWVzIiwiZmluZCIsImV4aXN0cyIsImdldEFsbElkcyIsIkVudGl0eU1hbmFnZXIiLCJrZXlzIiwic29ydCIsImdldEFsbFBhcmVudElkcyIsImZpbHRlciIsInBhcmVudElkIiwiZ2V0Q2hpbGRyZW5JZHMiLCJzZXRNb2R1bGVQYXRoIiwia2V5IiwibW9kdWxlUGF0aCIsImdldE1vZHVsZVBhdGgiLCJzZXRUYWJsZVNwZWMiLCJ0YWJsZVNwZWMiLCJuYW1lIiwiZ2V0VGFibGVTcGVjIiwiZ2V0TmFtZXNGcm9tSWQiLCJwbHVyYWxpemVkIiwicGx1cmFsaXplIiwiZnMiLCJkYXNoZXJpemUiLCJ1bmRlcnNjb3JlIiwidG9Mb3dlckNhc2UiLCJmc1BsdXJhbCIsImNhbWVsIiwiY2FtZWxpemUiLCJjYW1lbFBsdXJhbCIsImNhcGl0YWwiLCJjYXBpdGFsUGx1cmFsIiwidXBwZXIiLCJ0b1VwcGVyQ2FzZSIsImNvbnN0YW50IiwiZ2V0RW50aXR5SWRGcm9tUGF0aCIsImZpbGVQYXRoIiwibWF0Y2hlZCIsIm1hdGNoIiwicmVwbGFjZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxtQkFBYztBQUM3QyxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsYUFBYSxRQUFRLE1BQU07QUFDcEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUE0Q0MsZ0JBQWdCLFFBQVEsb0JBQWlCO0FBRXJGLFNBQVNDLE1BQU0sUUFBUSxjQUFXO0FBVWxDLE1BQU1DO0lBQ0lDLFdBQWdDLElBQUlDLE1BQU07SUFDM0NDLGNBQW1DLElBQUlELE1BQU07SUFDNUNFLGFBQXFDLElBQUlGLE1BQU07SUFDaERHLGVBQXdCLE1BQU07SUFFckMsK0JBQStCO0lBQy9CLE1BQU1DLFNBQVNDLElBQWEsS0FBSyxFQUFFO1FBQ2pDLElBQUksSUFBSSxDQUFDRixZQUFZLEVBQUU7WUFDckI7UUFDRjtRQUNB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
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LW1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBnbG9iLCByZWFkRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwcmV0dGlmeUVycm9yIH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5SnNvbiwgRW50aXR5SnNvblNjaGVtYSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBYnNvbHV0ZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5XCI7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkID0gUmVjb3JkPFxuICBcImZzXCIgfCBcImZzUGx1cmFsXCIgfCBcImNhbWVsXCIgfCBcImNhbWVsUGx1cmFsXCIgfCBcImNhcGl0YWxcIiB8IFwiY2FwaXRhbFBsdXJhbFwiIHwgXCJ1cHBlclwiIHwgXCJjb25zdGFudFwiLFxuICBzdHJpbmdcbj47XG50eXBlIFRhYmxlU3BlYyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB1bmlxdWVJbmRleGVzOiBFbnRpdHlJbmRleFtdO1xuICBqc29uQ29sdW1uczogc3RyaW5nW107XG59O1xuY2xhc3MgRW50aXR5TWFuYWdlckNsYXNzIHtcbiAgcHJpdmF0ZSBlbnRpdGllczogTWFwPHN0cmluZywgRW50aXR5PiA9IG5ldyBNYXAoKTtcbiAgcHVibGljIG1vZHVsZVBhdGhzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIHRhYmxlU3BlY3M6IE1hcDxzdHJpbmcsIFRhYmxlU3BlYz4gPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBpc0F1dG9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDqsr3roZwg7KCE64us67Cb7JWEIOuqqOuToCBlbnRpdHkuanNvbiDtjIzsnbwg66Gc65OcXG4gIGFzeW5jIGF1dG9sb2FkKF86IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwYXRoUGF0dGVybiA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwiL3NyYy9hcHBsaWNhdGlvbi8qKi8qLmVudGl0eS5qc29uXCIpO1xuXG4gICAgZm9yIGF3YWl0IChjb25zdCBmaWxlIG9mIGdsb2IocGF0aC5yZXNvbHZlKHBhdGhQYXR0ZXJuKSkpIHtcbiAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKChhd2FpdCByZWFkRmlsZShmaWxlKSkudG9TdHJpbmcoKSk7XG5cbiAgICAgIC8vIGVudGl0eS5qc29uIOyKpO2CpOuniCDqsoDspp1cbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5zY2hlbWFWYWxpZGF0ZShqc29uKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgZmlsZSk7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHByZXR0aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGNoYWxrLnJlZChgSW52YWxpZCBlbnRpdHkuanNvbiBzY2hlbWE6ICR7cmVsYXRpdmVQYXRofVxcbiR7Y2hhbGsueWVsbG93KGVycm9yTWVzc2FnZSl9YCksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucmVnaXN0ZXIoanNvbik7XG4gICAgfVxuICAgIC8vICFkb1NpbGVudCAmJlxuICAgIC8vICAgY29uc29sZS5sb2coXG4gICAgLy8gICAgIGNoYWxrLmdyYXkoXG4gICAgLy8gICAgICAgYFtMb2FkaW5nXSBMb2FkZWQgZW50aXR5IGRlZmluaXRpb25zIGZyb20gXCIqLmVudGl0eS5qc29uXCIgZmlsZXM6ICR7Y291bnR9IGZpbGVzLmBcbiAgICAvLyAgICAgKVxuICAgIC8vICAgKTtcblxuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHNjaGVtYVZhbGlkYXRlKGpzb246IHVua25vd24pIHtcbiAgICBjb25zdCByZXN1bHQgPSBFbnRpdHlKc29uU2NoZW1hLnNhZmVQYXJzZShqc29uKTtcbiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3MgPyBudWxsIDogcmVzdWx0LmVycm9yO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKGRvU2lsZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLmVudGl0aWVzLmNsZWFyKCk7XG4gICAgdGhpcy5tb2R1bGVQYXRocy5jbGVhcigpO1xuICAgIHRoaXMudGFibGVTcGVjcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hdXRvbG9hZChkb1NpbGVudCk7XG4gIH1cblxuICBhc3luYyByZWdpc3Rlcihqc29uOiBFbnRpdHlKc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW50aXR5ID0gbmV3IEVudGl0eShqc29uKTtcbiAgICBhd2FpdCBlbnRpdHkucmVnaXN0ZXJNb2R1bGVQYXRocygpO1xuICAgIGVudGl0eS5yZWdpc3RlclRhYmxlU3BlY3MoKTtcbiAgICB0aGlzLmVudGl0aWVzLnNldChqc29uLmlkLCBlbnRpdHkpO1xuICB9XG5cbiAgZ2V0KGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHkge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZW50aXRpZXMuZ2V0KGVudGl0eUlkKTtcbiAgICBpZiAoZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCBFbnRpdHkg7JqU7LKtICR7ZW50aXR5SWR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGdldEJ5VGFibGUodGFibGU6IHN0cmluZyk6IEVudGl0eSB7XG4gICAgY29uc3QgZW50aXR5ID0gQXJyYXkuZnJvbSh0aGlzLmVudGl0aWVzLnZhbHVlcygpKS5maW5kKChlbnRpdHkpID0+IGVudGl0eS50YWJsZSA9PT0gdGFibGUpO1xuICAgIGlmIChlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eSDsmpTssq0gJHt0YWJsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50aXR5O1xuICB9XG5cbiAgZXhpc3RzKGVudGl0eUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmVudGl0aWVzLmdldChlbnRpdHlJZCk7XG4gICAgcmV0dXJuIGVudGl0eSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0QWxsSWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShFbnRpdHlNYW5hZ2VyLmVudGl0aWVzLmtleXMoKSkuc29ydCgpO1xuICB9XG5cbiAgZ2V0QWxsUGFyZW50SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxJZHMoKS5maWx0ZXIoKGVudGl0eUlkKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmdldChlbnRpdHlJZCk7XG4gICAgICByZXR1cm4gZW50aXR5LnBhcmVudElkID09PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDaGlsZHJlbklkcyhwYXJlbnRJZDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbElkcygpLmZpbHRlcigoZW50aXR5SWQpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZ2V0KGVudGl0eUlkKTtcbiAgICAgIHJldHVybiBlbnRpdHkucGFyZW50SWQgPT09IHBhcmVudElkO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TW9kdWxlUGF0aChrZXk6IHN0cmluZywgbW9kdWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhjaGFsay5jeWFuKGBzZXRNb2R1bGVQYXRoIDo6ICR7a2V5fSA6OiAke21vZHVsZVBhdGh9YCkpO1xuICAgIHRoaXMubW9kdWxlUGF0aHMuc2V0KGtleSwgbW9kdWxlUGF0aCk7XG4gIH1cblxuICBnZXRNb2R1bGVQYXRoKGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb2R1bGVQYXRoID0gdGhpcy5tb2R1bGVQYXRocy5nZXQoa2V5KTtcbiAgICBpZiAobW9kdWxlUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg66qo65OIIO2MqOyKpCDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVBhdGg7XG4gIH1cblxuICBzZXRUYWJsZVNwZWModGFibGVTcGVjOiBUYWJsZVNwZWMpIHtcbiAgICB0aGlzLnRhYmxlU3BlY3Muc2V0KHRhYmxlU3BlYy5uYW1lLCB0YWJsZVNwZWMpO1xuICB9XG5cbiAgZ2V0VGFibGVTcGVjKGtleTogc3RyaW5nKTogVGFibGVTcGVjIHtcbiAgICBjb25zdCB0YWJsZVNwZWMgPSB0aGlzLnRhYmxlU3BlY3MuZ2V0KGtleSk7XG4gICAgaWYgKHRhYmxlU3BlYyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQg7YWM7J2067iUIOyKpO2OmSDsmpTssq0gJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhYmxlU3BlYztcbiAgfVxuXG4gIGdldE5hbWVzRnJvbUlkKGVudGl0eUlkOiBzdHJpbmcpOiBFbnRpdHlOYW1lc1JlY29yZCB7XG4gICAgLy8gZW50aXR5SWTqsIAg64uo67O17IiYIOuPme2YlSDri6jslrTsnbgg6rK97JqwIExpc3Qg67aZ7Jes7IScIOyDneyEsVxuICAgIGNvbnN0IHBsdXJhbGl6ZWQgPVxuICAgICAgaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpID09PSBlbnRpdHlJZFxuICAgICAgICA/IGAke2VudGl0eUlkfUxpc3RgXG4gICAgICAgIDogaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnNQbHVyYWw6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShwbHVyYWxpemVkKSkudG9Mb3dlckNhc2UoKSxcbiAgICAgIGNhbWVsOiBpbmZsZWN0aW9uLmNhbWVsaXplKGVudGl0eUlkLCB0cnVlKSxcbiAgICAgIGNhbWVsUGx1cmFsOiBpbmZsZWN0aW9uLmNhbWVsaXplKHBsdXJhbGl6ZWQsIHRydWUpLFxuICAgICAgY2FwaXRhbDogZW50aXR5SWQsXG4gICAgICBjYXBpdGFsUGx1cmFsOiBwbHVyYWxpemVkLFxuICAgICAgdXBwZXI6IGVudGl0eUlkLnRvVXBwZXJDYXNlKCksXG4gICAgICBjb25zdGFudDogaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eUlkKS50b1VwcGVyQ2FzZSgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW50aXR5SWTripQgTW9kZWzsnYQg7KCc7Jm47ZWcIFBhc2NhbENhc2Ug7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlclwiKVxuICAgKiBAcGFyYW0gZmlsZVBhdGhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEVudGl0eUlkRnJvbVBhdGgoZmlsZVBhdGg6IEFic29sdXRlUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlZCA9IGZpbGVQYXRoLm1hdGNoKC9hcHBsaWNhdGlvblxcLyguKylcXC8vKTtcbiAgICBhc3NlcnQobWF0Y2hlZD8uWzFdKTtcbiAgICByZXR1cm4gaW5mbGVjdGlvbi5jYW1lbGl6ZShtYXRjaGVkWzFdLnJlcGxhY2UoLy0vZywgXCJfXCIpKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRW50aXR5TWFuYWdlciA9IG5ldyBFbnRpdHlNYW5hZ2VyQ2xhc3MoKTtcbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJjaGFsayIsImdsb2IiLCJyZWFkRmlsZSIsImluZmxlY3Rpb24iLCJwYXRoIiwicHJldHRpZnlFcnJvciIsIlNvbmFtdSIsIkVudGl0eUpzb25TY2hlbWEiLCJFbnRpdHkiLCJFbnRpdHlNYW5hZ2VyQ2xhc3MiLCJlbnRpdGllcyIsIk1hcCIsIm1vZHVsZVBhdGhzIiwidGFibGVTcGVjcyIsImlzQXV0b2xvYWRlZCIsImF1dG9sb2FkIiwiXyIsInBhdGhQYXR0ZXJuIiwiam9pbiIsImFwaVJvb3RQYXRoIiwiZmlsZSIsInJlc29sdmUiLCJqc29uIiwiSlNPTiIsInBhcnNlIiwidG9TdHJpbmciLCJlcnJvciIsInNjaGVtYVZhbGlkYXRlIiwicmVsYXRpdmVQYXRoIiwicmVsYXRpdmUiLCJlcnJvck1lc3NhZ2UiLCJjb25zb2xlIiwicmVkIiwieWVsbG93IiwicmVnaXN0ZXIiLCJyZXN1bHQiLCJzYWZlUGFyc2UiLCJzdWNjZXNzIiwicmVsb2FkIiwiZG9TaWxlbnQiLCJjbGVhciIsImVudGl0eSIsInJlZ2lzdGVyTW9kdWxlUGF0aHMiLCJyZWdpc3RlclRhYmxlU3BlY3MiLCJzZXQiLCJpZCIsImdldCIsImVudGl0eUlkIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJnZXRCeVRhYmxlIiwidGFibGUiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJmaW5kIiwiZXhpc3RzIiwiZ2V0QWxsSWRzIiwiRW50aXR5TWFuYWdlciIsImtleXMiLCJzb3J0IiwiZ2V0QWxsUGFyZW50SWRzIiwiZmlsdGVyIiwicGFyZW50SWQiLCJnZXRDaGlsZHJlbklkcyIsInNldE1vZHVsZVBhdGgiLCJrZXkiLCJtb2R1bGVQYXRoIiwiZ2V0TW9kdWxlUGF0aCIsInNldFRhYmxlU3BlYyIsInRhYmxlU3BlYyIsIm5hbWUiLCJnZXRUYWJsZVNwZWMiLCJnZXROYW1lc0Zyb21JZCIsInBsdXJhbGl6ZWQiLCJwbHVyYWxpemUiLCJmcyIsImRhc2hlcml6ZSIsInVuZGVyc2NvcmUiLCJ0b0xvd2VyQ2FzZSIsImZzUGx1cmFsIiwiY2FtZWwiLCJjYW1lbGl6ZSIsImNhbWVsUGx1cmFsIiwiY2FwaXRhbCIsImNhcGl0YWxQbHVyYWwiLCJ1cHBlciIsInRvVXBwZXJDYXNlIiwiY29uc3RhbnQiLCJnZXRFbnRpdHlJZEZyb21QYXRoIiwiZmlsZVBhdGgiLCJtYXRjaGVkIiwibWF0Y2giLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxZQUFZLFNBQVM7QUFDNUIsT0FBT0MsV0FBVyxRQUFRO0FBQzFCLFNBQVNDLElBQUksRUFBRUMsUUFBUSxRQUFRLG1CQUFjO0FBQzdDLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BDLE9BQU9DLFVBQVUsT0FBTztBQUN4QixTQUFTQyxhQUFhLFFBQVEsTUFBTTtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsbUJBQWdCO0FBQ3ZDLFNBQTRDQyxnQkFBZ0IsUUFBUSxvQkFBaUI7QUFFckYsU0FBU0MsTUFBTSxRQUFRLGNBQVc7QUFXbEMsTUFBTUM7SUFDSUMsV0FBZ0MsSUFBSUMsTUFBTTtJQUMzQ0MsY0FBbUMsSUFBSUQsTUFBTTtJQUM1Q0UsYUFBcUMsSUFBSUYsTUFBTTtJQUNoREcsZUFBd0IsTUFBTTtJQUVyQywrQkFBK0I7SUFDL0IsTUFBTUMsU0FBU0MsSUFBYSxLQUFLLEVBQUU7UUFDakMsSUFBSSxJQUFJLENBQUNG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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EAWpB,KAAK,YAAY,EAEjB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAQxB,qBAAa,MAAM;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;KAC3B,CAAC;IACF,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE;QACP,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,eAAe,EAAE;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,KAAK,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;KAC9B,CAAM;IACP,KAAK,EAAE;QACL,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/D,CAAM;IACP,UAAU,EAAE;QACV,CAAC,MAAM,EAAE,MAAM,GAAG;YAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACvB,CAAC;KACH,CAAM;gBAEK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU;IA4DtF;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpD;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAiC7C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IAiD/B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,2BAA2B;IA8BnC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IA2G7C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;IAS9C,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,oBAAoB,GAAE,OAAe,GACpC,WAAW;IA+Md,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAa,GAAG,cAAc,EAAE;IA8EpF,aAAa,CAAC,MAAM,SAAK,EAAE,QAAQ,GAAE,MAAU,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE;IAwBhF,eAAe,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;IAkBnD;;OAEG;IACH,gBAAgB,IAAI,UAAU,EAAE;IAIhC;;;OAGG;IACH,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAQtD,mBAAmB;IAyCzB,kBAAkB,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity/entity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EAWpB,KAAK,YAAY,EAEjB,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAQxB,qBAAa,MAAM;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;KAC3B,CAAC;IACF,SAAS,EAAE;QACT,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;KAC7B,CAAC;IACF,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE;QACP,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,eAAe,EAAE;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,KAAK,EAAE;QACL,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC;KAC9B,CAAM;IACP,KAAK,EAAE;QACL,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/D,CAAM;IACP,UAAU,EAAE;QACV,CAAC,MAAM,EAAE,MAAM,GAAG;YAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACvB,CAAC;KACH,CAAM;gBAEK,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU;IA4DtF;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAIpD;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAiC7C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IAiD/B;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,2BAA2B;IA8BnC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IA2G7C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW;IAS9C,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EAAE,EAChB,oBAAoB,GAAE,OAAe,GACpC,WAAW;IA+Md,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAa,GAAG,cAAc,EAAE;IA8EpF,aAAa,CAAC,MAAM,SAAK,EAAE,QAAQ,GAAE,MAAU,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE;IAwBhF,eAAe,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;IAkBnD;;OAEG;IACH,gBAAgB,IAAI,UAAU,EAAE;IAIhC;;;OAGG;IACH,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAQtD,mBAAmB;IAyCzB,kBAAkB,IAAI,IAAI;IAa1B,MAAM,IAAI,UAAU;IAwBd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B,aAAa,CACX,QAAQ,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,EACtC,gBAAgB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,EAC9C,QAAQ,GAAE,MAAM,EAAO,GACtB,eAAe,EAAE;IAuEpB,wBAAwB,CACtB,UAAU,EAAE,eAAe,EAAE,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,OAAe,GACxB,MAAM,EAAE;IAgBL,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9D,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE;IA0BG,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C1D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4CxC,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAoBjD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAStD"}
|
package/dist/entity/entity.js
CHANGED
|
@@ -606,7 +606,8 @@ export class Entity {
|
|
|
606
606
|
const uniqueIndexes = this.indexes.filter((idx)=>idx.type === "unique").filter((idx)=>idx.columns.every((col)=>!col.name.includes(".")));
|
|
607
607
|
EntityManager.setTableSpec({
|
|
608
608
|
name: this.table,
|
|
609
|
-
uniqueIndexes
|
|
609
|
+
uniqueIndexes,
|
|
610
|
+
jsonColumns: this.props.filter((p)=>p.type === "json").map((p)=>p.name)
|
|
610
611
|
});
|
|
611
612
|
}
|
|
612
613
|
toJson() {
|
|
@@ -880,4 +881,4 @@ export class Entity {
|
|
|
880
881
|
}
|
|
881
882
|
}
|
|
882
883
|
|
|
883
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGdyb3VwLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eUpzb24sXG4gIHR5cGUgRW50aXR5UHJvcCxcbiAgdHlwZSBFbnRpdHlQcm9wTm9kZSxcbiAgdHlwZSBFbnRpdHlTdWJzZXRSb3csXG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0VudW1Qcm9wLFxuICBpc0hhc01hbnlSZWxhdGlvblByb3AsXG4gIGlzSW50ZXJuYWxTdWJzZXRGaWVsZCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNWaXJ0dWFsQ29kZVByb3AsXG4gIGlzVmlydHVhbFByb3AsXG4gIG5vcm1hbGl6ZVN1YnNldEZpZWxkLFxuICB0eXBlIFJlbGF0aW9uUHJvcCxcbiAgdHlwZSBTdWJzZXRGaWVsZCxcbiAgdHlwZSBTdWJzZXRRdWVyeSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCwgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi9lbnRpdHktbWFuYWdlclwiO1xuXG5leHBvcnQgY2xhc3MgRW50aXR5IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG5hbWVzOiB7XG4gICAgcGFyZW50RnM6IHN0cmluZztcbiAgICBmczogc3RyaW5nO1xuICAgIG1vZHVsZTogc3RyaW5nO1xuICB9O1xuICBwcm9wczogRW50aXR5UHJvcFtdO1xuICBwcm9wc0RpY3Q6IHtcbiAgICBba2V5OiBzdHJpbmddOiBFbnRpdHlQcm9wO1xuICB9O1xuICByZWxhdGlvbnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBSZWxhdGlvblByb3A7XG4gIH07XG4gIGluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIHN1YnNldHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgfTtcbiAgc3Vic2V0c0ludGVybmFsOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gIH07XG4gIHR5cGVzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IHouWm9kVHlwZUFueTtcbiAgfSA9IHt9O1xuICBlbnVtczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IHouWm9kRW51bTxSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj47XG4gIH0gPSB7fTtcbiAgZW51bUxhYmVsczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoeyBpZCwgcGFyZW50SWQsIHRhYmxlLCB0aXRsZSwgcHJvcHMsIGluZGV4ZXMsIHN1YnNldHMsIGVudW1zIH06IEVudGl0eUpzb24pIHtcbiAgICAvLyBpZFxuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgdGhpcy50aXRsZSA9IHRpdGxlID8/IHRoaXMuaWQ7XG4gICAgdGhpcy50YWJsZSA9IHRhYmxlID8/IGluZmxlY3Rpb24udW5kZXJzY29yZShpbmZsZWN0aW9uLnBsdXJhbGl6ZShpZCkpO1xuXG4gICAgLy8gcHJvcHNcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgaWYgKGlzRW51bVByb3AocHJvcCkpIHtcbiAgICAgICAgICBpZiAocHJvcC5pZC5pbmNsdWRlcyhcIiRNb2RlbFwiKSkge1xuICAgICAgICAgICAgcHJvcC5pZCA9IHByb3AuaWQucmVwbGFjZShcIiRNb2RlbFwiLCBpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3BzRGljdCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgcHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtwcm9wLm5hbWUsIHByb3BdO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIHJlbGF0aW9uc1xuICAgICAgdGhpcy5yZWxhdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHByb3BzLmZpbHRlcigocHJvcCkgPT4gaXNSZWxhdGlvblByb3AocHJvcCkpLm1hcCgocHJvcCkgPT4gW3Byb3AubmFtZSwgcHJvcF0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcyA9IFtdO1xuICAgICAgdGhpcy5wcm9wc0RpY3QgPSB7fTtcbiAgICAgIHRoaXMucmVsYXRpb25zID0ge307XG4gICAgfVxuXG4gICAgLy8gaW5kZXhlc1xuICAgIHRoaXMuaW5kZXhlcyA9IGluZGV4ZXMgPz8gW107XG5cbiAgICAvLyBzdWJzZXRzOiBTdWJzZXRGaWVsZFtd66W8IO2MjOyLse2VmOyXrCBzdWJzZXRzKOydvOuwmCnsmYAgc3Vic2V0c0ludGVybmFsKGludGVybmFsKeuhnCDrtoTrpqxcbiAgICB0aGlzLnN1YnNldHMgPSB7fTtcbiAgICB0aGlzLnN1YnNldHNJbnRlcm5hbCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRzXSBvZiBPYmplY3QuZW50cmllcyhzdWJzZXRzID8/IHt9KSkge1xuICAgICAgdGhpcy5zdWJzZXRzW2tleV0gPSBmaWVsZHMuZmlsdGVyKChmKSA9PiAhaXNJbnRlcm5hbFN1YnNldEZpZWxkKGYpKS5tYXAobm9ybWFsaXplU3Vic2V0RmllbGQpO1xuICAgICAgdGhpcy5zdWJzZXRzSW50ZXJuYWxba2V5XSA9IGZpZWxkcy5maWx0ZXIoaXNJbnRlcm5hbFN1YnNldEZpZWxkKS5tYXAobm9ybWFsaXplU3Vic2V0RmllbGQpO1xuICAgIH1cblxuICAgIC8vIGVudW1zXG4gICAgdGhpcy5lbnVtTGFiZWxzID0gZW51bXMgPz8ge307XG4gICAgdGhpcy5lbnVtcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZW51bUxhYmVscykubWFwKChba2V5LCBlbnVtTGFiZWxdKSA9PiB7XG4gICAgICAgIHJldHVybiBba2V5LCB6LmVudW0oT2JqZWN0LmtleXMoZW51bUxhYmVsKSBhcyB1bmtub3duIGFzIHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSldO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIG5hbWVzXG4gICAgdGhpcy5uYW1lcyA9IHtcbiAgICAgIHBhcmVudEZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGFyZW50SWQgPz8gaWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnM6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShpZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBtb2R1bGU6IGlkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7L+866as7JqpIOyEnOu4jOyFiyDtlYTrk5zrpbwg67CY7ZmY7ZWp64uI64ukIChzdWJzZXRzICsgc3Vic2V0c0ludGVybmFsIO2Vqey5qClcbiAgICovXG4gIGdldFN1YnNldEZpZWxkc0ZvclF1ZXJ5KHN1YnNldEtleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuc3Vic2V0c1tzdWJzZXRLZXldID8/IFtdKSwgLi4uKHRoaXMuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV0gPz8gW10pXTtcbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7J2066aEKHN1YnNldEtleSnsnZggc3Vic2V07J2EIOyLpOygnOuhnCDqsIDsoLjsmKTripQgUHVyaSDsvZTrk5wg6rWs7ZiE7LK0IHN0cmluZ+ydhCDrsJjtmZjtlanri4jri6QuXG4gICAqL1xuICBnZXRQdXJpU3Vic2V0UXVlcnkoc3Vic2V0S2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1YnNldCA9IHRoaXMuZ2V0U3Vic2V0RmllbGRzRm9yUXVlcnkoc3Vic2V0S2V5KTtcbiAgICBjb25zdCBzdWJzZXRRdWVyeSA9IHRoaXMucmVzb2x2ZVN1YnNldFF1ZXJ5KFwiXCIsIHN1YnNldCk7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGZyb21cbiAgICBsaW5lcy5wdXNoKGByZXR1cm4gcWJXcmFwcGVyYCk7XG4gICAgbGluZXMucHVzaChgLmZyb20oXCIke3RoaXMudGFibGV9XCIpYCk7XG5cbiAgICAvLyBqb2luXG4gICAgZm9yIChjb25zdCBqb2luIG9mIHN1YnNldFF1ZXJ5LmpvaW5zKSB7XG4gICAgICAvLyBqb2luIOuplOyEnOuTnCDqsrDsoJU6IGlubmVyIOKGkiBqb2luLCBvdXRlciDihpIgbGVmdEpvaW5cbiAgICAgIC8vIEZLIG51bGxhYmxlIOyXrOu2gOuKlCBsZWZ0Sm9pbiDtg4DsnoUg7Iuc6re464uI7LKY7JeQ7IScIOyekOuPmeycvOuhnCDtjJDri6jrkKhcbiAgICAgIGNvbnN0IGpvaW5NZXRob2QgPSBqb2luLmpvaW4gPT09IFwiaW5uZXJcIiA/IFwiam9pblwiIDogXCJsZWZ0Sm9pblwiO1xuXG4gICAgICBpZiAoXCJjdXN0b21cIiBpbiBqb2luKSB7XG4gICAgICAgIC8vIGN1c3RvbSBqb2luIGNsYXVzZeuKlCByYXcg7IKs7JqpXG4gICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgYC4ke2pvaW5NZXRob2R9KHsgJHtqb2luLmFzfTogXCIke2pvaW4udGFibGV9XCIgfSwgcWJXcmFwcGVyLmtuZXgucmF3KFxcYCR7am9pbi5jdXN0b219XFxgKSlgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGluZXMucHVzaChgLiR7am9pbk1ldGhvZH0oeyAke2pvaW4uYXN9OiBcIiR7am9pbi50YWJsZX1cIiB9LCBcIiR7am9pbi5mcm9tfVwiLCBcIiR7am9pbi50b31cIilgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgLSDsnoXssrTsoIEg6rWs7KGw66GcIOyDneyEsVxuICAgIGNvbnN0IHNlbGVjdE9iaiA9IHRoaXMuYnVpbGROZXN0ZWRTZWxlY3RPYmplY3Qoc3Vic2V0UXVlcnkuc2VsZWN0KTtcbiAgICBsaW5lcy5wdXNoKGAuc2VsZWN0KCR7dGhpcy5zdHJpbmdpZnlOZXN0ZWRTZWxlY3RPYmplY3Qoc2VsZWN0T2JqKX0pO2ApO1xuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICAvKipcbiAgICogKi5lbnRpdHkuanNvbuydmCBzdWJzZXTsl5Ag65Ok7Ja07J6I64qUIO2VhOuTnCDrsLDsl7TsnYQg67Cb7JWE7IScLFxuICAgKiBQdXJp7J2YIFNlbGVjdE9iamVjdCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgKlxuICAgKiDsmIg6IFtcInVzZXJzLmlkXCIsIFwicGFyZW50LmlkXCIsIFwicGFyZW50Lm5hbWVcIl1cbiAgICogICDihpIgeyBpZDogXCJ1c2Vycy5pZFwiLCBwYXJlbnQ6IHsgaWQ6IFwicGFyZW50LmlkXCIsIG5hbWU6IFwicGFyZW50Lm5hbWVcIiB9IH1cbiAgICpcbiAgICog7Ja4642U67CU6rCAIOyVhOuLjCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VqOyXkCDsnKDsnZjtlZjshLjsmpQuXG4gICAqIOydtOugh+qyjCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VmOyXrCBzZWxlY3Tsl5Ag64SY6rKo7KO866m0IFBhcnNlU2VsZWN0T2JqZWN0IO2DgOyeheydtCBqb2lu65CcIOqwneyytOydmCDtg4DsnoXsnYQg7J6YIOyeoeyVhOykhCDsiJgg7J6I7Iq164uI64ukLlxuICAgKiDspoksIGVuaGFuY2Vy7JeQ7IScIHJvd+ulvCDrsJvslZjsnYQg65WMIGh5ZHJhdGXrkJwg6rCd7LK0IOyekOyytOydmCBudWxsaXR57JmAIOq3uCDslYjsqr0g7ZWE65Oc7J2YIG51bGxpdHnqsIAgZmsgbnVsbGFibGUg7Jes67aA7JeQIOuUsOudvCDsnpgg7LaU66Gg65Cp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE5lc3RlZFNlbGVjdE9iamVjdChcbiAgICBzZWxlY3RJdGVtczogc3RyaW5nW10sXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDrsJjtmZgg7Jik67iM7KCd7Yq47J2YIOqwkuydgCBzdHJpbmfsnbwg7IiY64+EIOyeiOqzoCDrmJDri6Trpbgg7Jik67iM7KCd7Yq47J28IOyImOuPhCDsnojripTrjbAsIOydtOulvCDsnqzqt4Ag7YOA7J6F7Jy866GcIOuCmO2DgOuCvCDsiJgg7JeG7Ja0IGFueeuhnCDsspjrpqztlanri4jri6QuXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5idWlsZE5lc3RlZFNlbGVjdE9iamVjdD4gPSB7fTtcblxuICAgIGZvciAoY29uc3Qgc2VsZWN0SXRlbSBvZiBzZWxlY3RJdGVtcykge1xuICAgICAgLy8gXCJ1c2Vycy5pZFwiIOuYkOuKlCBcInVzZXJzLmlkIGFzIHVzZXJfX2lkXCIg7ZiV7YOcIO2MjOyLsVxuICAgICAgY29uc3QgbWF0Y2ggPSBzZWxlY3RJdGVtLm1hdGNoKC9eKC4rPykoPzogYXMgKC4rKSk/JC8pO1xuICAgICAgaWYgKCFtYXRjaCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IFssIGNvbHVtbiwgYWxpYXNdID0gbWF0Y2g7XG4gICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGBcIiR7Y29sdW1uLnRyaW0oKX1cImA7XG5cbiAgICAgIGlmICghYWxpYXMgfHwgIWFsaWFzLmluY2x1ZGVzKFwiX19cIikpIHtcbiAgICAgICAgLy8gYWxpYXPqsIAg7JeG6rGw64KYIF9f66W8IO2PrO2VqO2VmOyngCDslYrsnLzrqbQg7LWc7IOB7JyEIO2VhOuTnFxuICAgICAgICBjb25zdCBrZXkgPSBhbGlhcyA/PyBhc3NlcnREZWZpbmVkKGNvbHVtbi5zcGxpdChcIi5cIikucG9wKCkpO1xuICAgICAgICByZXN1bHRba2V5XSA9IGNvbHVtblZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWxpYXPqsIAgX1/rpbwg7Y+s7ZWo7ZWY66m0IOyeheyytCDqtazsobDroZwg6re466O57ZmUXG4gICAgICAgIGNvbnN0IHBhcnRzID0gYWxpYXMuc3BsaXQoXCJfX1wiKTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSByZXN1bHQ7XG5cbiAgICAgICAgLy8g66eI7KeA66eJIO2MjO2KuCDsoITquYzsp4Ag7KSR7LKpIOqwneyytCDsg53shLFcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgaWYgKHBhcnQgaW4gY3VycmVudCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50W3BhcnRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIC8vIOyeheugpeydtCBbXCJ1c2VyXCIsIFwidXNlcl9faWRcIl0g6rCZ7J2AIOqyveyasCFcbiAgICAgICAgICAgICAgLy8g7JWg7LSI7JeQIOunkOuPhCDslYgg65CY7KeA66eMIOyViOyghO2VmOqyjCDsmIjsmbjrpbwg642Y7KeR64uI64ukLlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvbmZsaWN0IGRldGVjdGVkIGluIHNlbGVjdCBpdGVtczogcGFyZW50IHBhdGggXCIke3BhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiX19cIil9XCIgaXMgYWxyZWFkeSBzZXQgYXMgYSBmaWVsZCwgY2Fubm90IG5lc3QgXCIke2FsaWFzfVwiIHVuZGVyIGl0LmAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRbcGFydF0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyDrp4jsp4Drp4kg7YyM7Yq47JeQIOqwkiDshKTsoJVcbiAgICAgICAgY29uc3QgbGFzdFBhcnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgY3VycmVudFtsYXN0UGFydF0gPSBjb2x1bW5WYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEpTT04uc3RyaW5naWZ57JmAIOycoOyCrO2VnCDsnbzsnYQg7ZWp64uI64ukLlxuICAgKiDri6Trp4wg7KO87Ja07KeEIOqwneyytOulvCBKU09O7J20IOyVhOuLjCBUeXBlU2NyaXB0IOqwneyytCDrpqzthLDrn7Qg7Iqk7Yq466eB7Jy866GcIOunjOuTpOyWtOykjeuLiOuLpC5cbiAgICoga2V57JeQIOuUsOyYtO2RnOqwgCDsl4bslrTsmpQuXG4gICAqIOy2nOugpSDsmIjsi5w6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICoge1xuICAgKiAgIGlkOiBcInVzZXJzLmlkXCIsXG4gICAqICAgcGFyZW50OiB7XG4gICAqICAgICBpZDogXCJwYXJlbnQuaWRcIixcbiAgICogICAgIG5hbWU6IFwicGFyZW50Lm5hbWVcIixcbiAgICogICB9LFxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBAcGFyYW0gb2JqIOuzgO2ZmO2VoCDqsJ3ssrRcbiAgICogQHBhcmFtIGluZGVudCDrk6Tsl6zsk7DquLAg66CI67KoXG4gICAqIEBwYXJhbSB3aXRoQnJhY2VzIHRydWXrqbQg7KSR6rSE7Zi4IO2PrO2VqCwgZmFsc2XrqbQg64K07Jqp66eMIOuwmO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBzdHJpbmdpZnlOZXN0ZWRTZWxlY3RPYmplY3QoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDspJHssqkg7Jik67iM7KCd7Yq47J2YIOqwkuydgCBzdHJpbmfsnbwg7IiY64+EIOyeiOqzoCDrmJDri6Trpbgg7Jik67iM7KCd7Yq47J28IOyImOuPhCDsnojripTrjbAsIOydtOulvCDsnqzqt4Ag7YOA7J6F7Jy866GcIOuCmO2DgOuCvCDsiJgg7JeG7Ja0IGFueeuhnCDsspjrpqztlanri4jri6QuXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGluZGVudDogbnVtYmVyID0gMCxcbiAgICB3aXRoQnJhY2VzOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGFjZXMgPSBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgY29uc3QgaW5uZXJTcGFjZXMgPSBcIiAgXCIucmVwZWF0KGluZGVudCArIDEpO1xuXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9iaik7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gd2l0aEJyYWNlcyA/IFwie31cIiA6IFwiXCI7XG5cbiAgICBjb25zdCBsaW5lcyA9IGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8g7Lus65+8IOqyveuhnCAo7J2066+4IOuUsOyYtO2RnCDtj6ztlagpXG4gICAgICAgIHJldHVybiBgJHtpbm5lclNwYWNlc30ke2tleX06ICR7dmFsdWV9LGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDspJHssqkg6rCd7LK0ICjtla3sg4Eg7KSR6rSE7Zi4IO2PrO2VqClcbiAgICAgICAgcmV0dXJuIGAke2lubmVyU3BhY2VzfSR7a2V5fTogJHt0aGlzLnN0cmluZ2lmeU5lc3RlZFNlbGVjdE9iamVjdCh2YWx1ZSwgaW5kZW50ICsgMSwgdHJ1ZSl9LGA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAod2l0aEJyYWNlcykge1xuICAgICAgcmV0dXJuIGB7XFxuJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbiR7c3BhY2VzfX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDspJHqtITtmLgg7JeG7J20IOuCtOyaqeunjCDrsJjtmZggKOyVnuuSpCDqsJztlokg7KCc7Jm4KVxuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHVyaUxvYWRlclF1ZXJ5KHN1YnNldEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdWJzZXQgPSB0aGlzLmdldFN1YnNldEZpZWxkc0ZvclF1ZXJ5KHN1YnNldEtleSk7XG4gICAgY29uc3QgeyBsb2FkZXJzIH0gPSB0aGlzLnJlc29sdmVTdWJzZXRRdWVyeShcIlwiLCBzdWJzZXQpO1xuXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW2BbYF07XG5cbiAgICAvLyDsnqzqt4DsoIHsnLzroZwgbG9hZGVyIOyDneyEse2VmOuKlCDtl6ztjbwg7ZWo7IiYXG4gICAgY29uc3QgZ2VuZXJhdGVMb2FkZXJDb2RlID0gKGxvYWRlcnM6IFN1YnNldFF1ZXJ5W1wibG9hZGVyc1wiXSk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGNvbnN0IGxvYWRlckxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICAgIGNvbnN0IHsgdG9UYWJsZSwgdG9Db2wsIHRocm91Z2ggfSA9IGxvYWRlci5tYW55Sm9pbjtcbiAgICAgICAgbG9hZGVyTGluZXMucHVzaChcbiAgICAgICAgICBcIntcIixcbiAgICAgICAgICBgYXM6IFwiJHtsb2FkZXIuYXN9XCIsYCxcbiAgICAgICAgICBgcmVmSWQ6IFwiJHtsb2FkZXIubWFueUpvaW4uaWRGaWVsZH1cIixgLFxuICAgICAgICAgIGBxYjogKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LCBmcm9tSWRzOiBudW1iZXJbXSkgPT4ge2AsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRocm91Z2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEhhc01hbnlcbiAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIFwicmV0dXJuIHFiV3JhcHBlclwiLFxuICAgICAgICAgICAgYC5mcm9tKFwiJHt0b1RhYmxlfVwiKWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGxvYWRlci5vbmVKb2lucy5mb3JFYWNoKChqb2luOiBTdWJzZXRRdWVyeVtcImpvaW5zXCJdW251bWJlcl0pID0+IHtcbiAgICAgICAgICAgIC8vIEZLIG51bGxhYmxlIOyXrOu2gOuKlCBsZWZ0Sm9pbiDtg4DsnoUg7Iuc6re464uI7LKY7JeQ7IScIOyekOuPmeycvOuhnCDtjJDri6jrkKhcbiAgICAgICAgICAgIGNvbnN0IGpvaW5NZXRob2QgPSBqb2luLmpvaW4gPT09IFwiaW5uZXJcIiA/IFwiam9pblwiIDogXCJsZWZ0Sm9pblwiO1xuICAgICAgICAgICAgaWYgKFwiY3VzdG9tXCIgaW4gam9pbikge1xuICAgICAgICAgICAgICAvLyBGSVhNRTog6rKA7KadIO2VhOyalFxuICAgICAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgICAgIGAuJHtqb2luTWV0aG9kfSh7ICR7am9pbi5hc306IFwiJHtqb2luLnRhYmxlfVwiIH0sIChqKSA9PiB7YCxcbiAgICAgICAgICAgICAgICBgai5vbihQdXJpLnJhd1N0cmluZyhcIiR7am9pbi5jdXN0b219XCIpKTtgLFxuICAgICAgICAgICAgICAgIFwifSlcIixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXG4gICAgICAgICAgICAgICAgYC4ke2pvaW5NZXRob2R9KHsgJHtqb2luLmFzfTogXCIke2pvaW4udGFibGV9XCIgfSwgXCIke2pvaW4uZnJvbX1cIiwgXCIke2pvaW4udG99XCIpYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIOyeheyytOyggSBzZWxlY3Qg6rWs7KGwIOyDneyEsSAocmVmSWQg7Y+s7ZWoKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9iaiA9IHRoaXMuYnVpbGROZXN0ZWRTZWxlY3RPYmplY3QobG9hZGVyLnNlbGVjdCk7XG4gICAgICAgICAgc2VsZWN0T2JqLnJlZklkID0gYFwiJHt0b1RhYmxlfS4ke3RvQ29sfVwiYDtcbiAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgYC53aGVyZUluKFwiJHt0b1RhYmxlfS4ke3RvQ29sfVwiLCBmcm9tSWRzKWAsXG4gICAgICAgICAgICBgLnNlbGVjdCgke3RoaXMuc3RyaW5naWZ5TmVzdGVkU2VsZWN0T2JqZWN0KHNlbGVjdE9iail9KTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWFueVRvTWFueVxuICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXG4gICAgICAgICAgICBcInJldHVybiBxYldyYXBwZXJcIixcbiAgICAgICAgICAgIGAuZnJvbShcIiR7dGhyb3VnaC50YWJsZX1cIilgLFxuICAgICAgICAgICAgYC5qb2luKFwiJHt0b1RhYmxlfVwiLCBcIiR7dGhyb3VnaC50YWJsZX0uJHt0aHJvdWdoLnRvQ29sfVwiLCBcIiR7dG9UYWJsZX0uJHt0b0NvbH1cIilgLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsb2FkZXIub25lSm9pbnMuZm9yRWFjaCgoam9pbjogU3Vic2V0UXVlcnlbXCJqb2luc1wiXVtudW1iZXJdKSA9PiB7XG4gICAgICAgICAgICAvLyBGSyBudWxsYWJsZSDsl6zrtoDripQgbGVmdEpvaW4g7YOA7J6FIOyLnOq3uOuLiOyymOyXkOyEnCDsnpDrj5nsnLzroZwg7YyQ64uo65CoXG4gICAgICAgICAgICBjb25zdCBqb2luTWV0aG9kID0gam9pbi5qb2luID09PSBcImlubmVyXCIgPyBcImpvaW5cIiA6IFwibGVmdEpvaW5cIjtcbiAgICAgICAgICAgIGlmIChcImN1c3RvbVwiIGluIGpvaW4pIHtcbiAgICAgICAgICAgICAgLy8gRklYTUU6IOqygOymnSDtlYTsmpRcbiAgICAgICAgICAgICAgbG9hZGVyTGluZXMucHVzaChcbiAgICAgICAgICAgICAgICBgLiR7am9pbk1ldGhvZH0oeyAke2pvaW4uYXN9OiBcIiR7am9pbi50YWJsZX1cIiB9LCAoaikgPT4ge2AsXG4gICAgICAgICAgICAgICAgYGoub24oUHVyaS5yYXdTdHJpbmcoXCIke2pvaW4uY3VzdG9tfVwiKSk7YCxcbiAgICAgICAgICAgICAgICBcIn0pXCIsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgICAgIGAuJHtqb2luTWV0aG9kfSh7ICR7am9pbi5hc306IFwiJHtqb2luLnRhYmxlfVwiIH0sIFwiJHtqb2luLmZyb219XCIsIFwiJHtqb2luLnRvfVwiKWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDsnoXssrTsoIEgc2VsZWN0IOq1rOyhsCDsg53shLEgKHJlZklkIO2PrO2VqClcbiAgICAgICAgICBjb25zdCBzZWxlY3RPYmogPSB0aGlzLmJ1aWxkTmVzdGVkU2VsZWN0T2JqZWN0KGxvYWRlci5zZWxlY3QpO1xuICAgICAgICAgIHNlbGVjdE9iai5yZWZJZCA9IGBcIiR7dGhyb3VnaC50YWJsZX0uJHt0aHJvdWdoLmZyb21Db2x9XCJgO1xuICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXG4gICAgICAgICAgICBgLndoZXJlSW4oXCIke3Rocm91Z2gudGFibGV9LiR7dGhyb3VnaC5mcm9tQ29sfVwiLCBmcm9tSWRzKWAsXG4gICAgICAgICAgICBgLnNlbGVjdCgke3RoaXMuc3RyaW5naWZ5TmVzdGVkU2VsZWN0T2JqZWN0KHNlbGVjdE9iail9KTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKGB9LGApO1xuXG4gICAgICAgIC8vIOykkeyyqSBsb2FkZXJzIOyymOumrFxuICAgICAgICBpZiAobG9hZGVyLmxvYWRlcnMgJiYgbG9hZGVyLmxvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXCJsb2FkZXJzOiBbXCIsIC4uLmdlbmVyYXRlTG9hZGVyQ29kZShsb2FkZXIubG9hZGVycyksIFwiXSxcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFwifSxcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsb2FkZXJMaW5lcztcbiAgICB9O1xuXG4gICAgbGluZXMucHVzaCguLi5nZW5lcmF0ZUxvYWRlckNvZGUobG9hZGVycykpO1xuICAgIGxpbmVzLnB1c2goYF1gKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLypcbiAgICBzdWJzZXQgU0VMRUNUL0pPSU4vTE9BREVSIOqysOqzvCDrpqzthLRcbiAgKi9cbiAgZ2V0U3Vic2V0UXVlcnkoc3Vic2V0S2V5OiBzdHJpbmcpOiBTdWJzZXRRdWVyeSB7XG4gICAgY29uc3Qgc3Vic2V0ID0gdGhpcy5nZXRTdWJzZXRGaWVsZHNGb3JRdWVyeShzdWJzZXRLZXkpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTdWJzZXRRdWVyeSA9IHRoaXMucmVzb2x2ZVN1YnNldFF1ZXJ5KFwiXCIsIHN1YnNldCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qXG4gICAqL1xuICByZXNvbHZlU3Vic2V0UXVlcnkoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcbiAgICBpc0FscmVhZHlPdXRlckpvaW5lZDogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBTdWJzZXRRdWVyeSB7XG4gICAgLy8gcHJlZml4IOy5mO2ZmCAocHJlZml464qUIFRvT25lUmVsYXRpb27snbQg67O17IiY66GcIOu2meydgCDqsr3smrAg66qo65GQIF9f66GcIOuzgOqyveuQqClcbiAgICBwcmVmaXggPSBwcmVmaXgucmVwbGFjZSgvXFwuL2csIFwiX19cIik7XG5cbiAgICAvLyDshJzruIzshYvsnYQgMeuOgeyKpOunjCDrtoTrpqztlZjsl6wg6re466O57ZWRXG4gICAgY29uc3Qgc3Vic2V0R3JvdXAgPSBncm91cChmaWVsZHMsIChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgICBjb25zdCBbcmVsXSA9IGZpZWxkLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgcmV0dXJuIHJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoc3Vic2V0R3JvdXApLnJlZHVjZShcbiAgICAgIChyLCBncm91cEtleSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBzdWJzZXRHcm91cFtncm91cEtleV07XG4gICAgICAgIGFzc2VydChmaWVsZHMgIT09IHVuZGVmaW5lZCwgXCJmaWVsZHMgaXMgdW5kZWZpbmVkXCIpO1xuXG4gICAgICAgIC8vIO2YhOyerCDthYzsnbTruJQg7ZWE65Oc7IWL7J2AIHNlbGVjdCwgdmlydHVhbOyXkCDstpTqsIDtlZjqs6Ag66as7YS0XG4gICAgICAgIGlmIChncm91cEtleSA9PT0gXCJcIikge1xuICAgICAgICAgIGNvbnN0IHJlYWxGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gIWlzVmlydHVhbFByb3AodGhpcy5wcm9wc0RpY3RbZmllbGRdKSk7XG4gICAgICAgICAgLy8gdmlydHVhbFR5cGU6IFwiY29kZVwiICjrmJDripQgdW5kZWZpbmVkKeyduCB2aXJ0dWFsIHByb3Drp4wgci52aXJ0dWFs7JeQIOy2lOqwgFxuICAgICAgICAgIC8vIHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rK97JqwIOyCrOyaqeyekOqwgCBhcHBlbmRTZWxlY3TroZwg7KeB7KCRIOy2lOqwgO2VmOuvgOuhnCDsoJzsmbhcbiAgICAgICAgICBjb25zdCB2aXJ0dWFsQ29kZUZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PlxuICAgICAgICAgICAgaXNWaXJ0dWFsQ29kZVByb3AodGhpcy5wcm9wc0RpY3RbZmllbGRdKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gXCJcIikge1xuICAgICAgICAgICAgLy8g7ZiE7J6sIO2FjOydtOu4lOyduCDqsr3smrBcbiAgICAgICAgICAgIHIuc2VsZWN0ID0gci5zZWxlY3QuY29uY2F0KHJlYWxGaWVsZHMubWFwKChmaWVsZCkgPT4gYCR7dGhpcy50YWJsZX0uJHtmaWVsZH1gKSk7XG4gICAgICAgICAgICByLnZpcnR1YWwgPSByLnZpcnR1YWwuY29uY2F0KHZpcnR1YWxDb2RlRmllbGRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g64SY7Ja07JioIO2FjOydtOu4lOyduCDqsr3smrBcbiAgICAgICAgICAgIHIuc2VsZWN0ID0gci5zZWxlY3QuY29uY2F0KFxuICAgICAgICAgICAgICByZWFsRmllbGRzLm1hcCgoZmllbGQpID0+IGAke3ByZWZpeH0uJHtmaWVsZH0gYXMgJHtwcmVmaXh9X18ke2ZpZWxkfWApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbnNbZ3JvdXBLZXldO1xuICAgICAgICBpZiAocmVsYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCByZWxhdGlvbiDssLjsobAgJHtncm91cEtleX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChyZWxhdGlvbi53aXRoKTtcblxuICAgICAgICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChyZWxhdGlvbikgfHwgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocmVsYXRpb24pKSB7XG4gICAgICAgICAgLy8gLU9uZSBSZWxhdGlvbjogSk9JTiDsnLzroZwg7LKY66asXG4gICAgICAgICAgY29uc3QgcmVsRmllbGRzID0gZmllbGRzLm1hcCgoZmllbGQpID0+IGZpZWxkLnNwbGl0KFwiLlwiKS5zbGljZSgxKS5qb2luKFwiLlwiKSk7XG5cbiAgICAgICAgICAvLyAtT25lIFJlbGF0aW9u7JeQ7IScIGlkIO2VhOuTnOunjCDssLjsobDtlZjripQg6rK97JqwIOumtOugiOydtOyFmCDrhJjquLDsp4Ag7JWK6rOgIOumrO2EtFxuICAgICAgICAgIGlmIChyZWxGaWVsZHMubGVuZ3RoID09PSAxICYmIHJlbEZpZWxkc1swXSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgICBpZiAocHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgIHIuc2VsZWN0ID0gci5zZWxlY3QuY29uY2F0KGAke3RoaXMudGFibGV9LiR7Z3JvdXBLZXl9X2lkYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByLnNlbGVjdCA9IHIuc2VsZWN0LmNvbmNhdChgJHtwcmVmaXh9LiR7Z3JvdXBLZXl9X2lkIGFzICR7cHJlZml4fV9fJHtncm91cEtleX1faWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlubmVyT3JPdXRlclxuICAgICAgICAgIGNvbnN0IGlubmVyT3JPdXRlciA9ICgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBbHJlYWR5T3V0ZXJKb2luZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwib3V0ZXJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocmVsYXRpb24pKSB7XG4gICAgICAgICAgICAgIGlmIChyZWxhdGlvbi5oYXNKb2luQ29sdW1uID09PSB0cnVlICYmIChyZWxhdGlvbi5udWxsYWJsZSA/PyBmYWxzZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaW5uZXJcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvdXRlclwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocmVsYXRpb24ubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvdXRlclwiO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImlubmVyXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIGNvbnN0IHJlbFN1YnNldFF1ZXJ5ID0gcmVsRW50aXR5LnJlc29sdmVTdWJzZXRRdWVyeShcbiAgICAgICAgICAgIGAke3ByZWZpeCAhPT0gXCJcIiA/IGAke3ByZWZpeH0uYCA6IFwiXCJ9JHtncm91cEtleX1gLFxuICAgICAgICAgICAgcmVsRmllbGRzLFxuICAgICAgICAgICAgaW5uZXJPck91dGVyID09PSBcIm91dGVyXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByLnNlbGVjdCA9IHIuc2VsZWN0LmNvbmNhdChyZWxTdWJzZXRRdWVyeS5zZWxlY3QpO1xuICAgICAgICAgIHIudmlydHVhbCA9IHIudmlydHVhbC5jb25jYXQocmVsU3Vic2V0UXVlcnkudmlydHVhbCk7XG5cbiAgICAgICAgICBjb25zdCBqb2luQXMgPSBwcmVmaXggPT09IFwiXCIgPyBncm91cEtleSA6IGAke3ByZWZpeH1fXyR7Z3JvdXBLZXl9YDtcbiAgICAgICAgICBjb25zdCBmcm9tVGFibGUgPSBwcmVmaXggPT09IFwiXCIgPyB0aGlzLnRhYmxlIDogcHJlZml4O1xuXG4gICAgICAgICAgbGV0IGpvaW5DbGF1c2U6XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBmcm9tOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgdG86IHN0cmluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgY3VzdG9tOiBzdHJpbmc7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHJlbGF0aW9uLmN1c3RvbUpvaW5DbGF1c2UpIHtcbiAgICAgICAgICAgIGpvaW5DbGF1c2UgPSB7XG4gICAgICAgICAgICAgIGN1c3RvbTogcmVsYXRpb24uY3VzdG9tSm9pbkNsYXVzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChyZWxhdGlvbikpIHtcbiAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uLmhhc0pvaW5Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICBmcm9tID0gYCR7ZnJvbVRhYmxlfS4ke3JlbGF0aW9uLm5hbWV9X2lkYDtcbiAgICAgICAgICAgICAgICB0byA9IGAke2pvaW5Bc30uaWRgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZyb20gPSBgJHtmcm9tVGFibGV9LmlkYDtcbiAgICAgICAgICAgICAgICB0byA9IGAke2pvaW5Bc30uJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5uYW1lcy5mcy5yZXBsYWNlKC8tL2csIFwiX1wiKSl9X2lkYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZnJvbSA9IGAke2Zyb21UYWJsZX0uJHtyZWxhdGlvbi5uYW1lfV9pZGA7XG4gICAgICAgICAgICAgIHRvID0gYCR7am9pbkFzfS5pZGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqb2luQ2xhdXNlID0ge1xuICAgICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5qb2lucy5wdXNoKHtcbiAgICAgICAgICAgIGFzOiBqb2luQXMsXG4gICAgICAgICAgICBqb2luOiBpbm5lck9yT3V0ZXIsXG4gICAgICAgICAgICB0YWJsZTogcmVsRW50aXR5LnRhYmxlLFxuICAgICAgICAgICAgLi4uam9pbkNsYXVzZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEJlbG9uZ3NUb09uZSDrsJHsl5AgSGFzTWFueeqwgCDrtpnsnYAg6rK97JqwXG4gICAgICAgICAgaWYgKHJlbFN1YnNldFF1ZXJ5LmxvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkTG9hZGVycyA9IHJlbFN1YnNldFF1ZXJ5LmxvYWRlcnMubWFwKChsb2FkZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3QXMgPSBbZ3JvdXBLZXksIGxvYWRlci5hc10uam9pbihcIl9fXCIpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFzOiBuZXdBcyxcbiAgICAgICAgICAgICAgICB0YWJsZTogbG9hZGVyLnRhYmxlLFxuICAgICAgICAgICAgICAgIG1hbnlKb2luOiBsb2FkZXIubWFueUpvaW4sXG4gICAgICAgICAgICAgICAgb25lSm9pbnM6IGxvYWRlci5vbmVKb2lucyxcbiAgICAgICAgICAgICAgICBzZWxlY3Q6IGxvYWRlci5zZWxlY3QsXG4gICAgICAgICAgICAgICAgbG9hZGVyczogbG9hZGVyLmxvYWRlcnMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgci5sb2FkZXJzID0gWy4uLnIubG9hZGVycywgLi4uY29udmVydGVkTG9hZGVyc107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5qb2lucyA9IHIuam9pbnMuY29uY2F0KHJlbFN1YnNldFF1ZXJ5LmpvaW5zKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0hhc01hbnlSZWxhdGlvblByb3AocmVsYXRpb24pIHx8IGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChyZWxhdGlvbikpIHtcbiAgICAgICAgICAvLyAtTWFueSBSZWxhdGlvbjogTG9hZGVyIOuhnCDsspjrpqxcbiAgICAgICAgICBjb25zdCByZWxGaWVsZHMgPSBmaWVsZHMubWFwKChmaWVsZCkgPT4gZmllbGQuc3BsaXQoXCIuXCIpLnNsaWNlKDEpLmpvaW4oXCIuXCIpKTtcbiAgICAgICAgICBjb25zdCByZWxTdWJzZXRRdWVyeSA9IHJlbEVudGl0eS5yZXNvbHZlU3Vic2V0UXVlcnkoXCJcIiwgcmVsRmllbGRzKTtcblxuICAgICAgICAgIGxldCBtYW55Sm9pbjogU3Vic2V0UXVlcnlbXCJsb2FkZXJzXCJdW251bWJlcl1bXCJtYW55Sm9pblwiXTtcbiAgICAgICAgICBpZiAoaXNIYXNNYW55UmVsYXRpb25Qcm9wKHJlbGF0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgZnJvbUNvbCA9IHJlbGF0aW9uPy5mcm9tQ29sdW1uID8/IFwiaWRcIjtcbiAgICAgICAgICAgIG1hbnlKb2luID0ge1xuICAgICAgICAgICAgICBmcm9tVGFibGU6IHRoaXMudGFibGUsXG4gICAgICAgICAgICAgIGZyb21Db2wsXG4gICAgICAgICAgICAgIGlkRmllbGQ6IHByZWZpeCA9PT0gXCJcIiA/IGAke2Zyb21Db2x9YCA6IGAke3ByZWZpeH1fXyR7ZnJvbUNvbH1gLFxuICAgICAgICAgICAgICB0b1RhYmxlOiByZWxFbnRpdHkudGFibGUsXG4gICAgICAgICAgICAgIHRvQ29sOiByZWxhdGlvbi5qb2luQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChyZWxhdGlvbikpIHtcbiAgICAgICAgICAgIG1hbnlKb2luID0ge1xuICAgICAgICAgICAgICBmcm9tVGFibGU6IHRoaXMudGFibGUsXG4gICAgICAgICAgICAgIGZyb21Db2w6IFwiaWRcIixcbiAgICAgICAgICAgICAgaWRGaWVsZDogcHJlZml4ID09PSBcIlwiID8gYGlkYCA6IGAke3ByZWZpeH1fX2lkYCxcbiAgICAgICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgICAgIHRhYmxlOiByZWxhdGlvbi5qb2luVGFibGUsXG4gICAgICAgICAgICAgICAgZnJvbUNvbDogYCR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0aGlzLnRhYmxlKX1faWRgLFxuICAgICAgICAgICAgICAgIHRvQ29sOiBgJHtpbmZsZWN0aW9uLnNpbmd1bGFyaXplKHJlbEVudGl0eS50YWJsZSl9X2lkYCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdG9UYWJsZTogcmVsRW50aXR5LnRhYmxlLFxuICAgICAgICAgICAgICB0b0NvbDogXCJpZFwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5sb2FkZXJzLnB1c2goe1xuICAgICAgICAgICAgYXM6IGdyb3VwS2V5LFxuICAgICAgICAgICAgdGFibGU6IHJlbEVudGl0eS50YWJsZSxcbiAgICAgICAgICAgIG1hbnlKb2luLFxuICAgICAgICAgICAgb25lSm9pbnM6IHJlbFN1YnNldFF1ZXJ5LmpvaW5zLFxuICAgICAgICAgICAgc2VsZWN0OiByZWxTdWJzZXRRdWVyeS5zZWxlY3QsXG4gICAgICAgICAgICBsb2FkZXJzOiByZWxTdWJzZXRRdWVyeS5sb2FkZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZWxlY3Q6IFtdLFxuICAgICAgICB2aXJ0dWFsOiBbXSxcbiAgICAgICAgam9pbnM6IFtdLFxuICAgICAgICBsb2FkZXJzOiBbXSxcbiAgICAgIH0gYXMgU3Vic2V0UXVlcnksXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLypcbiAgICBGaWVsZEV4cHJbXSDsnYQgRW50aXR5UHJvcE5vZGVbXSDroZwg67OA7ZmYXG4gICovXG4gIGZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzOiBzdHJpbmdbXSwgZW50aXR5OiBFbnRpdHkgPSB0aGlzKTogRW50aXR5UHJvcE5vZGVbXSB7XG4gICAgY29uc3QgZ3JvdXBzID0gZmllbGRFeHBycy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBmaWVsZEV4cHIpID0+IHtcbiAgICAgICAgbGV0IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBlbHNlRXhwcjogc3RyaW5nW107XG4gICAgICAgIGlmIChmaWVsZEV4cHIuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgW2tleSwgLi4uZWxzZUV4cHJdID0gZmllbGRFeHByLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICB2YWx1ZSA9IGVsc2VFeHByLmpvaW4oXCIuXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IFwiXCI7XG4gICAgICAgICAgdmFsdWUgPSBmaWVsZEV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W2tleV0gPSAocmVzdWx0W2tleV0gPz8gW10pLmNvbmNhdCh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyB7XG4gICAgICAgIFtrOiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhncm91cHMpLmZsYXRNYXA8RW50aXR5UHJvcE5vZGUsIEVudGl0eVByb3BOb2RlW10+KChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzW2tleV07XG5cbiAgICAgIC8vIOydvOuwmCBwcm9wIOyymOumrFxuICAgICAgaWYgKGtleSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZ3JvdXAubWFwKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBwcm9wTmFtZSk7XG4gICAgICAgICAgaWYgKHByb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBwcm9wTmFtZSwgZ3JvdXBzIH0pO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eS5pZH0gLS0g7J6Y66q765CcIEZpZWxkRXhwciAke3Byb3BOYW1lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIiBhcyBjb25zdCxcbiAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbGF0aW9uIHByb3Ag7LKY66asXG4gICAgICBjb25zdCBwcm9wID0gZW50aXR5LnByb3BzRGljdFtrZXldO1xuICAgICAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCBGaWVsZEV4cHIgJHtrZXl9LiR7Z3JvdXBbMF19YCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuXG4gICAgICAvLyByZWxhdGlvbiAtT25lIOyXkCBpZCDtlYTrk5wg7ZWY64KY7J24IOqyveyasFxuICAgICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMSAmJiAoZ3JvdXBbMF0gPT09IFwiaWRcIiB8fCBncm91cFswXSA9PT0gXCJpZD9cIikpIHtcbiAgICAgICAgICAvLyBpZCDtlZjrgpjrp4wg7J6I64qU7KeAIOyytO2BrO2VtOyEnCwg7ZWY64KY66eMIOyeiOycvOuptCDsg4HsnIQgcHJvcOycvOuhnCBpZOulvCDrpqzthLRcbiAgICAgICAgICBjb25zdCBpZFByb3AgPSByZWxFbnRpdHkucHJvcHNEaWN0LmlkO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgcHJvcDoge1xuICAgICAgICAgICAgICAuLi5pZFByb3AsXG4gICAgICAgICAgICAgIG5hbWU6IGAke2tleX1faWRgLFxuICAgICAgICAgICAgICBudWxsYWJsZTogcHJvcC5udWxsYWJsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAtT25lIOq3uOyZuOydmCDqsr3smrAgb2JqZWN066GcIOumrO2EtFxuICAgICAgLy8gLU1hbnnsnZgg6rK97JqwIGFycmF566GcIOumrO2EtFxuICAgICAgLy8gUmVjdXJzaXZlIOuhnCDrjoHsiqQg7LKY66asXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZmllbGRFeHByc1RvUHJvcE5vZGVzKGdyb3VwLCByZWxFbnRpdHkpO1xuICAgICAgY29uc3Qgbm9kZVR5cGUgPVxuICAgICAgICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCBpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApXG4gICAgICAgICAgPyAoXCJvYmplY3RcIiBhcyBjb25zdClcbiAgICAgICAgICA6IChcImFycmF5XCIgYXMgY29uc3QpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRFeHBycyhwcmVmaXggPSBcIlwiLCBtYXhEZXB0aDogbnVtYmVyID0gMywgZnJvbXM6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHNcbiAgICAgIC5mbGF0TWFwKChwcm9wKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gW3ByZWZpeCwgcHJvcC5uYW1lXS5maWx0ZXIoKHYpID0+IHYgIT09IFwiXCIpLmpvaW4oXCIuXCIpO1xuICAgICAgICBpZiAocHJvcE5hbWUgPT09IHByZWZpeCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICAgIGlmIChtYXhEZXB0aCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZnJvbXMuaW5jbHVkZXMocHJvcC53aXRoKSkge1xuICAgICAgICAgICAgLy8g7Jet67Cp7ZalIHJlbGF0aW9u7J24IOqyveyasCDsoJzsmbhcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDsoJXrsKntlqUgcmVsYXRpb27snbgg6rK97JqwIHJlY3Vyc2l2ZSDsvZxcbiAgICAgICAgICBjb25zdCByZWxNZCA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgICAgcmV0dXJuIHJlbE1kLmdldEZpZWxkRXhwcnMocHJvcE5hbWUsIG1heERlcHRoIC0gMSwgWy4uLmZyb21zLCB0aGlzLmlkXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BOYW1lO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGYpID0+IGYgIT09IG51bGwpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0VGFibGVDb2x1bW5zKCk6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wc1xuICAgICAgLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICBpZiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wLnJlbGF0aW9uVHlwZSA9PT0gXCJCZWxvbmdzVG9PbmVcIiB8fFxuICAgICAgICAgICAgKHByb3AucmVsYXRpb25UeXBlID09PSBcIk9uZVRvT25lXCIgJiYgcHJvcC5oYXNKb2luQ29sdW1uID09PSB0cnVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogYCR7cHJvcC5uYW1lfV9pZGAsIHR5cGU6IFwiaW50X3Vuc2lnbmVkXCIgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5hbWU6IHByb3AubmFtZSwgdHlwZTogcHJvcC50eXBlIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihub25OdWxsYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogRW50aXR57JeQIOygleydmOuQnCDrqqjrk6AgdmVjdG9yIO2DgOyehSDsu6zrn7wg67CY7ZmYXG4gICAqL1xuICBnZXRWZWN0b3JDb2x1bW5zKCk6IEVudGl0eVByb3BbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwidmVjdG9yXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2KueyglSB2ZWN0b3Ig7Lus65+8IOuwmO2ZmFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZSAtIOy7rOufvOuqhSAo7IOd6561IOyLnCDssqsg67KI7Ke4IHZlY3RvciDsu6zrn7wpXG4gICAqL1xuICBnZXRWZWN0b3JDb2x1bW4oY29sdW1uTmFtZT86IHN0cmluZyk6IEVudGl0eVByb3AgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZlY3RvclByb3BzID0gdGhpcy5nZXRWZWN0b3JDb2x1bW5zKCk7XG4gICAgaWYgKGNvbHVtbk5hbWUpIHtcbiAgICAgIHJldHVybiB2ZWN0b3JQcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGNvbHVtbk5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yUHJvcHNbMF07XG4gIH1cblxuICBhc3luYyByZWdpc3Rlck1vZHVsZVBhdGhzKCkge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gYCR7dGhpcy5uYW1lcy5wYXJlbnRGc31gO1xuXG4gICAgLy8gYmFzZS1zY2hlbWVcbiAgICBFbnRpdHlNYW5hZ2VyLnNldE1vZHVsZVBhdGgoYCR7dGhpcy5pZH1CYXNlU2NoZW1hYCwgYHNvbmFtdS5nZW5lcmF0ZWRgKTtcblxuICAgIC8vIHN1YnNldFxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN1YnNldHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIEVudGl0eU1hbmFnZXIuc2V0TW9kdWxlUGF0aChgJHt0aGlzLmlkfVN1YnNldEtleWAsIGBzb25hbXUuZ2VuZXJhdGVkYCk7XG4gICAgICBFbnRpdHlNYW5hZ2VyLnNldE1vZHVsZVBhdGgoYCR7dGhpcy5pZH1TdWJzZXRNYXBwaW5nYCwgYHNvbmFtdS5nZW5lcmF0ZWRgKTtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuc3Vic2V0cykpIHtcbiAgICAgICAgRW50aXR5TWFuYWdlci5zZXRNb2R1bGVQYXRoKFxuICAgICAgICAgIGAke3RoaXMuaWR9U3Vic2V0JHtzdWJzZXRLZXkudG9VcHBlckNhc2UoKX1gLFxuICAgICAgICAgIGBzb25hbXUuZ2VuZXJhdGVkYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnVtc1xuICAgIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuZW51bUxhYmVscykpIHtcbiAgICAgIEVudGl0eU1hbmFnZXIuc2V0TW9kdWxlUGF0aChlbnVtSWQsIGBzb25hbXUuZ2VuZXJhdGVkYCk7XG4gICAgfVxuXG4gICAgLy8gdHlwZXNcbiAgICBjb25zdCB0eXBlc01vZHVsZVBhdGggPSBgJHtiYXNlUGF0aH0vJHt0aGlzLm5hbWVzLnBhcmVudEZzfS50eXBlc2A7XG4gICAgY29uc3QgdHlwZXNGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7dHlwZXNNb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHR5cGVzRmlsZVBhdGgpKSB7XG4gICAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHouWm9kVHlwZUFueT4odHlwZXNGaWxlUGF0aCk7XG4gICAgICB0aGlzLnR5cGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBpbXBvcnRlZE1lbWJlcnMubWFwKCh7IG5hbWUsIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICBFbnRpdHlNYW5hZ2VyLnNldE1vZHVsZVBhdGgobmFtZSwgdHlwZXNNb2R1bGVQYXRoKTtcbiAgICAgICAgICByZXR1cm4gW25hbWUsIHZhbHVlXTtcbiAgICAgICAgfSksXG4gICAgICApIGFzIHsgW25hbWU6IHN0cmluZ106IHouWm9kVHlwZUFueSB9O1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVGFibGVTcGVjcygpOiB2b2lkIHtcbiAgICAvLyDsobDsnbgg7YWM7J2067iUIOyduOuNseyKpCDsoJzsmbggKOy7rOufvCDsnbTrpoTsl5AgJy4n7J20IO2PrO2VqOuQnCDqsr3smrApXG4gICAgY29uc3QgdW5pcXVlSW5kZXhlcyA9IHRoaXMuaW5kZXhlc1xuICAgICAgLmZpbHRlcigoaWR4KSA9PiBpZHgudHlwZSA9PT0gXCJ1bmlxdWVcIilcbiAgICAgIC5maWx0ZXIoKGlkeCkgPT4gaWR4LmNvbHVtbnMuZXZlcnkoKGNvbCkgPT4gIWNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKSkpO1xuXG4gICAgRW50aXR5TWFuYWdlci5zZXRUYWJsZVNwZWMoe1xuICAgICAgbmFtZTogdGhpcy50YWJsZSxcbiAgICAgIHVuaXF1ZUluZGV4ZXMsXG4gICAgfSk7XG4gIH1cblxuICB0b0pzb24oKTogRW50aXR5SnNvbiB7XG4gICAgLy8gc3Vic2V0c+yZgCBzdWJzZXRzSW50ZXJuYWzsnYQgU3Vic2V0RmllbGRbXSDtmJXtg5zroZwg67O17JuQXG4gICAgY29uc3Qgc3Vic2V0czogeyBba2V5OiBzdHJpbmddOiBTdWJzZXRGaWVsZFtdIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLnN1YnNldHMpKSB7XG4gICAgICBjb25zdCBub3JtYWxGaWVsZHM6IFN1YnNldEZpZWxkW10gPSB0aGlzLnN1YnNldHNba2V5XTtcbiAgICAgIGNvbnN0IGludGVybmFsRmllbGRzOiBTdWJzZXRGaWVsZFtdID0gKHRoaXMuc3Vic2V0c0ludGVybmFsW2tleV0gPz8gW10pLm1hcCgoZmllbGQpID0+ICh7XG4gICAgICAgIGZpZWxkLFxuICAgICAgICBpbnRlcm5hbDogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICAgIHN1YnNldHNba2V5XSA9IFsuLi5ub3JtYWxGaWVsZHMsIC4uLmludGVybmFsRmllbGRzXTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBwYXJlbnRJZDogdGhpcy5wYXJlbnRJZCxcbiAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgIGluZGV4ZXM6IHRoaXMuaW5kZXhlcyxcbiAgICAgIHN1YnNldHMsXG4gICAgICBlbnVtczogdGhpcy5lbnVtTGFiZWxzLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIHNvcnQ6IHN1YnNldHNcbiAgICBjb25zdCBzdWJzZXRSb3dzID0gdGhpcy5nZXRTdWJzZXRSb3dzKCk7XG4gICAgdGhpcy5zdWJzZXRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5zdWJzZXRzKS5tYXAoKFtzdWJzZXRLZXldKSA9PiB7XG4gICAgICAgIHJldHVybiBbc3Vic2V0S2V5LCB0aGlzLnN1YnNldFJvd3NUb1N1YnNldEZpZWxkcyhzdWJzZXRSb3dzLCBzdWJzZXRLZXksIGZhbHNlKV07XG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMuc3Vic2V0c0ludGVybmFsID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5zdWJzZXRzSW50ZXJuYWwpLm1hcCgoW3N1YnNldEtleV0pID0+IHtcbiAgICAgICAgcmV0dXJuIFtzdWJzZXRLZXksIHRoaXMuc3Vic2V0Um93c1RvU3Vic2V0RmllbGRzKHN1YnNldFJvd3MsIHN1YnNldEtleSwgdHJ1ZSldO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIHNhdmVcbiAgICBjb25zdCBqc29uUGF0aCA9IHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIGBzcmMvYXBwbGljYXRpb24vJHt0aGlzLm5hbWVzLnBhcmVudEZzfS8ke3RoaXMubmFtZXMuZnN9LmVudGl0eS5qc29uYCxcbiAgICApO1xuICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSnNvbigpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShqc29uUGF0aCwgZm9ybWF0Q29kZShKU09OLnN0cmluZ2lmeShqc29uKSwgXCJqc29uXCIsIGpzb25QYXRoKSk7XG5cbiAgICAvLyByZWxvYWRcbiAgICBhd2FpdCBFbnRpdHlNYW5hZ2VyLnJlZ2lzdGVyKGpzb24pO1xuICB9XG5cbiAgZ2V0U3Vic2V0Um93cyhcbiAgICBfc3Vic2V0cz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSxcbiAgICBfc3Vic2V0c0ludGVybmFsPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9LFxuICAgIHByZWZpeGVzOiBzdHJpbmdbXSA9IFtdLFxuICApOiBFbnRpdHlTdWJzZXRSb3dbXSB7XG4gICAgaWYgKHByZWZpeGVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0cyA9IF9zdWJzZXRzID8/IHRoaXMuc3Vic2V0cztcbiAgICBjb25zdCBzdWJzZXRzSW50ZXJuYWwgPSBfc3Vic2V0c0ludGVybmFsID8/IHRoaXMuc3Vic2V0c0ludGVybmFsO1xuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhzdWJzZXRzKTtcbiAgICBjb25zdCBhbGxGaWVsZHMgPSB1bmlxdWUoc3Vic2V0S2V5cy5mbGF0TWFwKChrZXkpID0+IHN1YnNldHNba2V5XSkpO1xuICAgIC8vIGludGVybmFsIO2VhOuTnOuPhCBhbGxGaWVsZHPsl5Ag7Y+s7ZWoIChyZWxhdGlvbiDtg5Dsg4nsmqkpXG4gICAgY29uc3QgYWxsSW50ZXJuYWxGaWVsZHMgPSB1bmlxdWUoc3Vic2V0S2V5cy5mbGF0TWFwKChrZXkpID0+IHN1YnNldHNJbnRlcm5hbFtrZXldID8/IFtdKSk7XG4gICAgY29uc3QgY29tYmluZWRGaWVsZHMgPSB1bmlxdWUoWy4uLmFsbEZpZWxkcywgLi4uYWxsSW50ZXJuYWxGaWVsZHNdKTtcblxuICAgIHJldHVybiB0aGlzLnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBwcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiAmJlxuICAgICAgICBjb21iaW5lZEZpZWxkcy5maW5kKChmKSA9PiBmLnN0YXJ0c1dpdGgoYCR7Wy4uLnByZWZpeGVzLCBwcm9wLm5hbWVdLmpvaW4oXCIuXCIpfS5gKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHJlbEVudGl0eS5nZXRTdWJzZXRSb3dzKHN1YnNldHMsIHN1YnNldHNJbnRlcm5hbCwgW1xuICAgICAgICAgIC4uLnByZWZpeGVzLFxuICAgICAgICAgIGAke3Byb3AubmFtZX1gLFxuICAgICAgICBdKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkOiBwcm9wLm5hbWUsXG4gICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgcmVsYXRpb25FbnRpdHk6IHByb3Aud2l0aCxcbiAgICAgICAgICBwcmVmaXhlcyxcbiAgICAgICAgICBpc09wZW46IGNoaWxkcmVuLmxlbmd0aCA+IDAsXG4gICAgICAgICAgaGFzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBzdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBbc3Vic2V0S2V5LCBjaGlsZHJlbi5ldmVyeSgoY2hpbGQpID0+IGNoaWxkLmhhc1tzdWJzZXRLZXldID09PSB0cnVlKV07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICAgIGlzSW50ZXJuYWw6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgIHN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtzdWJzZXRLZXksIGNoaWxkcmVuLmV2ZXJ5KChjaGlsZCkgPT4gY2hpbGQuaXNJbnRlcm5hbFtzdWJzZXRLZXldID09PSB0cnVlKV07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZCA9IFsuLi5wcmVmaXhlcywgcHJvcC5uYW1lXS5qb2luKFwiLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpZWxkOiBwcm9wLm5hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgcmVsYXRpb25FbnRpdHk6IHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiID8gcHJvcC53aXRoIDogdW5kZWZpbmVkLFxuICAgICAgICBwcmVmaXhlcyxcbiAgICAgICAgaGFzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2V0RmllbGRzID0gc3Vic2V0c1tzdWJzZXRLZXldO1xuICAgICAgICAgICAgY29uc3QgaGFzID0gc3Vic2V0RmllbGRzLnNvbWUoKGYpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGYgPT09IGZpZWxkIHx8IGYuc3RhcnRzV2l0aChgJHtmaWVsZH0uYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBbc3Vic2V0S2V5LCBoYXNdO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgICBpc0ludGVybmFsOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxGaWVsZHMgPSBzdWJzZXRzSW50ZXJuYWxbc3Vic2V0S2V5XSA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW50ZXJuYWwgPSBpbnRlcm5hbEZpZWxkcy5zb21lKChmKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBmID09PSBmaWVsZCB8fCBmLnN0YXJ0c1dpdGgoYCR7ZmllbGR9LmApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gW3N1YnNldEtleSwgaXNJbnRlcm5hbF07XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc3Vic2V0Um93c1RvU3Vic2V0RmllbGRzKFxuICAgIHN1YnNldFJvd3M6IEVudGl0eVN1YnNldFJvd1tdLFxuICAgIHN1YnNldEtleTogc3RyaW5nLFxuICAgIGludGVybmFsOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBoYXNLZXkgPSBpbnRlcm5hbCA/IFwiaXNJbnRlcm5hbFwiIDogXCJoYXNcIjtcbiAgICByZXR1cm4gc3Vic2V0Um93c1xuICAgICAgLm1hcCgoc3Vic2V0Um93KSA9PiB7XG4gICAgICAgIGlmIChzdWJzZXRSb3cuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN1YnNldFJvd3NUb1N1YnNldEZpZWxkcyhzdWJzZXRSb3cuY2hpbGRyZW4sIHN1YnNldEtleSwgaW50ZXJuYWwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN1YnNldFJvd1toYXNLZXldW3N1YnNldEtleV0pIHtcbiAgICAgICAgICByZXR1cm4gc3Vic2V0Um93LnByZWZpeGVzLmNvbmNhdChzdWJzZXRSb3cuZmllbGQpLmpvaW4oXCIuXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihub25OdWxsYWJsZSlcbiAgICAgIC5mbGF0KCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVQcm9wKHByb3A6IEVudGl0eVByb3AsIGF0PzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFhdCkge1xuICAgICAgdGhpcy5wcm9wcy5wdXNoKHByb3ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb3BzLnNwbGljZShhdCwgMCwgcHJvcCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2F2ZSgpO1xuICB9XG5cbiAgYW5hbHl6ZVN1YnNldEZpZWxkKHN1YnNldEZpZWxkOiBzdHJpbmcpOiB7XG4gICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICBwcm9wTmFtZTogc3RyaW5nO1xuICB9W10ge1xuICAgIGNvbnN0IGFyciA9IHN1YnNldEZpZWxkLnNwbGl0KFwiLlwiKTtcblxuICAgIGxldCBlbnRpdHlJZCA9IHRoaXMuaWQ7XG4gICAgY29uc3QgcmVzdWx0OiB7XG4gICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgcHJvcE5hbWU6IHN0cmluZztcbiAgICB9W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBhcnJbaV07XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGVudGl0eUlkLFxuICAgICAgICBwcm9wTmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwcm9wID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcHJvcE5hbWUpO1xuICAgICAgaWYgKCFwcm9wKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnRpdHlJZH3snZgg7J6Y66q765CcIOyEnOu4jOyFi+2CpCAke3N1YnNldEZpZWxkfWApO1xuICAgICAgfVxuICAgICAgaWYgKGlzUmVsYXRpb25Qcm9wKHByb3ApKSB7XG4gICAgICAgIGVudGl0eUlkID0gcHJvcC53aXRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgbW9kaWZ5UHJvcChuZXdQcm9wOiBFbnRpdHlQcm9wLCBhdDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7J207KCEIO2UhOuhrSDsnbTrpoQg7KCA7J6lXG4gICAgY29uc3Qgb2xkTmFtZSA9IHRoaXMucHJvcHNbYXRdLm5hbWU7XG5cbiAgICAvLyDsoIDsnqXtlaAg7JeU7Yuw7YuwXG4gICAgY29uc3QgZW50aXRpZXM6IEVudGl0eVtdID0gW3RoaXNdO1xuXG4gICAgLy8g7J2066aE7J20IOuwlOuAkCDqsr3smrBcbiAgICBpZiAob2xkTmFtZSAhPT0gbmV3UHJvcC5uYW1lKSB7XG4gICAgICAvLyDsoITssrQg7JeU7Yuw7Yuw7JeQ7IScIO2YhOyerCDsiJjsoJXrkJwg7ZSE66Gt7J2EIOywuOyhsO2VmOqzoCDsnojripQg66qo65OgIOyEnOu4jOyFi+2VhOuTnCDssL7slYTshJwg7IiY7KCVXG4gICAgICBjb25zdCBhbGxFbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgZm9yIChjb25zdCByZWxFbnRpdHlJZCBvZiBhbGxFbnRpdHlJZHMpIHtcbiAgICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsRW50aXR5SWQpO1xuICAgICAgICBjb25zdCByZWxFbnRpdHlTdWJzZXRLZXlzID0gT2JqZWN0LmtleXMocmVsRW50aXR5LnN1YnNldHMpO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YnNldEtleSBvZiByZWxFbnRpdHlTdWJzZXRLZXlzKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic2V0ID0gcmVsRW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcblxuICAgICAgICAgIC8vIOyEnOu4jOyFiyDtlYTrk5zrpbwg7Iic7ZqM7ZWY66mwLCDsl5Tti7Dti7At7ZSE66GtIOuLqOychOuhnCDrtoTshJ3tlZwg7ZuEIO2YhOyerCDsl5Tti7Dti7At7ZSE66Gt6rO8IOydvOy5mO2VmOuKlCDqsr3smrAg7IiY7KCVIOyymOumrFxuICAgICAgICAgIGNvbnN0IG1vZGlmaWVkU3Vic2V0RmllbGRzID0gc3Vic2V0Lm1hcCgoc3Vic2V0RmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFuYWx5emVkID0gcmVsRW50aXR5LmFuYWx5emVTdWJzZXRGaWVsZChzdWJzZXRGaWVsZCk7XG4gICAgICAgICAgICBjb25zdCBtb2RpZmllZCA9IGFuYWx5emVkLm1hcCgoYSkgPT5cbiAgICAgICAgICAgICAgYS5wcm9wTmFtZSA9PT0gb2xkTmFtZSAmJiBhLmVudGl0eUlkID09PSB0aGlzLmlkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmEsXG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lOiBuZXdQcm9wLm5hbWUsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBhLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIOu2hOyEne2VnCDtlYTrk5zrpbwg64uk7IucIOyEnOu4jOyFiyDtlYTrk5zroZwg67O16rWsXG4gICAgICAgICAgICByZXR1cm4gbW9kaWZpZWQubWFwKChhKSA9PiBhLnByb3BOYW1lKS5qb2luKFwiLlwiKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChzdWJzZXQuam9pbihcIixcIikgIT09IG1vZGlmaWVkU3Vic2V0RmllbGRzLmpvaW4oXCIsXCIpKSB7XG4gICAgICAgICAgICByZWxFbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldID0gbW9kaWZpZWRTdWJzZXRGaWVsZHM7XG4gICAgICAgICAgICBlbnRpdGllcy5wdXNoKHJlbEVudGl0eSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g7ZSE66GtIOyImOyglVxuICAgIHRoaXMucHJvcHNbYXRdID0gbmV3UHJvcDtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGVudGl0aWVzLm1hcChhc3luYyAoZW50aXR5KSA9PiBlbnRpdHkuc2F2ZSgpKSk7XG4gIH1cblxuICBhc3luYyBkZWxQcm9wKGF0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyDsnbTsoIQg7ZSE66GtIOydtOumhCDsoIDsnqVcbiAgICBjb25zdCBvbGROYW1lID0gdGhpcy5wcm9wc1thdF0ubmFtZTtcblxuICAgIC8vIOyggOyepe2VoCDsl5Tti7Dti7BcbiAgICBjb25zdCBlbnRpdGllczogRW50aXR5W10gPSBbdGhpc107XG5cbiAgICAvLyDsoITssrQg7JeU7Yuw7Yuw7JeQ7IScIO2YhOyerCDsgq3soJzrkJwg7ZSE66Gt7J2EIOywuOyhsO2VmOqzoCDsnojripQg66qo65OgIOyEnOu4jOyFi+2VhOuTnCDssL7slYTshJwg7KCc7Jm4XG4gICAgY29uc3QgYWxsRW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBmb3IgKGNvbnN0IHJlbEVudGl0eUlkIG9mIGFsbEVudGl0eUlkcykge1xuICAgICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsRW50aXR5SWQpO1xuICAgICAgY29uc3QgcmVsRW50aXR5U3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKHJlbEVudGl0eS5zdWJzZXRzKTtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIHJlbEVudGl0eVN1YnNldEtleXMpIHtcbiAgICAgICAgY29uc3Qgc3Vic2V0ID0gcmVsRW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgICAgICAgLy8g7ISc67iM7IWLIO2VhOuTnOulvCDsiJztmoztlZjrqbAsIOyXlO2LsO2LsC3tlITroa0g64uo7JyE66GcIOu2hOyEne2VnCDtm4Qg7ZiE7J6sIOyXlO2LsO2LsC3tlITroa3qs7wg7J287LmY7ZWY64qUIOqyveyasCDsnbTtm4TsnZgg7ZWE65Oc66W8IOygnOyZuFxuICAgICAgICBjb25zdCBtb2RpZmllZFN1YnNldEZpZWxkcyA9IHN1YnNldFxuICAgICAgICAgIC5tYXAoKHN1YnNldEZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbmFseXplZCA9IHJlbEVudGl0eS5hbmFseXplU3Vic2V0RmllbGQoc3Vic2V0RmllbGQpO1xuICAgICAgICAgICAgaWYgKGFuYWx5emVkLmZpbmQoKGEpID0+IGEucHJvcE5hbWUgPT09IG9sZE5hbWUgJiYgYS5lbnRpdHlJZCA9PT0gdGhpcy5pZCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gc3Vic2V0RmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKG5vbk51bGxhYmxlKTtcblxuICAgICAgICBpZiAoc3Vic2V0LmpvaW4oXCIsXCIpICE9PSBtb2RpZmllZFN1YnNldEZpZWxkcy5qb2luKFwiLFwiKSkge1xuICAgICAgICAgIHJlbEVudGl0eS5zdWJzZXRzW3N1YnNldEtleV0gPSBtb2RpZmllZFN1YnNldEZpZWxkcztcbiAgICAgICAgICBlbnRpdGllcy5wdXNoKHJlbEVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDtmITsnqwg7JeU7Yuw7Yuw7J2YIOyduOuNseyKpOyXkOyEnCDsoJzsmbhcbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIEVudGl0eU1hbmFnZXIuZ2V0KHRoaXMuaWQpLmluZGV4ZXMpIHtcbiAgICAgIGluZGV4LmNvbHVtbnMgPSBpbmRleC5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gb2xkTmFtZSk7XG4gICAgfVxuXG4gICAgLy8g7ZSE66GtIOyCreygnFxuICAgIHRoaXMucHJvcHMuc3BsaWNlKGF0LCAxKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGVudGl0aWVzLm1hcChhc3luYyAoZW50aXR5KSA9PiBlbnRpdHkuc2F2ZSgpKSk7XG4gIH1cblxuICBnZXRFbnRpdHlJZEZyb21TdWJzZXRGaWVsZChzdWJzZXRGaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoc3Vic2V0RmllbGQuaW5jbHVkZXMoXCIuXCIpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgLy8g7ISc67iM7IWLIO2VhOuTnOydmCDrp4jsp4Drp4nsnYAg7ZSE66Gt7J2066+A66GcIOygnOyZuFxuICAgIGNvbnN0IGFyciA9IHN1YnNldEZpZWxkLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAtMSk7XG5cbiAgICAvLyDshJzruIzshYsg7ZWE65Oc66W8IOuCtOugpOqwgOuptOyEnCDrp4jsp4Drp4nsnLzroZwgcmVsYXRpb27rkJwg7JeU7Yuw7Yuw66W8IOywvuydjFxuICAgIGNvbnN0IGxhc3RFbnRpdHlJZCA9IGFyci5yZWR1Y2UoKGVudGl0eUlkLCBmaWVsZCkgPT4ge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGZpZWxkKTtcbiAgICAgIGlmICghcmVsUHJvcCB8fCByZWxQcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIikge1xuICAgICAgICBjb25zb2xlLmRlYnVnKHsgYXJyLCB0aGlzSWQ6IHRoaXMuaWQsIGVudGl0eUlkLCBmaWVsZCB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwg7ISc67iM7IWL7YKkICR7c3Vic2V0RmllbGR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVsUHJvcC53aXRoO1xuICAgIH0sIHRoaXMuaWQpO1xuICAgIHJldHVybiBsYXN0RW50aXR5SWQ7XG4gIH1cblxuICBhc3luYyBtb3ZlUHJvcChhdDogbnVtYmVyLCB0bzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJvcCA9IHRoaXMucHJvcHNbYXRdO1xuICAgIGNvbnN0IG5ld1Byb3BzID0gWy4uLnRoaXMucHJvcHNdO1xuICAgIG5ld1Byb3BzLnNwbGljZSh0bywgMCwgcHJvcCk7XG4gICAgbmV3UHJvcHMuc3BsaWNlKGF0IDwgdG8gPyBhdCA6IGF0ICsgMSwgMSk7XG4gICAgdGhpcy5wcm9wcyA9IG5ld1Byb3BzO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlKCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJ3cml0ZUZpbGUiLCJpbmZsZWN0aW9uIiwicGF0aCIsImdyb3VwIiwidW5pcXVlIiwieiIsIlNvbmFtdSIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNFbnVtUHJvcCIsImlzSGFzTWFueVJlbGF0aW9uUHJvcCIsImlzSW50ZXJuYWxTdWJzZXRGaWVsZCIsImlzTWFueVRvTWFueVJlbGF0aW9uUHJvcCIsImlzT25lVG9PbmVSZWxhdGlvblByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImlzVmlydHVhbENvZGVQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsIm5vcm1hbGl6ZVN1YnNldEZpZWxkIiwiaW1wb3J0TWVtYmVycyIsImZvcm1hdENvZGUiLCJleGlzdHMiLCJydW50aW1lUGF0aCIsImFzc2VydERlZmluZWQiLCJub25OdWxsYWJsZSIsIkVudGl0eU1hbmFnZXIiLCJFbnRpdHkiLCJpZCIsInBhcmVudElkIiwidGFibGUiLCJ0aXRsZSIsIm5hbWVzIiwicHJvcHMiLCJwcm9wc0RpY3QiLCJyZWxhdGlvbnMiLCJpbmRleGVzIiwic3Vic2V0cyIsInN1YnNldHNJbnRlcm5hbCIsInR5cGVzIiwiZW51bXMiLCJlbnVtTGFiZWxzIiwidW5kZXJzY29yZSIsInBsdXJhbGl6ZSIsIm1hcCIsInByb3AiLCJpbmNsdWRlcyIsInJlcGxhY2UiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsIm5hbWUiLCJmaWx0ZXIiLCJrZXkiLCJmaWVsZHMiLCJlbnRyaWVzIiwiZiIsImVudW1MYWJlbCIsImVudW0iLCJrZXlzIiwicGFyZW50RnMiLCJkYXNoZXJpemUiLCJ0b0xvd2VyQ2FzZSIsImZzIiwibW9kdWxlIiwiZ2V0U3Vic2V0RmllbGRzRm9yUXVlcnkiLCJzdWJzZXRLZXkiLCJnZXRQdXJpU3Vic2V0UXVlcnkiLCJzdWJzZXQiLCJzdWJzZXRRdWVyeSIsInJlc29sdmVTdWJzZXRRdWVyeSIsImxpbmVzIiwicHVzaCIsImpvaW4iLCJqb2lucyIsImpvaW5NZXRob2QiLCJhcyIsImN1c3RvbSIsImZyb20iLCJ0byIsInNlbGVjdE9iaiIsImJ1aWxkTmVzdGVkU2VsZWN0T2JqZWN0Iiwic2VsZWN0Iiwic3RyaW5naWZ5TmVzdGVkU2VsZWN0T2JqZWN0Iiwic2VsZWN0SXRlbXMiLCJyZXN1bHQiLCJzZWxlY3RJdGVtIiwibWF0Y2giLCJjb2x1bW4iLCJhbGlhcyIsImNvbHVtblZhbHVlIiwidHJpbSIsInNwbGl0IiwicG9wIiwicGFydHMiLCJjdXJyZW50IiwiaSIsImxlbmd0aCIsInBhcnQiLCJFcnJvciIsInNsaWNlIiwibGFzdFBhcnQiLCJvYmoiLCJpbmRlbnQiLCJ3aXRoQnJhY2VzIiwic3BhY2VzIiwicmVwZWF0IiwiaW5uZXJTcGFjZXMiLCJ2YWx1ZSIsImdldFB1cmlMb2FkZXJRdWVyeSIsImxvYWRlcnMiLCJnZW5lcmF0ZUxvYWRlckNvZGUiLCJsb2FkZXJMaW5lcyIsImxvYWRlciIsInRvVGFibGUiLCJ0b0NvbCIsInRocm91Z2giLCJtYW55Sm9pbiIsImlkRmllbGQiLCJ1bmRlZmluZWQiLCJvbmVKb2lucyIsImZvckVhY2giLCJyZWZJZCIsImZyb21Db2wiLCJnZXRTdWJzZXRRdWVyeSIsInByZWZpeCIsImlzQWxyZWFkeU91dGVySm9pbmVkIiwic3Vic2V0R3JvdXAiLCJmaWVsZCIsInJlbCIsInJlZHVjZSIsInIiLCJncm91cEtleSIsInJlYWxGaWVsZHMiLCJ2aXJ0dWFsQ29kZUZpZWxkcyIsImNvbmNhdCIsInZpcnR1YWwiLCJyZWxhdGlvbiIsInJlbEVudGl0eSIsImdldCIsIndpdGgiLCJyZWxGaWVsZHMiLCJpbm5lck9yT3V0ZXIiLCJoYXNKb2luQ29sdW1uIiwibnVsbGFibGUiLCJyZWxTdWJzZXRRdWVyeSIsImpvaW5BcyIsImZyb21UYWJsZSIsImpvaW5DbGF1c2UiLCJjdXN0b21Kb2luQ2xhdXNlIiwiY29udmVydGVkTG9hZGVycyIsIm5ld0FzIiwiZnJvbUNvbHVtbiIsImpvaW5Db2x1bW4iLCJqb2luVGFibGUiLCJzaW5ndWxhcml6ZSIsImZpZWxkRXhwcnNUb1Byb3BOb2RlcyIsImZpZWxkRXhwcnMiLCJlbnRpdHkiLCJncm91cHMiLCJmaWVsZEV4cHIiLCJlbHNlRXhwciIsImZsYXRNYXAiLCJwcm9wTmFtZSIsImZpbmQiLCJwIiwiY29uc29sZSIsImxvZyIsIm5vZGVUeXBlIiwiaWRQcm9wIiwiY2hpbGRyZW4iLCJnZXRGaWVsZEV4cHJzIiwibWF4RGVwdGgiLCJmcm9tcyIsInYiLCJyZWxNZCIsImdldFRhYmxlQ29sdW1ucyIsInR5cGUiLCJyZWxhdGlvblR5cGUiLCJnZXRWZWN0b3JDb2x1bW5zIiwiZ2V0VmVjdG9yQ29sdW1uIiwiY29sdW1uTmFtZSIsInZlY3RvclByb3BzIiwicmVnaXN0ZXJNb2R1bGVQYXRocyIsImJhc2VQYXRoIiwic2V0TW9kdWxlUGF0aCIsInRvVXBwZXJDYXNlIiwiZW51bUlkIiwidHlwZXNNb2R1bGVQYXRoIiwidHlwZXNGaWxlUGF0aCIsImFwaVJvb3RQYXRoIiwiaW1wb3J0ZWRNZW1iZXJzIiwicmVnaXN0ZXJUYWJsZVNwZWNzIiwidW5pcXVlSW5kZXhlcyIsImlkeCIsImNvbHVtbnMiLCJldmVyeSIsImNvbCIsInNldFRhYmxlU3BlYyIsInRvSnNvbiIsIm5vcm1hbEZpZWxkcyIsImludGVybmFsRmllbGRzIiwiaW50ZXJuYWwiLCJzYXZlIiwic3Vic2V0Um93cyIsImdldFN1YnNldFJvd3MiLCJzdWJzZXRSb3dzVG9TdWJzZXRGaWVsZHMiLCJqc29uUGF0aCIsImpzb24iLCJKU09OIiwic3RyaW5naWZ5IiwicmVnaXN0ZXIiLCJfc3Vic2V0cyIsIl9zdWJzZXRzSW50ZXJuYWwiLCJwcmVmaXhlcyIsInN1YnNldEtleXMiLCJhbGxGaWVsZHMiLCJhbGxJbnRlcm5hbEZpZWxkcyIsImNvbWJpbmVkRmllbGRzIiwic3RhcnRzV2l0aCIsInJlbGF0aW9uRW50aXR5IiwiaXNPcGVuIiwiaGFzIiwiY2hpbGQiLCJpc0ludGVybmFsIiwic3Vic2V0RmllbGRzIiwic29tZSIsImhhc0tleSIsInN1YnNldFJvdyIsImZsYXQiLCJjcmVhdGVQcm9wIiwiYXQiLCJzcGxpY2UiLCJhbmFseXplU3Vic2V0RmllbGQiLCJzdWJzZXRGaWVsZCIsImFyciIsImVudGl0eUlkIiwibW9kaWZ5UHJvcCIsIm5ld1Byb3AiLCJvbGROYW1lIiwiZW50aXRpZXMiLCJhbGxFbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJyZWxFbnRpdHlJZCIsInJlbEVudGl0eVN1YnNldEtleXMiLCJtb2RpZmllZFN1YnNldEZpZWxkcyIsImFuYWx5emVkIiwibW9kaWZpZWQiLCJhIiwiUHJvbWlzZSIsImFsbCIsImRlbFByb3AiLCJpbmRleCIsImdldEVudGl0eUlkRnJvbVN1YnNldEZpZWxkIiwibGFzdEVudGl0eUlkIiwicmVsUHJvcCIsImRlYnVnIiwidGhpc0lkIiwibW92ZVByb3AiLCJuZXdQcm9wcyJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLFNBQVNDLFNBQVMsUUFBUSxtQkFBYztBQUN4QyxPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsS0FBSyxFQUFFQyxNQUFNLFFBQVEsVUFBVTtBQUN4QyxTQUFTQyxDQUFDLFFBQVEsTUFB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
|
|
884
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnRpdHkvZW50aXR5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGdyb3VwLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGkvc29uYW11XCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eUpzb24sXG4gIHR5cGUgRW50aXR5UHJvcCxcbiAgdHlwZSBFbnRpdHlQcm9wTm9kZSxcbiAgdHlwZSBFbnRpdHlTdWJzZXRSb3csXG4gIGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wLFxuICBpc0VudW1Qcm9wLFxuICBpc0hhc01hbnlSZWxhdGlvblByb3AsXG4gIGlzSW50ZXJuYWxTdWJzZXRGaWVsZCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc09uZVRvT25lUmVsYXRpb25Qcm9wLFxuICBpc1JlbGF0aW9uUHJvcCxcbiAgaXNWaXJ0dWFsQ29kZVByb3AsXG4gIGlzVmlydHVhbFByb3AsXG4gIG5vcm1hbGl6ZVN1YnNldEZpZWxkLFxuICB0eXBlIFJlbGF0aW9uUHJvcCxcbiAgdHlwZSBTdWJzZXRGaWVsZCxcbiAgdHlwZSBTdWJzZXRRdWVyeSxcbn0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgZm9ybWF0Q29kZSB9IGZyb20gXCIuLi91dGlscy9mb3JtYXR0ZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgcnVudGltZVBhdGggfSBmcm9tIFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiO1xuaW1wb3J0IHsgYXNzZXJ0RGVmaW5lZCwgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi9lbnRpdHktbWFuYWdlclwiO1xuXG5leHBvcnQgY2xhc3MgRW50aXR5IHtcbiAgaWQ6IHN0cmluZztcbiAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIHRhYmxlOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG5hbWVzOiB7XG4gICAgcGFyZW50RnM6IHN0cmluZztcbiAgICBmczogc3RyaW5nO1xuICAgIG1vZHVsZTogc3RyaW5nO1xuICB9O1xuICBwcm9wczogRW50aXR5UHJvcFtdO1xuICBwcm9wc0RpY3Q6IHtcbiAgICBba2V5OiBzdHJpbmddOiBFbnRpdHlQcm9wO1xuICB9O1xuICByZWxhdGlvbnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBSZWxhdGlvblByb3A7XG4gIH07XG4gIGluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gIHN1YnNldHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgfTtcbiAgc3Vic2V0c0ludGVybmFsOiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gIH07XG4gIHR5cGVzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IHouWm9kVHlwZUFueTtcbiAgfSA9IHt9O1xuICBlbnVtczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IHouWm9kRW51bTxSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pj47XG4gIH0gPSB7fTtcbiAgZW51bUxhYmVsczoge1xuICAgIFtlbnVtSWQ6IHN0cmluZ106IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICB9ID0ge307XG5cbiAgY29uc3RydWN0b3IoeyBpZCwgcGFyZW50SWQsIHRhYmxlLCB0aXRsZSwgcHJvcHMsIGluZGV4ZXMsIHN1YnNldHMsIGVudW1zIH06IEVudGl0eUpzb24pIHtcbiAgICAvLyBpZFxuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnBhcmVudElkID0gcGFyZW50SWQ7XG4gICAgdGhpcy50aXRsZSA9IHRpdGxlID8/IHRoaXMuaWQ7XG4gICAgdGhpcy50YWJsZSA9IHRhYmxlID8/IGluZmxlY3Rpb24udW5kZXJzY29yZShpbmZsZWN0aW9uLnBsdXJhbGl6ZShpZCkpO1xuXG4gICAgLy8gcHJvcHNcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgICAgaWYgKGlzRW51bVByb3AocHJvcCkpIHtcbiAgICAgICAgICBpZiAocHJvcC5pZC5pbmNsdWRlcyhcIiRNb2RlbFwiKSkge1xuICAgICAgICAgICAgcHJvcC5pZCA9IHByb3AuaWQucmVwbGFjZShcIiRNb2RlbFwiLCBpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnByb3BzRGljdCA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgcHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtwcm9wLm5hbWUsIHByb3BdO1xuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIC8vIHJlbGF0aW9uc1xuICAgICAgdGhpcy5yZWxhdGlvbnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHByb3BzLmZpbHRlcigocHJvcCkgPT4gaXNSZWxhdGlvblByb3AocHJvcCkpLm1hcCgocHJvcCkgPT4gW3Byb3AubmFtZSwgcHJvcF0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wcyA9IFtdO1xuICAgICAgdGhpcy5wcm9wc0RpY3QgPSB7fTtcbiAgICAgIHRoaXMucmVsYXRpb25zID0ge307XG4gICAgfVxuXG4gICAgLy8gaW5kZXhlc1xuICAgIHRoaXMuaW5kZXhlcyA9IGluZGV4ZXMgPz8gW107XG5cbiAgICAvLyBzdWJzZXRzOiBTdWJzZXRGaWVsZFtd66W8IO2MjOyLse2VmOyXrCBzdWJzZXRzKOydvOuwmCnsmYAgc3Vic2V0c0ludGVybmFsKGludGVybmFsKeuhnCDrtoTrpqxcbiAgICB0aGlzLnN1YnNldHMgPSB7fTtcbiAgICB0aGlzLnN1YnNldHNJbnRlcm5hbCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRzXSBvZiBPYmplY3QuZW50cmllcyhzdWJzZXRzID8/IHt9KSkge1xuICAgICAgdGhpcy5zdWJzZXRzW2tleV0gPSBmaWVsZHMuZmlsdGVyKChmKSA9PiAhaXNJbnRlcm5hbFN1YnNldEZpZWxkKGYpKS5tYXAobm9ybWFsaXplU3Vic2V0RmllbGQpO1xuICAgICAgdGhpcy5zdWJzZXRzSW50ZXJuYWxba2V5XSA9IGZpZWxkcy5maWx0ZXIoaXNJbnRlcm5hbFN1YnNldEZpZWxkKS5tYXAobm9ybWFsaXplU3Vic2V0RmllbGQpO1xuICAgIH1cblxuICAgIC8vIGVudW1zXG4gICAgdGhpcy5lbnVtTGFiZWxzID0gZW51bXMgPz8ge307XG4gICAgdGhpcy5lbnVtcyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZW51bUxhYmVscykubWFwKChba2V5LCBlbnVtTGFiZWxdKSA9PiB7XG4gICAgICAgIHJldHVybiBba2V5LCB6LmVudW0oT2JqZWN0LmtleXMoZW51bUxhYmVsKSBhcyB1bmtub3duIGFzIHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSldO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIG5hbWVzXG4gICAgdGhpcy5uYW1lcyA9IHtcbiAgICAgIHBhcmVudEZzOiBpbmZsZWN0aW9uLmRhc2hlcml6ZShpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGFyZW50SWQgPz8gaWQpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgZnM6IGluZmxlY3Rpb24uZGFzaGVyaXplKGluZmxlY3Rpb24udW5kZXJzY29yZShpZCkpLnRvTG93ZXJDYXNlKCksXG4gICAgICBtb2R1bGU6IGlkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7L+866as7JqpIOyEnOu4jOyFiyDtlYTrk5zrpbwg67CY7ZmY7ZWp64uI64ukIChzdWJzZXRzICsgc3Vic2V0c0ludGVybmFsIO2Vqey5qClcbiAgICovXG4gIGdldFN1YnNldEZpZWxkc0ZvclF1ZXJ5KHN1YnNldEtleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuc3Vic2V0c1tzdWJzZXRLZXldID8/IFtdKSwgLi4uKHRoaXMuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV0gPz8gW10pXTtcbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7J2066aEKHN1YnNldEtleSnsnZggc3Vic2V07J2EIOyLpOygnOuhnCDqsIDsoLjsmKTripQgUHVyaSDsvZTrk5wg6rWs7ZiE7LK0IHN0cmluZ+ydhCDrsJjtmZjtlanri4jri6QuXG4gICAqL1xuICBnZXRQdXJpU3Vic2V0UXVlcnkoc3Vic2V0S2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1YnNldCA9IHRoaXMuZ2V0U3Vic2V0RmllbGRzRm9yUXVlcnkoc3Vic2V0S2V5KTtcbiAgICBjb25zdCBzdWJzZXRRdWVyeSA9IHRoaXMucmVzb2x2ZVN1YnNldFF1ZXJ5KFwiXCIsIHN1YnNldCk7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGZyb21cbiAgICBsaW5lcy5wdXNoKGByZXR1cm4gcWJXcmFwcGVyYCk7XG4gICAgbGluZXMucHVzaChgLmZyb20oXCIke3RoaXMudGFibGV9XCIpYCk7XG5cbiAgICAvLyBqb2luXG4gICAgZm9yIChjb25zdCBqb2luIG9mIHN1YnNldFF1ZXJ5LmpvaW5zKSB7XG4gICAgICAvLyBqb2luIOuplOyEnOuTnCDqsrDsoJU6IGlubmVyIOKGkiBqb2luLCBvdXRlciDihpIgbGVmdEpvaW5cbiAgICAgIC8vIEZLIG51bGxhYmxlIOyXrOu2gOuKlCBsZWZ0Sm9pbiDtg4DsnoUg7Iuc6re464uI7LKY7JeQ7IScIOyekOuPmeycvOuhnCDtjJDri6jrkKhcbiAgICAgIGNvbnN0IGpvaW5NZXRob2QgPSBqb2luLmpvaW4gPT09IFwiaW5uZXJcIiA/IFwiam9pblwiIDogXCJsZWZ0Sm9pblwiO1xuXG4gICAgICBpZiAoXCJjdXN0b21cIiBpbiBqb2luKSB7XG4gICAgICAgIC8vIGN1c3RvbSBqb2luIGNsYXVzZeuKlCByYXcg7IKs7JqpXG4gICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgYC4ke2pvaW5NZXRob2R9KHsgJHtqb2luLmFzfTogXCIke2pvaW4udGFibGV9XCIgfSwgcWJXcmFwcGVyLmtuZXgucmF3KFxcYCR7am9pbi5jdXN0b219XFxgKSlgLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGluZXMucHVzaChgLiR7am9pbk1ldGhvZH0oeyAke2pvaW4uYXN9OiBcIiR7am9pbi50YWJsZX1cIiB9LCBcIiR7am9pbi5mcm9tfVwiLCBcIiR7am9pbi50b31cIilgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgLSDsnoXssrTsoIEg6rWs7KGw66GcIOyDneyEsVxuICAgIGNvbnN0IHNlbGVjdE9iaiA9IHRoaXMuYnVpbGROZXN0ZWRTZWxlY3RPYmplY3Qoc3Vic2V0UXVlcnkuc2VsZWN0KTtcbiAgICBsaW5lcy5wdXNoKGAuc2VsZWN0KCR7dGhpcy5zdHJpbmdpZnlOZXN0ZWRTZWxlY3RPYmplY3Qoc2VsZWN0T2JqKX0pO2ApO1xuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICAvKipcbiAgICogKi5lbnRpdHkuanNvbuydmCBzdWJzZXTsl5Ag65Ok7Ja07J6I64qUIO2VhOuTnCDrsLDsl7TsnYQg67Cb7JWE7IScLFxuICAgKiBQdXJp7J2YIFNlbGVjdE9iamVjdCDtg4DsnoXsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICAgKlxuICAgKiDsmIg6IFtcInVzZXJzLmlkXCIsIFwicGFyZW50LmlkXCIsIFwicGFyZW50Lm5hbWVcIl1cbiAgICogICDihpIgeyBpZDogXCJ1c2Vycy5pZFwiLCBwYXJlbnQ6IHsgaWQ6IFwicGFyZW50LmlkXCIsIG5hbWU6IFwicGFyZW50Lm5hbWVcIiB9IH1cbiAgICpcbiAgICog7Ja4642U67CU6rCAIOyVhOuLjCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VqOyXkCDsnKDsnZjtlZjshLjsmpQuXG4gICAqIOydtOugh+qyjCDspJHssqkg6rCd7LK066GcIOuzgO2ZmO2VmOyXrCBzZWxlY3Tsl5Ag64SY6rKo7KO866m0IFBhcnNlU2VsZWN0T2JqZWN0IO2DgOyeheydtCBqb2lu65CcIOqwneyytOydmCDtg4DsnoXsnYQg7J6YIOyeoeyVhOykhCDsiJgg7J6I7Iq164uI64ukLlxuICAgKiDspoksIGVuaGFuY2Vy7JeQ7IScIHJvd+ulvCDrsJvslZjsnYQg65WMIGh5ZHJhdGXrkJwg6rCd7LK0IOyekOyytOydmCBudWxsaXR57JmAIOq3uCDslYjsqr0g7ZWE65Oc7J2YIG51bGxpdHnqsIAgZmsgbnVsbGFibGUg7Jes67aA7JeQIOuUsOudvCDsnpgg7LaU66Gg65Cp64uI64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZE5lc3RlZFNlbGVjdE9iamVjdChcbiAgICBzZWxlY3RJdGVtczogc3RyaW5nW10sXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDrsJjtmZgg7Jik67iM7KCd7Yq47J2YIOqwkuydgCBzdHJpbmfsnbwg7IiY64+EIOyeiOqzoCDrmJDri6Trpbgg7Jik67iM7KCd7Yq47J28IOyImOuPhCDsnojripTrjbAsIOydtOulvCDsnqzqt4Ag7YOA7J6F7Jy866GcIOuCmO2DgOuCvCDsiJgg7JeG7Ja0IGFueeuhnCDsspjrpqztlanri4jri6QuXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IHJlc3VsdDogUmV0dXJuVHlwZTx0eXBlb2YgdGhpcy5idWlsZE5lc3RlZFNlbGVjdE9iamVjdD4gPSB7fTtcblxuICAgIGZvciAoY29uc3Qgc2VsZWN0SXRlbSBvZiBzZWxlY3RJdGVtcykge1xuICAgICAgLy8gXCJ1c2Vycy5pZFwiIOuYkOuKlCBcInVzZXJzLmlkIGFzIHVzZXJfX2lkXCIg7ZiV7YOcIO2MjOyLsVxuICAgICAgY29uc3QgbWF0Y2ggPSBzZWxlY3RJdGVtLm1hdGNoKC9eKC4rPykoPzogYXMgKC4rKSk/JC8pO1xuICAgICAgaWYgKCFtYXRjaCkgY29udGludWU7XG5cbiAgICAgIGNvbnN0IFssIGNvbHVtbiwgYWxpYXNdID0gbWF0Y2g7XG4gICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGBcIiR7Y29sdW1uLnRyaW0oKX1cImA7XG5cbiAgICAgIGlmICghYWxpYXMgfHwgIWFsaWFzLmluY2x1ZGVzKFwiX19cIikpIHtcbiAgICAgICAgLy8gYWxpYXPqsIAg7JeG6rGw64KYIF9f66W8IO2PrO2VqO2VmOyngCDslYrsnLzrqbQg7LWc7IOB7JyEIO2VhOuTnFxuICAgICAgICBjb25zdCBrZXkgPSBhbGlhcyA/PyBhc3NlcnREZWZpbmVkKGNvbHVtbi5zcGxpdChcIi5cIikucG9wKCkpO1xuICAgICAgICByZXN1bHRba2V5XSA9IGNvbHVtblZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWxpYXPqsIAgX1/rpbwg7Y+s7ZWo7ZWY66m0IOyeheyytCDqtazsobDroZwg6re466O57ZmUXG4gICAgICAgIGNvbnN0IHBhcnRzID0gYWxpYXMuc3BsaXQoXCJfX1wiKTtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSByZXN1bHQ7XG5cbiAgICAgICAgLy8g66eI7KeA66eJIO2MjO2KuCDsoITquYzsp4Ag7KSR7LKpIOqwneyytCDsg53shLFcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgICAgaWYgKHBhcnQgaW4gY3VycmVudCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50W3BhcnRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIC8vIOyeheugpeydtCBbXCJ1c2VyXCIsIFwidXNlcl9faWRcIl0g6rCZ7J2AIOqyveyasCFcbiAgICAgICAgICAgICAgLy8g7JWg7LSI7JeQIOunkOuPhCDslYgg65CY7KeA66eMIOyViOyghO2VmOqyjCDsmIjsmbjrpbwg642Y7KeR64uI64ukLlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvbmZsaWN0IGRldGVjdGVkIGluIHNlbGVjdCBpdGVtczogcGFyZW50IHBhdGggXCIke3BhcnRzLnNsaWNlKDAsIGkgKyAxKS5qb2luKFwiX19cIil9XCIgaXMgYWxyZWFkeSBzZXQgYXMgYSBmaWVsZCwgY2Fubm90IG5lc3QgXCIke2FsaWFzfVwiIHVuZGVyIGl0LmAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRbcGFydF0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbcGFydF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyDrp4jsp4Drp4kg7YyM7Yq47JeQIOqwkiDshKTsoJVcbiAgICAgICAgY29uc3QgbGFzdFBhcnQgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgY3VycmVudFtsYXN0UGFydF0gPSBjb2x1bW5WYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEpTT04uc3RyaW5naWZ57JmAIOycoOyCrO2VnCDsnbzsnYQg7ZWp64uI64ukLlxuICAgKiDri6Trp4wg7KO87Ja07KeEIOqwneyytOulvCBKU09O7J20IOyVhOuLjCBUeXBlU2NyaXB0IOqwneyytCDrpqzthLDrn7Qg7Iqk7Yq466eB7Jy866GcIOunjOuTpOyWtOykjeuLiOuLpC5cbiAgICoga2V57JeQIOuUsOyYtO2RnOqwgCDsl4bslrTsmpQuXG4gICAqIOy2nOugpSDsmIjsi5w6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICoge1xuICAgKiAgIGlkOiBcInVzZXJzLmlkXCIsXG4gICAqICAgcGFyZW50OiB7XG4gICAqICAgICBpZDogXCJwYXJlbnQuaWRcIixcbiAgICogICAgIG5hbWU6IFwicGFyZW50Lm5hbWVcIixcbiAgICogICB9LFxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBAcGFyYW0gb2JqIOuzgO2ZmO2VoCDqsJ3ssrRcbiAgICogQHBhcmFtIGluZGVudCDrk6Tsl6zsk7DquLAg66CI67KoXG4gICAqIEBwYXJhbSB3aXRoQnJhY2VzIHRydWXrqbQg7KSR6rSE7Zi4IO2PrO2VqCwgZmFsc2XrqbQg64K07Jqp66eMIOuwmO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBzdHJpbmdpZnlOZXN0ZWRTZWxlY3RPYmplY3QoXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDspJHssqkg7Jik67iM7KCd7Yq47J2YIOqwkuydgCBzdHJpbmfsnbwg7IiY64+EIOyeiOqzoCDrmJDri6Trpbgg7Jik67iM7KCd7Yq47J28IOyImOuPhCDsnojripTrjbAsIOydtOulvCDsnqzqt4Ag7YOA7J6F7Jy866GcIOuCmO2DgOuCvCDsiJgg7JeG7Ja0IGFueeuhnCDsspjrpqztlanri4jri6QuXG4gICAgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIGluZGVudDogbnVtYmVyID0gMCxcbiAgICB3aXRoQnJhY2VzOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBzcGFjZXMgPSBcIiAgXCIucmVwZWF0KGluZGVudCk7XG4gICAgY29uc3QgaW5uZXJTcGFjZXMgPSBcIiAgXCIucmVwZWF0KGluZGVudCArIDEpO1xuXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9iaik7XG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gd2l0aEJyYWNlcyA/IFwie31cIiA6IFwiXCI7XG5cbiAgICBjb25zdCBsaW5lcyA9IGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8g7Lus65+8IOqyveuhnCAo7J2066+4IOuUsOyYtO2RnCDtj6ztlagpXG4gICAgICAgIHJldHVybiBgJHtpbm5lclNwYWNlc30ke2tleX06ICR7dmFsdWV9LGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDspJHssqkg6rCd7LK0ICjtla3sg4Eg7KSR6rSE7Zi4IO2PrO2VqClcbiAgICAgICAgcmV0dXJuIGAke2lubmVyU3BhY2VzfSR7a2V5fTogJHt0aGlzLnN0cmluZ2lmeU5lc3RlZFNlbGVjdE9iamVjdCh2YWx1ZSwgaW5kZW50ICsgMSwgdHJ1ZSl9LGA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAod2l0aEJyYWNlcykge1xuICAgICAgcmV0dXJuIGB7XFxuJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbiR7c3BhY2VzfX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDspJHqtITtmLgg7JeG7J20IOuCtOyaqeunjCDrsJjtmZggKOyVnuuSpCDqsJztlokg7KCc7Jm4KVxuICAgICAgcmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHVyaUxvYWRlclF1ZXJ5KHN1YnNldEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdWJzZXQgPSB0aGlzLmdldFN1YnNldEZpZWxkc0ZvclF1ZXJ5KHN1YnNldEtleSk7XG4gICAgY29uc3QgeyBsb2FkZXJzIH0gPSB0aGlzLnJlc29sdmVTdWJzZXRRdWVyeShcIlwiLCBzdWJzZXQpO1xuXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW2BbYF07XG5cbiAgICAvLyDsnqzqt4DsoIHsnLzroZwgbG9hZGVyIOyDneyEse2VmOuKlCDtl6ztjbwg7ZWo7IiYXG4gICAgY29uc3QgZ2VuZXJhdGVMb2FkZXJDb2RlID0gKGxvYWRlcnM6IFN1YnNldFF1ZXJ5W1wibG9hZGVyc1wiXSk6IHN0cmluZ1tdID0+IHtcbiAgICAgIGNvbnN0IGxvYWRlckxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGxvYWRlciBvZiBsb2FkZXJzKSB7XG4gICAgICAgIGNvbnN0IHsgdG9UYWJsZSwgdG9Db2wsIHRocm91Z2ggfSA9IGxvYWRlci5tYW55Sm9pbjtcbiAgICAgICAgbG9hZGVyTGluZXMucHVzaChcbiAgICAgICAgICBcIntcIixcbiAgICAgICAgICBgYXM6IFwiJHtsb2FkZXIuYXN9XCIsYCxcbiAgICAgICAgICBgcmVmSWQ6IFwiJHtsb2FkZXIubWFueUpvaW4uaWRGaWVsZH1cIixgLFxuICAgICAgICAgIGBxYjogKHFiV3JhcHBlcjogUHVyaVdyYXBwZXI8RGF0YWJhc2VTY2hlbWFFeHRlbmQ+LCBmcm9tSWRzOiBudW1iZXJbXSkgPT4ge2AsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRocm91Z2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEhhc01hbnlcbiAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIFwicmV0dXJuIHFiV3JhcHBlclwiLFxuICAgICAgICAgICAgYC5mcm9tKFwiJHt0b1RhYmxlfVwiKWAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGxvYWRlci5vbmVKb2lucy5mb3JFYWNoKChqb2luOiBTdWJzZXRRdWVyeVtcImpvaW5zXCJdW251bWJlcl0pID0+IHtcbiAgICAgICAgICAgIC8vIEZLIG51bGxhYmxlIOyXrOu2gOuKlCBsZWZ0Sm9pbiDtg4DsnoUg7Iuc6re464uI7LKY7JeQ7IScIOyekOuPmeycvOuhnCDtjJDri6jrkKhcbiAgICAgICAgICAgIGNvbnN0IGpvaW5NZXRob2QgPSBqb2luLmpvaW4gPT09IFwiaW5uZXJcIiA/IFwiam9pblwiIDogXCJsZWZ0Sm9pblwiO1xuICAgICAgICAgICAgaWYgKFwiY3VzdG9tXCIgaW4gam9pbikge1xuICAgICAgICAgICAgICAvLyBGSVhNRTog6rKA7KadIO2VhOyalFxuICAgICAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgICAgIGAuJHtqb2luTWV0aG9kfSh7ICR7am9pbi5hc306IFwiJHtqb2luLnRhYmxlfVwiIH0sIChqKSA9PiB7YCxcbiAgICAgICAgICAgICAgICBgai5vbihQdXJpLnJhd1N0cmluZyhcIiR7am9pbi5jdXN0b219XCIpKTtgLFxuICAgICAgICAgICAgICAgIFwifSlcIixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXG4gICAgICAgICAgICAgICAgYC4ke2pvaW5NZXRob2R9KHsgJHtqb2luLmFzfTogXCIke2pvaW4udGFibGV9XCIgfSwgXCIke2pvaW4uZnJvbX1cIiwgXCIke2pvaW4udG99XCIpYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIOyeheyytOyggSBzZWxlY3Qg6rWs7KGwIOyDneyEsSAocmVmSWQg7Y+s7ZWoKVxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9iaiA9IHRoaXMuYnVpbGROZXN0ZWRTZWxlY3RPYmplY3QobG9hZGVyLnNlbGVjdCk7XG4gICAgICAgICAgc2VsZWN0T2JqLnJlZklkID0gYFwiJHt0b1RhYmxlfS4ke3RvQ29sfVwiYDtcbiAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgYC53aGVyZUluKFwiJHt0b1RhYmxlfS4ke3RvQ29sfVwiLCBmcm9tSWRzKWAsXG4gICAgICAgICAgICBgLnNlbGVjdCgke3RoaXMuc3RyaW5naWZ5TmVzdGVkU2VsZWN0T2JqZWN0KHNlbGVjdE9iail9KTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWFueVRvTWFueVxuICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXG4gICAgICAgICAgICBcInJldHVybiBxYldyYXBwZXJcIixcbiAgICAgICAgICAgIGAuZnJvbShcIiR7dGhyb3VnaC50YWJsZX1cIilgLFxuICAgICAgICAgICAgYC5qb2luKFwiJHt0b1RhYmxlfVwiLCBcIiR7dGhyb3VnaC50YWJsZX0uJHt0aHJvdWdoLnRvQ29sfVwiLCBcIiR7dG9UYWJsZX0uJHt0b0NvbH1cIilgLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBsb2FkZXIub25lSm9pbnMuZm9yRWFjaCgoam9pbjogU3Vic2V0UXVlcnlbXCJqb2luc1wiXVtudW1iZXJdKSA9PiB7XG4gICAgICAgICAgICAvLyBGSyBudWxsYWJsZSDsl6zrtoDripQgbGVmdEpvaW4g7YOA7J6FIOyLnOq3uOuLiOyymOyXkOyEnCDsnpDrj5nsnLzroZwg7YyQ64uo65CoXG4gICAgICAgICAgICBjb25zdCBqb2luTWV0aG9kID0gam9pbi5qb2luID09PSBcImlubmVyXCIgPyBcImpvaW5cIiA6IFwibGVmdEpvaW5cIjtcbiAgICAgICAgICAgIGlmIChcImN1c3RvbVwiIGluIGpvaW4pIHtcbiAgICAgICAgICAgICAgLy8gRklYTUU6IOqygOymnSDtlYTsmpRcbiAgICAgICAgICAgICAgbG9hZGVyTGluZXMucHVzaChcbiAgICAgICAgICAgICAgICBgLiR7am9pbk1ldGhvZH0oeyAke2pvaW4uYXN9OiBcIiR7am9pbi50YWJsZX1cIiB9LCAoaikgPT4ge2AsXG4gICAgICAgICAgICAgICAgYGoub24oUHVyaS5yYXdTdHJpbmcoXCIke2pvaW4uY3VzdG9tfVwiKSk7YCxcbiAgICAgICAgICAgICAgICBcIn0pXCIsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFxuICAgICAgICAgICAgICAgIGAuJHtqb2luTWV0aG9kfSh7ICR7am9pbi5hc306IFwiJHtqb2luLnRhYmxlfVwiIH0sIFwiJHtqb2luLmZyb219XCIsIFwiJHtqb2luLnRvfVwiKWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDsnoXssrTsoIEgc2VsZWN0IOq1rOyhsCDsg53shLEgKHJlZklkIO2PrO2VqClcbiAgICAgICAgICBjb25zdCBzZWxlY3RPYmogPSB0aGlzLmJ1aWxkTmVzdGVkU2VsZWN0T2JqZWN0KGxvYWRlci5zZWxlY3QpO1xuICAgICAgICAgIHNlbGVjdE9iai5yZWZJZCA9IGBcIiR7dGhyb3VnaC50YWJsZX0uJHt0aHJvdWdoLmZyb21Db2x9XCJgO1xuICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXG4gICAgICAgICAgICBgLndoZXJlSW4oXCIke3Rocm91Z2gudGFibGV9LiR7dGhyb3VnaC5mcm9tQ29sfVwiLCBmcm9tSWRzKWAsXG4gICAgICAgICAgICBgLnNlbGVjdCgke3RoaXMuc3RyaW5naWZ5TmVzdGVkU2VsZWN0T2JqZWN0KHNlbGVjdE9iail9KTtgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKGB9LGApO1xuXG4gICAgICAgIC8vIOykkeyyqSBsb2FkZXJzIOyymOumrFxuICAgICAgICBpZiAobG9hZGVyLmxvYWRlcnMgJiYgbG9hZGVyLmxvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvYWRlckxpbmVzLnB1c2goXCJsb2FkZXJzOiBbXCIsIC4uLmdlbmVyYXRlTG9hZGVyQ29kZShsb2FkZXIubG9hZGVycyksIFwiXSxcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkZXJMaW5lcy5wdXNoKFwifSxcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsb2FkZXJMaW5lcztcbiAgICB9O1xuXG4gICAgbGluZXMucHVzaCguLi5nZW5lcmF0ZUxvYWRlckNvZGUobG9hZGVycykpO1xuICAgIGxpbmVzLnB1c2goYF1gKTtcblxuICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgLypcbiAgICBzdWJzZXQgU0VMRUNUL0pPSU4vTE9BREVSIOqysOqzvCDrpqzthLRcbiAgKi9cbiAgZ2V0U3Vic2V0UXVlcnkoc3Vic2V0S2V5OiBzdHJpbmcpOiBTdWJzZXRRdWVyeSB7XG4gICAgY29uc3Qgc3Vic2V0ID0gdGhpcy5nZXRTdWJzZXRGaWVsZHNGb3JRdWVyeShzdWJzZXRLZXkpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTdWJzZXRRdWVyeSA9IHRoaXMucmVzb2x2ZVN1YnNldFF1ZXJ5KFwiXCIsIHN1YnNldCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qXG4gICAqL1xuICByZXNvbHZlU3Vic2V0UXVlcnkoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgZmllbGRzOiBzdHJpbmdbXSxcbiAgICBpc0FscmVhZHlPdXRlckpvaW5lZDogYm9vbGVhbiA9IGZhbHNlLFxuICApOiBTdWJzZXRRdWVyeSB7XG4gICAgLy8gcHJlZml4IOy5mO2ZmCAocHJlZml464qUIFRvT25lUmVsYXRpb27snbQg67O17IiY66GcIOu2meydgCDqsr3smrAg66qo65GQIF9f66GcIOuzgOqyveuQqClcbiAgICBwcmVmaXggPSBwcmVmaXgucmVwbGFjZSgvXFwuL2csIFwiX19cIik7XG5cbiAgICAvLyDshJzruIzshYvsnYQgMeuOgeyKpOunjCDrtoTrpqztlZjsl6wg6re466O57ZWRXG4gICAgY29uc3Qgc3Vic2V0R3JvdXAgPSBncm91cChmaWVsZHMsIChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgICBjb25zdCBbcmVsXSA9IGZpZWxkLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgcmV0dXJuIHJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmtleXMoc3Vic2V0R3JvdXApLnJlZHVjZShcbiAgICAgIChyLCBncm91cEtleSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBzdWJzZXRHcm91cFtncm91cEtleV07XG4gICAgICAgIGFzc2VydChmaWVsZHMgIT09IHVuZGVmaW5lZCwgXCJmaWVsZHMgaXMgdW5kZWZpbmVkXCIpO1xuXG4gICAgICAgIC8vIO2YhOyerCDthYzsnbTruJQg7ZWE65Oc7IWL7J2AIHNlbGVjdCwgdmlydHVhbOyXkCDstpTqsIDtlZjqs6Ag66as7YS0XG4gICAgICAgIGlmIChncm91cEtleSA9PT0gXCJcIikge1xuICAgICAgICAgIGNvbnN0IHJlYWxGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT4gIWlzVmlydHVhbFByb3AodGhpcy5wcm9wc0RpY3RbZmllbGRdKSk7XG4gICAgICAgICAgLy8gdmlydHVhbFR5cGU6IFwiY29kZVwiICjrmJDripQgdW5kZWZpbmVkKeyduCB2aXJ0dWFsIHByb3Drp4wgci52aXJ0dWFs7JeQIOy2lOqwgFxuICAgICAgICAgIC8vIHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rK97JqwIOyCrOyaqeyekOqwgCBhcHBlbmRTZWxlY3TroZwg7KeB7KCRIOy2lOqwgO2VmOuvgOuhnCDsoJzsmbhcbiAgICAgICAgICBjb25zdCB2aXJ0dWFsQ29kZUZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PlxuICAgICAgICAgICAgaXNWaXJ0dWFsQ29kZVByb3AodGhpcy5wcm9wc0RpY3RbZmllbGRdKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHByZWZpeCA9PT0gXCJcIikge1xuICAgICAgICAgICAgLy8g7ZiE7J6sIO2FjOydtOu4lOyduCDqsr3smrBcbiAgICAgICAgICAgIHIuc2VsZWN0ID0gci5zZWxlY3QuY29uY2F0KHJlYWxGaWVsZHMubWFwKChmaWVsZCkgPT4gYCR7dGhpcy50YWJsZX0uJHtmaWVsZH1gKSk7XG4gICAgICAgICAgICByLnZpcnR1YWwgPSByLnZpcnR1YWwuY29uY2F0KHZpcnR1YWxDb2RlRmllbGRzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g64SY7Ja07JioIO2FjOydtOu4lOyduCDqsr3smrBcbiAgICAgICAgICAgIHIuc2VsZWN0ID0gci5zZWxlY3QuY29uY2F0KFxuICAgICAgICAgICAgICByZWFsRmllbGRzLm1hcCgoZmllbGQpID0+IGAke3ByZWZpeH0uJHtmaWVsZH0gYXMgJHtwcmVmaXh9X18ke2ZpZWxkfWApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uID0gdGhpcy5yZWxhdGlvbnNbZ3JvdXBLZXldO1xuICAgICAgICBpZiAocmVsYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7KG07J6s7ZWY7KeAIOyViuuKlCByZWxhdGlvbiDssLjsobAgJHtncm91cEtleX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChyZWxhdGlvbi53aXRoKTtcblxuICAgICAgICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChyZWxhdGlvbikgfHwgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocmVsYXRpb24pKSB7XG4gICAgICAgICAgLy8gLU9uZSBSZWxhdGlvbjogSk9JTiDsnLzroZwg7LKY66asXG4gICAgICAgICAgY29uc3QgcmVsRmllbGRzID0gZmllbGRzLm1hcCgoZmllbGQpID0+IGZpZWxkLnNwbGl0KFwiLlwiKS5zbGljZSgxKS5qb2luKFwiLlwiKSk7XG5cbiAgICAgICAgICAvLyAtT25lIFJlbGF0aW9u7JeQ7IScIGlkIO2VhOuTnOunjCDssLjsobDtlZjripQg6rK97JqwIOumtOugiOydtOyFmCDrhJjquLDsp4Ag7JWK6rOgIOumrO2EtFxuICAgICAgICAgIGlmIChyZWxGaWVsZHMubGVuZ3RoID09PSAxICYmIHJlbEZpZWxkc1swXSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgICBpZiAocHJlZml4ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgIHIuc2VsZWN0ID0gci5zZWxlY3QuY29uY2F0KGAke3RoaXMudGFibGV9LiR7Z3JvdXBLZXl9X2lkYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByLnNlbGVjdCA9IHIuc2VsZWN0LmNvbmNhdChgJHtwcmVmaXh9LiR7Z3JvdXBLZXl9X2lkIGFzICR7cHJlZml4fV9fJHtncm91cEtleX1faWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGlubmVyT3JPdXRlclxuICAgICAgICAgIGNvbnN0IGlubmVyT3JPdXRlciA9ICgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBbHJlYWR5T3V0ZXJKb2luZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFwib3V0ZXJcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocmVsYXRpb24pKSB7XG4gICAgICAgICAgICAgIGlmIChyZWxhdGlvbi5oYXNKb2luQ29sdW1uID09PSB0cnVlICYmIChyZWxhdGlvbi5udWxsYWJsZSA/PyBmYWxzZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaW5uZXJcIjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvdXRlclwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocmVsYXRpb24ubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJvdXRlclwiO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBcImlubmVyXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIGNvbnN0IHJlbFN1YnNldFF1ZXJ5ID0gcmVsRW50aXR5LnJlc29sdmVTdWJzZXRRdWVyeShcbiAgICAgICAgICAgIGAke3ByZWZpeCAhPT0gXCJcIiA/IGAke3ByZWZpeH0uYCA6IFwiXCJ9JHtncm91cEtleX1gLFxuICAgICAgICAgICAgcmVsRmllbGRzLFxuICAgICAgICAgICAgaW5uZXJPck91dGVyID09PSBcIm91dGVyXCIsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByLnNlbGVjdCA9IHIuc2VsZWN0LmNvbmNhdChyZWxTdWJzZXRRdWVyeS5zZWxlY3QpO1xuICAgICAgICAgIHIudmlydHVhbCA9IHIudmlydHVhbC5jb25jYXQocmVsU3Vic2V0UXVlcnkudmlydHVhbCk7XG5cbiAgICAgICAgICBjb25zdCBqb2luQXMgPSBwcmVmaXggPT09IFwiXCIgPyBncm91cEtleSA6IGAke3ByZWZpeH1fXyR7Z3JvdXBLZXl9YDtcbiAgICAgICAgICBjb25zdCBmcm9tVGFibGUgPSBwcmVmaXggPT09IFwiXCIgPyB0aGlzLnRhYmxlIDogcHJlZml4O1xuXG4gICAgICAgICAgbGV0IGpvaW5DbGF1c2U6XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBmcm9tOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgdG86IHN0cmluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfCB7XG4gICAgICAgICAgICAgICAgY3VzdG9tOiBzdHJpbmc7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHJlbGF0aW9uLmN1c3RvbUpvaW5DbGF1c2UpIHtcbiAgICAgICAgICAgIGpvaW5DbGF1c2UgPSB7XG4gICAgICAgICAgICAgIGN1c3RvbTogcmVsYXRpb24uY3VzdG9tSm9pbkNsYXVzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmc7XG4gICAgICAgICAgICBpZiAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChyZWxhdGlvbikpIHtcbiAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uLmhhc0pvaW5Db2x1bW4pIHtcbiAgICAgICAgICAgICAgICBmcm9tID0gYCR7ZnJvbVRhYmxlfS4ke3JlbGF0aW9uLm5hbWV9X2lkYDtcbiAgICAgICAgICAgICAgICB0byA9IGAke2pvaW5Bc30uaWRgO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZyb20gPSBgJHtmcm9tVGFibGV9LmlkYDtcbiAgICAgICAgICAgICAgICB0byA9IGAke2pvaW5Bc30uJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUodGhpcy5uYW1lcy5mcy5yZXBsYWNlKC8tL2csIFwiX1wiKSl9X2lkYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZnJvbSA9IGAke2Zyb21UYWJsZX0uJHtyZWxhdGlvbi5uYW1lfV9pZGA7XG4gICAgICAgICAgICAgIHRvID0gYCR7am9pbkFzfS5pZGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqb2luQ2xhdXNlID0ge1xuICAgICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5qb2lucy5wdXNoKHtcbiAgICAgICAgICAgIGFzOiBqb2luQXMsXG4gICAgICAgICAgICBqb2luOiBpbm5lck9yT3V0ZXIsXG4gICAgICAgICAgICB0YWJsZTogcmVsRW50aXR5LnRhYmxlLFxuICAgICAgICAgICAgLi4uam9pbkNsYXVzZSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIEJlbG9uZ3NUb09uZSDrsJHsl5AgSGFzTWFueeqwgCDrtpnsnYAg6rK97JqwXG4gICAgICAgICAgaWYgKHJlbFN1YnNldFF1ZXJ5LmxvYWRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkTG9hZGVycyA9IHJlbFN1YnNldFF1ZXJ5LmxvYWRlcnMubWFwKChsb2FkZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3QXMgPSBbZ3JvdXBLZXksIGxvYWRlci5hc10uam9pbihcIl9fXCIpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGFzOiBuZXdBcyxcbiAgICAgICAgICAgICAgICB0YWJsZTogbG9hZGVyLnRhYmxlLFxuICAgICAgICAgICAgICAgIG1hbnlKb2luOiBsb2FkZXIubWFueUpvaW4sXG4gICAgICAgICAgICAgICAgb25lSm9pbnM6IGxvYWRlci5vbmVKb2lucyxcbiAgICAgICAgICAgICAgICBzZWxlY3Q6IGxvYWRlci5zZWxlY3QsXG4gICAgICAgICAgICAgICAgbG9hZGVyczogbG9hZGVyLmxvYWRlcnMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgci5sb2FkZXJzID0gWy4uLnIubG9hZGVycywgLi4uY29udmVydGVkTG9hZGVyc107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5qb2lucyA9IHIuam9pbnMuY29uY2F0KHJlbFN1YnNldFF1ZXJ5LmpvaW5zKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0hhc01hbnlSZWxhdGlvblByb3AocmVsYXRpb24pIHx8IGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChyZWxhdGlvbikpIHtcbiAgICAgICAgICAvLyAtTWFueSBSZWxhdGlvbjogTG9hZGVyIOuhnCDsspjrpqxcbiAgICAgICAgICBjb25zdCByZWxGaWVsZHMgPSBmaWVsZHMubWFwKChmaWVsZCkgPT4gZmllbGQuc3BsaXQoXCIuXCIpLnNsaWNlKDEpLmpvaW4oXCIuXCIpKTtcbiAgICAgICAgICBjb25zdCByZWxTdWJzZXRRdWVyeSA9IHJlbEVudGl0eS5yZXNvbHZlU3Vic2V0UXVlcnkoXCJcIiwgcmVsRmllbGRzKTtcblxuICAgICAgICAgIGxldCBtYW55Sm9pbjogU3Vic2V0UXVlcnlbXCJsb2FkZXJzXCJdW251bWJlcl1bXCJtYW55Sm9pblwiXTtcbiAgICAgICAgICBpZiAoaXNIYXNNYW55UmVsYXRpb25Qcm9wKHJlbGF0aW9uKSkge1xuICAgICAgICAgICAgY29uc3QgZnJvbUNvbCA9IHJlbGF0aW9uPy5mcm9tQ29sdW1uID8/IFwiaWRcIjtcbiAgICAgICAgICAgIG1hbnlKb2luID0ge1xuICAgICAgICAgICAgICBmcm9tVGFibGU6IHRoaXMudGFibGUsXG4gICAgICAgICAgICAgIGZyb21Db2wsXG4gICAgICAgICAgICAgIGlkRmllbGQ6IHByZWZpeCA9PT0gXCJcIiA/IGAke2Zyb21Db2x9YCA6IGAke3ByZWZpeH1fXyR7ZnJvbUNvbH1gLFxuICAgICAgICAgICAgICB0b1RhYmxlOiByZWxFbnRpdHkudGFibGUsXG4gICAgICAgICAgICAgIHRvQ29sOiByZWxhdGlvbi5qb2luQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChyZWxhdGlvbikpIHtcbiAgICAgICAgICAgIG1hbnlKb2luID0ge1xuICAgICAgICAgICAgICBmcm9tVGFibGU6IHRoaXMudGFibGUsXG4gICAgICAgICAgICAgIGZyb21Db2w6IFwiaWRcIixcbiAgICAgICAgICAgICAgaWRGaWVsZDogcHJlZml4ID09PSBcIlwiID8gYGlkYCA6IGAke3ByZWZpeH1fX2lkYCxcbiAgICAgICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgICAgIHRhYmxlOiByZWxhdGlvbi5qb2luVGFibGUsXG4gICAgICAgICAgICAgICAgZnJvbUNvbDogYCR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0aGlzLnRhYmxlKX1faWRgLFxuICAgICAgICAgICAgICAgIHRvQ29sOiBgJHtpbmZsZWN0aW9uLnNpbmd1bGFyaXplKHJlbEVudGl0eS50YWJsZSl9X2lkYCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdG9UYWJsZTogcmVsRW50aXR5LnRhYmxlLFxuICAgICAgICAgICAgICB0b0NvbDogXCJpZFwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgci5sb2FkZXJzLnB1c2goe1xuICAgICAgICAgICAgYXM6IGdyb3VwS2V5LFxuICAgICAgICAgICAgdGFibGU6IHJlbEVudGl0eS50YWJsZSxcbiAgICAgICAgICAgIG1hbnlKb2luLFxuICAgICAgICAgICAgb25lSm9pbnM6IHJlbFN1YnNldFF1ZXJ5LmpvaW5zLFxuICAgICAgICAgICAgc2VsZWN0OiByZWxTdWJzZXRRdWVyeS5zZWxlY3QsXG4gICAgICAgICAgICBsb2FkZXJzOiByZWxTdWJzZXRRdWVyeS5sb2FkZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzZWxlY3Q6IFtdLFxuICAgICAgICB2aXJ0dWFsOiBbXSxcbiAgICAgICAgam9pbnM6IFtdLFxuICAgICAgICBsb2FkZXJzOiBbXSxcbiAgICAgIH0gYXMgU3Vic2V0UXVlcnksXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLypcbiAgICBGaWVsZEV4cHJbXSDsnYQgRW50aXR5UHJvcE5vZGVbXSDroZwg67OA7ZmYXG4gICovXG4gIGZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzOiBzdHJpbmdbXSwgZW50aXR5OiBFbnRpdHkgPSB0aGlzKTogRW50aXR5UHJvcE5vZGVbXSB7XG4gICAgY29uc3QgZ3JvdXBzID0gZmllbGRFeHBycy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBmaWVsZEV4cHIpID0+IHtcbiAgICAgICAgbGV0IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBlbHNlRXhwcjogc3RyaW5nW107XG4gICAgICAgIGlmIChmaWVsZEV4cHIuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgW2tleSwgLi4uZWxzZUV4cHJdID0gZmllbGRFeHByLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICB2YWx1ZSA9IGVsc2VFeHByLmpvaW4oXCIuXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IFwiXCI7XG4gICAgICAgICAgdmFsdWUgPSBmaWVsZEV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0W2tleV0gPSAocmVzdWx0W2tleV0gPz8gW10pLmNvbmNhdCh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyB7XG4gICAgICAgIFtrOiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhncm91cHMpLmZsYXRNYXA8RW50aXR5UHJvcE5vZGUsIEVudGl0eVByb3BOb2RlW10+KChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBzW2tleV07XG5cbiAgICAgIC8vIOydvOuwmCBwcm9wIOyymOumrFxuICAgICAgaWYgKGtleSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZ3JvdXAubWFwKChwcm9wTmFtZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBlbnRpdHkucHJvcHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBwcm9wTmFtZSk7XG4gICAgICAgICAgaWYgKHByb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coeyBwcm9wTmFtZSwgZ3JvdXBzIH0pO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eS5pZH0gLS0g7J6Y66q765CcIEZpZWxkRXhwciAke3Byb3BOYW1lfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIiBhcyBjb25zdCxcbiAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbGF0aW9uIHByb3Ag7LKY66asXG4gICAgICBjb25zdCBwcm9wID0gZW50aXR5LnByb3BzRGljdFtrZXldO1xuICAgICAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCBGaWVsZEV4cHIgJHtrZXl9LiR7Z3JvdXBbMF19YCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChwcm9wLndpdGgpO1xuXG4gICAgICAvLyByZWxhdGlvbiAtT25lIOyXkCBpZCDtlYTrk5wg7ZWY64KY7J24IOqyveyasFxuICAgICAgaWYgKGlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wKHByb3ApIHx8IGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA9PT0gMSAmJiAoZ3JvdXBbMF0gPT09IFwiaWRcIiB8fCBncm91cFswXSA9PT0gXCJpZD9cIikpIHtcbiAgICAgICAgICAvLyBpZCDtlZjrgpjrp4wg7J6I64qU7KeAIOyytO2BrO2VtOyEnCwg7ZWY64KY66eMIOyeiOycvOuptCDsg4HsnIQgcHJvcOycvOuhnCBpZOulvCDrpqzthLRcbiAgICAgICAgICBjb25zdCBpZFByb3AgPSByZWxFbnRpdHkucHJvcHNEaWN0LmlkO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgcHJvcDoge1xuICAgICAgICAgICAgICAuLi5pZFByb3AsXG4gICAgICAgICAgICAgIG5hbWU6IGAke2tleX1faWRgLFxuICAgICAgICAgICAgICBudWxsYWJsZTogcHJvcC5udWxsYWJsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAtT25lIOq3uOyZuOydmCDqsr3smrAgb2JqZWN066GcIOumrO2EtFxuICAgICAgLy8gLU1hbnnsnZgg6rK97JqwIGFycmF566GcIOumrO2EtFxuICAgICAgLy8gUmVjdXJzaXZlIOuhnCDrjoHsiqQg7LKY66asXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZmllbGRFeHByc1RvUHJvcE5vZGVzKGdyb3VwLCByZWxFbnRpdHkpO1xuICAgICAgY29uc3Qgbm9kZVR5cGUgPVxuICAgICAgICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCBpc09uZVRvT25lUmVsYXRpb25Qcm9wKHByb3ApXG4gICAgICAgICAgPyAoXCJvYmplY3RcIiBhcyBjb25zdClcbiAgICAgICAgICA6IChcImFycmF5XCIgYXMgY29uc3QpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZSxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRFeHBycyhwcmVmaXggPSBcIlwiLCBtYXhEZXB0aDogbnVtYmVyID0gMywgZnJvbXM6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHNcbiAgICAgIC5mbGF0TWFwKChwcm9wKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gW3ByZWZpeCwgcHJvcC5uYW1lXS5maWx0ZXIoKHYpID0+IHYgIT09IFwiXCIpLmpvaW4oXCIuXCIpO1xuICAgICAgICBpZiAocHJvcE5hbWUgPT09IHByZWZpeCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICAgIGlmIChtYXhEZXB0aCA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZnJvbXMuaW5jbHVkZXMocHJvcC53aXRoKSkge1xuICAgICAgICAgICAgLy8g7Jet67Cp7ZalIHJlbGF0aW9u7J24IOqyveyasCDsoJzsmbhcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDsoJXrsKntlqUgcmVsYXRpb27snbgg6rK97JqwIHJlY3Vyc2l2ZSDsvZxcbiAgICAgICAgICBjb25zdCByZWxNZCA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgICAgcmV0dXJuIHJlbE1kLmdldEZpZWxkRXhwcnMocHJvcE5hbWUsIG1heERlcHRoIC0gMSwgWy4uLmZyb21zLCB0aGlzLmlkXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BOYW1lO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGYpID0+IGYgIT09IG51bGwpIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgZ2V0VGFibGVDb2x1bW5zKCk6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wc1xuICAgICAgLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICBpZiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9wLnJlbGF0aW9uVHlwZSA9PT0gXCJCZWxvbmdzVG9PbmVcIiB8fFxuICAgICAgICAgICAgKHByb3AucmVsYXRpb25UeXBlID09PSBcIk9uZVRvT25lXCIgJiYgcHJvcC5oYXNKb2luQ29sdW1uID09PSB0cnVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogYCR7cHJvcC5uYW1lfV9pZGAsIHR5cGU6IFwiaW50X3Vuc2lnbmVkXCIgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IG5hbWU6IHByb3AubmFtZSwgdHlwZTogcHJvcC50eXBlIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihub25OdWxsYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogRW50aXR57JeQIOygleydmOuQnCDrqqjrk6AgdmVjdG9yIO2DgOyehSDsu6zrn7wg67CY7ZmYXG4gICAqL1xuICBnZXRWZWN0b3JDb2x1bW5zKCk6IEVudGl0eVByb3BbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwidmVjdG9yXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIO2KueyglSB2ZWN0b3Ig7Lus65+8IOuwmO2ZmFxuICAgKiBAcGFyYW0gY29sdW1uTmFtZSAtIOy7rOufvOuqhSAo7IOd6561IOyLnCDssqsg67KI7Ke4IHZlY3RvciDsu6zrn7wpXG4gICAqL1xuICBnZXRWZWN0b3JDb2x1bW4oY29sdW1uTmFtZT86IHN0cmluZyk6IEVudGl0eVByb3AgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZlY3RvclByb3BzID0gdGhpcy5nZXRWZWN0b3JDb2x1bW5zKCk7XG4gICAgaWYgKGNvbHVtbk5hbWUpIHtcbiAgICAgIHJldHVybiB2ZWN0b3JQcm9wcy5maW5kKChwKSA9PiBwLm5hbWUgPT09IGNvbHVtbk5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yUHJvcHNbMF07XG4gIH1cblxuICBhc3luYyByZWdpc3Rlck1vZHVsZVBhdGhzKCkge1xuICAgIGNvbnN0IGJhc2VQYXRoID0gYCR7dGhpcy5uYW1lcy5wYXJlbnRGc31gO1xuXG4gICAgLy8gYmFzZS1zY2hlbWVcbiAgICBFbnRpdHlNYW5hZ2VyLnNldE1vZHVsZVBhdGgoYCR7dGhpcy5pZH1CYXNlU2NoZW1hYCwgYHNvbmFtdS5nZW5lcmF0ZWRgKTtcblxuICAgIC8vIHN1YnNldFxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN1YnNldHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIEVudGl0eU1hbmFnZXIuc2V0TW9kdWxlUGF0aChgJHt0aGlzLmlkfVN1YnNldEtleWAsIGBzb25hbXUuZ2VuZXJhdGVkYCk7XG4gICAgICBFbnRpdHlNYW5hZ2VyLnNldE1vZHVsZVBhdGgoYCR7dGhpcy5pZH1TdWJzZXRNYXBwaW5nYCwgYHNvbmFtdS5nZW5lcmF0ZWRgKTtcbiAgICAgIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuc3Vic2V0cykpIHtcbiAgICAgICAgRW50aXR5TWFuYWdlci5zZXRNb2R1bGVQYXRoKFxuICAgICAgICAgIGAke3RoaXMuaWR9U3Vic2V0JHtzdWJzZXRLZXkudG9VcHBlckNhc2UoKX1gLFxuICAgICAgICAgIGBzb25hbXUuZ2VuZXJhdGVkYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnVtc1xuICAgIGZvciAoY29uc3QgZW51bUlkIG9mIE9iamVjdC5rZXlzKHRoaXMuZW51bUxhYmVscykpIHtcbiAgICAgIEVudGl0eU1hbmFnZXIuc2V0TW9kdWxlUGF0aChlbnVtSWQsIGBzb25hbXUuZ2VuZXJhdGVkYCk7XG4gICAgfVxuXG4gICAgLy8gdHlwZXNcbiAgICBjb25zdCB0eXBlc01vZHVsZVBhdGggPSBgJHtiYXNlUGF0aH0vJHt0aGlzLm5hbWVzLnBhcmVudEZzfS50eXBlc2A7XG4gICAgY29uc3QgdHlwZXNGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICAgIHJ1bnRpbWVQYXRoKGBkaXN0L2FwcGxpY2F0aW9uLyR7dHlwZXNNb2R1bGVQYXRofS5qc2ApLFxuICAgICk7XG5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKHR5cGVzRmlsZVBhdGgpKSB7XG4gICAgICBjb25zdCBpbXBvcnRlZE1lbWJlcnMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHouWm9kVHlwZUFueT4odHlwZXNGaWxlUGF0aCk7XG4gICAgICB0aGlzLnR5cGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBpbXBvcnRlZE1lbWJlcnMubWFwKCh7IG5hbWUsIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICBFbnRpdHlNYW5hZ2VyLnNldE1vZHVsZVBhdGgobmFtZSwgdHlwZXNNb2R1bGVQYXRoKTtcbiAgICAgICAgICByZXR1cm4gW25hbWUsIHZhbHVlXTtcbiAgICAgICAgfSksXG4gICAgICApIGFzIHsgW25hbWU6IHN0cmluZ106IHouWm9kVHlwZUFueSB9O1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVGFibGVTcGVjcygpOiB2b2lkIHtcbiAgICAvLyDsobDsnbgg7YWM7J2067iUIOyduOuNseyKpCDsoJzsmbggKOy7rOufvCDsnbTrpoTsl5AgJy4n7J20IO2PrO2VqOuQnCDqsr3smrApXG4gICAgY29uc3QgdW5pcXVlSW5kZXhlcyA9IHRoaXMuaW5kZXhlc1xuICAgICAgLmZpbHRlcigoaWR4KSA9PiBpZHgudHlwZSA9PT0gXCJ1bmlxdWVcIilcbiAgICAgIC5maWx0ZXIoKGlkeCkgPT4gaWR4LmNvbHVtbnMuZXZlcnkoKGNvbCkgPT4gIWNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKSkpO1xuXG4gICAgRW50aXR5TWFuYWdlci5zZXRUYWJsZVNwZWMoe1xuICAgICAgbmFtZTogdGhpcy50YWJsZSxcbiAgICAgIHVuaXF1ZUluZGV4ZXMsXG4gICAgICBqc29uQ29sdW1uczogdGhpcy5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJqc29uXCIpLm1hcCgocCkgPT4gcC5uYW1lKSxcbiAgICB9KTtcbiAgfVxuXG4gIHRvSnNvbigpOiBFbnRpdHlKc29uIHtcbiAgICAvLyBzdWJzZXRz7JmAIHN1YnNldHNJbnRlcm5hbOydhCBTdWJzZXRGaWVsZFtdIO2Yle2DnOuhnCDrs7Xsm5BcbiAgICBjb25zdCBzdWJzZXRzOiB7IFtrZXk6IHN0cmluZ106IFN1YnNldEZpZWxkW10gfSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuc3Vic2V0cykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbEZpZWxkczogU3Vic2V0RmllbGRbXSA9IHRoaXMuc3Vic2V0c1trZXldO1xuICAgICAgY29uc3QgaW50ZXJuYWxGaWVsZHM6IFN1YnNldEZpZWxkW10gPSAodGhpcy5zdWJzZXRzSW50ZXJuYWxba2V5XSA/PyBbXSkubWFwKChmaWVsZCkgPT4gKHtcbiAgICAgICAgZmllbGQsXG4gICAgICAgIGludGVybmFsOiB0cnVlLFxuICAgICAgfSkpO1xuICAgICAgc3Vic2V0c1trZXldID0gWy4uLm5vcm1hbEZpZWxkcywgLi4uaW50ZXJuYWxGaWVsZHNdO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHBhcmVudElkOiB0aGlzLnBhcmVudElkLFxuICAgICAgdGFibGU6IHRoaXMudGFibGUsXG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgaW5kZXhlczogdGhpcy5pbmRleGVzLFxuICAgICAgc3Vic2V0cyxcbiAgICAgIGVudW1zOiB0aGlzLmVudW1MYWJlbHMsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gc29ydDogc3Vic2V0c1xuICAgIGNvbnN0IHN1YnNldFJvd3MgPSB0aGlzLmdldFN1YnNldFJvd3MoKTtcbiAgICB0aGlzLnN1YnNldHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnN1YnNldHMpLm1hcCgoW3N1YnNldEtleV0pID0+IHtcbiAgICAgICAgcmV0dXJuIFtzdWJzZXRLZXksIHRoaXMuc3Vic2V0Um93c1RvU3Vic2V0RmllbGRzKHN1YnNldFJvd3MsIHN1YnNldEtleSwgZmFsc2UpXTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5zdWJzZXRzSW50ZXJuYWwgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLnN1YnNldHNJbnRlcm5hbCkubWFwKChbc3Vic2V0S2V5XSkgPT4ge1xuICAgICAgICByZXR1cm4gW3N1YnNldEtleSwgdGhpcy5zdWJzZXRSb3dzVG9TdWJzZXRGaWVsZHMoc3Vic2V0Um93cywgc3Vic2V0S2V5LCB0cnVlKV07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gc2F2ZVxuICAgIGNvbnN0IGpzb25QYXRoID0gcGF0aC5qb2luKFxuICAgICAgU29uYW11LmFwaVJvb3RQYXRoLFxuICAgICAgYHNyYy9hcHBsaWNhdGlvbi8ke3RoaXMubmFtZXMucGFyZW50RnN9LyR7dGhpcy5uYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgICk7XG4gICAgY29uc3QganNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKGpzb25QYXRoLCBmb3JtYXRDb2RlKEpTT04uc3RyaW5naWZ5KGpzb24pLCBcImpzb25cIiwganNvblBhdGgpKTtcblxuICAgIC8vIHJlbG9hZFxuICAgIGF3YWl0IEVudGl0eU1hbmFnZXIucmVnaXN0ZXIoanNvbik7XG4gIH1cblxuICBnZXRTdWJzZXRSb3dzKFxuICAgIF9zdWJzZXRzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9LFxuICAgIF9zdWJzZXRzSW50ZXJuYWw/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0sXG4gICAgcHJlZml4ZXM6IHN0cmluZ1tdID0gW10sXG4gICk6IEVudGl0eVN1YnNldFJvd1tdIHtcbiAgICBpZiAocHJlZml4ZXMubGVuZ3RoID4gMTApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzZXRzID0gX3N1YnNldHMgPz8gdGhpcy5zdWJzZXRzO1xuICAgIGNvbnN0IHN1YnNldHNJbnRlcm5hbCA9IF9zdWJzZXRzSW50ZXJuYWwgPz8gdGhpcy5zdWJzZXRzSW50ZXJuYWw7XG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKHN1YnNldHMpO1xuICAgIGNvbnN0IGFsbEZpZWxkcyA9IHVuaXF1ZShzdWJzZXRLZXlzLmZsYXRNYXAoKGtleSkgPT4gc3Vic2V0c1trZXldKSk7XG4gICAgLy8gaW50ZXJuYWwg7ZWE65Oc64+EIGFsbEZpZWxkc+yXkCDtj6ztlaggKHJlbGF0aW9uIO2DkOyDieyaqSlcbiAgICBjb25zdCBhbGxJbnRlcm5hbEZpZWxkcyA9IHVuaXF1ZShzdWJzZXRLZXlzLmZsYXRNYXAoKGtleSkgPT4gc3Vic2V0c0ludGVybmFsW2tleV0gPz8gW10pKTtcbiAgICBjb25zdCBjb21iaW5lZEZpZWxkcyA9IHVuaXF1ZShbLi4uYWxsRmllbGRzLCAuLi5hbGxJbnRlcm5hbEZpZWxkc10pO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3AudHlwZSA9PT0gXCJyZWxhdGlvblwiICYmXG4gICAgICAgIGNvbWJpbmVkRmllbGRzLmZpbmQoKGYpID0+IGYuc3RhcnRzV2l0aChgJHtbLi4ucHJlZml4ZXMsIHByb3AubmFtZV0uam9pbihcIi5cIil9LmApKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHJlbEVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gcmVsRW50aXR5LmdldFN1YnNldFJvd3Moc3Vic2V0cywgc3Vic2V0c0ludGVybmFsLCBbXG4gICAgICAgICAgLi4ucHJlZml4ZXMsXG4gICAgICAgICAgYCR7cHJvcC5uYW1lfWAsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmllbGQ6IHByb3AubmFtZSxcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICByZWxhdGlvbkVudGl0eTogcHJvcC53aXRoLFxuICAgICAgICAgIHByZWZpeGVzLFxuICAgICAgICAgIGlzT3BlbjogY2hpbGRyZW4ubGVuZ3RoID4gMCxcbiAgICAgICAgICBoYXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgIHN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtzdWJzZXRLZXksIGNoaWxkcmVuLmV2ZXJ5KChjaGlsZCkgPT4gY2hpbGQuaGFzW3N1YnNldEtleV0gPT09IHRydWUpXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgICAgaXNJbnRlcm5hbDogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICAgICAgc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gW3N1YnNldEtleSwgY2hpbGRyZW4uZXZlcnkoKGNoaWxkKSA9PiBjaGlsZC5pc0ludGVybmFsW3N1YnNldEtleV0gPT09IHRydWUpXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpZWxkID0gWy4uLnByZWZpeGVzLCBwcm9wLm5hbWVdLmpvaW4oXCIuXCIpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmllbGQ6IHByb3AubmFtZSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICByZWxhdGlvbkVudGl0eTogcHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBwcm9wLndpdGggOiB1bmRlZmluZWQsXG4gICAgICAgIHByZWZpeGVzLFxuICAgICAgICBoYXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICBzdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWJzZXRGaWVsZHMgPSBzdWJzZXRzW3N1YnNldEtleV07XG4gICAgICAgICAgICBjb25zdCBoYXMgPSBzdWJzZXRGaWVsZHMuc29tZSgoZikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZiA9PT0gZmllbGQgfHwgZi5zdGFydHNXaXRoKGAke2ZpZWxkfS5gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIFtzdWJzZXRLZXksIGhhc107XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICAgIGlzSW50ZXJuYWw6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICBzdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnRlcm5hbEZpZWxkcyA9IHN1YnNldHNJbnRlcm5hbFtzdWJzZXRLZXldID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgaXNJbnRlcm5hbCA9IGludGVybmFsRmllbGRzLnNvbWUoKGYpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGYgPT09IGZpZWxkIHx8IGYuc3RhcnRzV2l0aChgJHtmaWVsZH0uYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBbc3Vic2V0S2V5LCBpc0ludGVybmFsXTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzdWJzZXRSb3dzVG9TdWJzZXRGaWVsZHMoXG4gICAgc3Vic2V0Um93czogRW50aXR5U3Vic2V0Um93W10sXG4gICAgc3Vic2V0S2V5OiBzdHJpbmcsXG4gICAgaW50ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGhhc0tleSA9IGludGVybmFsID8gXCJpc0ludGVybmFsXCIgOiBcImhhc1wiO1xuICAgIHJldHVybiBzdWJzZXRSb3dzXG4gICAgICAubWFwKChzdWJzZXRSb3cpID0+IHtcbiAgICAgICAgaWYgKHN1YnNldFJvdy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2V0Um93c1RvU3Vic2V0RmllbGRzKHN1YnNldFJvdy5jaGlsZHJlbiwgc3Vic2V0S2V5LCBpbnRlcm5hbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Vic2V0Um93W2hhc0tleV1bc3Vic2V0S2V5XSkge1xuICAgICAgICAgIHJldHVybiBzdWJzZXRSb3cucHJlZml4ZXMuY29uY2F0KHN1YnNldFJvdy5maWVsZCkuam9pbihcIi5cIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKG5vbk51bGxhYmxlKVxuICAgICAgLmZsYXQoKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVByb3AocHJvcDogRW50aXR5UHJvcCwgYXQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWF0KSB7XG4gICAgICB0aGlzLnByb3BzLnB1c2gocHJvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHMuc3BsaWNlKGF0LCAwLCBwcm9wKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5zYXZlKCk7XG4gIH1cblxuICBhbmFseXplU3Vic2V0RmllbGQoc3Vic2V0RmllbGQ6IHN0cmluZyk6IHtcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgIHByb3BOYW1lOiBzdHJpbmc7XG4gIH1bXSB7XG4gICAgY29uc3QgYXJyID0gc3Vic2V0RmllbGQuc3BsaXQoXCIuXCIpO1xuXG4gICAgbGV0IGVudGl0eUlkID0gdGhpcy5pZDtcbiAgICBjb25zdCByZXN1bHQ6IHtcbiAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICBwcm9wTmFtZTogc3RyaW5nO1xuICAgIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwcm9wTmFtZSA9IGFycltpXTtcbiAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgZW50aXR5SWQsXG4gICAgICAgIHByb3BOYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHByb3AgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZCgocCkgPT4gcC5uYW1lID09PSBwcm9wTmFtZSk7XG4gICAgICBpZiAoIXByb3ApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eUlkfeydmCDsnpjrqrvrkJwg7ISc67iM7IWL7YKkICR7c3Vic2V0RmllbGR9YCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICAgICAgZW50aXR5SWQgPSBwcm9wLndpdGg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBtb2RpZnlQcm9wKG5ld1Byb3A6IEVudGl0eVByb3AsIGF0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyDsnbTsoIQg7ZSE66GtIOydtOumhCDsoIDsnqVcbiAgICBjb25zdCBvbGROYW1lID0gdGhpcy5wcm9wc1thdF0ubmFtZTtcblxuICAgIC8vIOyggOyepe2VoCDsl5Tti7Dti7BcbiAgICBjb25zdCBlbnRpdGllczogRW50aXR5W10gPSBbdGhpc107XG5cbiAgICAvLyDsnbTrpoTsnbQg67CU64CQIOqyveyasFxuICAgIGlmIChvbGROYW1lICE9PSBuZXdQcm9wLm5hbWUpIHtcbiAgICAgIC8vIOyghOyytCDsl5Tti7Dti7Dsl5DshJwg7ZiE7J6sIOyImOygleuQnCDtlITroa3snYQg7LC47KGw7ZWY6rOgIOyeiOuKlCDrqqjrk6Ag7ISc67iM7IWL7ZWE65OcIOywvuyVhOyEnCDsiJjsoJVcbiAgICAgIGNvbnN0IGFsbEVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgICBmb3IgKGNvbnN0IHJlbEVudGl0eUlkIG9mIGFsbEVudGl0eUlkcykge1xuICAgICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChyZWxFbnRpdHlJZCk7XG4gICAgICAgIGNvbnN0IHJlbEVudGl0eVN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhyZWxFbnRpdHkuc3Vic2V0cyk7XG4gICAgICAgIGZvciAoY29uc3Qgc3Vic2V0S2V5IG9mIHJlbEVudGl0eVN1YnNldEtleXMpIHtcbiAgICAgICAgICBjb25zdCBzdWJzZXQgPSByZWxFbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuXG4gICAgICAgICAgLy8g7ISc67iM7IWLIO2VhOuTnOulvCDsiJztmoztlZjrqbAsIOyXlO2LsO2LsC3tlITroa0g64uo7JyE66GcIOu2hOyEne2VnCDtm4Qg7ZiE7J6sIOyXlO2LsO2LsC3tlITroa3qs7wg7J287LmY7ZWY64qUIOqyveyasCDsiJjsoJUg7LKY66asXG4gICAgICAgICAgY29uc3QgbW9kaWZpZWRTdWJzZXRGaWVsZHMgPSBzdWJzZXQubWFwKChzdWJzZXRGaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYW5hbHl6ZWQgPSByZWxFbnRpdHkuYW5hbHl6ZVN1YnNldEZpZWxkKHN1YnNldEZpZWxkKTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVkID0gYW5hbHl6ZWQubWFwKChhKSA9PlxuICAgICAgICAgICAgICBhLnByb3BOYW1lID09PSBvbGROYW1lICYmIGEuZW50aXR5SWQgPT09IHRoaXMuaWRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWU6IG5ld1Byb3AubmFtZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IGEsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8g67aE7ISd7ZWcIO2VhOuTnOulvCDri6Tsi5wg7ISc67iM7IWLIO2VhOuTnOuhnCDrs7XqtaxcbiAgICAgICAgICAgIHJldHVybiBtb2RpZmllZC5tYXAoKGEpID0+IGEucHJvcE5hbWUpLmpvaW4oXCIuXCIpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHN1YnNldC5qb2luKFwiLFwiKSAhPT0gbW9kaWZpZWRTdWJzZXRGaWVsZHMuam9pbihcIixcIikpIHtcbiAgICAgICAgICAgIHJlbEVudGl0eS5zdWJzZXRzW3N1YnNldEtleV0gPSBtb2RpZmllZFN1YnNldEZpZWxkcztcbiAgICAgICAgICAgIGVudGl0aWVzLnB1c2gocmVsRW50aXR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDtlITroa0g7IiY7KCVXG4gICAgdGhpcy5wcm9wc1thdF0gPSBuZXdQcm9wO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZW50aXRpZXMubWFwKGFzeW5jIChlbnRpdHkpID0+IGVudGl0eS5zYXZlKCkpKTtcbiAgfVxuXG4gIGFzeW5jIGRlbFByb3AoYXQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIOydtOyghCDtlITroa0g7J2066aEIOyggOyepVxuICAgIGNvbnN0IG9sZE5hbWUgPSB0aGlzLnByb3BzW2F0XS5uYW1lO1xuXG4gICAgLy8g7KCA7J6l7ZWgIOyXlO2LsO2LsFxuICAgIGNvbnN0IGVudGl0aWVzOiBFbnRpdHlbXSA9IFt0aGlzXTtcblxuICAgIC8vIOyghOyytCDsl5Tti7Dti7Dsl5DshJwg7ZiE7J6sIOyCreygnOuQnCDtlITroa3snYQg7LC47KGw7ZWY6rOgIOyeiOuKlCDrqqjrk6Ag7ISc67iM7IWL7ZWE65OcIOywvuyVhOyEnCDsoJzsmbhcbiAgICBjb25zdCBhbGxFbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGZvciAoY29uc3QgcmVsRW50aXR5SWQgb2YgYWxsRW50aXR5SWRzKSB7XG4gICAgICBjb25zdCByZWxFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChyZWxFbnRpdHlJZCk7XG4gICAgICBjb25zdCByZWxFbnRpdHlTdWJzZXRLZXlzID0gT2JqZWN0LmtleXMocmVsRW50aXR5LnN1YnNldHMpO1xuICAgICAgZm9yIChjb25zdCBzdWJzZXRLZXkgb2YgcmVsRW50aXR5U3Vic2V0S2V5cykge1xuICAgICAgICBjb25zdCBzdWJzZXQgPSByZWxFbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuICAgICAgICAvLyDshJzruIzshYsg7ZWE65Oc66W8IOyInO2ajO2VmOupsCwg7JeU7Yuw7YuwLe2UhOuhrSDri6jsnITroZwg67aE7ISd7ZWcIO2bhCDtmITsnqwg7JeU7Yuw7YuwLe2UhOuhreqzvCDsnbzsuZjtlZjripQg6rK97JqwIOydtO2bhOydmCDtlYTrk5zrpbwg7KCc7Jm4XG4gICAgICAgIGNvbnN0IG1vZGlmaWVkU3Vic2V0RmllbGRzID0gc3Vic2V0XG4gICAgICAgICAgLm1hcCgoc3Vic2V0RmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFuYWx5emVkID0gcmVsRW50aXR5LmFuYWx5emVTdWJzZXRGaWVsZChzdWJzZXRGaWVsZCk7XG4gICAgICAgICAgICBpZiAoYW5hbHl6ZWQuZmluZCgoYSkgPT4gYS5wcm9wTmFtZSA9PT0gb2xkTmFtZSAmJiBhLmVudGl0eUlkID09PSB0aGlzLmlkKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBzdWJzZXRGaWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5maWx0ZXIobm9uTnVsbGFibGUpO1xuXG4gICAgICAgIGlmIChzdWJzZXQuam9pbihcIixcIikgIT09IG1vZGlmaWVkU3Vic2V0RmllbGRzLmpvaW4oXCIsXCIpKSB7XG4gICAgICAgICAgcmVsRW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XSA9IG1vZGlmaWVkU3Vic2V0RmllbGRzO1xuICAgICAgICAgIGVudGl0aWVzLnB1c2gocmVsRW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIO2YhOyerCDsl5Tti7Dti7DsnZgg7J24642x7Iqk7JeQ7IScIOygnOyZuFxuICAgIGZvciAoY29uc3QgaW5kZXggb2YgRW50aXR5TWFuYWdlci5nZXQodGhpcy5pZCkuaW5kZXhlcykge1xuICAgICAgaW5kZXguY29sdW1ucyA9IGluZGV4LmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBvbGROYW1lKTtcbiAgICB9XG5cbiAgICAvLyDtlITroa0g7IKt7KCcXG4gICAgdGhpcy5wcm9wcy5zcGxpY2UoYXQsIDEpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZW50aXRpZXMubWFwKGFzeW5jIChlbnRpdHkpID0+IGVudGl0eS5zYXZlKCkpKTtcbiAgfVxuXG4gIGdldEVudGl0eUlkRnJvbVN1YnNldEZpZWxkKHN1YnNldEZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChzdWJzZXRGaWVsZC5pbmNsdWRlcyhcIi5cIikgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pZDtcbiAgICB9XG5cbiAgICAvLyDshJzruIzshYsg7ZWE65Oc7J2YIOuniOyngOunieydgCDtlITroa3snbTrr4DroZwg7KCc7Jm4XG4gICAgY29uc3QgYXJyID0gc3Vic2V0RmllbGQuc3BsaXQoXCIuXCIpLnNsaWNlKDAsIC0xKTtcblxuICAgIC8vIOyEnOu4jOyFiyDtlYTrk5zrpbwg64K066Ck6rCA66m07IScIOuniOyngOunieycvOuhnCByZWxhdGlvbuuQnCDsl5Tti7Dti7Drpbwg7LC+7J2MXG4gICAgY29uc3QgbGFzdEVudGl0eUlkID0gYXJyLnJlZHVjZSgoZW50aXR5SWQsIGZpZWxkKSA9PiB7XG4gICAgICBjb25zdCByZWxQcm9wID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gZmllbGQpO1xuICAgICAgaWYgKCFyZWxQcm9wIHx8IHJlbFByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoeyBhcnIsIHRoaXNJZDogdGhpcy5pZCwgZW50aXR5SWQsIGZpZWxkIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOyemOuqu+uQnCDshJzruIzshYvtgqQgJHtzdWJzZXRGaWVsZH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZWxQcm9wLndpdGg7XG4gICAgfSwgdGhpcy5pZCk7XG4gICAgcmV0dXJuIGxhc3RFbnRpdHlJZDtcbiAgfVxuXG4gIGFzeW5jIG1vdmVQcm9wKGF0OiBudW1iZXIsIHRvOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wID0gdGhpcy5wcm9wc1thdF07XG4gICAgY29uc3QgbmV3UHJvcHMgPSBbLi4udGhpcy5wcm9wc107XG4gICAgbmV3UHJvcHMuc3BsaWNlKHRvLCAwLCBwcm9wKTtcbiAgICBuZXdQcm9wcy5zcGxpY2UoYXQgPCB0byA/IGF0IDogYXQgKyAxLCAxKTtcbiAgICB0aGlzLnByb3BzID0gbmV3UHJvcHM7XG5cbiAgICBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsIndyaXRlRmlsZSIsImluZmxlY3Rpb24iLCJwYXRoIiwiZ3JvdXAiLCJ1bmlxdWUiLCJ6IiwiU29uYW11IiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0VudW1Qcm9wIiwiaXNIYXNNYW55UmVsYXRpb25Qcm9wIiwiaXNJbnRlcm5hbFN1YnNldEZpZWxkIiwiaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsImlzUmVsYXRpb25Qcm9wIiwiaXNWaXJ0dWFsQ29kZVByb3AiLCJpc1ZpcnR1YWxQcm9wIiwibm9ybWFsaXplU3Vic2V0RmllbGQiLCJpbXBvcnRNZW1iZXJzIiwiZm9ybWF0Q29kZSIsImV4aXN0cyIsInJ1bnRpbWVQYXRoIiwiYXNzZXJ0RGVmaW5lZCIsIm5vbk51bGxhYmxlIiwiRW50aXR5TWFuYWdlciIsIkVudGl0eSIsImlkIiwicGFyZW50SWQiLCJ0YWJsZSIsInRpdGxlIiwibmFtZXMiLCJwcm9wcyIsInByb3BzRGljdCIsInJlbGF0aW9ucyIsImluZGV4ZXMiLCJzdWJzZXRzIiwic3Vic2V0c0ludGVybmFsIiwidHlwZXMiLCJlbnVtcyIsImVudW1MYWJlbHMiLCJ1bmRlcnNjb3JlIiwicGx1cmFsaXplIiwibWFwIiwicHJvcCIsImluY2x1ZGVzIiwicmVwbGFjZSIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwibmFtZSIsImZpbHRlciIsImtleSIsImZpZWxkcyIsImVudHJpZXMiLCJmIiwiZW51bUxhYmVsIiwiZW51bSIsImtleXMiLCJwYXJlbnRGcyIsImRhc2hlcml6ZSIsInRvTG93ZXJDYXNlIiwiZnMiLCJtb2R1bGUiLCJnZXRTdWJzZXRGaWVsZHNGb3JRdWVyeSIsInN1YnNldEtleSIsImdldFB1cmlTdWJzZXRRdWVyeSIsInN1YnNldCIsInN1YnNldFF1ZXJ5IiwicmVzb2x2ZVN1YnNldFF1ZXJ5IiwibGluZXMiLCJwdXNoIiwiam9pbiIsImpvaW5zIiwiam9pbk1ldGhvZCIsImFzIiwiY3VzdG9tIiwiZnJvbSIsInRvIiwic2VsZWN0T2JqIiwiYnVpbGROZXN0ZWRTZWxlY3RPYmplY3QiLCJzZWxlY3QiLCJzdHJpbmdpZnlOZXN0ZWRTZWxlY3RPYmplY3QiLCJzZWxlY3RJdGVtcyIsInJlc3VsdCIsInNlbGVjdEl0ZW0iLCJtYXRjaCIsImNvbHVtbiIsImFsaWFzIiwiY29sdW1uVmFsdWUiLCJ0cmltIiwic3BsaXQiLCJwb3AiLCJwYXJ0cyIsImN1cnJlbnQiLCJpIiwibGVuZ3RoIiwicGFydCIsIkVycm9yIiwic2xpY2UiLCJsYXN0UGFydCIsIm9iaiIsImluZGVudCIsIndpdGhCcmFjZXMiLCJzcGFjZXMiLCJyZXBlYXQiLCJpbm5lclNwYWNlcyIsInZhbHVlIiwiZ2V0UHVyaUxvYWRlclF1ZXJ5IiwibG9hZGVycyIsImdlbmVyYXRlTG9hZGVyQ29kZSIsImxvYWRlckxpbmVzIiwibG9hZGVyIiwidG9UYWJsZSIsInRvQ29sIiwidGhyb3VnaCIsIm1hbnlKb2luIiwiaWRGaWVsZCIsInVuZGVmaW5lZCIsIm9uZUpvaW5zIiwiZm9yRWFjaCIsInJlZklkIiwiZnJvbUNvbCIsImdldFN1YnNldFF1ZXJ5IiwicHJlZml4IiwiaXNBbHJlYWR5T3V0ZXJKb2luZWQiLCJzdWJzZXRHcm91cCIsImZpZWxkIiwicmVsIiwicmVkdWNlIiwiciIsImdyb3VwS2V5IiwicmVhbEZpZWxkcyIsInZpcnR1YWxDb2RlRmllbGRzIiwiY29uY2F0IiwidmlydHVhbCIsInJlbGF0aW9uIiwicmVsRW50aXR5IiwiZ2V0Iiwid2l0aCIsInJlbEZpZWxkcyIsImlubmVyT3JPdXRlciIsImhhc0pvaW5Db2x1bW4iLCJudWxsYWJsZSIsInJlbFN1YnNldFF1ZXJ5Iiwiam9pbkFzIiwiZnJvbVRhYmxlIiwiam9pbkNsYXVzZSIsImN1c3RvbUpvaW5DbGF1c2UiLCJjb252ZXJ0ZWRMb2FkZXJzIiwibmV3QXMiLCJmcm9tQ29sdW1uIiwiam9pbkNvbHVtbiIsImpvaW5UYWJsZSIsInNpbmd1bGFyaXplIiwiZmllbGRFeHByc1RvUHJvcE5vZGVzIiwiZmllbGRFeHBycyIsImVudGl0eSIsImdyb3VwcyIsImZpZWxkRXhwciIsImVsc2VFeHByIiwiZmxhdE1hcCIsInByb3BOYW1lIiwiZmluZCIsInAiLCJjb25zb2xlIiwibG9nIiwibm9kZVR5cGUiLCJpZFByb3AiLCJjaGlsZHJlbiIsImdldEZpZWxkRXhwcnMiLCJtYXhEZXB0aCIsImZyb21zIiwidiIsInJlbE1kIiwiZ2V0VGFibGVDb2x1bW5zIiwidHlwZSIsInJlbGF0aW9uVHlwZSIsImdldFZlY3RvckNvbHVtbnMiLCJnZXRWZWN0b3JDb2x1bW4iLCJjb2x1bW5OYW1lIiwidmVjdG9yUHJvcHMiLCJyZWdpc3Rlck1vZHVsZVBhdGhzIiwiYmFzZVBhdGgiLCJzZXRNb2R1bGVQYXRoIiwidG9VcHBlckNhc2UiLCJlbnVtSWQiLCJ0eXBlc01vZHVsZVBhdGgiLCJ0eXBlc0ZpbGVQYXRoIiwiYXBpUm9vdFBhdGgiLCJpbXBvcnRlZE1lbWJlcnMiLCJyZWdpc3RlclRhYmxlU3BlY3MiLCJ1bmlxdWVJbmRleGVzIiwiaWR4IiwiY29sdW1ucyIsImV2ZXJ5IiwiY29sIiwic2V0VGFibGVTcGVjIiwianNvbkNvbHVtbnMiLCJ0b0pzb24iLCJub3JtYWxGaWVsZHMiLCJpbnRlcm5hbEZpZWxkcyIsImludGVybmFsIiwic2F2ZSIsInN1YnNldFJvd3MiLCJnZXRTdWJzZXRSb3dzIiwic3Vic2V0Um93c1RvU3Vic2V0RmllbGRzIiwianNvblBhdGgiLCJqc29uIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlZ2lzdGVyIiwiX3N1YnNldHMiLCJfc3Vic2V0c0ludGVybmFsIiwicHJlZml4ZXMiLCJzdWJzZXRLZXlzIiwiYWxsRmllbGRzIiwiYWxsSW50ZXJuYWxGaWVsZHMiLCJjb21iaW5lZEZpZWxkcyIsInN0YXJ0c1dpdGgiLCJyZWxhdGlvbkVudGl0eSIsImlzT3BlbiIsImhhcyIsImNoaWxkIiwiaXNJbnRlcm5hbCIsInN1YnNldEZpZWxkcyIsInNvbWUiLCJoYXNLZXkiLCJzdWJzZXRSb3ciLCJmbGF0IiwiY3JlYXRlUHJvcCIsImF0Iiwic3BsaWNlIiwiYW5hbHl6ZVN1YnNldEZpZWxkIiwic3Vic2V0RmllbGQiLCJhcnIiLCJlbnRpdHlJZCIsIm1vZGlmeVByb3AiLCJuZXdQcm9wIiwib2xkTmFtZSIsImVudGl0aWVzIiwiYWxsRW50aXR5SWRzIiwiZ2V0QWxsSWRzIiwicmVsRW50aXR5SWQiLCJyZWxFbnRpdHlTdWJzZXRLZXlzIiwibW9kaWZpZWRTdWJzZXRGaWVsZHMiLCJhbmFseXplZCIsIm1vZGlmaWVkIiwiYSIsIlByb21pc2UiLCJhbGwiLCJkZWxQcm9wIiwiaW5kZXgiLCJnZXRFbnRpdHlJZEZyb21TdWJzZXRGaWVsZCIsImxhc3RFbnRpdHlJZCIsInJlbFByb3AiLCJkZWJ1ZyIsInRoaXNJZCIsIm1vdmVQcm9wIiwibmV3UHJvcHMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFlBQVksU0FBUztBQUM1QixTQUFTQyxTQUFTLFFBQVEsbUJBQWM7QUFDeEMsT0FB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
|
package/package.json
CHANGED
|
@@ -23,6 +23,7 @@ type TableData = {
|
|
|
23
23
|
rows: Record<string, unknown>[];
|
|
24
24
|
uniqueIndexes: EntityIndex[];
|
|
25
25
|
uniquesMap: Map<string, string>;
|
|
26
|
+
jsonColumns: string[];
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
// 참조 필드 타입
|
|
@@ -78,6 +79,7 @@ export class UpsertBuilder {
|
|
|
78
79
|
rows: [],
|
|
79
80
|
uniqueIndexes: tableSpec?.uniqueIndexes ?? [],
|
|
80
81
|
uniquesMap: new Map<string, string>(),
|
|
82
|
+
jsonColumns: tableSpec?.jsonColumns ?? [],
|
|
81
83
|
};
|
|
82
84
|
this.tables.set(tableName, tableData);
|
|
83
85
|
return tableData;
|
|
@@ -148,12 +150,12 @@ export class UpsertBuilder {
|
|
|
148
150
|
rowValue.use ??= "id";
|
|
149
151
|
table.references.add(`${rowValue.of}.${rowValue.use}`);
|
|
150
152
|
return [rowKey, rowValue];
|
|
153
|
+
} else if (table.jsonColumns.includes(rowKey) && rowValue !== null) {
|
|
154
|
+
// JSON 컬럼인 경우 JSON.stringify 처리 (Knex는 JSON 타입을 지원하지 않음)
|
|
155
|
+
return [rowKey, JSON.stringify(rowValue)];
|
|
151
156
|
} else if (isArray(rowValue)) {
|
|
152
157
|
// 배열은 그대로 저장
|
|
153
158
|
return [rowKey, rowValue];
|
|
154
|
-
} else if (typeof rowValue === "object" && !(rowValue instanceof Date)) {
|
|
155
|
-
// 일반 object인 경우 JSON으로 변환
|
|
156
|
-
return [rowKey, rowValue === null ? null : JSON.stringify(rowValue)];
|
|
157
159
|
} else {
|
|
158
160
|
return [rowKey, rowValue];
|
|
159
161
|
}
|