sonamu 0.11.8 → 0.11.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.
@@ -1 +1 @@
1
- {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/bin/build-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAajE,MAAM,MAAM,aAAa,CAAC,gBAAgB,GAAG,EAAE,IAAI;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;AAEzE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAQlD;AAED,KAAK,wBAAwB,GAAG,CAAC,cAAc,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAEpF,MAAM,WAAW,+BAA+B;IAC9C,kBAAkB,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7D;AAQD,wBAAsB,gCAAgC,CAAC,CAAC,SAAS,oBAAoB,EACnF,UAAU,EAAE,CAAC,EACb,OAAO,EAAE;IACP,MAAM,EAAE,2BAA2B,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,EACD,YAAY,GAAE,+BAAiE,GAC9E,OAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC,CA6BnC;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACjD,IAAI,CASN;AAED,eAAO,MAAM,mCAAmC,mDAAmD,CAAC;AACpG,eAAO,MAAM,kCAAkC,oDAAoD,CAAC;AAEpG,wBAAsB,kCAAkC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;AAED,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,2BAA2B,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqElB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,EAYpE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,EAmBxC,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE;IACZ,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;CAInB,GACA,OAAO,CAAC,MAAM,CAAC,CAajB;AA2BD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCrD;AAED,wBAAsB,eAAe,CAAC,EACpC,aAAqB,GACtB,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBlD"}
1
+ {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/bin/build-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAajE,MAAM,MAAM,aAAa,CAAC,gBAAgB,GAAG,EAAE,IAAI;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,MAAM,CAAC;IACjD,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC;AAEzE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAQlD;AAED,KAAK,wBAAwB,GAAG,CAAC,cAAc,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAEpF,MAAM,WAAW,+BAA+B;IAC9C,kBAAkB,EAAE,MAAM,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7D;AAQD,wBAAsB,gCAAgC,CAAC,CAAC,SAAS,oBAAoB,EACnF,UAAU,EAAE,CAAC,EACb,OAAO,EAAE;IACP,MAAM,EAAE,2BAA2B,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,EACD,YAAY,GAAE,+BAAiE,GAC9E,OAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC,CA6BnC;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACjD,IAAI,CASN;AAED,eAAO,MAAM,mCAAmC,mDAAmD,CAAC;AACpG,eAAO,MAAM,kCAAkC,oDAAoD,CAAC;AAEpG,wBAAsB,kCAAkC,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY5F;AAED,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,2BAA2B,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqElB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,EASpE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,EAmBxC,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE;IACZ,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;CAInB,GACA,OAAO,CAAC,MAAM,CAAC,CAajB;AA2BD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCrD;AAED,wBAAsB,eAAe,CAAC,EACpC,aAAqB,GACtB,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBlD"}
@@ -126,11 +126,7 @@ const API_ARTIFACTS = [{
126
126
  description: "API 프로젝트 빌드 산출물",
127
127
  projectPath: "api",
128
128
  preBuildCommand: () => "rm -rf dist",
129
- buildCommand: ({ configFilePath }) => {
130
- const configExtension = path.extname(configFilePath);
131
- const configLoader = [".ts", ".tsx"].includes(configExtension) ? " --config-loader tsx" : "";
132
- return `tsc --noEmit && pnpm exec tsdown --config ${JSON.stringify(configFilePath)}${configLoader}`;
133
- }
129
+ buildCommand: ({ configFilePath }) => `tsc --noEmit && pnpm exec tsdown --config ${JSON.stringify(configFilePath)}`
134
130
  }];
135
131
  /**
136
132
  * 웹 프로젝트 빌드 산출물에 대한 규칙들.
@@ -258,4 +254,4 @@ async function buildWebCommand({ skipIfMissing = false } = {}) {
258
254
  //#endregion
259
255
  export { API_ARTIFACTS, HTTP_VALIDATOR_REGISTRY_BUILD_PATH, HTTP_VALIDATOR_REGISTRY_SOURCE_PATH, WEB_ARTIFACTS, assertApiZodCompilerBuildOutput, assertApiZodCompilerSourceRegistry, buildApiCommand, buildWebCommand, composeApiZodCompilerBuildConfig, createApiZodCompilerBuildWrapper, createWebTypecheckCommand, quoteShellArgument, resolveApiBuildConfigPath };
260
256
 
261
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vYnVpbGQtY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHR5cGUgVXNlckNvbmZpZyB9IGZyb20gXCJ0c2Rvd25cIjtcblxuaW1wb3J0IHsgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgZXhlY1dpdGhMaW5lUHJlZml4LFxuICBwcmludEJ1aWxkU3VtbWFyeSxcbiAgcHJpbnRUYXNrRmFpbGVkLFxuICBwcmludFRhc2tIZWFkZXIsXG4gIHByaW50VGFza1N0YXJ0LFxuICBwcmludFRhc2tTdWNjZXNzLFxufSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCwgZmluZEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2FkQnVpbGRDb21waWxlclBvbGljeSB9IGZyb20gXCIuL2NvbXBpbGVyLXBvbGljeVwiO1xuXG5leHBvcnQgdHlwZSBCdWlsZEFydGlmYWN0PEJ1aWxkQ29tbWFuZEFyZ3MgPSB7fT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcHJvamVjdFBhdGg6IHN0cmluZztcbiAgcHJlQnVpbGRDb21tYW5kPzogKCkgPT4gc3RyaW5nO1xuICBidWlsZENvbW1hbmQ6IChhcmdzOiBCdWlsZENvbW1hbmRBcmdzKSA9PiBzdHJpbmc7XG4gIHBvc3RCdWlsZENvbW1hbmQ/OiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcGlUc2Rvd25CdWlsZENvbmZpZyA9IFBpY2s8VXNlckNvbmZpZywgXCJlbnRyeVwiIHwgXCJwbHVnaW5zXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVTaGVsbEFyZ3VtZW50KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyDsnpHsnYDrlLDsmLTtkZwg7J6Q7LK066eMIOyFuCDqsr3qs4Trpbwg64ur7KeAIOuqu+2VmOuPhOuhnSDrtoTrpqztlbQg66as7YSw65+0IOyduOyImOulvCDrs7TsobTtlanri4jri6QuXG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgYCdcIidcIidgKX0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKTogc3RyaW5nIHtcbiAgY29uc3QgaXNTb3VyY2VNb2R1bGUgPSBwYXRoLmV4dG5hbWUoaW1wb3J0Lm1ldGEuZmlsZW5hbWUpID09PSBcIi50c1wiO1xuICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKFxuICAgIGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgYHR5cGVjaGVjay13ZWIuJHtpc1NvdXJjZU1vZHVsZSA/IFwidHNcIiA6IFwianNcIn1gLFxuICApO1xuICBjb25zdCBydW5uZXIgPSBpc1NvdXJjZU1vZHVsZSA/IFwicG5wbSBleGVjIHRzeFwiIDogcXVvdGVTaGVsbEFyZ3VtZW50KHByb2Nlc3MuZXhlY1BhdGgpO1xuICByZXR1cm4gYCR7cnVubmVyfSAke3F1b3RlU2hlbGxBcmd1bWVudChzY3JpcHRQYXRoKX1gO1xufVxuXG50eXBlIFpvZENvbXBpbGVyUGx1Z2luRmFjdG9yeSA9ICh0eXBlb2YgaW1wb3J0KFwiem9kLWNvbXBpbGVyL3JvbGxkb3duXCIpKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyB7XG4gIGxvYWRDb21waWxlclBsdWdpbjogKCkgPT4gUHJvbWlzZTxab2RDb21waWxlclBsdWdpbkZhY3Rvcnk+O1xufVxuXG5jb25zdCBhcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0ge1xuICBhc3luYyBsb2FkQ29tcGlsZXJQbHVnaW4oKSB7XG4gICAgcmV0dXJuIChhd2FpdCBpbXBvcnQoXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIikpLmRlZmF1bHQ7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcG9zZUFwaVpvZENvbXBpbGVyQnVpbGRDb25maWc8VCBleHRlbmRzIEFwaVRzZG93bkJ1aWxkQ29uZmlnPihcbiAgYmFzZUNvbmZpZzogVCxcbiAgb3B0aW9uczoge1xuICAgIHBvbGljeTogTm9ybWFsaXplZFpvZENvbXBpbGVyUG9saWN5O1xuICAgIHJlZ2lzdHJ5UGF0aD86IHN0cmluZztcbiAgfSxcbiAgZGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0gYXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyxcbik6IFByb21pc2U8VCAmIEFwaVRzZG93bkJ1aWxkQ29uZmlnPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgfVxuICBpZiAob3B0aW9ucy5yZWdpc3RyeVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIuYXBpIHJlcXVpcmVzIHRoZSBnZW5lcmF0ZWQgSFRUUCB2YWxpZGF0b3IgcmVnaXN0cnlcIik7XG4gIH1cblxuICBjb25zdCB6b2RDb21waWxlciA9IGF3YWl0IGRlcGVuZGVuY2llcy5sb2FkQ29tcGlsZXJQbHVnaW4oKTtcbiAgY29uc3QgY29tcGlsZXJQbHVnaW4gPSB6b2RDb21waWxlcih7XG4gICAgY29kZWdlbk1vZGU6IFwiaW5saW5lXCIsXG4gICAgaW5jbHVkZTogW29wdGlvbnMucmVnaXN0cnlQYXRoXSxcbiAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgIHNjaGVtYXM6IFwiZXhwbGljaXRcIixcbiAgfSk7XG5cbiAgbGV0IGNvbmZpZ3VyZWRQbHVnaW5zOiBFeGNsdWRlPFVzZXJDb25maWdbXCJwbHVnaW5zXCJdLCB1bmRlZmluZWQ+W107XG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2VDb25maWcucGx1Z2lucykpIHtcbiAgICBjb25maWd1cmVkUGx1Z2lucyA9IGJhc2VDb25maWcucGx1Z2lucztcbiAgfSBlbHNlIGlmIChiYXNlQ29uZmlnLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZ3VyZWRQbHVnaW5zID0gW107XG4gIH0gZWxzZSB7XG4gICAgY29uZmlndXJlZFBsdWdpbnMgPSBbYmFzZUNvbmZpZy5wbHVnaW5zXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbmZpZyxcbiAgICBwbHVnaW5zOiBbLi4uY29uZmlndXJlZFBsdWdpbnMsIGNvbXBpbGVyUGx1Z2luXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFwaVpvZENvbXBpbGVyQnVpbGRPdXRwdXQoXG4gIG91dHB1dHM6IHJlYWRvbmx5IHsgY29kZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfVtdLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcbiAgICBpZiAoL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KG91dHB1dC5jb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB6b2QtY29tcGlsZXIgY29tcGlsZSBib3VuZGFyeSByZW1haW5zIGluICR7b3V0cHV0LnBhdGh9YCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuY29kZS5pbmNsdWRlcyhcInZpcnR1YWw6em9kLWNvbXBpbGVyL3J1bnRpbWVcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgem9kLWNvbXBpbGVyIHZpcnR1YWwgcnVudGltZSBpbXBvcnQgcmVtYWlucyBpbiAke291dHB1dC5wYXRofWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSFRUUF9WQUxJREFUT1JfUkVHSVNUUllfU09VUkNFX1BBVEggPSBcInNyYy9hcHBsaWNhdGlvbi9zb25hbXUudmFsaWRhdG9ycy5nZW5lcmF0ZWQudHNcIjtcbmV4cG9ydCBjb25zdCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9CVUlMRF9QQVRIID0gXCJkaXN0L2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC5qc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0QXBpWm9kQ29tcGlsZXJTb3VyY2VSZWdpc3RyeShyZWdpc3RyeVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShhd2FpdCBleGlzdHMocmVnaXN0cnlQYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBub3QgZm91bmQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHJlZ2lzdHJ5UGF0aCwgXCJ1dGY4XCIpO1xuICBpZiAoIS9maW5nZXJwcmludFxccyo9XFxzKltcIiddW2EtZjAtOV17NjR9W1wiJ10vLnRlc3Qoc291cmNlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR2VuZXJhdGVkIEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IGZpbmdlcnByaW50IGlzIGludmFsaWQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IGRlY2xhcmVzWmVyb1JvdXRlcyA9IC9cXGJyb3V0ZUlkc1xccyo9XFxzKlxce1xccypcXH1cXHMqOy8udGVzdChzb3VyY2UpO1xuICBpZiAoIWRlY2xhcmVzWmVyb1JvdXRlcyAmJiAhL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KHNvdXJjZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBoYXMgbm8gY29tcGlsZSBib3VuZGFyeTogJHtyZWdpc3RyeVBhdGh9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwaVpvZENvbXBpbGVyQnVpbGRXcmFwcGVyKG9wdGlvbnM6IHtcbiAgYXBpUm9vdFBhdGg6IHN0cmluZztcbiAgYmFzZUNvbmZpZ1BhdGg6IHN0cmluZztcbiAgcG9saWN5OiBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3k7XG4gIHJlZ2lzdHJ5UGF0aDogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5iYXNlQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGF3YWl0IGFzc2VydEFwaVpvZENvbXBpbGVyU291cmNlUmVnaXN0cnkob3B0aW9ucy5yZWdpc3RyeVBhdGgpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IHBhdGguam9pbihcbiAgICBvcHRpb25zLmFwaVJvb3RQYXRoLFxuICAgIGAuc29uYW11LXpvZC1jb21waWxlci0ke3Byb2Nlc3MucGlkfS0ke0RhdGUubm93KCl9Lm1qc2AsXG4gICk7XG4gIGNvbnN0IGJhc2VDb25maWdVcmwgPSBwYXRoVG9GaWxlVVJMKG9wdGlvbnMuYmFzZUNvbmZpZ1BhdGgpLmhyZWY7XG4gIGNvbnN0IHNvdXJjZSA9IFtcbiAgICBgaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO2AsXG4gICAgYGltcG9ydCBiYXNlQ29uZmlnIGZyb20gJHtKU09OLnN0cmluZ2lmeShiYXNlQ29uZmlnVXJsKX07YCxcbiAgICBgaW1wb3J0IHpvZENvbXBpbGVyIGZyb20gXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnN0IGNvbXBpbGVyUGx1Z2luID0gem9kQ29tcGlsZXIoJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb2RlZ2VuTW9kZTogXCJpbmxpbmVcIixcbiAgICAgIGluY2x1ZGU6IFtvcHRpb25zLnJlZ2lzdHJ5UGF0aF0sXG4gICAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgICAgc2NoZW1hczogXCJleHBsaWNpdFwiLFxuICAgIH0pfSk7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLnJlZ2lzdHJ5UGF0aCl9O2AsXG4gICAgYGNvbnN0IGFwaVJvb3RQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmFwaVJvb3RQYXRoKX07YCxcbiAgICBgY29uc3QgY2Fub25pY2FsT3V0RGlyID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcImRpc3RcIik7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlFbnRyeU5hbWUgPSBcImFwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZFwiO2AsXG4gICAgYGNvbnN0IGRlZmF1bHRFbnRyeSA9IHsgaW5kZXg6IFwic3JjL2luZGV4LnRzXCIgfTtgLFxuICAgIFwiY29uc3QgcmVzb2x2ZXNUb1JlZ2lzdHJ5ID0gKGVudHJ5KSA9PlwiLFxuICAgICcgIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiBwYXRoLnJlc29sdmUoYXBpUm9vdFBhdGgsIGVudHJ5KSA9PT0gcmVnaXN0cnlQYXRoOycsXG4gICAgXCJjb25zdCBhcHBlbmRSZWdpc3RyeUVudHJ5ID0gKGVudHJ5KSA9PiB7XCIsXG4gICAgXCIgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1wiLFxuICAgIFwiICAgIHJldHVybiBlbnRyeS5zb21lKHJlc29sdmVzVG9SZWdpc3RyeSkgPyBlbnRyeSA6IFsuLi5lbnRyeSwgcmVnaXN0cnlQYXRoXTtcIixcbiAgICBcIiAgfVwiLFxuICAgICcgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHsnLFxuICAgIFwiICAgIHJldHVybiByZXNvbHZlc1RvUmVnaXN0cnkoZW50cnkpID8gZW50cnkgOiBbZW50cnksIHJlZ2lzdHJ5UGF0aF07XCIsXG4gICAgXCIgIH1cIixcbiAgICAnICBpZiAodHlwZW9mIGVudHJ5ID09PSBcIm9iamVjdFwiICYmIGVudHJ5ICE9PSBudWxsKSB7JyxcbiAgICBcIiAgICBpZiAoT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZShyZXNvbHZlc1RvUmVnaXN0cnkpKSByZXR1cm4gZW50cnk7XCIsXG4gICAgXCIgICAgaWYgKHJlZ2lzdHJ5RW50cnlOYW1lIGluIGVudHJ5KSB7XCIsXG4gICAgXCIgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRzZG93biBlbnRyeSBjb2xsaXNpb246ICR7cmVnaXN0cnlFbnRyeU5hbWV9YCk7XCIsXG4gICAgXCIgICAgfVwiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmVudHJ5LCBbcmVnaXN0cnlFbnRyeU5hbWVdOiByZWdpc3RyeVBhdGggfTtcIixcbiAgICBcIiAgfVwiLFxuICAgIFwiICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1wiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmRlZmF1bHRFbnRyeSwgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCIgIH1cIixcbiAgICBcIiAgcmV0dXJuIHsgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCJ9O1wiLFxuICAgIFwiY29uc3QgYXBwZW5kUGx1Z2luID0gKGNvbmZpZykgPT4gKHtcIixcbiAgICBcIiAgLi4uY29uZmlnLFwiLFxuICAgIFwiICAvLyDrn7Dtg4DsnoQgbG9hZGVy6rCAIOywuOyhsO2VmOuKlCByZWdpc3RyeSDqsr3roZzrpbwg67mM65OcIOyEpOygleqzvCDsnbzsuZjsi5ztgrXri4jri6QuXCIsXG4gICAgXCIgIG91dERpcjogY2Fub25pY2FsT3V0RGlyLFwiLFxuICAgIFwiICBmaXhlZEV4dGVuc2lvbjogZmFsc2UsXCIsXG4gICAgXCIgIGVudHJ5OiBhcHBlbmRSZWdpc3RyeUVudHJ5KGNvbmZpZy5lbnRyeSksXCIsXG4gICAgXCIgIHBsdWdpbnM6IFsuLi4oY29uZmlnLnBsdWdpbnMgPz8gW10pLCBjb21waWxlclBsdWdpbl0sXCIsXG4gICAgXCJ9KTtcIixcbiAgICBcImNvbnN0IGFwcGVuZFRvUmVzb2x2ZWRDb25maWcgPSAoY29uZmlnKSA9PlwiLFxuICAgIFwiICBBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcubWFwKGFwcGVuZFBsdWdpbikgOiBhcHBlbmRQbHVnaW4oY29uZmlnKTtcIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGRlZmF1bHQgYXN5bmMgKC4uLmFyZ3MpID0+IHtcIixcbiAgICAnICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBiYXNlQ29uZmlnID09PSBcImZ1bmN0aW9uXCInLFxuICAgIFwiICAgID8gYXdhaXQgYmFzZUNvbmZpZyguLi5hcmdzKVwiLFxuICAgIFwiICAgIDogYXdhaXQgYmFzZUNvbmZpZztcIixcbiAgICBcIiAgcmV0dXJuIGFwcGVuZFRvUmVzb2x2ZWRDb25maWcocmVzb2x2ZWQpO1wiLFxuICAgIFwifTtcIixcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZSh3cmFwcGVyUGF0aCwgc291cmNlLCBcInV0ZjhcIik7XG4gIHJldHVybiB3cmFwcGVyUGF0aDtcbn1cblxuLyoqXG4gKiBBUEkg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF9hcGkg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3Q8eyBjb25maWdGaWxlUGF0aDogc3RyaW5nIH0+W10gPSBbXG4gIHtcbiAgICBuYW1lOiBcIkFQSVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFQSSDtlITroZzsoJ3tirgg67mM65OcIOyCsOy2nOusvFwiLFxuICAgIHByb2plY3RQYXRoOiBcImFwaVwiLFxuICAgIHByZUJ1aWxkQ29tbWFuZDogKCkgPT4gXCJybSAtcmYgZGlzdFwiLFxuICAgIGJ1aWxkQ29tbWFuZDogKHsgY29uZmlnRmlsZVBhdGggfSkgPT4ge1xuICAgICAgY29uc3QgY29uZmlnRXh0ZW5zaW9uID0gcGF0aC5leHRuYW1lKGNvbmZpZ0ZpbGVQYXRoKTtcbiAgICAgIGNvbnN0IGNvbmZpZ0xvYWRlciA9IFtcIi50c1wiLCBcIi50c3hcIl0uaW5jbHVkZXMoY29uZmlnRXh0ZW5zaW9uKSA/IFwiIC0tY29uZmlnLWxvYWRlciB0c3hcIiA6IFwiXCI7XG4gICAgICByZXR1cm4gYHRzYyAtLW5vRW1pdCAmJiBwbnBtIGV4ZWMgdHNkb3duIC0tY29uZmlnICR7SlNPTi5zdHJpbmdpZnkoY29uZmlnRmlsZVBhdGgpfSR7Y29uZmlnTG9hZGVyfWA7XG4gICAgfSxcbiAgfSxcbl07XG5cbi8qKlxuICog7Ju5IO2UhOuhnOygne2KuCDruYzrk5wg7IKw7Lac66y87JeQIOuMgO2VnCDqt5zsuZnrk6QuXG4gKiBjbGkudHPsnZggYnVpbGRfd2ViIO2VqOyImOqwgCDsnbTqsoPsnYQg67O06rOgIOq3uOuMgOuhnCDsi6Ttlontlanri4jri6QuXG4gKi9cbmV4cG9ydCBjb25zdCBXRUJfQVJUSUZBQ1RTOiBCdWlsZEFydGlmYWN0W10gPSBbXG4gIHtcbiAgICBuYW1lOiBcIldlYiBDbGllbnRcIixcbiAgICBkZXNjcmlwdGlvbjogXCJXZWIg7ZSE66Gc7KCd7Yq4IO2BtOudvOydtOyWuO2KuCDruYzrk5wg7IKw7Lac66y8XCIsXG4gICAgcHJvamVjdFBhdGg6IFwid2ViXCIsXG4gICAgcHJlQnVpbGRDb21tYW5kOiAoKSA9PiBcInJtIC1yZiBkaXN0L2NsaWVudFwiLFxuICAgIGJ1aWxkQ29tbWFuZDogKCkgPT5cbiAgICAgIGAke2NyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKX0gJiYgdml0ZSBidWlsZCAtLWNvbmZpZyB2aXRlLmNvbmZpZy50cyAtLW91dERpciBkaXN0L2NsaWVudGAsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcIldlYiBTZXJ2ZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJXZWIg7ZSE66Gc7KCd7Yq4IOyEnOuyhCDruYzrk5wg7IKw7Lac66y8XCIsXG4gICAgcHJvamVjdFBhdGg6IFwid2ViXCIsXG4gICAgcHJlQnVpbGRDb21tYW5kOiAoKSA9PiBcInJtIC1yZiBkaXN0L3NlcnZlclwiLFxuICAgIGJ1aWxkQ29tbWFuZDogKCkgPT5cbiAgICAgIGAke2NyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKX0gJiYgdml0ZSBidWlsZCAtLWNvbmZpZyB2aXRlLmNvbmZpZy50cyAtLXNzciBzcmMvZW50cnktc2VydmVyLmdlbmVyYXRlZC50c3ggLS1vdXREaXIgZGlzdC9zZXJ2ZXJgLFxuICAgIHBvc3RCdWlsZENvbW1hbmQ6ICgpID0+XG4gICAgICBcInJtIC1yZiAuLi9hcGkvd2ViLWRpc3QgJiYgbWtkaXIgLXAgLi4vYXBpL3dlYi1kaXN0ICYmIGNwIC1yIGRpc3QvKiAuLi9hcGkvd2ViLWRpc3RcIixcbiAgfSxcbl07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlQXBpQnVpbGRDb25maWdQYXRoKFxuICBhcGlSb290UGF0aDogc3RyaW5nLFxuICBkZXBlbmRlbmNpZXM6IHtcbiAgICBleGlzdHM6IChjYW5kaWRhdGVQYXRoOiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj47XG4gICAgbW9kdWxlRGlyOiBzdHJpbmc7XG4gIH0gPSB7XG4gICAgZXhpc3RzLFxuICAgIG1vZHVsZURpcjogaW1wb3J0Lm1ldGEuZGlybmFtZSxcbiAgfSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnUGF0aCA9IHBhdGguam9pbihhcGlSb290UGF0aCwgXCJ0c2Rvd24uY29uZmlnLnRzXCIpO1xuICBpZiAoYXdhaXQgZGVwZW5kZW5jaWVzLmV4aXN0cyhsb2NhbENvbmZpZ1BhdGgpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgdHNkb3duLmNvbmZpZy50cyBmcm9tIHByb2plY3Qgcm9vdC4uLlwiKSk7XG4gICAgcmV0dXJuIGxvY2FsQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmRpbShcIlVzaW5nIGRlZmF1bHQgdHNkb3duIEFQSSBjb25maWcgZnJvbSBzb25hbXUgcGFja2FnZS4uLlwiKSk7XG4gIGNvbnN0IGNvbXBpbGVkQ29uZmlnUGF0aCA9IHBhdGguam9pbihkZXBlbmRlbmNpZXMubW9kdWxlRGlyLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcuanNcIik7XG4gIGlmIChhd2FpdCBkZXBlbmRlbmNpZXMuZXhpc3RzKGNvbXBpbGVkQ29uZmlnUGF0aCkpIHtcbiAgICByZXR1cm4gY29tcGlsZWRDb25maWdQYXRoO1xuICB9XG4gIHJldHVybiBwYXRoLmpvaW4oZGVwZW5kZW5jaWVzLm1vZHVsZURpciwgXCIuLlwiLCBcIi4uXCIsIFwidHNkb3duLmFwaS5jb25maWcudHNcIik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHM8VD4oXG4gIGFydGlmYWN0OiBCdWlsZEFydGlmYWN0PFQ+LFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nOyBidWlsZENvbW1hbmRBcmdzOiBUIH0sXG4pIHtcbiAgY29uc3Qgc3RlcHMgPSBbXG4gICAgeyBuYW1lOiBcInByZS1idWlsZFwiLCBjbWQ6IGFydGlmYWN0LnByZUJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgICB7IG5hbWU6IFwiYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5idWlsZENvbW1hbmQob3B0aW9ucy5idWlsZENvbW1hbmRBcmdzKSB9LFxuICAgIHsgbmFtZTogXCJwb3N0LWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucG9zdEJ1aWxkQ29tbWFuZD8uKCkgfSxcbiAgXS5maWx0ZXIoKHN0ZXApID0+IHN0ZXAuY21kICE9PSB1bmRlZmluZWQpO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGVwcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbaW5kZXhdO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBzdGVwcy5sZW5ndGggLSAxO1xuICAgIHRyeSB7XG4gICAgICBhc3NlcnQoc3RlcC5jbWQpO1xuICAgICAgcHJpbnRUYXNrU3RhcnQoc3RlcC5uYW1lLCBzdGVwLmNtZCwgaXNMYXN0KTtcbiAgICAgIGF3YWl0IGV4ZWNXaXRoTGluZVByZWZpeChzdGVwLmNtZCwgeyBjd2Q6IG9wdGlvbnMuY3dkIH0pO1xuICAgICAgcHJpbnRUYXNrU3VjY2VzcyhzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHByaW50VGFza0ZhaWxlZChzdGVwLm5hbWUsIGlzTGFzdCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3RlcC5uYW1lfSBmYWlsZWRgLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQXBpQ29tbWFuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXBpUm9vdFBhdGggPSBmaW5kQXBpUm9vdFBhdGgoKTtcbiAgY29uc3QgYmFzZUNvbmZpZ1BhdGggPSBhd2FpdCByZXNvbHZlQXBpQnVpbGRDb25maWdQYXRoKGFwaVJvb3RQYXRoKTtcbiAgY29uc3QgcG9saWN5ID0gYXdhaXQgbG9hZEJ1aWxkQ29tcGlsZXJQb2xpY3koYXBpUm9vdFBhdGgpO1xuICBjb25zdCByZWdpc3RyeVBhdGggPSBwYXRoLmpvaW4oYXBpUm9vdFBhdGgsIEhUVFBfVkFMSURBVE9SX1JFR0lTVFJZX1NPVVJDRV9QQVRIKTtcbiAgY29uc3QgY29uZmlnRmlsZVBhdGggPSBhd2FpdCBjcmVhdGVBcGlab2RDb21waWxlckJ1aWxkV3JhcHBlcih7XG4gICAgYXBpUm9vdFBhdGgsXG4gICAgYmFzZUNvbmZpZ1BhdGgsXG4gICAgcG9saWN5LFxuICAgIHJlZ2lzdHJ5UGF0aCxcbiAgfSk7XG4gIGNvbnN0IHRlbXBvcmFyeUNvbmZpZ1BhdGggPSBjb25maWdGaWxlUGF0aCA9PT0gYmFzZUNvbmZpZ1BhdGggPyB1bmRlZmluZWQgOiBjb25maWdGaWxlUGF0aDtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcblxuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgQVBJX0FSVElGQUNUUykge1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBhcGlSb290UGF0aCk7XG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7XG4gICAgICAgIGN3ZDogYXBpUm9vdFBhdGgsXG4gICAgICAgIGJ1aWxkQ29tbWFuZEFyZ3M6IHsgY29uZmlnRmlsZVBhdGggfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocG9saWN5LmFwaSA9PT0gXCJhb3RcIikge1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGguam9pbihhcGlSb290UGF0aCwgSFRUUF9WQUxJREFUT1JfUkVHSVNUUllfQlVJTERfUEFUSCk7XG4gICAgICBpZiAoIShhd2FpdCBleGlzdHMob3V0cHV0UGF0aCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQnVpbHQgSFRUUCB2YWxpZGF0b3IgcmVnaXN0cnkgbm90IGZvdW5kOiAke291dHB1dFBhdGh9YCk7XG4gICAgICB9XG4gICAgICBhc3NlcnRBcGlab2RDb21waWxlckJ1aWxkT3V0cHV0KFtcbiAgICAgICAgeyBjb2RlOiBhd2FpdCByZWFkRmlsZShvdXRwdXRQYXRoLCBcInV0ZjhcIiksIHBhdGg6IG91dHB1dFBhdGggfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCB0cnVlLCBEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIkFQSVwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgaWYgKHRlbXBvcmFyeUNvbmZpZ1BhdGggIT09IHVuZGVmaW5lZCkgYXdhaXQgcm0odGVtcG9yYXJ5Q29uZmlnUGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRXZWJDb21tYW5kKHtcbiAgc2tpcElmTWlzc2luZyA9IGZhbHNlLFxufTogeyBza2lwSWZNaXNzaW5nPzogYm9vbGVhbiB9ID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXBwUm9vdFBhdGggPSBmaW5kQXBwUm9vdFBhdGgoKTtcbiAgY29uc3Qgd2ViUGF0aCA9IHBhdGguam9pbihhcHBSb290UGF0aCwgXCJ3ZWJcIik7XG4gIGlmICghKGF3YWl0IGV4aXN0cyh3ZWJQYXRoKSkpIHtcbiAgICBpZiAoc2tpcElmTWlzc2luZykge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShcIldlYiDrlJTroInthqDrpqzqsIAg7JeG7Jy866+A66GcIFdlYiDruYzrk5zrpbwg6rG064SI65yB64uI64ukLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgd2ViIOuUlOugie2GoOumrOulvCDssL7snYQg7IiYIOyXhuyKteuLiOuLpDogJHt3ZWJQYXRofWApO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIFdFQl9BUlRJRkFDVFMpIHtcbiAgICAgIGNvbnN0IGN3ZCA9IHBhdGguam9pbihhcHBSb290UGF0aCwgYXJ0aWZhY3QucHJvamVjdFBhdGgpO1xuICAgICAgcHJpbnRUYXNrSGVhZGVyKGFydGlmYWN0Lm5hbWUsIGFydGlmYWN0LmRlc2NyaXB0aW9uLCBjd2QpO1xuICAgICAgYXdhaXQgcnVuQnVpbGRTdGVwcyhhcnRpZmFjdCwgeyBjd2QsIGJ1aWxkQ29tbWFuZEFyZ3M6IHt9IH0pO1xuICAgIH1cbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCB0cnVlLCBEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEJ1aWxkU3VtbWFyeShcIldlYlwiLCBmYWxzZSwgRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztrQkFnQjhCO2NBQ1k7V0FDdUI7QUFjakUsU0FBZ0IsbUJBQW1CLE9BQXVCO0NBRXhELE9BQU8sSUFBSSxNQUFNLFdBQVcsS0FBSyxPQUFPLEVBQUU7QUFDNUM7QUFFQSxTQUFnQiw0QkFBb0M7Q0FDbEQsTUFBTSxpQkFBaUIsS0FBSyxRQUFRLE9BQU8sS0FBSyxRQUFRLE1BQU07Q0FDOUQsTUFBTSxhQUFhLEtBQUssS0FDdEIsT0FBTyxLQUFLLFNBQ1osaUJBQWlCLGlCQUFpQixPQUFPLE1BQzNDO0NBRUEsT0FBTyxHQURRLGlCQUFpQixrQkFBa0IsbUJBQW1CLFFBQVEsUUFBUSxFQUNwRSxHQUFHLG1CQUFtQixVQUFVO0FBQ25EO0FBUUEsTUFBTSxrQ0FBbUUsRUFDdkUsTUFBTSxxQkFBcUI7Q0FDekIsUUFBUSxNQUFNLE9BQU8seUJBQUEsQ0FBMEI7QUFDakQsRUFDRjtBQUVBLGVBQXNCLGlDQUNwQixZQUNBLFNBSUEsZUFBZ0QsaUNBQ2I7Q0FDbkMsSUFBSSxRQUFRLE9BQU8sUUFBUSxPQUN6QixPQUFPO0NBRVQsSUFBSSxRQUFRLGlCQUFpQixR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
257
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29uZmlnLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vYnVpbGQtY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcIm5vZGU6YXNzZXJ0XCI7XG5pbXBvcnQgeyByZWFkRmlsZSwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IHR5cGUgVXNlckNvbmZpZyB9IGZyb20gXCJ0c2Rvd25cIjtcblxuaW1wb3J0IHsgdHlwZSBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3kgfSBmcm9tIFwiLi4vYXBpL2NvbmZpZ1wiO1xuaW1wb3J0IHtcbiAgZXhlY1dpdGhMaW5lUHJlZml4LFxuICBwcmludEJ1aWxkU3VtbWFyeSxcbiAgcHJpbnRUYXNrRmFpbGVkLFxuICBwcmludFRhc2tIZWFkZXIsXG4gIHByaW50VGFza1N0YXJ0LFxuICBwcmludFRhc2tTdWNjZXNzLFxufSBmcm9tIFwiLi4vdXRpbHMvY29uc29sZS11dGlsXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbHMvZnMtdXRpbHNcIjtcbmltcG9ydCB7IGZpbmRBcGlSb290UGF0aCwgZmluZEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2FkQnVpbGRDb21waWxlclBvbGljeSB9IGZyb20gXCIuL2NvbXBpbGVyLXBvbGljeVwiO1xuXG5leHBvcnQgdHlwZSBCdWlsZEFydGlmYWN0PEJ1aWxkQ29tbWFuZEFyZ3MgPSB7fT4gPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcHJvamVjdFBhdGg6IHN0cmluZztcbiAgcHJlQnVpbGRDb21tYW5kPzogKCkgPT4gc3RyaW5nO1xuICBidWlsZENvbW1hbmQ6IChhcmdzOiBCdWlsZENvbW1hbmRBcmdzKSA9PiBzdHJpbmc7XG4gIHBvc3RCdWlsZENvbW1hbmQ/OiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBcGlUc2Rvd25CdWlsZENvbmZpZyA9IFBpY2s8VXNlckNvbmZpZywgXCJlbnRyeVwiIHwgXCJwbHVnaW5zXCI+O1xuXG5leHBvcnQgZnVuY3Rpb24gcXVvdGVTaGVsbEFyZ3VtZW50KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyDsnpHsnYDrlLDsmLTtkZwg7J6Q7LK066eMIOyFuCDqsr3qs4Trpbwg64ur7KeAIOuqu+2VmOuPhOuhnSDrtoTrpqztlbQg66as7YSw65+0IOyduOyImOulvCDrs7TsobTtlanri4jri6QuXG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgYCdcIidcIidgKX0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYlR5cGVjaGVja0NvbW1hbmQoKTogc3RyaW5nIHtcbiAgY29uc3QgaXNTb3VyY2VNb2R1bGUgPSBwYXRoLmV4dG5hbWUoaW1wb3J0Lm1ldGEuZmlsZW5hbWUpID09PSBcIi50c1wiO1xuICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5qb2luKFxuICAgIGltcG9ydC5tZXRhLmRpcm5hbWUsXG4gICAgYHR5cGVjaGVjay13ZWIuJHtpc1NvdXJjZU1vZHVsZSA/IFwidHNcIiA6IFwianNcIn1gLFxuICApO1xuICBjb25zdCBydW5uZXIgPSBpc1NvdXJjZU1vZHVsZSA/IFwicG5wbSBleGVjIHRzeFwiIDogcXVvdGVTaGVsbEFyZ3VtZW50KHByb2Nlc3MuZXhlY1BhdGgpO1xuICByZXR1cm4gYCR7cnVubmVyfSAke3F1b3RlU2hlbGxBcmd1bWVudChzY3JpcHRQYXRoKX1gO1xufVxuXG50eXBlIFpvZENvbXBpbGVyUGx1Z2luRmFjdG9yeSA9ICh0eXBlb2YgaW1wb3J0KFwiem9kLWNvbXBpbGVyL3JvbGxkb3duXCIpKVtcImRlZmF1bHRcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyB7XG4gIGxvYWRDb21waWxlclBsdWdpbjogKCkgPT4gUHJvbWlzZTxab2RDb21waWxlclBsdWdpbkZhY3Rvcnk+O1xufVxuXG5jb25zdCBhcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0ge1xuICBhc3luYyBsb2FkQ29tcGlsZXJQbHVnaW4oKSB7XG4gICAgcmV0dXJuIChhd2FpdCBpbXBvcnQoXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIikpLmRlZmF1bHQ7XG4gIH0sXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29tcG9zZUFwaVpvZENvbXBpbGVyQnVpbGRDb25maWc8VCBleHRlbmRzIEFwaVRzZG93bkJ1aWxkQ29uZmlnPihcbiAgYmFzZUNvbmZpZzogVCxcbiAgb3B0aW9uczoge1xuICAgIHBvbGljeTogTm9ybWFsaXplZFpvZENvbXBpbGVyUG9saWN5O1xuICAgIHJlZ2lzdHJ5UGF0aD86IHN0cmluZztcbiAgfSxcbiAgZGVwZW5kZW5jaWVzOiBBcGlab2RDb21waWxlckJ1aWxkRGVwZW5kZW5jaWVzID0gYXBpWm9kQ29tcGlsZXJCdWlsZERlcGVuZGVuY2llcyxcbik6IFByb21pc2U8VCAmIEFwaVRzZG93bkJ1aWxkQ29uZmlnPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgfVxuICBpZiAob3B0aW9ucy5yZWdpc3RyeVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInZhbGlkYXRpb24uem9kQ29tcGlsZXIuYXBpIHJlcXVpcmVzIHRoZSBnZW5lcmF0ZWQgSFRUUCB2YWxpZGF0b3IgcmVnaXN0cnlcIik7XG4gIH1cblxuICBjb25zdCB6b2RDb21waWxlciA9IGF3YWl0IGRlcGVuZGVuY2llcy5sb2FkQ29tcGlsZXJQbHVnaW4oKTtcbiAgY29uc3QgY29tcGlsZXJQbHVnaW4gPSB6b2RDb21waWxlcih7XG4gICAgY29kZWdlbk1vZGU6IFwiaW5saW5lXCIsXG4gICAgaW5jbHVkZTogW29wdGlvbnMucmVnaXN0cnlQYXRoXSxcbiAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgIHNjaGVtYXM6IFwiZXhwbGljaXRcIixcbiAgfSk7XG5cbiAgbGV0IGNvbmZpZ3VyZWRQbHVnaW5zOiBFeGNsdWRlPFVzZXJDb25maWdbXCJwbHVnaW5zXCJdLCB1bmRlZmluZWQ+W107XG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2VDb25maWcucGx1Z2lucykpIHtcbiAgICBjb25maWd1cmVkUGx1Z2lucyA9IGJhc2VDb25maWcucGx1Z2lucztcbiAgfSBlbHNlIGlmIChiYXNlQ29uZmlnLnBsdWdpbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbmZpZ3VyZWRQbHVnaW5zID0gW107XG4gIH0gZWxzZSB7XG4gICAgY29uZmlndXJlZFBsdWdpbnMgPSBbYmFzZUNvbmZpZy5wbHVnaW5zXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uYmFzZUNvbmZpZyxcbiAgICBwbHVnaW5zOiBbLi4uY29uZmlndXJlZFBsdWdpbnMsIGNvbXBpbGVyUGx1Z2luXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFwaVpvZENvbXBpbGVyQnVpbGRPdXRwdXQoXG4gIG91dHB1dHM6IHJlYWRvbmx5IHsgY29kZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfVtdLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3Qgb3V0cHV0IG9mIG91dHB1dHMpIHtcbiAgICBpZiAoL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KG91dHB1dC5jb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB6b2QtY29tcGlsZXIgY29tcGlsZSBib3VuZGFyeSByZW1haW5zIGluICR7b3V0cHV0LnBhdGh9YCk7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuY29kZS5pbmNsdWRlcyhcInZpcnR1YWw6em9kLWNvbXBpbGVyL3J1bnRpbWVcIikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgem9kLWNvbXBpbGVyIHZpcnR1YWwgcnVudGltZSBpbXBvcnQgcmVtYWlucyBpbiAke291dHB1dC5wYXRofWApO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgSFRUUF9WQUxJREFUT1JfUkVHSVNUUllfU09VUkNFX1BBVEggPSBcInNyYy9hcHBsaWNhdGlvbi9zb25hbXUudmFsaWRhdG9ycy5nZW5lcmF0ZWQudHNcIjtcbmV4cG9ydCBjb25zdCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9CVUlMRF9QQVRIID0gXCJkaXN0L2FwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZC5qc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXNzZXJ0QXBpWm9kQ29tcGlsZXJTb3VyY2VSZWdpc3RyeShyZWdpc3RyeVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIShhd2FpdCBleGlzdHMocmVnaXN0cnlQYXRoKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBub3QgZm91bmQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IHNvdXJjZSA9IGF3YWl0IHJlYWRGaWxlKHJlZ2lzdHJ5UGF0aCwgXCJ1dGY4XCIpO1xuICBpZiAoIS9maW5nZXJwcmludFxccyo9XFxzKltcIiddW2EtZjAtOV17NjR9W1wiJ10vLnRlc3Qoc291cmNlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgR2VuZXJhdGVkIEhUVFAgdmFsaWRhdG9yIHJlZ2lzdHJ5IGZpbmdlcnByaW50IGlzIGludmFsaWQ6ICR7cmVnaXN0cnlQYXRofWApO1xuICB9XG4gIGNvbnN0IGRlY2xhcmVzWmVyb1JvdXRlcyA9IC9cXGJyb3V0ZUlkc1xccyo9XFxzKlxce1xccypcXH1cXHMqOy8udGVzdChzb3VyY2UpO1xuICBpZiAoIWRlY2xhcmVzWmVyb1JvdXRlcyAmJiAhL1xcYmNvbXBpbGVcXHMqXFwoLy50ZXN0KHNvdXJjZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEdlbmVyYXRlZCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBoYXMgbm8gY29tcGlsZSBib3VuZGFyeTogJHtyZWdpc3RyeVBhdGh9YCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFwaVpvZENvbXBpbGVyQnVpbGRXcmFwcGVyKG9wdGlvbnM6IHtcbiAgYXBpUm9vdFBhdGg6IHN0cmluZztcbiAgYmFzZUNvbmZpZ1BhdGg6IHN0cmluZztcbiAgcG9saWN5OiBOb3JtYWxpemVkWm9kQ29tcGlsZXJQb2xpY3k7XG4gIHJlZ2lzdHJ5UGF0aDogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLnBvbGljeS5hcGkgIT09IFwiYW90XCIpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5iYXNlQ29uZmlnUGF0aDtcbiAgfVxuXG4gIGF3YWl0IGFzc2VydEFwaVpvZENvbXBpbGVyU291cmNlUmVnaXN0cnkob3B0aW9ucy5yZWdpc3RyeVBhdGgpO1xuICBjb25zdCB3cmFwcGVyUGF0aCA9IHBhdGguam9pbihcbiAgICBvcHRpb25zLmFwaVJvb3RQYXRoLFxuICAgIGAuc29uYW11LXpvZC1jb21waWxlci0ke3Byb2Nlc3MucGlkfS0ke0RhdGUubm93KCl9Lm1qc2AsXG4gICk7XG4gIGNvbnN0IGJhc2VDb25maWdVcmwgPSBwYXRoVG9GaWxlVVJMKG9wdGlvbnMuYmFzZUNvbmZpZ1BhdGgpLmhyZWY7XG4gIGNvbnN0IHNvdXJjZSA9IFtcbiAgICBgaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO2AsXG4gICAgYGltcG9ydCBiYXNlQ29uZmlnIGZyb20gJHtKU09OLnN0cmluZ2lmeShiYXNlQ29uZmlnVXJsKX07YCxcbiAgICBgaW1wb3J0IHpvZENvbXBpbGVyIGZyb20gXCJ6b2QtY29tcGlsZXIvcm9sbGRvd25cIjtgLFxuICAgIFwiXCIsXG4gICAgYGNvbnN0IGNvbXBpbGVyUGx1Z2luID0gem9kQ29tcGlsZXIoJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICBjb2RlZ2VuTW9kZTogXCJpbmxpbmVcIixcbiAgICAgIGluY2x1ZGU6IFtvcHRpb25zLnJlZ2lzdHJ5UGF0aF0sXG4gICAgICBvdXRwdXQ6IFwiY29tcGFjdFwiLFxuICAgICAgc2NoZW1hczogXCJleHBsaWNpdFwiLFxuICAgIH0pfSk7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLnJlZ2lzdHJ5UGF0aCl9O2AsXG4gICAgYGNvbnN0IGFwaVJvb3RQYXRoID0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLmFwaVJvb3RQYXRoKX07YCxcbiAgICBgY29uc3QgY2Fub25pY2FsT3V0RGlyID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcImRpc3RcIik7YCxcbiAgICBgY29uc3QgcmVnaXN0cnlFbnRyeU5hbWUgPSBcImFwcGxpY2F0aW9uL3NvbmFtdS52YWxpZGF0b3JzLmdlbmVyYXRlZFwiO2AsXG4gICAgYGNvbnN0IGRlZmF1bHRFbnRyeSA9IHsgaW5kZXg6IFwic3JjL2luZGV4LnRzXCIgfTtgLFxuICAgIFwiY29uc3QgcmVzb2x2ZXNUb1JlZ2lzdHJ5ID0gKGVudHJ5KSA9PlwiLFxuICAgICcgIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiBwYXRoLnJlc29sdmUoYXBpUm9vdFBhdGgsIGVudHJ5KSA9PT0gcmVnaXN0cnlQYXRoOycsXG4gICAgXCJjb25zdCBhcHBlbmRSZWdpc3RyeUVudHJ5ID0gKGVudHJ5KSA9PiB7XCIsXG4gICAgXCIgIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1wiLFxuICAgIFwiICAgIHJldHVybiBlbnRyeS5zb21lKHJlc29sdmVzVG9SZWdpc3RyeSkgPyBlbnRyeSA6IFsuLi5lbnRyeSwgcmVnaXN0cnlQYXRoXTtcIixcbiAgICBcIiAgfVwiLFxuICAgICcgIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHsnLFxuICAgIFwiICAgIHJldHVybiByZXNvbHZlc1RvUmVnaXN0cnkoZW50cnkpID8gZW50cnkgOiBbZW50cnksIHJlZ2lzdHJ5UGF0aF07XCIsXG4gICAgXCIgIH1cIixcbiAgICAnICBpZiAodHlwZW9mIGVudHJ5ID09PSBcIm9iamVjdFwiICYmIGVudHJ5ICE9PSBudWxsKSB7JyxcbiAgICBcIiAgICBpZiAoT2JqZWN0LnZhbHVlcyhlbnRyeSkuc29tZShyZXNvbHZlc1RvUmVnaXN0cnkpKSByZXR1cm4gZW50cnk7XCIsXG4gICAgXCIgICAgaWYgKHJlZ2lzdHJ5RW50cnlOYW1lIGluIGVudHJ5KSB7XCIsXG4gICAgXCIgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRzZG93biBlbnRyeSBjb2xsaXNpb246ICR7cmVnaXN0cnlFbnRyeU5hbWV9YCk7XCIsXG4gICAgXCIgICAgfVwiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmVudHJ5LCBbcmVnaXN0cnlFbnRyeU5hbWVdOiByZWdpc3RyeVBhdGggfTtcIixcbiAgICBcIiAgfVwiLFxuICAgIFwiICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1wiLFxuICAgIFwiICAgIHJldHVybiB7IC4uLmRlZmF1bHRFbnRyeSwgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCIgIH1cIixcbiAgICBcIiAgcmV0dXJuIHsgW3JlZ2lzdHJ5RW50cnlOYW1lXTogcmVnaXN0cnlQYXRoIH07XCIsXG4gICAgXCJ9O1wiLFxuICAgIFwiY29uc3QgYXBwZW5kUGx1Z2luID0gKGNvbmZpZykgPT4gKHtcIixcbiAgICBcIiAgLi4uY29uZmlnLFwiLFxuICAgIFwiICAvLyDrn7Dtg4DsnoQgbG9hZGVy6rCAIOywuOyhsO2VmOuKlCByZWdpc3RyeSDqsr3roZzrpbwg67mM65OcIOyEpOygleqzvCDsnbzsuZjsi5ztgrXri4jri6QuXCIsXG4gICAgXCIgIG91dERpcjogY2Fub25pY2FsT3V0RGlyLFwiLFxuICAgIFwiICBmaXhlZEV4dGVuc2lvbjogZmFsc2UsXCIsXG4gICAgXCIgIGVudHJ5OiBhcHBlbmRSZWdpc3RyeUVudHJ5KGNvbmZpZy5lbnRyeSksXCIsXG4gICAgXCIgIHBsdWdpbnM6IFsuLi4oY29uZmlnLnBsdWdpbnMgPz8gW10pLCBjb21waWxlclBsdWdpbl0sXCIsXG4gICAgXCJ9KTtcIixcbiAgICBcImNvbnN0IGFwcGVuZFRvUmVzb2x2ZWRDb25maWcgPSAoY29uZmlnKSA9PlwiLFxuICAgIFwiICBBcnJheS5pc0FycmF5KGNvbmZpZykgPyBjb25maWcubWFwKGFwcGVuZFBsdWdpbikgOiBhcHBlbmRQbHVnaW4oY29uZmlnKTtcIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGRlZmF1bHQgYXN5bmMgKC4uLmFyZ3MpID0+IHtcIixcbiAgICAnICBjb25zdCByZXNvbHZlZCA9IHR5cGVvZiBiYXNlQ29uZmlnID09PSBcImZ1bmN0aW9uXCInLFxuICAgIFwiICAgID8gYXdhaXQgYmFzZUNvbmZpZyguLi5hcmdzKVwiLFxuICAgIFwiICAgIDogYXdhaXQgYmFzZUNvbmZpZztcIixcbiAgICBcIiAgcmV0dXJuIGFwcGVuZFRvUmVzb2x2ZWRDb25maWcocmVzb2x2ZWQpO1wiLFxuICAgIFwifTtcIixcbiAgICBcIlwiLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGF3YWl0IHdyaXRlRmlsZSh3cmFwcGVyUGF0aCwgc291cmNlLCBcInV0ZjhcIik7XG4gIHJldHVybiB3cmFwcGVyUGF0aDtcbn1cblxuLyoqXG4gKiBBUEkg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF9hcGkg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFQSV9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3Q8eyBjb25maWdGaWxlUGF0aDogc3RyaW5nIH0+W10gPSBbXG4gIHtcbiAgICBuYW1lOiBcIkFQSVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkFQSSDtlITroZzsoJ3tirgg67mM65OcIOyCsOy2nOusvFwiLFxuICAgIHByb2plY3RQYXRoOiBcImFwaVwiLFxuICAgIHByZUJ1aWxkQ29tbWFuZDogKCkgPT4gXCJybSAtcmYgZGlzdFwiLFxuICAgIGJ1aWxkQ29tbWFuZDogKHsgY29uZmlnRmlsZVBhdGggfSkgPT5cbiAgICAgIGB0c2MgLS1ub0VtaXQgJiYgcG5wbSBleGVjIHRzZG93biAtLWNvbmZpZyAke0pTT04uc3RyaW5naWZ5KGNvbmZpZ0ZpbGVQYXRoKX1gLFxuICB9LFxuXTtcblxuLyoqXG4gKiDsm7kg7ZSE66Gc7KCd7Yq4IOu5jOuTnCDsgrDstpzrrLzsl5Ag64yA7ZWcIOq3nOy5meuTpC5cbiAqIGNsaS50c+ydmCBidWlsZF93ZWIg7ZWo7IiY6rCAIOydtOqyg+ydhCDrs7Tqs6Ag6re464yA66GcIOyLpO2Wie2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGNvbnN0IFdFQl9BUlRJRkFDVFM6IEJ1aWxkQXJ0aWZhY3RbXSA9IFtcbiAge1xuICAgIG5hbWU6IFwiV2ViIENsaWVudFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldlYiDtlITroZzsoJ3tirgg7YG065287J207Ja47Yq4IOu5jOuTnCDsgrDstpzrrLxcIixcbiAgICBwcm9qZWN0UGF0aDogXCJ3ZWJcIixcbiAgICBwcmVCdWlsZENvbW1hbmQ6ICgpID0+IFwicm0gLXJmIGRpc3QvY2xpZW50XCIsXG4gICAgYnVpbGRDb21tYW5kOiAoKSA9PlxuICAgICAgYCR7Y3JlYXRlV2ViVHlwZWNoZWNrQ29tbWFuZCgpfSAmJiB2aXRlIGJ1aWxkIC0tY29uZmlnIHZpdGUuY29uZmlnLnRzIC0tb3V0RGlyIGRpc3QvY2xpZW50YCxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiV2ViIFNlcnZlclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIldlYiDtlITroZzsoJ3tirgg7ISc67KEIOu5jOuTnCDsgrDstpzrrLxcIixcbiAgICBwcm9qZWN0UGF0aDogXCJ3ZWJcIixcbiAgICBwcmVCdWlsZENvbW1hbmQ6ICgpID0+IFwicm0gLXJmIGRpc3Qvc2VydmVyXCIsXG4gICAgYnVpbGRDb21tYW5kOiAoKSA9PlxuICAgICAgYCR7Y3JlYXRlV2ViVHlwZWNoZWNrQ29tbWFuZCgpfSAmJiB2aXRlIGJ1aWxkIC0tY29uZmlnIHZpdGUuY29uZmlnLnRzIC0tc3NyIHNyYy9lbnRyeS1zZXJ2ZXIuZ2VuZXJhdGVkLnRzeCAtLW91dERpciBkaXN0L3NlcnZlcmAsXG4gICAgcG9zdEJ1aWxkQ29tbWFuZDogKCkgPT5cbiAgICAgIFwicm0gLXJmIC4uL2FwaS93ZWItZGlzdCAmJiBta2RpciAtcCAuLi9hcGkvd2ViLWRpc3QgJiYgY3AgLXIgZGlzdC8qIC4uL2FwaS93ZWItZGlzdFwiLFxuICB9LFxuXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVBcGlCdWlsZENvbmZpZ1BhdGgoXG4gIGFwaVJvb3RQYXRoOiBzdHJpbmcsXG4gIGRlcGVuZGVuY2llczoge1xuICAgIGV4aXN0czogKGNhbmRpZGF0ZVBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgICBtb2R1bGVEaXI6IHN0cmluZztcbiAgfSA9IHtcbiAgICBleGlzdHMsXG4gICAgbW9kdWxlRGlyOiBpbXBvcnQubWV0YS5kaXJuYW1lLFxuICB9LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbG9jYWxDb25maWdQYXRoID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBcInRzZG93bi5jb25maWcudHNcIik7XG4gIGlmIChhd2FpdCBkZXBlbmRlbmNpZXMuZXhpc3RzKGxvY2FsQ29uZmlnUGF0aCkpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5kaW0oXCJVc2luZyB0c2Rvd24uY29uZmlnLnRzIGZyb20gcHJvamVjdCByb290Li4uXCIpKTtcbiAgICByZXR1cm4gbG9jYWxDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsuZGltKFwiVXNpbmcgZGVmYXVsdCB0c2Rvd24gQVBJIGNvbmZpZyBmcm9tIHNvbmFtdSBwYWNrYWdlLi4uXCIpKTtcbiAgY29uc3QgY29tcGlsZWRDb25maWdQYXRoID0gcGF0aC5qb2luKGRlcGVuZGVuY2llcy5tb2R1bGVEaXIsIFwiLi5cIiwgXCJ0c2Rvd24uYXBpLmNvbmZpZy5qc1wiKTtcbiAgaWYgKGF3YWl0IGRlcGVuZGVuY2llcy5leGlzdHMoY29tcGlsZWRDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBjb21waWxlZENvbmZpZ1BhdGg7XG4gIH1cbiAgcmV0dXJuIHBhdGguam9pbihkZXBlbmRlbmNpZXMubW9kdWxlRGlyLCBcIi4uXCIsIFwiLi5cIiwgXCJ0c2Rvd24uYXBpLmNvbmZpZy50c1wiKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwczxUPihcbiAgYXJ0aWZhY3Q6IEJ1aWxkQXJ0aWZhY3Q8VD4sXG4gIG9wdGlvbnM6IHsgY3dkOiBzdHJpbmc7IGJ1aWxkQ29tbWFuZEFyZ3M6IFQgfSxcbikge1xuICBjb25zdCBzdGVwcyA9IFtcbiAgICB7IG5hbWU6IFwicHJlLWJ1aWxkXCIsIGNtZDogYXJ0aWZhY3QucHJlQnVpbGRDb21tYW5kPy4oKSB9LFxuICAgIHsgbmFtZTogXCJidWlsZFwiLCBjbWQ6IGFydGlmYWN0LmJ1aWxkQ29tbWFuZChvcHRpb25zLmJ1aWxkQ29tbWFuZEFyZ3MpIH0sXG4gICAgeyBuYW1lOiBcInBvc3QtYnVpbGRcIiwgY21kOiBhcnRpZmFjdC5wb3N0QnVpbGRDb21tYW5kPy4oKSB9LFxuICBdLmZpbHRlcigoc3RlcCkgPT4gc3RlcC5jbWQgIT09IHVuZGVmaW5lZCk7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHN0ZXBzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1tpbmRleF07XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPT09IHN0ZXBzLmxlbmd0aCAtIDE7XG4gICAgdHJ5IHtcbiAgICAgIGFzc2VydChzdGVwLmNtZCk7XG4gICAgICBwcmludFRhc2tTdGFydChzdGVwLm5hbWUsIHN0ZXAuY21kLCBpc0xhc3QpO1xuICAgICAgYXdhaXQgZXhlY1dpdGhMaW5lUHJlZml4KHN0ZXAuY21kLCB7IGN3ZDogb3B0aW9ucy5jd2QgfSk7XG4gICAgICBwcmludFRhc2tTdWNjZXNzKHN0ZXAubmFtZSwgaXNMYXN0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJpbnRUYXNrRmFpbGVkKHN0ZXAubmFtZSwgaXNMYXN0KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtzdGVwLm5hbWV9IGZhaWxlZGAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRBcGlDb21tYW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcGlSb290UGF0aCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICBjb25zdCBiYXNlQ29uZmlnUGF0aCA9IGF3YWl0IHJlc29sdmVBcGlCdWlsZENvbmZpZ1BhdGgoYXBpUm9vdFBhdGgpO1xuICBjb25zdCBwb2xpY3kgPSBhd2FpdCBsb2FkQnVpbGRDb21waWxlclBvbGljeShhcGlSb290UGF0aCk7XG4gIGNvbnN0IHJlZ2lzdHJ5UGF0aCA9IHBhdGguam9pbihhcGlSb290UGF0aCwgSFRUUF9WQUxJREFUT1JfUkVHSVNUUllfU09VUkNFX1BBVEgpO1xuICBjb25zdCBjb25maWdGaWxlUGF0aCA9IGF3YWl0IGNyZWF0ZUFwaVpvZENvbXBpbGVyQnVpbGRXcmFwcGVyKHtcbiAgICBhcGlSb290UGF0aCxcbiAgICBiYXNlQ29uZmlnUGF0aCxcbiAgICBwb2xpY3ksXG4gICAgcmVnaXN0cnlQYXRoLFxuICB9KTtcbiAgY29uc3QgdGVtcG9yYXJ5Q29uZmlnUGF0aCA9IGNvbmZpZ0ZpbGVQYXRoID09PSBiYXNlQ29uZmlnUGF0aCA/IHVuZGVmaW5lZCA6IGNvbmZpZ0ZpbGVQYXRoO1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuXG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBBUElfQVJUSUZBQ1RTKSB7XG4gICAgICBwcmludFRhc2tIZWFkZXIoYXJ0aWZhY3QubmFtZSwgYXJ0aWZhY3QuZGVzY3JpcHRpb24sIGFwaVJvb3RQYXRoKTtcbiAgICAgIGF3YWl0IHJ1bkJ1aWxkU3RlcHMoYXJ0aWZhY3QsIHtcbiAgICAgICAgY3dkOiBhcGlSb290UGF0aCxcbiAgICAgICAgYnVpbGRDb21tYW5kQXJnczogeyBjb25maWdGaWxlUGF0aCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwb2xpY3kuYXBpID09PSBcImFvdFwiKSB7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5qb2luKGFwaVJvb3RQYXRoLCBIVFRQX1ZBTElEQVRPUl9SRUdJU1RSWV9CVUlMRF9QQVRIKTtcbiAgICAgIGlmICghKGF3YWl0IGV4aXN0cyhvdXRwdXRQYXRoKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCdWlsdCBIVFRQIHZhbGlkYXRvciByZWdpc3RyeSBub3QgZm91bmQ6ICR7b3V0cHV0UGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydEFwaVpvZENvbXBpbGVyQnVpbGRPdXRwdXQoW1xuICAgICAgICB7IGNvZGU6IGF3YWl0IHJlYWRGaWxlKG91dHB1dFBhdGgsIFwidXRmOFwiKSwgcGF0aDogb3V0cHV0UGF0aCB9LFxuICAgICAgXSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIHRydWUsIERhdGUubm93KCkgLSBzdGFydGVkQXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiQVBJXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAodGVtcG9yYXJ5Q29uZmlnUGF0aCAhPT0gdW5kZWZpbmVkKSBhd2FpdCBybSh0ZW1wb3JhcnlDb25maWdQYXRoLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFdlYkNvbW1hbmQoe1xuICBza2lwSWZNaXNzaW5nID0gZmFsc2UsXG59OiB7IHNraXBJZk1pc3Npbmc/OiBib29sZWFuIH0gPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcHBSb290UGF0aCA9IGZpbmRBcHBSb290UGF0aCgpO1xuICBjb25zdCB3ZWJQYXRoID0gcGF0aC5qb2luKGFwcFJvb3RQYXRoLCBcIndlYlwiKTtcbiAgaWYgKCEoYXdhaXQgZXhpc3RzKHdlYlBhdGgpKSkge1xuICAgIGlmIChza2lwSWZNaXNzaW5nKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KFwiV2ViIOuUlOugie2GoOumrOqwgCDsl4bsnLzrr4DroZwgV2ViIOu5jOuTnOulvCDqsbTrhIjrnIHri4jri6QuXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB3ZWIg65SU66CJ7Yag66as66W8IOywvuydhCDsiJgg7JeG7Iq164uI64ukOiAke3dlYlBhdGh9YCk7XG4gIH1cblxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgYXJ0aWZhY3Qgb2YgV0VCX0FSVElGQUNUUykge1xuICAgICAgY29uc3QgY3dkID0gcGF0aC5qb2luKGFwcFJvb3RQYXRoLCBhcnRpZmFjdC5wcm9qZWN0UGF0aCk7XG4gICAgICBwcmludFRhc2tIZWFkZXIoYXJ0aWZhY3QubmFtZSwgYXJ0aWZhY3QuZGVzY3JpcHRpb24sIGN3ZCk7XG4gICAgICBhd2FpdCBydW5CdWlsZFN0ZXBzKGFydGlmYWN0LCB7IGN3ZCwgYnVpbGRDb21tYW5kQXJnczoge30gfSk7XG4gICAgfVxuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIHRydWUsIERhdGUubm93KCkgLSBzdGFydGVkQXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50QnVpbGRTdW1tYXJ5KFwiV2ViXCIsIGZhbHNlLCBEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O2tCQWdCOEI7Y0FDWTtXQUN1QjtBQWNqRSxTQUFnQixtQkFBbUIsT0FBdUI7Q0FFeEQsT0FBTyxJQUFJLE1BQU0sV0FBVyxLQUFLLE9BQU8sRUFBRTtBQUM1QztBQUVBLFNBQWdCLDRCQUFvQztDQUNsRCxNQUFNLGlCQUFpQixLQUFLLFFBQVEsT0FBTyxLQUFLLFFBQVEsTUFBTTtDQUM5RCxNQUFNLGFBQWEsS0FBSyxLQUN0QixPQUFPLEtBQUssU0FDWixpQkFBaUIsaUJBQWlCLE9BQU8sTUFDM0M7Q0FFQSxPQUFPLEdBRFEsaUJBQWlCLGtCQUFrQixtQkFBbUIsUUFBUSxRQUFRLEVBQ3BFLEdBQUcsbUJBQW1CLFVBQVU7QUFDbkQ7QUFRQSxNQUFNLGtDQUFtRSxFQUN2RSxNQUFNLHFCQUFxQjtDQUN6QixRQUFRLE1BQU0sT0FBTyx5QkFBQSxDQUEwQjtBQUNqRCxFQUNGO0FBRUEsZUFBc0IsaUNBQ3BCLFlBQ0EsU0FJQSxlQUFnRCxpQ0FDYjtDQUNuQyxJQUFJLFFBQVEsT0FBTyxRQUFRLE9BQ3pCLE9BQU87Q0FFVCxJQUFJLFFBQVEsaUJBQWlCLFFBQzNCLE1BQU0sSUFBSSxNQUFNLDJFQUEyRTtDQUk3RixNQUFNLGtCQUFpQixNQURHLGFBQWEsbUJBQW1CLEVBQ25DLENBQVk7RUFDakMsYUFBYTtFQUNiLFNBQVMsQ0FBQyxRQUFRLFlBQVk7RUFDOUIsUUFBUTtFQUNSLFNBQVM7Q0FDWCxDQUFDO0NBRUQsSUFBSTtDQUNKLElBQUksTUFBTSxRQUFRLFdBQVcsT0FBTyxHQUNsQyxvQkFBb0IsV0FBVztNQUMx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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.11.8",
3
+ "version": "0.11.9",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "framework",
@@ -211,11 +211,8 @@ export const API_ARTIFACTS: BuildArtifact<{ configFilePath: string }>[] = [
211
211
  description: "API 프로젝트 빌드 산출물",
212
212
  projectPath: "api",
213
213
  preBuildCommand: () => "rm -rf dist",
214
- buildCommand: ({ configFilePath }) => {
215
- const configExtension = path.extname(configFilePath);
216
- const configLoader = [".ts", ".tsx"].includes(configExtension) ? " --config-loader tsx" : "";
217
- return `tsc --noEmit && pnpm exec tsdown --config ${JSON.stringify(configFilePath)}${configLoader}`;
218
- },
214
+ buildCommand: ({ configFilePath }) =>
215
+ `tsc --noEmit && pnpm exec tsdown --config ${JSON.stringify(configFilePath)}`,
219
216
  },
220
217
  ];
221
218