sonamu 0.7.28 → 0.7.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/api/code-converters.d.ts.map +1 -1
  2. package/dist/api/code-converters.js +4 -2
  3. package/dist/api/config.d.ts +21 -0
  4. package/dist/api/config.d.ts.map +1 -1
  5. package/dist/api/config.js +1 -1
  6. package/dist/api/context.d.ts +2 -0
  7. package/dist/api/context.d.ts.map +1 -1
  8. package/dist/api/context.js +1 -1
  9. package/dist/api/decorators.d.ts +2 -2
  10. package/dist/api/decorators.d.ts.map +1 -1
  11. package/dist/api/decorators.js +13 -8
  12. package/dist/api/sonamu.d.ts +5 -0
  13. package/dist/api/sonamu.d.ts.map +1 -1
  14. package/dist/api/sonamu.js +16 -1
  15. package/dist/database/puri.d.ts +1 -0
  16. package/dist/database/puri.d.ts.map +1 -1
  17. package/dist/database/puri.js +2 -2
  18. package/dist/dict/en.d.ts +33 -0
  19. package/dist/dict/en.d.ts.map +1 -0
  20. package/dist/dict/en.js +36 -0
  21. package/dist/dict/index.d.ts +14 -0
  22. package/dist/dict/index.d.ts.map +1 -0
  23. package/dist/dict/index.js +11 -0
  24. package/dist/dict/ko.d.ts +33 -0
  25. package/dist/dict/ko.d.ts.map +1 -0
  26. package/dist/dict/ko.js +36 -0
  27. package/dist/entity/entity-manager.d.ts +25 -1
  28. package/dist/entity/entity-manager.d.ts.map +1 -1
  29. package/dist/migration/code-generation.d.ts.map +1 -1
  30. package/dist/migration/code-generation.js +2 -2
  31. package/dist/migration/migrator.d.ts.map +1 -1
  32. package/dist/migration/migrator.js +41 -38
  33. package/dist/migration/postgresql-schema-reader.d.ts +1 -1
  34. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  35. package/dist/migration/postgresql-schema-reader.js +9 -6
  36. package/dist/syncer/checksum.js +12 -6
  37. package/dist/syncer/file-patterns.d.ts +1 -1
  38. package/dist/syncer/file-patterns.d.ts.map +1 -1
  39. package/dist/syncer/file-patterns.js +3 -2
  40. package/dist/syncer/module-loader.js +2 -2
  41. package/dist/syncer/syncer.d.ts +9 -1
  42. package/dist/syncer/syncer.d.ts.map +1 -1
  43. package/dist/syncer/syncer.js +79 -7
  44. package/dist/template/helpers.d.ts.map +1 -1
  45. package/dist/template/helpers.js +8 -11
  46. package/dist/template/implementations/sd.template.d.ts +38 -0
  47. package/dist/template/implementations/sd.template.d.ts.map +1 -0
  48. package/dist/template/implementations/sd.template.js +264 -0
  49. package/dist/template/implementations/services.template.d.ts.map +1 -1
  50. package/dist/template/implementations/services.template.js +40 -2
  51. package/dist/testing/fixture-manager.d.ts.map +1 -1
  52. package/dist/testing/fixture-manager.js +50 -47
  53. package/dist/types/types.d.ts +104 -4
  54. package/dist/types/types.d.ts.map +1 -1
  55. package/dist/types/types.js +23 -5
  56. package/dist/ui/api.d.ts.map +1 -1
  57. package/dist/ui/api.js +389 -5
  58. package/dist/ui-web/assets/index-CF0q64BA.js +189 -0
  59. package/dist/ui-web/assets/index-DdsG87sJ.css +1 -0
  60. package/dist/ui-web/index.html +2 -2
  61. package/package.json +10 -5
  62. package/src/api/code-converters.ts +6 -1
  63. package/src/api/config.ts +24 -0
  64. package/src/api/context.ts +2 -0
  65. package/src/api/decorators.ts +15 -7
  66. package/src/api/sonamu.ts +26 -0
  67. package/src/database/puri.ts +9 -1
  68. package/src/dict/en.ts +41 -0
  69. package/src/dict/index.ts +16 -0
  70. package/src/dict/ko.ts +41 -0
  71. package/src/migration/code-generation.ts +3 -1
  72. package/src/migration/migrator.ts +48 -46
  73. package/src/migration/postgresql-schema-reader.ts +11 -11
  74. package/src/syncer/checksum.ts +16 -7
  75. package/src/syncer/file-patterns.ts +3 -1
  76. package/src/syncer/module-loader.ts +1 -1
  77. package/src/syncer/syncer.ts +96 -6
  78. package/src/template/helpers.ts +7 -10
  79. package/src/template/implementations/sd.template.ts +285 -0
  80. package/src/template/implementations/services.template.ts +63 -1
  81. package/src/testing/fixture-manager.ts +64 -60
  82. package/src/types/types.ts +29 -3
  83. package/src/ui/api.ts +441 -3
  84. package/dist/ui-web/assets/brand-icons-Cu_C0hZ4.svg +0 -1008
  85. package/dist/ui-web/assets/brand-icons-F3SPCeH1.woff +0 -0
  86. package/dist/ui-web/assets/brand-icons-XL9sxUpA.woff2 +0 -0
  87. package/dist/ui-web/assets/brand-icons-sqJ2Pg7a.eot +0 -0
  88. package/dist/ui-web/assets/brand-icons-ubhWoxly.ttf +0 -0
  89. package/dist/ui-web/assets/flags-DOLqOU7Y.png +0 -0
  90. package/dist/ui-web/assets/icons-BOCtAERH.woff +0 -0
  91. package/dist/ui-web/assets/icons-CHzK1VD9.eot +0 -0
  92. package/dist/ui-web/assets/icons-D29ZQHHw.ttf +0 -0
  93. package/dist/ui-web/assets/icons-Du6TOHnR.woff2 +0 -0
  94. package/dist/ui-web/assets/icons-RwhydX30.svg +0 -1518
  95. package/dist/ui-web/assets/index-DIb6L1cc.css +0 -1
  96. package/dist/ui-web/assets/index-HjAeiFP0.js +0 -189
  97. package/dist/ui-web/assets/outline-icons-BfdLr8tr.svg +0 -366
  98. package/dist/ui-web/assets/outline-icons-DD8jm0uy.ttf +0 -0
  99. package/dist/ui-web/assets/outline-icons-DInHoiqI.woff2 +0 -0
  100. package/dist/ui-web/assets/outline-icons-LX8adJ4n.eot +0 -0
  101. package/dist/ui-web/assets/outline-icons-aQ88nltS.woff +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CAC5B,GACA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CA6HpB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CACvB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CACvB,qDAsBP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAwDhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
1
+ {"version":3,"file":"code-converters.d.ts","sourceRoot":"","sources":["../../src/api/code-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,YAAY,4BAMxD;AAMD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CAC5B,GACA,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CA6HpB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CACvB,GACL,CAAC,CAAC,SAAS,CAYb;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,UAAU,GAAE;IACV,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAAC;CACvB,qDAsBP;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CA6DhG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAU/F"}
@@ -213,7 +213,9 @@ import { ApiParamType } from "../types/types.js";
213
213
  } else if (ApiParamType.isIntersection(paramType)) {
214
214
  return paramType.types.map((type)=>apiParamTypeToTsType(type, injectImportKeys)).join(" & ");
215
215
  } else if (ApiParamType.isArray(paramType)) {
216
- return `${apiParamTypeToTsType(paramType.elementsType, injectImportKeys)}[]`;
216
+ // intersection이나 union인 경우 괄호로 감싸기
217
+ const elementsType = apiParamTypeToTsType(paramType.elementsType, injectImportKeys);
218
+ return ApiParamType.isIntersection(paramType.elementsType) || ApiParamType.isUnion(paramType.elementsType) ? `(${elementsType})[]` : `${elementsType}[]`;
217
219
  } else if (ApiParamType.isRef(paramType)) {
218
220
  if ([
219
221
  "Pick",
@@ -255,4 +257,4 @@ import { ApiParamType } from "../types/types.js";
255
257
  return `{ ${params.map((param)=>`${param.name}${param.optional ? "?" : ""}: ${apiParamTypeToTsType(param.type, injectImportKeys)}${param.defaultDef ? `= ${param.defaultDef}` : ""}`).join(", ")} }`;
256
258
  }
257
259
 
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgY29yZSB9IGZyb20gXCJ6b2QvdjRcIjtcbmltcG9ydCB0eXBlIHsgJFpvZExvb3NlU2hhcGUgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsPGNvcmUudXRpbC5MaXRlcmFsPjtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSxcbik6IHouWm9kVHlwZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKGtleVJlY29yZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChrZXlSZWNvcmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChbXCJQYXJ0aWFsXCJdLmluY2x1ZGVzKHJlZlR5cGUuaWQpKSB7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5hcmdzPy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocmVmVHlwZS5hcmdzWzBdLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHoudW5rbm93bigpIGFzIHouWm9kVHlwZTx1bmtub3duPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICB0dXBsZVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShlbGVtLCByZWZlcmVuY2VzKSkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSDtjIzrnbzrr7jthLDsnZggb3B0aW9uYWwg7Jes67aA66W8IOuwmOyYge2VmOyXrCBab2Qg7Iqk7YKk66eI66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gIGFwaVBhcmFtczogQXBpUGFyYW1bXSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogQW55Wm9kT2JqZWN0O1xuICB9ID0ge30sXG4pOiB6LlpvZE9iamVjdCB7XG4gIHJldHVybiB6Lm9iamVjdChcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhcGlQYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICBsZXQgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHBhcmFtLnR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAocGFyYW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICB6b2RUeXBlID0gem9kVHlwZS5vcHRpb25hbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyYW0ubmFtZSwgem9kVHlwZV07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkQXBp66W8IFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBUeXBlUGFyYW1ldGVy7JmAIOydvOuwmCDtjIzrnbzrr7jthLDrpbwg7LKY66as7ZWY66mwLFxuICogQ29udGV4dCwgUmVmS25leCwgX+uhnCDsi5zsnpHtlZjripQgb3B0aW9uYWwg7YyM652866+47YSw64qUIOygnOyZuO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGkoXG4gIGFwaTogRXh0ZW5kZWRBcGksXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSA9IHt9LFxuKSB7XG4gIGlmIChhcGkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHR5cGVQYXJhbSBvZiBhcGkudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0eXBlUGFyYW0uY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQsIHJlZmVyZW5jZXMpO1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgPT09IHRydWUgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5lbGVtZW50c1R5cGUsIGluamVjdEltcG9ydEtleXMpfVtdYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNSZWYocGFyYW1UeXBlKSkge1xuICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiLCBcIlByb21pc2VcIiwgXCJQYXJ0aWFsXCIsIFwiRGF0ZVwiXS5pbmNsdWRlcyhwYXJhbVR5cGUuaWQpID09PSBmYWxzZSkge1xuICAgICAgLy8gaW1wb3J0S2V5cyDsnbjsoJ3shZhcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChwYXJhbVR5cGUuaWQpO1xuICAgIH1cbiAgICBpZiAocGFyYW1UeXBlLmFyZ3MgPT09IHVuZGVmaW5lZCB8fCBwYXJhbVR5cGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBwYXJhbVR5cGUuaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtwYXJhbVR5cGUuaWR9PCR7cGFyYW1UeXBlLmFyZ3NcbiAgICAgICAgLm1hcCgoYXJnKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShhcmcsIGluamVjdEltcG9ydEtleXMpKVxuICAgICAgICAuam9pbihcIixcIil9PmA7XG4gICAgfVxuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc0luZGV4ZWRBY2Nlc3MocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgIHBhcmFtVHlwZS5vYmplY3QsXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLFxuICAgICl9WyR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmluZGV4LCBpbmplY3RJbXBvcnRLZXlzKX1dYDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNUdXBsZVR5cGUocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBgWyAke3BhcmFtVHlwZS5lbGVtZW50cy5tYXAoKGVsZW0pID0+IGFwaVBhcmFtVHlwZVRvVHNUeXBlKGVsZW0sIGluamVjdEltcG9ydEtleXMpKX0gXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHlwZVBhcmFtKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfSR7XG4gICAgICBwYXJhbVR5cGUuY29uc3RyYWludFxuICAgICAgICA/IGAgZXh0ZW5kcyAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5jb25zdHJhaW50LCBpbmplY3RJbXBvcnRLZXlzKX1gXG4gICAgICAgIDogXCJcIlxuICAgIH1gO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgcmVzb2x2ZSDrtojqsIAgQXBpUGFyYW1UeXBlICR7cGFyYW1UeXBlfWApO1xuICB9XG59XG5cbi8qKlxuICogQXBpUGFyYW0g67Cw7Je07J2EIFR5cGVTY3JpcHQg7ZWo7IiYIO2MjOudvOuvuO2EsCDsvZTrk5zroZwg67OA7ZmY7ZWp64uI64ukLlxuICog7JiIOiBcIm5hbWU6IHN0cmluZywgYWdlPzogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGUocGFyYW1zOiBBcGlQYXJhbVtdLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBwYXJhbXNcbiAgICAubWFwKChwYXJhbSkgPT4ge1xuICAgICAgcmV0dXJuIGAke3BhcmFtLm5hbWV9JHtcbiAgICAgICAgcGFyYW0ub3B0aW9uYWwgJiYgIXBhcmFtLmRlZmF1bHREZWYgPyBcIj9cIiA6IFwiXCJcbiAgICAgIH06ICR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW0udHlwZSwgaW5qZWN0SW1wb3J0S2V5cyl9JHtcbiAgICAgICAgcGFyYW0uZGVmYXVsdERlZiA/IGA9ICR7cGFyYW0uZGVmYXVsdERlZn1gIDogXCJcIlxuICAgICAgfWA7XG4gICAgfSlcbiAgICAuam9pbihcIiwgXCIpO1xufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IOqwneyytCDtg4DsnoUg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJ7IG5hbWU6IHN0cmluZywgYWdlPzogbnVtYmVyLCBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlIH1cIlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0KHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYHsgJHtwYXJhbXNcbiAgICAubWFwKFxuICAgICAgKHBhcmFtKSA9PlxuICAgICAgICBgJHtwYXJhbS5uYW1lfSR7cGFyYW0ub3B0aW9uYWwgPyBcIj9cIiA6IFwiXCJ9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKFxuICAgICAgICAgIHBhcmFtLnR5cGUsXG4gICAgICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICAgICAgKX0ke3BhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJ9YCxcbiAgICApXG4gICAgLmpvaW4oXCIsIFwiKX0gfWA7XG59XG4iXSwibmFtZXMiOlsieiIsIkFwaVBhcmFtVHlwZSIsInVud3JhcFByb21pc2VPbmNlIiwicGFyYW1UeXBlIiwiaXNQcm9taXNlIiwiYXJncyIsImdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlIiwicmVmZXJlbmNlcyIsInN0cmluZyIsIm51bWJlciIsImJvb2xlYW4iLCJhZHZUeXBlIiwidCIsImxpdGVyYWwiLCJ2YWx1ZSIsIm9ialR5cGUiLCJnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zIiwicHJvcHMiLCJhcnJUeXBlIiwiYXJyYXkiLCJlbGVtZW50c1R5cGUiLCJyZWZUeXBlIiwiaWQiLCJkYXRlIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJFcnJvciIsIm9iaiIsImxpdGVyYWxPclVuaW9uIiwibWFwIiwiYXJnIiwia2V5cyIsIlpvZFVuaW9uIiwiZGVmIiwib3B0aW9ucyIsIm9wdGlvbiIsInZhbHVlcyIsImtleVJlY29yZCIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwia2V5IiwicGljayIsIm9taXQiLCJwYXJ0aWFsIiwicmVmZXJlbmNlIiwidW5kZWZpbmVkIiwidW5rbm93biIsInVuaW9uVHlwZSIsInR5cGVzIiwic29tZSIsInR5cGUiLCJudWxsYWJsZSIsInVuaW9uIiwiaW50ZXJzZWN0aW9uVHlwZSIsInJlZHVjZSIsInJlc3VsdCIsImluZGV4IiwicmVzb2x2ZWRUeXBlIiwiaW50ZXJzZWN0aW9uIiwidHVwbGVUeXBlIiwidHVwbGUiLCJlbGVtZW50cyIsImVsZW0iLCJhcGlQYXJhbXMiLCJvYmplY3QiLCJwYXJhbSIsInpvZFR5cGUiLCJvcHRpb25hbCIsIm5hbWUiLCJnZXRab2RPYmplY3RGcm9tQXBpIiwiYXBpIiwidHlwZVBhcmFtZXRlcnMiLCJ0eXBlUGFyYW0iLCJjb25zdHJhaW50IiwiUmVxVHlwZSIsInBhcmFtZXRlcnMiLCJmaWx0ZXIiLCJpc0NvbnRleHQiLCJpc1JlZktuZXgiLCJzdGFydHNXaXRoIiwiYXBpUGFyYW1UeXBlVG9Uc1R5cGUiLCJpbmplY3RJbXBvcnRLZXlzIiwiaXNPYmplY3QiLCJhcGlQYXJhbVRvVHNDb2RlIiwiaXNTdHJpbmdMaXRlcmFsIiwiaXNOdW1lcmljTGl0ZXJhbCIsIlN0cmluZyIsImlzVW5pb24iLCJqb2luIiwiaXNJbnRlcnNlY3Rpb24iLCJpc0FycmF5IiwiaXNSZWYiLCJwdXNoIiwiaXNJbmRleGVkQWNjZXNzIiwiaXNUdXBsZVR5cGUiLCJpc1R5cGVQYXJhbSIsInBhcmFtcyIsImRlZmF1bHREZWYiLCJhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3QiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FFRCxTQUFTQSxDQUFDLFFBQVEsTUFBTTtBQUd4QixTQUF3QkMsWUFBWSxRQUFRLG9CQUFpQjtBQU83RDs7O0NBR0MsR0FDRCxPQUFPLFNBQVNDLGtCQUFrQkMsU0FBdUI7SUFDdkQsSUFBSUYsYUFBYUcsU0FBUyxDQUFDRCxZQUFZO1FBQ3JDLE9BQU9BLFVBQVVFLElBQUksRUFBRSxDQUFDLEVBQUU7SUFDNUIsT0FBTztRQUNMLE9BQU9GO0lBQ1Q7QUFDRjtBQUVBOztDQUVDLEdBRUQ7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBU0csMkJBQ2RILFNBQXVCLEVBQ3ZCSSxVQUVDO0lBRUQsT0FBUUo7UUFDTixLQUFLO1lBQ0gsT0FBT0gsRUFBRVEsTUFBTTtRQUNqQixLQUFLO1lBQ0gsT0FBT1IsRUFBRVMsTUFBTTtRQUNqQixLQUFLO1lBQ0gsT0FBT1QsRUFBRVUsT0FBTztRQUNsQjtZQUFTO2dCQUNQLE1BQU1DLFVBQVVSO2dCQUNoQixPQUFRUSxRQUFRQyxDQUFDO29CQUNmLEtBQUs7b0JBQ0wsS0FBSzt3QkFDSCxPQUFPWixFQUFFYSxPQUFPLENBQUNGLFFBQVFHLEtBQUs7b0JBQ2hDLEtBQUs7d0JBQVU7NEJBQ2IsTUFBTUMsVUFBVVo7NEJBQ2hCLE9BQU9hLDBCQUEwQkQsUUFBUUUsS0FBSzt3QkFDaEQ7b0JBQ0EsS0FBSzt3QkFBUzs0QkFDWixNQUFNQyxVQUFVZjs0QkFJaEIsT0FBT0gsRUFBRW1CLEtBQUssQ0FBQ2IsMkJBQTJCWSxRQUFRRSxZQUFZLEVBQUViO3dCQUNsRTtvQkFDQSxLQUFLO3dCQUFPOzRCQUNWLE1BQU1jLFVBQVVsQjs0QkFLaEIsYUFBYTs0QkFDYixJQUFJa0IsUUFBUUMsRUFBRSxLQUFLLFFBQVE7Z0NBQ3pCLE9BQU90QixFQUFFdUIsSUFBSTs0QkFDZjs0QkFDQSxlQUFlOzRCQUNmLElBQUk7Z0NBQUM7Z0NBQVE7NkJBQU8sQ0FBQ0MsUUFBUSxDQUFDSCxRQUFRQyxFQUFFLEdBQUc7Z0NBQ3pDLElBQUlELFFBQVFoQixJQUFJLEVBQUVvQixXQUFXLEdBQUc7b0NBQzlCLE1BQU0sSUFBSUMsTUFBTSxDQUFDLElBQUksRUFBRUwsUUFBUUMsRUFBRSxFQUFFO2dDQUNyQztnQ0FDQSxNQUFNLENBQUNLLEtBQUtDLGVBQWUsR0FBR1AsUUFBUWhCLElBQUksQ0FBQ3dCLEdBQUcsQ0FDNUMsQ0FBQ0MsTUFBUXhCLDJCQUEyQndCLEtBQUt2QjtnQ0FJM0MsSUFBSXdCLE9BQWlCLEVBQUU7Z0NBQ3ZCLElBQUlILDBCQUEwQjVCLEVBQUVnQyxRQUFRLEVBQUU7b0NBQ3hDRCxPQUFPSCxlQUFlSyxHQUFHLENBQUNDLE9BQU8sQ0FBQ0wsR0FBRyxDQUNuQyxDQUFDTSxTQUEwQ0EsT0FBT0YsR0FBRyxDQUFDRyxNQUFNLENBQUMsRUFBRTtnQ0FFbkUsT0FBTztvQ0FDTEwsT0FBTyxBQUFDSCxlQUF3Q0ssR0FBRyxDQUFDRyxNQUFNO2dDQUM1RDtnQ0FDQSxNQUFNQyxZQUFZQyxPQUFPQyxXQUFXLENBQUNSLEtBQUtGLEdBQUcsQ0FBQyxDQUFDVyxNQUFRO3dDQUFDQTt3Q0FBSztxQ0FBYztnQ0FDM0UsSUFBSW5CLFFBQVFDLEVBQUUsS0FBSyxRQUFRO29DQUN6QixJQUFJSyxJQUFJYyxJQUFJLEVBQUU7d0NBQ1osT0FBT2QsSUFBSWMsSUFBSSxDQUFDSjtvQ0FDbEI7Z0NBQ0YsT0FBTztvQ0FDTCxJQUFJVixJQUFJZSxJQUFJLEVBQUU7d0NBQ1osT0FBT2YsSUFBSWUsSUFBSSxDQUFDTDtvQ0FDbEI7Z0NBQ0Y7NEJBQ0Y7NEJBQ0EsSUFBSTtnQ0FBQzs2QkFBVSxDQUFDYixRQUFRLENBQUNILFFBQVFDLEVBQUUsR0FBRztnQ0FDcEMsSUFBSUQsUUFBUWhCLElBQUksRUFBRW9CLFdBQVcsR0FBRztvQ0FDOUIsTUFBTSxJQUFJQyxNQUFNLENBQUMsSUFBSSxFQUFFTCxRQUFRQyxFQUFFLEVBQUU7Z0NBQ3JDO2dDQUNBLE1BQU1LLE1BQU1yQiwyQkFBMkJlLFFBQVFoQixJQUFJLENBQUMsRUFBRSxFQUFFRTtnQ0FDeEQsZ0VBQWdFO2dDQUNoRSxPQUFPLEFBQUNvQixJQUF5QmdCLE9BQU87NEJBQzFDOzRCQUNBLE1BQU1DLFlBQVlyQyxVQUFVLENBQUNjLFFBQVFDLEVBQUUsQ0FBQzs0QkFDeEMsSUFBSXNCLGNBQWNDLFdBQVc7Z0NBQzNCLE9BQU83QyxFQUFFOEMsT0FBTzs0QkFDaEIsOENBQThDOzRCQUNoRDs0QkFDQSxPQUFPRjt3QkFDVDtvQkFDQSxLQUFLO3dCQUFTOzRCQUNaLE1BQU1HLFlBQVk1Qzs0QkFJbEIsZUFBZTs0QkFDZixJQUFJNEMsVUFBVUMsS0FBSyxDQUFDdkIsTUFBTSxLQUFLLEtBQUtzQixVQUFVQyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDQyxPQUFTQSxTQUFTLFNBQVM7Z0NBQ25GLElBQUlILFVBQVVDLEtBQUssQ0FBQyxFQUFFLEtBQUssUUFBUTtvQ0FDakMsT0FBTzFDLDJCQUEyQnlDLFVBQVVDLEtBQUssQ0FBQyxFQUFFLEVBQUV6QyxZQUFZNEMsUUFBUTtnQ0FDNUUsT0FBTztvQ0FDTCxPQUFPN0MsMkJBQTJCeUMsVUFBVUMsS0FBSyxDQUFDLEVBQUUsRUFBRXpDLFlBQVk0QyxRQUFRO2dDQUM1RTs0QkFDRjs0QkFDQSxTQUFTOzRCQUNULE9BQU9uRCxFQUFFb0QsS0FBSyxDQUNaTCxVQUFVQyxLQUFLLENBQUNuQixHQUFHLENBQUMsQ0FBQ3FCLE9BQVM1QywyQkFBMkI0QyxNQUFNM0M7d0JBRW5FO29CQUNBLEtBQUs7d0JBQWdCOzRCQUNuQixNQUFNOEMsbUJBQW1CbEQ7NEJBSXpCLE9BQU9rRCxpQkFBaUJMLEtBQUssQ0FBQ00sTUFBTSxDQUNsQyxDQUFDQyxRQUFRTCxNQUFNTTtnQ0FDYixNQUFNQyxlQUFlbkQsMkJBQTJCNEMsTUFBTTNDO2dDQUN0RCxJQUFJaUQsVUFBVSxHQUFHO29DQUNmLE9BQU9DO2dDQUNULE9BQU87b0NBQ0wsT0FBT3pELEVBQUUwRCxZQUFZLENBQUNILFFBQVFFO2dDQUNoQzs0QkFDRixHQUNBekQsRUFBRThDLE9BQU87d0JBRWI7b0JBQ0EsS0FBSzt3QkFBYzs0QkFDakIsTUFBTWEsWUFBWXhEOzRCQUNsQixPQUFPSCxFQUFFNEQsS0FBSyxDQUNaLDBFQUEwRTs0QkFDMUVELFVBQVVFLFFBQVEsQ0FBQ2hDLEdBQUcsQ0FBQyxDQUFDaUMsT0FBU3hELDJCQUEyQndELE1BQU12RDt3QkFFdEU7Z0JBQ0Y7Z0JBQ0EsT0FBT1AsRUFBRThDLE9BQU87WUFDbEI7SUFDRjtBQUNGO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTOUIsMEJBQ2QrQyxTQUFxQixFQUNyQnhELGFBRUksQ0FBQyxDQUFDO0lBRU4sT0FBT1AsRUFBRWdFLE1BQU0sQ0FDYjFCLE9BQU9DLFdBQVcsQ0FDaEJ3QixVQUFVbEMsR0FBRyxDQUFDLENBQUNvQztRQUNiLElBQUlDLFVBQVU1RCwyQkFBMkIyRCxNQUFNZixJQUFJLEVBQUUzQztRQUNyRCxJQUFJMEQsTUFBTUUsUUFBUSxFQUFFO1lBQ2xCRCxVQUFVQSxRQUFRQyxRQUFRO1FBQzVCO1FBQ0EsT0FBTztZQUFDRixNQUFNRyxJQUFJO1lBQUVGO1NBQVE7SUFDOUI7QUFHTjtBQUVBOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNHLG9CQUNkQyxHQUFnQixFQUNoQi9ELGFBRUksQ0FBQyxDQUFDO0lBRU4sSUFBSStELElBQUlDLGNBQWMsRUFBRTlDLFNBQVMsR0FBRztRQUNsQyxLQUFLLE1BQU0rQyxhQUFhRixJQUFJQyxjQUFjLENBQUU7WUFDMUMsSUFBSUMsVUFBVUMsVUFBVSxFQUFFO2dCQUN4QixNQUFNUCxVQUFVNUQsMkJBQTJCa0UsVUFBVUMsVUFBVSxFQUFFbEU7Z0JBQ2pFLDBEQUEwRDtnQkFDekRBLFVBQVUsQ0FBQ2lFLFVBQVVsRCxFQUFFLENBQUMsR0FBc0I0QztZQUNqRDtRQUNGO0lBQ0Y7SUFDQSxNQUFNUSxVQUFVMUQsMEJBQ2QsOEJBQThCO0lBQzlCc0QsSUFBSUssVUFBVSxDQUFDQyxNQUFNLENBQ25CLENBQUNYLFFBQ0MsQ0FBQ2hFLGFBQWE0RSxTQUFTLENBQUNaLE1BQU1mLElBQUksS0FDbEMsQ0FBQ2pELGFBQWE2RSxTQUFTLENBQUNiLE1BQU1mLElBQUksS0FDbEMsQ0FBRWUsQ0FBQUEsTUFBTUUsUUFBUSxLQUFLLFFBQVFGLE1BQU1HLElBQUksQ0FBQ1csVUFBVSxDQUFDLElBQUcsSUFFMUR4RTtJQUVGLE9BQU9tRTtBQUNUO0FBRUE7O0NBRUMsR0FFRDs7OztDQUlDLEdBQ0QsT0FBTyxTQUFTTSxxQkFBcUI3RSxTQUF1QixFQUFFOEUsZ0JBQTBCO0lBQ3RGLElBQ0U7UUFDRTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtLQUNELENBQUN6RCxRQUFRLENBQUNyQixZQUNYO1FBQ0EsT0FBT0E7SUFDVCxPQUFPLElBQUlGLGFBQWFpRixRQUFRLENBQUMvRSxZQUFZO1FBQzNDLE9BQU8sQ0FBQyxFQUFFLEVBQUVnRixpQkFBaUJoRixVQUFVYyxLQUFLLEVBQUVnRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ3JFLE9BQU8sSUFBSWhGLGFBQWFtRixlQUFlLENBQUNqRixZQUFZO1FBQ2xELE9BQU8sQ0FBQyxDQUFDLEVBQUVBLFVBQVVXLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0IsT0FBTyxJQUFJYixhQUFhb0YsZ0JBQWdCLENBQUNsRixZQUFZO1FBQ25ELE9BQU9tRixPQUFPbkYsVUFBVVcsS0FBSztJQUMvQixPQUFPLElBQUliLGFBQWFzRixPQUFPLENBQUNwRixZQUFZO1FBQzFDLE9BQU9BLFVBQVU2QyxLQUFLLENBQUNuQixHQUFHLENBQUMsQ0FBQ3FCLE9BQVM4QixxQkFBcUI5QixNQUFNK0IsbUJBQW1CTyxJQUFJLENBQUM7SUFDMUYsT0FBTyxJQUFJdkYsYUFBYXdGLGNBQWMsQ0FBQ3RGLFlBQVk7UUFDakQsT0FBT0EsVUFBVTZDLEtBQUssQ0FBQ25CLEdBQUcsQ0FBQyxDQUFDcUIsT0FBUzhCLHFCQUFxQjlCLE1BQU0rQixtQkFBbUJPLElBQUksQ0FBQztJQUMxRixPQUFPLElBQUl2RixhQUFheUYsT0FBTyxDQUFDdkYsWUFBWTtRQUMxQyxPQUFPLEdBQUc2RSxxQkFBcUI3RSxVQUFVaUIsWUFBWSxFQUFFNkQsa0JBQWtCLEVBQUUsQ0FBQztJQUM5RSxPQUFPLElBQUloRixhQUFhMEYsS0FBSyxDQUFDeEYsWUFBWTtRQUN4QyxJQUFJO1lBQUM7WUFBUTtZQUFRO1lBQVc7WUFBVztTQUFPLENBQUNxQixRQUFRLENBQUNyQixVQUFVbUIsRUFBRSxNQUFNLE9BQU87WUFDbkYsaUJBQWlCO1lBQ2pCMkQsaUJBQWlCVyxJQUFJLENBQUN6RixVQUFVbUIsRUFBRTtRQUNwQztRQUNBLElBQUluQixVQUFVRSxJQUFJLEtBQUt3QyxhQUFhMUMsVUFBVUUsSUFBSSxDQUFDb0IsTUFBTSxLQUFLLEdBQUc7WUFDL0QsT0FBT3RCLFVBQVVtQixFQUFFO1FBQ3JCLE9BQU87WUFDTCxPQUFPLEdBQUduQixVQUFVbUIsRUFBRSxDQUFDLENBQUMsRUFBRW5CLFVBQVVFLElBQUksQ0FDckN3QixHQUFHLENBQUMsQ0FBQ0MsTUFBUWtELHFCQUFxQmxELEtBQUttRCxtQkFDdkNPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQjtJQUNGLE9BQU8sSUFBSXZGLGFBQWE0RixlQUFlLENBQUMxRixZQUFZO1FBQ2xELE9BQU8sR0FBRzZFLHFCQUNSN0UsVUFBVTZELE1BQU0sRUFDaEJpQixrQkFDQSxDQUFDLEVBQUVELHFCQUFxQjdFLFVBQVVxRCxLQUFLLEVBQUV5QixrQkFBa0IsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sSUFBSWhGLGFBQWE2RixXQUFXLENBQUMzRixZQUFZO1FBQzlDLE9BQU8sQ0FBQyxFQUFFLEVBQUVBLFVBQVUwRCxRQUFRLENBQUNoQyxHQUFHLENBQUMsQ0FBQ2lDLE9BQVNrQixxQkFBcUJsQixNQUFNbUIsbUJBQW1CLEVBQUUsQ0FBQztJQUNoRyxPQUFPLElBQUloRixhQUFhOEYsV0FBVyxDQUFDNUYsWUFBWTtRQUM5QyxPQUFPLEdBQUdBLFVBQVVtQixFQUFFLEdBQ3BCbkIsVUFBVXNFLFVBQVUsR0FDaEIsQ0FBQyxTQUFTLEVBQUVPLHFCQUFxQjdFLFVBQVVzRSxVQUFVLEVBQUVRLG1CQUFtQixHQUMxRSxJQUNKO0lBQ0osT0FBTztRQUNMLE1BQU0sSUFBSXZELE1BQU0sQ0FBQyx3QkFBd0IsRUFBRXZCLFdBQVc7SUFDeEQ7QUFDRjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU2dGLGlCQUFpQmEsTUFBa0IsRUFBRWYsZ0JBQTBCO0lBQzdFLE9BQU9lLE9BQ0puRSxHQUFHLENBQUMsQ0FBQ29DO1FBQ0osT0FBTyxHQUFHQSxNQUFNRyxJQUFJLEdBQ2xCSCxNQUFNRSxRQUFRLElBQUksQ0FBQ0YsTUFBTWdDLFVBQVUsR0FBRyxNQUFNLEdBQzdDLEVBQUUsRUFBRWpCLHFCQUFxQmYsTUFBTWYsSUFBSSxFQUFFK0Isb0JBQ3BDaEIsTUFBTWdDLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRWhDLE1BQU1nQyxVQUFVLEVBQUUsR0FBRyxJQUM3QztJQUNKLEdBQ0NULElBQUksQ0FBQztBQUNWO0FBRUE7OztDQUdDLEdBQ0QsT0FBTyxTQUFTVSx5QkFBeUJGLE1BQWtCLEVBQUVmLGdCQUEwQjtJQUNyRixPQUFPLENBQUMsRUFBRSxFQUFFZSxPQUNUbkUsR0FBRyxDQUNGLENBQUNvQyxRQUNDLEdBQUdBLE1BQU1HLElBQUksR0FBR0gsTUFBTUUsUUFBUSxHQUFHLE1BQU0sR0FBRyxFQUFFLEVBQUVhLHFCQUM1Q2YsTUFBTWYsSUFBSSxFQUNWK0Isb0JBQ0VoQixNQUFNZ0MsVUFBVSxHQUFHLENBQUMsRUFBRSxFQUFFaEMsTUFBTWdDLFVBQVUsRUFBRSxHQUFHLElBQUksRUFFeERULElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQiJ9
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29kZS1jb252ZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogY29kZS1jb252ZXJ0ZXJz64qUIEFQSSDtg4DsnoUg7KCV7J2Y65Ok7J2EIFpvZCDqsJ3ssrTrgpggVHlwZVNjcmlwdCDsvZTrk5zroZwg67OA7ZmY7ZWY64qUIO2VqOyImOuTpOydhCDsoJzqs7Xtlanri4jri6QuXG4gKlxuICogMS4gQVBJIOyLnOumrOymiOuTpDpcbiAqIC0gRXh0ZW5kZWRBcGksIEFwaVBhcmFtLCBBcGlQYXJhbVR5cGVcbiAqIC0gQVBJIOuplO2DgOuNsOydtO2EsOulvCDtkZztmITtlZjripQg7YOA7J6FIOygleydmOuTpFxuICpcbiAqIDIuIFpvZE9iamVjdCDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFpvZCDtg4DsnoUg7J247Iqk7YS07IqkICjrn7Dtg4DsnoQg67C466as642w7J207IWY7JqpKVxuICogLSBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyDihpIgZ2V0Wm9kT2JqZWN0RnJvbUFwaVxuICpcbiAqIDMuIFRzVHlwZURlZiDrs4DtmZhcbiAqIC0gQVBJIO2DgOyehSDsoJXsnZgg4oaSIFR5cGVTY3JpcHQg7YOA7J6FIOy9lOuTnCDrrLjsnpDsl7QgKOy9lOuTnCDsg53shLHsmqkpXG4gKiAtIGFwaVBhcmFtVHlwZVRvVHNUeXBlIOKGkiBhcGlQYXJhbVRvVHNDb2RlLCBhcGlQYXJhbVRvVHNDb2RlQXNPYmplY3RcbiAqXG4gKiDssLjqs6A6XG4gKiAtIFpvZFR5cGVEZWYg7IOd7ISxIChab2Qg7L2U65OcIOusuOyekOyXtCk6IHpvZC1jb252ZXJ0ZXIudHPsnZggem9kVHlwZVRvWm9kQ29kZSDsgqzsmqlcbiAqIC0gRW50aXR5UHJvcCDrs4DtmZg6IHpvZC1jb252ZXJ0ZXIudHMg7LC47KGwXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgY29yZSB9IGZyb20gXCJ6b2QvdjRcIjtcbmltcG9ydCB0eXBlIHsgJFpvZExvb3NlU2hhcGUgfSBmcm9tIFwiem9kL3Y0L2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFeHRlbmRlZEFwaSB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kT2JqZWN0ID0gei5ab2RPYmplY3Q8JFpvZExvb3NlU2hhcGU+O1xudHlwZSBBbnlab2RMaXRlcmFsID0gei5ab2RMaXRlcmFsPGNvcmUudXRpbC5MaXRlcmFsPjtcblxuLyoqXG4gKiBQcm9taXNlIO2DgOyeheydhCDtlZwg67KIIOyWuOuemO2Vke2VmOyXrCDrgrTrtoAg7YOA7J6F7J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqIFByb21pc2XqsIAg7JWE64uMIOqyveyasCDsm5Drs7gg7YOA7J6F7J2EIOq3uOuMgOuhnCDrsJjtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBQcm9taXNlT25jZShwYXJhbVR5cGU6IEFwaVBhcmFtVHlwZSkge1xuICBpZiAoQXBpUGFyYW1UeXBlLmlzUHJvbWlzZShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZS5hcmdzPy5bMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcmFtVHlwZTtcbiAgfVxufVxuXG4vKlxuICogQVBJ66W8IOq1rOyEse2VmOuKlCDsmpTshozrk6TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFpvZCDtg4DsnoUg7J247Iqk7YS07Iqk66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN0cmluZywgbnVtYmVyLCBhcnJheSwgdW5pb24g65OxIOuqqOuToCBBcGlQYXJhbVR5cGXsnYQg7LKY66as7ZWY66mwLFxuICog7Iic7ZmY7LC47KGw6rCAIOuwnOyDne2VmOuKlCDqsr3smrAgei51bmtub3duKCnsnLzroZwgZmFsbGJhY2vtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShcbiAgcGFyYW1UeXBlOiBBcGlQYXJhbVR5cGUsXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSxcbik6IHouWm9kVHlwZTx1bmtub3duPiB7XG4gIHN3aXRjaCAocGFyYW1UeXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIHouc3RyaW5nKCk7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHoubnVtYmVyKCk7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB6LmJvb2xlYW4oKTtcbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zdCBhZHZUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyB2YWx1ZT86IHN0cmluZyB8IG51bWJlciB9O1xuICAgICAgc3dpdGNoIChhZHZUeXBlLnQpIHtcbiAgICAgICAgY2FzZSBcInN0cmluZy1saXRlcmFsXCI6XG4gICAgICAgIGNhc2UgXCJudW1lcmljLWxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gei5saXRlcmFsKGFkdlR5cGUudmFsdWUpO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICBjb25zdCBvYmpUeXBlID0gcGFyYW1UeXBlIGFzIHsgdDogc3RyaW5nOyBwcm9wczogQXBpUGFyYW1bXSB9O1xuICAgICAgICAgIHJldHVybiBnZXRab2RPYmplY3RGcm9tQXBpUGFyYW1zKG9ialR5cGUucHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJhcnJheVwiOiB7XG4gICAgICAgICAgY29uc3QgYXJyVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBlbGVtZW50c1R5cGU6IEFwaVBhcmFtVHlwZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiB6LmFycmF5KGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyclR5cGUuZWxlbWVudHNUeXBlLCByZWZlcmVuY2VzKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlZlwiOiB7XG4gICAgICAgICAgY29uc3QgcmVmVHlwZSA9IHBhcmFtVHlwZSBhcyB7XG4gICAgICAgICAgICB0OiBzdHJpbmc7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgYXJncz86IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGF0ZSDtg4DsnoUg7LKY66asXG4gICAgICAgICAgaWYgKHJlZlR5cGUuaWQgPT09IFwiRGF0ZVwiKSB7XG4gICAgICAgICAgICByZXR1cm4gei5kYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOqwneyytCDtgqQg6rSA66asIOycoO2LuOumrO2LsFxuICAgICAgICAgIGlmIChbXCJQaWNrXCIsIFwiT21pdFwiXS5pbmNsdWRlcyhyZWZUeXBlLmlkKSkge1xuICAgICAgICAgICAgaWYgKHJlZlR5cGUuYXJncz8ubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J6Y66q765CcICR7cmVmVHlwZS5pZH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtvYmosIGxpdGVyYWxPclVuaW9uXSA9IHJlZlR5cGUuYXJncy5tYXAoXG4gICAgICAgICAgICAgIChhcmcpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKGFyZywgcmVmZXJlbmNlcyksXG4gICAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFVuaW9u7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICApIGFzIFtBbnlab2RPYmplY3QsIHouWm9kVW5pb248YW55PiB8IEFueVpvZExpdGVyYWxdO1xuXG4gICAgICAgICAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsT3JVbmlvbiBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICAgICAgICAgICAga2V5cyA9IGxpdGVyYWxPclVuaW9uLmRlZi5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgICAob3B0aW9uOiB7IGRlZjogeyB2YWx1ZXM6IHN0cmluZ1tdIH0gfSkgPT4gb3B0aW9uLmRlZi52YWx1ZXNbMF0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBrZXlzID0gKGxpdGVyYWxPclVuaW9uIGFzIHouWm9kTGl0ZXJhbDxzdHJpbmc+KS5kZWYudmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5UmVjb3JkID0gT2JqZWN0LmZyb21FbnRyaWVzKGtleXMubWFwKChrZXkpID0+IFtrZXksIHRydWUgYXMgY29uc3RdKSk7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5pZCA9PT0gXCJQaWNrXCIpIHtcbiAgICAgICAgICAgICAgaWYgKG9iai5waWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iai5waWNrKGtleVJlY29yZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChvYmoub21pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmoub21pdChrZXlSZWNvcmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChbXCJQYXJ0aWFsXCJdLmluY2x1ZGVzKHJlZlR5cGUuaWQpKSB7XG4gICAgICAgICAgICBpZiAocmVmVHlwZS5hcmdzPy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnpjrqrvrkJwgJHtyZWZUeXBlLmlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUocmVmVHlwZS5hcmdzWzBdLCByZWZlcmVuY2VzKTtcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogUGFydGlhbCDsnbjsiJgg7YOA7J6FIOy6kOyKpO2MhVxuICAgICAgICAgICAgcmV0dXJuIChvYmogYXMgei5ab2RPYmplY3Q8YW55PikucGFydGlhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzW3JlZlR5cGUuaWRdO1xuICAgICAgICAgIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHoudW5rbm93bigpO1xuICAgICAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKGByZWYg7LC47KGwIOu2iOqwgCAke3JlZlR5cGUuaWR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZWZlcmVuY2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInVuaW9uXCI6IHtcbiAgICAgICAgICBjb25zdCB1bmlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gbnVsbGFibGUg7Jyg64uI7JioXG4gICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlcy5sZW5ndGggPT09IDIgJiYgdW5pb25UeXBlLnR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwibnVsbFwiKSkge1xuICAgICAgICAgICAgaWYgKHVuaW9uVHlwZS50eXBlc1swXSA9PT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHVuaW9uVHlwZS50eXBlc1sxXSwgcmVmZXJlbmNlcykubnVsbGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSh1bmlvblR5cGUudHlwZXNbMF0sIHJlZmVyZW5jZXMpLm51bGxhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOydvOuwmCDsnKDri4jsmKhcbiAgICAgICAgICByZXR1cm4gei51bmlvbihcbiAgICAgICAgICAgIHVuaW9uVHlwZS50eXBlcy5tYXAoKHR5cGUpID0+IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHR5cGUsIHJlZmVyZW5jZXMpKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJpbnRlcnNlY3Rpb25cIjoge1xuICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBwYXJhbVR5cGUgYXMge1xuICAgICAgICAgICAgdDogc3RyaW5nO1xuICAgICAgICAgICAgdHlwZXM6IEFwaVBhcmFtVHlwZVtdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvblR5cGUudHlwZXMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdCwgdHlwZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZSwgcmVmZXJlbmNlcyk7XG4gICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlZFR5cGU7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHouaW50ZXJzZWN0aW9uKHJlc3VsdCwgcmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHoudW5rbm93bigpIGFzIHouWm9kVHlwZTx1bmtub3duPixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJ0dXBsZS10eXBlXCI6IHtcbiAgICAgICAgICBjb25zdCB0dXBsZVR5cGUgPSBwYXJhbVR5cGUgYXMgQXBpUGFyYW1UeXBlLlR1cGxlVHlwZTtcbiAgICAgICAgICByZXR1cm4gei50dXBsZShcbiAgICAgICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7IOd7ISx65CY64qUIFpvZFR1cGxl7J2YIO2DgOyeheydhCDstpTsoIHtlZjquLAg7Ja066Ck7JuAXG4gICAgICAgICAgICB0dXBsZVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZShlbGVtLCByZWZlcmVuY2VzKSkgYXMgYW55LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnVua25vd24oKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgWm9kT2JqZWN066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSDtjIzrnbzrr7jthLDsnZggb3B0aW9uYWwg7Jes67aA66W8IOuwmOyYge2VmOyXrCBab2Qg7Iqk7YKk66eI66W8IOyDneyEse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gIGFwaVBhcmFtczogQXBpUGFyYW1bXSxcbiAgcmVmZXJlbmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogQW55Wm9kT2JqZWN0O1xuICB9ID0ge30sXG4pOiB6LlpvZE9iamVjdCB7XG4gIHJldHVybiB6Lm9iamVjdChcbiAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhcGlQYXJhbXMubWFwKChwYXJhbSkgPT4ge1xuICAgICAgICBsZXQgem9kVHlwZSA9IGdldFpvZFR5cGVGcm9tQXBpUGFyYW1UeXBlKHBhcmFtLnR5cGUsIHJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAocGFyYW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICB6b2RUeXBlID0gem9kVHlwZS5vcHRpb25hbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyYW0ubmFtZSwgem9kVHlwZV07XG4gICAgICB9KSxcbiAgICApLFxuICApO1xufVxuXG4vKipcbiAqIEV4dGVuZGVkQXBp66W8IFpvZE9iamVjdOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBUeXBlUGFyYW1ldGVy7JmAIOydvOuwmCDtjIzrnbzrr7jthLDrpbwg7LKY66as7ZWY66mwLFxuICogQ29udGV4dCwgUmVmS25leCwgX+uhnCDsi5zsnpHtlZjripQgb3B0aW9uYWwg7YyM652866+47YSw64qUIOygnOyZuO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpvZE9iamVjdEZyb21BcGkoXG4gIGFwaTogRXh0ZW5kZWRBcGksXG4gIHJlZmVyZW5jZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IEFueVpvZE9iamVjdDtcbiAgfSA9IHt9LFxuKSB7XG4gIGlmIChhcGkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IHR5cGVQYXJhbSBvZiBhcGkudHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICh0eXBlUGFyYW0uY29uc3RyYWludCkge1xuICAgICAgICBjb25zdCB6b2RUeXBlID0gZ2V0Wm9kVHlwZUZyb21BcGlQYXJhbVR5cGUodHlwZVBhcmFtLmNvbnN0cmFpbnQsIHJlZmVyZW5jZXMpO1xuICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IOugiO2NvOufsOyKpCDtg4DsnoUg7LqQ7Iqk7YyFXG4gICAgICAgIChyZWZlcmVuY2VzW3R5cGVQYXJhbS5pZF0gYXMgei5ab2RUeXBlPGFueT4pID0gem9kVHlwZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgUmVxVHlwZSA9IGdldFpvZE9iamVjdEZyb21BcGlQYXJhbXMoXG4gICAgLy8gYXBpIHBhcnNpbmftlZwg6rKw6rO86rCAIGFwaSBwYXJhbXNcbiAgICBhcGkucGFyYW1ldGVycy5maWx0ZXIoXG4gICAgICAocGFyYW0pID0+XG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNDb250ZXh0KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICFBcGlQYXJhbVR5cGUuaXNSZWZLbmV4KHBhcmFtLnR5cGUpICYmXG4gICAgICAgICEocGFyYW0ub3B0aW9uYWwgPT09IHRydWUgJiYgcGFyYW0ubmFtZS5zdGFydHNXaXRoKFwiX1wiKSksIC8vIF/roZwg7Iuc7J6R7ZWY64qUIO2MjOudvOuvuO2EsOuKlCDsoJzsmbhcbiAgICApLFxuICAgIHJlZmVyZW5jZXMsXG4gICk7XG4gIHJldHVybiBSZXFUeXBlO1xufVxuXG4vKlxuICogQVBJIO2DgOyehSDsoJXsnZjrpbwgVHlwZVNjcmlwdCDsvZTrk5wg66y47J6Q7Je066GcIOuzgO2ZmO2VmOq4sCDsnITtlZwg7ZWo7IiY65Ok7J6F64uI64ukLlxuICovXG5cbi8qKlxuICogQXBpUGFyYW1UeXBl7J2EIFR5cGVTY3JpcHQg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhcnJheSwgcmVmIOuTsSDrqqjrk6Ag7YOA7J6F7J2EIFRTIOusuOuyleycvOuhnCDtkZztmITtlZjrqbAsXG4gKiBpbXBvcnTqsIAg7ZWE7JqU7ZWcIO2DgOyehSBJROuKlCBpbmplY3RJbXBvcnRLZXlz7JeQIOyImOynke2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZTogQXBpUGFyYW1UeXBlLCBpbmplY3RJbXBvcnRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmIChcbiAgICBbXG4gICAgICBcInN0cmluZ1wiLFxuICAgICAgXCJudW1iZXJcIixcbiAgICAgIFwiYm9vbGVhblwiLFxuICAgICAgXCJ0cnVlXCIsXG4gICAgICBcImZhbHNlXCIsXG4gICAgICBcIm51bGxcIixcbiAgICAgIFwidW5kZWZpbmVkXCIsXG4gICAgICBcInZvaWRcIixcbiAgICAgIFwiYW55XCIsXG4gICAgICBcInVua25vd25cIixcbiAgICBdLmluY2x1ZGVzKHBhcmFtVHlwZSBhcyBzdHJpbmcpXG4gICkge1xuICAgIHJldHVybiBwYXJhbVR5cGUgYXMgc3RyaW5nO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc09iamVjdChwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGB7ICR7YXBpUGFyYW1Ub1RzQ29kZShwYXJhbVR5cGUucHJvcHMsIGluamVjdEltcG9ydEtleXMpfSB9YDtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNTdHJpbmdMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFwiJHtwYXJhbVR5cGUudmFsdWV9XCJgO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc051bWVyaWNMaXRlcmFsKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtVHlwZS52YWx1ZSk7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiB8IFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbnRlcnNlY3Rpb24ocGFyYW1UeXBlKSkge1xuICAgIHJldHVybiBwYXJhbVR5cGUudHlwZXMubWFwKCh0eXBlKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZSh0eXBlLCBpbmplY3RJbXBvcnRLZXlzKSkuam9pbihcIiAmIFwiKTtcbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNBcnJheShwYXJhbVR5cGUpKSB7XG4gICAgLy8gaW50ZXJzZWN0aW9u7J2064KYIHVuaW9u7J24IOqyveyasCDqtITtmLjroZwg6rCQ7Iu46riwXG4gICAgY29uc3QgZWxlbWVudHNUeXBlID0gYXBpUGFyYW1UeXBlVG9Uc1R5cGUocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSwgaW5qZWN0SW1wb3J0S2V5cyk7XG4gICAgcmV0dXJuIEFwaVBhcmFtVHlwZS5pc0ludGVyc2VjdGlvbihwYXJhbVR5cGUuZWxlbWVudHNUeXBlKSB8fFxuICAgICAgQXBpUGFyYW1UeXBlLmlzVW5pb24ocGFyYW1UeXBlLmVsZW1lbnRzVHlwZSlcbiAgICAgID8gYCgke2VsZW1lbnRzVHlwZX0pW11gXG4gICAgICA6IGAke2VsZW1lbnRzVHlwZX1bXWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzUmVmKHBhcmFtVHlwZSkpIHtcbiAgICBpZiAoW1wiUGlja1wiLCBcIk9taXRcIiwgXCJQcm9taXNlXCIsIFwiUGFydGlhbFwiLCBcIkRhdGVcIl0uaW5jbHVkZXMocGFyYW1UeXBlLmlkKSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIGltcG9ydEtleXMg7J247KCd7IWYXG4gICAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocGFyYW1UeXBlLmlkKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtVHlwZS5hcmdzID09PSB1bmRlZmluZWQgfHwgcGFyYW1UeXBlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyYW1UeXBlLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7cGFyYW1UeXBlLmlkfTwke3BhcmFtVHlwZS5hcmdzXG4gICAgICAgIC5tYXAoKGFyZykgPT4gYXBpUGFyYW1UeXBlVG9Uc1R5cGUoYXJnLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCIsXCIpfT5gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChBcGlQYXJhbVR5cGUuaXNJbmRleGVkQWNjZXNzKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYCR7YXBpUGFyYW1UeXBlVG9Uc1R5cGUoXG4gICAgICBwYXJhbVR5cGUub2JqZWN0LFxuICAgICAgaW5qZWN0SW1wb3J0S2V5cyxcbiAgICApfVske2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtVHlwZS5pbmRleCwgaW5qZWN0SW1wb3J0S2V5cyl9XWA7XG4gIH0gZWxzZSBpZiAoQXBpUGFyYW1UeXBlLmlzVHVwbGVUeXBlKHBhcmFtVHlwZSkpIHtcbiAgICByZXR1cm4gYFsgJHtwYXJhbVR5cGUuZWxlbWVudHMubWFwKChlbGVtKSA9PiBhcGlQYXJhbVR5cGVUb1RzVHlwZShlbGVtLCBpbmplY3RJbXBvcnRLZXlzKSl9IF1gO1xuICB9IGVsc2UgaWYgKEFwaVBhcmFtVHlwZS5pc1R5cGVQYXJhbShwYXJhbVR5cGUpKSB7XG4gICAgcmV0dXJuIGAke3BhcmFtVHlwZS5pZH0ke1xuICAgICAgcGFyYW1UeXBlLmNvbnN0cmFpbnRcbiAgICAgICAgPyBgIGV4dGVuZHMgJHthcGlQYXJhbVR5cGVUb1RzVHlwZShwYXJhbVR5cGUuY29uc3RyYWludCwgaW5qZWN0SW1wb3J0S2V5cyl9YFxuICAgICAgICA6IFwiXCJcbiAgICB9YDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc29sdmUg67aI6rCAIEFwaVBhcmFtVHlwZSAke3BhcmFtVHlwZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwaVBhcmFtIOuwsOyXtOydhCBUeXBlU2NyaXB0IO2VqOyImCDtjIzrnbzrr7jthLAg7L2U65Oc66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyYiDogXCJuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZVwiXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcGlQYXJhbVRvVHNDb2RlKHBhcmFtczogQXBpUGFyYW1bXSwgaW5qZWN0SW1wb3J0S2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFyYW1zXG4gICAgLm1hcCgocGFyYW0pID0+IHtcbiAgICAgIHJldHVybiBgJHtwYXJhbS5uYW1lfSR7XG4gICAgICAgIHBhcmFtLm9wdGlvbmFsICYmICFwYXJhbS5kZWZhdWx0RGVmID8gXCI/XCIgOiBcIlwiXG4gICAgICB9OiAke2FwaVBhcmFtVHlwZVRvVHNUeXBlKHBhcmFtLnR5cGUsIGluamVjdEltcG9ydEtleXMpfSR7XG4gICAgICAgIHBhcmFtLmRlZmF1bHREZWYgPyBgPSAke3BhcmFtLmRlZmF1bHREZWZ9YCA6IFwiXCJcbiAgICAgIH1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKTtcbn1cblxuLyoqXG4gKiBBcGlQYXJhbSDrsLDsl7TsnYQgVHlwZVNjcmlwdCDqsJ3ssrQg7YOA7J6FIOy9lOuTnOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiDsmIg6IFwieyBuYW1lOiBzdHJpbmcsIGFnZT86IG51bWJlciwgYWN0aXZlOiBib29sZWFuID0gdHJ1ZSB9XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwaVBhcmFtVG9Uc0NvZGVBc09iamVjdChwYXJhbXM6IEFwaVBhcmFtW10sIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7ICR7cGFyYW1zXG4gICAgLm1hcChcbiAgICAgIChwYXJhbSkgPT5cbiAgICAgICAgYCR7cGFyYW0ubmFtZX0ke3BhcmFtLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwifTogJHthcGlQYXJhbVR5cGVUb1RzVHlwZShcbiAgICAgICAgICBwYXJhbS50eXBlLFxuICAgICAgICAgIGluamVjdEltcG9ydEtleXMsXG4gICAgICAgICl9JHtwYXJhbS5kZWZhdWx0RGVmID8gYD0gJHtwYXJhbS5kZWZhdWx0RGVmfWAgOiBcIlwifWAsXG4gICAgKVxuICAgIC5qb2luKFwiLCBcIil9IH1gO1xufVxuIl0sIm5hbWVzIjpbInoiLCJBcGlQYXJhbVR5cGUiLCJ1bndyYXBQcm9taXNlT25jZSIsInBhcmFtVHlwZSIsImlzUHJvbWlzZSIsImFyZ3MiLCJnZXRab2RUeXBlRnJvbUFwaVBhcmFtVHlwZSIsInJlZmVyZW5jZXMiLCJzdHJpbmciLCJudW1iZXIiLCJib29sZWFuIiwiYWR2VHlwZSIsInQiLCJsaXRlcmFsIiwidmFsdWUiLCJvYmpUeXBlIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaVBhcmFtcyIsInByb3BzIiwiYXJyVHlwZSIsImFycmF5IiwiZWxlbWVudHNUeXBlIiwicmVmVHlwZSIsImlkIiwiZGF0ZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiRXJyb3IiLCJvYmoiLCJsaXRlcmFsT3JVbmlvbiIsIm1hcCIsImFyZyIsImtleXMiLCJab2RVbmlvbiIsImRlZiIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWx1ZXMiLCJrZXlSZWNvcmQiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImtleSIsInBpY2siLCJvbWl0IiwicGFydGlhbCIsInJlZmVyZW5jZSIsInVuZGVmaW5lZCIsInVua25vd24iLCJ1bmlvblR5cGUiLCJ0eXBlcyIsInNvbWUiLCJ0eXBlIiwibnVsbGFibGUiLCJ1bmlvbiIsImludGVyc2VjdGlvblR5cGUiLCJyZWR1Y2UiLCJyZXN1bHQiLCJpbmRleCIsInJlc29sdmVkVHlwZSIsImludGVyc2VjdGlvbiIsInR1cGxlVHlwZSIsInR1cGxlIiwiZWxlbWVudHMiLCJlbGVtIiwiYXBpUGFyYW1zIiwib2JqZWN0IiwicGFyYW0iLCJ6b2RUeXBlIiwib3B0aW9uYWwiLCJuYW1lIiwiZ2V0Wm9kT2JqZWN0RnJvbUFwaSIsImFwaSIsInR5cGVQYXJhbWV0ZXJzIiwidHlwZVBhcmFtIiwiY29uc3RyYWludCIsIlJlcVR5cGUiLCJwYXJhbWV0ZXJzIiwiZmlsdGVyIiwiaXNDb250ZXh0IiwiaXNSZWZLbmV4Iiwic3RhcnRzV2l0aCIsImFwaVBhcmFtVHlwZVRvVHNUeXBlIiwiaW5qZWN0SW1wb3J0S2V5cyIsImlzT2JqZWN0IiwiYXBpUGFyYW1Ub1RzQ29kZSIsImlzU3RyaW5nTGl0ZXJhbCIsImlzTnVtZXJpY0xpdGVyYWwiLCJTdHJpbmciLCJpc1VuaW9uIiwiam9pbiIsImlzSW50ZXJzZWN0aW9uIiwiaXNBcnJheSIsImlzUmVmIiwicHVzaCIsImlzSW5kZXhlZEFjY2VzcyIsImlzVHVwbGVUeXBlIiwiaXNUeXBlUGFyYW0iLCJwYXJhbXMiLCJkZWZhdWx0RGVmIiwiYXBpUGFyYW1Ub1RzQ29kZUFzT2JqZWN0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBa0JDLEdBRUQsU0FBU0EsQ0FBQyxRQUFRLE1BQU07QUFHeEIsU0FBd0JDLFlBQVksUUFBUSxvQkFBaUI7QUFPN0Q7OztDQUdDLEdBQ0QsT0FBTyxTQUFTQyxrQkFBa0JDLFNBQXVCO0lBQ3ZELElBQUlGLGFBQWFHLFNBQVMsQ0FBQ0QsWUFBWTtRQUNyQyxPQUFPQSxVQUFVRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQzVCLE9BQU87UUFDTCxPQUFPRjtJQUNUO0FBQ0Y7QUFFQTs7Q0FFQyxHQUVEOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNHLDJCQUNkSCxTQUF1QixFQUN2QkksVUFFQztJQUVELE9BQVFKO1FBQ04sS0FBSztZQUNILE9BQU9ILEVBQUVRLE1BQU07UUFDakIsS0FBSztZQUNILE9BQU9SLEVBQUVTLE1BQU07UUFDakIsS0FBSztZQUNILE9BQU9ULEVBQUVVLE9BQU87UUFDbEI7WUFBUztnQkFDUCxNQUFNQyxVQUFVUjtnQkFDaEIsT0FBUVEsUUFBUUMsQ0FBQztvQkFDZixLQUFLO29CQUNMLEtBQUs7d0JBQ0gsT0FBT1osRUFBRWEsT0FBTyxDQUFDRixRQUFRRyxLQUFLO29CQUNoQyxLQUFLO3dCQUFVOzRCQUNiLE1BQU1DLFVBQVVaOzRCQUNoQixPQUFPYSwwQkFBMEJELFFBQVFF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
@@ -18,6 +18,15 @@ import type { AuthContext, Context } from "./context";
18
18
  export type DatabaseConfig = Omit<Knex.Config, "connection"> & {
19
19
  connection?: Knex.PgConnectionConfig;
20
20
  };
21
+ /**
22
+ * i18n 설정
23
+ */
24
+ export type SonamuI18nOptions = {
25
+ /** 기본 locale (키 정의 기준 + 런타임 기본값) */
26
+ defaultLocale: string;
27
+ /** 지원하는 locale 목록 */
28
+ supportedLocales: string[];
29
+ };
21
30
  export type SonamuConfig<TSinkId extends string = string, TFilterId extends string = string> = {
22
31
  projectName?: string;
23
32
  api: {
@@ -27,6 +36,18 @@ export type SonamuConfig<TSinkId extends string = string, TFilterId extends stri
27
36
  };
28
37
  timezone?: string;
29
38
  };
39
+ /**
40
+ * i18n 설정
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * i18n: {
45
+ * defaultLocale: 'ko',
46
+ * supportedLocales: ['ko', 'en', 'ja'],
47
+ * }
48
+ * ```
49
+ */
50
+ i18n?: SonamuI18nOptions;
30
51
  sync: {
31
52
  targets: string[];
32
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/api/config.ts"],"names":[],"mappings":"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"}
@@ -26,4 +26,4 @@ export function defineConfig(config) {
26
26
  return config;
27
27
  }
28
28
 
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHR5cGUgeyBEZXNlcmlhbGl6ZUZ1bmN0aW9uLCBTZXJpYWxpemVGdW5jdGlvbiB9IGZyb20gXCJAZmFzdGlmeS9wYXNzcG9ydC9kaXN0L0F1dGhlbnRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIHsgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvc2VjdXJlLXNlc3Npb25cIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeVN0YXRpY09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvc3RhdGljXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCwgRmFzdGlmeVNlcnZlck9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHR5cGUgeyBRc1BsdWdpbk9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeS1xc1wiO1xuaW1wb3J0IHR5cGUgeyBTc2VQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktc3NlLXYyL2xpYi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11TG9nZ2luZ09wdGlvbnMgfSBmcm9tIFwiLi4vbG9nZ2VyL2NvbmZpZ3VyZVwiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlQ29uZmlnIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY3V0YWJsZSwgU29uYW11RmFzdGlmeUNvbmZpZyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29udGV4dCwgQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdUNvbmZpZzxUU2lua0lkIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBURmlsdGVySWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0ge1xuICBwcm9qZWN0TmFtZT86IHN0cmluZztcblxuICBhcGk6IHtcbiAgICBkaXI6IHN0cmluZztcbiAgICByb3V0ZToge1xuICAgICAgcHJlZml4OiBzdHJpbmc7XG4gICAgfTtcbiAgICB0aW1lem9uZT86IHN0cmluZztcbiAgfTtcbiAgc3luYzoge1xuICAgIHRhcmdldHM6IHN0cmluZ1tdOyAvLyBcIndlYlwiLCBcImFwcFwiIOuTsVxuICB9O1xuXG4gIGRhdGFiYXNlOiB7XG4gICAgLy8g642w7J207YSw67Kg7J207IqkKHBn64qUIHBnIOuqqOuTiCwgcGduYXRpdmXripQgcGctbmF0aXZlIOuqqOuTiOydmCDshKTsuZjqsIAg7ZWE7JqU7ZWp64uI64ukLilcbiAgICBkYXRhYmFzZT86IFwicGdcIiB8IFwicGduYXRpdmVcIjtcbiAgICAvLyDquLDrs7gg642w7J207YSw67Kg7J207IqkIOydtOumhFxuICAgIG5hbWU6IHN0cmluZztcbiAgICAvLyDrqqjrk6Ag7ZmY6rK97JeQIOyggeyaqeuQoCDquLDrs7ggS25leCDsmLXshZhcbiAgICBkZWZhdWx0T3B0aW9uczogRGF0YWJhc2VDb25maWc7XG4gICAgLy8g7ZmY6rK967OEIOyEpOyglVxuICAgIGVudmlyb25tZW50cz86IHtcbiAgICAgIGRldmVsb3BtZW50PzogRGF0YWJhc2VDb25maWc7XG4gICAgICBkZXZlbG9wbWVudF9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbj86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgcHJvZHVjdGlvbl9zbGF2ZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgZml4dHVyZT86IERhdGFiYXNlQ29uZmlnO1xuICAgICAgdGVzdD86IERhdGFiYXNlQ29uZmlnO1xuICAgIH07XG4gIH07XG5cbiAgbG9nZ2luZz86IGZhbHNlIHwgU29uYW11TG9nZ2luZ09wdGlvbnM8VFNpbmtJZCwgVEZpbHRlcklkPjtcbiAgc2VydmVyOiBTb25hbXVTZXJ2ZXJPcHRpb25zO1xuICB0YXNrcz86IFNvbmFtdVRhc2tPcHRpb25zO1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11U2VydmVyT3B0aW9ucyA9IHtcbiAgLy8g7ZSE66Gc7KCd7Yq4IOyZuOu2gOyXkOyEnCDsoJHqt7ztlaAg7IiYIOyeiOuKlCBVUkwuIOq4sOuzuOqwkuydgCB7c2VydmVyLmxpc3Rlbi5ob3N0fTp7c2VydmVyLmxpc3Rlbi5wb3J0fSDsnoXri4jri6QuXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgZmFzdGlmeT86IE9taXQ8RmFzdGlmeVNlcnZlck9wdGlvbnMsIFwibG9nZ2VyXCI+O1xuXG4gIGxpc3Rlbj86IHtcbiAgICBwb3J0OiBudW1iZXI7XG4gICAgaG9zdD86IHN0cmluZztcbiAgfTtcblxuICBwbHVnaW5zPzoge1xuICAgIC8qKiDsnZHri7Ug7JWV7LaVIO2UjOufrOq3uOyduCAoQGZhc3RpZnkvY29tcHJlc3MpICovXG4gICAgY29tcHJlc3M/OiBib29sZWFuIHwgRmFzdGlmeUNvbXByZXNzT3B0aW9ucztcbiAgICBjb3JzPzogYm9vbGVhbiB8IEZhc3RpZnlDb3JzT3B0aW9ucztcbiAgICBmb3JtYm9keT86IGJvb2xlYW4gfCBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zO1xuICAgIG11bHRpcGFydD86IGJvb2xlYW4gfCBGYXN0aWZ5TXVsdGlwYXJ0T3B0aW9ucztcbiAgICBxcz86IGJvb2xlYW4gfCBRc1BsdWdpbk9wdGlvbnM7XG4gICAgc3NlPzogYm9vbGVhbiB8IFNzZVBsdWdpbk9wdGlvbnM7XG4gICAgc3RhdGljPzogYm9vbGVhbiB8IEZhc3RpZnlTdGF0aWNPcHRpb25zO1xuICAgIHNlc3Npb24/OiBib29sZWFuIHwgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnM7XG5cbiAgICBjdXN0b20/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IHZvaWQ7XG4gIH07XG5cbiAgYXV0aD86XG4gICAgfCBib29sZWFuXG4gICAgfCB7XG4gICAgICAgIHVzZXJTZXJpYWxpemVyOiBTZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgICAgdXNlckRlc2VyaWFsaXplcjogRGVzZXJpYWxpemVGdW5jdGlvbjx1bmtub3duLCB1bmtub3duPjtcbiAgICAgIH07XG5cbiAgYXBpQ29uZmlnOiBTb25hbXVGYXN0aWZ5Q29uZmlnO1xuXG4gIC8qKlxuICAgKiBTdG9yYWdlIOuTnOudvOydtOuyhCDshKTsoJUuXG4gICAqIERSSVZFX0RJU0sg7ZmY6rK967OA7IiY66GcIOyCrOyaqe2VoCDrk5zrnbzsnbTrsoTrpbwg7ISg7YOd7ZWp64uI64ukLiAo6riw67O46rCSOiBkZWZhdWx0IO2CpClcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBkcml2ZXJzIH0gZnJvbSBcInNvbmFtdS9zdG9yYWdlXCI7XG4gICAqXG4gICAqIHN0b3JhZ2U6IHtcbiAgICogICBkZWZhdWx0OiBwcm9jZXNzLmVudi5EUklWRV9ESVNLID8/IFwiZnNcIixcbiAgICogICBkcml2ZXJzOiB7XG4gICAqICAgICBmczogZHJpdmVycy5mcyh7IGxvY2F0aW9uOiBcIi4vdXBsb2Fkc1wiLCB1cmxCdWlsZGVyOiB7IC4uLiB9IH0pLFxuICAgKiAgICAgczM6IGRyaXZlcnMuczMoeyBidWNrZXQ6IFwibXktYnVja2V0XCIsIHJlZ2lvbjogXCJhcC1ub3J0aGVhc3QtMlwiLCAuLi4gfSksXG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgc3RvcmFnZT86IFN0b3JhZ2VDb25maWc7XG5cbiAgLyoqXG4gICAqIENhY2hlIOyEpOyglSAoQmVudG9DYWNoZSDquLDrsJgpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgZHJpdmVycywgc3RvcmUgfSBmcm9tIFwic29uYW11L2NhY2hlXCI7XG4gICAqXG4gICAqIGNhY2hlOiB7XG4gICAqICAgZGVmYXVsdDogJ21haW4nLFxuICAgKiAgIHN0b3Jlczoge1xuICAgKiAgICAgbWFpbjogc3RvcmUoKVxuICAgKiAgICAgICAudXNlTDFMYXllcihkcml2ZXJzLm1lbW9yeSh7IG1heFNpemU6ICcxMDBtYicgfSkpXG4gICAqICAgICAgIC51c2VMMkxheWVyKGRyaXZlcnMucmVkaXMoeyBjb25uZWN0aW9uOiByZWRpc0Nvbm5lY3Rpb24gfSkpXG4gICAqICAgICAgIC51c2VCdXMoZHJpdmVycy5yZWRpc0J1cyh7IGNvbm5lY3Rpb246IHJlZGlzQ29ubmVjdGlvbiB9KSlcbiAgICogICB9LFxuICAgKiAgIHR0bDogJzFoJyxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGNhY2hlPzogQ2FjaGVDb25maWc7XG5cbiAgbGlmZWN5Y2xlPzoge1xuICAgIG9uU3RhcnQ/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uU2h1dGRvd24/OiAoc2VydmVyOiBGYXN0aWZ5SW5zdGFuY2UpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdCwgcmVwbHk6IEZhc3RpZnlSZXBseSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVUYXNrT3B0aW9ucyA9IHtcbiAgLy8gd29ya2Vy66W8IOyCrOyaqe2VoOyngCDsl6zrtoAsIOq4sOuzuOyggeycvOuhnCBkYWVtb24g66qo65Oc7JeQ7ISc66eMIOyCrOyaqeuQqC5cbiAgZW5hYmxlV29ya2VyPzogYm9vbGVhbjtcbiAgd29ya2VyT3B0aW9ucz86IFdvcmtmbG93T3B0aW9ucztcbiAgY29udGV4dFByb3ZpZGVyOiAoXG4gICAgZGVmYXVsdENvbnRleHQ6IFBpY2s8Q29udGV4dCwgXCJyZXBseVwiIHwgXCJyZXF1ZXN0XCIgfCBcImhlYWRlcnNcIiB8IFwiY3JlYXRlU1NFXCIgfCBcIm5haXRlU3RvcmVcIj4gJlxuICAgICAgQXV0aENvbnRleHQsXG4gICkgPT4gQ29udGV4dCB8IFByb21pc2U8Q29udGV4dD47XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTU1JPcHRpb25zID0ge1xuICAvKipcbiAgICogSHlkcmF0aW9uIOyghOuetVxuICAgKiAtICdub25lJzog7ZWt7IOBIOyDiOuhnCDroIzrjZTrp4EgKGh5ZHJhdGlvbiBtaXNtYXRjaCDqsbHsoJUg7JeG7J2MLCDqtozsnqUpXG4gICAqIC0gJ2Z1bGwnOiBSZWFjdCBoeWRyYXRpb24g7Iuc64+EICjshJzrsoQgSFRNTCDsnqzsgqzsmqksIG1pc21hdGNoIOyjvOydmClcbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBoeWRyYXRpb24/OiBcIm5vbmVcIiB8IFwiZnVsbFwiO1xufTtcblxuLy8gTk9URShIYXplLCAyNTEyMDkpOiBjb25maWfsl5DripQgVCwgUHJvbWlzZTxUPiwgKCkgPT4gVCwgKCkgPT4gUHJvbWlzZTxUPuqwgCDrqqjrkZAg7JisIOyImCDsnojslrTslbwg7ZWoLlxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZyhjb25maWc6IEV4ZWN1dGFibGU8U29uYW11Q29uZmlnPik6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGlmICh0eXBlb2YgY29uZmlnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZygpKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuY29uZmlnLnRzIO2MjOydvOydhCDroZzrk5ztlanri4jri6QuXG4gKiDsnbQg7ISk7KCVIO2MjOydvOydgCDtmZjqsr3sl5Ag65Sw6528IOuLpOuluCDqsr3roZzsl5Ag7J6I7J2EIOyImCDsnojsirXri4jri6QuXG4gKiBkaXN066W8IOu5jOuTnO2VmOuKlCDtmZjqsr3snbTrnbzrqbQgZGlzdCDrsJTroZwg7JWE656Y7JeQIOyeiOydhCDqsoPsnbTqs6AoY2xpLXdyYXBwZXIudHPsl5DshJwg67mM65OcKSxcbiAqIOq3uOugh+yngCDslYrsnYAg7ZmY6rK97J20652866m0IO2UhOuhnOygne2KuCDro6jtirjsl5Ag7J6I7J2EIOqyg+yeheuLiOuLpC5cbiAqXG4gKiDsnbQg7ZWo7IiY64qUIOydmOuPhOyggeycvOuhnCDri6Trpbgg7J2Y7KG07ISx7J2YIOyCrOyaqeydhCDstZzrjIDtlZwg67Cw7KCc7ZWY7JiA7Iq164uI64ukLlxuICog7J2064qUIOyLpO2WiSDstIjquLDsl5Ag7LWc64yA7ZWcIOu5oOultOqyjCDshKTsoJXsnYQg7J297Ja07JisIOyImCDsnojrj4TroZ0g7ZWY6riwIOychO2VqOyeheuLiOuLpC5cbiAqIOuUsOudvOyEnCDqsr3roZwgY29uY2F06rO8IFVSTCBzY2hlbWUg7LaU6rCA64+EIOuLqOyInO2VnCDrrLjsnpDsl7Qg7KGw7J6R7Jy866GcIOyymOumrO2VmOyYgOyKteuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gcm9vdFBhdGhcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnKHJvb3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFNvbmFtdUNvbmZpZz4ge1xuICBjb25zdCBzdGFydCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBjb25zdCBjb25maWdQYXRoID1cbiAgICBwcm9jZXNzLmVudi5IT1QgPT09IFwieWVzXCIgfHwgcHJvY2Vzcy5lbnYuVklURVNUID09PSBcInRydWVcIlxuICAgICAgPyBgJHtyb290UGF0aH0vc3JjL3NvbmFtdS5jb25maWcudHNgXG4gICAgICA6IGAke3Jvb3RQYXRofS9kaXN0L3NvbmFtdS5jb25maWcuanNgO1xuICBjb25zdCB7IGRlZmF1bHQ6IGNvbmZpZyB9ID0gYXdhaXQgaW1wb3J0KGBmaWxlOi8vJHtjb25maWdQYXRofWApO1xuICBjb25zdCBpbXBvcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydDtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwidGVzdFwiICYmXG4gICAgY29uc29sZS5sb2coYFtUSU1JTkddIGxvYWRDb25maWcgdG9vayAke2ltcG9ydFRpbWUudG9GaXhlZCgyKX1tc2ApO1xuICByZXR1cm4gY29uZmlnO1xufVxuIl0sIm5hbWVzIjpbImRlZmluZUNvbmZpZyIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwibG9hZENvbmZpZyIsInJvb3RQYXRoIiwic3RhcnQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsImNvbmZpZ1BhdGgiLCJwcm9jZXNzIiwiZW52IiwiSE9UIiwiVklURVNUIiwiZGVmYXVsdCIsImltcG9ydFRpbWUiLCJOT0RFX0VOViIsImNvbnNvbGUiLCJsb2ciLCJ0b0ZpeGVkIl0sIm1hcHBpbmdzIjoiQUFnS0EsdUZBQXVGO0FBQ3ZGLE9BQU8sU0FBU0EsYUFBYUMsTUFBZ0M7SUFDM0QsSUFBSSxPQUFPQSxXQUFXLFlBQVk7UUFDaEMsT0FBT0MsUUFBUUMsT0FBTyxDQUFDRjtJQUN6QjtJQUVBLE9BQU9DLFFBQVFDLE9BQU8sQ0FBQ0Y7QUFDekI7QUFFQTs7Ozs7Ozs7Ozs7O0NBWUMsR0FDRCxPQUFPLGVBQWVHLFdBQVdDLFFBQWdCO0lBQy9DLE1BQU1DLFFBQVFDLFlBQVlDLEdBQUc7SUFDN0IsTUFBTUMsYUFDSkMsUUFBUUMsR0FBRyxDQUFDQyxHQUFHLEtBQUssU0FBU0YsUUFBUUMsR0FBRyxDQUFDRSxNQUFNLEtBQUssU0FDaEQsR0FBR1IsU0FBUyxxQkFBcUIsQ0FBQyxHQUNsQyxHQUFHQSxTQUFTLHNCQUFzQixDQUFDO0lBQ3pDLE1BQU0sRUFBRVMsU0FBU2IsTUFBTSxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUVRLFlBQVk7SUFDL0QsTUFBTU0sYUFBYVIsWUFBWUMsR0FBRyxLQUFLRjtJQUN2Q0ksUUFBUUMsR0FBRyxDQUFDSyxRQUFRLEtBQUssVUFDdkJDLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFSCxXQUFXSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDbkUsT0FBT2xCO0FBQ1QifQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRmFzdGlmeUNvbXByZXNzT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9jb21wcmVzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Q29yc09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvY29yc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5Rm9ybWJvZHlPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L2Zvcm1ib2R5XCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zIH0gZnJvbSBcIkBmYXN0aWZ5L211bHRpcGFydFwiO1xuaW1wb3J0IHR5cGUgeyBEZXNlcmlhbGl6ZUZ1bmN0aW9uLCBTZXJpYWxpemVGdW5jdGlvbiB9IGZyb20gXCJAZmFzdGlmeS9wYXNzcG9ydC9kaXN0L0F1dGhlbnRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIHsgU2VjdXJlU2Vzc2lvblBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvc2VjdXJlLXNlc3Npb25cIjtcbmltcG9ydCB0eXBlIHsgRmFzdGlmeVN0YXRpY09wdGlvbnMgfSBmcm9tIFwiQGZhc3RpZnkvc3RhdGljXCI7XG5pbXBvcnQgdHlwZSB7IEZhc3RpZnlJbnN0YW5jZSwgRmFzdGlmeVJlcGx5LCBGYXN0aWZ5UmVxdWVzdCwgRmFzdGlmeVNlcnZlck9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IHR5cGUgeyBRc1BsdWdpbk9wdGlvbnMgfSBmcm9tIFwiZmFzdGlmeS1xc1wiO1xuaW1wb3J0IHR5cGUgeyBTc2VQbHVnaW5PcHRpb25zIH0gZnJvbSBcImZhc3RpZnktc3NlLXYyL2xpYi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU29uYW11TG9nZ2luZ09wdGlvbnMgfSBmcm9tIFwiLi4vbG9nZ2VyL2NvbmZpZ3VyZVwiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlQ29uZmlnIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dPcHRpb25zIH0gZnJvbSBcIi4uL3Rhc2tzL3dvcmtmbG93LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgRXhlY3V0YWJsZSwgU29uYW11RmFzdGlmeUNvbmZpZyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBdXRoQ29udGV4dCwgQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgRGF0YWJhc2VDb25maWcgPSBPbWl0PEtuZXguQ29uZmlnLCBcImNvbm5lY3Rpb25cIj4gJiB7XG4gIGNvbm5lY3Rpb24/OiBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbn07XG5cbi8qKlxuICogaTE4biDshKTsoJVcbiAqL1xuZXhwb3J0IHR5cGUgU29uYW11STE4bk9wdGlvbnMgPSB7XG4gIC8qKiDquLDrs7ggbG9jYWxlICjtgqQg7KCV7J2YIOq4sOykgCArIOufsO2DgOyehCDquLDrs7jqsJIpICovXG4gIGRlZmF1bHRMb2NhbGU6IHN0cmluZztcbiAgLyoqIOyngOybkO2VmOuKlCBsb2NhbGUg66qp66GdICovXG4gIHN1cHBvcnRlZExvY2FsZXM6IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IHR5cGUgU29uYW11Q29uZmlnPFRTaW5rSWQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsIFRGaWx0ZXJJZCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIHByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIGFwaToge1xuICAgIGRpcjogc3RyaW5nO1xuICAgIHJvdXRlOiB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICB9O1xuICAgIHRpbWV6b25lPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpMThuIOyEpOyglVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGkxOG46IHtcbiAgICogICBkZWZhdWx0TG9jYWxlOiAna28nLFxuICAgKiAgIHN1cHBvcnRlZExvY2FsZXM6IFsna28nLCAnZW4nLCAnamEnXSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGkxOG4/OiBTb25hbXVJMThuT3B0aW9ucztcblxuICBzeW5jOiB7XG4gICAgdGFyZ2V0czogc3RyaW5nW107IC8vIFwid2ViXCIsIFwiYXBwXCIg65OxXG4gIH07XG5cbiAgZGF0YWJhc2U6IHtcbiAgICAvLyDrjbDsnbTthLDrsqDsnbTsiqQocGfripQgcGcg66qo65OILCBwZ25hdGl2ZeuKlCBwZy1uYXRpdmUg66qo65OI7J2YIOyEpOy5mOqwgCDtlYTsmpTtlanri4jri6QuKVxuICAgIGRhdGFiYXNlPzogXCJwZ1wiIHwgXCJwZ25hdGl2ZVwiO1xuICAgIC8vIOq4sOuzuCDrjbDsnbTthLDrsqDsnbTsiqQg7J2066aEXG4gICAgbmFtZTogc3RyaW5nO1xuICAgIC8vIOuqqOuToCDtmZjqsr3sl5Ag7KCB7Jqp65CgIOq4sOuzuCBLbmV4IOyYteyFmFxuICAgIGRlZmF1bHRPcHRpb25zOiBEYXRhYmFzZUNvbmZpZztcbiAgICAvLyDtmZjqsr3rs4Qg7ISk7KCVXG4gICAgZW52aXJvbm1lbnRzPzoge1xuICAgICAgZGV2ZWxvcG1lbnQ/OiBEYXRhYmFzZUNvbmZpZztcbiAgICAgIGRldmVsb3BtZW50X3NsYXZlPzogRGF0YWJhc2VDb25maWc7XG4gICAgICBwcm9kdWN0aW9uPzogRGF0YWJhc2VDb25maWc7XG4gICAgICBwcm9kdWN0aW9uX3NsYXZlPzogRGF0YWJhc2VDb25maWc7XG4gICAgICBmaXh0dXJlPzogRGF0YWJhc2VDb25maWc7XG4gICAgICB0ZXN0PzogRGF0YWJhc2VDb25maWc7XG4gICAgfTtcbiAgfTtcblxuICBsb2dnaW5nPzogZmFsc2UgfCBTb25hbXVMb2dnaW5nT3B0aW9uczxUU2lua0lkLCBURmlsdGVySWQ+O1xuICBzZXJ2ZXI6IFNvbmFtdVNlcnZlck9wdGlvbnM7XG4gIHRhc2tzPzogU29uYW11VGFza09wdGlvbnM7XG59O1xuXG5leHBvcnQgdHlwZSBTb25hbXVTZXJ2ZXJPcHRpb25zID0ge1xuICAvLyDtlITroZzsoJ3tirgg7Jm467aA7JeQ7IScIOygkeq3vO2VoCDsiJgg7J6I64qUIFVSTC4g6riw67O46rCS7J2AIHtzZXJ2ZXIubGlzdGVuLmhvc3R9OntzZXJ2ZXIubGlzdGVuLnBvcnR9IOyeheuLiOuLpC5cbiAgYmFzZVVybD86IHN0cmluZztcblxuICBmYXN0aWZ5PzogT21pdDxGYXN0aWZ5U2VydmVyT3B0aW9ucywgXCJsb2dnZXJcIj47XG5cbiAgbGlzdGVuPzoge1xuICAgIHBvcnQ6IG51bWJlcjtcbiAgICBob3N0Pzogc3RyaW5nO1xuICB9O1xuXG4gIHBsdWdpbnM/OiB7XG4gICAgLyoqIOydkeuLtSDslZXstpUg7ZSM65+s6re47J24IChAZmFzdGlmeS9jb21wcmVzcykgKi9cbiAgICBjb21wcmVzcz86IGJvb2xlYW4gfCBGYXN0aWZ5Q29tcHJlc3NPcHRpb25zO1xuICAgIGNvcnM/OiBib29sZWFuIHwgRmFzdGlmeUNvcnNPcHRpb25zO1xuICAgIGZvcm1ib2R5PzogYm9vbGVhbiB8IEZhc3RpZnlGb3JtYm9keU9wdGlvbnM7XG4gICAgbXVsdGlwYXJ0PzogYm9vbGVhbiB8IEZhc3RpZnlNdWx0aXBhcnRPcHRpb25zO1xuICAgIHFzPzogYm9vbGVhbiB8IFFzUGx1Z2luT3B0aW9ucztcbiAgICBzc2U/OiBib29sZWFuIHwgU3NlUGx1Z2luT3B0aW9ucztcbiAgICBzdGF0aWM/OiBib29sZWFuIHwgRmFzdGlmeVN0YXRpY09wdGlvbnM7XG4gICAgc2Vzc2lvbj86IGJvb2xlYW4gfCBTZWN1cmVTZXNzaW9uUGx1Z2luT3B0aW9ucztcblxuICAgIGN1c3RvbT86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gdm9pZDtcbiAgfTtcblxuICBhdXRoPzpcbiAgICB8IGJvb2xlYW5cbiAgICB8IHtcbiAgICAgICAgdXNlclNlcmlhbGl6ZXI6IFNlcmlhbGl6ZUZ1bmN0aW9uPHVua25vd24sIHVua25vd24+O1xuICAgICAgICB1c2VyRGVzZXJpYWxpemVyOiBEZXNlcmlhbGl6ZUZ1bmN0aW9uPHVua25vd24sIHVua25vd24+O1xuICAgICAgfTtcblxuICBhcGlDb25maWc6IFNvbmFtdUZhc3RpZnlDb25maWc7XG5cbiAgLyoqXG4gICAqIFN0b3JhZ2Ug65Oc65287J2067KEIOyEpOyglS5cbiAgICogRFJJVkVfRElTSyDtmZjqsr3rs4DsiJjroZwg7IKs7Jqp7ZWgIOuTnOudvOydtOuyhOulvCDshKDtg53tlanri4jri6QuICjquLDrs7jqsJI6IGRlZmF1bHQg7YKkKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGltcG9ydCB7IGRyaXZlcnMgfSBmcm9tIFwic29uYW11L3N0b3JhZ2VcIjtcbiAgICpcbiAgICogc3RvcmFnZToge1xuICAgKiAgIGRlZmF1bHQ6IHByb2Nlc3MuZW52LkRSSVZFX0RJU0sgPz8gXCJmc1wiLFxuICAgKiAgIGRyaXZlcnM6IHtcbiAgICogICAgIGZzOiBkcml2ZXJzLmZzKHsgbG9jYXRpb246IFwiLi91cGxvYWRzXCIsIHVybEJ1aWxkZXI6IHsgLi4uIH0gfSksXG4gICAqICAgICBzMzogZHJpdmVycy5zMyh7IGJ1Y2tldDogXCJteS1idWNrZXRcIiwgcmVnaW9uOiBcImFwLW5vcnRoZWFzdC0yXCIsIC4uLiB9KSxcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBzdG9yYWdlPzogU3RvcmFnZUNvbmZpZztcblxuICAvKipcbiAgICogQ2FjaGUg7ISk7KCVIChCZW50b0NhY2hlIOq4sOuwmClcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBkcml2ZXJzLCBzdG9yZSB9IGZyb20gXCJzb25hbXUvY2FjaGVcIjtcbiAgICpcbiAgICogY2FjaGU6IHtcbiAgICogICBkZWZhdWx0OiAnbWFpbicsXG4gICAqICAgc3RvcmVzOiB7XG4gICAqICAgICBtYWluOiBzdG9yZSgpXG4gICAqICAgICAgIC51c2VMMUxheWVyKGRyaXZlcnMubWVtb3J5KHsgbWF4U2l6ZTogJzEwMG1iJyB9KSlcbiAgICogICAgICAgLnVzZUwyTGF5ZXIoZHJpdmVycy5yZWRpcyh7IGNvbm5lY3Rpb246IHJlZGlzQ29ubmVjdGlvbiB9KSlcbiAgICogICAgICAgLnVzZUJ1cyhkcml2ZXJzLnJlZGlzQnVzKHsgY29ubmVjdGlvbjogcmVkaXNDb25uZWN0aW9uIH0pKVxuICAgKiAgIH0sXG4gICAqICAgdHRsOiAnMWgnLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY2FjaGU/OiBDYWNoZUNvbmZpZztcblxuICBsaWZlY3ljbGU/OiB7XG4gICAgb25TdGFydD86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25TaHV0ZG93bj86IChzZXJ2ZXI6IEZhc3RpZnlJbnN0YW5jZSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgb25FcnJvcj86IChlcnJvcjogRXJyb3IsIHJlcXVlc3Q6IEZhc3RpZnlSZXF1ZXN0LCByZXBseTogRmFzdGlmeVJlcGx5KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVRhc2tPcHRpb25zID0ge1xuICAvLyB3b3JrZXLrpbwg7IKs7Jqp7ZWg7KeAIOyXrOu2gCwg6riw67O47KCB7Jy866GcIGRhZW1vbiDrqqjrk5zsl5DshJzrp4wg7IKs7Jqp65CoLlxuICBlbmFibGVXb3JrZXI/OiBib29sZWFuO1xuICB3b3JrZXJPcHRpb25zPzogV29ya2Zsb3dPcHRpb25zO1xuICBjb250ZXh0UHJvdmlkZXI6IChcbiAgICBkZWZhdWx0Q29udGV4dDogUGljazxDb250ZXh0LCBcInJlcGx5XCIgfCBcInJlcXVlc3RcIiB8IFwiaGVhZGVyc1wiIHwgXCJjcmVhdGVTU0VcIiB8IFwibmFpdGVTdG9yZVwiPiAmXG4gICAgICBBdXRoQ29udGV4dCxcbiAgKSA9PiBDb250ZXh0IHwgUHJvbWlzZTxDb250ZXh0Pjtcbn07XG5cbmV4cG9ydCB0eXBlIFNvbmFtdVNTUk9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBIeWRyYXRpb24g7KCE6561XG4gICAqIC0gJ25vbmUnOiDtla3sg4Eg7IOI66GcIOugjOuNlOungSAoaHlkcmF0aW9uIG1pc21hdGNoIOqxseyglSDsl4bsnYwsIOq2jOyepSlcbiAgICogLSAnZnVsbCc6IFJlYWN0IGh5ZHJhdGlvbiDsi5zrj4QgKOyEnOuyhCBIVE1MIOyerOyCrOyaqSwgbWlzbWF0Y2gg7KO87J2YKVxuICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICovXG4gIGh5ZHJhdGlvbj86IFwibm9uZVwiIHwgXCJmdWxsXCI7XG59O1xuXG4vLyBOT1RFKEhhemUsIDI1MTIwOSk6IGNvbmZpZ+yXkOuKlCBULCBQcm9taXNlPFQ+LCAoKSA9PiBULCAoKSA9PiBQcm9taXNlPFQ+6rCAIOuqqOuRkCDsmKwg7IiYIOyeiOyWtOyVvCDtlaguXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnKGNvbmZpZzogRXhlY3V0YWJsZTxTb25hbXVDb25maWc+KTogUHJvbWlzZTxTb25hbXVDb25maWc+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY29uZmlnKCkpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maWcpO1xufVxuXG4vKipcbiAqIHNvbmFtdS5jb25maWcudHMg7YyM7J287J2EIOuhnOuTnO2VqeuLiOuLpC5cbiAqIOydtCDshKTsoJUg7YyM7J287J2AIO2ZmOqyveyXkCDrlLDrnbwg64uk66W4IOqyveuhnOyXkCDsnojsnYQg7IiYIOyeiOyKteuLiOuLpC5cbiAqIGRpc3Trpbwg67mM65Oc7ZWY64qUIO2ZmOqyveydtOudvOuptCBkaXN0IOuwlOuhnCDslYTrnpjsl5Ag7J6I7J2EIOqyg+ydtOqzoChjbGktd3JhcHBlci50c+yXkOyEnCDruYzrk5wpLFxuICog6re466CH7KeAIOyViuydgCDtmZjqsr3snbTrnbzrqbQg7ZSE66Gc7KCd7Yq4IOujqO2KuOyXkCDsnojsnYQg6rKD7J6F64uI64ukLlxuICpcbiAqIOydtCDtlajsiJjripQg7J2Y64+E7KCB7Jy866GcIOuLpOuluCDsnZjsobTshLHsnZgg7IKs7Jqp7J2EIOy1nOuMgO2VnCDrsLDsoJztlZjsmIDsirXri4jri6QuXG4gKiDsnbTripQg7Iuk7ZaJIOy0iOq4sOyXkCDstZzrjIDtlZwg67mg66W06rKMIOyEpOygleydhCDsnb3slrTsmKwg7IiYIOyeiOuPhOuhnSDtlZjquLAg7JyE7ZWo7J6F64uI64ukLlxuICog65Sw65287IScIOqyveuhnCBjb25jYXTqs7wgVVJMIHNjaGVtZSDstpTqsIDrj4Qg64uo7Iic7ZWcIOusuOyekOyXtCDsobDsnpHsnLzroZwg7LKY66as7ZWY7JiA7Iq164uI64ukLlxuICpcbiAqIEBwYXJhbSByb290UGF0aFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRDb25maWcocm9vdFBhdGg6IHN0cmluZyk6IFByb21pc2U8U29uYW11Q29uZmlnPiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPVxuICAgIHByb2Nlc3MuZW52LkhPVCA9PT0gXCJ5ZXNcIiB8fCBwcm9jZXNzLmVudi5WSVRFU1QgPT09IFwidHJ1ZVwiXG4gICAgICA/IGAke3Jvb3RQYXRofS9zcmMvc29uYW11LmNvbmZpZy50c2BcbiAgICAgIDogYCR7cm9vdFBhdGh9L2Rpc3Qvc29uYW11LmNvbmZpZy5qc2A7XG4gIGNvbnN0IHsgZGVmYXVsdDogY29uZmlnIH0gPSBhd2FpdCBpbXBvcnQoYGZpbGU6Ly8ke2NvbmZpZ1BhdGh9YCk7XG4gIGNvbnN0IGltcG9ydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0O1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJ0ZXN0XCIgJiZcbiAgICBjb25zb2xlLmxvZyhgW1RJTUlOR10gbG9hZENvbmZpZyB0b29rICR7aW1wb3J0VGltZS50b0ZpeGVkKDIpfW1zYCk7XG4gIHJldHVybiBjb25maWc7XG59XG4iXSwibmFtZXMiOlsiZGVmaW5lQ29uZmlnIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJsb2FkQ29uZmlnIiwicm9vdFBhdGgiLCJzdGFydCIsInBlcmZvcm1hbmNlIiwibm93IiwiY29uZmlnUGF0aCIsInByb2Nlc3MiLCJlbnYiLCJIT1QiLCJWSVRFU1QiLCJkZWZhdWx0IiwiaW1wb3J0VGltZSIsIk5PREVfRU5WIiwiY29uc29sZSIsImxvZyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiJBQXdMQSx1RkFBdUY7QUFDdkYsT0FBTyxTQUFTQSxhQUFhQyxNQUFnQztJQUMzRCxJQUFJLE9BQU9BLFdBQVcsWUFBWTtRQUNoQyxPQUFPQyxRQUFRQyxPQUFPLENBQUNGO0lBQ3pCO0lBRUEsT0FBT0MsUUFBUUMsT0FBTyxDQUFDRjtBQUN6QjtBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE9BQU8sZUFBZUcsV0FBV0MsUUFBZ0I7SUFDL0MsTUFBTUMsUUFBUUMsWUFBWUMsR0FBRztJQUM3QixNQUFNQyxhQUNKQyxRQUFRQyxHQUFHLENBQUNDLEdBQUcsS0FBSyxTQUFTRixRQUFRQyxHQUFHLENBQUNFLE1BQU0sS0FBSyxTQUNoRCxHQUFHUixTQUFTLHFCQUFxQixDQUFDLEdBQ2xDLEdBQUdBLFNBQVMsc0JBQXNCLENBQUM7SUFDekMsTUFBTSxFQUFFUyxTQUFTYixNQUFNLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRVEsWUFBWTtJQUMvRCxNQUFNTSxhQUFhUixZQUFZQyxHQUFHLEtBQUtGO0lBQ3ZDSSxRQUFRQyxHQUFHLENBQUNLLFFBQVEsS0FBSyxVQUN2QkMsUUFBUUMsR0FBRyxDQUFDLENBQUMseUJBQXlCLEVBQUVILFdBQVdJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuRSxPQUFPbEI7QUFDVCJ9
@@ -13,6 +13,8 @@ export type Context = {
13
13
  headers: IncomingHttpHeaders;
14
14
  createSSE: <T extends ZodObject>(events: T) => ReturnType<typeof createSSEFactory<T>>;
15
15
  naiteStore: NaiteStore;
16
+ /** 현재 요청의 locale (i18n 설정이 있을 때만 존재) */
17
+ locale?: string;
16
18
  } & AuthContext & ContextExtend;
17
19
  export type AuthContext = {
18
20
  user: PassportUser | null;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,aAAa;CAAG;AACjC,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC7F,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,UAAU,EAAE,UAAU,CAAC;CACxB,GAAG,WAAW,GACb,aAAa,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE;QACR,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,MAAM,WAAW,aAAa;CAAG;AACjC,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC7F,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,UAAU,EAAE,UAAU,CAAC;IACvB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,WAAW,GACb,aAAa,CAAC;AAEhB,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE;QACR,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,EAAE,MAAM,IAAI,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { };
2
2
 
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIFBhc3Nwb3J0VXNlciB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlR2VuZXJpY0ludGVyZmFjZSB9IGZyb20gXCJmYXN0aWZ5L3R5cGVzL3JvdXRlXCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nSHR0cEhlYWRlcnMsIEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgdHlwZSB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgTmFpdGVTdG9yZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBVcGxvYWRlZEZpbGUgfSBmcm9tIFwiLi4vc3RvcmFnZS91cGxvYWRlZC1maWxlXCI7XG5pbXBvcnQgdHlwZSB7IGNyZWF0ZVNTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlJbnRlcmZhY2U6IENvbnRleHQg7ZmV7J6lIO2DgOyehVxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0RXh0ZW5kIHt9XG5leHBvcnQgdHlwZSBDb250ZXh0ID0ge1xuICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdDtcbiAgcmVwbHk6IEZhc3RpZnlSZXBseTxTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UsIFJvdXRlR2VuZXJpY0ludGVyZmFjZSwgdW5rbm93bj47XG4gIGhlYWRlcnM6IEluY29taW5nSHR0cEhlYWRlcnM7XG4gIGNyZWF0ZVNTRTogPFQgZXh0ZW5kcyBab2RPYmplY3Q+KGV2ZW50czogVCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU1NFRmFjdG9yeTxUPj47XG4gIG5haXRlU3RvcmU6IE5haXRlU3RvcmU7XG59ICYgQXV0aENvbnRleHQgJlxuICBDb250ZXh0RXh0ZW5kO1xuXG5leHBvcnQgdHlwZSBBdXRoQ29udGV4dCA9IHtcbiAgdXNlcjogUGFzc3BvcnRVc2VyIHwgbnVsbDtcbiAgcGFzc3BvcnQ6IHtcbiAgICBsb2dpbjogKHVzZXI6IFBhc3Nwb3J0VXNlcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBsb2dvdXQ6ICgpID0+IHZvaWQ7XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBVcGxvYWRDb250ZXh0ID0ge1xuICBmaWxlPzogVXBsb2FkZWRGaWxlO1xuICBmaWxlczogVXBsb2FkZWRGaWxlW107XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJCQSxXQUdFIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvY29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXBseSwgRmFzdGlmeVJlcXVlc3QsIFBhc3Nwb3J0VXNlciB9IGZyb20gXCJmYXN0aWZ5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlR2VuZXJpY0ludGVyZmFjZSB9IGZyb20gXCJmYXN0aWZ5L3R5cGVzL3JvdXRlXCI7XG5pbXBvcnQgdHlwZSB7IEluY29taW5nSHR0cEhlYWRlcnMsIEluY29taW5nTWVzc2FnZSwgU2VydmVyLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJodHRwXCI7XG5pbXBvcnQgdHlwZSB7IFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgTmFpdGVTdG9yZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHR5cGUgeyBVcGxvYWRlZEZpbGUgfSBmcm9tIFwiLi4vc3RvcmFnZS91cGxvYWRlZC1maWxlXCI7XG5pbXBvcnQgdHlwZSB7IGNyZWF0ZVNTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRW1wdHlJbnRlcmZhY2U6IENvbnRleHQg7ZmV7J6lIO2DgOyehVxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0RXh0ZW5kIHt9XG5leHBvcnQgdHlwZSBDb250ZXh0ID0ge1xuICByZXF1ZXN0OiBGYXN0aWZ5UmVxdWVzdDtcbiAgcmVwbHk6IEZhc3RpZnlSZXBseTxTZXJ2ZXIsIEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UsIFJvdXRlR2VuZXJpY0ludGVyZmFjZSwgdW5rbm93bj47XG4gIGhlYWRlcnM6IEluY29taW5nSHR0cEhlYWRlcnM7XG4gIGNyZWF0ZVNTRTogPFQgZXh0ZW5kcyBab2RPYmplY3Q+KGV2ZW50czogVCkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU1NFRmFjdG9yeTxUPj47XG4gIG5haXRlU3RvcmU6IE5haXRlU3RvcmU7XG4gIC8qKiDtmITsnqwg7JqU7LKt7J2YIGxvY2FsZSAoaTE4biDshKTsoJXsnbQg7J6I7J2EIOuVjOunjCDsobTsnqwpICovXG4gIGxvY2FsZT86IHN0cmluZztcbn0gJiBBdXRoQ29udGV4dCAmXG4gIENvbnRleHRFeHRlbmQ7XG5cbmV4cG9ydCB0eXBlIEF1dGhDb250ZXh0ID0ge1xuICB1c2VyOiBQYXNzcG9ydFVzZXIgfCBudWxsO1xuICBwYXNzcG9ydDoge1xuICAgIGxvZ2luOiAodXNlcjogUGFzc3BvcnRVc2VyKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvZ291dDogKCkgPT4gdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFVwbG9hZENvbnRleHQgPSB7XG4gIGZpbGU/OiBVcGxvYWRlZEZpbGU7XG4gIGZpbGVzOiBVcGxvYWRlZEZpbGVbXTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNkJBLFdBR0UifQ==
@@ -10,7 +10,7 @@ export interface GuardKeys {
10
10
  user: true;
11
11
  }
12
12
  export type GuardKey = keyof GuardKeys;
13
- export type ServiceClient = "axios" | "axios-multipart" | "tanstack-query" | "tanstack-mutation" | "window-fetch";
13
+ export type ServiceClient = "axios" | "axios-multipart" | "tanstack-query" | "tanstack-mutation" | "tanstack-mutation-multipart" | "window-fetch";
14
14
  export type ApiDecoratorOptions = {
15
15
  httpMethod?: HTTPMethods;
16
16
  contentType?: "text/plain" | "text/html" | "text/xml" | "application/json" | "application/octet-stream";
@@ -67,7 +67,7 @@ export declare function api(options?: ApiDecoratorOptions): (target: DecoratorTa
67
67
  export declare function stream(options: StreamDecoratorOptions): (target: DecoratorTarget, propertyKey: string, descriptor: PropertyDescriptor) => void;
68
68
  export declare function transactional(options?: TransactionalOptions): (target: DecoratorTarget, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
69
69
  /**
70
- * api 데코레이터와 함께 사용할 수 있습니다.
70
+ * 파일 업로드 API를 생성해줍니다. (@api 데코레이터 없이 독립적으로 사용)
71
71
  * @param options
72
72
  * @returns
73
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/api/decorators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK7D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;CACZ;AACD,MAAM,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC;AACvC,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,6BAA6B,GAC7B,cAAc,CAAC;AACnB,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,CAAC,EACR,YAAY,GACZ,WAAW,GACX,UAAU,GACV,kBAAkB,GAClB,0BAA0B,CAAC;IAC/B,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,KAAK,CAAC;IAEZ,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC9B,CAAC;AACF,eAAO,MAAM,cAAc,EAAE;IAC3B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACxC,EAAO,CAAC;AACT,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,mBAAmB,CAAC;IAC7B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,cAAc,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;IACzC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;CAC1B,CAAC;AACF,KAAK,eAAe,GAAG;IAAE,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAkBzD,wBAAgB,GAAG,CAAC,OAAO,GAAE,mBAAwB,IAQ3C,QAAQ,eAAe,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,UAoErF;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,sBAAsB,IAC5C,QAAQ,eAAe,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,UA8ErF;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,IAGtD,QAAQ,eAAe,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBAyDrF;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,sBAA2B,IACjD,QAAQ,eAAe,EAAE,aAAa,MAAM,EAAE,YAAY,kBAAkB,wBAsFrF"}
@@ -186,7 +186,7 @@ export function transactional(options = {}) {
186
186
  };
187
187
  }
188
188
  /**
189
- * api 데코레이터와 함께 사용할 수 있습니다.
189
+ * 파일 업로드 API를 생성해줍니다. (@api 데코레이터 없이 독립적으로 사용)
190
190
  * @param options
191
191
  * @returns
192
192
  */ export function upload(options = {}) {
@@ -195,20 +195,25 @@ export function transactional(options = {}) {
195
195
  const modelName = target.constructor.name.match(/(.+)Class$/)?.[1];
196
196
  assert(modelName, `modelName is required on @upload decorator on ${target.constructor.name}.${propertyKey}`);
197
197
  const methodName = propertyKey;
198
+ const defaultPath = `/${inflection.camelize(modelName.replace(/Model$/, "").replace(/Frame$/, ""), true)}/${inflection.camelize(methodName, true)}`;
198
199
  // registeredApis에서 해당 API 찾아서 uploadOptions 추가
199
200
  const existingApi = registeredApis.find((api)=>api.modelName === modelName && api.methodName === methodName);
200
201
  if (existingApi) {
202
+ // 재등록 시 업로드 옵션만 갱신
201
203
  existingApi.uploadOptions = options;
202
204
  } else {
203
- // 메소드에 붙은 @api 데코레이터가 아직 eval되지 않은 상황입니다. (만약 @api가 안 붙어 있었다면 심각한 상황입니다..!)
204
- // 여기에서 최초로 modelName과 methodName에 대해 registeredApis에 하나를 추가해주어야 합니다.
205
- // uploadOptions는 그대로 추가하고, path는 빈 스트링으로 추가해줍니다.
206
- // 이후 @api 데코레이터가 eval되면 실제 path로 덮어씌워지고, options가 추가됩니다.
205
+ // 새로 등록
207
206
  registeredApis.push({
208
207
  modelName,
209
208
  methodName,
210
- path: "",
211
- options: {},
209
+ path: defaultPath,
210
+ options: {
211
+ httpMethod: "POST",
212
+ clients: [
213
+ "axios-multipart",
214
+ "tanstack-mutation-multipart"
215
+ ]
216
+ },
212
217
  uploadOptions: options
213
218
  });
214
219
  }
@@ -291,4 +296,4 @@ newOptions) {
291
296
  });
292
297
  }
293
298
 
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgdHlwZSB7IEhUVFBNZXRob2RzIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVDb250cm9sQ29uZmlnIH0gZnJvbSBcIi4uL2NhY2hlLWNvbnRyb2wvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHJlc3NDb25maWcgfSBmcm9tIFwiLi4vY29tcHJlc3MvdHlwZXNcIjtcbmltcG9ydCB7IEJhc2VNb2RlbENsYXNzIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQge1xuICBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyLFxuICB0eXBlIFB1cmlXcmFwcGVyLFxuICB0eXBlIFRyYW5zYWN0aW9uYWxPcHRpb25zLFxufSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwiLi9iYXNlLWZyYW1lXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi9zb25hbXVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPVxuICB8IFwiYXhpb3NcIlxuICB8IFwiYXhpb3MtbXVsdGlwYXJ0XCJcbiAgfCBcInRhbnN0YWNrLXF1ZXJ5XCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uXCJcbiAgfCBcIndpbmRvdy1mZXRjaFwiO1xuZXhwb3J0IHR5cGUgQXBpRGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgaHR0cE1ldGhvZD86IEhUVFBNZXRob2RzO1xuICBjb250ZW50VHlwZT86XG4gICAgfCBcInRleHQvcGxhaW5cIlxuICAgIHwgXCJ0ZXh0L2h0bWxcIlxuICAgIHwgXCJ0ZXh0L3htbFwiXG4gICAgfCBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgIHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjtcbiAgY2xpZW50cz86IFNlcnZpY2VDbGllbnRbXTtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqIEFQSSDsnZHri7XsnZggQ2FjaGUtQ29udHJvbCDtl6TrjZQg7ISk7KCVLiDshKTsoJXtlZjsp4Ag7JWK7Jy866m0IGNhY2hlQ29udHJvbEhhbmRsZXIg65iQ64qUIOq4sOuzuOqwkuydtCDsoIHsmqnrkKnri4jri6QuICovXG4gIGNhY2hlQ29udHJvbD86IENhY2hlQ29udHJvbENvbmZpZztcbiAgLyoqIEFQSSDsnZHri7XsnZgg7JWV7LaVIOyEpOyglS4gZmFsc2XroZwg7ISk7KCV7ZWY66m0IOyVley2leydhCDruYTtmZzshLHtmZTtlanri4jri6QuICovXG4gIGNvbXByZXNzPzogQ29tcHJlc3NDb25maWc7XG59O1xuZXhwb3J0IHR5cGUgU3RyZWFtRGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgdHlwZTogXCJzc2VcIjsgLy8gfCAnd3NcbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiDsnbTrsqTtirgg7YKk67OE66GcIOuEmOqyqOyjvOuKlCDqsJLsnbTrr4DroZwg7Ja065akIO2DgOyeheydtOuToCDsg4HqtIDsl4bsnYxcbiAgZXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7XG4gIG1vZGU/OiBcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwiO1xufTtcbmV4cG9ydCBjb25zdCByZWdpc3RlcmVkQXBpczoge1xuICAvKipcbiAgICogbW9kZWxOYW1l7J2AIOuqqOuNuCDtgbTrnpjsiqQg7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlck1vZGVsXCIpXG4gICAqL1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbn1bXSA9IFtdO1xuZXhwb3J0IHR5cGUgRXh0ZW5kZWRBcGkgPSB7XG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgc3RyZWFtT3B0aW9ucz86IFN0cmVhbURlY29yYXRvck9wdGlvbnM7XG4gIHVwbG9hZE9wdGlvbnM/OiBVcGxvYWREZWNvcmF0b3JPcHRpb25zO1xuICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICBwYXJhbWV0ZXJzOiBBcGlQYXJhbVtdO1xuICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG59O1xudHlwZSBEZWNvcmF0b3JUYXJnZXQgPSB7IGNvbnN0cnVjdG9yOiB7IG5hbWU6IHN0cmluZyB9IH07XG5cbmNvbnN0IERFQ09SQVRPUl9UWVBFUyA9IHtcbiAgQVBJOiBTeW1ib2woXCJhcGlcIiksXG4gIFNUUkVBTTogU3ltYm9sKFwic3RyZWFtXCIpLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlY29yYXRvclR5cGU6IHN5bWJvbCkge1xuICBjb25zdCBtZXRob2QgPSB0YXJnZXRbcHJvcGVydHlLZXkgYXMga2V5b2YgdHlwZW9mIHRhcmdldF0gYXMgeyBfX2RlY29yYXRvclR5cGU/OiBzeW1ib2wgfTtcbiAgaWYgKG1ldGhvZD8uX19kZWNvcmF0b3JUeXBlICYmIG1ldGhvZD8uX19kZWNvcmF0b3JUeXBlICE9PSBkZWNvcmF0b3JUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke1N0cmluZyhkZWNvcmF0b3JUeXBlKX0gZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fS4gWW91IGNhbiB1c2Ugb25seSBvbmUgb2YgQGFwaSBvciBAc3RyZWFtIGRlY29yYXRvciBvbiB0aGUgc2FtZSBtZXRob2QuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG1ldGhvZC5fX2RlY29yYXRvclR5cGUgPSBkZWNvcmF0b3JUeXBlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcGkob3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIG9wdGlvbnMgPSB7XG4gICAgaHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgY2xpZW50czogW1wiYXhpb3NcIl0sXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0YXJnZXQuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvKC4rKUNsYXNzJC8pPy5bMV07XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAYXBpIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyDrqZTshJzrk5zsl5Ag6rG466awIOuNsOy9lOugiOydtO2EsCDspJHrs7Ug7LK07YGsXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLkFQSSk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcGVydHlLZXksIHRydWUpfWA7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCA/PyBkZWZhdWx0UGF0aDtcblxuICAgIC8vIOq4sOyhtCDrj5nsnbztlZwg66mU7ISc65Oc6rCAIOyeiOuKlOyngCDtmZXsnbgg7ZuEIOyeiOuKlCDqsr3smrAgb3ZlcnJpZGVcbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIC8vIOq4sOyhtOydmCBwYXRo7JmAIOyDiOuhnOyatCBwYXRo6rCAIOuLpOultOuLpOuptCg967mIIOyKpO2KuOungeydtCDslYTri4jsl4jripTrjbAg64uk66W4IOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ1BhdGgoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5wYXRoLCBwYXRoKTtcbiAgICAgIGV4aXN0aW5nQXBpLnBhdGggPSBwYXRoO1xuXG4gICAgICAvLyDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFwiYXBpXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLCAvLyDquLDsobTsnZgg7Ji17IWY7J2EIOyhtOykke2VmOuQmFxuICAgICAgICAuLi5vcHRpb25zLCAvLyBAYXBpIOuNsOy9lOugiOydtO2EsOydmCDsmLXshZjsnYQg7LaU6rCA7ZWp64uI64ukLlxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlTW9kZWxDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5tb2RlbE5hbWUsIFwibW9kZWxcIikpLmRlYnVnKFxuICAgICAgICAgIFwiYXBpOiB7aHR0cE1ldGhvZH0ge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IG9wdGlvbnMuaHR0cE1ldGhvZCxcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwiYXBpOiB7aHR0cE1ldGhvZH0ge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGh0dHBNZXRob2Q6IG9wdGlvbnMuaHR0cE1ldGhvZCxcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW0ob3B0aW9uczogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucykge1xuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0YXJnZXQuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvKC4rKUNsYXNzJC8pPy5bMV07XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAc3RyZWFtIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyDrqZTshJzrk5zsl5Ag6rG466awIOuNsOy9lOugiOydtO2EsCDspJHrs7Ug7LK07YGsXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLlNUUkVBTSk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcGVydHlLZXksIHRydWUpfWA7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCA/PyBkZWZhdWx0UGF0aDtcbiAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIgYXMgSFRUUE1ldGhvZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcInN0cmVhbVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwic3RyZWFtXCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLCAvLyDquLDsobTsnZgg7Ji17IWY7J2EIOyhtOykke2VmOuQmFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLCAvLyBAc3RyZWFtIOuNsOy9lOugiOydtO2EsOydmCDsmLXshZjsnYQg7LaU6rCA7ZWp64uI64ukLlxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkuc3RyZWFtT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHN0cmVhbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInN0cmVhbToge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJ0cmFuc2FjdGlvbmFsOiB7bW9kZWx9LnttZXRob2R9XCIsIHtcbiAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9IERCLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuXG4gICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirgg7JeG6rGw64KYIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOyXhuycvOuptCDsg4jroZwg7Iuc7J6RXG4gICAgICBjb25zdCBzdGFydFRyYW5zYWN0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwdXJpID0gdGhpcy5nZXRQdXJpKGRiUHJlc2V0KSBhcyBQdXJpV3JhcHBlcjtcblxuICAgICAgICByZXR1cm4gcHVyaS5rbmV4LnRyYW5zYWN0aW9uKFxuICAgICAgICAgIGFzeW5jICh0cngpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibmV3IHRyYW5zYWN0aW9uIGNvbnRleHQ6IHtkYlByZXNldH1cIiwgeyBkYlByZXNldCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRyeFdyYXBwZXIgPSBuZXcgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcih0cngsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgICAgICAgICAgLy8gVHJhbnNhY3Rpb25Db250ZXh07JeQIO2KuOuenOyereyFmCDsoIDsnqVcbiAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLnNldFRyYW5zYWN0aW9uKGRiUHJlc2V0LCB0cnhXcmFwcGVyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgLy8g7Yq4656c7J6t7IWYIOygnOqxsFxuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcImRlbGV0ZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmRlbGV0ZVRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuOqwgCDsl4bsnLzrqbQg7IOI66GcIOyDneyEsVxuICAgICAgaWYgKCFleGlzdGluZ0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvbihzdGFydFRyYW5zYWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8g7J2066+4IEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuCDslYjsl5Ag7J6I64qU7KeAIO2ZleyduCDtm4Qg7ZW064u5IHByZXNldOydmCDtirjrnpzsnq3shZjsnbQg7J2066+4IOyeiOycvOuptCDsnqzsgqzsmqlcbiAgICAgIGlmIChleGlzdGluZ0NvbnRleHQ/LmdldFRyYW5zYWN0aW9uKGRiUHJlc2V0KSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInJldXNlIHRyYW5zYWN0aW9uIGNvbnRleHQ6IHtkYlByZXNldH1cIiwgeyBkYlByZXNldCB9KTtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyDsu6jthY3siqTtirjripQg7J6I7KeA66eMIOydtCBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J2AIOyXhuuKlCDqsr3smrAgKOqwmeydgCDsu6jthY3siqTtirgg64K07JeQ7IScIOyLpO2WiSlcbiAgICAgIHJldHVybiBzdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIGFwaSDrjbDsvZTroIjsnbTthLDsmYAg7ZWo6ruYIOyCrOyaqe2VoCDsiJgg7J6I7Iq164uI64ukLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWQob3B0aW9uczogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0YXJnZXQuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvKC4rKUNsYXNzJC8pPy5bMV07XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAdXBsb2FkIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyByZWdpc3RlcmVkQXBpc+yXkOyEnCDtlbTri7kgQVBJIOywvuyVhOyEnCB1cGxvYWRPcHRpb25zIOy2lOqwgFxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgZXhpc3RpbmdBcGkudXBsb2FkT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIOydtCDrqZTshozrk5zsl5Ag67aZ7J2AIEBhcGkg642w7L2U66CI7J207YSw6rCAIOyVhOyngSBldmFs65CY7KeAIOyViuydgCDsg4HtmansnoXri4jri6QuICjrp4zslb0gQGFwaeqwgCDslYgg67aZ7Ja0IOyeiOyXiOuLpOuptCDsi6zqsIHtlZwg7IOB7Zmp7J6F64uI64ukLi4hKVxuICAgICAgLy8g7Jes6riw7JeQ7IScIOy1nOy0iOuhnCBtb2RlbE5hbWXqs7wgbWV0aG9kTmFtZeyXkCDrjIDtlbQgcmVnaXN0ZXJlZEFwaXPsl5Ag7ZWY64KY66W8IOy2lOqwgO2VtOyjvOyWtOyVvCDtlanri4jri6QuXG4gICAgICAvLyB1cGxvYWRPcHRpb25z64qUIOq3uOuMgOuhnCDstpTqsIDtlZjqs6AsIHBhdGjripQg67mIIOyKpO2KuOungeycvOuhnCDstpTqsIDtlbTspI3ri4jri6QuXG4gICAgICAvLyDsnbTtm4QgQGFwaSDrjbDsvZTroIjsnbTthLDqsIAgZXZhbOuQmOuptCDsi6TsoJwgcGF0aOuhnCDrja7slrTslIzsm4zsp4Dqs6AsIG9wdGlvbnPqsIAg7LaU6rCA65Cp64uI64ukLlxuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aDogXCJcIixcbiAgICAgICAgb3B0aW9uczoge30sXG4gICAgICAgIHVwbG9hZE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlTW9kZWxDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5tb2RlbE5hbWUsIFwibW9kZWxcIikpLmRlYnVnKFxuICAgICAgICAgIFwidXBsb2FkOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJ1cGxvYWQ6IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICAgIGNvbnN0IHVwbG9hZENvbnRleHQ6IFVwbG9hZENvbnRleHQgPSB7XG4gICAgICAgIGZpbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZmlsZXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBVcGxvYWRlZEZpbGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3N0b3JhZ2UvdXBsb2FkZWQtZmlsZVwiKTtcbiAgICAgIGlmIChvcHRpb25zLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICBjb25zdCByYXdGaWxlc0l0ZXJhdG9yID0gcmVxdWVzdC5maWxlcygpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJhd0ZpbGUgb2YgcmF3RmlsZXNJdGVyYXRvcikge1xuICAgICAgICAgIGlmIChyYXdGaWxlKSB7XG4gICAgICAgICAgICBhd2FpdCByYXdGaWxlLnRvQnVmZmVyKCk7XG4gICAgICAgICAgICB1cGxvYWRDb250ZXh0LmZpbGVzLnB1c2gobmV3IFVwbG9hZGVkRmlsZShyYXdGaWxlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYXdGaWxlID0gYXdhaXQgcmVxdWVzdC5maWxlKCk7XG4gICAgICAgIGlmIChyYXdGaWxlKSB7XG4gICAgICAgICAgdXBsb2FkQ29udGV4dC5maWxlID0gbmV3IFVwbG9hZGVkRmlsZShyYXdGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gU29uYW11LnVwbG9hZFN0b3JhZ2UucnVuKHsgdXBsb2FkQ29udGV4dCB9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDzsnbTrn7Qg65WMIOyVhOuLiOuptCBhbnkg7Ja47KCcIOyUgeuLiOq5jD5cbiAgbmV3T3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICBPYmplY3Qua2V5cyhuZXdPcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoZXhpc3RpbmdPcHRpb25zW2tleV0gJiYgIWlzRXF1YWwoZXhpc3RpbmdPcHRpb25zW2tleV0sIG5ld09wdGlvbnNba2V5XSkpIHtcbiAgICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkub3B0aW9uc+qwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g6rCA66C5IEBhcGkoeyByZXNvdXJjZU5hbWU6IFwiVXNlcnNcIiB9KSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7Ja07J6I64qUIOuplOyEnOuTnOyXkFxuICAgICAgLy8gQHN0cmVhbSh7IHJlc291cmNlTmFtZTogXCJQb3N0c1wiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDsnbTroIfqsowg65CY66m0IOuRkCDrjbDsvZTroIjsnbTthLDqsIAg6rCZ7J2AIGFwaeydmCBvcHRpb25zIOyGjSDqsJnsnYAg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBAJHtkZWNvcmF0b3JOYW1lfSBkZWNvcmF0b3Igb24gJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX0gaGFzIGNvbmZsaWN0aW5nIG9wdGlvbnM6ICR7a2V5fS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbigke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nT3B0aW9uc1trZXldKX0pIHdpdGggdGhlIG5ldyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShuZXdPcHRpb25zW2tleV0pfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJhc3NlcnQiLCJpbmZsZWN0aW9uIiwiaXNFcXVhbCIsIkJhc2VNb2RlbENsYXNzIiwiREIiLCJQdXJpVHJhbnNhY3Rpb25XcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsImNvbnZlcnREb21haW5Ub0NhdGVnb3J5IiwiQmFzZUZyYW1lQ2xhc3MiLCJTb25hbXUiLCJyZWdpc3RlcmVkQXBpcyIsIkRFQ09SQVRPUl9UWVBFUyIsIkFQSSIsIlN5bWJvbCIsIlNUUkVBTSIsImNoZWNrU2luZ2xlRGVjb3JhdG9yIiwidGFyZ2V0IiwicHJvcGVydHlLZXkiLCJkZWNvcmF0b3JUeXBlIiwibWV0aG9kIiwiX19kZWNvcmF0b3JUeXBlIiwiRXJyb3IiLCJTdHJpbmciLCJuYW1lIiwiYXBpIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJjb250ZW50VHlwZSIsImNsaWVudHMiLCJkZXNjcmlwdG9yIiwibW9kZWxOYW1lIiwibWF0Y2giLCJtZXRob2ROYW1lIiwiZGVmYXVsdFBhdGgiLCJjYW1lbGl6ZSIsInJlcGxhY2UiLCJwYXRoIiwiZXhpc3RpbmdBcGkiLCJmaW5kIiwiYXNzZXJ0Tm9Db25mbGljdGluZ1BhdGgiLCJhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyIsInB1c2giLCJvcmlnaW5hbE1ldGhvZCIsInZhbHVlIiwiYXJncyIsImRlYnVnIiwibW9kZWwiLCJmcmFtZU5hbWUiLCJhcHBseSIsInN0cmVhbSIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzdHJlYW1PcHRpb25zIiwidHJhbnNhY3Rpb25hbCIsImlzb2xhdGlvbiIsInJlYWRPbmx5IiwiZGJQcmVzZXQiLCJsb2dnZXIiLCJleGlzdGluZ0NvbnRleHQiLCJ0cmFuc2FjdGlvblN0b3JhZ2UiLCJnZXRTdG9yZSIsInN0YXJ0VHJhbnNhY3Rpb24iLCJwdXJpIiwiZ2V0UHVyaSIsImtuZXgiLCJ0cmFuc2FjdGlvbiIsInRyeCIsInRyeFdyYXBwZXIiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJzZXRUcmFuc2FjdGlvbiIsImRlbGV0ZVRyYW5zYWN0aW9uIiwiaXNvbGF0aW9uTGV2ZWwiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJnZXRUcmFuc2FjdGlvbiIsInVwbG9hZCIsInVwbG9hZE9wdGlvbnMiLCJyZXF1ZXN0IiwiZ2V0Q29udGV4dCIsInVwbG9hZENvbnRleHQiLCJmaWxlIiwidW5kZWZpbmVkIiwiZmlsZXMiLCJVcGxvYWRlZEZpbGUiLCJtb2RlIiwicmF3RmlsZXNJdGVyYXRvciIsInJhd0ZpbGUiLCJ0b0J1ZmZlciIsInVwbG9hZFN0b3JhZ2UiLCJydW4iLCJkZWNvcmF0b3JOYW1lIiwiZXhpc3RpbmdQYXRoIiwibmV3UGF0aCIsImV4aXN0aW5nT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIkpTT04iLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFNBQVMsUUFBUSxtQkFBbUI7QUFDN0MsT0FBT0MsWUFBWSxTQUFTO0FBRTVCLE9BQU9DLGdCQUFnQixhQUFhO0FBQ3BDLFNBQVNDLE9BQU8sUUFBUSxVQUFVO0FBSWxDLFNBQVNDLGNBQWMsUUFBUSw0QkFBeUI7QUFDeEQsU0FBU0MsRUFBRSxRQUFRLG9CQUFpQjtBQUNwQyxTQUNFQyxzQkFBc0IsUUFHakIsOEJBQTJCO0FBQ2xDLFNBQVNDLGFBQWEsUUFBUSxnQ0FBNkI7QUFDM0QsU0FBU0MsdUJBQXVCLFFBQVEsd0JBQXFCO0FBRTdELFNBQVNDLGNBQWMsUUFBUSxrQkFBZTtBQUU5QyxTQUFTQyxNQUFNLFFBQVEsY0FBVztBQTZDbEMsT0FBTyxNQUFNQyxpQkFVUCxFQUFFLENBQUM7QUFjVCxNQUFNQyxrQkFBa0I7SUFDdEJDLEtBQUtDLE9BQU87SUFDWkMsUUFBUUQsT0FBTztBQUNqQjtBQUVBLFNBQVNFLHFCQUFxQkMsTUFBdUIsRUFBRUMsV0FBbUIsRUFBRUMsYUFBcUI7SUFDL0YsTUFBTUMsU0FBU0gsTUFBTSxDQUFDQyxZQUFtQztJQUN6RCxJQUFJRSxRQUFRQyxtQkFBbUJELFFBQVFDLG9CQUFvQkYsZUFBZTtRQUN4RSxNQUFNLElBQUlHLE1BQ1IsQ0FBQyxDQUFDLEVBQUVDLE9BQU9KLGVBQWUsb0NBQW9DLEVBQUVGLE9BQU8sV0FBVyxDQUFDTyxJQUFJLENBQUMsQ0FBQyxFQUFFTixZQUFZLHVFQUF1RSxDQUFDO0lBRW5MLE9BQU87UUFDTEUsT0FBT0MsZUFBZSxHQUFHRjtJQUMzQjtBQUNGO0FBRUEsT0FBTyxTQUFTTSxJQUFJQyxVQUErQixDQUFDLENBQUM7SUFDbkRBLFVBQVU7UUFDUkMsWUFBWTtRQUNaQyxhQUFhO1FBQ2JDLFNBQVM7WUFBQztTQUFRO1FBQ2xCLEdBQUdILE9BQU87SUFDWjtJQUVBLE9BQU8sQ0FBQ1QsUUFB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
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVjb3JhdG9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgdHlwZSB7IEhUVFBNZXRob2RzIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVDb250cm9sQ29uZmlnIH0gZnJvbSBcIi4uL2NhY2hlLWNvbnRyb2wvdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQ29tcHJlc3NDb25maWcgfSBmcm9tIFwiLi4vY29tcHJlc3MvdHlwZXNcIjtcbmltcG9ydCB7IEJhc2VNb2RlbENsYXNzIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2Jhc2UtbW9kZWxcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQge1xuICBQdXJpVHJhbnNhY3Rpb25XcmFwcGVyLFxuICB0eXBlIFB1cmlXcmFwcGVyLFxuICB0eXBlIFRyYW5zYWN0aW9uYWxPcHRpb25zLFxufSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyBVcHNlcnRCdWlsZGVyIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3Vwc2VydC1idWlsZGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSB9IGZyb20gXCIuLi9sb2dnZXIvY2F0ZWdvcnlcIjtcbmltcG9ydCB0eXBlIHsgQXBpUGFyYW0sIEFwaVBhcmFtVHlwZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgQmFzZUZyYW1lQ2xhc3MgfSBmcm9tIFwiLi9iYXNlLWZyYW1lXCI7XG5pbXBvcnQgdHlwZSB7IFVwbG9hZENvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi9zb25hbXVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPVxuICB8IFwiYXhpb3NcIlxuICB8IFwiYXhpb3MtbXVsdGlwYXJ0XCJcbiAgfCBcInRhbnN0YWNrLXF1ZXJ5XCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uXCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXG4gIHwgXCJ3aW5kb3ctZmV0Y2hcIjtcbmV4cG9ydCB0eXBlIEFwaURlY29yYXRvck9wdGlvbnMgPSB7XG4gIGh0dHBNZXRob2Q/OiBIVFRQTWV0aG9kcztcbiAgY29udGVudFR5cGU/OlxuICAgIHwgXCJ0ZXh0L3BsYWluXCJcbiAgICB8IFwidGV4dC9odG1sXCJcbiAgICB8IFwidGV4dC94bWxcIlxuICAgIHwgXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICB8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG4gIGNsaWVudHM/OiBTZXJ2aWNlQ2xpZW50W107XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHJlc291cmNlTmFtZT86IHN0cmluZztcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBBUEkg7J2R64u17J2YIENhY2hlLUNvbnRyb2wg7Zek642UIOyEpOyglS4g7ISk7KCV7ZWY7KeAIOyViuycvOuptCBjYWNoZUNvbnRyb2xIYW5kbGVyIOuYkOuKlCDquLDrs7jqsJLsnbQg7KCB7Jqp65Cp64uI64ukLiAqL1xuICBjYWNoZUNvbnRyb2w/OiBDYWNoZUNvbnRyb2xDb25maWc7XG4gIC8qKiBBUEkg7J2R64u17J2YIOyVley2lSDshKTsoJUuIGZhbHNl66GcIOyEpOygle2VmOuptCDslZXstpXsnYQg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLiAqL1xuICBjb21wcmVzcz86IENvbXByZXNzQ29uZmlnO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7IC8vIHwgJ3dzXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTog7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgcGF0aD86IHN0cmluZztcbiAgcmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBtb2RlPzogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIjtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJlZEFwaXM6IHtcbiAgLyoqXG4gICAqIG1vZGVsTmFtZeydgCDrqqjrjbgg7YG0656Y7IqkIOydtOumhOyeheuLiOuLpC4gKGV4LiBcIlVzZXJNb2RlbFwiKVxuICAgKi9cbiAgbW9kZWxOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zO1xuICBzdHJlYW1PcHRpb25zPzogU3RyZWFtRGVjb3JhdG9yT3B0aW9ucztcbiAgdXBsb2FkT3B0aW9ucz86IFVwbG9hZERlY29yYXRvck9wdGlvbnM7XG59W10gPSBbXTtcbmV4cG9ydCB0eXBlIEV4dGVuZGVkQXBpID0ge1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbiAgdHlwZVBhcmFtZXRlcnM6IEFwaVBhcmFtVHlwZS5UeXBlUGFyYW1bXTtcbiAgcGFyYW1ldGVyczogQXBpUGFyYW1bXTtcbiAgcmV0dXJuVHlwZTogQXBpUGFyYW1UeXBlO1xufTtcbnR5cGUgRGVjb3JhdG9yVGFyZ2V0ID0geyBjb25zdHJ1Y3RvcjogeyBuYW1lOiBzdHJpbmcgfSB9O1xuXG5jb25zdCBERUNPUkFUT1JfVFlQRVMgPSB7XG4gIEFQSTogU3ltYm9sKFwiYXBpXCIpLFxuICBTVFJFQU06IFN5bWJvbChcInN0cmVhbVwiKSxcbn0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZWNvcmF0b3JUeXBlOiBzeW1ib2wpIHtcbiAgY29uc3QgbWV0aG9kID0gdGFyZ2V0W3Byb3BlcnR5S2V5IGFzIGtleW9mIHR5cGVvZiB0YXJnZXRdIGFzIHsgX19kZWNvcmF0b3JUeXBlPzogc3ltYm9sIH07XG4gIGlmIChtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAmJiBtZXRob2Q/Ll9fZGVjb3JhdG9yVHlwZSAhPT0gZGVjb3JhdG9yVHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBAJHtTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGkgb3IgQHN0cmVhbSBkZWNvcmF0b3Igb24gdGhlIHNhbWUgbWV0aG9kLmAsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBtZXRob2QuX19kZWNvcmF0b3JUeXBlID0gZGVjb3JhdG9yVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBpKG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICBvcHRpb25zID0ge1xuICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIsXG4gICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIGNsaWVudHM6IFtcImF4aW9zXCJdLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQGFwaSBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5BUEkpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG5cbiAgICAvLyDquLDsobQg64+Z7J287ZWcIOuplOyEnOuTnOqwgCDsnojripTsp4Ag7ZmV7J24IO2bhCDsnojripQg6rK97JqwIG92ZXJyaWRlXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeu5iCDsiqTtirjrp4HsnbQg7JWE64uI7JeI64qU642wIOuLpOuluCDsiqTtirjrp4HsnLzroZwg67CU64CM6rKMIOuQnOuLpOuptCkg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwiYXBpXCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgLy8g6riw7KG07J2YIOyYteyFmOqzvCDsg4jroZzsmrQg7Ji17IWY7J20IOqyuey5mOuKlCDrtoDrtoTsnbQg7J6I64uk66m0IOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyhcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmdBcGkub3B0aW9ucywgLy8g6riw7KG07J2YIOyYteyFmOydhCDsobTspJHtlZjrkJhcbiAgICAgICAgLi4ub3B0aW9ucywgLy8gQGFwaSDrjbDsvZTroIjsnbTthLDsnZgg7Ji17IWY7J2EIOy2lOqwgO2VqeuLiOuLpC5cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcImFwaToge2h0dHBNZXRob2R9IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBodHRwTWV0aG9kOiBvcHRpb25zLmh0dHBNZXRob2QsXG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZUZyYW1lQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcImFwaToge2h0dHBNZXRob2R9IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBodHRwTWV0aG9kOiBvcHRpb25zLmh0dHBNZXRob2QsXG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtKG9wdGlvbnM6IFN0cmVhbURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHN0cmVhbSBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5TVFJFQU0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhEZWZhdWx0cyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBodHRwTWV0aG9kOiBcIkdFVFwiIGFzIEhUVFBNZXRob2RzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIC8vIOq4sOyhtOydmCBwYXRo7JmAIOyDiOuhnOyatCBwYXRo6rCAIOuLpOultOuLpOuptCg967mIIOyKpO2KuOungeydtCDslYTri4jsl4jripTrjbAg64uk66W4IOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ1BhdGgoXCJzdHJlYW1cIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5wYXRoLCBwYXRoKTtcbiAgICAgIGV4aXN0aW5nQXBpLnBhdGggPSBwYXRoO1xuXG4gICAgICAvLyDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICAgICAgICBcInN0cmVhbVwiLFxuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMsXG4gICAgICAgIG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICApO1xuICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZXhpc3RpbmdBcGkub3B0aW9ucywgLy8g6riw7KG07J2YIOyYteyFmOydhCDsobTspJHtlZjrkJhcbiAgICAgICAgLi4ub3B0aW9uc1dpdGhEZWZhdWx0cywgLy8gQHN0cmVhbSDrjbDsvZTroIjsnbTthLDsnZgg7Ji17IWY7J2EIOy2lOqwgO2VqeuLiOuLpC5cbiAgICAgIH07XG5cbiAgICAgIGV4aXN0aW5nQXBpLnN0cmVhbU9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgICBzdHJlYW1PcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJzdHJlYW06IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZUZyYW1lQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInN0cmVhbToge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2FjdGlvbmFsKG9wdGlvbnM6IFRyYW5zYWN0aW9uYWxPcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBpc29sYXRpb24sIHJlYWRPbmx5LCBkYlByZXNldCA9IFwid1wiIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0YXJnZXQuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvKC4rKUNsYXNzJC8pPy5bMV07XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAc3RyZWFtIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwidHJhbnNhY3Rpb25hbDoge21vZGVsfS57bWV0aG9kfVwiLCB7XG4gICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleGlzdGluZ0NvbnRleHQgPSBEQi50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKTtcblxuICAgICAgLy8gQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyXhuqxsOuCmCDtlbTri7kgcHJlc2V07J2YIO2KuOuenOyereyFmOydtCDsl4bsnLzrqbQg7IOI66GcIOyLnOyekVxuICAgICAgY29uc3Qgc3RhcnRUcmFuc2FjdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHVyaSA9IHRoaXMuZ2V0UHVyaShkYlByZXNldCkgYXMgUHVyaVdyYXBwZXI7XG5cbiAgICAgICAgcmV0dXJuIHB1cmkua25leC50cmFuc2FjdGlvbihcbiAgICAgICAgICBhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIm5ldyB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgICAgICBjb25zdCB0cnhXcmFwcGVyID0gbmV3IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIodHJ4LCBuZXcgVXBzZXJ0QnVpbGRlcigpKTtcbiAgICAgICAgICAgIC8vIFRyYW5zYWN0aW9uQ29udGV4dOyXkCDtirjrnpzsnq3shZgg7KCA7J6lXG4gICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5zZXRUcmFuc2FjdGlvbihkYlByZXNldCwgdHJ4V3JhcHBlcik7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIC8vIO2KuOuenOyereyFmCDsoJzqsbBcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJkZWxldGUgdHJhbnNhY3Rpb24gY29udGV4dDoge2RiUHJlc2V0fVwiLCB7IGRiUHJlc2V0IH0pO1xuICAgICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5kZWxldGVUcmFuc2FjdGlvbihkYlByZXNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzb2xhdGlvbkxldmVsOiBpc29sYXRpb24sIHJlYWRPbmx5IH0sXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirjqsIAg7JeG7Jy866m0IOyDiOuhnCDsg53shLFcbiAgICAgIGlmICghZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBEQi5ydW5XaXRoVHJhbnNhY3Rpb24oc3RhcnRUcmFuc2FjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIOydtOuvuCBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirgg7JWI7JeQIOyeiOuKlOyngCDtmZXsnbgg7ZuEIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0Py5nZXRUcmFuc2FjdGlvbihkYlByZXNldCkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXVzZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgLy8g7Luo7YWN7Iqk7Yq464qUIOyeiOyngOunjCDsnbQgcHJlc2V07J2YIO2KuOuenOyereyFmOydgCDsl4bripQg6rK97JqwICjqsJnsnYAg7Luo7YWN7Iqk7Yq4IOuCtOyXkOyEnCDsi6TtlokpXG4gICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDtjIzsnbwg7JeF66Gc65OcIEFQSeulvCDsg53shLHtlbTspI3ri4jri6QuIChAYXBpIOuNsOy9lOugiOydtO2EsCDsl4bsnbQg64+F66a97KCB7Jy866GcIOyCrOyaqSlcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHVwbG9hZCBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWUsIHRydWUpfWA7XG5cbiAgICAvLyByZWdpc3RlcmVkQXBpc+yXkOyEnCDtlbTri7kgQVBJIOywvuyVhOyEnCB1cGxvYWRPcHRpb25zIOy2lOqwgFxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuXG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDsnqzrk7HroZ0g7IucIOyXheuhnOuTnCDsmLXshZjrp4wg6rCx7IugXG4gICAgICBleGlzdGluZ0FwaS51cGxvYWRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7IOI66GcIOuTseuhnVxuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aDogZGVmYXVsdFBhdGgsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBjbGllbnRzOiBbXCJheGlvcy1tdWx0aXBhcnRcIiwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwbG9hZE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzIHwgQmFzZUZyYW1lQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlTW9kZWxDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5tb2RlbE5hbWUsIFwibW9kZWxcIikpLmRlYnVnKFxuICAgICAgICAgIFwidXBsb2FkOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJ1cGxvYWQ6IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgcmVxdWVzdCB9ID0gU29uYW11LmdldENvbnRleHQoKTtcbiAgICAgIGNvbnN0IHVwbG9hZENvbnRleHQ6IFVwbG9hZENvbnRleHQgPSB7XG4gICAgICAgIGZpbGU6IHVuZGVmaW5lZCxcbiAgICAgICAgZmlsZXM6IFtdLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBVcGxvYWRlZEZpbGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3N0b3JhZ2UvdXBsb2FkZWQtZmlsZVwiKTtcbiAgICAgIGlmIChvcHRpb25zLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICBjb25zdCByYXdGaWxlc0l0ZXJhdG9yID0gcmVxdWVzdC5maWxlcygpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJhd0ZpbGUgb2YgcmF3RmlsZXNJdGVyYXRvcikge1xuICAgICAgICAgIGlmIChyYXdGaWxlKSB7XG4gICAgICAgICAgICBhd2FpdCByYXdGaWxlLnRvQnVmZmVyKCk7XG4gICAgICAgICAgICB1cGxvYWRDb250ZXh0LmZpbGVzLnB1c2gobmV3IFVwbG9hZGVkRmlsZShyYXdGaWxlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByYXdGaWxlID0gYXdhaXQgcmVxdWVzdC5maWxlKCk7XG4gICAgICAgIGlmIChyYXdGaWxlKSB7XG4gICAgICAgICAgdXBsb2FkQ29udGV4dC5maWxlID0gbmV3IFVwbG9hZGVkRmlsZShyYXdGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gU29uYW11LnVwbG9hZFN0b3JhZ2UucnVuKHsgdXBsb2FkQ29udGV4dCB9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IDzsnbTrn7Qg65WMIOyVhOuLiOuptCBhbnkg7Ja47KCcIOyUgeuLiOq5jD5cbiAgbmV3T3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICBPYmplY3Qua2V5cyhuZXdPcHRpb25zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoZXhpc3RpbmdPcHRpb25zW2tleV0gJiYgIWlzRXF1YWwoZXhpc3RpbmdPcHRpb25zW2tleV0sIG5ld09wdGlvbnNba2V5XSkpIHtcbiAgICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkub3B0aW9uc+qwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g6rCA66C5IEBhcGkoeyByZXNvdXJjZU5hbWU6IFwiVXNlcnNcIiB9KSDrjbDsvZTroIjsnbTthLDqsIAg67aZ7Ja07J6I64qUIOuplOyEnOuTnOyXkFxuICAgICAgLy8gQHN0cmVhbSh7IHJlc291cmNlTmFtZTogXCJQb3N0c1wiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDsnbTroIfqsowg65CY66m0IOuRkCDrjbDsvZTroIjsnbTthLDqsIAg6rCZ7J2AIGFwaeydmCBvcHRpb25zIOyGjSDqsJnsnYAg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBAJHtkZWNvcmF0b3JOYW1lfSBkZWNvcmF0b3Igb24gJHttb2RlbE5hbWV9LiR7bWV0aG9kTmFtZX0gaGFzIGNvbmZsaWN0aW5nIG9wdGlvbnM6ICR7a2V5fS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIG9wdGlvbigke0pTT04uc3RyaW5naWZ5KGV4aXN0aW5nT3B0aW9uc1trZXldKX0pIHdpdGggdGhlIG5ldyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShuZXdPcHRpb25zW2tleV0pfSkuYCxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJnZXRMb2dnZXIiLCJhc3NlcnQiLCJpbmZsZWN0aW9uIiwiaXNFcXVhbCIsIkJhc2VNb2RlbENsYXNzIiwiREIiLCJQdXJpVHJhbnNhY3Rpb25XcmFwcGVyIiwiVXBzZXJ0QnVpbGRlciIsImNvbnZlcnREb21haW5Ub0NhdGVnb3J5IiwiQmFzZUZyYW1lQ2xhc3MiLCJTb25hbXUiLCJyZWdpc3RlcmVkQXBpcyIsIkRFQ09SQVRPUl9UWVBFUyIsIkFQSSIsIlN5bWJvbCIsIlNUUkVBTSIsImNoZWNrU2luZ2xlRGVjb3JhdG9yIiwidGFyZ2V0IiwicHJvcGVydHlLZXkiLCJkZWNvcmF0b3JUeXBlIiwibWV0aG9kIiwiX19kZWNvcmF0b3JUeXBlIiwiRXJyb3IiLCJTdHJpbmciLCJuYW1lIiwiYXBpIiwib3B0aW9ucyIsImh0dHBNZXRob2QiLCJjb250ZW50VHlwZSIsImNsaWVudHMiLCJkZXNjcmlwdG9yIiwibW9kZWxOYW1lIiwibWF0Y2giLCJtZXRob2ROYW1lIiwiZGVmYXVsdFBhdGgiLCJjYW1lbGl6ZSIsInJlcGxhY2UiLCJwYXRoIiwiZXhpc3RpbmdBcGkiLCJmaW5kIiwiYXNzZXJ0Tm9Db25mbGljdGluZ1BhdGgiLCJhc3NlcnROb0NvbmZsaWN0aW5nT3B0aW9ucyIsInB1c2giLCJvcmlnaW5hbE1ldGhvZCIsInZhbHVlIiwiYXJncyIsImRlYnVnIiwibW9kZWwiLCJmcmFtZU5hbWUiLCJhcHBseSIsInN0cmVhbSIsIm9wdGlvbnNXaXRoRGVmYXVsdHMiLCJzdHJlYW1PcHRpb25zIiwidHJhbnNhY3Rpb25hbCIsImlzb2xhdGlvbiIsInJlYWRPbmx5IiwiZGJQcmVzZXQiLCJsb2dnZXIiLCJleGlzdGluZ0NvbnRleHQiLCJ0cmFuc2FjdGlvblN0b3JhZ2UiLCJnZXRTdG9yZSIsInN0YXJ0VHJhbnNhY3Rpb24iLCJwdXJpIiwiZ2V0UHVyaSIsImtuZXgiLCJ0cmFuc2FjdGlvbiIsInRyeCIsInRyeFdyYXBwZXIiLCJnZXRUcmFuc2FjdGlvbkNvbnRleHQiLCJzZXRUcmFuc2FjdGlvbiIsImRlbGV0ZVRyYW5zYWN0aW9uIiwiaXNvbGF0aW9uTGV2ZWwiLCJydW5XaXRoVHJhbnNhY3Rpb24iLCJnZXRUcmFuc2FjdGlvbiIsInVwbG9hZCIsInVwbG9hZE9wdGlvbnMiLCJyZXF1ZXN0IiwiZ2V0Q29udGV4dCIsInVwbG9hZENvbnRleHQiLCJmaWxlIiwidW5kZWZpbmVkIiwiZmlsZXMiLCJVcGxvYWRlZEZpbGUiLCJtb2RlIiwicmF3RmlsZXNJdGVyYXRvciIsInJhd0ZpbGUiLCJ0b0J1ZmZlciIsInVwbG9hZFN0b3JhZ2UiLCJydW4iLCJkZWNvcmF0b3JOYW1lIiwiZXhpc3RpbmdQYXRoIiwibmV3UGF0aCIsImV4aXN0aW5nT3B0aW9ucyIsIm5ld09wdGlvbnMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsIkpT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
@@ -84,6 +84,11 @@ declare class SonamuClass {
84
84
  invokeApiForSSR(api: ExtendedApi, params: any[], config: SonamuFastifyConfig, request: FastifyRequest, reply: FastifyReply): Promise<unknown>;
85
85
  invokeModelMethod(api: ExtendedApi, args: unknown[], context: Context, reply: FastifyReply): Promise<unknown>;
86
86
  createContext(config: SonamuFastifyConfig, request: FastifyRequest, reply: FastifyReply): Promise<Context>;
87
+ /**
88
+ * Accept-Language 헤더에서 지원하는 locale을 찾습니다.
89
+ * @example "ko-KR,ko;q=0.9,en;q=0.8" → "ko"
90
+ */
91
+ private detectLocale;
87
92
  startWatcher(): Promise<void>;
88
93
  runScript(fn: () => Promise<void>): Promise<void>;
89
94
  private registerPlugins;
@@ -1 +1 @@
1
- {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sonamu.d.ts","sourceRoot":"","sources":["../../src/api/sonamu.ts"],"names":[],"mappings":"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"}