sonamu 0.9.8 → 0.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/syncer/file-patterns.js +2 -2
- package/dist/syncer/syncer-actions.d.ts +2 -8
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +4 -11
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +2 -3
- package/package.json +3 -3
- package/src/shared/app.shared.ts.txt +8 -1
- package/src/syncer/file-patterns.ts +1 -1
- package/src/syncer/syncer-actions.ts +3 -15
- package/src/syncer/syncer.ts +1 -9
|
@@ -39,7 +39,7 @@ function getChecksumPatternGroup() {
|
|
|
39
39
|
workflow: api("src/application/**/*.workflow.ts"),
|
|
40
40
|
i18n: api("src/i18n/**/!(sd.generated).ts"),
|
|
41
41
|
generated: api("src/application/**/*.generated.{ts,tsx,sso.ts}"),
|
|
42
|
-
generatedCopied: targets("src/services/**/
|
|
42
|
+
generatedCopied: targets("src/services/**/sonamu.generated.{ts,tsx}"),
|
|
43
43
|
httpGenerated: api("src/application/**/*.generated.http"),
|
|
44
44
|
servicesGenerated: targets("src/services/services.generated.ts"),
|
|
45
45
|
sdGenerated: anywhere("src/i18n/**/sd.generated.ts"),
|
|
@@ -87,4 +87,4 @@ var init_file_patterns = __esmMin((() => {
|
|
|
87
87
|
//#endregion
|
|
88
88
|
init_file_patterns();
|
|
89
89
|
export { GLOB_EXCLUDE, getChecksumPatternGroup, getChecksumPatternGroupInAbsolutePath, init_file_patterns };
|
|
90
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLiosIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHApLlxuICAgIC8vIC0gdGFyZ2V0IOyghOyaqSDsnpDsgrA6IHRhcmdldOyXkOunjCDrp4zrk6TslrTsp5AgKHNlcnZpY2VzLmdlbmVyYXRlZC50c+uKlCBzZXJ2aWNlcy50ZW1wbGF0ZeydmCA6dGFyZ2V0IOu2hOuwsCkuXG4gICAgLy9cbiAgICAvLyDsl6zquLDsl5DripQgU29uYW117J2YIOuqqOuToCBzeW5jIOyCsOy2nOusvOydtCDsnojripQg6rKD7J2AIOyVhOuLmeuLiOuLpC5cbiAgICAvLyBzb25hbXUuc2hhcmVkLnRz7JmAIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN47JmAIOqwmeydgFxuICAgIC8vIHN5bmMg7LSI67CYIDHtmozshLEg67aA7Yq47Iqk7Yq4656pIO2MjOydvOuTpOydgCDqtIDrpqwg7JWIIO2VmOq4sCDrlYzrrLjsl5Ag7Jes6riw7JeQIOumrOyKpO2MheuPhCDslYgg7ZWp64uI64ukLlxuICAgIGdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLnt0cyx0c3gsc3NvLnRzfVwiKSxcbiAgICBnZW5lcmF0ZWRDb3BpZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvKiove3NvbmFtdSxxdWVyaWVzfS5nZW5lcmF0ZWQue3RzLHRzeH1cIiksXG4gICAgaHR0cEdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLmh0dHBcIiksXG4gICAgc2VydmljZXNHZW5lcmF0ZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHNkR2VuZXJhdGVkOiBhbnl3aGVyZShcInNyYy9pMThuLyoqL3NkLmdlbmVyYXRlZC50c1wiKSxcbiAgICB0eXBlc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLnR5cGVzLnRzXCIpLFxuICAgIGZ1bmN0aW9uc0NvcGllZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy8qKi8qLmZ1bmN0aW9ucy50c1wiKSxcbiAgICBpMThuQ29waWVkOiB0YXJnZXRzKFwic3JjL2kxOG4vKiovIShzZC5nZW5lcmF0ZWQpLnRzXCIpLFxuICB9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBBcHBSZWxhdGl2ZVBhdGg+O1xufVxuXG4vKipcbiAqIOychOy5mCDsubTthYzqs6Drpqzrs4Qg6riA66GtIOu5jOuNlOulvCDrp4zrk6TslrQg67CY7ZmY7ZWp64uI64ukLlxuICogLSBhcGkocmVzdCk6IGFwaSDrlJTroInthqDrpqzsl5Ag7ZWc7KCVXG4gKiAtIHRhcmdldHMocmVzdCk6IHRhcmdldCDrlJTroInthqDrpqzrk6Tsl5Ag7ZWc7KCVICh3ZWIsIGFwcCDrk7EpXG4gKiAtIGFueXdoZXJlKHJlc3QpOiBhcGnsmYAgdGFyZ2V0IOuqqOuRkFxuICovXG5mdW5jdGlvbiBnbG9iQnVpbGRlcnMoKSB7XG4gIGNvbnN0IGFwaURpciA9IFNvbmFtdS5jb25maWcuYXBpLmRpcjtcbiAgY29uc3QgdGFyZ2V0RGlycyA9IFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzO1xuXG4gIC8vIE5vZGUg64K07J6lIGZzLmdsb2LsnZggYnJhY2UgZXhwYW5zaW9u7J2AIOuLqOydvCDrqaTrsoQge3h966W8IO2SgOyngCDslYrsnLzrr4DroZwsIOuppOuyhOqwgCAx6rCc7J28IOuVjOuKlCBhbHRlcm5hdGlvbiDsl4bsnbQg7KeB7KCRIOqysO2Vqe2VqeuLiOuLpC5cbiAgY29uc3QgYnJhY2VKb2luID0gKGRpcnM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PlxuICAgIGRpcnMubGVuZ3RoID09PSAxID8gZGlyc1swXSA6IGB7JHtkaXJzLmpvaW4oXCIsXCIpfX1gO1xuXG4gIHJldHVybiB7XG4gICAgYXBpOiAocGF0aEZyb21BcGk6IHN0cmluZykgPT4gYCR7YXBpRGlyfS8ke3BhdGhGcm9tQXBpfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIHRhcmdldHM6IChwYXRoRnJvbVRhcmdldDogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKHRhcmdldERpcnMpfS8ke3BhdGhGcm9tVGFyZ2V0fWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICAgIGFueXdoZXJlOiAocGF0aEZyb21Bbnl3aGVyZTogc3RyaW5nKSA9PlxuICAgICAgYCR7YnJhY2VKb2luKFthcGlEaXIsIC4uLnRhcmdldERpcnNdKX0vJHtwYXRoRnJvbUFueXdoZXJlfWAgYXMgQXBwUmVsYXRpdmVQYXRoLFxuICB9O1xufVxuXG4vKipcbiAqIEZpbGVUeXBl7J2AIGdldENoZWNrc3VtUGF0dGVybkdyb3Vw7J2YIOuwmO2ZmCDqsJ3ssrQg7YKk7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuXG4gKiDrs4Trj4Qg67Cw7Je0L2VudW0g64+Z6riw7ZmUIOu2iO2VhOyalCDigJQg7Yyo7YS0IOq3uOujuSDtlajsiJjqsIAg7KeE7Iuk7J2YIOuLqOydvCDsm5DsspwuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbGVUeXBlID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXA+O1xuZXhwb3J0IHR5cGUgR2xvYlBhdHRlcm48VCBleHRlbmRzIEFwcFJlbGF0aXZlUGF0aCB8IEFic29sdXRlUGF0aD4gPSBSZWNvcmQ8RmlsZVR5cGUsIFQ+O1xuXG4vKipcbiAqIOu5jOuTnCDsgrDstpzrrLwg65SU66CJ7Yag66as64qUIGFsdGVybmF0aW9uIOq4gOuhreydtCDsnZjrj4TsuZgg7JWK6rKMIO2cmOunkOumtCDsiJgg7J6I7Jy866+A66GcIOyViOyghOunneycvOuhnCDsoJzsmbguXG4gKiBOb2RlIOuCtOyepSBmcy5nbG9i7J2YIGV4Y2x1ZGUg7Ji17IWY6rO8IO2VqOq7mCDsgqzsmqntlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBHTE9CX0VYQ0xVREUgPSBbXCIqKi9ub2RlX21vZHVsZXMvKipcIiwgXCIqKi9kaXN0LyoqXCIsIFwiKiovYnVpbGQvKipcIiwgXCIqKi8udHVyYm8vKipcIl07XG5cbi8qKlxuICogYXBwUm9vdCDquLDspIAg7IOB64yAIOqyveuhnCDtjKjthLTsnYQg7KCI64yAIOqyveuhnCDtjKjthLTsnLzroZwg67OA7ZmY7ZWp64uI64ukLlxuICpcbiAqIEByZXR1cm5zIOygiOuMgCDqsr3roZwg6riw67CYIEdsb2Ig7Yyo7YS0IOuntVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgpOiBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+IHtcbiAgY29uc3QgZ3JvdXAgPSBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cCgpO1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAga2V5LFxuICAgICAgcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdmFsdWUpLCAvLyBhcHBSb290IOyDgeuMgCDqsr3roZwg4oaSIOygiOuMgCDqsr3roZxcbiAgICBdKSxcbiAgKSBhcyBHbG9iUGF0dGVybjxBYnNvbHV0ZVBhdGg+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZCQSxTQUFnQiwwQkFBMEI7Q0FFeEMsTUFBTSxFQUFFLEtBQUssU0FBUyxhQUFhLGNBQWM7QUFFakQsUUFBTztFQUlMLFFBQVEsSUFBSSx1QkFBdUI7RUFDbkMsUUFBUSxJQUFJLG1DQUFtQztFQUMvQyxPQUFPLElBQUksZ0NBQWdDO0VBQzNDLFdBQVcsSUFBSSxvQ0FBb0M7RUFDbkQsT0FBTyxJQUFJLGdDQUFnQztFQUMzQyxPQUFPLElBQUksZ0NBQWdDO0VBQzNDLFVBQVUsSUFBSSxtQ0FBbUM7RUFDakQsTUFBTSxJQUFJLGlDQUFpQztFQWMzQyxXQUFXLElBQUksaURBQWlEO0VBQ2hFLGlCQUFpQixRQUFRLHNEQUFzRDtFQUMvRSxlQUFlLElBQUksc0NBQXNDO0VBQ3pELG1CQUFtQixRQUFRLHFDQUFxQztFQUNoRSxhQUFhLFNBQVMsOEJBQThCO0VBQ3BELGFBQWEsUUFBUSw2QkFBNkI7RUFDbEQsaUJBQWlCLFFBQVEsaUNBQWlDO0VBQzFELFlBQVksUUFBUSxpQ0FBaUM7RUFDdEQ7Ozs7Ozs7O0FBU0gsU0FBUyxlQUFlO0NBQ3RCLE1BQU0sU0FBUyxPQUFPLE9BQU8sSUFBSTtDQUNqQyxNQUFNLGFBQWEsT0FBTyxPQUFPLEtBQUs7Q0FHdEMsTUFBTSxhQUFhLFNBQ2pCLEtBQUssV0FBVyxJQUFJLEtBQUssS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFFbkQsUUFBTztFQUNMLE1BQU0sZ0JBQXdCLEdBQUcsT0FBTyxHQUFHO0VBQzNDLFVBQVUsbUJBQ1IsR0FBRyxVQUFVLFdBQVcsQ0FBQyxHQUFHO0VBQzlCLFdBQVcscUJBQ1QsR0FBRyxVQUFVLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLEdBQUc7RUFDNUM7Ozs7Ozs7QUFxQkgsU0FBZ0Isd0NBQW1FO0NBQ2pGLE1BQU0sUUFBUSx5QkFBeUI7QUFDdkMsUUFBTyxPQUFPLFlBQ1osT0FBTyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBQzFDLEtBQ0EsS0FBSyxLQUFLLE9BQU8sYUFBYSxNQUFNLENBQ3JDLENBQUMsQ0FDSDs7OztjQW5Ib0M7Q0FxRzFCLGVBQWU7RUFBQztFQUFzQjtFQUFjO0VBQWU7RUFBZSJ9
|
|
90
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wYXR0ZXJucy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3luY2VyL2ZpbGUtcGF0dGVybnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoLCB0eXBlIEFwcFJlbGF0aXZlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5cbi8qKlxuICogU3luY2Vy6rCAIOq0gOyLrCDqsIDsp4Dqs6Ag7KeA7Lyc67O064qUIO2MjOydvOuTpOyeheuLiOuLpC5cbiAqIOydtCDtjIzsnbzrk6Tsl5Ag67OA6rK97J20IOyDneq4sOuptCDstpTqsIDsoIHsnbgg7J6R7JeFKOydtO2VmCBcIuyLse2BrFwiIOuYkOuKlCBcIuyLse2BrCDslaHshZhcIinsnYQg7IiY7ZaJ7ZWp64uI64ukLlxuICog7J20IOyekeyXheydtOudvCDtlajsnYAg7YyM7J28IOuzteyCrCDrmJDripQg7YWc7ZSM66a/IOugjOuNlOungeydhCDthrXtlZwgY29kZSBnZW5lcmF0aW9u7J2EIOydmOuvuO2VqeuLiOuLpC5cbiAqXG4gKiDqsr3roZwg7ZiV7IudOiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICh0YXJnZXQg65SU66CJ7Yag66as66GcIOyLnOyekSwg7JiIOiBcImFwaS9zcmMvLi4uXCIsIFwid2ViL3NyYy8uLi5cIilcbiAqIOyCrOyaqTogZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXBJbkFic29sdXRlUGF0aCgp66GcIOygiOuMgCDqsr3roZwg67OA7ZmYIO2bhCBnbG9iIOyCrOyaqVxuICpcbiAqIOuRkCDqsIDsp4Ag7J2Y66+47KCBIOyYgeyXrTpcbiAqIC0g7J6F66ClICjsgqzsmqnsnpAg7J6R7ISxKTogYXBpIOuUlOugie2GoOumrOyXkOunjCDsnITsuZguIOyCrOyaqeyekOqwgCDsp4HsoJEg7Y647KeRLlxuICogLSDstpzroKUgKHNvbmFtdSDsg53shLEv67O17IKsKTogYXBpIOuYkOuKlCB0YXJnZXQg65SU66CJ7Yag66as7JeQIHNvbmFtdeqwgCDrp4zrk6TslrTrgrTripQg7YyM7J28LlxuICpcbiAqIOy2lOyggSDrsJYg7J6Q7IKwICjrtoDtirjsiqTtirjrnqkgcGhhc2Xsl5DshJwg66ek67KIIOuztOyepSk6XG4gKiAtIHNvbmFtdS5zaGFyZWQudHM6IOyCrOyaqeyekOqwgCDsu6TsiqTthLDrp4jsnbTspojtlZjripQg7J6Q7IKwLiBJZk5vdEV4aXN0c+uhnCAx7ZqMIOyDneyEsSDtm4Qg7IaQ64yA7KeAIOyViuydjC5cbiAqIC0gZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3g6IOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5wuIOunpOuyiCBvdmVyd3JpdGUgZ2VuZXJhdGUuXG4gKlxuICog7JyEIOuRmOydgCBzeW5jKCnsnZgg67aA7Yq47Iqk7Yq4656pIHBoYXNl7JeQ7IScIOuzgOqyvSDqsoDstpwg7IKs7J207YG06rO8IOustOq0gO2VmOqyjCDrs7TsnqXrkKnri4jri6QuXG4gKiDstpTsoIEg7IKs7J207YG0IOyViOyXkOyEnCDtlaAg7JWh7IWY7J20IOyXhuuKlCDsnpDsgrDsnbTrnbwg7Yyo7YS0IOq3uOujueyXkCDtj6ztlajrkJjsp4Ag7JWK7Iq164uI64ukLlxuICpcbiAqIOychOy5mCDsubTthYzqs6DrpqzripQgYXBpL3RhcmdldHMvYW55d2hlcmUg7Zes7Y2866GcIOuqheyLnOyggeycvOuhnCDtkZztmITtlanri4jri6QuXG4gKlxuICogRmlsZVR5cGXsnYAg7J20IO2VqOyImOydmCDrsJjtmZgg7YOA7J6F7JeQ7IScIOyekOuPmSDstpTroaDrkKnri4jri6QuIO2CpCDstpTqsIAg7IucIOuzhOuPhCBlbnVtL+uwsOyXtOydhFxuICog64+Z6riw7ZmU7ZWgIO2VhOyalCDsl4bsnbQg7Jes6riwIO2VnCDqtbDrjbDrp4wg7IiY7KCV7ZWY66m0IOuQqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCkge1xuICAvLyDtl6ztjbwg7ZWo7IiY65OkIOunjOuTpOyWtOyEnCDqsIDsoLjsmLXri4jri6QuXG4gIGNvbnN0IHsgYXBpLCB0YXJnZXRzLCBhbnl3aGVyZSB9ID0gZ2xvYkJ1aWxkZXJzKCk7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBTb25hbXUg7J6F7J6l7JeQ7IScIHNvcnVjZeqwgCDrkJjripQg7YyM7J2865Ok7J6F64uI64ukLlxuICAgIC8vIOydtCDsuZzqtazrk6TsnbQg67OA6rK965CY66m0IOydtOuTpOuhnOu2gO2EsCDslaHshZjsnYQg7IiY7ZaJ7ZWY6rOgIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAgLy8g66qo64W466as7Y+s7JeQ7IScIOydtCBzb3VyY2Xrk6TsnYAgYXBpIO2UhOuhnOygne2KuOyXkCDtlZzsoJXrkJjrr4DroZwsIGFwaeyXkCDsnojripQg7Lmc6rWs65Ok66eMIOumrOyKpO2Mhe2VqeuLiOuLpC5cbiAgICBjb25maWc6IGFwaShcInNyYy9zb25hbXUuY29uZmlnLnRzXCIpLFxuICAgIGVudGl0eTogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZW50aXR5Lmpzb25cIiksXG4gICAgZnJhbWU6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLmZyYW1lLnRzXCIpLFxuICAgIGZ1bmN0aW9uczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIG1vZGVsOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5tb2RlbC50c1wiKSxcbiAgICB0eXBlczogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyoudHlwZXMudHNcIiksXG4gICAgd29ya2Zsb3c6IGFwaShcInNyYy9hcHBsaWNhdGlvbi8qKi8qLndvcmtmbG93LnRzXCIpLFxuICAgIGkxOG46IGFwaShcInNyYy9pMThuLyoqLyEoc2QuZ2VuZXJhdGVkKS50c1wiKSxcblxuICAgIC8vIFNvbmFtdeqwgCDstpzroKXtlZjripQg7IOd7ISxIO2MjOydvOuTpOyeheuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok64+EIOygle2VqeyEsSDqsoDspp0g7LCo7JuQ7JeQ7IScIHNvbmFtdS5sb2Nr7JeQIOq4sOuhne2VtOyVvCDtlZjqs6AsXG4gICAgLy8g65iQ7ZWcIOuzgOqyveyLnCDqt7gg7IKs7Iuk7J2EIHN5bmNlcuqwgCDslYzquLDripQg7ZW07JW8IO2VqeuLiOuLpCjruYTroZ0g67OE64uk66W4IOyymOumrOqwgCDsl4bripQg6rK97Jqw64+EIOyeiOyngOunjCkuXG4gICAgLy9cbiAgICAvLyDsnpDsgrAg67O47ISx7JeQIOuUsOudvCDsnITsuZgg7Lm07YWM6rOg66as6rCAIOuLpOultOq4sCDrlYzrrLjsl5AsIOuzuOyEseuzhOuhnCDrtoTrpqztlbTshJwg7ZGc6riw7ZWp64uI64ukLlxuICAgIC8vIC0g7JaR7Kq9Le2VhOyalCDsnpDsgrA6IGFwaeyXkCDsoJXrs7jsnbQg66eM65Ok7Ja07KeEIOuSpCB0YXJnZXTsl5Ag67O17IKs65CoIChzb25hbXUuZ2VuZXJhdGVkLiosIHF1ZXJpZXMuZ2VuZXJhdGVkLnRzKS5cbiAgICAvLyAtIGFwaSDsoITsmqkg7J6Q7IKwOiBhcGnsl5Drp4wg66eM65Ok7Ja07KeQIChzb25hbXUuZ2VuZXJhdGVkLmh0dHApLlxuICAgIC8vIC0gdGFyZ2V0IOyghOyaqSDsnpDsgrA6IHRhcmdldOyXkOunjCDrp4zrk6TslrTsp5AgKHNlcnZpY2VzLmdlbmVyYXRlZC50c+uKlCBzZXJ2aWNlcy50ZW1wbGF0ZeydmCA6dGFyZ2V0IOu2hOuwsCkuXG4gICAgLy9cbiAgICAvLyDsl6zquLDsl5DripQgU29uYW117J2YIOuqqOuToCBzeW5jIOyCsOy2nOusvOydtCDsnojripQg6rKD7J2AIOyVhOuLmeuLiOuLpC5cbiAgICAvLyBzb25hbXUuc2hhcmVkLnRz7JmAIGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN47JmAIOqwmeydgFxuICAgIC8vIHN5bmMg7LSI67CYIDHtmozshLEg67aA7Yq47Iqk7Yq4656pIO2MjOydvOuTpOydgCDqtIDrpqwg7JWIIO2VmOq4sCDrlYzrrLjsl5Ag7Jes6riw7JeQIOumrOyKpO2MheuPhCDslYgg7ZWp64uI64ukLlxuICAgIGdlbmVyYXRlZDogYXBpKFwic3JjL2FwcGxpY2F0aW9uLyoqLyouZ2VuZXJhdGVkLnt0cyx0c3gsc3NvLnRzfVwiKSxcbiAgICBnZW5lcmF0ZWRDb3BpZWQ6IHRhcmdldHMoXCJzcmMvc2VydmljZXMvKiovc29uYW11LmdlbmVyYXRlZC57dHMsdHN4fVwiKSxcbiAgICBodHRwR2VuZXJhdGVkOiBhcGkoXCJzcmMvYXBwbGljYXRpb24vKiovKi5nZW5lcmF0ZWQuaHR0cFwiKSxcbiAgICBzZXJ2aWNlc0dlbmVyYXRlZDogdGFyZ2V0cyhcInNyYy9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWQudHNcIiksXG4gICAgc2RHZW5lcmF0ZWQ6IGFueXdoZXJlKFwic3JjL2kxOG4vKiovc2QuZ2VuZXJhdGVkLnRzXCIpLFxuICAgIHR5cGVzQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqLyoudHlwZXMudHNcIiksXG4gICAgZnVuY3Rpb25zQ29waWVkOiB0YXJnZXRzKFwic3JjL3NlcnZpY2VzLyoqLyouZnVuY3Rpb25zLnRzXCIpLFxuICAgIGkxOG5Db3BpZWQ6IHRhcmdldHMoXCJzcmMvaTE4bi8qKi8hKHNkLmdlbmVyYXRlZCkudHNcIiksXG4gIH0gc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIEFwcFJlbGF0aXZlUGF0aD47XG59XG5cbi8qKlxuICog7JyE7LmYIOy5tO2FjOqzoOumrOuzhCDquIDroa0g67mM642U66W8IOunjOuTpOyWtCDrsJjtmZjtlanri4jri6QuXG4gKiAtIGFwaShyZXN0KTogYXBpIOuUlOugie2GoOumrOyXkCDtlZzsoJVcbiAqIC0gdGFyZ2V0cyhyZXN0KTogdGFyZ2V0IOuUlOugie2GoOumrOuTpOyXkCDtlZzsoJUgKHdlYiwgYXBwIOuTsSlcbiAqIC0gYW55d2hlcmUocmVzdCk6IGFwaeyZgCB0YXJnZXQg66qo65GQXG4gKi9cbmZ1bmN0aW9uIGdsb2JCdWlsZGVycygpIHtcbiAgY29uc3QgYXBpRGlyID0gU29uYW11LmNvbmZpZy5hcGkuZGlyO1xuICBjb25zdCB0YXJnZXREaXJzID0gU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHM7XG5cbiAgLy8gTm9kZSDrgrTsnqUgZnMuZ2xvYuydmCBicmFjZSBleHBhbnNpb27snYAg64uo7J28IOuppOuyhCB7eH3rpbwg7ZKA7KeAIOyViuycvOuvgOuhnCwg66mk67KE6rCAIDHqsJzsnbwg65WM64qUIGFsdGVybmF0aW9uIOyXhuydtCDsp4HsoJEg6rKw7ZWp7ZWp64uI64ukLlxuICBjb25zdCBicmFjZUpvaW4gPSAoZGlyczogcmVhZG9ubHkgc3RyaW5nW10pID0+XG4gICAgZGlycy5sZW5ndGggPT09IDEgPyBkaXJzWzBdIDogYHske2RpcnMuam9pbihcIixcIil9fWA7XG5cbiAgcmV0dXJuIHtcbiAgICBhcGk6IChwYXRoRnJvbUFwaTogc3RyaW5nKSA9PiBgJHthcGlEaXJ9LyR7cGF0aEZyb21BcGl9YCBhcyBBcHBSZWxhdGl2ZVBhdGgsXG4gICAgdGFyZ2V0czogKHBhdGhGcm9tVGFyZ2V0OiBzdHJpbmcpID0+XG4gICAgICBgJHticmFjZUpvaW4odGFyZ2V0RGlycyl9LyR7cGF0aEZyb21UYXJnZXR9YCBhcyBBcHBSZWxhdGl2ZVBhdGgsXG4gICAgYW55d2hlcmU6IChwYXRoRnJvbUFueXdoZXJlOiBzdHJpbmcpID0+XG4gICAgICBgJHticmFjZUpvaW4oW2FwaURpciwgLi4udGFyZ2V0RGlyc10pfS8ke3BhdGhGcm9tQW55d2hlcmV9YCBhcyBBcHBSZWxhdGl2ZVBhdGgsXG4gIH07XG59XG5cbi8qKlxuICogRmlsZVR5cGXsnYAgZ2V0Q2hlY2tzdW1QYXR0ZXJuR3JvdXDsnZgg67CY7ZmYIOqwneyytCDtgqTsl5DshJwg7J6Q64+ZIOy2lOuhoOuQqeuLiOuLpC5cbiAqIOuzhOuPhCDrsLDsl7QvZW51bSDrj5nquLDtmZQg67aI7ZWE7JqUIOKAlCDtjKjthLQg6re466O5IO2VqOyImOqwgCDsp4Tsi6TsnZgg64uo7J28IOybkOyynC5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsZVR5cGUgPSBrZXlvZiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cD47XG5leHBvcnQgdHlwZSBHbG9iUGF0dGVybjxUIGV4dGVuZHMgQXBwUmVsYXRpdmVQYXRoIHwgQWJzb2x1dGVQYXRoPiA9IFJlY29yZDxGaWxlVHlwZSwgVD47XG5cbi8qKlxuICog67mM65OcIOyCsOy2nOusvCDrlJTroInthqDrpqzripQgYWx0ZXJuYXRpb24g6riA66Gt7J20IOydmOuPhOy5mCDslYrqsowg7ZyY66eQ66a0IOyImCDsnojsnLzrr4DroZwg7JWI7KCE66ed7Jy866GcIOygnOyZuC5cbiAqIE5vZGUg64K07J6lIGZzLmdsb2LsnZggZXhjbHVkZSDsmLXshZjqs7wg7ZWo6ruYIOyCrOyaqe2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdMT0JfRVhDTFVERSA9IFtcIioqL25vZGVfbW9kdWxlcy8qKlwiLCBcIioqL2Rpc3QvKipcIiwgXCIqKi9idWlsZC8qKlwiLCBcIioqLy50dXJiby8qKlwiXTtcblxuLyoqXG4gKiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcIO2MqO2EtOydhCDsoIjrjIAg6rK966GcIO2MqO2EtOycvOuhnCDrs4DtmZjtlanri4jri6QuXG4gKlxuICogQHJldHVybnMg7KCI64yAIOqyveuhnCDquLDrsJggR2xvYiDtjKjthLQg66e1XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoKCk6IEdsb2JQYXR0ZXJuPEFic29sdXRlUGF0aD4ge1xuICBjb25zdCBncm91cCA9IGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZ3JvdXApLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICBrZXksXG4gICAgICBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB2YWx1ZSksIC8vIGFwcFJvb3Qg7IOB64yAIOqyveuhnCDihpIg7KCI64yAIOqyveuhnFxuICAgIF0pLFxuICApIGFzIEdsb2JQYXR0ZXJuPEFic29sdXRlUGF0aD47XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkJBLFNBQWdCLDBCQUEwQjtDQUV4QyxNQUFNLEVBQUUsS0FBSyxTQUFTLGFBQWEsY0FBYztBQUVqRCxRQUFPO0VBSUwsUUFBUSxJQUFJLHVCQUF1QjtFQUNuQyxRQUFRLElBQUksbUNBQW1DO0VBQy9DLE9BQU8sSUFBSSxnQ0FBZ0M7RUFDM0MsV0FBVyxJQUFJLG9DQUFvQztFQUNuRCxPQUFPLElBQUksZ0NBQWdDO0VBQzNDLE9BQU8sSUFBSSxnQ0FBZ0M7RUFDM0MsVUFBVSxJQUFJLG1DQUFtQztFQUNqRCxNQUFNLElBQUksaUNBQWlDO0VBYzNDLFdBQVcsSUFBSSxpREFBaUQ7RUFDaEUsaUJBQWlCLFFBQVEsNENBQTRDO0VBQ3JFLGVBQWUsSUFBSSxzQ0FBc0M7RUFDekQsbUJBQW1CLFFBQVEscUNBQXFDO0VBQ2hFLGFBQWEsU0FBUyw4QkFBOEI7RUFDcEQsYUFBYSxRQUFRLDZCQUE2QjtFQUNsRCxpQkFBaUIsUUFBUSxpQ0FBaUM7RUFDMUQsWUFBWSxRQUFRLGlDQUFpQztFQUN0RDs7Ozs7Ozs7QUFTSCxTQUFTLGVBQWU7Q0FDdEIsTUFBTSxTQUFTLE9BQU8sT0FBTyxJQUFJO0NBQ2pDLE1BQU0sYUFBYSxPQUFPLE9BQU8sS0FBSztDQUd0QyxNQUFNLGFBQWEsU0FDakIsS0FBSyxXQUFXLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUVuRCxRQUFPO0VBQ0wsTUFBTSxnQkFBd0IsR0FBRyxPQUFPLEdBQUc7RUFDM0MsVUFBVSxtQkFDUixHQUFHLFVBQVUsV0FBVyxDQUFDLEdBQUc7RUFDOUIsV0FBVyxxQkFDVCxHQUFHLFVBQVUsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRztFQUM1Qzs7Ozs7OztBQXFCSCxTQUFnQix3Q0FBbUU7Q0FDakYsTUFBTSxRQUFRLHlCQUF5QjtBQUN2QyxRQUFPLE9BQU8sWUFDWixPQUFPLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FDMUMsS0FDQSxLQUFLLEtBQUssT0FBTyxhQUFhLE1BQU0sQ0FDckMsQ0FBQyxDQUNIOzs7O2NBbkhvQztDQXFHMUIsZUFBZTtFQUFDO0VBQXNCO0VBQWM7RUFBZTtFQUFlIn0=
|
|
@@ -38,20 +38,14 @@ export declare function actionGenerateSsrQueries(): Promise<AbsolutePath[]>;
|
|
|
38
38
|
*/
|
|
39
39
|
export declare function actionGenerateSsrEntryServerIfNotExists(): Promise<AbsolutePath[]>;
|
|
40
40
|
/**
|
|
41
|
-
* 주어진 .ts 파일들(api에 있다고 가정)을 타겟 디렉토리의 services에 갖다 둡니다.
|
|
41
|
+
* 주어진 .ts 파일들(api에 있다고 가정)을 모든 타겟 디렉토리의 services에 갖다 둡니다.
|
|
42
42
|
* 이때 내부의 sonamu import는 sonamu.shared.ts import로 치환되고,
|
|
43
43
|
* 경로의 /application/은 /services/로 치환됩니다.
|
|
44
44
|
*
|
|
45
|
-
* 기본은 Sonamu.config.sync.targets 전체를 대상으로 하며,
|
|
46
|
-
* onlyTargetsStartingWith 화이트리스트로 일부 target에만 분배할 수 있습니다.
|
|
47
|
-
* 가량 SSR-only인 queries.generated.ts같은 친구들은 "web"으로 시작하는 타겟들에만 보낼 수 있어요.
|
|
48
|
-
* ["web"]으로 넘기면 web, web-admin, webapp 등에 모두 매치됩니다.
|
|
49
|
-
*
|
|
50
45
|
* @param tsPaths 복사할 파일들의 절대 경로
|
|
51
|
-
* @param onlyTargetsStartingWith 분배할 target 접두어들의 화이트리스트. 미지정 시 모든 target.
|
|
52
46
|
* @returns 각 타겟에 복사된 파일들의 절대 경로 배열 (flat).
|
|
53
47
|
*/
|
|
54
|
-
export declare function actionSyncFilesToTargets(tsPaths: AbsolutePath[]
|
|
48
|
+
export declare function actionSyncFilesToTargets(tsPaths: AbsolutePath[]): Promise<string[]>;
|
|
55
49
|
/**
|
|
56
50
|
* shared 템플릿으로부터 sonamu.shared.ts 파일을 만들어서 모든 타겟 디렉토리에 갖다 둡니다.
|
|
57
51
|
* 파일을 만드는 과정에서 여러 치환 가공이 일어납니다.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,wBAAsB,gBAAgB,kBAWrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED
|
|
1
|
+
{"version":3,"file":"syncer-actions.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,wBAAsB,gBAAgB,kBAWrC;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE;IACX,WAAW,EAAE,iBAAiB,CAAC;CAChC,EAAE,GACF,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAOrE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CAQjE;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,uCAAuC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAWvF;AAED;;;;;;;GAOG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkCzF;AAED;;;;;GAKG;AACH,wBAAsB,oCAAoC,IAAI,OAAO,CAAC,IAAI,CAAC,CA+D1E;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBhE"}
|
|
@@ -79,22 +79,15 @@ async function actionGenerateSsrEntryServerIfNotExists() {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
/**
|
|
82
|
-
* 주어진 .ts 파일들(api에 있다고 가정)을 타겟 디렉토리의 services에 갖다 둡니다.
|
|
82
|
+
* 주어진 .ts 파일들(api에 있다고 가정)을 모든 타겟 디렉토리의 services에 갖다 둡니다.
|
|
83
83
|
* 이때 내부의 sonamu import는 sonamu.shared.ts import로 치환되고,
|
|
84
84
|
* 경로의 /application/은 /services/로 치환됩니다.
|
|
85
85
|
*
|
|
86
|
-
* 기본은 Sonamu.config.sync.targets 전체를 대상으로 하며,
|
|
87
|
-
* onlyTargetsStartingWith 화이트리스트로 일부 target에만 분배할 수 있습니다.
|
|
88
|
-
* 가량 SSR-only인 queries.generated.ts같은 친구들은 "web"으로 시작하는 타겟들에만 보낼 수 있어요.
|
|
89
|
-
* ["web"]으로 넘기면 web, web-admin, webapp 등에 모두 매치됩니다.
|
|
90
|
-
*
|
|
91
86
|
* @param tsPaths 복사할 파일들의 절대 경로
|
|
92
|
-
* @param onlyTargetsStartingWith 분배할 target 접두어들의 화이트리스트. 미지정 시 모든 target.
|
|
93
87
|
* @returns 각 타겟에 복사된 파일들의 절대 경로 배열 (flat).
|
|
94
88
|
*/
|
|
95
|
-
async function actionSyncFilesToTargets(tsPaths
|
|
96
|
-
const
|
|
97
|
-
const targets = onlyTargetsStartingWith ? allTargets.filter((t) => onlyTargetsStartingWith.some((prefix) => t.startsWith(prefix))) : allTargets;
|
|
89
|
+
async function actionSyncFilesToTargets(tsPaths) {
|
|
90
|
+
const { targets } = Sonamu.config.sync;
|
|
98
91
|
const { dir: apiDir } = Sonamu.config.api;
|
|
99
92
|
return (await Promise.all(targets.map(async (target) => Promise.all(tsPaths.map(async (realSrc) => {
|
|
100
93
|
const dst = realSrc.replace(`/${apiDir}/`, `/${target}/`).replace("/application/", "/services/");
|
|
@@ -209,4 +202,4 @@ var init_syncer_actions = __esmMin((() => {
|
|
|
209
202
|
//#endregion
|
|
210
203
|
init_syncer_actions();
|
|
211
204
|
export { actionCopySharedToTargetsIfNotExists, actionGenerateHttps, actionGenerateInitialTypes, actionGenerateSchemas, actionGenerateServices, actionGenerateSsrEntryServerIfNotExists, actionGenerateSsrQueries, actionSyncConfig, actionSyncFilesToTargets, actionSyncSonamuDictionary, init_syncer_actions };
|
|
212
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vLyB3ZWIvLnNvbmFtdS5lbnYg7JeQIO2YhOyerCDshKTsoJXqsJIg7KCA7J6lXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0NvbmZpZygpIHtcbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSBTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4gPz8ge307XG4gIGNvbnN0IGNvbnRlbnQgPSBgQVBJX0hPU1Q9JHtob3N0ID8/IFwibG9jYWxob3N0XCJ9XFxuQVBJX1BPUlQ9JHtwb3J0ID8/IDMwMDB9YDtcblxuICBOYWl0ZS50KFwiYWN0aW9uU3luY0NvbmZpZ1wiLCB7IGNvbnRlbnQgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5Tb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCIuc29uYW11LmVudlwiKSwgY29udGVudCk7XG4gICAgfSksXG4gICAgZ2VuZXJhdGVUZW1wbGF0ZShcImdlbmVyYXRlZF9zc29cIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIHBhcmFtc0FycmF5XG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzKFxuICBwYXJhbXNBcnJheToge1xuICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgfVtdLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBOYWl0ZS50KFwiYWN0aW9uR2VuZXJhdGVTZXJ2aWNlc1wiLCBwYXJhbXNBcnJheSk7XG5cbiAgLy8gc2VydmljZXMuZ2VuZXJhdGVkLnRzIO2Gte2VqSDtjIzsnbwg7IOd7ISxXG4gIGNvbnN0IHNlcnZpY2VzRmlsZSA9IGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXG4gICAgXCJzZXJ2aWNlc1wiLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBbLi4uc2VydmljZXNGaWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHnsl5Ag65S466awIOy0iOq4sCB0eXBlcy50c+ulvCDrp4zrk6TslrTspI3ri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5SWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSW5pdGlhbFR5cGVzKGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIHJldHVybiBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQudHPsmYAgc29uYW11LmdlbmVyYXRlZC5zc28udHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICBdKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZUh0dHBzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IFtyZXNdID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcImdlbmVyYXRlZF9odHRwXCIsXG4gICAgeyBlbnRpdHlJZDogXCJkdW1teVwiIH0sXG4gICAgeyBvdmVyd3JpdGU6IHRydWUgfSxcbiAgKTtcbiAgYXNzZXJ0KHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogcXVlcmllcy5nZW5lcmF0ZWQudHMg7J6s7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JRdWVyaWVzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOulvCDsg53shLHtlanri4jri6QuXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqIOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5zrnbwg66ek67KIIG92ZXJ3cml0ZeuKlCBtdGltZeunjCDqsLHsi6DtlZjripQg7J2Y66+4IOyXhuuKlCDrj5nsnpEuXG4gKiDthZztlIzrpr8g7J6Q7LK06rCAIOuzgOqyveuQnCDqsr3smrAoU29uYW11IOyXheq3uOugiOydtOuTnCnsl5DripQg7IKs7Jqp7J6Q6rCAIO2MjOydvOydhCDsgq3soJztlZwg65KkIHN5bmProZwg7J6s7IOd7ISxLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0ICjsnbTrr7gg7J6I7Jy866m0IOu5iCDrsLDsl7QpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JFbnRyeVNlcnZlcklmTm90RXhpc3RzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZ2VuZXJhdGVUZW1wbGF0ZeydgCBvdmVyd3JpdGU6IGZhbHNl7JeQ7IScIO2MjOydvOydtCDsnbTrr7gg7J6I7Jy866m0IOyYiOyZuOulvCDrjZjsp5Hri4jri6QuXG4gICAgLy8gSWZOb3RFeGlzdHMg7J2Y66+47IOBIFwi6re464OlIOuGlOuRlOuLpFwi6rCAIOygleyDgeydtOuvgOuhnCDruYgg67Cw7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIOyjvOyWtOynhCAudHMg7YyM7J2865OkKGFwaeyXkCDsnojri6Tqs6Ag6rCA7KCVKeydhCDtg4Dqsp8g65SU66CJ7Yag66as7J2YIHNlcnZpY2Vz7JeQIOqwluuLpCDrkaHri4jri6QuXG4gKiDsnbTrlYwg64K067aA7J2YIHNvbmFtdSBpbXBvcnTripQgc29uYW11LnNoYXJlZC50cyBpbXBvcnTroZwg7LmY7ZmY65CY6rOgLFxuICog6rK966Gc7J2YIC9hcHBsaWNhdGlvbi/snYAgL3NlcnZpY2VzL+uhnCDsuZjtmZjrkKnri4jri6QuXG4gKlxuICog6riw67O47J2AIFNvbmFtdS5jb25maWcuc3luYy50YXJnZXRzIOyghOyytOulvCDrjIDsg4HsnLzroZwg7ZWY66mwLFxuICogb25seVRhcmdldHNTdGFydGluZ1dpdGgg7ZmU7J207Yq466as7Iqk7Yq466GcIOydvOu2gCB0YXJnZXTsl5Drp4wg67aE67Cw7ZWgIOyImCDsnojsirXri4jri6QuXG4gKiDqsIDrn4kgU1NSLW9ubHnsnbggcXVlcmllcy5nZW5lcmF0ZWQudHPqsJnsnYAg7Lmc6rWs65Ok7J2AIFwid2ViXCLsnLzroZwg7Iuc7J6R7ZWY64qUIO2DgOqyn+uTpOyXkOunjCDrs7Trgrwg7IiYIOyeiOyWtOyalC5cbiAqIFtcIndlYlwiXeycvOuhnCDrhJjquLDrqbQgd2ViLCB3ZWItYWRtaW4sIHdlYmFwcCDrk7Hsl5Ag66qo65GQIOunpOy5mOuQqeuLiOuLpC5cbiAqXG4gKiBAcGFyYW0gdHNQYXRocyDrs7XsgqztlaAg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZxcbiAqIEBwYXJhbSBvbmx5VGFyZ2V0c1N0YXJ0aW5nV2l0aCDrtoTrsLDtlaAgdGFyZ2V0IOygkeuRkOyWtOuTpOydmCDtmZTsnbTtirjrpqzsiqTtirguIOuvuOyngOyglSDsi5wg66qo65OgIHRhcmdldC5cbiAqIEByZXR1cm5zIOqwgSDtg4Dqsp/sl5Ag67O17IKs65CcIO2MjOydvOuTpOydmCDsoIjrjIAg6rK966GcIOuwsOyXtCAoZmxhdCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25TeW5jRmlsZXNUb1RhcmdldHMoXG4gIHRzUGF0aHM6IEFic29sdXRlUGF0aFtdLFxuICBvbmx5VGFyZ2V0c1N0YXJ0aW5nV2l0aD86IHN0cmluZ1tdLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBhbGxUYXJnZXRzID0gU29uYW11LmNvbmZpZy5zeW5jLnRhcmdldHM7XG4gIGNvbnN0IHRhcmdldHMgPSBvbmx5VGFyZ2V0c1N0YXJ0aW5nV2l0aFxuICAgID8gYWxsVGFyZ2V0cy5maWx0ZXIoKHQpID0+IG9ubHlUYXJnZXRzU3RhcnRpbmdXaXRoLnNvbWUoKHByZWZpeCkgPT4gdC5zdGFydHNXaXRoKHByZWZpeCkpKVxuICAgIDogYWxsVGFyZ2V0cztcbiAgY29uc3QgeyBkaXI6IGFwaURpciB9ID0gU29uYW11LmNvbmZpZy5hcGk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRhcmdldHMubWFwKGFzeW5jICh0YXJnZXQpID0+XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHRzUGF0aHMubWFwKGFzeW5jIChyZWFsU3JjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkc3QgPSByZWFsU3JjXG4gICAgICAgICAgICAgIC5yZXBsYWNlKGAvJHthcGlEaXJ9L2AsIGAvJHt0YXJnZXR9L2ApXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiL2FwcGxpY2F0aW9uL1wiLCBcIi9zZXJ2aWNlcy9cIik7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSBkaXJuYW1lKGRzdCk7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBleGlzdHMoZGlyKSkpIHtcbiAgICAgICAgICAgICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICAgICAgICAgIFwiLyoqXCIsXG4gICAgICAgICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICAgICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgICAgICAgXCIgKi9cIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICAgICAgICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQocmVhbFNyYywgZHN0LCBzeW5jSGVhZGVyKTtcbiAgICAgICAgICAgIGF3YWl0IHRyYWNrV3JpdHRlbihkc3QgYXMgQWJzb2x1dGVQYXRoKTtcbiAgICAgICAgICAgICFpc1Rlc3QoKSAmJlxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKGRzdC5yZXBsYWNlKGAke1NvbmFtdS5hcHBSb290UGF0aH0vYCwgXCJcIikpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGRzdDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzaGFyZWQg7YWc7ZSM66a/7Jy866Gc67aA7YSwIHNvbmFtdS5zaGFyZWQudHMg7YyM7J287J2EIOunjOuTpOyWtOyEnCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOyXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7YyM7J287J2EIOunjOuTnOuKlCDqs7zsoJXsl5DshJwg7Jes65+sIOy5mO2ZmCDqsIDqs7XsnbQg7J287Ja064Kp64uI64ukLlxuICpcbiAqIOuLpOuluCDslaHshZjrk6Tqs7wg64us66asLCDsnbTrr7gg7YyM7J287J20IOyeiOycvOuptCDqt7jrg6Ug64aU65Gh64uI64ukLiDqt7jrnpjshJwg7ZWo7IiYIOydtOumhCDrgZ3sl5Ag7I2o64ao7Ja07JqUIOOFjlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uQ29weVNoYXJlZFRvVGFyZ2V0c0lmTm90RXhpc3RzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHRhcmdldHMgfSA9IFNvbmFtdS5jb25maWcuc3luYztcblxuICAvLyBwbHVyYWwudHMg64K07Jqp7J2EIOydveyWtOyEnCBzaGFyZWQg7YyM7J287JeQIOyCveyehe2VqeuLiOuLpC5cbiAgY29uc3QgZGljdFV0aWxzUGF0aCA9IHBhdGguam9pbihcbiAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICBcIi4uL2RpY3QvdXRpbHMudHNcIixcbiAgKTtcbiAgY29uc3QgZGljdFV0aWxzQ29kZSA9IChhd2FpdCBleGlzdHMoZGljdFV0aWxzUGF0aCkpID8gYXdhaXQgcmVhZEZpbGUoZGljdFV0aWxzUGF0aCwgXCJ1dGYtOFwiKSA6IFwiXCI7XG5cbiAgLy8g7Yq57KCVIOuzgOyImCDsuZjtmZjsnYQg7JyE7ZW07IScIOyCrOyaqe2VqeuLiOuLpC5cbiAgY29uc3QgY29udmVydE1hcCA9IHtcbiAgICBiYXNlVXJsOlxuICAgICAgU29uYW11LmNvbmZpZy5zZXJ2ZXIuYmFzZVVybCA/P1xuICAgICAgYGh0dHA6Ly8ke1NvbmFtdS5jb25maWcuc2VydmVyLmxpc3Rlbj8uaG9zdCA/PyBcImxvY2FsaG9zdFwifToke1NvbmFtdS5jb25maWcuc2VydmVyLmxpc3Rlbj8ucG9ydCA/PyAzMDAwfWAsXG4gICAgZGljdFV0aWxzOiBkaWN0VXRpbHNDb2RlLFxuICB9O1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAvLyDsp4DquIgg6rCA7KC46rCA66Ck64qUIOydtCDtjIzsnbzsnYAgU29uYW11IOy9lOuTnOuyoOydtOyKpOydmCDsnbzrtoDsnoXri4jri6QuXG4gICAgLy8g6re465+w642wIGRpc3Qg7IaNIOu5jOuTnOuQnCDshozsiqQg7L2U65OcIO2MjOydvOydtCDtlYTsmpTtlZwg6rKD7J20IOyVhOuLiOqzoCwgc3Jj7JeQ66eMIOyeiOuKlCDthY3siqTtirgg7YyM7J287J20IO2VhOyalO2VqeuLiOuLpC5cbiAgICAvLyDrlLDrnbzshJwgL3NyYy/sl5DshJwg7LC+7Iq164uI64ukLlxuICAgIGNvbnN0IHNyY1BhdGggPSBwYXRoLmpvaW4oXG4gICAgICBpbXBvcnQubWV0YS5kaXJuYW1lLnJlcGxhY2UoXCIvZGlzdC9cIiwgXCIvc3JjL1wiKSxcbiAgICAgIGAuLi9zaGFyZWQvJHt0YXJnZXR9LnNoYXJlZC50cy50eHRgLFxuICAgICk7XG4gICAgaWYgKCEoYXdhaXQgZXhpc3RzKHNyY1BhdGgpKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQpKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGNvcHkgc29uYW11LnNoYXJlZC50cyB0byB0YXJnZXQgJyR7dGFyZ2V0fScgYnV0IHRoZSB0YXJnZXQgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiBQbGVhc2UgY2hlY2sgeW91ciBwcm9qZWN0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFRleHQgPSBhd2FpdCByZWFkRmlsZShzcmNQYXRoLCBcInV0Zi04XCIpO1xuICAgIGNvbnN0IGNvbnZlcnRlZFRleHQgPSBPYmplY3QuZW50cmllcyhjb252ZXJ0TWFwKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IGFjYy5yZXBsYWNlKGAkW1ske2tleX1dXWAsIHZhbHVlKSxcbiAgICAgIGZ1bGxUZXh0LFxuICAgICk7XG5cbiAgICAvLyDsnbTqsbQg7ZSE66Gc7KCd7Yq47JeQIC50cyDshozsiqQg7L2U65OcIO2MjOydvOydhCDsg53shLHtlZjripQg6rKD7J2066+A66GcIHNyY+ydmCAudHMg6rK966Gc66GcIOqwkeuLiOuLpC5cbiAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCJzcmMvc2VydmljZXMvc29uYW11LnNoYXJlZC50c1wiKTtcblxuICAgIC8vIOygleunkCDtmLnsi5zrgpjsp4Drp4wgdGFyZ2V0IOuUlOugie2GoOumrOuKlCDsnojslrTrj4Qgc3JjL3NlcnZpY2VzIOuUlOugie2GoOumrOuKlCDsl4bsnYQg7IiYIOyeiOycvOuvgOuhnCDrr7jrpqwg7IOd7ISx7ZW07KSN64uI64ukLlxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhwYXRoLmRpcm5hbWUoZGVzdFBhdGgpKSkpIHtcbiAgICAgIGF3YWl0IG1rZGlyKHBhdGguZGlybmFtZShkZXN0UGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29uc29sZS53YXJuKGBDcmVhdGVkIGRpcmVjdG9yeSAnJHtwYXRoLmRpcm5hbWUoZGVzdFBhdGgpfScgYmVjYXVzZSBpdCBkaWQgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIC8vIO2MjOydvOydtCDsnbTrr7gg7KG07J6s7ZWY66m0IOqxtOuEiOucgeuLiOuLpC5cbiAgICAvLyBzb25hbXUuc2hhcmVkLnRz64qUIO2UhOuhnOygne2KuOyXkOyEnCDsnpDsnKDroa3qsowg7Luk7Iqk7YSw66eI7J207KeV7ZWgIOyImCDsnojslrTslbwg7ZWY66+A66GcLFxuICAgIC8vIOy1nOy0iCAx7ZqM66eMIOyDneyEse2VmOqzoCDsnbTtm4Tsl5DripQg642u7Ja07JOw7KeAIOyViuyKteuLiOuLpC5cbiAgICAvLyDthZztlIzrpr8g64K07JqpKCRbW2RpY3RVdGlsc11dIOuTsSnsnbQg67OA6rK965CY7JeI7J2EIOuVjCDrsJjsmIHsnbQg7ZWE7JqU7ZWY66m0LFxuICAgIC8vIO2VtOuLuSDtjIzsnbzsnYQg7IKt7KCc7ZWcIOuSpCBgcG5wbSBzb25hbXUgc3luY2DroZwg7J6s7IOd7ISx7ZWY66m0IOuQqeuLiOuLpC5cbiAgICBpZiAoYXdhaXQgZXhpc3RzKGRlc3RQYXRoKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGRlc3RQYXRoLCBhd2FpdCBmb3JtYXRDb2RlKGNvbnZlcnRlZFRleHQsIGRlc3RQYXRoKSk7XG4gICAgIWlzVGVzdCgpICYmXG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKFwiQ29waWVkOiBcIikgKyBjaGFsay5ibHVlKHBhdGgucmVsYXRpdmUoU29uYW11LmFwcFJvb3RQYXRoLCBkZXN0UGF0aCkpKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvbmFtdSBEaWN0aW9uYXJ5KFNEKeulvCDrqqjrk6Ag7YOA6rKfKGFwaSArIHdlYi9hcHAg65OxKeyXkCDrj5nquLDtmZTtlanri4jri6QuXG4gKlxuICog6rCBIO2DgOqyn+yXkCDrjIDtlbQ6XG4gKiAtIHRhcmdldOydtCBhcGnqsIAg7JWE64uI66m0IOyCrOyaqeyekCDsnpHshLEgbG9jYWxlIO2MjOydvChrby50cy9lbi50cy8uLi4p7J2EIGFwaSDihpIgdGFyZ2V07Jy866GcIOuzteyCrFxuICogLSBzZCDthZztlIzrpr/snYQg66CM642U66eB7ZW07IScIHNkLmdlbmVyYXRlZC50cyDsg53shLEgKG92ZXJ3cml0ZSlcbiAqXG4gKiDtlZwg7YOA6rKf7JeQ7IScIOyLpO2MqO2VtOuPhCDri6Trpbgg7YOA6rKf7J2AIOqzhOyGjSDsp4Ttlontlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25TeW5jU29uYW11RGljdGlvbmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IGkxOG5Db25maWcgPSBTb25hbXUuY29uZmlnLmkxOG47XG5cbiAgY29uc3QgdGFyZ2V0TGlzdCA9IFtcImFwaVwiLCAuLi50YXJnZXRzXSBhcyAoXCJhcGlcIiB8IFwid2ViXCIgfCBcImFwcFwiKVtdO1xuXG4gIGNvbnN0IGFwaUkxOG5EaXIgPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCBTb25hbXUuY29uZmlnLmFwaS5kaXIsIFwic3JjL2kxOG5cIik7XG5cbiAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0TGlzdCkge1xuICAgIHRyeSB7XG4gICAgICAvLyB3ZWIvYXBw7J2YIOqyveyasCBsb2NhbGUg7YyM7J2865Ok7J2EIGFwaeyXkOyEnCDrs7XsgqxcbiAgICAgIGlmICh0YXJnZXQgIT09IFwiYXBpXCIpIHtcbiAgICAgICAgYXdhaXQgc3luY0xvY2FsZUZpbGVzKHRhcmdldCwgYXBpSTE4bkRpciwgaTE4bkNvbmZpZy5zdXBwb3J0ZWRMb2NhbGVzKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcInNkXCIsIHsgdGFyZ2V0IH0sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBnZW5lcmF0ZSBTRCB0ZW1wbGF0ZSBmb3IgJHt0YXJnZXR9OmAsIGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGFwaeydmCBsb2NhbGUg7YyM7J287J2EIHdlYi9hcHDsnLzroZwg67O17IKs7ZWp64uI64ukLlxuICovXG5hc3luYyBmdW5jdGlvbiBzeW5jTG9jYWxlRmlsZXMoXG4gIHRhcmdldDogc3RyaW5nLFxuICBhcGlJMThuRGlyOiBzdHJpbmcsXG4gIGxvY2FsZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRhcmdldEkxOG5EaXIgPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL2kxOG5cIik7XG5cbiAgLy8g65SU66CJ7Yag66as6rCAIOyXhuycvOuptCDsg53shLFcbiAgYXdhaXQgbWtkaXIodGFyZ2V0STE4bkRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oYXBpSTE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4odGFyZ2V0STE4bkRpciwgYCR7bG9jYWxlfS50c2ApO1xuXG4gICAgY29uc3Qgc3luY0hlYWRlciA9IFtcbiAgICAgIFwiLyoqXCIsXG4gICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgIFwiICogQVBJ7JeQ7IScIOuPmeq4sO2ZlOuQnCDtjIzsnbzsnoXri4jri6QuIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgXCIgKi9cIixcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgY29weUZpbGVXaXRoUmVwbGFjZUNvcmVUb1NoYXJlZChzb3VyY2VGaWxlLCB0YXJnZXRGaWxlLCBzeW5jSGVhZGVyKTtcbiAgICBhd2FpdCB0cmFja1dyaXR0ZW4odGFyZ2V0RmlsZSBhcyBBYnNvbHV0ZVBhdGgpO1xuICAgICFpc1Rlc3QoKSAmJlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuY3lhbihgJHt0YXJnZXR9L3NyYy9pMThuLyR7bG9jYWxlfS50c2ApKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFrQkEsZUFBc0IsbUJBQW1CO0NBQ3ZDLE1BQU0sRUFBRSxNQUFNLFNBQVMsT0FBTyxPQUFPLE9BQU8sVUFBVSxFQUFFO0NBQ3hELE1BQU0sVUFBVSxZQUFZLFFBQVEsWUFBWSxhQUFhLFFBQVE7QUFFckUsT0FBTSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsQ0FBQztBQUN4QyxPQUFNLFFBQVEsSUFBSSxDQUNoQixHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLFdBQVc7QUFDbEQsUUFBTSxVQUFVLEtBQUssS0FBSyxPQUFPLGFBQWEsUUFBUSxjQUFjLEVBQUUsUUFBUTtHQUM5RSxFQUNGLGlCQUFpQixpQkFBaUIsRUFBRSxFQUFFLEVBQUUsV0FBVyxNQUFNLENBQUMsQ0FDM0QsQ0FBQzs7Ozs7OztBQVFKLGVBQXNCLHVCQUNwQixhQUd5QjtBQUN6QixPQUFNLEVBQUUsMEJBQTBCLFlBQVk7Q0FHOUMsTUFBTSxlQUFlLE1BQU0saUJBQ3pCLFlBQ0EsRUFBRSxFQUNGLEVBQ0UsV0FBVyxNQUNaLENBQ0Y7QUFFRCxRQUFPLENBQUMsR0FBRyxhQUFhOzs7Ozs7QUFPMUIsZUFBc0IsMkJBQTJCLFVBQTJDO0FBQzFGLFFBQU8saUJBQWlCLGNBQWMsRUFBRSxVQUFVLENBQUM7Ozs7OztBQU9yRCxlQUFzQix3QkFBaUQ7QUFDckUsU0FDRSxNQUFNLFFBQVEsSUFBSSxDQUNoQixpQkFBaUIsaUJBQWlCLEVB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
|
|
205
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLWFjdGlvbnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNlci9zeW5jZXItYWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7IG1rZGlyLCByZWFkRmlsZSwgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCwgeyBkaXJuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24gfSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkLCBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IHR5cGUgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUgfSBmcm9tIFwiLi9jb2RlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHJhY2tXcml0dGVuIH0gZnJvbSBcIi4vZmlsZS10cmFja2luZ1wiO1xuXG4vLyB3ZWIvLnNvbmFtdS5lbnYg7JeQIO2YhOyerCDshKTsoJXqsJIg7KCA7J6lXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY0NvbmZpZygpIHtcbiAgY29uc3QgeyBob3N0LCBwb3J0IH0gPSBTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4gPz8ge307XG4gIGNvbnN0IGNvbnRlbnQgPSBgQVBJX0hPU1Q9JHtob3N0ID8/IFwibG9jYWxob3N0XCJ9XFxuQVBJX1BPUlQ9JHtwb3J0ID8/IDMwMDB9YDtcblxuICBOYWl0ZS50KFwiYWN0aW9uU3luY0NvbmZpZ1wiLCB7IGNvbnRlbnQgfSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAuLi5Tb25hbXUuY29uZmlnLnN5bmMudGFyZ2V0cy5tYXAoYXN5bmMgKHRhcmdldCkgPT4ge1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgXCIuc29uYW11LmVudlwiKSwgY29udGVudCk7XG4gICAgfSksXG4gICAgZ2VuZXJhdGVUZW1wbGF0ZShcImdlbmVyYXRlZF9zc29cIiwge30sIHsgb3ZlcndyaXRlOiB0cnVlIH0pLFxuICBdKTtcbn1cblxuLyoqXG4gKiBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIHBhcmFtc0FycmF5XG4gKiBAcmV0dXJucyDsg53shLHrkJwg7YyM7J28IOqyveuhnCDrsLDsl7QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZVNlcnZpY2VzKFxuICBwYXJhbXNBcnJheToge1xuICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgfVtdLFxuKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICBOYWl0ZS50KFwiYWN0aW9uR2VuZXJhdGVTZXJ2aWNlc1wiLCBwYXJhbXNBcnJheSk7XG5cbiAgLy8gc2VydmljZXMuZ2VuZXJhdGVkLnRzIO2Gte2VqSDtjIzsnbwg7IOd7ISxXG4gIGNvbnN0IHNlcnZpY2VzRmlsZSA9IGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXG4gICAgXCJzZXJ2aWNlc1wiLFxuICAgIHt9LFxuICAgIHtcbiAgICAgIG92ZXJ3cml0ZTogdHJ1ZSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBbLi4uc2VydmljZXNGaWxlXTtcbn1cblxuLyoqXG4gKiBFbnRpdHnsl5Ag65S466awIOy0iOq4sCB0eXBlcy50c+ulvCDrp4zrk6TslrTspI3ri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5SWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkdlbmVyYXRlSW5pdGlhbFR5cGVzKGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPEFic29sdXRlUGF0aFtdPiB7XG4gIHJldHVybiBnZW5lcmF0ZVRlbXBsYXRlKFwiaW5pdF90eXBlc1wiLCB7IGVudGl0eUlkIH0pO1xufVxuXG4vKipcbiAqIHNvbmFtdS5nZW5lcmF0ZWQudHPsmYAgc29uYW11LmdlbmVyYXRlZC5zc28udHPrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTY2hlbWFzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIChcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkX3Nzb1wiLCB7fSwgeyBvdmVyd3JpdGU6IHRydWUgfSksXG4gICAgICBnZW5lcmF0ZVRlbXBsYXRlKFwiZ2VuZXJhdGVkXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KSxcbiAgICBdKVxuICApLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhY3Rpb25HZW5lcmF0ZUh0dHBzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoPiB7XG4gIGNvbnN0IFtyZXNdID0gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcbiAgICBcImdlbmVyYXRlZF9odHRwXCIsXG4gICAgeyBlbnRpdHlJZDogXCJkdW1teVwiIH0sXG4gICAgeyBvdmVyd3JpdGU6IHRydWUgfSxcbiAgKTtcbiAgYXNzZXJ0KHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogcXVlcmllcy5nZW5lcmF0ZWQudHMg7J6s7IOd7ISx7ZWp64uI64ukLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JRdWVyaWVzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgcmV0dXJuIGdlbmVyYXRlVGVtcGxhdGUoXCJxdWVyaWVzXCIsIHt9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBlbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeOulvCDsg53shLHtlanri4jri6QuXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqIOyeheugpSDsnZjsobQg7JeG64qUIOygleyggSDsvZTrk5zrnbwg66ek67KIIG92ZXJ3cml0ZeuKlCBtdGltZeunjCDqsLHsi6DtlZjripQg7J2Y66+4IOyXhuuKlCDrj5nsnpEuXG4gKiDthZztlIzrpr8g7J6Q7LK06rCAIOuzgOqyveuQnCDqsr3smrAoU29uYW11IOyXheq3uOugiOydtOuTnCnsl5DripQg7IKs7Jqp7J6Q6rCAIO2MjOydvOydhCDsgq3soJztlZwg65KkIHN5bmProZwg7J6s7IOd7ISxLlxuICogQHJldHVybnMg7IOd7ISx65CcIO2MjOydvCDqsr3roZwg67Cw7Je0ICjsnbTrr7gg7J6I7Jy866m0IOu5iCDrsLDsl7QpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uR2VuZXJhdGVTc3JFbnRyeVNlcnZlcklmTm90RXhpc3RzKCk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVUZW1wbGF0ZShcImVudHJ5X3NlcnZlclwiLCB7fSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZ2VuZXJhdGVUZW1wbGF0ZeydgCBvdmVyd3JpdGU6IGZhbHNl7JeQ7IScIO2MjOydvOydtCDsnbTrr7gg7J6I7Jy866m0IOyYiOyZuOulvCDrjZjsp5Hri4jri6QuXG4gICAgLy8gSWZOb3RFeGlzdHMg7J2Y66+47IOBIFwi6re464OlIOuGlOuRlOuLpFwi6rCAIOygleyDgeydtOuvgOuhnCDruYgg67Cw7Je066GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEFscmVhZHlQcm9jZXNzZWRFeGNlcHRpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIOyjvOyWtOynhCAudHMg7YyM7J2865OkKGFwaeyXkCDsnojri6Tqs6Ag6rCA7KCVKeydhCDrqqjrk6Ag7YOA6rKfIOuUlOugie2GoOumrOydmCBzZXJ2aWNlc+yXkCDqsJbri6Qg65Gh64uI64ukLlxuICog7J2065WMIOuCtOu2gOydmCBzb25hbXUgaW1wb3J064qUIHNvbmFtdS5zaGFyZWQudHMgaW1wb3J066GcIOy5mO2ZmOuQmOqzoCxcbiAqIOqyveuhnOydmCAvYXBwbGljYXRpb24v7J2AIC9zZXJ2aWNlcy/roZwg7LmY7ZmY65Cp64uI64ukLlxuICpcbiAqIEBwYXJhbSB0c1BhdGhzIOuzteyCrO2VoCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnFxuICogQHJldHVybnMg6rCBIO2DgOqyn+yXkCDrs7XsgqzrkJwg7YyM7J2865Ok7J2YIOygiOuMgCDqsr3roZwg67Cw7Je0IChmbGF0KS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0c1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gIGNvbnN0IHsgZGlyOiBhcGlEaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcChhc3luYyAodGFyZ2V0KSA9PlxuICAgICAgICBQcm9taXNlLmFsbChcbiAgICAgICAgICB0c1BhdGhzLm1hcChhc3luYyAocmVhbFNyYykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHN0ID0gcmVhbFNyY1xuICAgICAgICAgICAgICAucmVwbGFjZShgLyR7YXBpRGlyfS9gLCBgLyR7dGFyZ2V0fS9gKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIi9hcHBsaWNhdGlvbi9cIiwgXCIvc2VydmljZXMvXCIpO1xuICAgICAgICAgICAgY29uc3QgZGlyID0gZGlybmFtZShkc3QpO1xuICAgICAgICAgICAgaWYgKCEoYXdhaXQgZXhpc3RzKGRpcikpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1rZGlyKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzeW5jSGVhZGVyID0gW1xuICAgICAgICAgICAgICBcIi8qKlwiLFxuICAgICAgICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgICAgICAgXCIgKiBBUEnsl5DshJwg64+Z6riw7ZmU65CcIO2MjOydvOyeheuLiOuLpC4g7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgICAgICAgIFwiICovXCIsXG4gICAgICAgICAgICBdLmpvaW4oXCJcXG5cIik7XG4gICAgICAgICAgICBhd2FpdCBjb3B5RmlsZVdpdGhSZXBsYWNlQ29yZVRvU2hhcmVkKHJlYWxTcmMsIGRzdCwgc3luY0hlYWRlcik7XG4gICAgICAgICAgICBhd2FpdCB0cmFja1dyaXR0ZW4oZHN0IGFzIEFic29sdXRlUGF0aCk7XG4gICAgICAgICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShkc3QucmVwbGFjZShgJHtTb25hbXUuYXBwUm9vdFBhdGh9L2AsIFwiXCIpKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkc3Q7XG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgKS5mbGF0KCk7XG59XG5cbi8qKlxuICogc2hhcmVkIO2FnO2UjOumv+ycvOuhnOu2gO2EsCBzb25hbXUuc2hhcmVkLnRzIO2MjOydvOydhCDrp4zrk6TslrTshJwg66qo65OgIO2DgOqynyDrlJTroInthqDrpqzsl5Ag6rCW64ukIOuRoeuLiOuLpC5cbiAqIO2MjOydvOydhCDrp4zrk5zripQg6rO87KCV7JeQ7IScIOyXrOufrCDsuZjtmZgg6rCA6rO17J20IOydvOyWtOuCqeuLiOuLpC5cbiAqXG4gKiDri6Trpbgg7JWh7IWY65Ok6rO8IOuLrOumrCwg7J2066+4IO2MjOydvOydtCDsnojsnLzrqbQg6re464OlIOuGlOuRoeuLiOuLpC4g6re4656Y7IScIO2VqOyImCDsnbTrpoQg64Gd7JeQIOyNqOuGqOyWtOyalCDjhY5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGlvbkNvcHlTaGFyZWRUb1RhcmdldHNJZk5vdEV4aXN0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG5cbiAgLy8gcGx1cmFsLnRzIOuCtOyaqeydhCDsnb3slrTshJwgc2hhcmVkIO2MjOydvOyXkCDsgr3snoXtlanri4jri6QuXG4gIGNvbnN0IGRpY3RVdGlsc1BhdGggPSBwYXRoLmpvaW4oXG4gICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgXCIuLi9kaWN0L3V0aWxzLnRzXCIsXG4gICk7XG4gIGNvbnN0IGRpY3RVdGlsc0NvZGUgPSAoYXdhaXQgZXhpc3RzKGRpY3RVdGlsc1BhdGgpKSA/IGF3YWl0IHJlYWRGaWxlKGRpY3RVdGlsc1BhdGgsIFwidXRmLThcIikgOiBcIlwiO1xuXG4gIC8vIO2KueyglSDrs4DsiJgg7LmY7ZmY7J2EIOychO2VtOyEnCDsgqzsmqntlanri4jri6QuXG4gIGNvbnN0IGNvbnZlcnRNYXAgPSB7XG4gICAgYmFzZVVybDpcbiAgICAgIFNvbmFtdS5jb25maWcuc2VydmVyLmJhc2VVcmwgPz9cbiAgICAgIGBodHRwOi8vJHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/Lmhvc3QgPz8gXCJsb2NhbGhvc3RcIn06JHtTb25hbXUuY29uZmlnLnNlcnZlci5saXN0ZW4/LnBvcnQgPz8gMzAwMH1gLFxuICAgIGRpY3RVdGlsczogZGljdFV0aWxzQ29kZSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgLy8g7KeA6riIIOqwgOyguOqwgOugpOuKlCDsnbQg7YyM7J287J2AIFNvbmFtdSDsvZTrk5zrsqDsnbTsiqTsnZgg7J2867aA7J6F64uI64ukLlxuICAgIC8vIOq3uOufsOuNsCBkaXN0IOyGjSDruYzrk5zrkJwg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnbQg7ZWE7JqU7ZWcIOqyg+ydtCDslYTri4jqs6AsIHNyY+yXkOunjCDsnojripQg7YWN7Iqk7Yq4IO2MjOydvOydtCDtlYTsmpTtlanri4jri6QuXG4gICAgLy8g65Sw65287IScIC9zcmMv7JeQ7IScIOywvuyKteuLiOuLpC5cbiAgICBjb25zdCBzcmNQYXRoID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0Lm1ldGEuZGlybmFtZS5yZXBsYWNlKFwiL2Rpc3QvXCIsIFwiL3NyYy9cIiksXG4gICAgICBgLi4vc2hhcmVkLyR7dGFyZ2V0fS5zaGFyZWQudHMudHh0YCxcbiAgICApO1xuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzcmNQYXRoKSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0KSkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBUcmllZCB0byBjb3B5IHNvbmFtdS5zaGFyZWQudHMgdG8gdGFyZ2V0ICcke3RhcmdldH0nIGJ1dCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGNoZWNrIHlvdXIgcHJvamVjdCBkaXJlY3Rvcnkgc3RydWN0dXJlLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxUZXh0ID0gYXdhaXQgcmVhZEZpbGUoc3JjUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICBjb25zdCBjb252ZXJ0ZWRUZXh0ID0gT2JqZWN0LmVudHJpZXMoY29udmVydE1hcCkucmVkdWNlKFxuICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiBhY2MucmVwbGFjZShgJFtbJHtrZXl9XV1gLCB2YWx1ZSksXG4gICAgICBmdWxsVGV4dCxcbiAgICApO1xuXG4gICAgLy8g7J206rG0IO2UhOuhnOygne2KuOyXkCAudHMg7IaM7IqkIOy9lOuTnCDtjIzsnbzsnYQg7IOd7ISx7ZWY64qUIOqyg+ydtOuvgOuhnCBzcmPsnZggLnRzIOqyveuhnOuhnCDqsJHri4jri6QuXG4gICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIFwic3JjL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWQudHNcIik7XG5cbiAgICAvLyDsoJXrp5Ag7Zi57Iuc64KY7KeA66eMIHRhcmdldCDrlJTroInthqDrpqzripQg7J6I7Ja064+EIHNyYy9zZXJ2aWNlcyDrlJTroInthqDrpqzripQg7JeG7J2EIOyImCDsnojsnLzrr4DroZwg66+466asIOyDneyEse2VtOykjeuLiOuLpC5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMocGF0aC5kaXJuYW1lKGRlc3RQYXRoKSkpKSB7XG4gICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZGVzdFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ3JlYXRlZCBkaXJlY3RvcnkgJyR7cGF0aC5kaXJuYW1lKGRlc3RQYXRoKX0nIGJlY2F1c2UgaXQgZGlkIG5vdCBleGlzdC5gKTtcbiAgICB9XG5cbiAgICAvLyDtjIzsnbzsnbQg7J2066+4IOyhtOyerO2VmOuptCDqsbTrhIjrnIHri4jri6QuXG4gICAgLy8gc29uYW11LnNoYXJlZC50c+uKlCDtlITroZzsoJ3tirjsl5DshJwg7J6Q7Jyg66Gt6rKMIOy7pOyKpO2EsOuniOydtOynle2VoCDsiJgg7J6I7Ja07JW8IO2VmOuvgOuhnCxcbiAgICAvLyDstZzstIggMe2ajOunjCDsg53shLHtlZjqs6Ag7J207ZuE7JeQ64qUIOuNruyWtOyTsOyngCDslYrsirXri4jri6QuXG4gICAgLy8g7YWc7ZSM66a/IOuCtOyaqSgkW1tkaWN0VXRpbHNdXSDrk7Ep7J20IOuzgOqyveuQmOyXiOydhCDrlYwg67CY7JiB7J20IO2VhOyalO2VmOuptCxcbiAgICAvLyDtlbTri7kg7YyM7J287J2EIOyCreygnO2VnCDrkqQgYHBucG0gc29uYW11IHN5bmNg66GcIOyerOyDneyEse2VmOuptCDrkKnri4jri6QuXG4gICAgaWYgKGF3YWl0IGV4aXN0cyhkZXN0UGF0aCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShkZXN0UGF0aCwgYXdhaXQgZm9ybWF0Q29kZShjb252ZXJ0ZWRUZXh0LCBkZXN0UGF0aCkpO1xuICAgICFpc1Rlc3QoKSAmJlxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIkNvcGllZDogXCIpICsgY2hhbGsuYmx1ZShwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgZGVzdFBhdGgpKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBTb25hbXUgRGljdGlvbmFyeShTRCnrpbwg66qo65OgIO2DgOqynyhhcGkgKyB3ZWIvYXBwIOuTsSnsl5Ag64+Z6riw7ZmU7ZWp64uI64ukLlxuICpcbiAqIOqwgSDtg4Dqsp/sl5Ag64yA7ZW0OlxuICogLSB0YXJnZXTsnbQgYXBp6rCAIOyVhOuLiOuptCDsgqzsmqnsnpAg7J6R7ISxIGxvY2FsZSDtjIzsnbwoa28udHMvZW4udHMvLi4uKeydhCBhcGkg4oaSIHRhcmdldOycvOuhnCDrs7XsgqxcbiAqIC0gc2Qg7YWc7ZSM66a/7J2EIOugjOuNlOunge2VtOyEnCBzZC5nZW5lcmF0ZWQudHMg7IOd7ISxIChvdmVyd3JpdGUpXG4gKlxuICog7ZWcIO2DgOqyn+yXkOyEnCDsi6TtjKjtlbTrj4Qg64uk66W4IO2DgOqyn+ydgCDqs4Tsho0g7KeE7ZaJ7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgdGFyZ2V0cyB9ID0gU29uYW11LmNvbmZpZy5zeW5jO1xuICBjb25zdCBpMThuQ29uZmlnID0gU29uYW11LmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IHRhcmdldExpc3QgPSBbXCJhcGlcIiwgLi4udGFyZ2V0c10gYXMgKFwiYXBpXCIgfCBcIndlYlwiIHwgXCJhcHBcIilbXTtcblxuICBjb25zdCBhcGlJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgU29uYW11LmNvbmZpZy5hcGkuZGlyLCBcInNyYy9pMThuXCIpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldExpc3QpIHtcbiAgICB0cnkge1xuICAgICAgLy8gd2ViL2FwcOydmCDqsr3smrAgbG9jYWxlIO2MjOydvOuTpOydhCBhcGnsl5DshJwg67O17IKsXG4gICAgICBpZiAodGFyZ2V0ICE9PSBcImFwaVwiKSB7XG4gICAgICAgIGF3YWl0IHN5bmNMb2NhbGVGaWxlcyh0YXJnZXQsIGFwaUkxOG5EaXIsIGkxOG5Db25maWcuc3VwcG9ydGVkTG9jYWxlcyk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlVGVtcGxhdGUoXCJzZFwiLCB7IHRhcmdldCB9LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZ2VuZXJhdGUgU0QgdGVtcGxhdGUgZm9yICR7dGFyZ2V0fTpgLCBlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBhcGnsnZggbG9jYWxlIO2MjOydvOydhCB3ZWIvYXBw7Jy866GcIOuzteyCrO2VqeuLiOuLpC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3luY0xvY2FsZUZpbGVzKFxuICB0YXJnZXQ6IHN0cmluZyxcbiAgYXBpSTE4bkRpcjogc3RyaW5nLFxuICBsb2NhbGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0YXJnZXRJMThuRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgdGFyZ2V0LCBcInNyYy9pMThuXCIpO1xuXG4gIC8vIOuUlOugie2GoOumrOqwgCDsl4bsnLzrqbQg7IOd7ISxXG4gIGF3YWl0IG1rZGlyKHRhcmdldEkxOG5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gcGF0aC5qb2luKGFwaUkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcbiAgICBjb25zdCB0YXJnZXRGaWxlID0gcGF0aC5qb2luKHRhcmdldEkxOG5EaXIsIGAke2xvY2FsZX0udHNgKTtcblxuICAgIGNvbnN0IHN5bmNIZWFkZXIgPSBbXG4gICAgICBcIi8qKlwiLFxuICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICBcIiAqIEFQSeyXkOyEnCDrj5nquLDtmZTrkJwg7YyM7J287J6F64uI64ukLiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgIFwiICovXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIGF3YWl0IGNvcHlGaWxlV2l0aFJlcGxhY2VDb3JlVG9TaGFyZWQoc291cmNlRmlsZSwgdGFyZ2V0RmlsZSwgc3luY0hlYWRlcik7XG4gICAgYXdhaXQgdHJhY2tXcml0dGVuKHRhcmdldEZpbGUgYXMgQWJzb2x1dGVQYXRoKTtcbiAgICAhaXNUZXN0KCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoXCJDb3BpZWQ6IFwiKSArIGNoYWxrLmN5YW4oYCR7dGFyZ2V0fS9zcmMvaTE4bi8ke2xvY2FsZX0udHNgKSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLGVBQXNCLG1CQUFtQjtDQUN2QyxNQUFNLEVBQUUsTUFBTSxTQUFTLE9BQU8sT0FBTyxPQUFPLFVBQVUsRUFBRTtDQUN4RCxNQUFNLFVBQVUsWUFBWSxRQUFRLFlBQVksYUFBYSxRQUFRO0FBRXJFLE9BQU0sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLENBQUM7QUFDeEMsT0FBTSxRQUFRLElBQUksQ0FDaEIsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxXQUFXO0FBQ2xELFFBQU0sVUFBVSxLQUFLLEtBQUssT0FBTyxhQUFhLFFBQVEsY0FBYyxFQUFFLFFBQVE7R0FDOUUsRUFDRixpQkFBaUIsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLFdBQVcsTUFBTSxDQUFDLENBQzNELENBQUM7Ozs7Ozs7QUFRSixlQUFzQix1QkFDcEIsYUFHeUI7QUFDekIsT0FBTSxFQUFFLDBCQUEwQixZQUFZO0NBRzlDLE1BQU0sZUFBZSxNQUFNLGlCQUN6QixZQUNBLEVB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAKtD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGvF,KAAK,UAAU,GAAG;KACf,GAAG,IAAI,QAAQ,GAAG,YAAY,EAAE;CAClC,CAAC;AAEF,qBAAa,MAAM;IACjB,IAAI,EAAE,UAAU,CAAM;IACtB,KAAK,EAAE,WAAW,CAAM;IACxB,MAAM,EAAE,YAAY,CAAM;IAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAa;IACvD,YAAY,EAAE,YAAY,CAAsB;IAEhD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAQhC;;;;;;;;;;;;OAYG;IACG,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,YAAY,EAAE,QAAQ,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkChF,OAAO,CAAC,kCAAkC;YAc5B,mCAAmC;YAkBnC,wCAAwC;IAkDtD,+BAA+B,CAC7B,eAAe,EAAE,YAAY,GAC5B,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,EAAE;IAiB9B,aAAa;IAIb,cAAc;IAId,YAAY;IAIZ,iBAAiB;IAKjB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxC;;;;;;OAMG;IACG,aAAa,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC;IA2CtF,mBAAmB,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,UAAU;IAkB1D,OAAO,CAAC,aAAa;IA8Bf,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC/D,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"syncer.d.ts","sourceRoot":"","sources":["../../src/syncer/syncer.ts"],"names":[],"mappings":"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"}
|
package/dist/syncer/syncer.js
CHANGED
|
@@ -315,8 +315,7 @@ var init_syncer = __esmMin((() => {
|
|
|
315
315
|
});
|
|
316
316
|
await actionGenerateServices(params);
|
|
317
317
|
await actionGenerateHttps();
|
|
318
|
-
|
|
319
|
-
await actionSyncFilesToTargets(queries, ["web"]);
|
|
318
|
+
await actionGenerateSsrQueries();
|
|
320
319
|
}
|
|
321
320
|
async handleAuxiliarySymbolChanges(diffGroups) {
|
|
322
321
|
Naite.t("handleAuxiliarySymbolChanges", { diffGroups });
|
|
@@ -422,4 +421,4 @@ var init_syncer = __esmMin((() => {
|
|
|
422
421
|
//#endregion
|
|
423
422
|
init_syncer();
|
|
424
423
|
export { Syncer, init_syncer };
|
|
425
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLmpzIiwibmFtZXMiOlsiU3luY2VyQWN0aW9ucy5hY3Rpb25Db3B5U2hhcmVkVG9UYXJnZXRzSWZOb3RFeGlzdHMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyRW50cnlTZXJ2ZXJJZk5vdEV4aXN0cyIsInN5bmNUcmlnZ2VyaW5nUGF0aHM6IEFic29sdXRlUGF0aFtdIiwiU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZUluaXRpYWxUeXBlcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzIiwiU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMiLCJwYXJhbXM6IHtcbiAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgICB9W10iLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2VydmljZXMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlSHR0cHMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyUXVlcmllcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0NvbmZpZyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkiLCJrZXlzOiBUZW1wbGF0ZUtleVtdIiwicCIsInRhcmdldCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvc3luY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgdW5saW5rIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBob3QgfSBmcm9tIFwiQHNvbmFtdS1raXQvaG1yLWhvb2tcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gXCJtaW5pbWF0Y2hcIjtcbmltcG9ydCB7IGdyb3VwLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gXCIuLi90YXNrcy9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEdlbmVyYXRlT3B0aW9ucywgdHlwZSBQYXRoQW5kQ29kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVLZXkgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBtYXBBc3luYywgcmVkdWNlQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGNlbnRlclRleHQgfSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW5XaXRoR3JhY2VmdWxTaHV0ZG93biB9IGZyb20gXCIuLi91dGlscy9wcm9jZXNzLXV0aWxzXCI7XG5pbXBvcnQgeyBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMsIHJlbmV3Q2hlY2tzdW1zIH0gZnJvbSBcIi4vY2hlY2tzdW1cIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUsIHJlbmRlclRlbXBsYXRlIH0gZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eSwgZGVsRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5LW9wZXJhdGlvbnNcIjtcbmltcG9ydCB7IGdldENoZWNrc3VtUGF0dGVybkdyb3VwLCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4vZmlsZS1wYXR0ZXJuc1wiO1xuaW1wb3J0IHsgdHlwZSBGaWxlVHlwZSB9IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcbmltcG9ydCB7IGxvYWRBcGlzLCBsb2FkTW9kZWxzLCBsb2FkVHlwZXMsIGxvYWRXb3JrZmxvd3MgfSBmcm9tIFwiLi9tb2R1bGUtbG9hZGVyXCI7XG5pbXBvcnQgeyB0eXBlIExvYWRlZEFwaXMsIHR5cGUgTG9hZGVkTW9kZWxzLCB0eXBlIExvYWRlZFR5cGVzIH0gZnJvbSBcIi4vbW9kdWxlLWxvYWRlclwiO1xuaW1wb3J0ICogYXMgU3luY2VyQWN0aW9ucyBmcm9tIFwiLi9zeW5jZXItYWN0aW9uc1wiO1xuXG50eXBlIERpZmZHcm91cHMgPSB7XG4gIFtrZXkgaW4gRmlsZVR5cGVdOiBBYnNvbHV0ZVBhdGhbXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBTeW5jZXIge1xuICBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBtb2RlbHM6IExvYWRlZE1vZGVscyA9IHt9O1xuICB3b3JrZmxvd3M6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4gPSBuZXcgTWFwKCk7XG4gIGV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiDssrTtgazshKzsnbQg67OA6rK965CcIOu2gOu2hOyXkCDrjIDtlbQg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICogZGV2IOyEnOuyhOqwgCDsspjsnYwg65a07J2EIOuVjCwgc29uYW11IHN5bmMg7ZWgIOuVjCDsi6TtlonrkKnri4jri6QuIOydtO2bhOyXkOuKlCBzeW5jRnJvbVdhdGNoZXIg6rK966Gc66W8IO2DgOyalC5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7LSI6riwIOu2gO2KuOyKpO2KuOueqSEg7JaY64Sk65Ok7J2AIGlkZW1wb3RlbnTtlZjqs6Ag6rCA67ON6riwIOuVjOusuOyXkCDrrLTsp4DshLEg7Iuk7ZaJ7ZW064+EIOuQqeuLiOuLpC5cbiAgICAvLyDslpjrhKTrk6TsnYAgc29uYW11LmxvY2vsl5Ag65Ok7Ja06rCA7KeA64+EIOyViuqzoCDrlLDrnbzshJwgSE1SIOqyveuhnOulvCDtg4Dsp4Drj4Qg7JWK64qUIOy5nOq1rOuTpOyeheuLiOuLpC5cbiAgICAvLyDqt7jrnpjshJwg7JWE66y0IOuVjOuCmCDqt7jrg6Ug64+M66Ck7KO866m0IOuQmOuKlOuNsCwgc3luY0Zyb21XYXRjaGVy7JeQ7IScIOunpOuyiCDtlZjripQg6rKD7J2AIOuCreu5hOydtOuLiCDsl6zquLDshJwg7ZWcIOuyiOunjCDtlanri4jri6QuXG4gICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25Db3B5U2hhcmVkVG9UYXJnZXRzSWZOb3RFeGlzdHMoKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyRW50cnlTZXJ2ZXJJZk5vdEV4aXN0cygpO1xuXG4gICAgLy8g67CU64CQIOqyg+ydtCDsl4bsnLzrqbQg6re464OlIOuEmOyWtOqwgOyalC5cbiAgICBjb25zdCBjaGFuZ2VkRmlsZXMgPSBhd2FpdCBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMoKTtcbiAgICBpZiAoY2hhbmdlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmxhY2suYmdHcmVlbihjZW50ZXJUZXh0KFwiQWxsIGZpbGVzIGFyZSBzeW5jZWQhXCIpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g7Jes6riw7IScIOyLpOygnCDsi7Htgawg64+Z7J6R7J2EIOyImO2Wie2VqeuLiOuLpC5cbiAgICAvLyDri6Trp4wg7Iux7YGsIOykkeyXkCDtlITroZzshLjsiqTqsIAg7KO97Jy866m0IOq8rOyXrOuyhOumrOq4sCDrlYzrrLjsl5AsXG4gICAgLy8g7Iuc6re464SQ7JeQ64+EIOyeoOyLnCDrsoTti7gg7IiYIOyeiOuKlCDtmZjqsr0g7IaN7JeQ7IScIOyLse2BrOulvCDsi6Ttlontlanri4jri6QuXG4gICAgYXdhaXQgcnVuV2l0aEdyYWNlZnVsU2h1dGRvd24oXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIOyWmOqwgCDsi7Htgawg7J6R7JeFIOyImO2Wie2VmOuKlCDrs7jssrTsnoXri4jri6QuXG4gICAgICAgIGF3YWl0IHRoaXMuZG9TeW5jQWN0aW9ucyhjaGFuZ2VkRmlsZXMpO1xuXG4gICAgICAgIC8vIOyLse2BrCDslaHshZjsnbQg64Gd64KY66m0IO2VreyDgSDssrTtgazshKzsnYQg64uk7IucIOqwseyLoO2VqeuLiOuLpC5cbiAgICAgICAgYXdhaXQgcmVuZXdDaGVja3N1bXMoKTtcbiAgICAgIH0sXG4gICAgICB7IHdoZW5UaGlzSGFwcGVuczogXCJTSUdVU1IyXCIsIHdhaXRGb3JVcFRvOiAyMDAwMCB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog6rCV7KCcIO2SgC3si7Htgaw6IGxvY2vsnYQg66y07Iuc7ZWY6rOgIOyymOydjOu2gO2EsCDri6Tsi5wg7Iux7YGs7ZWp64uI64ukLlxuICAgKlxuICAgKiAqKuyCrOyaqeyymCoqOiBnaXQgcG9zdC1tZXJnZSBob29rLCBDSSwgZGV2IOyEnOuyhOydmCBgZmAg7ZWr7YKkLlxuICAgKiAqKuyLpO2MqCDslYjsoITshLEqKjog64+E7KSR7JeQIO2UhOuhnOyEuOyKpOqwgCDso73slrQgbG9jayDsl4bripQg7IOB7YOc66GcIOuCqOyVhOuPhCDrrLTtlbQg4oCUIOuLpOydjCBzeW5j7JeQ7IScXG4gICAqIGxvY2sg7JeG7Jy866m0IOyekOyXsOyKpOufveqyjCDtkoAt7Iux7YGs6rCAIO2KuOumrOqxsOuQmOyWtCDsg4ggbG9ja+ydtCDsnpHshLHrkKguXG4gICAqL1xuICBhc3luYyBmb3JjZVN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9ja1BhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNvbmFtdS5sb2NrXCIpO1xuICAgIGlmIChhd2FpdCBleGlzdHMobG9ja1BhdGgpKSB7XG4gICAgICBhd2FpdCB1bmxpbmsobG9ja1BhdGgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVy6rCAIGJhdGNo66GcIOuqqOydgCDrs4Dqsr0g7YyM7J2865Ok7JeQIOuMgO2VtCDtlZwg67KI7J2YIEhNUi9zeW5jIOyCrOydtO2BtOydhCDrj5Xri4jri6QuXG4gICAqXG4gICAqIEhNUuydgCBhcGkvc3JjIOyViOyXkOyEnCDsnbzslrTrgpjripQg66qo65OgIO2MjOydvOuTpOyXkCDrjIDtlbTshJwg7IiY7ZaJ7ZWp64uI64ukLlxuICAgKiBjaGVja3N1bVBhdHRlcm5Hcm91cCDrp6Tsua0g7Jes67aA7JmAIOustOq0gO2VmOqyjCBhcGkvc3JjIOyghOyytCDrjIDsg4HsnoXri4jri6QuXG4gICAqIOqwgOuguSBhcGkvc3JjL3V0aWxzL3N1YnNldC1sb2FkZXJzLnRzIOqwmeydgCDtjIzsnbzrj4Qg67OA6rK965CY66m0IEhNUuydgCDtlbTspI3ri4jri6QuXG4gICAqXG4gICAqIFN5bmPripQgY2hlY2tzdW1QYXR0ZXJuR3JvdXDsnLzroZwg66ek7Lmt65CY64qUIO2MjOydvOuTpOyXkCDrjIDtlbTshJzrp4wg7IiY7ZaJ7ZWp64uI64ukLlxuICAgKiDsl6zquLDsl5DripQgd2ViL3NyY+uCmCBhcHAvc3JjIOqwmeydgCDri6TrpbggdGFyZ2V07J2YIO2MjOydvOydtCDtj6ztlajrkKAg7IiYIOyeiOyKteuLiOuLpC5cbiAgICog7J2065+wIG5vbi1hcGkg6rK966Gc7J2YIO2MjOydvOuTpOydgCBITVLqs7zripQg7JWE66y0IOyDgeq0gOydtCDsl4bsnLzrr4DroZwsIGludmFsaWRhdGXsnYQg7ZWY7KeAIOyViuyKteuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVFdmVudHMgLSBwYXRoIOKGkiBldmVudCDrp7UuIGV2ZW5064qUIFwiY2hhbmdlXCIgfCBcImFkZFwiLlxuICAgKi9cbiAgYXN5bmMgaG1yQW5kU3luYyhmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBobXJBY3Rpb25SZXF1aXJlZEV2ZW50cyA9IHRoaXMuZXh0cmFjdEhtckFjdGlvblJlcXVpcmVkRmlsZUV2ZW50cyhmaWxlRXZlbnRzKTtcbiAgICBjb25zdCBzeW5jVHJpZ2dlcmluZ1BhdGhzID0gYXdhaXQgdGhpcy5leHRyYWN0U3luY1RyaWdnZXJpbmdGaWxlRXZlbnRQYXRocyhmaWxlRXZlbnRzKTtcblxuICAgIC8vIEhNUiDsmIHsl606IO2MjOydvCDsnbTrsqTtirgg7KSRIGFwaeydmCDrqqjrk4gg6re4656Y7ZSE7JeQIOyeiOuKlCDtjIzsnbzrk6Tsl5Ag64yA7ZWcIOuzgOuPmeydgCBobXJBY3Rpb25SZXF1aXJlZEV2ZW50c+uhnCDsnqHtnpnri4jri6QuXG4gICAgLy8g7J20IOy5nOq1rOuTpOydgCBpbnZhbGlkYXRlIOyymOumrO2VtOykjeuLiOuLpC5cbiAgICAvLyDsnbQg7Zi47Lac7J2AIOyVhOuemCBzeW5j67O064ukIOustOyhsOqxtCDrqLzsoIAg7J287Ja064KY7JW8IO2VqeuLiOuLpCFcbiAgICAvLyDsmZzrg5DtlZjrqbQgc3luY+yXkOyEnOuKlCDrs4Dqsr3rkJwgbW9kZWwg7L2U65Oc66W8IOyDiOuhnCBpbXBvcnTtlbTshJwg7LKY66as7ZW07JW8IO2VmOuKlCDqsr3smrDrj4Qg7J6I6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmludmFsaWRhdGVEZXBlbmRlbnRzQWZmZWN0ZWRCeUZpbGVFdmVudHMoaG1yQWN0aW9uUmVxdWlyZWRFdmVudHMpO1xuXG4gICAgLy8gU3luYyDsmIHsl606IGNoZWNrc3VtUGF0dGVybkdyb3Vw7JeQIOuqheyLnOuQnCDtjIzsnbzrk6Tsl5Ag64yA7ZWcIOuzgOuPmeydgCBzeW5jVHJpZ2dlcmluZ1BhdGhz66GcIOyeoe2emeuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok7J2AIOyggeygiO2VnCBzeW5jIOyekeyXheycvOuhnCDrjIDsnZHtlanri4jri6QuXG4gICAgaWYgKHN5bmNUcmlnZ2VyaW5nUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5kb1N5bmNBY3Rpb25zKHN5bmNUcmlnZ2VyaW5nUGF0aHMpO1xuICAgIH1cblxuICAgIC8vIOyLse2BrCDsnpHsl4XsnbQg64Gd64Ks7Jy866m0IOustOyngOyEsSDroZzrk5zrpbwg7IiY7ZaJ7ZWp64uI64ukLlxuICAgIC8vIOyLse2BrOulvCDslYgg7ZWcIOqyveyasOyXkOuPhCDroZzrk5zripQg7ZW07JW8IO2VtOyalC4g7JyE7JeQ7IScIOq0gOugqOyeiOuKlCDsuZzqtazrk6TsnYAg64ukIGludmFsaWRhdGUg65CY7JeI6rGw65Og7JqUIVxuICAgIC8vXG4gICAgLy8g67OA6rK965CcIO2MjOydvOuTpOyXkCDrjIDtlbTshJwg7IOI66Gt6rKMIOuLueqyqOyYpOuKlChsb2FkKSDtlonsnITripQgZG9TeW5jQWN0aW9uc+yXkOyEnCDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIGRvU3luY0FjdGlvbnPsl5DshJzripQg7YyM7J287J2EIOydveqzoCDrp4zrk5zripQg7Iux7YGsIO2WieychOunjCDtlanri4jri6QuXG4gICAgLy8g6rGw6riw7IScIOuUsSDrs4Dqsr3rkJwg67aA67aE7JeQIOyYge2Wpeuwm+uKlCBhdXRvbG9hZOunjCDshKDrs4TtlbTshJwg7IiY7ZaJ7ZWY66Ck66m0IOuEiOustCDsp4DsoIDrtoTtlZjqs6Ag67O17J6h7ZW07KeR64uI64ukLlxuICAgIC8vXG4gICAgLy8g7Y287Y+s66i87IqkIOyYge2WpeydgCDrrLTsi5ztlbTrj4Qg7KKL7Iq164uI64ukLlxuICAgIC8vIOyWtOywqO2UvCBobXItaG9va+yXkCDsnZjtlbQgaW52YWxpZGF0ZeuQnCDrtoDrtoTrk6TsnbQg7JWE64uI652866m0IOy6kOyLnCDqt7jrjIDroZwg7Jyg7KeA7ZWp64uI64ukLlxuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRUeXBlcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkQXBpcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRXb3JrZmxvd3MoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkU3NyUm91dGVzKCk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RIbXJBY3Rpb25SZXF1aXJlZEZpbGVFdmVudHMoXG4gICAgZmlsZUV2ZW50czogTWFwPEFic29sdXRlUGF0aCwgXCJjaGFuZ2VcIiB8IFwiYWRkXCI+LFxuICApOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4ge1xuICAgIGNvbnN0IGFwaVNyYyA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4oKTtcbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZXZlbnRdIG9mIGZpbGVFdmVudHMpIHtcbiAgICAgIGlmICghZmlsZVBhdGguc3RhcnRzV2l0aChhcGlTcmMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnNldChmaWxlUGF0aCwgZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHRyYWN0U3luY1RyaWdnZXJpbmdGaWxlRXZlbnRQYXRocyhcbiAgICBmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4sXG4gICk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgICBjb25zdCBjaGVja1BhdHRlcm5Hcm91cCA9IGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTtcbiAgICBjb25zdCBzeW5jVHJpZ2dlcmluZ1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2RpZmZGaWxlUGF0aF0gb2YgZmlsZUV2ZW50cykge1xuICAgICAgY29uc3QgaXNJbkNoZWNrUGF0dGVybkdyb3VwID0gT2JqZWN0LnZhbHVlcyhjaGVja1BhdHRlcm5Hcm91cCkuc29tZSgocGF0dGVybikgPT5cbiAgICAgICAgbWluaW1hdGNoKGRpZmZGaWxlUGF0aCwgcGF0dGVybiksXG4gICAgICApO1xuICAgICAgaWYgKCFpc0luQ2hlY2tQYXR0ZXJuR3JvdXApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzeW5jVHJpZ2dlcmluZ1BhdGhzLnB1c2goZGlmZkZpbGVQYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3luY1RyaWdnZXJpbmdQYXRocztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW52YWxpZGF0ZURlcGVuZGVudHNBZmZlY3RlZEJ5RmlsZUV2ZW50cyhcbiAgICBmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4sXG4gICkge1xuICAgIGZvciAoY29uc3QgW2RpZmZGaWxlUGF0aCwgZXZlbnRdIG9mIGZpbGVFdmVudHMpIHtcbiAgICAgIC8vIOuzgOqyveuQnCDtjIzsnbzqs7wgZGVwZW5kZW50IO2MjOydvOuTpOydhCBpbnZhbGlkYXRlIO2VqeuLiOuLpC5cbiAgICAgIC8vIO2VnCDrsogg7J207IOBIGltcG9ydOuQnCDsuZzqtazrk6Tsl5Ag64yA7ZW07ISc66eMIOyLpOygnCDsnpHsl4XsnbQg7J287Ja064Kp64uI64ukLlxuICAgICAgLy8g6re465+s64uIIOyViOyLrO2VmOqzoCBpbnZhbGlkYXRlIO2VtOuPhCDrkKnri4jri6QuXG4gICAgICAvLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGhvdC5pbnZhbGlkYXRlRmlsZeyLnCDstIjquLAg7JeQ65+s6rCAIOuwnOyDne2VmOq4sCDrlYzrrLjsl5AgaW52YWxpZGF0ZSDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgICAgaWYgKCFpc1Rlc3QoKSkge1xuICAgICAgICBjb25zdCBpbnZhbGlkYXRlZFBhdGhzID0gKGF3YWl0IGhvdC5pbnZhbGlkYXRlRmlsZShkaWZmRmlsZVBhdGgsIGV2ZW50KSkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgICAgICAgaWYgKGludmFsaWRhdGVkUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYPCflIQgSW52YWxpZGF0ZWQ6YCkpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBpbnZhbGlkYXRlZFBhdGggb2YgaW52YWxpZGF0ZWRQYXRocykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g66eM7JW9IG1vZGVsLnRzIO2MjOydvOydtCDrs4Dqsr0oaW52YWxpZGF0ZSnrkJjsl4jri6Q/IOq3uOufrOuptCByZWdpc3RlcmVkQXBpcyDspJHsl5DshJwg7J20IOuqqOuNuOyXkCDtlbTri7ntlZjripQgYXBp65Ok7J2AIOyngOybjOykmOyalC5cbiAgICAgICAgICAgICAgLy8gcmVnaXN0ZXJlZEFwaXPripQg7Ya17Jy866GcIOuLpCDrgqDroKTrsoTrprQg7IiYIOyXhuyKteuLiOuLpC4gcmVnaXN0ZXJlZEFwaXPsl5Ag7Jis65287Jik64qUIOy5nOq1rOuTpOydgCDstIjquLAg66Gc65Oc7IucIOuYkOuKlCBITVLsi5zsl5Drp4wg65Ox66Gd65CY6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICAgICAgICAgICAgLy8g65Sw65287IScIG1vZGVsLnRzIO2MjOydvOydmCDrs4Dqsr3snLzroZwg64uk7J2M67KIIOyDiOuhnOyatCBldmFs7J20IOyYiOyDgeuQmOuKlCDsnbQg7Iuc7KCQ7JeQ7ISc66eMLCDsnbQg66qo64247JeQ7IScIOuCmOyYqCByZWdpc3RlcmVkQXBpc+uTpOydhCDsp4Dsm4zspIQg7IiYIOyeiOyKteuLiOuLpC5cbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZEFwaXMgPSB0aGlzLnJlbW92ZUludmFsaWRhdGVkUmVnaXN0ZXJlZEFwaXMoaW52YWxpZGF0ZWRQYXRoKTtcbiAgICAgICAgICAgICAgaWYgKHJlbW92ZWRBcGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGNoYWxrLmJsdWUoYC0gJHtwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgaW52YWxpZGF0ZWRQYXRoKX1gKSxcbiAgICAgICAgICAgICAgICAgIGNoYWxrLmdyYXkoYCh3aXRoICR7cmVtb3ZlZEFwaXMubGVuZ3RofSBBUElzKWApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShgLSAke3BhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBpbnZhbGlkYXRlZFBhdGgpfWApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGNoYWxrLnJlZChgRmFpbGVkIHRvIHJlbW92ZSBpbnZhbGlkYXRlZCByZWdpc3RlcmVkIEFQSXMgZm9yICR7aW52YWxpZGF0ZWRQYXRofWApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkZXZSdW5uZXIg7Zmc7ISx7ZmUIOyLnCwg67OA6rK965CcIOyGjOyKpCDtjIzsnbzsnYQgVml0ZXN0IOuqqOuTiCDqt7jrnpjtlITsl5DshJzrj4Qg66y07Zqo7ZmU7ZWp64uI64ukLlxuICAgICAgLy8gVml0ZeydmCBtb2R1bGVHcmFwaC5pbnZhbGlkYXRlTW9kdWxlKCnsnbQgaW1wb3J0ZXIg67Cp7Zal7Jy866GcIOyerOq3gOyggSBjYXNjYWRl7ZWY66+A66GcLFxuICAgICAgLy8g7IaM7IqkIO2MjOydvCDtlZjrgpjrp4wg66y07Zqo7ZmU7ZWY66m0IOydtOulvCBpbXBvcnTtlZjripQg7YWM7Iqk7Yq4IO2MjOydvOuPhCDsnpDrj5nsnLzroZwg66y07Zqo7ZmU65Cp64uI64ukLlxuICAgICAgaWYgKCFpc1Rlc3QoKSAmJiBTb25hbXUuY29uZmlnLnRlc3Q/LmRldlJ1bm5lcj8uZW5hYmxlZCAmJiBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlcikge1xuICAgICAgICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlci5pbnZhbGlkYXRlRmlsZXMoW2RpZmZGaWxlUGF0aF0pO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjaGFsay5kaW0oYFRlc3QgaW52YWxpZGF0ZWQ6ICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGRpZmZGaWxlUGF0aCl9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlSW52YWxpZGF0ZWRSZWdpc3RlcmVkQXBpcyhcbiAgICBpbnZhbGlkYXRlZFBhdGg6IEFic29sdXRlUGF0aCxcbiAgKTogKHR5cGVvZiByZWdpc3RlcmVkQXBpcylbbnVtYmVyXVtdIHtcbiAgICBpZiAoIWludmFsaWRhdGVkUGF0aC5lbmRzV2l0aChcIi5tb2RlbC50c1wiIC8q7IaM7IqkIOy9lOuTnOulvCDri6Tro6jripQg7IOB7Zmp7J2064uIIC50cyDqsr3roZzroZwg67SF64uI64ukLiovKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKGludmFsaWRhdGVkUGF0aCk7XG4gICAgY29uc3QgdG9SZW1vdmUgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gYCR7ZW50aXR5SWR9TW9kZWxgKTtcbiAgICBmb3IgKGNvbnN0IGFwaSBvZiB0b1JlbW92ZSkge1xuICAgICAgY29uc3QgaWR4ID0gcmVnaXN0ZXJlZEFwaXMuaW5kZXhPZihhcGkpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgcmVnaXN0ZXJlZEFwaXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvUmVtb3ZlO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRUeXBlcygpIHtcbiAgICB0aGlzLnR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZE1vZGVscygpIHtcbiAgICB0aGlzLm1vZGVscyA9IGF3YWl0IGxvYWRNb2RlbHMoKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkQXBpcygpIHtcbiAgICB0aGlzLmFwaXMgPSBhd2FpdCBsb2FkQXBpcygpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRXb3JrZmxvd3MoKSB7XG4gICAgdGhpcy53b3JrZmxvd3MgPSBhd2FpdCBsb2FkV29ya2Zsb3dzKCk7XG4gICAgYXdhaXQgU29uYW11LndvcmtmbG93cy5zeW5jaHJvbml6ZSh0aGlzLndvcmtmbG93cyk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZFNzclJvdXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzc3JDb25maWdQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmMvc3NyXCIpO1xuXG4gICAgLy8g6riw7KG0IHJvdXRlcyDstIjquLDtmZRcbiAgICBjb25zdCB7IGNsZWFyU1NSUm91dGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9zc3JcIik7XG4gICAgY2xlYXJTU1JSb3V0ZXMoKTtcblxuICAgIC8vIHNzciDtj7TrjZQg7JeG7Jy866m0IOyKpO2CtVxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzc3JDb25maWdQYXRoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzc3Ig7Y+0642UIOyViOydmCDrqqjrk6AgLnRzIO2MjOydvCDroZzrk5xcbiAgICBjb25zdCB7IGdsb2JBc3luYyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIik7XG4gICAgY29uc3QgeyBpbXBvcnRNZW1iZXJzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9lc20tdXRpbHNcIik7XG4gICAgY29uc3QgeyBydW50aW1lUGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiKTtcblxuICAgIC8vIHJ1bnRpbWVQYXRo66W8IOyCrOyaqe2VmOyXrCDqsJzrsJwv7ZSE66Gc642V7IWYIO2ZmOqyveyXkCDrp57ripQg7ZmV7J6l7J6QIOyymOumrFxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKHBhdGguam9pbihzc3JDb25maWdQYXRoLCBydW50aW1lUGF0aChcIioqLyoudHNcIikpKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gaW1wb3J0TWVtYmVyc+ulvCDsgqzsmqntlZjrqbQg7YyM7J287J2YIHNpZGUgZWZmZWN0KHJlZ2lzdGVyU1NSIO2YuOy2nCnqsIAg7Iuk7ZaJ65CoXG4gICAgICAgIGF3YWl0IGltcG9ydE1lbWJlcnMoZmlsZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIFNTUiByb3V0ZTogJHtmaWxlfWAsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDsi6TsoJwg7Iux7YGs66W8IOyImO2Wie2VmOuKlCDrs7jssrTsnoXri4jri6QuXG4gICAqIOuzgOqyveuQnCDtjIzsnbzrk6TsnYQg7YOA7J6F67OE66GcIOu2hOulmO2VmOqzoCDqsIEg7YOA7J6F7JeQIOunnuuKlCDslaHshZjsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICAgKlxuICAgKiBAcGFyYW0gZGlmZkZpbGVQYXRocyAtIOuzgOqyveuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrqqnroZ1cbiAgICogQHJldHVybnMgZGlmZlR5cGVzIC0g67OA6rK965CcIO2MjOydvOydmCDtg4DsnoUg66qp66GdIChlbnRpdHksIHR5cGVzLCBtb2RlbCDrk7EpXG4gICAqL1xuICBhc3luYyBkb1N5bmNBY3Rpb25zKGRpZmZGaWxlUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTx7IGRpZmZUeXBlczogRmlsZVR5cGVbXSB9PiB7XG4gICAgY29uc3QgZGlmZkdyb3VwcyA9IHRoaXMuY2FsY3VsYXRlRGlmZkdyb3VwcyhkaWZmRmlsZVBhdGhzKTtcbiAgICBjb25zdCBkaWZmVHlwZXMgPSBPYmplY3Qua2V5cyhkaWZmR3JvdXBzKSBhcyBGaWxlVHlwZVtdO1xuXG4gICAgLy8g7Jes6riw64qUIOuzhOuhnCDspJHsmpTtlZwg7YyM7Yq464qUIOyVhOuLmeuLiOuLpC5cbiAgICAvLyDslYTrnpjsnZggaWYg7KCE6rCc66W8IOq5lOuBlO2VmOqyjCDtlZjroKTqs6Ag66eM65OgIERTTCDqsJnsnYAg6rGw65287IScLCDrrLTsi5ztlZjshZTrj4Qg65Cp64uI64ukLlxuICAgIGNvbnN0IHsgY2hhbmdlTWF0Y2hlcywgbm90aGluZ01hdGNoZXMsIHVuaGFuZGxlZFBhdGhzIH0gPSB0aGlzLmNoYW5nZU1hdGNoZXIoXG4gICAgICBkaWZmVHlwZXMsXG4gICAgICBkaWZmR3JvdXBzLFxuICAgICk7XG5cbiAgICBpZiAoY2hhbmdlTWF0Y2hlcyhcImVudGl0eVwiLCBcInR5cGVzXCIpKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVRydXRoU291cmNlQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlTWF0Y2hlcyhcIm1vZGVsXCIsIFwiZnJhbWVcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzKGRpZmZHcm91cHMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VNYXRjaGVzKFwidHlwZXNcIiwgXCJmdW5jdGlvbnNcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV4aWxpYXJ5U3ltYm9sQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlTWF0Y2hlcyhcImNvbmZpZ1wiKSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25maWdDaGFuZ2VzKGRpZmZHcm91cHMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VNYXRjaGVzKFwiaTE4blwiLCBcImVudGl0eVwiIC8q66CI7J2067iUKi8sIFwiY29uZmlnXCIgLypkZWZhdWx0TG9jYWxl65OxKi8pKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVNvbmFtdURpY3Rpb25hcnlSZWxhdGVkQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICBpZiAobm90aGluZ01hdGNoZXMoKSkge1xuICAgICAgLy8g7YyM7J28IOuzgOqyveydgCDqsJDsp4DrkJjsl4jsnLzrgpgg7KCAIOychCDslrTripAgY2hhbmdlTWF0Y2hlc+yXkOuPhCDqsbjrpqzsp4Ag7JWK7J2AIO2MjOydvOuTpOydtCBkcmlmdHPsnoXri4jri6QuXG4gICAgICAvLyBzeW5jZXLripQg7IaM7Iqk7J2YIOuzgOqyveyXkOuKlCDrsJjsnZHtlZjsp4Drp4wg7IKw7Lac66y87J2YIOuzgOqyvShkcmlmdCnsl5DripQg7KeB7KCR7KCB7Jy866GcIOuwmOydke2VmOyngCDslYrsirXri4jri6QuXG4gICAgICAvLyDrjIDsi6Ag7J20IGRyaWZ07JeQIOuMgO2VtCDqsr3qs6Ag7KCV64+E66eMIOy2nOugpe2VtOykjeuLiOuLpC5cbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRHJpZnRzKHVuaGFuZGxlZFBhdGhzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaWZmVHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURpZmZHcm91cHMoZGlmZkZpbGVzOiBBYnNvbHV0ZVBhdGhbXSk6IERpZmZHcm91cHMge1xuICAgIGNvbnN0IHBhdHRlcm5Hcm91cCA9IGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCk7XG4gICAgY29uc3QgZmlsZVR5cGVzID0gT2JqZWN0LmtleXMocGF0dGVybkdyb3VwKSBhcyBGaWxlVHlwZVtdO1xuXG4gICAgcmV0dXJuIGdyb3VwKGRpZmZGaWxlcywgKGZpbGVQYXRoKSA9PiB7XG4gICAgICAvLyDsoIjrjIAg6rK966GcIOKGkiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICjsmIg6IFwiYXBpL3NyYy8uLi5cIiwgXCJ3ZWIvc3JjLy4uLlwiKVxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4uXCIpKSByZXR1cm4gXCJ1bmtub3duXCI7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZVR5cGUgb2YgZmlsZVR5cGVzKSB7XG4gICAgICAgIGlmIChtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuR3JvdXBbZmlsZVR5cGVdKSkge1xuICAgICAgICAgIHJldHVybiBmaWxlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIH0pIGFzIHVua25vd24gYXMgRGlmZkdyb3VwcztcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlTWF0Y2hlcihkaWZmVHlwZXM6IEZpbGVUeXBlW10sIGRpZmZHcm91cHM6IERpZmZHcm91cHMpIHtcbiAgICBjb25zdCBoYW5kbGVkID0gbmV3IFNldDxGaWxlVHlwZT4oKTtcblxuICAgIC8qKlxuICAgICAqIOuzgOqyvSDsgqztla3snbQg7J247J6Q66GcIOuwm+ydgCBGaWxlVHlwZeuTpCDspJEg7ZWY64KYIOydtOyDgeydhCDtj6ztlajtlZjripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgICAqIOqwgOuguSBbXCJlbnRpdHlcIl3qsIAg67OA6rK965CcIO2YuOy2nOyXkOyEnCBjaGFuZ2VNYXRjaGVzKFwiZW50aXR5XCIp64qUIHRyeWXrpbwg67CY7ZmY7ZWY66mwLFxuICAgICAqIFtcInR5cGVzXCIsIFwiaTE4blwiXeydtCDrs4Dqsr3rkJwg7Zi47Lac7JeQ7IScIGNoYW5nZU1hdGNoZXMoXCJ0eXBlc1wiLCBcImZ1bmN0aW9uc1wiKeuPhCB0cnVl66W8IOuwmO2ZmO2VmOyngOunjCxcbiAgICAgKiBbXCJmdW5jdGlvbnNcIl3qsIAg67OA6rK965CcIO2YuOy2nOyXkOyEnCBjaGFuZ2VNYXRjaGVzKFwiZnJhbWVcIinsnYAgZmFsc2Xrpbwg67CY7ZmY7ZWp64uI64ukLlxuICAgICAqIEBwYXJhbSB0eXBlc1xuICAgICAqL1xuICAgIGNvbnN0IGNoYW5nZU1hdGNoZXMgPSAoLi4udHlwZXM6IEZpbGVUeXBlW10pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nID0gdHlwZXMuZmlsdGVyKCh0KSA9PiBkaWZmVHlwZXMuaW5jbHVkZXModCkpO1xuICAgICAgbWF0Y2hpbmcuZm9yRWFjaCgodCkgPT4gaGFuZGxlZC5hZGQodCkpO1xuICAgICAgcmV0dXJuIG1hdGNoaW5nLmxlbmd0aCA+IDA7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGNoYW5nZU1hdGNoZXProZwg66ek7Lmt65CcIOqyg+ydtCDtlZjrgpjrj4Qg7JeG64qU7KeAIOyXrOu2gOulvCDqsIDsoLjsmLXri4jri6QuXG4gICAgICovXG4gICAgY29uc3Qgbm90aGluZ01hdGNoZXMgPSAoKSA9PiBoYW5kbGVkLnNpemUgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiDslrTrlqQgY2hhbmdlTWF0Y2hlcyDtmLjstpzsl5Drj4Qg6rG466as7KeAIOyViuydgCBGaWxlVHlwZeuTpOydmCDsi6TsoJwg7YyM7J28IOqyveuhnOulvCDrqqjslYTshJwg67CY7ZmY7ZWp64uI64ukLlxuICAgICAqL1xuICAgIGNvbnN0IHVuaGFuZGxlZFBhdGhzID0gKCk6IEFic29sdXRlUGF0aFtdID0+XG4gICAgICBkaWZmVHlwZXMuZmlsdGVyKCh0KSA9PiAhaGFuZGxlZC5oYXModCkpLmZsYXRNYXAoKHQpID0+IGRpZmZHcm91cHNbdF0gPz8gW10pO1xuXG4gICAgcmV0dXJuIHsgY2hhbmdlTWF0Y2hlcywgbm90aGluZ01hdGNoZXMsIHVuaGFuZGxlZFBhdGhzIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXMoZGlmZkdyb3VwczogRGlmZkdyb3Vwcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5haXRlLnQoXCJoYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXNcIiwgeyBkaWZmR3JvdXBzIH0pO1xuXG4gICAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICAgIC8vIHR5cGVzIOyDneyEsShlbnRpdHkg7IOI66GcIOy2lOqwgOuQnCDqsr3smrApXG4gICAgLy8gcGFyZW50SWTqsIAg7JeG6rOgLCB0eXBlc+qwgCDsl4bripQg6rK97Jqw7JeQ66eMIOyDneyEsVxuICAgIGNvbnN0IGVudGl0eVBhdGggPSBkaWZmR3JvdXBzLmVudGl0eT8uYXQoMCk7XG4gICAgaWYgKGVudGl0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZW50aXR5SWQgPSBFbnRpdHlNYW5hZ2VyLmdldEVudGl0eUlkRnJvbVBhdGgoZW50aXR5UGF0aCk7XG4gICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgIC8vIO2UhOuhnOygne2KuOyXkCDsg53shLHrkJjslrTslbwg7ZWY64qUIC50cyDtjIzsnbzsnZgg6rK966Gc7J6F64uI64ukLlxuICAgICAgY29uc3QgdHlwZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgICAgIGBzcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9LyR7ZW50aXR5Lm5hbWVzLmZzfS50eXBlcy50c2AsXG4gICAgICApIGFzIEFic29sdXRlUGF0aDtcblxuICAgICAgaWYgKGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkICYmICEoYXdhaXQgZXhpc3RzKHR5cGVGaWxlUGF0aCkpKSB7XG4gICAgICAgIC8vICoudHlwZXMudHPqsIAg66eM65Ok7Ja07KeR64uI64ukLlxuICAgICAgICBjb25zdCB0eXBlcyA9IGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQpO1xuXG4gICAgICAgIC8vIOq3uOqxuCDtg4Dqsp/sl5Ag6rCW64uk65Gs7JqULlxuICAgICAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0eXBlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+qwgCDrp4zrk6TslrTsp5Hri4jri6QuXG4gICAgY29uc3QgZ2VuZXJhdGVkID0gYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTtcblxuICAgIC8vIOuqqOuToCDqsoPrk6TsnYQgdGFyZ2V07JeQIOuztOuCtOyngOuKlCDslYrsirXri4jri6QuXG4gICAgLy8gc29uYW11LmdlbmVyYXRlZC5zc28udHPripQgc2VydmljZS1zaWRlLW9ubHnri4jquYwg67Cw7KCc7ZWp64uI64ukLlxuICAgIC8vIFRPRE8o67OR7KSAKTog7J20IO2VmOuTnOy9lOuTnOulvCDriITqsIAg7ZW06rKwIOyigCDtlbTso7zshLjsmpQuIOydvOuLqOydgCDqsJDri7kg6rCA64ql7ZWY64uIIOuGlOuRkOqyoOyKteuLiOuLpC4uLlxuICAgIGNvbnN0IGRpc3RyaWJ1dGFibGUgPSBnZW5lcmF0ZWQuZmlsdGVyKChwKSA9PiAhcC5lbmRzV2l0aChcIi5zc28udHNcIikpO1xuXG4gICAgLy8g7J207KCcIOuztOuCvCDqsoPrk6Trp4wgdGFyZ2V07JeQIOuztOuCtOyalC5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyhkaXN0cmlidXRhYmxlKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMgfSk7XG4gICAgY29uc3QgbWVyZ2VkR3JvdXAgPSBbLi4uKGRpZmZHcm91cHMubW9kZWwgPz8gW10pLCAuLi4oZGlmZkdyb3Vwcy5mcmFtZSA/PyBbXSldO1xuXG4gICAgLy8gZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUudHPsl5DshJwgc3luY2VyLnR5cGVz66W8IOyUgeuLiOuLpC5cbiAgICAvLyBzZXJ2aWNlLnRlbXBsYXRlLnRz7JeQ7IScIHN5bmNlci5hcGlz66W8IOyUgeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcblxuICAgIGNvbnN0IHBhcmFtczoge1xuICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICAgIH1bXSA9IG1lcmdlZEdyb3VwLm1hcCgobW9kZWxQYXRoKSA9PiB7XG4gICAgICBpZiAobW9kZWxQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIpIHx8IG1vZGVsUGF0aC5lbmRzV2l0aChcIi5mcmFtZS50c1wiKSkge1xuICAgICAgICBjb25zdCBlbnRpdHlJZCA9IEVudGl0eU1hbmFnZXIuZ2V0RW50aXR5SWRGcm9tUGF0aChtb2RlbFBhdGgpO1xuICAgICAgICBhc3NlcnQoZW50aXR5SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCByZWFjaGFibGVcIik7XG4gICAgfSk7XG5cbiAgICAvLyBzZXJ2aWNlcy5nZW5lcmF0ZWQudHPrpbwgdGFyZ2V065Ok7JeQLCBzb25hbXUuZ2VuZXJhdGVkLmh0dHDrpbwgYXBp7JeQIOunjOuTpOyWtOykmOyalC5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2VydmljZXMocGFyYW1zKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlSHR0cHMoKTtcblxuICAgIC8vIHF1ZXJpZXMuZ2VuZXJhdGVkLnRz6rCAIOunjOuTpOyWtOynkeuLiOuLpC5cbiAgICBjb25zdCBxdWVyaWVzID0gYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNzclF1ZXJpZXMoKTtcblxuICAgIC8vIHF1ZXJpZXPripQgU1NSIOuUlOyKpO2BrOumve2EsChzb25hbXUvc3NyIOydmOyhtCnsnbTrr4DroZwgd2ViIHRhcmdldOyXkOunjCDrtoTrsLDtlanri4jri6QuXG4gICAgLy8g64uk66W4IHRhcmdldChhcHAg65OxKeydtCBTU1LsnYQg7JWIIOyTsOuptCDsnZjrr7gg7JeG64qUIGRlYWQgY29kZeydvCDrv5DsnbTrnbwg67O064K07KeAIOyViuyKteuLiOuLpC5cbiAgICAvLyBUT0RPKOuzkeykgCk6IHdlYuyXkOunjCDqsIDqsowg7ZWY6riwIOychO2VtOyEnCB0YXJnZXQgcHJlZml466W8IOyngOygle2VtOyjvOyXiOyKteuLiOuLpC4g64KY7KSR7JeQIHRhcmdldCDsi5zsiqTthZzsnbQg6rCc7ISg65Cc64uk66m0IOuwlOq/lOyjvOyEuOyalC5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyhxdWVyaWVzLCBbXCJ3ZWJcIl0pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV4aWxpYXJ5U3ltYm9sQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZUF1eGlsaWFyeVN5bWJvbENoYW5nZXNcIiwgeyBkaWZmR3JvdXBzIH0pO1xuICAgIGNvbnN0IHRzUGF0aHMgPSB1bmlxdWUoWy4uLihkaWZmR3JvdXBzLnR5cGVzID8/IFtdKSwgLi4uKGRpZmZHcm91cHMuZnVuY3Rpb25zID8/IFtdKV0pO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHMpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ29uZmlnQ2hhbmdlcyhfOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jQ29uZmlnKCk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVTb25hbXVEaWN0aW9uYXJ5UmVsYXRlZENoYW5nZXMoXzogRGlmZkdyb3Vwcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZURyaWZ0cyhkcmlmdHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGRyaWZ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBcIuKaoO+4jyBTb25hbXXqsIAg7J6Q64+ZIOyDneyEse2VnCDtjIzsnbzsl5Ag64yA7ZWcIOuzgOqyveydtCDqsJDsp4DrkJjsl4jsirXri4jri6QuIO2MjOydvOydtCBTb25hbXUgd2F0Y2hlciDsmbjrtoDsl5DshJwg67OA6rK965CcIOqyg+ycvOuhnCDstpTsoJXrkKnri4jri6QuXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBwIG9mIGRyaWZ0cykge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGAgIC0gJHtwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgcCl9YCkpO1xuICAgICAgfVxuICAgICAgY29uc29sZS53YXJuKGNoYWxrLmRpbShcIiAg4oaSIGBwbnBtIHNvbmFtdSBzeW5jIC0tZm9yY2Vg66W8IOq2jOyepe2VqeuLiOuLpC5cIikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7JeU7Yuw7Yuw7JmAIO2FnO2UjOumvyDtgqTsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIHRlbXBsYXRlS2V5IO2FnO2UjOumvyDtgqRcbiAgICogQHBhcmFtIGVudW1JZCDsl7TqsbDtmJUgSURcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICB0ZW1wbGF0ZUtleTogVGVtcGxhdGVLZXksXG4gICAgZW51bUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgc3ViUGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nOyBpc0V4aXN0czogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGdlblBhdGggfSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpLmdldFRhcmdldEFuZFBhdGgoXG4gICAgICBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgIGVudW1JZCxcbiAgICApO1xuXG4gICAgY29uc3Qgc3ViUGF0aCA9IHBhdGguam9pbih0YXJnZXQsIGdlblBhdGgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgc3ViUGF0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YlBhdGgsXG4gICAgICBmdWxsUGF0aCxcbiAgICAgIGlzRXhpc3RzOiBhd2FpdCBleGlzdHMoZnVsbFBhdGgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7KO87Ja07KeEIOyXlO2LsO2LsOyZgCDsl7TqsbDtmJXsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIGVudW1zIOyXtOqxsO2YlSDroIjsnbTruJRcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0cyhcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGVudW1zOiB7XG4gICAgICBbbmFtZTogc3RyaW5nXTogei5ab2RFbnVtO1xuICAgIH0sXG4gICk6IFByb21pc2U8UmVjb3JkPGAke1RlbXBsYXRlS2V5fSR7c3RyaW5nfWAsIGJvb2xlYW4+PiB7XG4gICAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFRlbXBsYXRlS2V5Lm9wdGlvbnM7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnVtc0tleXMgPSBPYmplY3Qua2V5cyhlbnVtcykuZmlsdGVyKChuYW1lKSA9PiBuYW1lICE9PSBuYW1lcy5jb25zdGFudCk7XG5cbiAgICByZXR1cm4gYXdhaXQgcmVkdWNlQXN5bmMoXG4gICAgICBrZXlzLFxuICAgICAgYXN5bmMgKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHRwbCA9IFRlbXBsYXRlTWFuYWdlci5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwidmlld19lbnVtc1wiKSkge1xuICAgICAgICAgIGF3YWl0IG1hcEFzeW5jKGVudW1zS2V5cywgYXN5bmMgKGNvbXBvbmVudElkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldCwgcGF0aDogcCB9ID0gdHBsLmdldFRhcmdldEFuZFBhdGgobmFtZXMsIGNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke2NvbXBvbmVudElkfWBdID0gYXdhaXQgZXhpc3RzKFxuICAgICAgICAgICAgICBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIHApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IHAgfSA9IHRwbC5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGlmICh0YXJnZXQuaW5jbHVkZXMoXCI6dGFyZ2V0XCIpKSB7XG4gICAgICAgICAgYXdhaXQgbWFwQXN5bmModGFyZ2V0cywgYXN5bmMgKHQpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke3R9YF0gPSBhd2FpdCBleGlzdHMoXG4gICAgICAgICAgICAgIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldC5yZXBsYWNlKFwiOnRhcmdldFwiLCB0KSwgcCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYXdhaXQgZXhpc3RzKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgcCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8YCR7VGVtcGxhdGVLZXl9JHtzdHJpbmd9YCwgYm9vbGVhbj4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVudGl0eShmb3JtOiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0pIHtcbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlRW50aXR5KGZvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZGVsRW50aXR5KGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHsgZGVsUGF0aHM6IHN0cmluZ1tdIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsRW50aXR5KGVudGl0eUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVGVtcGxhdGU8VCBleHRlbmRzIFRlbXBsYXRlS2V5PihcbiAgICBrZXk6IFQsXG4gICAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gICAgX2dlbmVyYXRlT3B0aW9ucz86IEdlbmVyYXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zLCBfZ2VuZXJhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICAgIGtleTogVCxcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbiAgKTogUHJvbWlzZTxQYXRoQW5kQ29kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHJlbmRlclRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmV3Q2hlY2tzdW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkFXbUQ7Y0FDWjtzQkFDa0I7YUFFbEI7d0JBRXdCO2FBRWxCO21CQUVnQjtvQkFDVjtrQkFDTjtnQkFDRjtxQkFFc0I7Z0JBQ1c7c0JBQ1I7eUJBQ047cUJBQ21DO3FCQUVo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
|
|
424
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2VyLmpzIiwibmFtZXMiOlsiU3luY2VyQWN0aW9ucy5hY3Rpb25Db3B5U2hhcmVkVG9UYXJnZXRzSWZOb3RFeGlzdHMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyRW50cnlTZXJ2ZXJJZk5vdEV4aXN0cyIsInN5bmNUcmlnZ2VyaW5nUGF0aHM6IEFic29sdXRlUGF0aFtdIiwiU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZUluaXRpYWxUeXBlcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzIiwiU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMiLCJwYXJhbXM6IHtcbiAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlOYW1lc1JlY29yZDtcbiAgICB9W10iLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2VydmljZXMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlSHR0cHMiLCJTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyUXVlcmllcyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0NvbmZpZyIsIlN5bmNlckFjdGlvbnMuYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkiLCJrZXlzOiBUZW1wbGF0ZUtleVtdIiwicCIsInRhcmdldCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zeW5jZXIvc3luY2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgdW5saW5rIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBob3QgfSBmcm9tIFwiQHNvbmFtdS1raXQvaG1yLWhvb2tcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IG1pbmltYXRjaCB9IGZyb20gXCJtaW5pbWF0Y2hcIjtcbmltcG9ydCB7IGdyb3VwLCB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgdHlwZSB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyByZWdpc3RlcmVkQXBpcyB9IGZyb20gXCIuLi9hcGkvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IHR5cGUgV29ya2Zsb3dNZXRhZGF0YSB9IGZyb20gXCIuLi90YXNrcy9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gXCIuLi90ZW1wbGF0ZS90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEdlbmVyYXRlT3B0aW9ucywgdHlwZSBQYXRoQW5kQ29kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVLZXkgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBtYXBBc3luYywgcmVkdWNlQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGNlbnRlclRleHQgfSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBpc1Rlc3QgfSBmcm9tIFwiLi4vdXRpbHMvY29udHJvbGxlclwiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxzL2ZzLXV0aWxzXCI7XG5pbXBvcnQgeyB0eXBlIEFic29sdXRlUGF0aCB9IGZyb20gXCIuLi91dGlscy9wYXRoLXV0aWxzXCI7XG5pbXBvcnQgeyBydW5XaXRoR3JhY2VmdWxTaHV0ZG93biB9IGZyb20gXCIuLi91dGlscy9wcm9jZXNzLXV0aWxzXCI7XG5pbXBvcnQgeyBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMsIHJlbmV3Q2hlY2tzdW1zIH0gZnJvbSBcIi4vY2hlY2tzdW1cIjtcbmltcG9ydCB7IGdlbmVyYXRlVGVtcGxhdGUsIHJlbmRlclRlbXBsYXRlIH0gZnJvbSBcIi4vY29kZS1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IGNyZWF0ZUVudGl0eSwgZGVsRW50aXR5IH0gZnJvbSBcIi4vZW50aXR5LW9wZXJhdGlvbnNcIjtcbmltcG9ydCB7IGdldENoZWNrc3VtUGF0dGVybkdyb3VwLCBnZXRDaGVja3N1bVBhdHRlcm5Hcm91cEluQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4vZmlsZS1wYXR0ZXJuc1wiO1xuaW1wb3J0IHsgdHlwZSBGaWxlVHlwZSB9IGZyb20gXCIuL2ZpbGUtcGF0dGVybnNcIjtcbmltcG9ydCB7IGxvYWRBcGlzLCBsb2FkTW9kZWxzLCBsb2FkVHlwZXMsIGxvYWRXb3JrZmxvd3MgfSBmcm9tIFwiLi9tb2R1bGUtbG9hZGVyXCI7XG5pbXBvcnQgeyB0eXBlIExvYWRlZEFwaXMsIHR5cGUgTG9hZGVkTW9kZWxzLCB0eXBlIExvYWRlZFR5cGVzIH0gZnJvbSBcIi4vbW9kdWxlLWxvYWRlclwiO1xuaW1wb3J0ICogYXMgU3luY2VyQWN0aW9ucyBmcm9tIFwiLi9zeW5jZXItYWN0aW9uc1wiO1xuXG50eXBlIERpZmZHcm91cHMgPSB7XG4gIFtrZXkgaW4gRmlsZVR5cGVdOiBBYnNvbHV0ZVBhdGhbXTtcbn07XG5cbmV4cG9ydCBjbGFzcyBTeW5jZXIge1xuICBhcGlzOiBMb2FkZWRBcGlzID0gW107XG4gIHR5cGVzOiBMb2FkZWRUeXBlcyA9IHt9O1xuICBtb2RlbHM6IExvYWRlZE1vZGVscyA9IHt9O1xuICB3b3JrZmxvd3M6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT4gPSBuZXcgTWFwKCk7XG4gIGV2ZW50RW1pdHRlcjogRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiDssrTtgazshKzsnbQg67OA6rK965CcIOu2gOu2hOyXkCDrjIDtlbQg7Iux7YGs66W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICogZGV2IOyEnOuyhOqwgCDsspjsnYwg65a07J2EIOuVjCwgc29uYW11IHN5bmMg7ZWgIOuVjCDsi6TtlonrkKnri4jri6QuIOydtO2bhOyXkOuKlCBzeW5jRnJvbVdhdGNoZXIg6rK966Gc66W8IO2DgOyalC5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8g7LSI6riwIOu2gO2KuOyKpO2KuOueqSEg7JaY64Sk65Ok7J2AIGlkZW1wb3RlbnTtlZjqs6Ag6rCA67ON6riwIOuVjOusuOyXkCDrrLTsp4DshLEg7Iuk7ZaJ7ZW064+EIOuQqeuLiOuLpC5cbiAgICAvLyDslpjrhKTrk6TsnYAgc29uYW11LmxvY2vsl5Ag65Ok7Ja06rCA7KeA64+EIOyViuqzoCDrlLDrnbzshJwgSE1SIOqyveuhnOulvCDtg4Dsp4Drj4Qg7JWK64qUIOy5nOq1rOuTpOyeheuLiOuLpC5cbiAgICAvLyDqt7jrnpjshJwg7JWE66y0IOuVjOuCmCDqt7jrg6Ug64+M66Ck7KO866m0IOuQmOuKlOuNsCwgc3luY0Zyb21XYXRjaGVy7JeQ7IScIOunpOuyiCDtlZjripQg6rKD7J2AIOuCreu5hOydtOuLiCDsl6zquLDshJwg7ZWcIOuyiOunjCDtlanri4jri6QuXG4gICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25Db3B5U2hhcmVkVG9UYXJnZXRzSWZOb3RFeGlzdHMoKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyRW50cnlTZXJ2ZXJJZk5vdEV4aXN0cygpO1xuXG4gICAgLy8g67CU64CQIOqyg+ydtCDsl4bsnLzrqbQg6re464OlIOuEmOyWtOqwgOyalC5cbiAgICBjb25zdCBjaGFuZ2VkRmlsZXMgPSBhd2FpdCBmaW5kQ2hhbmdlZEZpbGVzVXNpbmdDaGVja3N1bXMoKTtcbiAgICBpZiAoY2hhbmdlZEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuYmxhY2suYmdHcmVlbihjZW50ZXJUZXh0KFwiQWxsIGZpbGVzIGFyZSBzeW5jZWQhXCIpKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g7Jes6riw7IScIOyLpOygnCDsi7Htgawg64+Z7J6R7J2EIOyImO2Wie2VqeuLiOuLpC5cbiAgICAvLyDri6Trp4wg7Iux7YGsIOykkeyXkCDtlITroZzshLjsiqTqsIAg7KO97Jy866m0IOq8rOyXrOuyhOumrOq4sCDrlYzrrLjsl5AsXG4gICAgLy8g7Iuc6re464SQ7JeQ64+EIOyeoOyLnCDrsoTti7gg7IiYIOyeiOuKlCDtmZjqsr0g7IaN7JeQ7IScIOyLse2BrOulvCDsi6Ttlontlanri4jri6QuXG4gICAgYXdhaXQgcnVuV2l0aEdyYWNlZnVsU2h1dGRvd24oXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIOyWmOqwgCDsi7Htgawg7J6R7JeFIOyImO2Wie2VmOuKlCDrs7jssrTsnoXri4jri6QuXG4gICAgICAgIGF3YWl0IHRoaXMuZG9TeW5jQWN0aW9ucyhjaGFuZ2VkRmlsZXMpO1xuXG4gICAgICAgIC8vIOyLse2BrCDslaHshZjsnbQg64Gd64KY66m0IO2VreyDgSDssrTtgazshKzsnYQg64uk7IucIOqwseyLoO2VqeuLiOuLpC5cbiAgICAgICAgYXdhaXQgcmVuZXdDaGVja3N1bXMoKTtcbiAgICAgIH0sXG4gICAgICB7IHdoZW5UaGlzSGFwcGVuczogXCJTSUdVU1IyXCIsIHdhaXRGb3JVcFRvOiAyMDAwMCB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICog6rCV7KCcIO2SgC3si7Htgaw6IGxvY2vsnYQg66y07Iuc7ZWY6rOgIOyymOydjOu2gO2EsCDri6Tsi5wg7Iux7YGs7ZWp64uI64ukLlxuICAgKlxuICAgKiAqKuyCrOyaqeyymCoqOiBnaXQgcG9zdC1tZXJnZSBob29rLCBDSSwgZGV2IOyEnOuyhOydmCBgZmAg7ZWr7YKkLlxuICAgKiAqKuyLpO2MqCDslYjsoITshLEqKjog64+E7KSR7JeQIO2UhOuhnOyEuOyKpOqwgCDso73slrQgbG9jayDsl4bripQg7IOB7YOc66GcIOuCqOyVhOuPhCDrrLTtlbQg4oCUIOuLpOydjCBzeW5j7JeQ7IScXG4gICAqIGxvY2sg7JeG7Jy866m0IOyekOyXsOyKpOufveqyjCDtkoAt7Iux7YGs6rCAIO2KuOumrOqxsOuQmOyWtCDsg4ggbG9ja+ydtCDsnpHshLHrkKguXG4gICAqL1xuICBhc3luYyBmb3JjZVN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9ja1BhdGggPSBwYXRoLmpvaW4oU29uYW11LmFwaVJvb3RQYXRoLCBcInNvbmFtdS5sb2NrXCIpO1xuICAgIGlmIChhd2FpdCBleGlzdHMobG9ja1BhdGgpKSB7XG4gICAgICBhd2FpdCB1bmxpbmsobG9ja1BhdGgpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnN5bmMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVy6rCAIGJhdGNo66GcIOuqqOydgCDrs4Dqsr0g7YyM7J2865Ok7JeQIOuMgO2VtCDtlZwg67KI7J2YIEhNUi9zeW5jIOyCrOydtO2BtOydhCDrj5Xri4jri6QuXG4gICAqXG4gICAqIEhNUuydgCBhcGkvc3JjIOyViOyXkOyEnCDsnbzslrTrgpjripQg66qo65OgIO2MjOydvOuTpOyXkCDrjIDtlbTshJwg7IiY7ZaJ7ZWp64uI64ukLlxuICAgKiBjaGVja3N1bVBhdHRlcm5Hcm91cCDrp6Tsua0g7Jes67aA7JmAIOustOq0gO2VmOqyjCBhcGkvc3JjIOyghOyytCDrjIDsg4HsnoXri4jri6QuXG4gICAqIOqwgOuguSBhcGkvc3JjL3V0aWxzL3N1YnNldC1sb2FkZXJzLnRzIOqwmeydgCDtjIzsnbzrj4Qg67OA6rK965CY66m0IEhNUuydgCDtlbTspI3ri4jri6QuXG4gICAqXG4gICAqIFN5bmPripQgY2hlY2tzdW1QYXR0ZXJuR3JvdXDsnLzroZwg66ek7Lmt65CY64qUIO2MjOydvOuTpOyXkCDrjIDtlbTshJzrp4wg7IiY7ZaJ7ZWp64uI64ukLlxuICAgKiDsl6zquLDsl5DripQgd2ViL3NyY+uCmCBhcHAvc3JjIOqwmeydgCDri6TrpbggdGFyZ2V07J2YIO2MjOydvOydtCDtj6ztlajrkKAg7IiYIOyeiOyKteuLiOuLpC5cbiAgICog7J2065+wIG5vbi1hcGkg6rK966Gc7J2YIO2MjOydvOuTpOydgCBITVLqs7zripQg7JWE66y0IOyDgeq0gOydtCDsl4bsnLzrr4DroZwsIGludmFsaWRhdGXsnYQg7ZWY7KeAIOyViuyKteuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGZpbGVFdmVudHMgLSBwYXRoIOKGkiBldmVudCDrp7UuIGV2ZW5064qUIFwiY2hhbmdlXCIgfCBcImFkZFwiLlxuICAgKi9cbiAgYXN5bmMgaG1yQW5kU3luYyhmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBobXJBY3Rpb25SZXF1aXJlZEV2ZW50cyA9IHRoaXMuZXh0cmFjdEhtckFjdGlvblJlcXVpcmVkRmlsZUV2ZW50cyhmaWxlRXZlbnRzKTtcbiAgICBjb25zdCBzeW5jVHJpZ2dlcmluZ1BhdGhzID0gYXdhaXQgdGhpcy5leHRyYWN0U3luY1RyaWdnZXJpbmdGaWxlRXZlbnRQYXRocyhmaWxlRXZlbnRzKTtcblxuICAgIC8vIEhNUiDsmIHsl606IO2MjOydvCDsnbTrsqTtirgg7KSRIGFwaeydmCDrqqjrk4gg6re4656Y7ZSE7JeQIOyeiOuKlCDtjIzsnbzrk6Tsl5Ag64yA7ZWcIOuzgOuPmeydgCBobXJBY3Rpb25SZXF1aXJlZEV2ZW50c+uhnCDsnqHtnpnri4jri6QuXG4gICAgLy8g7J20IOy5nOq1rOuTpOydgCBpbnZhbGlkYXRlIOyymOumrO2VtOykjeuLiOuLpC5cbiAgICAvLyDsnbQg7Zi47Lac7J2AIOyVhOuemCBzeW5j67O064ukIOustOyhsOqxtCDrqLzsoIAg7J287Ja064KY7JW8IO2VqeuLiOuLpCFcbiAgICAvLyDsmZzrg5DtlZjrqbQgc3luY+yXkOyEnOuKlCDrs4Dqsr3rkJwgbW9kZWwg7L2U65Oc66W8IOyDiOuhnCBpbXBvcnTtlbTshJwg7LKY66as7ZW07JW8IO2VmOuKlCDqsr3smrDrj4Qg7J6I6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmludmFsaWRhdGVEZXBlbmRlbnRzQWZmZWN0ZWRCeUZpbGVFdmVudHMoaG1yQWN0aW9uUmVxdWlyZWRFdmVudHMpO1xuXG4gICAgLy8gU3luYyDsmIHsl606IGNoZWNrc3VtUGF0dGVybkdyb3Vw7JeQIOuqheyLnOuQnCDtjIzsnbzrk6Tsl5Ag64yA7ZWcIOuzgOuPmeydgCBzeW5jVHJpZ2dlcmluZ1BhdGhz66GcIOyeoe2emeuLiOuLpC5cbiAgICAvLyDsnbQg7Lmc6rWs65Ok7J2AIOyggeygiO2VnCBzeW5jIOyekeyXheycvOuhnCDrjIDsnZHtlanri4jri6QuXG4gICAgaWYgKHN5bmNUcmlnZ2VyaW5nUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgdGhpcy5kb1N5bmNBY3Rpb25zKHN5bmNUcmlnZ2VyaW5nUGF0aHMpO1xuICAgIH1cblxuICAgIC8vIOyLse2BrCDsnpHsl4XsnbQg64Gd64Ks7Jy866m0IOustOyngOyEsSDroZzrk5zrpbwg7IiY7ZaJ7ZWp64uI64ukLlxuICAgIC8vIOyLse2BrOulvCDslYgg7ZWcIOqyveyasOyXkOuPhCDroZzrk5zripQg7ZW07JW8IO2VtOyalC4g7JyE7JeQ7IScIOq0gOugqOyeiOuKlCDsuZzqtazrk6TsnYAg64ukIGludmFsaWRhdGUg65CY7JeI6rGw65Og7JqUIVxuICAgIC8vXG4gICAgLy8g67OA6rK965CcIO2MjOydvOuTpOyXkCDrjIDtlbTshJwg7IOI66Gt6rKMIOuLueqyqOyYpOuKlChsb2FkKSDtlonsnITripQgZG9TeW5jQWN0aW9uc+yXkOyEnCDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgIC8vIGRvU3luY0FjdGlvbnPsl5DshJzripQg7YyM7J287J2EIOydveqzoCDrp4zrk5zripQg7Iux7YGsIO2WieychOunjCDtlanri4jri6QuXG4gICAgLy8g6rGw6riw7IScIOuUsSDrs4Dqsr3rkJwg67aA67aE7JeQIOyYge2Wpeuwm+uKlCBhdXRvbG9hZOunjCDshKDrs4TtlbTshJwg7IiY7ZaJ7ZWY66Ck66m0IOuEiOustCDsp4DsoIDrtoTtlZjqs6Ag67O17J6h7ZW07KeR64uI64ukLlxuICAgIC8vXG4gICAgLy8g7Y287Y+s66i87IqkIOyYge2WpeydgCDrrLTsi5ztlbTrj4Qg7KKL7Iq164uI64ukLlxuICAgIC8vIOyWtOywqO2UvCBobXItaG9va+yXkCDsnZjtlbQgaW52YWxpZGF0ZeuQnCDrtoDrtoTrk6TsnbQg7JWE64uI652866m0IOy6kOyLnCDqt7jrjIDroZwg7Jyg7KeA7ZWp64uI64ukLlxuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRUeXBlcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRNb2RlbHMoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkQXBpcygpO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWRXb3JrZmxvd3MoKTtcbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkU3NyUm91dGVzKCk7XG5cbiAgICB0aGlzLmV2ZW50RW1pdHRlci5lbWl0KFwib25ITVJDb21wbGV0ZWRcIik7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RIbXJBY3Rpb25SZXF1aXJlZEZpbGVFdmVudHMoXG4gICAgZmlsZUV2ZW50czogTWFwPEFic29sdXRlUGF0aCwgXCJjaGFuZ2VcIiB8IFwiYWRkXCI+LFxuICApOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4ge1xuICAgIGNvbnN0IGFwaVNyYyA9IHBhdGguam9pbihTb25hbXUuYXBpUm9vdFBhdGgsIFwic3JjXCIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4oKTtcbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZXZlbnRdIG9mIGZpbGVFdmVudHMpIHtcbiAgICAgIGlmICghZmlsZVBhdGguc3RhcnRzV2l0aChhcGlTcmMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnNldChmaWxlUGF0aCwgZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleHRyYWN0U3luY1RyaWdnZXJpbmdGaWxlRXZlbnRQYXRocyhcbiAgICBmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4sXG4gICk6IFByb21pc2U8QWJzb2x1dGVQYXRoW10+IHtcbiAgICBjb25zdCBjaGVja1BhdHRlcm5Hcm91cCA9IGdldENoZWNrc3VtUGF0dGVybkdyb3VwSW5BYnNvbHV0ZVBhdGgoKTtcbiAgICBjb25zdCBzeW5jVHJpZ2dlcmluZ1BhdGhzOiBBYnNvbHV0ZVBhdGhbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2RpZmZGaWxlUGF0aF0gb2YgZmlsZUV2ZW50cykge1xuICAgICAgY29uc3QgaXNJbkNoZWNrUGF0dGVybkdyb3VwID0gT2JqZWN0LnZhbHVlcyhjaGVja1BhdHRlcm5Hcm91cCkuc29tZSgocGF0dGVybikgPT5cbiAgICAgICAgbWluaW1hdGNoKGRpZmZGaWxlUGF0aCwgcGF0dGVybiksXG4gICAgICApO1xuICAgICAgaWYgKCFpc0luQ2hlY2tQYXR0ZXJuR3JvdXApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzeW5jVHJpZ2dlcmluZ1BhdGhzLnB1c2goZGlmZkZpbGVQYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3luY1RyaWdnZXJpbmdQYXRocztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW52YWxpZGF0ZURlcGVuZGVudHNBZmZlY3RlZEJ5RmlsZUV2ZW50cyhcbiAgICBmaWxlRXZlbnRzOiBNYXA8QWJzb2x1dGVQYXRoLCBcImNoYW5nZVwiIHwgXCJhZGRcIj4sXG4gICkge1xuICAgIGZvciAoY29uc3QgW2RpZmZGaWxlUGF0aCwgZXZlbnRdIG9mIGZpbGVFdmVudHMpIHtcbiAgICAgIC8vIOuzgOqyveuQnCDtjIzsnbzqs7wgZGVwZW5kZW50IO2MjOydvOuTpOydhCBpbnZhbGlkYXRlIO2VqeuLiOuLpC5cbiAgICAgIC8vIO2VnCDrsogg7J207IOBIGltcG9ydOuQnCDsuZzqtazrk6Tsl5Ag64yA7ZW07ISc66eMIOyLpOygnCDsnpHsl4XsnbQg7J287Ja064Kp64uI64ukLlxuICAgICAgLy8g6re465+s64uIIOyViOyLrO2VmOqzoCBpbnZhbGlkYXRlIO2VtOuPhCDrkKnri4jri6QuXG4gICAgICAvLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGhvdC5pbnZhbGlkYXRlRmlsZeyLnCDstIjquLAg7JeQ65+s6rCAIOuwnOyDne2VmOq4sCDrlYzrrLjsl5AgaW52YWxpZGF0ZSDtlZjsp4Ag7JWK7Iq164uI64ukLlxuICAgICAgaWYgKCFpc1Rlc3QoKSkge1xuICAgICAgICBjb25zdCBpbnZhbGlkYXRlZFBhdGhzID0gKGF3YWl0IGhvdC5pbnZhbGlkYXRlRmlsZShkaWZmRmlsZVBhdGgsIGV2ZW50KSkgYXMgQWJzb2x1dGVQYXRoW107XG5cbiAgICAgICAgaWYgKGludmFsaWRhdGVkUGF0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYPCflIQgSW52YWxpZGF0ZWQ6YCkpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBpbnZhbGlkYXRlZFBhdGggb2YgaW52YWxpZGF0ZWRQYXRocykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g66eM7JW9IG1vZGVsLnRzIO2MjOydvOydtCDrs4Dqsr0oaW52YWxpZGF0ZSnrkJjsl4jri6Q/IOq3uOufrOuptCByZWdpc3RlcmVkQXBpcyDspJHsl5DshJwg7J20IOuqqOuNuOyXkCDtlbTri7ntlZjripQgYXBp65Ok7J2AIOyngOybjOykmOyalC5cbiAgICAgICAgICAgICAgLy8gcmVnaXN0ZXJlZEFwaXPripQg7Ya17Jy866GcIOuLpCDrgqDroKTrsoTrprQg7IiYIOyXhuyKteuLiOuLpC4gcmVnaXN0ZXJlZEFwaXPsl5Ag7Jis65287Jik64qUIOy5nOq1rOuTpOydgCDstIjquLAg66Gc65Oc7IucIOuYkOuKlCBITVLsi5zsl5Drp4wg65Ox66Gd65CY6riwIOuVjOusuOyeheuLiOuLpC5cbiAgICAgICAgICAgICAgLy8g65Sw65287IScIG1vZGVsLnRzIO2MjOydvOydmCDrs4Dqsr3snLzroZwg64uk7J2M67KIIOyDiOuhnOyatCBldmFs7J20IOyYiOyDgeuQmOuKlCDsnbQg7Iuc7KCQ7JeQ7ISc66eMLCDsnbQg66qo64247JeQ7IScIOuCmOyYqCByZWdpc3RlcmVkQXBpc+uTpOydhCDsp4Dsm4zspIQg7IiYIOyeiOyKteuLiOuLpC5cbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZEFwaXMgPSB0aGlzLnJlbW92ZUludmFsaWRhdGVkUmVnaXN0ZXJlZEFwaXMoaW52YWxpZGF0ZWRQYXRoKTtcbiAgICAgICAgICAgICAgaWYgKHJlbW92ZWRBcGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGNoYWxrLmJsdWUoYC0gJHtwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcGlSb290UGF0aCwgaW52YWxpZGF0ZWRQYXRoKX1gKSxcbiAgICAgICAgICAgICAgICAgIGNoYWxrLmdyYXkoYCh3aXRoICR7cmVtb3ZlZEFwaXMubGVuZ3RofSBBUElzKWApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShgLSAke3BhdGgucmVsYXRpdmUoU29uYW11LmFwaVJvb3RQYXRoLCBpbnZhbGlkYXRlZFBhdGgpfWApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGNoYWxrLnJlZChgRmFpbGVkIHRvIHJlbW92ZSBpbnZhbGlkYXRlZCByZWdpc3RlcmVkIEFQSXMgZm9yICR7aW52YWxpZGF0ZWRQYXRofWApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBkZXZSdW5uZXIg7Zmc7ISx7ZmUIOyLnCwg67OA6rK965CcIOyGjOyKpCDtjIzsnbzsnYQgVml0ZXN0IOuqqOuTiCDqt7jrnpjtlITsl5DshJzrj4Qg66y07Zqo7ZmU7ZWp64uI64ukLlxuICAgICAgLy8gVml0ZeydmCBtb2R1bGVHcmFwaC5pbnZhbGlkYXRlTW9kdWxlKCnsnbQgaW1wb3J0ZXIg67Cp7Zal7Jy866GcIOyerOq3gOyggSBjYXNjYWRl7ZWY66+A66GcLFxuICAgICAgLy8g7IaM7IqkIO2MjOydvCDtlZjrgpjrp4wg66y07Zqo7ZmU7ZWY66m0IOydtOulvCBpbXBvcnTtlZjripQg7YWM7Iqk7Yq4IO2MjOydvOuPhCDsnpDrj5nsnLzroZwg66y07Zqo7ZmU65Cp64uI64ukLlxuICAgICAgaWYgKCFpc1Rlc3QoKSAmJiBTb25hbXUuY29uZmlnLnRlc3Q/LmRldlJ1bm5lcj8uZW5hYmxlZCAmJiBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlcikge1xuICAgICAgICBTb25hbXUuZGV2Vml0ZXN0TWFuYWdlci5pbnZhbGlkYXRlRmlsZXMoW2RpZmZGaWxlUGF0aF0pO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBjaGFsay5kaW0oYFRlc3QgaW52YWxpZGF0ZWQ6ICR7cGF0aC5yZWxhdGl2ZShTb25hbXUuYXBpUm9vdFBhdGgsIGRpZmZGaWxlUGF0aCl9YCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlSW52YWxpZGF0ZWRSZWdpc3RlcmVkQXBpcyhcbiAgICBpbnZhbGlkYXRlZFBhdGg6IEFic29sdXRlUGF0aCxcbiAgKTogKHR5cGVvZiByZWdpc3RlcmVkQXBpcylbbnVtYmVyXVtdIHtcbiAgICBpZiAoIWludmFsaWRhdGVkUGF0aC5lbmRzV2l0aChcIi5tb2RlbC50c1wiIC8q7IaM7IqkIOy9lOuTnOulvCDri6Tro6jripQg7IOB7Zmp7J2064uIIC50cyDqsr3roZzroZwg67SF64uI64ukLiovKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGVudGl0eUlkID0gRW50aXR5TWFuYWdlci5nZXRFbnRpdHlJZEZyb21QYXRoKGludmFsaWRhdGVkUGF0aCk7XG4gICAgY29uc3QgdG9SZW1vdmUgPSByZWdpc3RlcmVkQXBpcy5maWx0ZXIoKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gYCR7ZW50aXR5SWR9TW9kZWxgKTtcbiAgICBmb3IgKGNvbnN0IGFwaSBvZiB0b1JlbW92ZSkge1xuICAgICAgY29uc3QgaWR4ID0gcmVnaXN0ZXJlZEFwaXMuaW5kZXhPZihhcGkpO1xuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgcmVnaXN0ZXJlZEFwaXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvUmVtb3ZlO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRUeXBlcygpIHtcbiAgICB0aGlzLnR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZE1vZGVscygpIHtcbiAgICB0aGlzLm1vZGVscyA9IGF3YWl0IGxvYWRNb2RlbHMoKTtcbiAgfVxuXG4gIGFzeW5jIGF1dG9sb2FkQXBpcygpIHtcbiAgICB0aGlzLmFwaXMgPSBhd2FpdCBsb2FkQXBpcygpO1xuICB9XG5cbiAgYXN5bmMgYXV0b2xvYWRXb3JrZmxvd3MoKSB7XG4gICAgdGhpcy53b3JrZmxvd3MgPSBhd2FpdCBsb2FkV29ya2Zsb3dzKCk7XG4gICAgYXdhaXQgU29uYW11LndvcmtmbG93cy5zeW5jaHJvbml6ZSh0aGlzLndvcmtmbG93cyk7XG4gIH1cblxuICBhc3luYyBhdXRvbG9hZFNzclJvdXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzc3JDb25maWdQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmMvc3NyXCIpO1xuXG4gICAgLy8g6riw7KG0IHJvdXRlcyDstIjquLDtmZRcbiAgICBjb25zdCB7IGNsZWFyU1NSUm91dGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi9zc3JcIik7XG4gICAgY2xlYXJTU1JSb3V0ZXMoKTtcblxuICAgIC8vIHNzciDtj7TrjZQg7JeG7Jy866m0IOyKpO2CtVxuICAgIGlmICghKGF3YWl0IGV4aXN0cyhzc3JDb25maWdQYXRoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzc3Ig7Y+0642UIOyViOydmCDrqqjrk6AgLnRzIO2MjOydvCDroZzrk5xcbiAgICBjb25zdCB7IGdsb2JBc3luYyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIik7XG4gICAgY29uc3QgeyBpbXBvcnRNZW1iZXJzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi91dGlscy9lc20tdXRpbHNcIik7XG4gICAgY29uc3QgeyBydW50aW1lUGF0aCB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vdXRpbHMvcGF0aC11dGlsc1wiKTtcblxuICAgIC8vIHJ1bnRpbWVQYXRo66W8IOyCrOyaqe2VmOyXrCDqsJzrsJwv7ZSE66Gc642V7IWYIO2ZmOqyveyXkCDrp57ripQg7ZmV7J6l7J6QIOyymOumrFxuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKHBhdGguam9pbihzc3JDb25maWdQYXRoLCBydW50aW1lUGF0aChcIioqLyoudHNcIikpKTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gaW1wb3J0TWVtYmVyc+ulvCDsgqzsmqntlZjrqbQg7YyM7J287J2YIHNpZGUgZWZmZWN0KHJlZ2lzdGVyU1NSIO2YuOy2nCnqsIAg7Iuk7ZaJ65CoXG4gICAgICAgIGF3YWl0IGltcG9ydE1lbWJlcnMoZmlsZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIFNTUiByb3V0ZTogJHtmaWxlfWAsIGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDsi6TsoJwg7Iux7YGs66W8IOyImO2Wie2VmOuKlCDrs7jssrTsnoXri4jri6QuXG4gICAqIOuzgOqyveuQnCDtjIzsnbzrk6TsnYQg7YOA7J6F67OE66GcIOu2hOulmO2VmOqzoCDqsIEg7YOA7J6F7JeQIOunnuuKlCDslaHshZjsnYQg7Iuk7ZaJ7ZWp64uI64ukLlxuICAgKlxuICAgKiBAcGFyYW0gZGlmZkZpbGVQYXRocyAtIOuzgOqyveuQnCDtjIzsnbzrk6TsnZgg7KCI64yAIOqyveuhnCDrqqnroZ1cbiAgICogQHJldHVybnMgZGlmZlR5cGVzIC0g67OA6rK965CcIO2MjOydvOydmCDtg4DsnoUg66qp66GdIChlbnRpdHksIHR5cGVzLCBtb2RlbCDrk7EpXG4gICAqL1xuICBhc3luYyBkb1N5bmNBY3Rpb25zKGRpZmZGaWxlUGF0aHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTx7IGRpZmZUeXBlczogRmlsZVR5cGVbXSB9PiB7XG4gICAgY29uc3QgZGlmZkdyb3VwcyA9IHRoaXMuY2FsY3VsYXRlRGlmZkdyb3VwcyhkaWZmRmlsZVBhdGhzKTtcbiAgICBjb25zdCBkaWZmVHlwZXMgPSBPYmplY3Qua2V5cyhkaWZmR3JvdXBzKSBhcyBGaWxlVHlwZVtdO1xuXG4gICAgLy8g7Jes6riw64qUIOuzhOuhnCDspJHsmpTtlZwg7YyM7Yq464qUIOyVhOuLmeuLiOuLpC5cbiAgICAvLyDslYTrnpjsnZggaWYg7KCE6rCc66W8IOq5lOuBlO2VmOqyjCDtlZjroKTqs6Ag66eM65OgIERTTCDqsJnsnYAg6rGw65287IScLCDrrLTsi5ztlZjshZTrj4Qg65Cp64uI64ukLlxuICAgIGNvbnN0IHsgY2hhbmdlTWF0Y2hlcywgbm90aGluZ01hdGNoZXMsIHVuaGFuZGxlZFBhdGhzIH0gPSB0aGlzLmNoYW5nZU1hdGNoZXIoXG4gICAgICBkaWZmVHlwZXMsXG4gICAgICBkaWZmR3JvdXBzLFxuICAgICk7XG5cbiAgICBpZiAoY2hhbmdlTWF0Y2hlcyhcImVudGl0eVwiLCBcInR5cGVzXCIpKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVRydXRoU291cmNlQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlTWF0Y2hlcyhcIm1vZGVsXCIsIFwiZnJhbWVcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlSW1wbGVtZW50YXRpb25DaGFuZ2VzKGRpZmZHcm91cHMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VNYXRjaGVzKFwidHlwZXNcIiwgXCJmdW5jdGlvbnNcIikpIHtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV4aWxpYXJ5U3ltYm9sQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlTWF0Y2hlcyhcImNvbmZpZ1wiKSkge1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVDb25maWdDaGFuZ2VzKGRpZmZHcm91cHMpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VNYXRjaGVzKFwiaTE4blwiLCBcImVudGl0eVwiIC8q66CI7J2067iUKi8sIFwiY29uZmlnXCIgLypkZWZhdWx0TG9jYWxl65OxKi8pKSB7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZVNvbmFtdURpY3Rpb25hcnlSZWxhdGVkQ2hhbmdlcyhkaWZmR3JvdXBzKTtcbiAgICB9XG5cbiAgICBpZiAobm90aGluZ01hdGNoZXMoKSkge1xuICAgICAgLy8g7YyM7J28IOuzgOqyveydgCDqsJDsp4DrkJjsl4jsnLzrgpgg7KCAIOychCDslrTripAgY2hhbmdlTWF0Y2hlc+yXkOuPhCDqsbjrpqzsp4Ag7JWK7J2AIO2MjOydvOuTpOydtCBkcmlmdHPsnoXri4jri6QuXG4gICAgICAvLyBzeW5jZXLripQg7IaM7Iqk7J2YIOuzgOqyveyXkOuKlCDrsJjsnZHtlZjsp4Drp4wg7IKw7Lac66y87J2YIOuzgOqyvShkcmlmdCnsl5DripQg7KeB7KCR7KCB7Jy866GcIOuwmOydke2VmOyngCDslYrsirXri4jri6QuXG4gICAgICAvLyDrjIDsi6Ag7J20IGRyaWZ07JeQIOuMgO2VtCDqsr3qs6Ag7KCV64+E66eMIOy2nOugpe2VtOykjeuLiOuLpC5cbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRHJpZnRzKHVuaGFuZGxlZFBhdGhzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkaWZmVHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURpZmZHcm91cHMoZGlmZkZpbGVzOiBBYnNvbHV0ZVBhdGhbXSk6IERpZmZHcm91cHMge1xuICAgIGNvbnN0IHBhdHRlcm5Hcm91cCA9IGdldENoZWNrc3VtUGF0dGVybkdyb3VwKCk7XG4gICAgY29uc3QgZmlsZVR5cGVzID0gT2JqZWN0LmtleXMocGF0dGVybkdyb3VwKSBhcyBGaWxlVHlwZVtdO1xuXG4gICAgcmV0dXJuIGdyb3VwKGRpZmZGaWxlcywgKGZpbGVQYXRoKSA9PiB7XG4gICAgICAvLyDsoIjrjIAg6rK966GcIOKGkiBhcHBSb290IOq4sOykgCDsg4HrjIAg6rK966GcICjsmIg6IFwiYXBpL3NyYy8uLi5cIiwgXCJ3ZWIvc3JjLy4uLlwiKVxuICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZShTb25hbXUuYXBwUm9vdFBhdGgsIGZpbGVQYXRoKTtcbiAgICAgIGlmIChyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aChcIi4uXCIpKSByZXR1cm4gXCJ1bmtub3duXCI7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZVR5cGUgb2YgZmlsZVR5cGVzKSB7XG4gICAgICAgIGlmIChtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuR3JvdXBbZmlsZVR5cGVdKSkge1xuICAgICAgICAgIHJldHVybiBmaWxlVHlwZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFwidW5rbm93blwiO1xuICAgIH0pIGFzIHVua25vd24gYXMgRGlmZkdyb3VwcztcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlTWF0Y2hlcihkaWZmVHlwZXM6IEZpbGVUeXBlW10sIGRpZmZHcm91cHM6IERpZmZHcm91cHMpIHtcbiAgICBjb25zdCBoYW5kbGVkID0gbmV3IFNldDxGaWxlVHlwZT4oKTtcblxuICAgIC8qKlxuICAgICAqIOuzgOqyvSDsgqztla3snbQg7J247J6Q66GcIOuwm+ydgCBGaWxlVHlwZeuTpCDspJEg7ZWY64KYIOydtOyDgeydhCDtj6ztlajtlZjripTsp4Ag7ZmV7J247ZWp64uI64ukLlxuICAgICAqIOqwgOuguSBbXCJlbnRpdHlcIl3qsIAg67OA6rK965CcIO2YuOy2nOyXkOyEnCBjaGFuZ2VNYXRjaGVzKFwiZW50aXR5XCIp64qUIHRyeWXrpbwg67CY7ZmY7ZWY66mwLFxuICAgICAqIFtcInR5cGVzXCIsIFwiaTE4blwiXeydtCDrs4Dqsr3rkJwg7Zi47Lac7JeQ7IScIGNoYW5nZU1hdGNoZXMoXCJ0eXBlc1wiLCBcImZ1bmN0aW9uc1wiKeuPhCB0cnVl66W8IOuwmO2ZmO2VmOyngOunjCxcbiAgICAgKiBbXCJmdW5jdGlvbnNcIl3qsIAg67OA6rK965CcIO2YuOy2nOyXkOyEnCBjaGFuZ2VNYXRjaGVzKFwiZnJhbWVcIinsnYAgZmFsc2Xrpbwg67CY7ZmY7ZWp64uI64ukLlxuICAgICAqIEBwYXJhbSB0eXBlc1xuICAgICAqL1xuICAgIGNvbnN0IGNoYW5nZU1hdGNoZXMgPSAoLi4udHlwZXM6IEZpbGVUeXBlW10pID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoaW5nID0gdHlwZXMuZmlsdGVyKCh0KSA9PiBkaWZmVHlwZXMuaW5jbHVkZXModCkpO1xuICAgICAgbWF0Y2hpbmcuZm9yRWFjaCgodCkgPT4gaGFuZGxlZC5hZGQodCkpO1xuICAgICAgcmV0dXJuIG1hdGNoaW5nLmxlbmd0aCA+IDA7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIGNoYW5nZU1hdGNoZXProZwg66ek7Lmt65CcIOqyg+ydtCDtlZjrgpjrj4Qg7JeG64qU7KeAIOyXrOu2gOulvCDqsIDsoLjsmLXri4jri6QuXG4gICAgICovXG4gICAgY29uc3Qgbm90aGluZ01hdGNoZXMgPSAoKSA9PiBoYW5kbGVkLnNpemUgPT09IDA7XG5cbiAgICAvKipcbiAgICAgKiDslrTrlqQgY2hhbmdlTWF0Y2hlcyDtmLjstpzsl5Drj4Qg6rG466as7KeAIOyViuydgCBGaWxlVHlwZeuTpOydmCDsi6TsoJwg7YyM7J28IOqyveuhnOulvCDrqqjslYTshJwg67CY7ZmY7ZWp64uI64ukLlxuICAgICAqL1xuICAgIGNvbnN0IHVuaGFuZGxlZFBhdGhzID0gKCk6IEFic29sdXRlUGF0aFtdID0+XG4gICAgICBkaWZmVHlwZXMuZmlsdGVyKCh0KSA9PiAhaGFuZGxlZC5oYXModCkpLmZsYXRNYXAoKHQpID0+IGRpZmZHcm91cHNbdF0gPz8gW10pO1xuXG4gICAgcmV0dXJuIHsgY2hhbmdlTWF0Y2hlcywgbm90aGluZ01hdGNoZXMsIHVuaGFuZGxlZFBhdGhzIH07XG4gIH1cblxuICBhc3luYyBoYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXMoZGlmZkdyb3VwczogRGlmZkdyb3Vwcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5haXRlLnQoXCJoYW5kbGVUcnV0aFNvdXJjZUNoYW5nZXNcIiwgeyBkaWZmR3JvdXBzIH0pO1xuXG4gICAgYXdhaXQgRW50aXR5TWFuYWdlci5yZWxvYWQoKTtcblxuICAgIC8vIHR5cGVzIOyDneyEsShlbnRpdHkg7IOI66GcIOy2lOqwgOuQnCDqsr3smrApXG4gICAgLy8gcGFyZW50SWTqsIAg7JeG6rOgLCB0eXBlc+qwgCDsl4bripQg6rK97Jqw7JeQ66eMIOyDneyEsVxuICAgIGNvbnN0IGVudGl0eVBhdGggPSBkaWZmR3JvdXBzLmVudGl0eT8uYXQoMCk7XG4gICAgaWYgKGVudGl0eVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZW50aXR5SWQgPSBFbnRpdHlNYW5hZ2VyLmdldEVudGl0eUlkRnJvbVBhdGgoZW50aXR5UGF0aCk7XG4gICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgIC8vIO2UhOuhnOygne2KuOyXkCDsg53shLHrkJjslrTslbwg7ZWY64qUIC50cyDtjIzsnbzsnZgg6rK966Gc7J6F64uI64ukLlxuICAgICAgY29uc3QgdHlwZUZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICBTb25hbXUuYXBpUm9vdFBhdGgsXG4gICAgICAgIGBzcmMvYXBwbGljYXRpb24vJHtlbnRpdHkubmFtZXMuZnN9LyR7ZW50aXR5Lm5hbWVzLmZzfS50eXBlcy50c2AsXG4gICAgICApIGFzIEFic29sdXRlUGF0aDtcblxuICAgICAgaWYgKGVudGl0eS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkICYmICEoYXdhaXQgZXhpc3RzKHR5cGVGaWxlUGF0aCkpKSB7XG4gICAgICAgIC8vICoudHlwZXMudHPqsIAg66eM65Ok7Ja07KeR64uI64ukLlxuICAgICAgICBjb25zdCB0eXBlcyA9IGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uR2VuZXJhdGVJbml0aWFsVHlwZXMoZW50aXR5SWQpO1xuXG4gICAgICAgIC8vIOq3uOqxuCDtg4Dqsp/sl5Ag6rCW64uk65Gs7JqULlxuICAgICAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyh0eXBlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc29uYW11LmdlbmVyYXRlZC50c+yZgCBzb25hbXUuZ2VuZXJhdGVkLnNzby50c+qwgCDrp4zrk6TslrTsp5Hri4jri6QuXG4gICAgY29uc3QgZ2VuZXJhdGVkID0gYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25HZW5lcmF0ZVNjaGVtYXMoKTtcblxuICAgIC8vIOuqqOuToCDqsoPrk6TsnYQgdGFyZ2V07JeQIOuztOuCtOyngOuKlCDslYrsirXri4jri6QuXG4gICAgLy8gc29uYW11LmdlbmVyYXRlZC5zc28udHPripQgc2VydmljZS1zaWRlLW9ubHnri4jquYwg67Cw7KCc7ZWp64uI64ukLlxuICAgIC8vIFRPRE8o67OR7KSAKTog7J20IO2VmOuTnOy9lOuTnOulvCDriITqsIAg7ZW06rKwIOyigCDtlbTso7zshLjsmpQuIOydvOuLqOydgCDqsJDri7kg6rCA64ql7ZWY64uIIOuGlOuRkOqyoOyKteuLiOuLpC4uLlxuICAgIGNvbnN0IGRpc3RyaWJ1dGFibGUgPSBnZW5lcmF0ZWQuZmlsdGVyKChwKSA9PiAhcC5lbmRzV2l0aChcIi5zc28udHNcIikpO1xuXG4gICAgLy8g7J207KCcIOuztOuCvCDqsoPrk6Trp4wgdGFyZ2V07JeQIOuztOuCtOyalC5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvblN5bmNGaWxlc1RvVGFyZ2V0cyhkaXN0cmlidXRhYmxlKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZUltcGxlbWVudGF0aW9uQ2hhbmdlc1wiLCB7IGRpZmZHcm91cHMgfSk7XG4gICAgY29uc3QgbWVyZ2VkR3JvdXAgPSBbLi4uKGRpZmZHcm91cHMubW9kZWwgPz8gW10pLCAuLi4oZGlmZkdyb3Vwcy5mcmFtZSA/PyBbXSldO1xuXG4gICAgLy8gZ2VuZXJhdGVkX2h0dHAudGVtcGxhdGUudHPsl5DshJwgc3luY2VyLnR5cGVz66W8IOyUgeuLiOuLpC5cbiAgICAvLyBzZXJ2aWNlLnRlbXBsYXRlLnRz7JeQ7IScIHN5bmNlci5hcGlz66W8IOyUgeuLiOuLpC5cbiAgICBhd2FpdCB0aGlzLmF1dG9sb2FkTW9kZWxzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZFR5cGVzKCk7XG4gICAgYXdhaXQgdGhpcy5hdXRvbG9hZEFwaXMoKTtcblxuICAgIGNvbnN0IHBhcmFtczoge1xuICAgICAgbmFtZXNSZWNvcmQ6IEVudGl0eU5hbWVzUmVjb3JkO1xuICAgIH1bXSA9IG1lcmdlZEdyb3VwLm1hcCgobW9kZWxQYXRoKSA9PiB7XG4gICAgICBpZiAobW9kZWxQYXRoLmVuZHNXaXRoKFwiLm1vZGVsLnRzXCIpIHx8IG1vZGVsUGF0aC5lbmRzV2l0aChcIi5mcmFtZS50c1wiKSkge1xuICAgICAgICBjb25zdCBlbnRpdHlJZCA9IEVudGl0eU1hbmFnZXIuZ2V0RW50aXR5SWRGcm9tUGF0aChtb2RlbFBhdGgpO1xuICAgICAgICBhc3NlcnQoZW50aXR5SWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzUmVjb3JkOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCByZWFjaGFibGVcIik7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU2VydmljZXMocGFyYW1zKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlSHR0cHMoKTtcbiAgICBhd2FpdCBTeW5jZXJBY3Rpb25zLmFjdGlvbkdlbmVyYXRlU3NyUXVlcmllcygpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV4aWxpYXJ5U3ltYm9sQ2hhbmdlcyhkaWZmR3JvdXBzOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgTmFpdGUudChcImhhbmRsZUF1eGlsaWFyeVN5bWJvbENoYW5nZXNcIiwgeyBkaWZmR3JvdXBzIH0pO1xuICAgIGNvbnN0IHRzUGF0aHMgPSB1bmlxdWUoWy4uLihkaWZmR3JvdXBzLnR5cGVzID8/IFtdKSwgLi4uKGRpZmZHcm91cHMuZnVuY3Rpb25zID8/IFtdKV0pO1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY0ZpbGVzVG9UYXJnZXRzKHRzUGF0aHMpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQ29uZmlnQ2hhbmdlcyhfOiBEaWZmR3JvdXBzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgU3luY2VyQWN0aW9ucy5hY3Rpb25TeW5jQ29uZmlnKCk7XG4gIH1cblxuICBhc3luYyBoYW5kbGVTb25hbXVEaWN0aW9uYXJ5UmVsYXRlZENoYW5nZXMoXzogRGlmZkdyb3Vwcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFN5bmNlckFjdGlvbnMuYWN0aW9uU3luY1NvbmFtdURpY3Rpb25hcnkoKTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZURyaWZ0cyhkcmlmdHM6IEFic29sdXRlUGF0aFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGRyaWZ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICBcIuKaoO+4jyBTb25hbXXqsIAg7J6Q64+ZIOyDneyEse2VnCDtjIzsnbzsl5Ag64yA7ZWcIOuzgOqyveydtCDqsJDsp4DrkJjsl4jsirXri4jri6QuIO2MjOydvOydtCBTb25hbXUgd2F0Y2hlciDsmbjrtoDsl5DshJwg67OA6rK965CcIOqyg+ycvOuhnCDstpTsoJXrkKnri4jri6QuXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCBwIG9mIGRyaWZ0cykge1xuICAgICAgICBjb25zb2xlLndhcm4oY2hhbGsueWVsbG93KGAgIC0gJHtwYXRoLnJlbGF0aXZlKFNvbmFtdS5hcHBSb290UGF0aCwgcCl9YCkpO1xuICAgICAgfVxuICAgICAgY29uc29sZS53YXJuKGNoYWxrLmRpbShcIiAg4oaSIGBwbnBtIHNvbmFtdSBzeW5jIC0tZm9yY2Vg66W8IOq2jOyepe2VqeuLiOuLpC5cIikpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDso7zslrTsp4Qg7JeU7Yuw7Yuw7JmAIO2FnO2UjOumvyDtgqTsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIHRlbXBsYXRlS2V5IO2FnO2UjOumvyDtgqRcbiAgICogQHBhcmFtIGVudW1JZCDsl7TqsbDtmJUgSURcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgZW50aXR5SWQ6IHN0cmluZyxcbiAgICB0ZW1wbGF0ZUtleTogVGVtcGxhdGVLZXksXG4gICAgZW51bUlkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgc3ViUGF0aDogc3RyaW5nOyBmdWxsUGF0aDogc3RyaW5nOyBpc0V4aXN0czogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IGdlblBhdGggfSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpLmdldFRhcmdldEFuZFBhdGgoXG4gICAgICBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKSxcbiAgICAgIGVudW1JZCxcbiAgICApO1xuXG4gICAgY29uc3Qgc3ViUGF0aCA9IHBhdGguam9pbih0YXJnZXQsIGdlblBhdGgpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKFNvbmFtdS5hcHBSb290UGF0aCwgc3ViUGF0aCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YlBhdGgsXG4gICAgICBmdWxsUGF0aCxcbiAgICAgIGlzRXhpc3RzOiBhd2FpdCBleGlzdHMoZnVsbFBhdGgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog7KO87Ja07KeEIOyXlO2LsO2LsOyZgCDsl7TqsbDtmJXsl5Ag64yA7ZW0LCDsg53shLHrkJwg7L2U65Oc6rCAIOyhtOyerO2VmOuKlOyngCDtmZXsnbjtlanri4jri6QuXG4gICAqIEBwYXJhbSBlbnRpdHlJZCDsl5Tti7Dti7AgSURcbiAgICogQHBhcmFtIGVudW1zIOyXtOqxsO2YlSDroIjsnbTruJRcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOy9lOuTnOqwgCDsobTsnqztlZjripTsp4Ag7Jes67aAXG4gICAqL1xuICBhc3luYyBjaGVja0V4aXN0cyhcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGVudW1zOiB7XG4gICAgICBbbmFtZTogc3RyaW5nXTogei5ab2RFbnVtO1xuICAgIH0sXG4gICk6IFByb21pc2U8UmVjb3JkPGAke1RlbXBsYXRlS2V5fSR7c3RyaW5nfWAsIGJvb2xlYW4+PiB7XG4gICAgY29uc3Qga2V5czogVGVtcGxhdGVLZXlbXSA9IFRlbXBsYXRlS2V5Lm9wdGlvbnM7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnVtc0tleXMgPSBPYmplY3Qua2V5cyhlbnVtcykuZmlsdGVyKChuYW1lKSA9PiBuYW1lICE9PSBuYW1lcy5jb25zdGFudCk7XG5cbiAgICByZXR1cm4gYXdhaXQgcmVkdWNlQXN5bmMoXG4gICAgICBrZXlzLFxuICAgICAgYXN5bmMgKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHRwbCA9IFRlbXBsYXRlTWFuYWdlci5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFwidmlld19lbnVtc1wiKSkge1xuICAgICAgICAgIGF3YWl0IG1hcEFzeW5jKGVudW1zS2V5cywgYXN5bmMgKGNvbXBvbmVudElkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldCwgcGF0aDogcCB9ID0gdHBsLmdldFRhcmdldEFuZFBhdGgobmFtZXMsIGNvbXBvbmVudElkKTtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke2NvbXBvbmVudElkfWBdID0gYXdhaXQgZXhpc3RzKFxuICAgICAgICAgICAgICBwYXRoLmpvaW4oU29uYW11LmFwcFJvb3RQYXRoLCB0YXJnZXQsIHApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB0YXJnZXQsIHBhdGg6IHAgfSA9IHRwbC5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXRzIH0gPSBTb25hbXUuY29uZmlnLnN5bmM7XG4gICAgICAgIGlmICh0YXJnZXQuaW5jbHVkZXMoXCI6dGFyZ2V0XCIpKSB7XG4gICAgICAgICAgYXdhaXQgbWFwQXN5bmModGFyZ2V0cywgYXN5bmMgKHQpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdFtgJHtrZXl9X18ke3R9YF0gPSBhd2FpdCBleGlzdHMoXG4gICAgICAgICAgICAgIHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldC5yZXBsYWNlKFwiOnRhcmdldFwiLCB0KSwgcCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gYXdhaXQgZXhpc3RzKHBhdGguam9pbihTb25hbXUuYXBwUm9vdFBhdGgsIHRhcmdldCwgcCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8YCR7VGVtcGxhdGVLZXl9JHtzdHJpbmd9YCwgYm9vbGVhbj4sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUVudGl0eShmb3JtOiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRpdHlcIl0pIHtcbiAgICByZXR1cm4gYXdhaXQgY3JlYXRlRW50aXR5KGZvcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIO2VmOychO2YuO2ZmOyaqSDtlITroZ3si5wg66mU7IaM65Oc7J6F64uI64ukLlxuICAgKi9cbiAgYXN5bmMgZGVsRW50aXR5KGVudGl0eUlkOiBzdHJpbmcpOiBQcm9taXNlPHsgZGVsUGF0aHM6IHN0cmluZ1tdIH0+IHtcbiAgICByZXR1cm4gYXdhaXQgZGVsRW50aXR5KGVudGl0eUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVGVtcGxhdGU8VCBleHRlbmRzIFRlbXBsYXRlS2V5PihcbiAgICBrZXk6IFQsXG4gICAgdGVtcGxhdGVPcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVF0sXG4gICAgX2dlbmVyYXRlT3B0aW9ucz86IEdlbmVyYXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxBYnNvbHV0ZVBhdGhbXT4ge1xuICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZVRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zLCBfZ2VuZXJhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmRlclRlbXBsYXRlPFQgZXh0ZW5kcyBrZXlvZiBUZW1wbGF0ZU9wdGlvbnM+KFxuICAgIGtleTogVCxcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IFRlbXBsYXRlT3B0aW9uc1tUXSxcbiAgKTogUHJvbWlzZTxQYXRoQW5kQ29kZVtdPiB7XG4gICAgcmV0dXJuIGF3YWl0IHJlbmRlclRlbXBsYXRlKGtleSwgdGVtcGxhdGVPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlZjsnITtmLjtmZjsmqkg7ZSE66Gd7IucIOuplOyGjOuTnOyeheuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHJlbmV3Q2hlY2tzdW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBhd2FpdCByZW5ld0NoZWNrc3VtcygpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkFXbUQ7Y0FDWjtzQkFDa0I7YUFFbEI7d0JBRXdCO2FBRWxCO21CQUVnQjtvQkFDVjtrQkFDTjtnQkFDRjtxQkFFc0I7Z0JBQ1c7c0JBQ1I7eUJBQ047cUJBQ21DO3FCQUVoQjtzQkFFL0I7Q0FNckMsU0FBYixNQUFvQjtFQUNsQixPQUFtQixFQUFFO0VBQ3JCLFFBQXFCLEVBQUU7RUFDdkIsU0FBdUIsRUFBRTtFQUN6QixZQUE2QyxJQUFJLEtBQUs7RUFDdEQsZUFBNkIsSUFBSSxjQUFjOzs7Ozs7RUFPL0MsTUFBTSxPQUFzQjtBQUkxQixTQUFNQSxzQ0FBb0Q7QUFDMUQsU0FBTUMseUNBQXVEO0dBRzdELE1BQU0sZUFBZSxNQUFNLGdDQUFnQztBQUMzRCxPQUFJLGFBQWEsV0FBVyxHQUFHO0FBQzdCLFlBQVEsSUFBSSxNQUFNLE1BQU0sUUFBUSxXQUFXLHdCQUF3QixDQUFDLENBQUM7QUFDckU7O0FBTUYsU0FBTSx3QkFDSixZQUFZO0FBRVYsVUFBTSxLQUFLLGNBQWMsYUFBYTtBQUd0QyxVQUFNLGdCQUFnQjtNQUV4QjtJQUFFLGlCQUFpQjtJQUFXLGFBQWE7SUFBTyxDQUNuRDs7Ozs7Ozs7O0VBVUgsTUFBTSxZQUEyQjtHQUMvQixNQUFNLFdBQVcsS0FBSyxLQUFLLE9BQU8sYUFBYSxjQUFjO0FBQzdELE9BQUksTUFBTSxPQUFPLFNBQVMsRUFBRTtBQUMxQixVQUFNLE9BQU8sU0FBUzs7QUFFeEIsU0FBTSxLQUFLLE1BQU07Ozs7Ozs7Ozs7Ozs7OztFQWdCbkIsTUFBTSxXQUFXLFlBQWdFO0dBQy9FLE1BQU0sMEJBQTBCLEtBQUssbUNBQW1DLFdBQVc7R0FDbkYs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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.9",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -130,9 +130,9 @@
|
|
|
130
130
|
"vite": "8.0.5",
|
|
131
131
|
"vitest": "^4.1.2",
|
|
132
132
|
"@sonamu-kit/hmr-hook": "^0.5.1",
|
|
133
|
-
"@sonamu-kit/
|
|
133
|
+
"@sonamu-kit/ts-loader": "^2.2.0",
|
|
134
134
|
"@sonamu-kit/tasks": "^0.3.0",
|
|
135
|
-
"@sonamu-kit/
|
|
135
|
+
"@sonamu-kit/hmr-runner": "^0.2.0"
|
|
136
136
|
},
|
|
137
137
|
"devDependencies": {
|
|
138
138
|
"@types/bcrypt": "^6",
|
|
@@ -678,7 +678,14 @@ export function useWebSocketChannel<
|
|
|
678
678
|
const baseUrl = axios.defaults.baseURL ?? "$[[baseUrl]]";
|
|
679
679
|
const wsBaseUrl = baseUrl.replace(/^http:/, "ws:").replace(/^https:/, "wss:");
|
|
680
680
|
const fullUrl = new URL(queryString ? `${url}?${queryString}` : url, wsBaseUrl).toString();
|
|
681
|
-
|
|
681
|
+
// RN의 WebSocket 생성자는 3번째 인자로 { headers } 옵션을 받지만 lib.dom 타입엔 없음.
|
|
682
|
+
// 명시 cast로 우회 — 결과 socket은 WebSocket 타입 그대로 유지됨.
|
|
683
|
+
const RNWebSocket = WebSocket as new (
|
|
684
|
+
url: string | URL,
|
|
685
|
+
protocols?: string | string[],
|
|
686
|
+
options?: { headers?: Record<string, string> },
|
|
687
|
+
) => WebSocket;
|
|
688
|
+
const socket = new RNWebSocket(fullUrl, protocols, {
|
|
682
689
|
headers: {
|
|
683
690
|
"Accept-Language": getCurrentLocale(),
|
|
684
691
|
...(headers ?? {}),
|
|
@@ -57,7 +57,7 @@ export function getChecksumPatternGroup() {
|
|
|
57
57
|
// sonamu.shared.ts와 entry-server.generated.tsx와 같은
|
|
58
58
|
// sync 초반 1회성 부트스트랩 파일들은 관리 안 하기 때문에 여기에 리스팅도 안 합니다.
|
|
59
59
|
generated: api("src/application/**/*.generated.{ts,tsx,sso.ts}"),
|
|
60
|
-
generatedCopied: targets("src/services/**/
|
|
60
|
+
generatedCopied: targets("src/services/**/sonamu.generated.{ts,tsx}"),
|
|
61
61
|
httpGenerated: api("src/application/**/*.generated.http"),
|
|
62
62
|
servicesGenerated: targets("src/services/services.generated.ts"),
|
|
63
63
|
sdGenerated: anywhere("src/i18n/**/sd.generated.ts"),
|
|
@@ -117,27 +117,15 @@ export async function actionGenerateSsrEntryServerIfNotExists(): Promise<Absolut
|
|
|
117
117
|
}
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
|
-
* 주어진 .ts 파일들(api에 있다고 가정)을 타겟 디렉토리의 services에 갖다 둡니다.
|
|
120
|
+
* 주어진 .ts 파일들(api에 있다고 가정)을 모든 타겟 디렉토리의 services에 갖다 둡니다.
|
|
121
121
|
* 이때 내부의 sonamu import는 sonamu.shared.ts import로 치환되고,
|
|
122
122
|
* 경로의 /application/은 /services/로 치환됩니다.
|
|
123
123
|
*
|
|
124
|
-
* 기본은 Sonamu.config.sync.targets 전체를 대상으로 하며,
|
|
125
|
-
* onlyTargetsStartingWith 화이트리스트로 일부 target에만 분배할 수 있습니다.
|
|
126
|
-
* 가량 SSR-only인 queries.generated.ts같은 친구들은 "web"으로 시작하는 타겟들에만 보낼 수 있어요.
|
|
127
|
-
* ["web"]으로 넘기면 web, web-admin, webapp 등에 모두 매치됩니다.
|
|
128
|
-
*
|
|
129
124
|
* @param tsPaths 복사할 파일들의 절대 경로
|
|
130
|
-
* @param onlyTargetsStartingWith 분배할 target 접두어들의 화이트리스트. 미지정 시 모든 target.
|
|
131
125
|
* @returns 각 타겟에 복사된 파일들의 절대 경로 배열 (flat).
|
|
132
126
|
*/
|
|
133
|
-
export async function actionSyncFilesToTargets(
|
|
134
|
-
|
|
135
|
-
onlyTargetsStartingWith?: string[],
|
|
136
|
-
): Promise<string[]> {
|
|
137
|
-
const allTargets = Sonamu.config.sync.targets;
|
|
138
|
-
const targets = onlyTargetsStartingWith
|
|
139
|
-
? allTargets.filter((t) => onlyTargetsStartingWith.some((prefix) => t.startsWith(prefix)))
|
|
140
|
-
: allTargets;
|
|
127
|
+
export async function actionSyncFilesToTargets(tsPaths: AbsolutePath[]): Promise<string[]> {
|
|
128
|
+
const { targets } = Sonamu.config.sync;
|
|
141
129
|
const { dir: apiDir } = Sonamu.config.api;
|
|
142
130
|
|
|
143
131
|
return (
|
package/src/syncer/syncer.ts
CHANGED
|
@@ -449,17 +449,9 @@ export class Syncer {
|
|
|
449
449
|
throw new Error("not reachable");
|
|
450
450
|
});
|
|
451
451
|
|
|
452
|
-
// services.generated.ts를 target들에, sonamu.generated.http를 api에 만들어줘요.
|
|
453
452
|
await SyncerActions.actionGenerateServices(params);
|
|
454
453
|
await SyncerActions.actionGenerateHttps();
|
|
455
|
-
|
|
456
|
-
// queries.generated.ts가 만들어집니다.
|
|
457
|
-
const queries = await SyncerActions.actionGenerateSsrQueries();
|
|
458
|
-
|
|
459
|
-
// queries는 SSR 디스크립터(sonamu/ssr 의존)이므로 web target에만 분배합니다.
|
|
460
|
-
// 다른 target(app 등)이 SSR을 안 쓰면 의미 없는 dead code일 뿐이라 보내지 않습니다.
|
|
461
|
-
// TODO(병준): web에만 가게 하기 위해서 target prefix를 지정해주었습니다. 나중에 target 시스템이 개선된다면 바꿔주세요.
|
|
462
|
-
await SyncerActions.actionSyncFilesToTargets(queries, ["web"]);
|
|
454
|
+
await SyncerActions.actionGenerateSsrQueries();
|
|
463
455
|
}
|
|
464
456
|
|
|
465
457
|
async handleAuxiliarySymbolChanges(diffGroups: DiffGroups): Promise<void> {
|