sonamu 0.7.29 → 0.7.31

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/dict/en.d.ts CHANGED
@@ -28,6 +28,9 @@ declare const _default: {
28
28
  readonly "validation.range": (field: string, min: number, max: number) => string;
29
29
  readonly "validation.email": "Invalid email format";
30
30
  readonly "validation.url": "Invalid URL format";
31
+ readonly "entity.list": (name: string) => string;
32
+ readonly "entity.create": (name: string) => string;
33
+ readonly "entity.edit": (name: string, id: number) => string;
31
34
  };
32
35
  export default _default;
33
36
  //# sourceMappingURL=en.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/dict/en.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;4CA4B8B,MAAM;6CACL,MAAM,OAAO,MAAM;6CAEnB,MAAM,OAAO,MAAM;yCAEvB,MAAM,OAAO,MAAM,OAAO,MAAM;;;;AAhC9D,wBAoCW"}
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/dict/en.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;4CA4B8B,MAAM;6CACL,MAAM,OAAO,MAAM;6CAEnB,MAAM,OAAO,MAAM;yCAEvB,MAAM,OAAO,MAAM,OAAO,MAAM;;;mCAMtC,MAAM;qCACJ,MAAM;mCACR,MAAM,MAAM,MAAM;;AAxC1C,wBAyCW"}
package/dist/dict/en.js CHANGED
@@ -30,7 +30,11 @@
30
30
  "validation.maxLength": (field, max)=>`${field} must be at most ${max} characters`,
31
31
  "validation.range": (field, min, max)=>`${field} must be between ${min} and ${max}`,
32
32
  "validation.email": "Invalid email format",
33
- "validation.url": "Invalid URL format"
33
+ "validation.url": "Invalid URL format",
34
+ // Entity pages (template functions)
35
+ "entity.list": (name)=>`${name} List`,
36
+ "entity.create": (name)=>`Create ${name}`,
37
+ "entity.edit": (name, id)=>`Edit ${name} (#${id})`
34
38
  };
35
39
 
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWN0L2VuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29uYW11IEJ1aWx0LWluIEVuZ2xpc2ggRGljdGlvbmFyeVxuICogUHJvamVjdCBjYW4gb3ZlcnJpZGUgdGhlc2UgYnkgZGVmaW5pbmcgdGhlIHNhbWUga2V5cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAvLyBFcnJvciBtZXNzYWdlc1xuICBcImVycm9yLmJhZFJlcXVlc3RcIjogXCJCYWQgUmVxdWVzdFwiLFxuICBcImVycm9yLnVuYXV0aG9yaXplZFwiOiBcIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXCIsXG4gIFwiZXJyb3IuZm9yYmlkZGVuXCI6IFwiUGVybWlzc2lvbiBkZW5pZWRcIixcbiAgXCJlcnJvci5ub3RGb3VuZFwiOiBcIk5vdCBmb3VuZFwiLFxuICBcImVycm9yLnNlcnZpY2VVbmF2YWlsYWJsZVwiOiBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG4gIFwiZXJyb3IuYWxyZWFkeVByb2Nlc3NlZFwiOiBcIkFscmVhZHkgcHJvY2Vzc2VkXCIsXG4gIFwiZXJyb3IuZHVwbGljYXRlUm93XCI6IFwiRHVwbGljYXRlIGRhdGFcIixcbiAgXCJlcnJvci50YXJnZXROb3RGb3VuZFwiOiBcIlRhcmdldCBub3QgZm91bmRcIixcblxuICAvLyBDb21tb24gVUlcbiAgXCJjb21tb24uc2F2ZVwiOiBcIlNhdmVcIixcbiAgXCJjb21tb24uY2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gIFwiY29tbW9uLmRlbGV0ZVwiOiBcIkRlbGV0ZVwiLFxuICBcImNvbW1vbi5lZGl0XCI6IFwiRWRpdFwiLFxuICBcImNvbW1vbi5jcmVhdGVcIjogXCJDcmVhdGVcIixcbiAgXCJjb21tb24uc2VhcmNoXCI6IFwiU2VhcmNoXCIsXG4gIFwiY29tbW9uLmNvbmZpcm1cIjogXCJDb25maXJtXCIsXG4gIFwiY29tbW9uLmNsb3NlXCI6IFwiQ2xvc2VcIixcblxuICAvLyBDb25maXJtYXRpb24gbWVzc2FnZXNcbiAgXCJjb25maXJtLmRlbGV0ZVwiOiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGU/XCIsXG4gIFwiY29uZmlybS5zYXZlXCI6IFwiRG8geW91IHdhbnQgdG8gc2F2ZT9cIixcblxuICAvLyBWYWxpZGF0aW9uIG1lc3NhZ2VzICh0ZW1wbGF0ZSBmdW5jdGlvbnMpXG4gIFwidmFsaWRhdGlvbi5yZXF1aXJlZFwiOiAoZmllbGQ6IHN0cmluZykgPT4gYCR7ZmllbGR9IGlzIHJlcXVpcmVkYCxcbiAgXCJ2YWxpZGF0aW9uLm1pbkxlbmd0aFwiOiAoZmllbGQ6IHN0cmluZywgbWluOiBudW1iZXIpID0+XG4gICAgYCR7ZmllbGR9IG11c3QgYmUgYXQgbGVhc3QgJHttaW59IGNoYXJhY3RlcnNgLFxuICBcInZhbGlkYXRpb24ubWF4TGVuZ3RoXCI6IChmaWVsZDogc3RyaW5nLCBtYXg6IG51bWJlcikgPT5cbiAgICBgJHtmaWVsZH0gbXVzdCBiZSBhdCBtb3N0ICR7bWF4fSBjaGFyYWN0ZXJzYCxcbiAgXCJ2YWxpZGF0aW9uLnJhbmdlXCI6IChmaWVsZDogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+XG4gICAgYCR7ZmllbGR9IG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWAsXG4gIFwidmFsaWRhdGlvbi5lbWFpbFwiOiBcIkludmFsaWQgZW1haWwgZm9ybWF0XCIsXG4gIFwidmFsaWRhdGlvbi51cmxcIjogXCJJbnZhbGlkIFVSTCBmb3JtYXRcIixcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiZmllbGQiLCJtaW4iLCJtYXgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELGVBQWU7SUFDYixpQkFBaUI7SUFDakIsb0JBQW9CO0lBQ3BCLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLHNCQUFzQjtJQUN0Qix3QkFBd0I7SUFFeEIsWUFBWTtJQUNaLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFFaEIsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFFaEIsMkNBQTJDO0lBQzNDLHVCQUF1QixDQUFDQSxRQUFrQixHQUFHQSxNQUFNLFlBQVksQ0FBQztJQUNoRSx3QkFBd0IsQ0FBQ0EsT0FBZUMsTUFDdEMsR0FBR0QsTUFBTSxrQkFBa0IsRUFBRUMsSUFBSSxXQUFXLENBQUM7SUFDL0Msd0JBQXdCLENBQUNELE9BQWVFLE1BQ3RDLEdBQUdGLE1BQU0saUJBQWlCLEVBQUVFLElBQUksV0FBVyxDQUFDO0lBQzlDLG9CQUFvQixDQUFDRixPQUFlQyxLQUFhQyxNQUMvQyxHQUFHRixNQUFNLGlCQUFpQixFQUFFQyxJQUFJLEtBQUssRUFBRUMsS0FBSztJQUM5QyxvQkFBb0I7SUFDcEIsa0JBQWtCO0FBQ3BCLEVBQVcifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWN0L2VuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29uYW11IEJ1aWx0LWluIEVuZ2xpc2ggRGljdGlvbmFyeVxuICogUHJvamVjdCBjYW4gb3ZlcnJpZGUgdGhlc2UgYnkgZGVmaW5pbmcgdGhlIHNhbWUga2V5cy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAvLyBFcnJvciBtZXNzYWdlc1xuICBcImVycm9yLmJhZFJlcXVlc3RcIjogXCJCYWQgUmVxdWVzdFwiLFxuICBcImVycm9yLnVuYXV0aG9yaXplZFwiOiBcIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXCIsXG4gIFwiZXJyb3IuZm9yYmlkZGVuXCI6IFwiUGVybWlzc2lvbiBkZW5pZWRcIixcbiAgXCJlcnJvci5ub3RGb3VuZFwiOiBcIk5vdCBmb3VuZFwiLFxuICBcImVycm9yLnNlcnZpY2VVbmF2YWlsYWJsZVwiOiBcIlNlcnZpY2UgdW5hdmFpbGFibGVcIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG4gIFwiZXJyb3IuYWxyZWFkeVByb2Nlc3NlZFwiOiBcIkFscmVhZHkgcHJvY2Vzc2VkXCIsXG4gIFwiZXJyb3IuZHVwbGljYXRlUm93XCI6IFwiRHVwbGljYXRlIGRhdGFcIixcbiAgXCJlcnJvci50YXJnZXROb3RGb3VuZFwiOiBcIlRhcmdldCBub3QgZm91bmRcIixcblxuICAvLyBDb21tb24gVUlcbiAgXCJjb21tb24uc2F2ZVwiOiBcIlNhdmVcIixcbiAgXCJjb21tb24uY2FuY2VsXCI6IFwiQ2FuY2VsXCIsXG4gIFwiY29tbW9uLmRlbGV0ZVwiOiBcIkRlbGV0ZVwiLFxuICBcImNvbW1vbi5lZGl0XCI6IFwiRWRpdFwiLFxuICBcImNvbW1vbi5jcmVhdGVcIjogXCJDcmVhdGVcIixcbiAgXCJjb21tb24uc2VhcmNoXCI6IFwiU2VhcmNoXCIsXG4gIFwiY29tbW9uLmNvbmZpcm1cIjogXCJDb25maXJtXCIsXG4gIFwiY29tbW9uLmNsb3NlXCI6IFwiQ2xvc2VcIixcblxuICAvLyBDb25maXJtYXRpb24gbWVzc2FnZXNcbiAgXCJjb25maXJtLmRlbGV0ZVwiOiBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGU/XCIsXG4gIFwiY29uZmlybS5zYXZlXCI6IFwiRG8geW91IHdhbnQgdG8gc2F2ZT9cIixcblxuICAvLyBWYWxpZGF0aW9uIG1lc3NhZ2VzICh0ZW1wbGF0ZSBmdW5jdGlvbnMpXG4gIFwidmFsaWRhdGlvbi5yZXF1aXJlZFwiOiAoZmllbGQ6IHN0cmluZykgPT4gYCR7ZmllbGR9IGlzIHJlcXVpcmVkYCxcbiAgXCJ2YWxpZGF0aW9uLm1pbkxlbmd0aFwiOiAoZmllbGQ6IHN0cmluZywgbWluOiBudW1iZXIpID0+XG4gICAgYCR7ZmllbGR9IG11c3QgYmUgYXQgbGVhc3QgJHttaW59IGNoYXJhY3RlcnNgLFxuICBcInZhbGlkYXRpb24ubWF4TGVuZ3RoXCI6IChmaWVsZDogc3RyaW5nLCBtYXg6IG51bWJlcikgPT5cbiAgICBgJHtmaWVsZH0gbXVzdCBiZSBhdCBtb3N0ICR7bWF4fSBjaGFyYWN0ZXJzYCxcbiAgXCJ2YWxpZGF0aW9uLnJhbmdlXCI6IChmaWVsZDogc3RyaW5nLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpID0+XG4gICAgYCR7ZmllbGR9IG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWAsXG4gIFwidmFsaWRhdGlvbi5lbWFpbFwiOiBcIkludmFsaWQgZW1haWwgZm9ybWF0XCIsXG4gIFwidmFsaWRhdGlvbi51cmxcIjogXCJJbnZhbGlkIFVSTCBmb3JtYXRcIixcblxuICAvLyBFbnRpdHkgcGFnZXMgKHRlbXBsYXRlIGZ1bmN0aW9ucylcbiAgXCJlbnRpdHkubGlzdFwiOiAobmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lfSBMaXN0YCxcbiAgXCJlbnRpdHkuY3JlYXRlXCI6IChuYW1lOiBzdHJpbmcpID0+IGBDcmVhdGUgJHtuYW1lfWAsXG4gIFwiZW50aXR5LmVkaXRcIjogKG5hbWU6IHN0cmluZywgaWQ6IG51bWJlcikgPT4gYEVkaXQgJHtuYW1lfSAoIyR7aWR9KWAsXG59IGFzIGNvbnN0O1xuIl0sIm5hbWVzIjpbImZpZWxkIiwibWluIiwibWF4IiwibmFtZSIsImlkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxlQUFlO0lBQ2IsaUJBQWlCO0lBQ2pCLG9CQUFvQjtJQUNwQixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLGtCQUFrQjtJQUNsQiw0QkFBNEI7SUFDNUIsNkJBQTZCO0lBQzdCLDBCQUEwQjtJQUMxQixzQkFBc0I7SUFDdEIsd0JBQXdCO0lBRXhCLFlBQVk7SUFDWixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBRWhCLHdCQUF3QjtJQUN4QixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBRWhCLDJDQUEyQztJQUMzQyx1QkFBdUIsQ0FBQ0EsUUFBa0IsR0FBR0EsTUFBTSxZQUFZLENBQUM7SUFDaEUsd0JBQXdCLENBQUNBLE9BQWVDLE1BQ3RDLEdBQUdELE1BQU0sa0JBQWtCLEVBQUVDLElBQUksV0FBVyxDQUFDO0lBQy9DLHdCQUF3QixDQUFDRCxPQUFlRSxNQUN0QyxHQUFHRixNQUFNLGlCQUFpQixFQUFFRSxJQUFJLFdBQVcsQ0FBQztJQUM5QyxvQkFBb0IsQ0FBQ0YsT0FBZUMsS0FBYUMsTUFDL0MsR0FBR0YsTUFBTSxpQkFBaUIsRUFBRUMsSUFBSSxLQUFLLEVBQUVDLEtBQUs7SUFDOUMsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUVsQixvQ0FBb0M7SUFDcEMsZUFBZSxDQUFDQyxPQUFpQixHQUFHQSxLQUFLLEtBQUssQ0FBQztJQUMvQyxpQkFBaUIsQ0FBQ0EsT0FBaUIsQ0FBQyxPQUFPLEVBQUVBLE1BQU07SUFDbkQsZUFBZSxDQUFDQSxNQUFjQyxLQUFlLENBQUMsS0FBSyxFQUFFRCxLQUFLLEdBQUcsRUFBRUMsR0FBRyxDQUFDLENBQUM7QUFDdEUsRUFBVyJ9
package/dist/dict/ko.d.ts CHANGED
@@ -28,6 +28,9 @@ declare const _default: {
28
28
  readonly "validation.range": (field: string, min: number, max: number) => string;
29
29
  readonly "validation.email": "올바른 이메일 형식이 아닙니다";
30
30
  readonly "validation.url": "올바른 URL 형식이 아닙니다";
31
+ readonly "entity.list": (name: string) => string;
32
+ readonly "entity.create": (name: string) => string;
33
+ readonly "entity.edit": (name: string, id: number) => string;
31
34
  };
32
35
  export default _default;
33
36
  //# sourceMappingURL=ko.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/dict/ko.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;4CA4B8B,MAAM;6CACL,MAAM,OAAO,MAAM;6CAEnB,MAAM,OAAO,MAAM;yCAEvB,MAAM,OAAO,MAAM,OAAO,MAAM;;;;AAhC9D,wBAoCW"}
1
+ {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/dict/ko.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;4CA4B8B,MAAM;6CACL,MAAM,OAAO,MAAM;6CAEnB,MAAM,OAAO,MAAM;yCAEvB,MAAM,OAAO,MAAM,OAAO,MAAM;;;mCAMtC,MAAM;qCACJ,MAAM;mCACR,MAAM,MAAM,MAAM;;AAxC1C,wBAyCW"}
package/dist/dict/ko.js CHANGED
@@ -30,7 +30,11 @@
30
30
  "validation.maxLength": (field, max)=>`${field}은(는) 최대 ${max}자까지 입력할 수 있습니다`,
31
31
  "validation.range": (field, min, max)=>`${field}은(는) ${min}~${max} 사이여야 합니다`,
32
32
  "validation.email": "올바른 이메일 형식이 아닙니다",
33
- "validation.url": "올바른 URL 형식이 아닙니다"
33
+ "validation.url": "올바른 URL 형식이 아닙니다",
34
+ // Entity 페이지 (템플릿 함수)
35
+ "entity.list": (name)=>`${name} 목록`,
36
+ "entity.create": (name)=>`${name} 생성`,
37
+ "entity.edit": (name, id)=>`${name} 수정 (#${id})`
34
38
  };
35
39
 
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWN0L2tvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29uYW11IOuCtOyepSDtlZzqta3slrQgRGljdGlvbmFyeVxuICog7ZSE66Gc7KCd7Yq47JeQ7IScIOuPmeydvO2VnCDtgqTrpbwg7KCV7J2Y7ZWY66m0IOuNruyWtOyUgeuLiOuLpC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAvLyDsl5Drn6wg66mU7Iuc7KeAXG4gIFwiZXJyb3IuYmFkUmVxdWVzdFwiOiBcIuyemOuqu+uQnCDsmpTssq3snoXri4jri6RcIixcbiAgXCJlcnJvci51bmF1dGhvcml6ZWRcIjogXCLsnbjspp3snbQg7ZWE7JqU7ZWp64uI64ukXCIsXG4gIFwiZXJyb3IuZm9yYmlkZGVuXCI6IFwi6raM7ZWc7J20IOyXhuyKteuLiOuLpFwiLFxuICBcImVycm9yLm5vdEZvdW5kXCI6IFwi7LC+7J2EIOyImCDsl4bsirXri4jri6RcIixcbiAgXCJlcnJvci5zZXJ2aWNlVW5hdmFpbGFibGVcIjogXCLshJzruYTsiqTrpbwg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6RcIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwi7ISc67KEIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6RcIixcbiAgXCJlcnJvci5hbHJlYWR5UHJvY2Vzc2VkXCI6IFwi7J2066+4IOyymOumrOuQmOyXiOyKteuLiOuLpFwiLFxuICBcImVycm9yLmR1cGxpY2F0ZVJvd1wiOiBcIuykkeuzteuQnCDrjbDsnbTthLDsnoXri4jri6RcIixcbiAgXCJlcnJvci50YXJnZXROb3RGb3VuZFwiOiBcIuuMgOyDgeydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpFwiLFxuXG4gIC8vIOqzte2GtSBVSVxuICBcImNvbW1vbi5zYXZlXCI6IFwi7KCA7J6lXCIsXG4gIFwiY29tbW9uLmNhbmNlbFwiOiBcIuy3qOyGjFwiLFxuICBcImNvbW1vbi5kZWxldGVcIjogXCLsgq3soJxcIixcbiAgXCJjb21tb24uZWRpdFwiOiBcIuyImOyglVwiLFxuICBcImNvbW1vbi5jcmVhdGVcIjogXCLsg53shLFcIixcbiAgXCJjb21tb24uc2VhcmNoXCI6IFwi6rKA7IOJXCIsXG4gIFwiY29tbW9uLmNvbmZpcm1cIjogXCLtmZXsnbhcIixcbiAgXCJjb21tb24uY2xvc2VcIjogXCLri6vquLBcIixcblxuICAvLyDtmZXsnbgg66mU7Iuc7KeAXG4gIFwiY29uZmlybS5kZWxldGVcIjogXCLsoJXrp5Ag7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBcImNvbmZpcm0uc2F2ZVwiOiBcIuyggOyepe2VmOyLnOqyoOyKteuLiOq5jD9cIixcblxuICAvLyDqsoDspp0g66mU7Iuc7KeAICjthZztlIzrpr8g7ZWo7IiYKVxuICBcInZhbGlkYXRpb24ucmVxdWlyZWRcIjogKGZpZWxkOiBzdHJpbmcpID0+IGAke2ZpZWxkfeydgCjripQpIO2VhOyImOyeheuLiOuLpGAsXG4gIFwidmFsaWRhdGlvbi5taW5MZW5ndGhcIjogKGZpZWxkOiBzdHJpbmcsIG1pbjogbnVtYmVyKSA9PlxuICAgIGAke2ZpZWxkfeydgCjripQpIOy1nOyGjCAke21pbn3snpAg7J207IOB7J207Ja07JW8IO2VqeuLiOuLpGAsXG4gIFwidmFsaWRhdGlvbi5tYXhMZW5ndGhcIjogKGZpZWxkOiBzdHJpbmcsIG1heDogbnVtYmVyKSA9PlxuICAgIGAke2ZpZWxkfeydgCjripQpIOy1nOuMgCAke21heH3snpDquYzsp4Ag7J6F66Cl7ZWgIOyImCDsnojsirXri4jri6RgLFxuICBcInZhbGlkYXRpb24ucmFuZ2VcIjogKGZpZWxkOiBzdHJpbmcsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikgPT5cbiAgICBgJHtmaWVsZH3snYAo64qUKSAke21pbn1+JHttYXh9IOyCrOydtOyXrOyVvCDtlanri4jri6RgLFxuICBcInZhbGlkYXRpb24uZW1haWxcIjogXCLsmKzrsJTrpbgg7J2066mU7J28IO2YleyLneydtCDslYTri5nri4jri6RcIixcbiAgXCJ2YWxpZGF0aW9uLnVybFwiOiBcIuyYrOuwlOuluCBVUkwg7ZiV7Iud7J20IOyVhOuLmeuLiOuLpFwiLFxufSBhcyBjb25zdDtcbiJdLCJuYW1lcyI6WyJmaWVsZCIsIm1pbiIsIm1heCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsZUFBZTtJQUNiLFNBQVM7SUFDVCxvQkFBb0I7SUFDcEIsc0JBQXNCO0lBQ3RCLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsNEJBQTRCO0lBQzVCLDZCQUE2QjtJQUM3QiwwQkFBMEI7SUFDMUIsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUV4QixRQUFRO0lBQ1IsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUVoQixTQUFTO0lBQ1Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUVoQixrQkFBa0I7SUFDbEIsdUJBQXVCLENBQUNBLFFBQWtCLEdBQUdBLE1BQU0sVUFBVSxDQUFDO0lBQzlELHdCQUF3QixDQUFDQSxPQUFlQyxNQUN0QyxHQUFHRCxNQUFNLFFBQVEsRUFBRUMsSUFBSSxXQUFXLENBQUM7SUFDckMsd0JBQXdCLENBQUNELE9BQWVFLE1BQ3RDLEdBQUdGLE1BQU0sUUFBUSxFQUFFRSxJQUFJLGNBQWMsQ0FBQztJQUN4QyxvQkFBb0IsQ0FBQ0YsT0FBZUMsS0FBYUMsTUFDL0MsR0FBR0YsTUFBTSxLQUFLLEVBQUVDLElBQUksQ0FBQyxFQUFFQyxJQUFJLFNBQVMsQ0FBQztJQUN2QyxvQkFBb0I7SUFDcEIsa0JBQWtCO0FBQ3BCLEVBQVcifQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWN0L2tvLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU29uYW11IOuCtOyepSDtlZzqta3slrQgRGljdGlvbmFyeVxuICog7ZSE66Gc7KCd7Yq47JeQ7IScIOuPmeydvO2VnCDtgqTrpbwg7KCV7J2Y7ZWY66m0IOuNruyWtOyUgeuLiOuLpC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICAvLyDsl5Drn6wg66mU7Iuc7KeAXG4gIFwiZXJyb3IuYmFkUmVxdWVzdFwiOiBcIuyemOuqu+uQnCDsmpTssq3snoXri4jri6RcIixcbiAgXCJlcnJvci51bmF1dGhvcml6ZWRcIjogXCLsnbjspp3snbQg7ZWE7JqU7ZWp64uI64ukXCIsXG4gIFwiZXJyb3IuZm9yYmlkZGVuXCI6IFwi6raM7ZWc7J20IOyXhuyKteuLiOuLpFwiLFxuICBcImVycm9yLm5vdEZvdW5kXCI6IFwi7LC+7J2EIOyImCDsl4bsirXri4jri6RcIixcbiAgXCJlcnJvci5zZXJ2aWNlVW5hdmFpbGFibGVcIjogXCLshJzruYTsiqTrpbwg7IKs7Jqp7ZWgIOyImCDsl4bsirXri4jri6RcIixcbiAgXCJlcnJvci5pbnRlcm5hbFNlcnZlckVycm9yXCI6IFwi7ISc67KEIOyYpOulmOqwgCDrsJzsg53tlojsirXri4jri6RcIixcbiAgXCJlcnJvci5hbHJlYWR5UHJvY2Vzc2VkXCI6IFwi7J2066+4IOyymOumrOuQmOyXiOyKteuLiOuLpFwiLFxuICBcImVycm9yLmR1cGxpY2F0ZVJvd1wiOiBcIuykkeuzteuQnCDrjbDsnbTthLDsnoXri4jri6RcIixcbiAgXCJlcnJvci50YXJnZXROb3RGb3VuZFwiOiBcIuuMgOyDgeydhCDssL7snYQg7IiYIOyXhuyKteuLiOuLpFwiLFxuXG4gIC8vIOqzte2GtSBVSVxuICBcImNvbW1vbi5zYXZlXCI6IFwi7KCA7J6lXCIsXG4gIFwiY29tbW9uLmNhbmNlbFwiOiBcIuy3qOyGjFwiLFxuICBcImNvbW1vbi5kZWxldGVcIjogXCLsgq3soJxcIixcbiAgXCJjb21tb24uZWRpdFwiOiBcIuyImOyglVwiLFxuICBcImNvbW1vbi5jcmVhdGVcIjogXCLsg53shLFcIixcbiAgXCJjb21tb24uc2VhcmNoXCI6IFwi6rKA7IOJXCIsXG4gIFwiY29tbW9uLmNvbmZpcm1cIjogXCLtmZXsnbhcIixcbiAgXCJjb21tb24uY2xvc2VcIjogXCLri6vquLBcIixcblxuICAvLyDtmZXsnbgg66mU7Iuc7KeAXG4gIFwiY29uZmlybS5kZWxldGVcIjogXCLsoJXrp5Ag7IKt7KCc7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBcImNvbmZpcm0uc2F2ZVwiOiBcIuyggOyepe2VmOyLnOqyoOyKteuLiOq5jD9cIixcblxuICAvLyDqsoDspp0g66mU7Iuc7KeAICjthZztlIzrpr8g7ZWo7IiYKVxuICBcInZhbGlkYXRpb24ucmVxdWlyZWRcIjogKGZpZWxkOiBzdHJpbmcpID0+IGAke2ZpZWxkfeydgCjripQpIO2VhOyImOyeheuLiOuLpGAsXG4gIFwidmFsaWRhdGlvbi5taW5MZW5ndGhcIjogKGZpZWxkOiBzdHJpbmcsIG1pbjogbnVtYmVyKSA9PlxuICAgIGAke2ZpZWxkfeydgCjripQpIOy1nOyGjCAke21pbn3snpAg7J207IOB7J207Ja07JW8IO2VqeuLiOuLpGAsXG4gIFwidmFsaWRhdGlvbi5tYXhMZW5ndGhcIjogKGZpZWxkOiBzdHJpbmcsIG1heDogbnVtYmVyKSA9PlxuICAgIGAke2ZpZWxkfeydgCjripQpIOy1nOuMgCAke21heH3snpDquYzsp4Ag7J6F66Cl7ZWgIOyImCDsnojsirXri4jri6RgLFxuICBcInZhbGlkYXRpb24ucmFuZ2VcIjogKGZpZWxkOiBzdHJpbmcsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikgPT5cbiAgICBgJHtmaWVsZH3snYAo64qUKSAke21pbn1+JHttYXh9IOyCrOydtOyXrOyVvCDtlanri4jri6RgLFxuICBcInZhbGlkYXRpb24uZW1haWxcIjogXCLsmKzrsJTrpbgg7J2066mU7J28IO2YleyLneydtCDslYTri5nri4jri6RcIixcbiAgXCJ2YWxpZGF0aW9uLnVybFwiOiBcIuyYrOuwlOuluCBVUkwg7ZiV7Iud7J20IOyVhOuLmeuLiOuLpFwiLFxuXG4gIC8vIEVudGl0eSDtjpjsnbTsp4AgKO2FnO2UjOumvyDtlajsiJgpXG4gIFwiZW50aXR5Lmxpc3RcIjogKG5hbWU6IHN0cmluZykgPT4gYCR7bmFtZX0g66qp66GdYCxcbiAgXCJlbnRpdHkuY3JlYXRlXCI6IChuYW1lOiBzdHJpbmcpID0+IGAke25hbWV9IOyDneyEsWAsXG4gIFwiZW50aXR5LmVkaXRcIjogKG5hbWU6IHN0cmluZywgaWQ6IG51bWJlcikgPT4gYCR7bmFtZX0g7IiY7KCVICgjJHtpZH0pYCxcbn0gYXMgY29uc3Q7XG4iXSwibmFtZXMiOlsiZmllbGQiLCJtaW4iLCJtYXgiLCJuYW1lIiwiaWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELGVBQWU7SUFDYixTQUFTO0lBQ1Qsb0JBQW9CO0lBQ3BCLHNCQUFzQjtJQUN0QixtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLHNCQUFzQjtJQUN0Qix3QkFBd0I7SUFFeEIsUUFBUTtJQUNSLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFFaEIsU0FBUztJQUNULGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFFaEIsa0JBQWtCO0lBQ2xCLHVCQUF1QixDQUFDQSxRQUFrQixHQUFHQSxNQUFNLFVBQVUsQ0FBQztJQUM5RCx3QkFBd0IsQ0FBQ0EsT0FBZUMsTUFDdEMsR0FBR0QsTUFBTSxRQUFRLEVBQUVDLElBQUksV0FBVyxDQUFDO0lBQ3JDLHdCQUF3QixDQUFDRCxPQUFlRSxNQUN0QyxHQUFHRixNQUFNLFFBQVEsRUFBRUUsSUFBSSxjQUFjLENBQUM7SUFDeEMsb0JBQW9CLENBQUNGLE9BQWVDLEtBQWFDLE1BQy9DLEdBQUdGLE1BQU0sS0FBSyxFQUFFQyxJQUFJLENBQUMsRUFBRUMsSUFBSSxTQUFTLENBQUM7SUFDdkMsb0JBQW9CO0lBQ3BCLGtCQUFrQjtJQUVsQixzQkFBc0I7SUFDdEIsZUFBZSxDQUFDQyxPQUFpQixHQUFHQSxLQUFLLEdBQUcsQ0FBQztJQUM3QyxpQkFBaUIsQ0FBQ0EsT0FBaUIsR0FBR0EsS0FBSyxHQUFHLENBQUM7SUFDL0MsZUFBZSxDQUFDQSxNQUFjQyxLQUFlLEdBQUdELEtBQUssTUFBTSxFQUFFQyxHQUFHLENBQUMsQ0FBQztBQUNwRSxFQUFXIn0=
@@ -21,11 +21,9 @@ export declare class Template__sd extends Template {
21
21
  private capitalize;
22
22
  /**
23
23
  * 모든 entity.json에서 entity labels 추출
24
+ * entity.json에서 직접 관리되는 값만 포함 (자동 생성 값 제외)
24
25
  * - entity.{entityId}: entity title
25
26
  * - entity.{entityId}.{propName}: prop desc
26
- * - entity.{entityId}.list: 목록
27
- * - entity.{entityId}.create: 생성
28
- * - entity.{entityId}.edit: 수정 (함수)
29
27
  * - enum.{EnumId}.{value}: enum label
30
28
  */
31
29
  private extractEntityLabels;
@@ -34,5 +32,9 @@ export declare class Template__sd extends Template {
34
32
  */
35
33
  private generateEntityLabelsCode;
36
34
  private escapeString;
35
+ /**
36
+ * sonamu dict 소스 파일을 읽어 파싱하고 코드로 변환
37
+ */
38
+ private generateDictCodeFromSource;
37
39
  }
38
40
  //# sourceMappingURL=sd.template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sd.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/sd.template.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ;;IAKxC,gBAAgB,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK;;;;IAW7E,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC;;;;;;;IA8KrC,OAAO,CAAC,UAAU;IAIlB;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,YAAY;CAGrB"}
1
+ {"version":3,"file":"sd.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/sd.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;GAGG;AACH,qBAAa,YAAa,SAAQ,QAAQ;;IAKxC,gBAAgB,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK;;;;IAW7E,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC;;;;;;;IAsLrC,OAAO,CAAC,UAAU;IAIlB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAiC3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAyBnC"}
@@ -1,6 +1,8 @@
1
+ import fs from "fs";
2
+ import path from "path";
1
3
  import { Sonamu } from "../../api/sonamu.js";
2
- import { sonamuDictEn, sonamuDictKo } from "../../dict/index.js";
3
4
  import { EntityManager } from "../../entity/entity-manager.js";
5
+ import { parseDictFile } from "../../utils/dict-parser.js";
4
6
  import { Template } from "../template.js";
5
7
  /**
6
8
  * Sonamu Dictionary (SD) 템플릿
@@ -52,6 +54,9 @@ export function getCurrentLocale(): string {
52
54
  return _currentLocale;
53
55
  }
54
56
  `.trim();
57
+ // sonamuDict를 소스 파일에서 파싱하여 코드로 변환 (타입 정보 보존)
58
+ const sonamuDictKoCode = this.generateDictCodeFromSource("sonamuDictKo", "ko");
59
+ const sonamuDictEnCode = this.generateDictCodeFromSource("sonamuDictEn", "en");
55
60
  // locale import
56
61
  const localeImports = supportedLocales.map((locale)=>`import ${locale} from "./${locale}";`).join("\n");
57
62
  // entityLabels를 코드로 변환
@@ -62,10 +67,10 @@ ${localeManagementCode}
62
67
  ${localeImports}
63
68
 
64
69
  // entity.json에서 추출한 entity labels (defaultLocale 전용)
65
- ${entityLabelsCode}
70
+ ${entityLabelsCode}
66
71
 
67
- const sonamuDictKo = ${JSON.stringify(sonamuDictKo, null, 2)};
68
- const sonamuDictEn = ${JSON.stringify(sonamuDictEn, null, 2)};
72
+ ${sonamuDictKoCode}
73
+ ${sonamuDictEnCode}
69
74
 
70
75
  // defaultLocale의 dictionary를 기준으로 키 추출
71
76
  type ProjectDictionary = typeof ${defaultLocale};
@@ -89,7 +94,10 @@ export function defineLocale(dict: Partial<MergedDictionary>) {
89
94
  // 각 locale별로 entity labels + Sonamu 내장 dict + 프로젝트 dict 합침
90
95
  const dictionaries: Record<string, Partial<MergedDictionary>> = {
91
96
  ${defaultLocale}: { ...sonamuDict${this.capitalize(defaultLocale)}, ...entityLabels, ...${defaultLocale} },
92
- ${supportedLocales.filter((locale)=>locale !== defaultLocale).map((locale)=>` ${locale}: { ...sonamuDict${this.capitalize(locale)}, ...${locale} },`).join("\n")}
97
+ ${supportedLocales.filter((locale)=>locale !== defaultLocale).map((locale)=>[
98
+ "en",
99
+ "ko"
100
+ ].includes(locale) ? ` ${locale}: { ...sonamuDict${this.capitalize(locale)}, ...${locale} },` : ` ${locale}: { ...${locale} },`).join("\n")}
93
101
  };
94
102
 
95
103
  type SDReturnType<K extends DictKey> = MergedDictionary[K] extends (...args: infer P) => string
@@ -183,11 +191,9 @@ SD.enumLabels = (enumName: string): Record<string, LocalizedString> => {
183
191
  }
184
192
  /**
185
193
  * 모든 entity.json에서 entity labels 추출
194
+ * entity.json에서 직접 관리되는 값만 포함 (자동 생성 값 제외)
186
195
  * - entity.{entityId}: entity title
187
196
  * - entity.{entityId}.{propName}: prop desc
188
- * - entity.{entityId}.list: 목록
189
- * - entity.{entityId}.create: 생성
190
- * - entity.{entityId}.edit: 수정 (함수)
191
197
  * - enum.{EnumId}.{value}: enum label
192
198
  */ extractEntityLabels() {
193
199
  const labels = [];
@@ -197,26 +203,12 @@ SD.enumLabels = (enumName: string): Record<string, LocalizedString> => {
197
203
  const entityIds = EntityManager.getAllIds();
198
204
  for (const entityId of entityIds){
199
205
  const entity = EntityManager.get(entityId);
200
- // entity title
206
+ // entity title (entity.json에서 관리)
201
207
  labels.push({
202
208
  key: `entity.${entityId}`,
203
209
  value: entity.title
204
210
  });
205
- // entity CRUD labels
206
- labels.push({
207
- key: `entity.${entityId}.list`,
208
- value: `${entity.title} 목록`
209
- });
210
- labels.push({
211
- key: `entity.${entityId}.create`,
212
- value: `${entity.title} 생성`
213
- });
214
- labels.push({
215
- key: `entity.${entityId}.edit`,
216
- value: `${entity.title} 수정 (#\${id})`,
217
- isFunction: true
218
- });
219
- // prop labels (prop name을 camelCase로 변환)
211
+ // prop labels (entity.json에서 관리)
220
212
  for (const prop of entity.props){
221
213
  if (prop.desc) {
222
214
  labels.push({
@@ -225,7 +217,7 @@ SD.enumLabels = (enumName: string): Record<string, LocalizedString> => {
225
217
  });
226
218
  }
227
219
  }
228
- // enum labels
220
+ // enum labels (entity.json에서 관리)
229
221
  for (const [enumId, enumLabelsMap] of Object.entries(entity.enumLabels)){
230
222
  for (const [value, label] of Object.entries(enumLabelsMap)){
231
223
  labels.push({
@@ -243,15 +235,7 @@ SD.enumLabels = (enumName: string): Record<string, LocalizedString> => {
243
235
  if (labels.length === 0) {
244
236
  return "const entityLabels = {} as const;";
245
237
  }
246
- const entries = [];
247
- for (const { key, value, isFunction } of labels){
248
- if (isFunction) {
249
- // 함수로 생성 (id 파라미터)
250
- entries.push(` "${key}": (id: number) => \`${value}\`,`);
251
- } else {
252
- entries.push(` "${key}": "${this.escapeString(value)}",`);
253
- }
254
- }
238
+ const entries = labels.map(({ key, value })=>` "${key}": "${this.escapeString(value)}",`);
255
239
  return `const entityLabels = {
256
240
  ${entries.join("\n")}
257
241
  } as const;`;
@@ -259,6 +243,28 @@ ${entries.join("\n")}
259
243
  escapeString(str) {
260
244
  return str.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n");
261
245
  }
246
+ /**
247
+ * sonamu dict 소스 파일을 읽어 파싱하고 코드로 변환
248
+ */ generateDictCodeFromSource(varName, locale) {
249
+ // sonamu 패키지 루트에서 src/dict 경로 찾기
250
+ // __dirname이 dist/template/implementations일 수 있으므로 패키지 루트 기준으로 접근
251
+ const packageRoot = path.resolve(import.meta.dirname, "..", "..", "..");
252
+ const dictPath = path.join(packageRoot, "src", "dict", `${locale}.ts`);
253
+ if (!fs.existsSync(dictPath)) {
254
+ return `const ${varName} = {};`;
255
+ }
256
+ const entries = parseDictFile(dictPath);
257
+ if (entries.length === 0) {
258
+ return `const ${varName} = {};`;
259
+ }
260
+ const entryLines = entries.map(({ key, value, isFunction })=>{
261
+ const codeValue = isFunction ? value : `"${this.escapeString(value)}"`;
262
+ return ` "${key}": ${codeValue},`;
263
+ });
264
+ return `const ${varName} = {
265
+ ${entryLines.join("\n")}
266
+ };`;
267
+ }
262
268
  }
263
269
 
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uLy4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHNvbmFtdURpY3RFbiwgc29uYW11RGljdEtvIH0gZnJvbSBcIi4uLy4uL2RpY3RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeSAoU0QpIO2FnO2UjOumv1xuICogaTE4buydhCDsnITtlZwgc2QuZ2VuZXJhdGVkLnRzIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fc2QgZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwic2RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKF9uYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkLCBzZFRhcmdldD86IFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIikge1xuICAgIGNvbnN0IHRhcmdldCA9IHNkVGFyZ2V0ID8/IFwiYXBpXCI7XG4gICAgLy8gYXBpLmRpcuydgCDsg4HrjIAg6rK966GcKFwiYXBpXCIp7J2066+A66GcLCB3ZWIvYXBw64+EIOyDgeuMgCDqsr3roZzroZwg66ee7LakXG4gICAgY29uc3QgZGlyID0gdGFyZ2V0ID09PSBcImFwaVwiID8gU29uYW11LmNvbmZpZy5hcGkuZGlyIDogdGFyZ2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvaTE4bmAsXG4gICAgICBwYXRoOiBcInNkLmdlbmVyYXRlZC50c1wiLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIob3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1wic2RcIl0pIHtcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuID8/IHtcbiAgICAgIGRlZmF1bHRMb2NhbGU6IFwia29cIixcbiAgICAgIHN1cHBvcnRlZExvY2FsZXM6IFtcImtvXCJdLFxuICAgIH07XG5cbiAgICBjb25zdCB7IGRlZmF1bHRMb2NhbGUsIHN1cHBvcnRlZExvY2FsZXMgfSA9IGkxOG5Db25maWc7XG5cbiAgICAvLyBlbnRpdHkuanNvbuyXkOyEnCBlbnRpdHkgbGFiZWxzIOy2lOy2nFxuICAgIGNvbnN0IGVudGl0eUxhYmVscyA9IHRoaXMuZXh0cmFjdEVudGl0eUxhYmVscygpO1xuXG4gICAgLy8g7ZSM656r7Y+867OEIGxvY2FsZSDqtIDrpqwg7L2U65OcXG4gICAgY29uc3QgbG9jYWxlTWFuYWdlbWVudENvZGUgPVxuICAgICAgdGFyZ2V0ID09PSBcImFwaVwiXG4gICAgICAgID8gYFxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcInNvbmFtdVwiO1xuXG5jb25zdCBERUZBVUxUX0xPQ0FMRSA9IFwiJHtkZWZhdWx0TG9jYWxlfVwiO1xuY29uc3QgU1VQUE9SVEVEX0xPQ0FMRVMgPSAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZExvY2FsZXMpfTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhbGUoKTogc3RyaW5nIHtcbiAgY29uc3QgY3R4ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgcmV0dXJuIGN0eD8ubG9jYWxlID8/IERFRkFVTFRfTE9DQUxFO1xufVxuYC50cmltKClcbiAgICAgICAgOiBgXG5jb25zdCBERUZBVUxUX0xPQ0FMRSA9IFwiJHtkZWZhdWx0TG9jYWxlfVwiO1xuY29uc3QgU1VQUE9SVEVEX0xPQ0FMRVMgPSAke0pTT04uc3RyaW5naWZ5KHN1cHBvcnRlZExvY2FsZXMpfTtcbmxldCBfY3VycmVudExvY2FsZSA9IERFRkFVTFRfTE9DQUxFO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9jYWxlKGxvY2FsZTogc3RyaW5nKSB7XG4gIF9jdXJyZW50TG9jYWxlID0gbG9jYWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICByZXR1cm4gX2N1cnJlbnRMb2NhbGU7XG59XG5gLnRyaW0oKTtcblxuICAgIC8vIGxvY2FsZSBpbXBvcnRcbiAgICBjb25zdCBsb2NhbGVJbXBvcnRzID0gc3VwcG9ydGVkTG9jYWxlc1xuICAgICAgLm1hcCgobG9jYWxlKSA9PiBgaW1wb3J0ICR7bG9jYWxlfSBmcm9tIFwiLi8ke2xvY2FsZX1cIjtgKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBlbnRpdHlMYWJlbHPrpbwg7L2U65Oc66GcIOuzgO2ZmFxuICAgIGNvbnN0IGVudGl0eUxhYmVsc0NvZGUgPSB0aGlzLmdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShlbnRpdHlMYWJlbHMpO1xuXG4gICAgY29uc3QgYm9keSA9IGBcbiR7bG9jYWxlTWFuYWdlbWVudENvZGV9XG5cbiR7bG9jYWxlSW1wb3J0c31cblxuLy8gZW50aXR5Lmpzb27sl5DshJwg7LaU7Lac7ZWcIGVudGl0eSBsYWJlbHMgKGRlZmF1bHRMb2NhbGUg7KCE7JqpKVxuJHtlbnRpdHlMYWJlbHNDb2RlfSAgICBcblxuY29uc3Qgc29uYW11RGljdEtvID0gJHtKU09OLnN0cmluZ2lmeShzb25hbXVEaWN0S28sIG51bGwsIDIpfTtcbmNvbnN0IHNvbmFtdURpY3RFbiA9ICR7SlNPTi5zdHJpbmdpZnkoc29uYW11RGljdEVuLCBudWxsLCAyKX07XG5cbi8vIGRlZmF1bHRMb2NhbGXsnZggZGljdGlvbmFyeeulvCDquLDspIDsnLzroZwg7YKkIOy2lOy2nFxudHlwZSBQcm9qZWN0RGljdGlvbmFyeSA9IHR5cGVvZiAke2RlZmF1bHRMb2NhbGV9O1xudHlwZSBTb25hbXVEaWN0aW9uYXJ5ID0gdHlwZW9mIHNvbmFtdURpY3Qke3RoaXMuY2FwaXRhbGl6ZShkZWZhdWx0TG9jYWxlKX07XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBFbnRpdHlMYWJlbHMgJiBTb25hbXVEaWN0aW9uYXJ5ICYgUHJvamVjdERpY3Rpb25hcnk7XG5cbi8vIO2CpOuKlCDsnKDsp4DtlZjrkJgsIOqwkiDtg4DsnoXsnYAgc3RyaW5nIOuYkOuKlCDtlajsiJjroZwg7J2867CY7ZmUICjri6TrpbggbG9jYWxl7J2YIOumrO2EsOuftCDtg4DsnoUg7Lap64+MIOuwqeyngClcbnR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xudHlwZSBEaWN0S2V5ID0ga2V5b2YgTWVyZ2VkRGljdGlvbmFyeTtcbmV4cG9ydCB0eXBlIExvY2FsaXplZFN0cmluZyA9IHN0cmluZyAmIHsgX19icmFuZDogXCJMb2NhbGl6ZWRTdHJpbmdcIiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKGRpY3Q6IFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4pIHtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbi8vIOqwgSBsb2NhbGXrs4TroZwgZW50aXR5IGxhYmVscyArIFNvbmFtdSDrgrTsnqUgZGljdCArIO2UhOuhnOygne2KuCBkaWN0IO2Vqey5qFxuY29uc3QgZGljdGlvbmFyaWVzOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+PiA9IHtcbiAgJHtkZWZhdWx0TG9jYWxlfTogeyAuLi5zb25hbXVEaWN0JHt0aGlzLmNhcGl0YWxpemUoZGVmYXVsdExvY2FsZSl9LCAuLi5lbnRpdHlMYWJlbHMsIC4uLiR7ZGVmYXVsdExvY2FsZX0gfSxcbiAgJHtzdXBwb3J0ZWRMb2NhbGVzXG4gICAgLmZpbHRlcigobG9jYWxlKSA9PiBsb2NhbGUgIT09IGRlZmF1bHRMb2NhbGUpXG4gICAgLm1hcCgobG9jYWxlKSA9PiBgICAke2xvY2FsZX06IHsgLi4uc29uYW11RGljdCR7dGhpcy5jYXBpdGFsaXplKGxvY2FsZSl9LCAuLi4ke2xvY2FsZX0gfSxgKVxuICAgIC5qb2luKFwiXFxuXCIpfVxufTtcblxudHlwZSBTRFJldHVyblR5cGU8SyBleHRlbmRzIERpY3RLZXk+ID0gTWVyZ2VkRGljdGlvbmFyeVtLXSBleHRlbmRzICguLi5hcmdzOiBpbmZlciBQKSA9PiBzdHJpbmdcbiAgPyAoLi4uYXJnczogUCkgPT4gTG9jYWxpemVkU3RyaW5nXG4gIDogTG9jYWxpemVkU3RyaW5nO1xuXG5mdW5jdGlvbiBnZXREaWN0VmFsdWU8SyBleHRlbmRzIERpY3RLZXk+KGtleTogSywgbG9jYWxlOiBzdHJpbmcpOiBTRFJldHVyblR5cGU8Sz4ge1xuICBjb25zdCBkaWN0ID0gZGljdGlvbmFyaWVzW2xvY2FsZV07XG4gIGNvbnN0IHZhbHVlID0gZGljdD8uW2tleV0gPz8gZGljdGlvbmFyaWVzW0RFRkFVTFRfTE9DQUxFXT8uW2tleV0gPz8ga2V5O1xuICByZXR1cm4gdmFsdWUgYXMgdW5rbm93biBhcyBTRFJldHVyblR5cGU8Sz47XG59XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkg7ZWo7IiYXG4gKiBsb2NhbGXsl5Ag66ee64qUIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRChcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCLsoIDsnqVcIiAoTG9jYWxpemVkU3RyaW5nKVxuICogU0QoXCJ1c2VyLm5vdEZvdW5kXCIpKDEpICAvLyDihpIgXCLsobTsnqztlZjsp4Ag7JWK64qUIFVzZXIgSUQgMVwiIChMb2NhbGl6ZWRTdHJpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTRDxLIGV4dGVuZHMgRGljdEtleT4oa2V5OiBLKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn1cblxuLyoqXG4gKiDtirnsoJUgbG9jYWxl7J2YIOuyiOyXrSDthY3siqTtirjrpbwg67CY7ZmY7ZWY64qUIO2VqOyImOulvCDsg53shLHtlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IEVOID0gU0QubG9jYWxlKFwiZW5cIik7XG4gKiBFTihcImNvbW1vbi5zYXZlXCIpICAvLyDihpIgXCJTYXZlXCJcbiAqL1xuU0QubG9jYWxlID0gKGxvY2FsZTogc3RyaW5nKSA9PiA8SyBleHRlbmRzIERpY3RLZXk+KGtleTogSyk6IFNEUmV0dXJuVHlwZTxLPiA9PiB7XG4gIHJldHVybiBnZXREaWN0VmFsdWUoa2V5LCBsb2NhbGUpO1xufTtcblxuLyoqXG4gKiBsb2NhbGXsl5Ag65Sw6528IOyggeygiO2VnCDsu6zrn7wg6rCS7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIERC7JeQIG5hbWUsIG5hbWVfa28sIG5hbWVfZW7sspjrn7wgbG9jYWxpemVkIGNvbHVtbuydtCDsnojsnYQg65WMIOyCrOyaqe2VqeuLiOuLpC5cbiAqXG4gKiDsmrDshKDsiJzsnIQgKGtvIGxvY2FsZSk6IGNvbHVtbl9rbyDihpIgY29sdW1uIOKGkiBjb2x1bW5fZW5cbiAqIOyasOyEoOyInOychCAoZW4gbG9jYWxlKTogY29sdW1uX2VuIOKGkiBjb2x1bW4g4oaSIGNvbHVtbl9rb1xuICpcbiAqIEBleGFtcGxlXG4gKiBsb2NhbGl6ZWRDb2x1bW4odGFnLCBcIm5hbWVcIilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsaXplZENvbHVtbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIEsgZXh0ZW5kcyBrZXlvZiBUICYgc3RyaW5nPihcbiAgcm93OiBULFxuICBjb2x1bW46IEssXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsb2NhbGUgPSBnZXRDdXJyZW50TG9jYWxlKCk7XG4gIGNvbnN0IG90aGVyTG9jYWxlcyA9IFNVUFBPUlRFRF9MT0NBTEVTLmZpbHRlcigobDogc3RyaW5nKSA9PiBsICE9PSBsb2NhbGUpO1xuICBjb25zdCBsb2NhbGl6ZWRLZXkgPSAoY29sdW1uOiBLLCBsb2NhbGU6IHN0cmluZykgPT4gXFxgXFwke1N0cmluZyhjb2x1bW4pfV9cXCR7bG9jYWxlfVxcYDtcbiAgY29uc3Qga2V5cyA9IFtsb2NhbGl6ZWRLZXkoY29sdW1uLCBsb2NhbGUpLCBjb2x1bW4sIC4uLm90aGVyTG9jYWxlcy5tYXAoKGwpID0+IGxvY2FsaXplZEtleShjb2x1bW4sIGwpKV07XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IHZhbHVlID0gcm93W2tleV07XG4gICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRW51beydmCBsb2NhbGl6ZWQgbGFiZWxz66W8IFByb3h566GcIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFNlbGVjdCDsu7Ttj6zrhIztirgg65Ox7JeQ7IScIEVudW1MYWJlbFtrZXldIOuMgOyLoCDsgqzsmqntlanri4jri6QuXG4gKlxuICogQGV4YW1wbGVcbiAqIFNELmVudW1MYWJlbHMoXCJUYWdPcmRlckJ5XCIpW2tleV0gIC8vIOKGkiDtmITsnqwgbG9jYWxl7J2YIOudvOuyqFxuICovXG5TRC5lbnVtTGFiZWxzID0gKGVudW1OYW1lOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBMb2NhbGl6ZWRTdHJpbmc+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm94eSh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBMb2NhbGl6ZWRTdHJpbmc+LCB7XG4gICAgZ2V0KF8sIGtleTogc3RyaW5nKSB7XG4gICAgICBjb25zdCBkaWN0S2V5ID0gXFxgZW51bS5cXCR7ZW51bU5hbWV9LlxcJHtrZXl9XFxgIGFzIERpY3RLZXk7XG4gICAgICByZXR1cm4gZ2V0RGljdFZhbHVlKGRpY3RLZXksIGdldEN1cnJlbnRMb2NhbGUoKSk7XG4gICAgfVxuICB9KTtcbn07XG5gLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgodW5kZWZpbmVkLCB0YXJnZXQpLFxuICAgICAgYm9keSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgY3VzdG9tSGVhZGVyczogW10sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2FwaXRhbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrqqjrk6AgZW50aXR5Lmpzb27sl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICogLSBlbnRpdHkue2VudGl0eUlkfTogZW50aXR5IHRpdGxlXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH0ue3Byb3BOYW1lfTogcHJvcCBkZXNjXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH0ubGlzdDog66qp66GdXG4gICAqIC0gZW50aXR5LntlbnRpdHlJZH0uY3JlYXRlOiDsg53shLFcbiAgICogLSBlbnRpdHkue2VudGl0eUlkfS5lZGl0OiDsiJjsoJUgKO2VqOyImClcbiAgICogLSBlbnVtLntFbnVtSWR9Lnt2YWx1ZX06IGVudW0gbGFiZWxcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEVudGl0eUxhYmVscygpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBpc0Z1bmN0aW9uPzogYm9vbGVhbiB9W10ge1xuICAgIGNvbnN0IGxhYmVsczogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgaXNGdW5jdGlvbj86IGJvb2xlYW4gfVtdID0gW107XG5cbiAgICBpZiAoIUVudGl0eU1hbmFnZXIuaXNBdXRvbG9hZGVkKSB7XG4gICAgICByZXR1cm4gbGFiZWxzO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAvLyBlbnRpdHkgdGl0bGVcbiAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9YCwgdmFsdWU6IGVudGl0eS50aXRsZSB9KTtcblxuICAgICAgLy8gZW50aXR5IENSVUQgbGFiZWxzXG4gICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudGl0eS4ke2VudGl0eUlkfS5saXN0YCwgdmFsdWU6IGAke2VudGl0eS50aXRsZX0g66qp66GdYCB9KTtcbiAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9LmNyZWF0ZWAsIHZhbHVlOiBgJHtlbnRpdHkudGl0bGV9IOyDneyEsWAgfSk7XG4gICAgICBsYWJlbHMucHVzaCh7XG4gICAgICAgIGtleTogYGVudGl0eS4ke2VudGl0eUlkfS5lZGl0YCxcbiAgICAgICAgdmFsdWU6IGAke2VudGl0eS50aXRsZX0g7IiY7KCVICgjXFwke2lkfSlgLFxuICAgICAgICBpc0Z1bmN0aW9uOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByb3AgbGFiZWxzIChwcm9wIG5hbWXsnYQgY2FtZWxDYXNl66GcIOuzgO2ZmClcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBlbnRpdHkucHJvcHMpIHtcbiAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgIGxhYmVscy5wdXNoKHsga2V5OiBgZW50aXR5LiR7ZW50aXR5SWR9LiR7cHJvcC5uYW1lfWAsIHZhbHVlOiBwcm9wLmRlc2MgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZW51bSBsYWJlbHNcbiAgICAgIGZvciAoY29uc3QgW2VudW1JZCwgZW51bUxhYmVsc01hcF0gb2YgT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW3ZhbHVlLCBsYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMoZW51bUxhYmVsc01hcCkpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudW0uJHtlbnVtSWR9LiR7dmFsdWV9YCwgdmFsdWU6IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVscztcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnRpdHlMYWJlbHPrpbwgVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShcbiAgICBsYWJlbHM6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGlzRnVuY3Rpb24/OiBib29sZWFuIH1bXSxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiY29uc3QgZW50aXR5TGFiZWxzID0ge30gYXMgY29uc3Q7XCI7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgeyBrZXksIHZhbHVlLCBpc0Z1bmN0aW9uIH0gb2YgbGFiZWxzKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbikge1xuICAgICAgICAvLyDtlajsiJjroZwg7IOd7ISxIChpZCDtjIzrnbzrr7jthLApXG4gICAgICAgIGVudHJpZXMucHVzaChgICBcIiR7a2V5fVwiOiAoaWQ6IG51bWJlcikgPT4gXFxgJHt2YWx1ZX1cXGAsYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRyaWVzLnB1c2goYCAgXCIke2tleX1cIjogXCIke3RoaXMuZXNjYXBlU3RyaW5nKHZhbHVlKX1cIixgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYGNvbnN0IGVudGl0eUxhYmVscyA9IHtcbiR7ZW50cmllcy5qb2luKFwiXFxuXCIpfVxufSBhcyBjb25zdDtgO1xuICB9XG5cbiAgcHJpdmF0ZSBlc2NhcGVTdHJpbmcoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNvbmFtdSIsInNvbmFtdURpY3RFbiIsInNvbmFtdURpY3RLbyIsIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX19zZCIsImdldFRhcmdldEFuZFBhdGgiLCJfbmFtZXMiLCJzZFRhcmdldCIsInRhcmdldCIsImRpciIsImNvbmZpZyIsImFwaSIsInBhdGgiLCJyZW5kZXIiLCJvcHRpb25zIiwiaTE4bkNvbmZpZyIsImkxOG4iLCJkZWZhdWx0TG9jYWxlIiwic3VwcG9ydGVkTG9jYWxlcyIsImVudGl0eUxhYmVscyIsImV4dHJhY3RFbnRpdHlMYWJlbHMiLCJsb2NhbGVNYW5hZ2VtZW50Q29kZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmltIiwibG9jYWxlSW1wb3J0cyIsIm1hcCIsImxvY2FsZSIsImpvaW4iLCJlbnRpdHlMYWJlbHNDb2RlIiwiZ2VuZXJhdGVFbnRpdHlMYWJlbHNDb2RlIiwiYm9keSIsImNhcGl0YWxpemUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJpbXBvcnRLZXlzIiwiY3VzdG9tSGVhZGVycyIsInN0ciIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJsYWJlbHMiLCJpc0F1dG9sb2FkZWQiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdHlJZCIsImVudGl0eSIsImdldCIsInB1c2giLCJrZXkiLCJ2YWx1ZSIsInRpdGxlIiwiaXNGdW5jdGlvbiIsInByb3AiLCJwcm9wcyIsImRlc2MiLCJuYW1lIiwiZW51bUlkIiwiZW51bUxhYmVsc01hcCIsIk9iamVjdCIsImVudHJpZXMiLCJlbnVtTGFiZWxzIiwibGFiZWwiLCJsZW5ndGgiLCJlc2NhcGVTdHJpbmciLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsc0JBQW1CO0FBQzFDLFNBQVNDLFlBQVksRUFBRUMsWUFBWSxRQUFRLHNCQUFhO0FBQ3hELFNBQVNDLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2Qzs7O0NBR0MsR0FDRCxPQUFPLE1BQU1DLHFCQUFxQkQ7SUFDaEMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsTUFBMEIsRUFBRUMsUUFBZ0MsRUFBRTtRQUM3RSxNQUFNQyxTQUFTRCxZQUFZO1FBQzNCLCtDQUErQztRQUMvQyxNQUFNRSxNQUFNRCxXQUFXLFFBQVFULE9BQU9XLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDRixHQUFHLEdBQUdEO1FBRXZELE9BQU87WUFDTEEsUUFBUSxHQUFHQyxJQUFJLFNBQVMsQ0FBQztZQUN6QkcsTUFBTTtRQUNSO0lBQ0Y7SUFFQUMsT0FBT0MsT0FBOEIsRUFBRTtRQUNyQyxNQUFNLEVBQUVOLE1BQU0sRUFBRSxHQUFHTTtRQUNuQixNQUFNQyxhQUFhaEIsT0FBT1csTUFBTSxDQUFDTSxJQUFJLElBQUk7WUFDdkNDLGVBQWU7WUFDZkMsa0JBQWtCO2dCQUFDO2FBQUs7UUFDMUI7UUFFQSxNQUFNLEVBQUVELGFBQWEsRUFBRUMsZ0JBQWdCLEVBQUUsR0FBR0g7UUFFNUMsaUNBQWlDO1FBQ2pDLE1BQU1JLGVBQWUsSUFBSSxD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
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvc2QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGkvc29uYW11XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyLCB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHBhcnNlRGljdEZpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGljdC1wYXJzZXJcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbi8qKlxuICogU29uYW11IERpY3Rpb25hcnkgKFNEKSDthZztlIzrpr9cbiAqIGkxOG7snYQg7JyE7ZWcIHNkLmdlbmVyYXRlZC50cyDtjIzsnbzsnYQg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3NkIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInNkXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChfbmFtZXM/OiBFbnRpdHlOYW1lc1JlY29yZCwgc2RUYXJnZXQ/OiBcImFwaVwiIHwgXCJ3ZWJcIiB8IFwiYXBwXCIpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzZFRhcmdldCA/PyBcImFwaVwiO1xuICAgIC8vIGFwaS5kaXLsnYAg7IOB64yAIOqyveuhnChcImFwaVwiKeydtOuvgOuhnCwgd2ViL2FwcOuPhCDsg4HrjIAg6rK966Gc66GcIOunnuy2pFxuICAgIGNvbnN0IGRpciA9IHRhcmdldCA9PT0gXCJhcGlcIiA/IFNvbmFtdS5jb25maWcuYXBpLmRpciA6IHRhcmdldDtcblxuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2kxOG5gLFxuICAgICAgcGF0aDogXCJzZC5nZW5lcmF0ZWQudHNcIixcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKG9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tcInNkXCJdKSB7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgaTE4bkNvbmZpZyA9IFNvbmFtdS5jb25maWcuaTE4biA/PyB7XG4gICAgICBkZWZhdWx0TG9jYWxlOiBcImtvXCIsXG4gICAgICBzdXBwb3J0ZWRMb2NhbGVzOiBbXCJrb1wiXSxcbiAgICB9O1xuXG4gICAgY29uc3QgeyBkZWZhdWx0TG9jYWxlLCBzdXBwb3J0ZWRMb2NhbGVzIH0gPSBpMThuQ29uZmlnO1xuXG4gICAgLy8gZW50aXR5Lmpzb27sl5DshJwgZW50aXR5IGxhYmVscyDstpTstpxcbiAgICBjb25zdCBlbnRpdHlMYWJlbHMgPSB0aGlzLmV4dHJhY3RFbnRpdHlMYWJlbHMoKTtcblxuICAgIC8vIO2UjOueq+2PvOuzhCBsb2NhbGUg6rSA66asIOy9lOuTnFxuICAgIGNvbnN0IGxvY2FsZU1hbmFnZW1lbnRDb2RlID1cbiAgICAgIHRhcmdldCA9PT0gXCJhcGlcIlxuICAgICAgICA/IGBcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCJzb25hbXVcIjtcblxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcIiR7ZGVmYXVsdExvY2FsZX1cIjtcbmNvbnN0IFNVUFBPUlRFRF9MT0NBTEVTID0gJHtKU09OLnN0cmluZ2lmeShzdXBwb3J0ZWRMb2NhbGVzKX07XG5mdW5jdGlvbiBnZXRDdXJyZW50TG9jYWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IGN0eCA9IFNvbmFtdS5nZXRDb250ZXh0KCk7XG4gIHJldHVybiBjdHg/LmxvY2FsZSA/PyBERUZBVUxUX0xPQ0FMRTtcbn1cbmAudHJpbSgpXG4gICAgICAgIDogYFxuY29uc3QgREVGQVVMVF9MT0NBTEUgPSBcIiR7ZGVmYXVsdExvY2FsZX1cIjtcbmNvbnN0IFNVUFBPUlRFRF9MT0NBTEVTID0gJHtKU09OLnN0cmluZ2lmeShzdXBwb3J0ZWRMb2NhbGVzKX07XG5sZXQgX2N1cnJlbnRMb2NhbGUgPSBERUZBVUxUX0xPQ0FMRTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNldExvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICBfY3VycmVudExvY2FsZSA9IGxvY2FsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRMb2NhbGUoKTogc3RyaW5nIHtcbiAgcmV0dXJuIF9jdXJyZW50TG9jYWxlO1xufVxuYC50cmltKCk7XG5cbiAgICAvLyBzb25hbXVEaWN066W8IOyGjOyKpCDtjIzsnbzsl5DshJwg7YyM7Iux7ZWY7JesIOy9lOuTnOuhnCDrs4DtmZggKO2DgOyehSDsoJXrs7Qg67O07KG0KVxuICAgIGNvbnN0IHNvbmFtdURpY3RLb0NvZGUgPSB0aGlzLmdlbmVyYXRlRGljdENvZGVGcm9tU291cmNlKFwic29uYW11RGljdEtvXCIsIFwia29cIik7XG4gICAgY29uc3Qgc29uYW11RGljdEVuQ29kZSA9IHRoaXMuZ2VuZXJhdGVEaWN0Q29kZUZyb21Tb3VyY2UoXCJzb25hbXVEaWN0RW5cIiwgXCJlblwiKTtcblxuICAgIC8vIGxvY2FsZSBpbXBvcnRcbiAgICBjb25zdCBsb2NhbGVJbXBvcnRzID0gc3VwcG9ydGVkTG9jYWxlc1xuICAgICAgLm1hcCgobG9jYWxlKSA9PiBgaW1wb3J0ICR7bG9jYWxlfSBmcm9tIFwiLi8ke2xvY2FsZX1cIjtgKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBlbnRpdHlMYWJlbHPrpbwg7L2U65Oc66GcIOuzgO2ZmFxuICAgIGNvbnN0IGVudGl0eUxhYmVsc0NvZGUgPSB0aGlzLmdlbmVyYXRlRW50aXR5TGFiZWxzQ29kZShlbnRpdHlMYWJlbHMpO1xuXG4gICAgY29uc3QgYm9keSA9IGBcbiR7bG9jYWxlTWFuYWdlbWVudENvZGV9XG5cbiR7bG9jYWxlSW1wb3J0c31cblxuLy8gZW50aXR5Lmpzb27sl5DshJwg7LaU7Lac7ZWcIGVudGl0eSBsYWJlbHMgKGRlZmF1bHRMb2NhbGUg7KCE7JqpKVxuJHtlbnRpdHlMYWJlbHNDb2RlfVxuXG4ke3NvbmFtdURpY3RLb0NvZGV9XG4ke3NvbmFtdURpY3RFbkNvZGV9XG5cbi8vIGRlZmF1bHRMb2NhbGXsnZggZGljdGlvbmFyeeulvCDquLDspIDsnLzroZwg7YKkIOy2lOy2nFxudHlwZSBQcm9qZWN0RGljdGlvbmFyeSA9IHR5cGVvZiAke2RlZmF1bHRMb2NhbGV9O1xudHlwZSBTb25hbXVEaWN0aW9uYXJ5ID0gdHlwZW9mIHNvbmFtdURpY3Qke3RoaXMuY2FwaXRhbGl6ZShkZWZhdWx0TG9jYWxlKX07XG50eXBlIEVudGl0eUxhYmVscyA9IHR5cGVvZiBlbnRpdHlMYWJlbHM7XG50eXBlIFJhd01lcmdlZERpY3Rpb25hcnkgPSBFbnRpdHlMYWJlbHMgJiBTb25hbXVEaWN0aW9uYXJ5ICYgUHJvamVjdERpY3Rpb25hcnk7XG5cbi8vIO2CpOuKlCDsnKDsp4DtlZjrkJgsIOqwkiDtg4DsnoXsnYAgc3RyaW5nIOuYkOuKlCDtlajsiJjroZwg7J2867CY7ZmUICjri6TrpbggbG9jYWxl7J2YIOumrO2EsOuftCDtg4DsnoUg7Lap64+MIOuwqeyngClcbnR5cGUgTWVyZ2VkRGljdGlvbmFyeSA9IHtcbiAgW0sgaW4ga2V5b2YgUmF3TWVyZ2VkRGljdGlvbmFyeV06IFJhd01lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gICAgPyAoLi4uYXJnczogUCkgPT4gc3RyaW5nXG4gICAgOiBzdHJpbmc7XG59O1xudHlwZSBEaWN0S2V5ID0ga2V5b2YgTWVyZ2VkRGljdGlvbmFyeTtcbmV4cG9ydCB0eXBlIExvY2FsaXplZFN0cmluZyA9IHN0cmluZyAmIHsgX19icmFuZDogXCJMb2NhbGl6ZWRTdHJpbmdcIiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKGRpY3Q6IFBhcnRpYWw8TWVyZ2VkRGljdGlvbmFyeT4pIHtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbi8vIOqwgSBsb2NhbGXrs4TroZwgZW50aXR5IGxhYmVscyArIFNvbmFtdSDrgrTsnqUgZGljdCArIO2UhOuhnOygne2KuCBkaWN0IO2Vqey5qFxuY29uc3QgZGljdGlvbmFyaWVzOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsPE1lcmdlZERpY3Rpb25hcnk+PiA9IHtcbiAgJHtkZWZhdWx0TG9jYWxlfTogeyAuLi5zb25hbXVEaWN0JHt0aGlzLmNhcGl0YWxpemUoZGVmYXVsdExvY2FsZSl9LCAuLi5lbnRpdHlMYWJlbHMsIC4uLiR7ZGVmYXVsdExvY2FsZX0gfSxcbiAgJHtzdXBwb3J0ZWRMb2NhbGVzXG4gICAgLmZpbHRlcigobG9jYWxlKSA9PiBsb2NhbGUgIT09IGRlZmF1bHRMb2NhbGUpXG4gICAgLm1hcCgobG9jYWxlKSA9PlxuICAgICAgW1wiZW5cIiwgXCJrb1wiXS5pbmNsdWRlcyhsb2NhbGUpXG4gICAgICAgID8gYCAgJHtsb2NhbGV9OiB7IC4uLnNvbmFtdURpY3Qke3RoaXMuY2FwaXRhbGl6ZShsb2NhbGUpfSwgLi4uJHtsb2NhbGV9IH0sYFxuICAgICAgICA6IGAgICR7bG9jYWxlfTogeyAuLi4ke2xvY2FsZX0gfSxgLFxuICAgIClcbiAgICAuam9pbihcIlxcblwiKX1cbn07XG5cbnR5cGUgU0RSZXR1cm5UeXBlPEsgZXh0ZW5kcyBEaWN0S2V5PiA9IE1lcmdlZERpY3Rpb25hcnlbS10gZXh0ZW5kcyAoLi4uYXJnczogaW5mZXIgUCkgPT4gc3RyaW5nXG4gID8gKC4uLmFyZ3M6IFApID0+IExvY2FsaXplZFN0cmluZ1xuICA6IExvY2FsaXplZFN0cmluZztcblxuZnVuY3Rpb24gZ2V0RGljdFZhbHVlPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEssIGxvY2FsZTogc3RyaW5nKTogU0RSZXR1cm5UeXBlPEs+IHtcbiAgY29uc3QgZGljdCA9IGRpY3Rpb25hcmllc1tsb2NhbGVdO1xuICBjb25zdCB2YWx1ZSA9IGRpY3Q/LltrZXldID8/IGRpY3Rpb25hcmllc1tERUZBVUxUX0xPQ0FMRV0/LltrZXldID8/IGtleTtcbiAgcmV0dXJuIHZhbHVlIGFzIHVua25vd24gYXMgU0RSZXR1cm5UeXBlPEs+O1xufVxuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5IO2VqOyImFxuICogbG9jYWxl7JeQIOunnuuKlCDrsojsl60g7YWN7Iqk7Yq466W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiBAZXhhbXBsZVxuICogU0QoXCJjb21tb24uc2F2ZVwiKSAgLy8g4oaSIFwi7KCA7J6lXCIgKExvY2FsaXplZFN0cmluZylcbiAqIFNEKFwidXNlci5ub3RGb3VuZFwiKSgxKSAgLy8g4oaSIFwi7KG07J6s7ZWY7KeAIOyViuuKlCBVc2VyIElEIDFcIiAoTG9jYWxpemVkU3RyaW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gU0Q8SyBleHRlbmRzIERpY3RLZXk+KGtleTogSyk6IFNEUmV0dXJuVHlwZTxLPiB7XG4gIGNvbnN0IGxvY2FsZSA9IGdldEN1cnJlbnRMb2NhbGUoKTtcbiAgcmV0dXJuIGdldERpY3RWYWx1ZShrZXksIGxvY2FsZSk7XG59XG5cbi8qKlxuICog7Yq57KCVIGxvY2FsZeydmCDrsojsl60g7YWN7Iqk7Yq466W8IOuwmO2ZmO2VmOuKlCDtlajsiJjrpbwg7IOd7ISx7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBFTiA9IFNELmxvY2FsZShcImVuXCIpO1xuICogRU4oXCJjb21tb24uc2F2ZVwiKSAgLy8g4oaSIFwiU2F2ZVwiXG4gKi9cblNELmxvY2FsZSA9IChsb2NhbGU6IHN0cmluZykgPT4gPEsgZXh0ZW5kcyBEaWN0S2V5PihrZXk6IEspOiBTRFJldHVyblR5cGU8Sz4gPT4ge1xuICByZXR1cm4gZ2V0RGljdFZhbHVlKGtleSwgbG9jYWxlKTtcbn07XG5cbi8qKlxuICogbG9jYWxl7JeQIOuUsOudvCDsoIHsoIjtlZwg7Lus65+8IOqwkuydhCDrsJjtmZjtlanri4jri6QuXG4gKiBEQuyXkCBuYW1lLCBuYW1lX2tvLCBuYW1lX2Vu7LKY65+8IGxvY2FsaXplZCBjb2x1bW7snbQg7J6I7J2EIOuVjCDsgqzsmqntlanri4jri6QuXG4gKlxuICog7Jqw7ISg7Iic7JyEIChrbyBsb2NhbGUpOiBjb2x1bW5fa28g4oaSIGNvbHVtbiDihpIgY29sdW1uX2VuXG4gKiDsmrDshKDsiJzsnIQgKGVuIGxvY2FsZSk6IGNvbHVtbl9lbiDihpIgY29sdW1uIOKGkiBjb2x1bW5fa29cbiAqXG4gKiBAZXhhbXBsZVxuICogbG9jYWxpemVkQ29sdW1uKHRhZywgXCJuYW1lXCIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbGl6ZWRDb2x1bW48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBLIGV4dGVuZHMga2V5b2YgVCAmIHN0cmluZz4oXG4gIHJvdzogVCxcbiAgY29sdW1uOiBLLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbG9jYWxlID0gZ2V0Q3VycmVudExvY2FsZSgpO1xuICBjb25zdCBvdGhlckxvY2FsZXMgPSBTVVBQT1JURURfTE9DQUxFUy5maWx0ZXIoKGw6IHN0cmluZykgPT4gbCAhPT0gbG9jYWxlKTtcbiAgY29uc3QgbG9jYWxpemVkS2V5ID0gKGNvbHVtbjogSywgbG9jYWxlOiBzdHJpbmcpID0+IFxcYFxcJHtTdHJpbmcoY29sdW1uKX1fXFwke2xvY2FsZX1cXGA7XG4gIGNvbnN0IGtleXMgPSBbbG9jYWxpemVkS2V5KGNvbHVtbiwgbG9jYWxlKSwgY29sdW1uLCAuLi5vdGhlckxvY2FsZXMubWFwKChsKSA9PiBsb2NhbGl6ZWRLZXkoY29sdW1uLCBsKSldO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldO1xuICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVudW3snZggbG9jYWxpemVkIGxhYmVsc+ulvCBQcm94eeuhnCDrsJjtmZjtlanri4jri6QuXG4gKiBTZWxlY3Qg7Lu07Y+s64SM7Yq4IOuTseyXkOyEnCBFbnVtTGFiZWxba2V5XSDrjIDsi6Ag7IKs7Jqp7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBTRC5lbnVtTGFiZWxzKFwiVGFnT3JkZXJCeVwiKVtrZXldICAvLyDihpIg7ZiE7J6sIGxvY2FsZeydmCDrnbzrsqhcbiAqL1xuU0QuZW51bUxhYmVscyA9IChlbnVtTmFtZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiA9PiB7XG4gIHJldHVybiBuZXcgUHJveHkoe30gYXMgUmVjb3JkPHN0cmluZywgTG9jYWxpemVkU3RyaW5nPiwge1xuICAgIGdldChfLCBrZXk6IHN0cmluZykge1xuICAgICAgY29uc3QgZGljdEtleSA9IFxcYGVudW0uXFwke2VudW1OYW1lfS5cXCR7a2V5fVxcYCBhcyBEaWN0S2V5O1xuICAgICAgcmV0dXJuIGdldERpY3RWYWx1ZShkaWN0S2V5LCBnZXRDdXJyZW50TG9jYWxlKCkpO1xuICAgIH1cbiAgfSk7XG59O1xuYC50cmltKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKHVuZGVmaW5lZCwgdGFyZ2V0KSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNhcGl0YWxpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG4gIH1cblxuICAvKipcbiAgICog66qo65OgIGVudGl0eS5qc29u7JeQ7IScIGVudGl0eSBsYWJlbHMg7LaU7LacXG4gICAqIGVudGl0eS5qc29u7JeQ7IScIOyngeygkSDqtIDrpqzrkJjripQg6rCS66eMIO2PrO2VqCAo7J6Q64+ZIOyDneyEsSDqsJIg7KCc7Jm4KVxuICAgKiAtIGVudGl0eS57ZW50aXR5SWR9OiBlbnRpdHkgdGl0bGVcbiAgICogLSBlbnRpdHkue2VudGl0eUlkfS57cHJvcE5hbWV9OiBwcm9wIGRlc2NcbiAgICogLSBlbnVtLntFbnVtSWR9Lnt2YWx1ZX06IGVudW0gbGFiZWxcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEVudGl0eUxhYmVscygpOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB7XG4gICAgY29uc3QgbGFiZWxzOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gICAgaWYgKCFFbnRpdHlNYW5hZ2VyLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuIGxhYmVscztcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuXG4gICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBlbnRpdHlJZHMpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgICAgLy8gZW50aXR5IHRpdGxlIChlbnRpdHkuanNvbuyXkOyEnCDqtIDrpqwpXG4gICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudGl0eS4ke2VudGl0eUlkfWAsIHZhbHVlOiBlbnRpdHkudGl0bGUgfSk7XG5cbiAgICAgIC8vIHByb3AgbGFiZWxzIChlbnRpdHkuanNvbuyXkOyEnCDqtIDrpqwpXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgICAgIGlmIChwcm9wLmRlc2MpIHtcbiAgICAgICAgICBsYWJlbHMucHVzaCh7IGtleTogYGVudGl0eS4ke2VudGl0eUlkfS4ke3Byb3AubmFtZX1gLCB2YWx1ZTogcHJvcC5kZXNjIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGVudW0gbGFiZWxzIChlbnRpdHkuanNvbuyXkOyEnCDqtIDrpqwpXG4gICAgICBmb3IgKGNvbnN0IFtlbnVtSWQsIGVudW1MYWJlbHNNYXBdIG9mIE9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFt2YWx1ZSwgbGFiZWxdIG9mIE9iamVjdC5lbnRyaWVzKGVudW1MYWJlbHNNYXApKSB7XG4gICAgICAgICAgbGFiZWxzLnB1c2goeyBrZXk6IGBlbnVtLiR7ZW51bUlkfS4ke3ZhbHVlfWAsIHZhbHVlOiBsYWJlbCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICAvKipcbiAgICogZW50aXR5TGFiZWxz66W8IFR5cGVTY3JpcHQg7L2U65Oc66GcIOuzgO2ZmFxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUVudGl0eUxhYmVsc0NvZGUobGFiZWxzOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSk6IHN0cmluZyB7XG4gICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcImNvbnN0IGVudGl0eUxhYmVscyA9IHt9IGFzIGNvbnN0O1wiO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBsYWJlbHMubWFwKCh7IGtleSwgdmFsdWUgfSkgPT4gYCAgXCIke2tleX1cIjogXCIke3RoaXMuZXNjYXBlU3RyaW5nKHZhbHVlKX1cIixgKTtcblxuICAgIHJldHVybiBgY29uc3QgZW50aXR5TGFiZWxzID0ge1xuJHtlbnRyaWVzLmpvaW4oXCJcXG5cIil9XG59IGFzIGNvbnN0O2A7XG4gIH1cblxuICBwcml2YXRlIGVzY2FwZVN0cmluZyhzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNvbmFtdSBkaWN0IOyGjOyKpCDtjIzsnbzsnYQg7J297Ja0IO2MjOyLse2VmOqzoCDsvZTrk5zroZwg67OA7ZmYXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlRGljdENvZGVGcm9tU291cmNlKHZhck5hbWU6IHN0cmluZywgbG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIHNvbmFtdSDtjKjtgqTsp4Ag66Oo7Yq47JeQ7IScIHNyYy9kaWN0IOqyveuhnCDssL7quLBcbiAgICAvLyBfX2Rpcm5hbWXsnbQgZGlzdC90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnPsnbwg7IiYIOyeiOycvOuvgOuhnCDtjKjtgqTsp4Ag66Oo7Yq4IOq4sOykgOycvOuhnCDsoJHqt7xcbiAgICBjb25zdCBwYWNrYWdlUm9vdCA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiKTtcbiAgICBjb25zdCBkaWN0UGF0aCA9IHBhdGguam9pbihwYWNrYWdlUm9vdCwgXCJzcmNcIiwgXCJkaWN0XCIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgIGlmICghZnMuZXhpc3RzU3luYyhkaWN0UGF0aCkpIHtcbiAgICAgIHJldHVybiBgY29uc3QgJHt2YXJOYW1lfSA9IHt9O2A7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IHBhcnNlRGljdEZpbGUoZGljdFBhdGgpO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYGNvbnN0ICR7dmFyTmFtZX0gPSB7fTtgO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJ5TGluZXMgPSBlbnRyaWVzLm1hcCgoeyBrZXksIHZhbHVlLCBpc0Z1bmN0aW9uIH0pID0+IHtcbiAgICAgIGNvbnN0IGNvZGVWYWx1ZSA9IGlzRnVuY3Rpb24gPyB2YWx1ZSA6IGBcIiR7dGhpcy5lc2NhcGVTdHJpbmcodmFsdWUpfVwiYDtcbiAgICAgIHJldHVybiBgICBcIiR7a2V5fVwiOiAke2NvZGVWYWx1ZX0sYDtcbiAgICB9KTtcblxuICAgIHJldHVybiBgY29uc3QgJHt2YXJOYW1lfSA9IHtcbiR7ZW50cnlMaW5lcy5qb2luKFwiXFxuXCIpfVxufTtgO1xuICB9XG59XG4iXSwibmFtZXMiOlsiZnMiLCJwYXRoIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsInBhcnNlRGljdEZpbGUiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX19zZCIsImdldFRhcmdldEFuZFBhdGgiLCJfbmFtZXMiLCJzZFRhcmdldCIsInRhcmdldCIsImRpciIsImNvbmZpZyIsImFwaSIsInJlbmRlciIsIm9wdGlvbnMiLCJpMThuQ29uZmlnIiwiaTE4biIsImRlZmF1bHRMb2NhbGUiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiZW50aXR5TGFiZWxzIiwiZXh0cmFjdEVudGl0eUxhYmVscyIsImxvY2FsZU1hbmFnZW1lbnRDb2RlIiwiSlNPTiIsInN0cmluZ2lmeSIsInRyaW0iLCJzb25hbXVEaWN0S29Db2RlIiwiZ2VuZXJhdGVEaWN0Q29kZUZyb21Tb3VyY2UiLCJzb25hbXVEaWN0RW5Db2RlIiwibG9jYWxlSW1wb3J0cyIsIm1hcCIsImxvY2FsZSIsImpvaW4iLCJlbnRpdHlMYWJlbHNDb2RlIiwiZ2VuZXJhdGVFbnRpdHlMYWJlbHNDb2RlIiwiYm9keSIsImNhcGl0YWxpemUiLCJmaWx0ZXIiLCJpbmNsdWRlcyIsInVuZGVmaW5lZCIsImltcG9ydEtleXMiLCJjdXN0b21IZWFkZXJzIiwic3RyIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxhYmVscyIsImlzQXV0b2xvYWRlZCIsImVudGl0eUlkcyIsImdldEFsbElkcyIsImVudGl0eUlkIiwiZW50aXR5IiwiZ2V0IiwicHVzaCIsImtleSIsInZhbHVlIiwidGl0bGUiLCJwcm9wIiwicHJvcHMiLCJkZXNjIiwibmFtZSIsImVudW1JZCIsImVudW1MYWJlbHNNYXAiLCJPYmplY3QiLCJlbnRyaWVzIiwiZW51bUxhYmVscyIsImxhYmVsIiwibGVuZ3RoIiwiZXNjYXBlU3RyaW5nIiwicmVwbGFjZSIsInZhck5hbWUiLCJwYWNrYWdlUm9vdCIsInJlc29sdmUiLCJkaXJuYW1lIiwiZGljdFBhdGgiLCJleGlzdHNTeW5jIiwiZW50cnlMaW5lcyIsImlzRnVuY3Rpb24iLCJjb2RlVmFsdWUiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFFBQVEsS0FBSztBQUNwQixPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsTUFBTSxRQUFRLHNCQUFtQjtBQUMxQyxTQUFTQyxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxhQUFhLFFBQVEsNkJBQTBCO0FBQ3hELFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2Qzs7O0NBR0MsR0FDRCxPQUFPLE1BQU1DLHFCQUFxQkQ7SUFDaEMsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsTUFBMEIsRUFBRUMsUUFBZ0MsRUFBRTtRQUM3RSxNQUFNQyxTQUFTRCxZQUFZO1FBQzNCLCtDQUErQztRQUMvQyxNQUFNRSxNQUFNRCxXQUFXLFFBQVFSLE9BQU9VLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDRixHQUFHLEdBQUdEO1FBRXZELE9BQU87WUFDTEEsUUFBUSxHQUFHQyxJQUFJLFNBQVMsQ0FBQztZQUN6QlYsTUFBTTtRQUNSO0lBQ0Y7SUFFQWEsT0FBT0MsT0FBOEIsRUFBRTtRQUNyQyxNQUFNLEVBQUVMLE1BQU0sRUFBRSxHQUFHSztRQUNuQixNQUFNQyxhQUFhZCxPQUFPVSxNQUFNLENBQUNLLElBQUksSUFBSTtZQUN2Q0MsZUFBZTtZQUNmQyxrQkFBa0I7Z0JBQUM7YUFBSztRQUMxQjtRQUVBLE1BQU0sRUFBRUQsYUFBYSxFQUFFQyxnQkFBZ0IsRUFBRSxHQUFHSDtRQUU1QyxpQ0FBaUM7UUFDakMsTUFBTUksZUFBZSxJQUFJLENBQUNDLG1CQUFtQjtRQUU3QyxvQkFBb0I7UUFDcEIsTUFBTUMsdUJB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
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA+B/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAqrC/D"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/ui/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgC/C,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,iBAg6C/D"}