semantifold 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +61 -15
  2. package/build/index.d.ts +52 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +60 -8
  5. package/build/src/artifact-path.d.ts +23 -1
  6. package/build/src/artifact-path.d.ts.map +1 -1
  7. package/build/src/artifact-path.js +45 -3
  8. package/build/src/artifacts.d.ts.map +1 -1
  9. package/build/src/artifacts.js +66 -1
  10. package/build/src/backends/android.d.ts +49 -0
  11. package/build/src/backends/android.d.ts.map +1 -0
  12. package/build/src/backends/android.js +1274 -0
  13. package/build/src/backends/c-validation.d.ts.map +1 -1
  14. package/build/src/backends/c-validation.js +7 -3
  15. package/build/src/backends/cpp-validation.d.ts.map +1 -1
  16. package/build/src/backends/cpp-validation.js +7 -3
  17. package/build/src/backends/csharp.js +7 -1
  18. package/build/src/backends/dart-runtime.d.ts +2 -0
  19. package/build/src/backends/dart-runtime.d.ts.map +1 -0
  20. package/build/src/backends/dart-runtime.js +41 -0
  21. package/build/src/backends/dart.d.ts +20 -0
  22. package/build/src/backends/dart.d.ts.map +1 -0
  23. package/build/src/backends/dart.js +321 -0
  24. package/build/src/backends/effects.d.ts +60 -0
  25. package/build/src/backends/effects.d.ts.map +1 -0
  26. package/build/src/backends/effects.js +746 -0
  27. package/build/src/backends/go.js +18 -4
  28. package/build/src/backends/identifiers.d.ts +36 -4
  29. package/build/src/backends/identifiers.d.ts.map +1 -1
  30. package/build/src/backends/identifiers.js +160 -10
  31. package/build/src/backends/index.d.ts.map +1 -1
  32. package/build/src/backends/index.js +27 -4
  33. package/build/src/backends/ios.d.ts +68 -0
  34. package/build/src/backends/ios.d.ts.map +1 -0
  35. package/build/src/backends/ios.js +1503 -0
  36. package/build/src/backends/java.d.ts.map +1 -1
  37. package/build/src/backends/java.js +429 -36
  38. package/build/src/backends/javascript.d.ts +6 -0
  39. package/build/src/backends/javascript.d.ts.map +1 -1
  40. package/build/src/backends/javascript.js +380 -24
  41. package/build/src/backends/kotlin-runtime.d.ts +3 -0
  42. package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
  43. package/build/src/backends/kotlin-runtime.js +29 -0
  44. package/build/src/backends/kotlin.d.ts +33 -0
  45. package/build/src/backends/kotlin.d.ts.map +1 -0
  46. package/build/src/backends/kotlin.js +138 -0
  47. package/build/src/backends/native-validation.d.ts +2 -2
  48. package/build/src/backends/native-validation.d.ts.map +1 -1
  49. package/build/src/backends/native-validation.js +2 -2
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  51. package/build/src/backends/ordered-expressions.js +39 -7
  52. package/build/src/backends/php-stdlib-support.d.ts +19 -0
  53. package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
  54. package/build/src/backends/php-stdlib-support.js +227 -0
  55. package/build/src/backends/php.d.ts.map +1 -1
  56. package/build/src/backends/php.js +448 -33
  57. package/build/src/backends/program.d.ts +83 -0
  58. package/build/src/backends/program.d.ts.map +1 -0
  59. package/build/src/backends/program.js +1309 -0
  60. package/build/src/backends/python.js +7 -1
  61. package/build/src/backends/ruby.d.ts.map +1 -1
  62. package/build/src/backends/ruby.js +310 -24
  63. package/build/src/backends/rust-runtime.d.ts +7 -0
  64. package/build/src/backends/rust-runtime.d.ts.map +1 -0
  65. package/build/src/backends/rust-runtime.js +32 -0
  66. package/build/src/backends/rust-validation.d.ts +9 -0
  67. package/build/src/backends/rust-validation.d.ts.map +1 -0
  68. package/build/src/backends/rust-validation.js +78 -0
  69. package/build/src/backends/rust.d.ts +24 -0
  70. package/build/src/backends/rust.d.ts.map +1 -0
  71. package/build/src/backends/rust.js +344 -0
  72. package/build/src/backends/scalars.d.ts +14 -6
  73. package/build/src/backends/scalars.d.ts.map +1 -1
  74. package/build/src/backends/scalars.js +167 -17
  75. package/build/src/backends/shared.d.ts +23 -4
  76. package/build/src/backends/shared.d.ts.map +1 -1
  77. package/build/src/backends/shared.js +2174 -62
  78. package/build/src/backends/stdlib-support.d.ts +14 -0
  79. package/build/src/backends/stdlib-support.d.ts.map +1 -0
  80. package/build/src/backends/stdlib-support.js +237 -0
  81. package/build/src/backends/swift-runtime.d.ts +3 -0
  82. package/build/src/backends/swift-runtime.d.ts.map +1 -0
  83. package/build/src/backends/swift-runtime.js +14 -0
  84. package/build/src/backends/swift.d.ts +8 -0
  85. package/build/src/backends/swift.d.ts.map +1 -0
  86. package/build/src/backends/swift.js +127 -0
  87. package/build/src/backends/typescript.d.ts.map +1 -1
  88. package/build/src/backends/typescript.js +344 -24
  89. package/build/src/backends/wasm.d.ts +43 -0
  90. package/build/src/backends/wasm.d.ts.map +1 -0
  91. package/build/src/backends/wasm.js +2164 -0
  92. package/build/src/backends/writer.d.ts +255 -4
  93. package/build/src/backends/writer.d.ts.map +1 -1
  94. package/build/src/backends/writer.js +491 -3
  95. package/build/src/diagnostic.d.ts +4 -3
  96. package/build/src/diagnostic.d.ts.map +1 -1
  97. package/build/src/diagnostic.js +5 -3
  98. package/build/src/frontends/c.d.ts.map +1 -1
  99. package/build/src/frontends/c.js +5 -3
  100. package/build/src/frontends/cpp.d.ts.map +1 -1
  101. package/build/src/frontends/cpp.js +5 -3
  102. package/build/src/frontends/csharp.d.ts.map +1 -1
  103. package/build/src/frontends/csharp.js +7 -3
  104. package/build/src/frontends/dart.d.ts +10 -0
  105. package/build/src/frontends/dart.d.ts.map +1 -0
  106. package/build/src/frontends/dart.js +913 -0
  107. package/build/src/frontends/index.d.ts +3 -1
  108. package/build/src/frontends/index.d.ts.map +1 -1
  109. package/build/src/frontends/index.js +15 -5
  110. package/build/src/frontends/java.d.ts +110 -1
  111. package/build/src/frontends/java.d.ts.map +1 -1
  112. package/build/src/frontends/java.js +1725 -70
  113. package/build/src/frontends/javascript-typescript.d.ts +69 -1
  114. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  115. package/build/src/frontends/javascript-typescript.js +1825 -93
  116. package/build/src/frontends/kotlin.d.ts +10 -0
  117. package/build/src/frontends/kotlin.d.ts.map +1 -0
  118. package/build/src/frontends/kotlin.js +685 -0
  119. package/build/src/frontends/php.d.ts +118 -1
  120. package/build/src/frontends/php.d.ts.map +1 -1
  121. package/build/src/frontends/php.js +1583 -76
  122. package/build/src/frontends/program.d.ts +74 -0
  123. package/build/src/frontends/program.d.ts.map +1 -0
  124. package/build/src/frontends/program.js +989 -0
  125. package/build/src/frontends/ruby.d.ts +68 -1
  126. package/build/src/frontends/ruby.d.ts.map +1 -1
  127. package/build/src/frontends/ruby.js +1446 -101
  128. package/build/src/frontends/rust-parser.d.ts +11 -0
  129. package/build/src/frontends/rust-parser.d.ts.map +1 -0
  130. package/build/src/frontends/rust-parser.js +15 -0
  131. package/build/src/frontends/rust.d.ts +14 -0
  132. package/build/src/frontends/rust.d.ts.map +1 -0
  133. package/build/src/frontends/rust.js +715 -0
  134. package/build/src/frontends/scalars.d.ts +10 -0
  135. package/build/src/frontends/scalars.d.ts.map +1 -1
  136. package/build/src/frontends/scalars.js +28 -2
  137. package/build/src/frontends/swift.d.ts +10 -0
  138. package/build/src/frontends/swift.d.ts.map +1 -0
  139. package/build/src/frontends/swift.js +860 -0
  140. package/build/src/frontends/types.d.ts +186 -0
  141. package/build/src/frontends/types.d.ts.map +1 -0
  142. package/build/src/frontends/types.js +634 -0
  143. package/build/src/language-registry.d.ts +46 -4
  144. package/build/src/language-registry.d.ts.map +1 -1
  145. package/build/src/language-registry.js +177 -13
  146. package/build/src/mapping.d.ts +2 -2
  147. package/build/src/mapping.d.ts.map +1 -1
  148. package/build/src/mapping.js +31 -10
  149. package/build/src/semantic/capabilities.d.ts +66 -0
  150. package/build/src/semantic/capabilities.d.ts.map +1 -0
  151. package/build/src/semantic/capabilities.js +649 -0
  152. package/build/src/semantic/effects.d.ts +26 -0
  153. package/build/src/semantic/effects.d.ts.map +1 -0
  154. package/build/src/semantic/effects.js +764 -0
  155. package/build/src/semantic/generics.d.ts +23 -0
  156. package/build/src/semantic/generics.d.ts.map +1 -0
  157. package/build/src/semantic/generics.js +61 -0
  158. package/build/src/semantic/lifetime.d.ts +37 -0
  159. package/build/src/semantic/lifetime.d.ts.map +1 -0
  160. package/build/src/semantic/lifetime.js +527 -0
  161. package/build/src/semantic/provenance.d.ts +9 -2
  162. package/build/src/semantic/provenance.d.ts.map +1 -1
  163. package/build/src/semantic/provenance.js +462 -20
  164. package/build/src/semantic/scalars.d.ts +11 -0
  165. package/build/src/semantic/scalars.d.ts.map +1 -1
  166. package/build/src/semantic/scalars.js +16 -1
  167. package/build/src/semantic/stdlib.d.ts +254 -0
  168. package/build/src/semantic/stdlib.d.ts.map +1 -0
  169. package/build/src/semantic/stdlib.js +880 -0
  170. package/build/src/semantic/types.d.ts +3108 -178
  171. package/build/src/semantic/types.d.ts.map +1 -1
  172. package/build/src/semantic/types.js +730 -15
  173. package/build/src/semantic/validate.d.ts +85 -5
  174. package/build/src/semantic/validate.d.ts.map +1 -1
  175. package/build/src/semantic/validate.js +2576 -98
  176. package/build/src/stdlib-facades.d.ts +304 -0
  177. package/build/src/stdlib-facades.d.ts.map +1 -0
  178. package/build/src/stdlib-facades.js +1167 -0
  179. package/build/src/stdlib-negotiation.d.ts +69 -0
  180. package/build/src/stdlib-negotiation.d.ts.map +1 -0
  181. package/build/src/stdlib-negotiation.js +403 -0
  182. package/build/src/stdlib-providers.d.ts +72 -0
  183. package/build/src/stdlib-providers.d.ts.map +1 -0
  184. package/build/src/stdlib-providers.js +339 -0
  185. package/build/src/toolchains.d.ts +55 -1
  186. package/build/src/toolchains.d.ts.map +1 -1
  187. package/build/src/toolchains.js +15 -4
  188. package/docs/android.md +79 -0
  189. package/docs/architecture.md +47 -13
  190. package/docs/dart.md +60 -0
  191. package/docs/goals.md +3 -3
  192. package/docs/ios.md +121 -0
  193. package/docs/kotlin.md +42 -0
  194. package/docs/language-support.md +238 -26
  195. package/docs/multi-file-modules.md +52 -0
  196. package/docs/parser-qualification.md +121 -8
  197. package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
  198. package/docs/rust.md +88 -0
  199. package/docs/source-maps.md +17 -7
  200. package/docs/specification.md +5 -0
  201. package/docs/standard-library-portability.md +39 -8
  202. package/docs/swift.md +44 -0
  203. package/docs/testing.md +381 -4
  204. package/docs/webassembly.md +52 -0
  205. package/index.js +66 -8
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
  236. package/package.json +5 -2
  237. package/src/artifact-path.js +47 -2
  238. package/src/artifacts.js +67 -0
  239. package/src/backends/android.js +1370 -0
  240. package/src/backends/c-validation.js +6 -1
  241. package/src/backends/cpp-validation.js +6 -1
  242. package/src/backends/csharp.js +3 -0
  243. package/src/backends/dart-runtime.js +41 -0
  244. package/src/backends/dart.js +326 -0
  245. package/src/backends/effects.js +705 -0
  246. package/src/backends/go.js +14 -2
  247. package/src/backends/identifiers.js +166 -9
  248. package/src/backends/index.js +27 -2
  249. package/src/backends/ios.js +1612 -0
  250. package/src/backends/java.js +454 -36
  251. package/src/backends/javascript.js +389 -23
  252. package/src/backends/kotlin-runtime.js +29 -0
  253. package/src/backends/kotlin.js +144 -0
  254. package/src/backends/native-validation.js +1 -1
  255. package/src/backends/ordered-expressions.js +40 -6
  256. package/src/backends/php-stdlib-support.js +239 -0
  257. package/src/backends/php.js +469 -32
  258. package/src/backends/program.js +1408 -0
  259. package/src/backends/python.js +3 -0
  260. package/src/backends/ruby.js +326 -23
  261. package/src/backends/rust-runtime.js +34 -0
  262. package/src/backends/rust-validation.js +75 -0
  263. package/src/backends/rust.js +335 -0
  264. package/src/backends/scalars.js +141 -16
  265. package/src/backends/shared.js +2314 -115
  266. package/src/backends/stdlib-support.js +234 -0
  267. package/src/backends/swift-runtime.js +14 -0
  268. package/src/backends/swift.js +132 -0
  269. package/src/backends/typescript.js +349 -23
  270. package/src/backends/wasm.js +2208 -0
  271. package/src/backends/writer.js +545 -2
  272. package/src/diagnostic.js +4 -2
  273. package/src/frontends/c.js +4 -2
  274. package/src/frontends/cpp.js +4 -2
  275. package/src/frontends/csharp.js +4 -2
  276. package/src/frontends/dart.js +963 -0
  277. package/src/frontends/index.js +14 -4
  278. package/src/frontends/java.js +1977 -69
  279. package/src/frontends/javascript-typescript.js +2046 -102
  280. package/src/frontends/kotlin.js +713 -0
  281. package/src/frontends/php.js +1725 -79
  282. package/src/frontends/program.js +1062 -0
  283. package/src/frontends/ruby.js +1624 -98
  284. package/src/frontends/rust-parser.js +18 -0
  285. package/src/frontends/rust.js +714 -0
  286. package/src/frontends/scalars.js +31 -1
  287. package/src/frontends/swift.js +893 -0
  288. package/src/frontends/types.js +750 -0
  289. package/src/language-registry.js +182 -12
  290. package/src/mapping.js +33 -9
  291. package/src/semantic/capabilities.js +671 -0
  292. package/src/semantic/effects.js +737 -0
  293. package/src/semantic/generics.js +58 -0
  294. package/src/semantic/lifetime.js +517 -0
  295. package/src/semantic/provenance.js +412 -19
  296. package/src/semantic/scalars.js +17 -0
  297. package/src/semantic/stdlib.js +921 -0
  298. package/src/semantic/types.js +810 -14
  299. package/src/semantic/validate.js +2934 -209
  300. package/src/stdlib-facades.js +1211 -0
  301. package/src/stdlib-negotiation.js +446 -0
  302. package/src/stdlib-providers.js +377 -0
  303. package/src/toolchains.js +16 -3
@@ -0,0 +1,14 @@
1
+ export type StdlibProviderTarget = "php" | "ruby" | "javascript" | "typescript";
2
+ export type SupportSegment = {
3
+ when: (operations: Set<string>) => boolean;
4
+ text: string;
5
+ };
6
+ /**
7
+ * Generates the complete tree-shaken stdlib provider artifact content for one adopted target.
8
+ * @param {StdlibProviderTarget} language - Adopted target host provider.
9
+ * @param {readonly string[]} operations - Used canonical operations in contract order.
10
+ * @param {string} [module] - Qualified canonical module identity; omitted for the Task 034 probe.
11
+ * @returns {string} Complete provider source text.
12
+ */
13
+ export declare function generateStdlibProviderContent(language: StdlibProviderTarget, operations: readonly string[], module?: string): string;
14
+ //# sourceMappingURL=stdlib-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdlib-support.d.ts","sourceRoot":"","sources":["../../../src/backends/stdlib-support.js"],"names":[],"mappings":"AAKG,YAAwD,oBAAoB,GAAlE,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,YAAY,CAAsB;AAC5E,YAAsE,cAAc,GAA1E;IAAC,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAgB;AAiMvF;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAL3C,oBAK2C,EAAE,UAAU,EAJvD,SAAS,MAAM,EAIwC,EAAE,MAAM,AAHvE,CACA,EADQ,MAG+D,GAF7D,MAAM,CA6BlB"}
@@ -0,0 +1,237 @@
1
+ // @ts-check
2
+ import { generateTask037PhpProviderContent } from "./php-stdlib-support.js";
3
+ /**
4
+ * @typedef {"php" | "ruby" | "javascript" | "typescript"} StdlibProviderTarget
5
+ * @typedef {{when: (operations: Set<string>) => boolean, text: string}} SupportSegment
6
+ */
7
+ /**
8
+ * Emits the protected native entry shims that portable code is allowed to call.
9
+ * @param {StdlibProviderTarget} language - Adopted target.
10
+ * @param {readonly string[]} operations - Used canonical operations in contract order.
11
+ * @returns {string[]} One shim line per used operation.
12
+ */
13
+ function providerShims(language, operations) {
14
+ const prefix = `__semantifold_provider_${language}_`;
15
+ const shims = [];
16
+ for (const operation of operations) {
17
+ if (language == "php") {
18
+ if (operation == "probeEffect")
19
+ shims.push(`function ${prefix}probeEffect(string $label, int $value, bool $fail): int { return probeEffect($label, $value, $fail); }`);
20
+ else if (operation == "probeAcquire")
21
+ shims.push(`function ${prefix}probeAcquire(bool $fail): ProbeResource { return probeAcquire($fail); }`);
22
+ else if (operation == "probeRead")
23
+ shims.push(`function ${prefix}probeRead(ProbeResource $resource, bool $fail): ?string { return probeRead($resource, $fail); }`);
24
+ else if (operation == "probeClose")
25
+ shims.push(`function ${prefix}probeClose(ProbeResource $resource, bool $fail): void { probeClose($resource, $fail); }`);
26
+ else
27
+ shims.push(`function ${prefix}probeTrace(): string { return probeTrace(); }`);
28
+ }
29
+ else if (language == "ruby") {
30
+ const parameter = operation == "probeEffect" ? "label, value, fail_value"
31
+ : operation == "probeAcquire" ? "fail_value"
32
+ : operation == "probeTrace" ? "" : "resource, fail_value";
33
+ const call = operation == "probeEffect" ? "probeEffect(label, value, fail_value)"
34
+ : operation == "probeAcquire" ? "probeAcquire(fail_value)"
35
+ : operation == "probeTrace" ? "probeTrace()" : `${operation}(resource, fail_value)`;
36
+ shims.push(`def ${prefix}${operation}(${parameter})\n ${call}\nend`);
37
+ }
38
+ else if (language == "javascript") {
39
+ const parameters = operation == "probeEffect" ? "label, value, fail"
40
+ : operation == "probeAcquire" ? "fail"
41
+ : operation == "probeTrace" ? "" : "resource, fail";
42
+ const body = operation == "probeEffect" ? "return probeEffect(label, value, fail)"
43
+ : operation == "probeAcquire" ? "return probeAcquire(fail)"
44
+ : operation == "probeTrace" ? "return probeTrace()"
45
+ : operation == "probeClose" ? "probeClose(resource, fail)" : "return probeRead(resource, fail)";
46
+ shims.push(`export function ${prefix}${operation}(${parameters}) { ${body} }`);
47
+ }
48
+ else {
49
+ const signature = operation == "probeEffect" ? "(label: string, value: number, fail: boolean): number"
50
+ : operation == "probeAcquire" ? "(fail: boolean): ProbeResource"
51
+ : operation == "probeTrace" ? "(): string"
52
+ : operation == "probeClose" ? "(resource: ProbeResource, fail: boolean): void" : "(resource: ProbeResource, fail: boolean): string | null";
53
+ const body = operation == "probeEffect" ? "return probeEffect(label, value, fail)"
54
+ : operation == "probeAcquire" ? "return probeAcquire(fail)"
55
+ : operation == "probeTrace" ? "return probeTrace()"
56
+ : operation == "probeClose" ? "probeClose(resource, fail)" : "return probeRead(resource, fail)";
57
+ shims.push(`export function ${prefix}${operation}${signature} { ${body} }`);
58
+ }
59
+ }
60
+ return shims;
61
+ }
62
+ /**
63
+ * Returns the ordered tree-shakable support segments for one adopted target.
64
+ * The full operation set reproduces the single-module support carrier byte-for-byte.
65
+ * @param {StdlibProviderTarget} language - Adopted target.
66
+ * @returns {SupportSegment[]} Ordered segments.
67
+ */
68
+ function supportSegments(language) {
69
+ const any = () => true;
70
+ /**
71
+ * Reports whether any resource-lifecycle operation is used.
72
+ * @param {Set<string>} operations - Used operations.
73
+ * @returns {boolean} Whether a resource operation is used.
74
+ */
75
+ const resource = (operations) => operations.has("probeAcquire") || operations.has("probeRead") || operations.has("probeClose");
76
+ if (language == "php")
77
+ return [
78
+ { when: (operations) => operations.has("probeEffect"), text: "final class ProbeOperationFailure extends RuntimeException {}\n" },
79
+ { when: (operations) => operations.has("probeAcquire"), text: "final class ProbeAcquireFailure extends RuntimeException {}\n" },
80
+ { when: (operations) => operations.has("probeRead"), text: "final class ProbeReadFailure extends RuntimeException {}\n" },
81
+ { when: (operations) => operations.has("probeClose"), text: "final class ProbeCloseFailure extends RuntimeException {}\n" },
82
+ { when: (operations) => operations.has("probeRead") || operations.has("probeClose"), text: "final class ProbeResourceClosed extends RuntimeException {}\n" },
83
+ {
84
+ when: resource,
85
+ text: "final class ProbeResource {\n public bool $closed = false;\n public function __construct(public mixed $handle) {}\n}\n"
86
+ },
87
+ { when: any, text: "$GLOBALS['__semantifold_task034_trace'] = [];\n" },
88
+ {
89
+ when: (operations) => operations.has("probeEffect"),
90
+ text: "function probeEffect(string $label, int $value, bool $fail): int {\n $GLOBALS['__semantifold_task034_trace'][] = 'effect:' . $label;\n if ($fail) throw new ProbeOperationFailure('ProbeOperationFailure');\n return $value;\n}\n"
91
+ },
92
+ {
93
+ when: (operations) => operations.has("probeAcquire"),
94
+ text: "function probeAcquire(bool $fail): ProbeResource {\n $GLOBALS['__semantifold_task034_trace'][] = 'acquire';\n if ($fail) throw new ProbeAcquireFailure('ProbeAcquireFailure');\n try { $handle = @fopen((string) getenv('SEMANTIFOLD_TASK034_PROBE_PATH'), 'rb'); }\n catch (Throwable) { throw new ProbeAcquireFailure('ProbeAcquireFailure'); }\n if ($handle === false) throw new ProbeAcquireFailure('ProbeAcquireFailure');\n return new ProbeResource($handle);\n}\n"
95
+ },
96
+ {
97
+ when: (operations) => operations.has("probeRead"),
98
+ text: "function probeRead(ProbeResource $resource, bool $fail): ?string {\n if ($resource->closed) throw new ProbeResourceClosed('ProbeResourceClosed');\n $GLOBALS['__semantifold_task034_trace'][] = 'read';\n if ($fail) throw new ProbeReadFailure('ProbeReadFailure');\n try { $line = @fgets($resource->handle); }\n catch (Throwable) { throw new ProbeReadFailure('ProbeReadFailure'); }\n if ($line === false) {\n if (feof($resource->handle)) return null;\n throw new ProbeReadFailure('ProbeReadFailure');\n }\n return rtrim($line, \"\\r\\n\");\n}\n"
99
+ },
100
+ {
101
+ when: (operations) => operations.has("probeClose"),
102
+ text: "function probeClose(ProbeResource $resource, bool $fail): void {\n if ($resource->closed) throw new ProbeResourceClosed('ProbeResourceClosed');\n $GLOBALS['__semantifold_task034_trace'][] = 'close';\n try { $closed = @fclose($resource->handle); }\n catch (Throwable) { $resource->closed = true; throw new ProbeCloseFailure('ProbeCloseFailure'); }\n $resource->closed = true;\n if ($fail || !$closed) throw new ProbeCloseFailure('ProbeCloseFailure');\n}\n"
103
+ },
104
+ {
105
+ when: (operations) => operations.has("probeTrace"),
106
+ text: "function probeTrace(): string { return implode(',', $GLOBALS['__semantifold_task034_trace']); }\n"
107
+ }
108
+ ];
109
+ if (language == "ruby")
110
+ return [
111
+ { when: (operations) => operations.has("probeEffect"), text: "class ProbeOperationFailure < StandardError; end\n" },
112
+ { when: (operations) => operations.has("probeAcquire"), text: "class ProbeAcquireFailure < StandardError; end\n" },
113
+ { when: (operations) => operations.has("probeRead"), text: "class ProbeReadFailure < StandardError; end\n" },
114
+ { when: (operations) => operations.has("probeClose"), text: "class ProbeCloseFailure < StandardError; end\n" },
115
+ { when: (operations) => operations.has("probeRead") || operations.has("probeClose"), text: "class ProbeResourceClosed < StandardError; end\n" },
116
+ {
117
+ when: resource,
118
+ text: "class ProbeResource\n attr_accessor :handle, :closed\n def initialize(handle); @handle = handle; @closed = false; end\nend\n"
119
+ },
120
+ { when: any, text: "$__semantifold_task034_trace = []\n" },
121
+ {
122
+ when: (operations) => operations.has("probeEffect"),
123
+ text: "def probeEffect(label, value, fail_value)\n $__semantifold_task034_trace << \"effect:#{label}\"\n raise ProbeOperationFailure, \"ProbeOperationFailure\" if fail_value\n value\nend\n"
124
+ },
125
+ {
126
+ when: (operations) => operations.has("probeAcquire"),
127
+ text: "def probeAcquire(fail_value)\n $__semantifold_task034_trace << \"acquire\"\n raise ProbeAcquireFailure, \"ProbeAcquireFailure\" if fail_value\n begin; ProbeResource.new(File.open(ENV.fetch(\"SEMANTIFOLD_TASK034_PROBE_PATH\"), \"r\")); rescue ProbeAcquireFailure; raise; rescue StandardError; raise ProbeAcquireFailure, \"ProbeAcquireFailure\"; end\nend\n"
128
+ },
129
+ {
130
+ when: (operations) => operations.has("probeRead"),
131
+ text: "def probeRead(resource, fail_value)\n raise ProbeResourceClosed, \"ProbeResourceClosed\" if resource.closed\n $__semantifold_task034_trace << \"read\"\n raise ProbeReadFailure, \"ProbeReadFailure\" if fail_value\n begin; value = resource.handle.gets; value.nil? ? nil : value.chomp; rescue ProbeReadFailure; raise; rescue StandardError; raise ProbeReadFailure, \"ProbeReadFailure\"; end\nend\n"
132
+ },
133
+ {
134
+ when: (operations) => operations.has("probeClose"),
135
+ text: "def probeClose(resource, fail_value)\n raise ProbeResourceClosed, \"ProbeResourceClosed\" if resource.closed\n $__semantifold_task034_trace << \"close\"\n begin; resource.handle.close; rescue StandardError; resource.closed = true; raise ProbeCloseFailure, \"ProbeCloseFailure\"; end\n resource.closed = true\n raise ProbeCloseFailure, \"ProbeCloseFailure\" if fail_value\n nil\nend\n"
136
+ },
137
+ { when: (operations) => operations.has("probeTrace"), text: "def probeTrace; $__semantifold_task034_trace.join(\",\"); end\n" }
138
+ ];
139
+ const fs = /** @type {SupportSegment} */ ({ when: (operations) => operations.has("probeAcquire"), text: 'const __semantifoldTask034Fs = process.getBuiltinModule("node:fs")\n' });
140
+ const trace = language == "javascript"
141
+ ? { when: any, text: "const __semantifoldTask034Trace = []\n" }
142
+ : { when: any, text: "const __semantifoldTask034Trace: string[] = []\n" };
143
+ const resourceClass = language == "javascript"
144
+ ? { when: resource, text: "class ProbeResource { constructor(handle) { this.handle = handle; this.closed = false; this.position = 0 } }\n" }
145
+ : { when: resource, text: "class ProbeResource { closed = false; position = 0; constructor(readonly handle: number) {} }\n" };
146
+ if (language == "javascript")
147
+ return [
148
+ fs,
149
+ { when: (operations) => operations.has("probeEffect"), text: "class ProbeOperationFailure extends Error {}\n" },
150
+ { when: (operations) => operations.has("probeAcquire"), text: "class ProbeAcquireFailure extends Error {}\n" },
151
+ { when: (operations) => operations.has("probeRead"), text: "class ProbeReadFailure extends Error {}\n" },
152
+ { when: (operations) => operations.has("probeClose"), text: "class ProbeCloseFailure extends Error {}\n" },
153
+ { when: (operations) => operations.has("probeRead") || operations.has("probeClose"), text: "class ProbeResourceClosed extends Error {}\n" },
154
+ resourceClass,
155
+ trace,
156
+ {
157
+ when: (operations) => operations.has("probeEffect"),
158
+ text: 'function probeEffect(label, value, fail) { __semantifoldTask034Trace.push(`effect:${label}`); if (fail) throw new ProbeOperationFailure("ProbeOperationFailure"); return value }\n'
159
+ },
160
+ {
161
+ when: (operations) => operations.has("probeAcquire"),
162
+ text: 'function probeAcquire(fail) { __semantifoldTask034Trace.push("acquire"); if (fail) throw new ProbeAcquireFailure("ProbeAcquireFailure"); try { return new ProbeResource(__semantifoldTask034Fs.openSync(process.env.SEMANTIFOLD_TASK034_PROBE_PATH, "r")) } catch { throw new ProbeAcquireFailure("ProbeAcquireFailure") } }\n'
163
+ },
164
+ {
165
+ when: (operations) => operations.has("probeRead"),
166
+ text: 'function probeRead(resource, fail) { if (resource.closed) throw new ProbeResourceClosed("ProbeResourceClosed"); __semantifoldTask034Trace.push("read"); if (fail) throw new ProbeReadFailure("ProbeReadFailure"); try { const bytes = []; const buffer = Buffer.alloc(1); while (true) { const count = __semantifoldTask034Fs.readSync(resource.handle, buffer, 0, 1, resource.position++); if (count === 0) return bytes.length === 0 ? null : Buffer.from(bytes).toString("utf8"); if (buffer[0] === 10) return Buffer.from(bytes).toString("utf8").replace(/\\r$/u, ""); bytes.push(buffer[0]) } } catch { throw new ProbeReadFailure("ProbeReadFailure") } }\n'
167
+ },
168
+ {
169
+ when: (operations) => operations.has("probeClose"),
170
+ text: 'function probeClose(resource, fail) { if (resource.closed) throw new ProbeResourceClosed("ProbeResourceClosed"); __semantifoldTask034Trace.push("close"); try { __semantifoldTask034Fs.closeSync(resource.handle) } catch { resource.closed = true; throw new ProbeCloseFailure("ProbeCloseFailure") } resource.closed = true; if (fail) throw new ProbeCloseFailure("ProbeCloseFailure") }\n'
171
+ },
172
+ { when: (operations) => operations.has("probeTrace"), text: 'function probeTrace() { return __semantifoldTask034Trace.join(",") }\n' }
173
+ ];
174
+ return [
175
+ fs,
176
+ { when: (operations) => operations.has("probeEffect"), text: "class ProbeOperationFailure extends Error {}\n" },
177
+ { when: (operations) => operations.has("probeAcquire"), text: "class ProbeAcquireFailure extends Error {}\n" },
178
+ { when: (operations) => operations.has("probeRead"), text: "class ProbeReadFailure extends Error {}\n" },
179
+ { when: (operations) => operations.has("probeClose"), text: "class ProbeCloseFailure extends Error {}\n" },
180
+ { when: (operations) => operations.has("probeRead") || operations.has("probeClose"), text: "class ProbeResourceClosed extends Error {}\n" },
181
+ resourceClass,
182
+ trace,
183
+ {
184
+ when: (operations) => operations.has("probeEffect"),
185
+ text: 'function probeEffect(label: string, value: number, fail: boolean): number { __semantifoldTask034Trace.push(`effect:${label}`); if (fail) throw new ProbeOperationFailure("ProbeOperationFailure"); return value }\n'
186
+ },
187
+ {
188
+ when: (operations) => operations.has("probeAcquire"),
189
+ text: 'function probeAcquire(fail: boolean): ProbeResource { __semantifoldTask034Trace.push("acquire"); if (fail) throw new ProbeAcquireFailure("ProbeAcquireFailure"); try { return new ProbeResource(__semantifoldTask034Fs.openSync(process.env.SEMANTIFOLD_TASK034_PROBE_PATH as string, "r")) } catch { throw new ProbeAcquireFailure("ProbeAcquireFailure") } }\n'
190
+ },
191
+ {
192
+ when: (operations) => operations.has("probeRead"),
193
+ text: 'function probeRead(resource: ProbeResource, fail: boolean): string | null { if (resource.closed) throw new ProbeResourceClosed("ProbeResourceClosed"); __semantifoldTask034Trace.push("read"); if (fail) throw new ProbeReadFailure("ProbeReadFailure"); try { const bytes: number[] = []; const buffer = Buffer.alloc(1); while (true) { const count = __semantifoldTask034Fs.readSync(resource.handle, buffer, 0, 1, resource.position++); if (count === 0) return bytes.length === 0 ? null : Buffer.from(bytes).toString("utf8"); if (buffer[0] === 10) return Buffer.from(bytes).toString("utf8").replace(/\\r$/u, ""); bytes.push(buffer[0]) } } catch { throw new ProbeReadFailure("ProbeReadFailure") } }\n'
194
+ },
195
+ {
196
+ when: (operations) => operations.has("probeClose"),
197
+ text: 'function probeClose(resource: ProbeResource, fail: boolean): void { if (resource.closed) throw new ProbeResourceClosed("ProbeResourceClosed"); __semantifoldTask034Trace.push("close"); try { __semantifoldTask034Fs.closeSync(resource.handle) } catch { resource.closed = true; throw new ProbeCloseFailure("ProbeCloseFailure") } resource.closed = true; if (fail) throw new ProbeCloseFailure("ProbeCloseFailure") }\n'
198
+ },
199
+ { when: (operations) => operations.has("probeTrace"), text: 'function probeTrace(): string { return __semantifoldTask034Trace.join(",") }\n' }
200
+ ];
201
+ }
202
+ /**
203
+ * Generates the complete tree-shaken stdlib provider artifact content for one adopted target.
204
+ * @param {StdlibProviderTarget} language - Adopted target host provider.
205
+ * @param {readonly string[]} operations - Used canonical operations in contract order.
206
+ * @param {string} [module] - Qualified canonical module identity; omitted for the Task 034 probe.
207
+ * @returns {string} Complete provider source text.
208
+ */
209
+ export function generateStdlibProviderContent(language, operations, module) {
210
+ if (module !== undefined && module != "semantifold.task034.resource-probe") {
211
+ if (language != "php")
212
+ throw new RangeError(`Canonical module '${module}' has no '${language}' provider content.`);
213
+ return generateTask037PhpProviderContent(module, operations);
214
+ }
215
+ const used = new Set(operations);
216
+ if (used.size == 0)
217
+ throw new Error("A stdlib provider requires at least one used operation.");
218
+ const segments = supportSegments(language);
219
+ const start = language == "ruby" ? "# semantifold-task034-support\n" : "/* semantifold-task034-support */\n";
220
+ const end = language == "ruby" ? "# semantifold-task034-support-end\n\n" : "/* semantifold-task034-support-end */\n\n";
221
+ const support = start +
222
+ segments.filter(({ when }) => when(used)).map(({ text }) => text).join("") +
223
+ end;
224
+ const header = language == "php" ? "<?php\ndeclare(strict_types=1);\n" : "";
225
+ const classExports = language == "javascript" || language == "typescript" ?
226
+ `export {${[
227
+ ["ProbeOperationFailure", used.has("probeEffect")],
228
+ ["ProbeAcquireFailure", used.has("probeAcquire")],
229
+ ["ProbeReadFailure", used.has("probeRead")],
230
+ ["ProbeCloseFailure", used.has("probeClose")],
231
+ ["ProbeResourceClosed", used.has("probeRead") || used.has("probeClose")],
232
+ ["ProbeResource", used.has("probeAcquire") || used.has("probeRead") || used.has("probeClose")]
233
+ ].filter(([, present]) => present).map(([name]) => name).join(", ")}}\n` : "";
234
+ const shims = providerShims(language, operations);
235
+ return header + support + classExports + (shims.length > 0 ? shims.join("\n") + "\n" : "");
236
+ }
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLXN1cHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvc3RkbGliLXN1cHBvcnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBRXpFOzs7R0FHRztBQUVIOzs7OztHQUtHO0FBQ0gsU0FBUyxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVU7SUFDekMsTUFBTSxNQUFNLEdBQUcsMEJBQTBCLFFBQVEsR0FBRyxDQUFBO0lBQ3BELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQTtJQUVoQixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLElBQUksUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3RCLElBQUksU0FBUyxJQUFJLGFBQWE7Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLE1BQU0sd0dBQXdHLENBQUMsQ0FBQTtpQkFDakssSUFBSSxTQUFTLElBQUksY0FBYztnQkFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksTUFBTSx5RUFBeUUsQ0FBQyxDQUFBO2lCQUN4SSxJQUFJLFNBQVMsSUFBSSxXQUFXO2dCQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLGlHQUFpRyxDQUFDLENBQUE7aUJBQzdKLElBQUksU0FBUyxJQUFJLFlBQVk7Z0JBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLE1BQU0seUZBQXlGLENBQUMsQ0FBQTs7Z0JBQ3RKLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxNQUFNLCtDQUErQyxDQUFDLENBQUE7UUFDcEYsQ0FBQzthQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE1BQU0sU0FBUyxHQUFHLFNBQVMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtnQkFDdkUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVk7b0JBQzFDLENBQUMsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFBO1lBQzdELE1BQU0sSUFBSSxHQUFHLFNBQVMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztnQkFDL0UsQ0FBQyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtvQkFDeEQsQ0FBQyxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLHdCQUF3QixDQUFBO1lBQ3ZGLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxNQUFNLEdBQUcsU0FBUyxJQUFJLFNBQVMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7YUFBTSxJQUFJLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFVBQVUsR0FBRyxTQUFTLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxvQkFBb0I7Z0JBQ2xFLENBQUMsQ0FBQyxTQUFTLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNO29CQUNwQyxDQUFDLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtZQUN2RCxNQUFNLElBQUksR0FBRyxTQUFTLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQ2hGLENBQUMsQ0FBQyxTQUFTLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQywyQkFBMkI7b0JBQ3pELENBQUMsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7d0JBQ2pELENBQUMsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUE7WUFDckcsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsTUFBTSxHQUFHLFNBQVMsSUFBSSxVQUFVLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQTtRQUNoRixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sU0FBUyxHQUFHLFNBQVMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLHVEQUF1RDtnQkFDcEcsQ0FBQyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztvQkFDOUQsQ0FBQyxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVk7d0JBQ3hDLENBQUMsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDLENBQUMseURBQXlELENBQUE7WUFDaEosTUFBTSxJQUFJLEdBQUcsU0FBUyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO2dCQUNoRixDQUFDLENBQUMsU0FBUyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO29CQUN6RCxDQUFDLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMscUJBQXFCO3dCQUNqRCxDQUFDLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFBO1lBQ3JHLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLE1BQU0sR0FBRyxTQUFTLEdBQUcsU0FBUyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUE7UUFDN0UsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQVE7SUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBO0lBRXRCOzs7O09BSUc7SUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFOUgsSUFBSSxRQUFRLElBQUksS0FBSztRQUFFLE9BQU87WUFDNUIsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlFQUFpRSxFQUFDO1lBQzlILEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSwrREFBK0QsRUFBQztZQUM3SCxFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsNERBQTRELEVBQUM7WUFDdkgsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLDZEQUE2RCxFQUFDO1lBQ3pILEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLCtEQUErRCxFQUFDO1lBQzFKO2dCQUNFLElBQUksRUFBRSxRQUFRO2dCQUNkLElBQUksRUFBRSw4SEFBOEg7YUFDckk7WUFDRCxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLGlEQUFpRCxFQUFDO1lBQ3BFO2dCQUNFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUM7Z0JBQ25ELElBQUksRUFBRSw0T0FBNE87YUFDblA7WUFDRDtnQkFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO2dCQUNwRCxJQUFJLEVBQUUsOGRBQThkO2FBQ3JlO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDakQsSUFBSSxFQUFFLG9rQkFBb2tCO2FBQzNrQjtZQUNEO2dCQUNFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7Z0JBQ2xELElBQUksRUFBRSwwZEFBMGQ7YUFDamU7WUFDRDtnQkFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsbUdBQW1HO2FBQzFHO1NBQ0YsQ0FBQTtJQUNELElBQUksUUFBUSxJQUFJLE1BQU07UUFBRSxPQUFPO1lBQzdCLEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxvREFBb0QsRUFBQztZQUNqSCxFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLEVBQUUsa0RBQWtELEVBQUM7WUFDaEgsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLCtDQUErQyxFQUFDO1lBQzFHLEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxnREFBZ0QsRUFBQztZQUM1RyxFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxrREFBa0QsRUFBQztZQUM3STtnQkFDRSxJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsZ0lBQWdJO2FBQ3ZJO1lBQ0QsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxxQ0FBcUMsRUFBQztZQUN4RDtnQkFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO2dCQUNuRCxJQUFJLEVBQUUsMExBQTBMO2FBQ2pNO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDcEQsSUFBSSxFQUFFLHVXQUF1VzthQUM5VztZQUNEO2dCQUNFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ2pELElBQUksRUFBRSwrWUFBK1k7YUFDdFo7WUFDRDtnQkFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsdVlBQXVZO2FBQzlZO1lBQ0QsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlFQUFpRSxFQUFDO1NBQzlILENBQUE7SUFDRCxNQUFNLEVBQUUsR0FBRyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxzRUFBc0UsRUFBQyxDQUFDLENBQUE7SUFDL0ssTUFBTSxLQUFLLEdBQUcsUUFBUSxJQUFJLFlBQVk7UUFDcEMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsd0NBQXdDLEVBQUM7UUFDN0QsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsa0RBQWtELEVBQUMsQ0FBQTtJQUN6RSxNQUFNLGFBQWEsR0FBRyxRQUFRLElBQUksWUFBWTtRQUM1QyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnSEFBZ0gsRUFBQztRQUMxSSxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxpR0FBaUcsRUFBQyxDQUFBO0lBRTdILElBQUksUUFBUSxJQUFJLFlBQVk7UUFBRSxPQUFPO1lBQ25DLEVBQUU7WUFDRixFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsZ0RBQWdELEVBQUM7WUFDN0csRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsSUFBSSxFQUFFLDhDQUE4QyxFQUFDO1lBQzVHLEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSwyQ0FBMkMsRUFBQztZQUN0RyxFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsNENBQTRDLEVBQUM7WUFDeEcsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsOENBQThDLEVBQUM7WUFDekksYUFBYTtZQUNiLEtBQUs7WUFDTDtnQkFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO2dCQUNuRCxJQUFJLEVBQUUsb0xBQW9MO2FBQzNMO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztnQkFDcEQsSUFBSSxFQUFFLGdVQUFnVTthQUN2VTtZQUNEO2dCQUNFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ2pELElBQUksRUFBRSxvb0JBQW9vQjthQUMzb0I7WUFDRDtnQkFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNsRCxJQUFJLEVBQUUsK1hBQStYO2FBQ3RZO1lBQ0QsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLHdFQUF3RSxFQUFDO1NBQ3JJLENBQUE7SUFDRCxPQUFPO1FBQ0wsRUFBRTtRQUNGLEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxnREFBZ0QsRUFBQztRQUM3RyxFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLEVBQUUsOENBQThDLEVBQUM7UUFDNUcsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLDJDQUEyQyxFQUFDO1FBQ3RHLEVBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSw0Q0FBNEMsRUFBQztRQUN4RyxFQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSw4Q0FBOEMsRUFBQztRQUN6SSxhQUFhO1FBQ2IsS0FBSztRQUNMO1lBQ0UsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUNuRCxJQUFJLEVBQUUscU5BQXFOO1NBQzVOO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDO1lBQ3BELElBQUksRUFBRSxrV0FBa1c7U0FDelc7UUFDRDtZQUNFLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDakQsSUFBSSxFQUFFLHFyQkFBcXJCO1NBQzVyQjtRQUNEO1lBQ0UsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztZQUNsRCxJQUFJLEVBQUUsNlpBQTZaO1NBQ3BhO1FBQ0QsRUFBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLGdGQUFnRixFQUFDO0tBQzdJLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTTtJQUN4RSxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxJQUFJLG9DQUFvQyxFQUFFLENBQUM7UUFDM0UsSUFBSSxRQUFRLElBQUksS0FBSztZQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMscUJBQXFCLE1BQU0sYUFBYSxRQUFRLHFCQUFxQixDQUFDLENBQUE7UUFDbEgsT0FBTyxpQ0FBaUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRWhDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFBO0lBQzlGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMxQyxNQUFNLEtBQUssR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUE7SUFDNUcsTUFBTSxHQUFHLEdBQUcsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLDJDQUEyQyxDQUFBO0lBQ3RILE1BQU0sT0FBTyxHQUFHLEtBQUs7UUFDbkIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdEUsR0FBRyxDQUFBO0lBQ0wsTUFBTSxNQUFNLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMzRSxNQUFNLFlBQVksR0FBRyxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQztRQUN6RSxXQUFXO1lBQ1QsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRCxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdDLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hFLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9GLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQy9FLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFakQsT0FBTyxNQUFNLEdBQUcsT0FBTyxHQUFHLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDNUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2dlbmVyYXRlVGFzazAzN1BocFByb3ZpZGVyQ29udGVudH0gZnJvbSBcIi4vcGhwLXN0ZGxpYi1zdXBwb3J0LmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7XCJwaHBcIiB8IFwicnVieVwiIHwgXCJqYXZhc2NyaXB0XCIgfCBcInR5cGVzY3JpcHRcIn0gU3RkbGliUHJvdmlkZXJUYXJnZXRcbiAqIEB0eXBlZGVmIHt7d2hlbjogKG9wZXJhdGlvbnM6IFNldDxzdHJpbmc+KSA9PiBib29sZWFuLCB0ZXh0OiBzdHJpbmd9fSBTdXBwb3J0U2VnbWVudFxuICovXG5cbi8qKlxuICogRW1pdHMgdGhlIHByb3RlY3RlZCBuYXRpdmUgZW50cnkgc2hpbXMgdGhhdCBwb3J0YWJsZSBjb2RlIGlzIGFsbG93ZWQgdG8gY2FsbC5cbiAqIEBwYXJhbSB7U3RkbGliUHJvdmlkZXJUYXJnZXR9IGxhbmd1YWdlIC0gQWRvcHRlZCB0YXJnZXQuXG4gKiBAcGFyYW0ge3JlYWRvbmx5IHN0cmluZ1tdfSBvcGVyYXRpb25zIC0gVXNlZCBjYW5vbmljYWwgb3BlcmF0aW9ucyBpbiBjb250cmFjdCBvcmRlci5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gT25lIHNoaW0gbGluZSBwZXIgdXNlZCBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHByb3ZpZGVyU2hpbXMobGFuZ3VhZ2UsIG9wZXJhdGlvbnMpIHtcbiAgY29uc3QgcHJlZml4ID0gYF9fc2VtYW50aWZvbGRfcHJvdmlkZXJfJHtsYW5ndWFnZX1fYFxuICBjb25zdCBzaGltcyA9IFtdXG5cbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcInBocFwiKSB7XG4gICAgICBpZiAob3BlcmF0aW9uID09IFwicHJvYmVFZmZlY3RcIikgc2hpbXMucHVzaChgZnVuY3Rpb24gJHtwcmVmaXh9cHJvYmVFZmZlY3Qoc3RyaW5nICRsYWJlbCwgaW50ICR2YWx1ZSwgYm9vbCAkZmFpbCk6IGludCB7IHJldHVybiBwcm9iZUVmZmVjdCgkbGFiZWwsICR2YWx1ZSwgJGZhaWwpOyB9YClcbiAgICAgIGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBcInByb2JlQWNxdWlyZVwiKSBzaGltcy5wdXNoKGBmdW5jdGlvbiAke3ByZWZpeH1wcm9iZUFjcXVpcmUoYm9vbCAkZmFpbCk6IFByb2JlUmVzb3VyY2UgeyByZXR1cm4gcHJvYmVBY3F1aXJlKCRmYWlsKTsgfWApXG4gICAgICBlbHNlIGlmIChvcGVyYXRpb24gPT0gXCJwcm9iZVJlYWRcIikgc2hpbXMucHVzaChgZnVuY3Rpb24gJHtwcmVmaXh9cHJvYmVSZWFkKFByb2JlUmVzb3VyY2UgJHJlc291cmNlLCBib29sICRmYWlsKTogP3N0cmluZyB7IHJldHVybiBwcm9iZVJlYWQoJHJlc291cmNlLCAkZmFpbCk7IH1gKVxuICAgICAgZWxzZSBpZiAob3BlcmF0aW9uID09IFwicHJvYmVDbG9zZVwiKSBzaGltcy5wdXNoKGBmdW5jdGlvbiAke3ByZWZpeH1wcm9iZUNsb3NlKFByb2JlUmVzb3VyY2UgJHJlc291cmNlLCBib29sICRmYWlsKTogdm9pZCB7IHByb2JlQ2xvc2UoJHJlc291cmNlLCAkZmFpbCk7IH1gKVxuICAgICAgZWxzZSBzaGltcy5wdXNoKGBmdW5jdGlvbiAke3ByZWZpeH1wcm9iZVRyYWNlKCk6IHN0cmluZyB7IHJldHVybiBwcm9iZVRyYWNlKCk7IH1gKVxuICAgIH0gZWxzZSBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlciA9IG9wZXJhdGlvbiA9PSBcInByb2JlRWZmZWN0XCIgPyBcImxhYmVsLCB2YWx1ZSwgZmFpbF92YWx1ZVwiXG4gICAgICAgIDogb3BlcmF0aW9uID09IFwicHJvYmVBY3F1aXJlXCIgPyBcImZhaWxfdmFsdWVcIlxuICAgICAgICAgIDogb3BlcmF0aW9uID09IFwicHJvYmVUcmFjZVwiID8gXCJcIiA6IFwicmVzb3VyY2UsIGZhaWxfdmFsdWVcIlxuICAgICAgY29uc3QgY2FsbCA9IG9wZXJhdGlvbiA9PSBcInByb2JlRWZmZWN0XCIgPyBcInByb2JlRWZmZWN0KGxhYmVsLCB2YWx1ZSwgZmFpbF92YWx1ZSlcIlxuICAgICAgICA6IG9wZXJhdGlvbiA9PSBcInByb2JlQWNxdWlyZVwiID8gXCJwcm9iZUFjcXVpcmUoZmFpbF92YWx1ZSlcIlxuICAgICAgICAgIDogb3BlcmF0aW9uID09IFwicHJvYmVUcmFjZVwiID8gXCJwcm9iZVRyYWNlKClcIiA6IGAke29wZXJhdGlvbn0ocmVzb3VyY2UsIGZhaWxfdmFsdWUpYFxuICAgICAgc2hpbXMucHVzaChgZGVmICR7cHJlZml4fSR7b3BlcmF0aW9ufSgke3BhcmFtZXRlcn0pXFxuICAke2NhbGx9XFxuZW5kYClcbiAgICB9IGVsc2UgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gb3BlcmF0aW9uID09IFwicHJvYmVFZmZlY3RcIiA/IFwibGFiZWwsIHZhbHVlLCBmYWlsXCJcbiAgICAgICAgOiBvcGVyYXRpb24gPT0gXCJwcm9iZUFjcXVpcmVcIiA/IFwiZmFpbFwiXG4gICAgICAgICAgOiBvcGVyYXRpb24gPT0gXCJwcm9iZVRyYWNlXCIgPyBcIlwiIDogXCJyZXNvdXJjZSwgZmFpbFwiXG4gICAgICBjb25zdCBib2R5ID0gb3BlcmF0aW9uID09IFwicHJvYmVFZmZlY3RcIiA/IFwicmV0dXJuIHByb2JlRWZmZWN0KGxhYmVsLCB2YWx1ZSwgZmFpbClcIlxuICAgICAgICA6IG9wZXJhdGlvbiA9PSBcInByb2JlQWNxdWlyZVwiID8gXCJyZXR1cm4gcHJvYmVBY3F1aXJlKGZhaWwpXCJcbiAgICAgICAgICA6IG9wZXJhdGlvbiA9PSBcInByb2JlVHJhY2VcIiA/IFwicmV0dXJuIHByb2JlVHJhY2UoKVwiXG4gICAgICAgICAgICA6IG9wZXJhdGlvbiA9PSBcInByb2JlQ2xvc2VcIiA/IFwicHJvYmVDbG9zZShyZXNvdXJjZSwgZmFpbClcIiA6IFwicmV0dXJuIHByb2JlUmVhZChyZXNvdXJjZSwgZmFpbClcIlxuICAgICAgc2hpbXMucHVzaChgZXhwb3J0IGZ1bmN0aW9uICR7cHJlZml4fSR7b3BlcmF0aW9ufSgke3BhcmFtZXRlcnN9KSB7ICR7Ym9keX0gfWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IG9wZXJhdGlvbiA9PSBcInByb2JlRWZmZWN0XCIgPyBcIihsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBmYWlsOiBib29sZWFuKTogbnVtYmVyXCJcbiAgICAgICAgOiBvcGVyYXRpb24gPT0gXCJwcm9iZUFjcXVpcmVcIiA/IFwiKGZhaWw6IGJvb2xlYW4pOiBQcm9iZVJlc291cmNlXCJcbiAgICAgICAgICA6IG9wZXJhdGlvbiA9PSBcInByb2JlVHJhY2VcIiA/IFwiKCk6IHN0cmluZ1wiXG4gICAgICAgICAgICA6IG9wZXJhdGlvbiA9PSBcInByb2JlQ2xvc2VcIiA/IFwiKHJlc291cmNlOiBQcm9iZVJlc291cmNlLCBmYWlsOiBib29sZWFuKTogdm9pZFwiIDogXCIocmVzb3VyY2U6IFByb2JlUmVzb3VyY2UsIGZhaWw6IGJvb2xlYW4pOiBzdHJpbmcgfCBudWxsXCJcbiAgICAgIGNvbnN0IGJvZHkgPSBvcGVyYXRpb24gPT0gXCJwcm9iZUVmZmVjdFwiID8gXCJyZXR1cm4gcHJvYmVFZmZlY3QobGFiZWwsIHZhbHVlLCBmYWlsKVwiXG4gICAgICAgIDogb3BlcmF0aW9uID09IFwicHJvYmVBY3F1aXJlXCIgPyBcInJldHVybiBwcm9iZUFjcXVpcmUoZmFpbClcIlxuICAgICAgICAgIDogb3BlcmF0aW9uID09IFwicHJvYmVUcmFjZVwiID8gXCJyZXR1cm4gcHJvYmVUcmFjZSgpXCJcbiAgICAgICAgICAgIDogb3BlcmF0aW9uID09IFwicHJvYmVDbG9zZVwiID8gXCJwcm9iZUNsb3NlKHJlc291cmNlLCBmYWlsKVwiIDogXCJyZXR1cm4gcHJvYmVSZWFkKHJlc291cmNlLCBmYWlsKVwiXG4gICAgICBzaGltcy5wdXNoKGBleHBvcnQgZnVuY3Rpb24gJHtwcmVmaXh9JHtvcGVyYXRpb259JHtzaWduYXR1cmV9IHsgJHtib2R5fSB9YClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNoaW1zXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JkZXJlZCB0cmVlLXNoYWthYmxlIHN1cHBvcnQgc2VnbWVudHMgZm9yIG9uZSBhZG9wdGVkIHRhcmdldC5cbiAqIFRoZSBmdWxsIG9wZXJhdGlvbiBzZXQgcmVwcm9kdWNlcyB0aGUgc2luZ2xlLW1vZHVsZSBzdXBwb3J0IGNhcnJpZXIgYnl0ZS1mb3ItYnl0ZS5cbiAqIEBwYXJhbSB7U3RkbGliUHJvdmlkZXJUYXJnZXR9IGxhbmd1YWdlIC0gQWRvcHRlZCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7U3VwcG9ydFNlZ21lbnRbXX0gT3JkZXJlZCBzZWdtZW50cy5cbiAqL1xuZnVuY3Rpb24gc3VwcG9ydFNlZ21lbnRzKGxhbmd1YWdlKSB7XG4gIGNvbnN0IGFueSA9ICgpID0+IHRydWVcblxuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIGFueSByZXNvdXJjZS1saWZlY3ljbGUgb3BlcmF0aW9uIGlzIHVzZWQuXG4gICAqIEBwYXJhbSB7U2V0PHN0cmluZz59IG9wZXJhdGlvbnMgLSBVc2VkIG9wZXJhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGEgcmVzb3VyY2Ugb3BlcmF0aW9uIGlzIHVzZWQuXG4gICAqL1xuICBjb25zdCByZXNvdXJjZSA9IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQWNxdWlyZVwiKSB8fCBvcGVyYXRpb25zLmhhcyhcInByb2JlUmVhZFwiKSB8fCBvcGVyYXRpb25zLmhhcyhcInByb2JlQ2xvc2VcIilcblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJwaHBcIikgcmV0dXJuIFtcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVFZmZlY3RcIiksIHRleHQ6IFwiZmluYWwgY2xhc3MgUHJvYmVPcGVyYXRpb25GYWlsdXJlIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7fVxcblwifSxcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVBY3F1aXJlXCIpLCB0ZXh0OiBcImZpbmFsIGNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVJlYWRcIiksIHRleHQ6IFwiZmluYWwgY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24ge31cXG5cIn0sXG4gICAge3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQ2xvc2VcIiksIHRleHQ6IFwiZmluYWwgY2xhc3MgUHJvYmVDbG9zZUZhaWx1cmUgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVJlYWRcIikgfHwgb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUNsb3NlXCIpLCB0ZXh0OiBcImZpbmFsIGNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHt9XFxuXCJ9LFxuICAgIHtcbiAgICAgIHdoZW46IHJlc291cmNlLFxuICAgICAgdGV4dDogXCJmaW5hbCBjbGFzcyBQcm9iZVJlc291cmNlIHtcXG4gICAgcHVibGljIGJvb2wgJGNsb3NlZCA9IGZhbHNlO1xcbiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocHVibGljIG1peGVkICRoYW5kbGUpIHt9XFxufVxcblwiXG4gICAgfSxcbiAgICB7d2hlbjogYW55LCB0ZXh0OiBcIiRHTE9CQUxTWydfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UnXSA9IFtdO1xcblwifSxcbiAgICB7XG4gICAgICB3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUVmZmVjdFwiKSxcbiAgICAgIHRleHQ6IFwiZnVuY3Rpb24gcHJvYmVFZmZlY3Qoc3RyaW5nICRsYWJlbCwgaW50ICR2YWx1ZSwgYm9vbCAkZmFpbCk6IGludCB7XFxuICAgICRHTE9CQUxTWydfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UnXVtdID0gJ2VmZmVjdDonIC4gJGxhYmVsO1xcbiAgICBpZiAoJGZhaWwpIHRocm93IG5ldyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUoJ1Byb2JlT3BlcmF0aW9uRmFpbHVyZScpO1xcbiAgICByZXR1cm4gJHZhbHVlO1xcbn1cXG5cIlxuICAgIH0sXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVBY3F1aXJlXCIpLFxuICAgICAgdGV4dDogXCJmdW5jdGlvbiBwcm9iZUFjcXVpcmUoYm9vbCAkZmFpbCk6IFByb2JlUmVzb3VyY2Uge1xcbiAgICAkR0xPQkFMU1snX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlJ11bXSA9ICdhY3F1aXJlJztcXG4gICAgaWYgKCRmYWlsKSB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZSgnUHJvYmVBY3F1aXJlRmFpbHVyZScpO1xcbiAgICB0cnkgeyAkaGFuZGxlID0gQGZvcGVuKChzdHJpbmcpIGdldGVudignU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRIJyksICdyYicpOyB9XFxuICAgIGNhdGNoIChUaHJvd2FibGUpIHsgdGhyb3cgbmV3IFByb2JlQWNxdWlyZUZhaWx1cmUoJ1Byb2JlQWNxdWlyZUZhaWx1cmUnKTsgfVxcbiAgICBpZiAoJGhhbmRsZSA9PT0gZmFsc2UpIHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKCdQcm9iZUFjcXVpcmVGYWlsdXJlJyk7XFxuICAgIHJldHVybiBuZXcgUHJvYmVSZXNvdXJjZSgkaGFuZGxlKTtcXG59XFxuXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHdoZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlUmVhZFwiKSxcbiAgICAgIHRleHQ6IFwiZnVuY3Rpb24gcHJvYmVSZWFkKFByb2JlUmVzb3VyY2UgJHJlc291cmNlLCBib29sICRmYWlsKTogP3N0cmluZyB7XFxuICAgIGlmICgkcmVzb3VyY2UtPmNsb3NlZCkgdGhyb3cgbmV3IFByb2JlUmVzb3VyY2VDbG9zZWQoJ1Byb2JlUmVzb3VyY2VDbG9zZWQnKTtcXG4gICAgJEdMT0JBTFNbJ19fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSddW10gPSAncmVhZCc7XFxuICAgIGlmICgkZmFpbCkgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoJ1Byb2JlUmVhZEZhaWx1cmUnKTtcXG4gICAgdHJ5IHsgJGxpbmUgPSBAZmdldHMoJHJlc291cmNlLT5oYW5kbGUpOyB9XFxuICAgIGNhdGNoIChUaHJvd2FibGUpIHsgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoJ1Byb2JlUmVhZEZhaWx1cmUnKTsgfVxcbiAgICBpZiAoJGxpbmUgPT09IGZhbHNlKSB7XFxuICAgICAgICBpZiAoZmVvZigkcmVzb3VyY2UtPmhhbmRsZSkpIHJldHVybiBudWxsO1xcbiAgICAgICAgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoJ1Byb2JlUmVhZEZhaWx1cmUnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcnRyaW0oJGxpbmUsIFxcXCJcXFxcclxcXFxuXFxcIik7XFxufVxcblwiXG4gICAgfSxcbiAgICB7XG4gICAgICB3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUNsb3NlXCIpLFxuICAgICAgdGV4dDogXCJmdW5jdGlvbiBwcm9iZUNsb3NlKFByb2JlUmVzb3VyY2UgJHJlc291cmNlLCBib29sICRmYWlsKTogdm9pZCB7XFxuICAgIGlmICgkcmVzb3VyY2UtPmNsb3NlZCkgdGhyb3cgbmV3IFByb2JlUmVzb3VyY2VDbG9zZWQoJ1Byb2JlUmVzb3VyY2VDbG9zZWQnKTtcXG4gICAgJEdMT0JBTFNbJ19fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSddW10gPSAnY2xvc2UnO1xcbiAgICB0cnkgeyAkY2xvc2VkID0gQGZjbG9zZSgkcmVzb3VyY2UtPmhhbmRsZSk7IH1cXG4gICAgY2F0Y2ggKFRocm93YWJsZSkgeyAkcmVzb3VyY2UtPmNsb3NlZCA9IHRydWU7IHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZSgnUHJvYmVDbG9zZUZhaWx1cmUnKTsgfVxcbiAgICAkcmVzb3VyY2UtPmNsb3NlZCA9IHRydWU7XFxuICAgIGlmICgkZmFpbCB8fCAhJGNsb3NlZCkgdGhyb3cgbmV3IFByb2JlQ2xvc2VGYWlsdXJlKCdQcm9iZUNsb3NlRmFpbHVyZScpO1xcbn1cXG5cIlxuICAgIH0sXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVUcmFjZVwiKSxcbiAgICAgIHRleHQ6IFwiZnVuY3Rpb24gcHJvYmVUcmFjZSgpOiBzdHJpbmcgeyByZXR1cm4gaW1wbG9kZSgnLCcsICRHTE9CQUxTWydfX3NlbWFudGlmb2xkX3Rhc2swMzRfdHJhY2UnXSk7IH1cXG5cIlxuICAgIH1cbiAgXVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHJldHVybiBbXG4gICAge3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlRWZmZWN0XCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSA8IFN0YW5kYXJkRXJyb3I7IGVuZFxcblwifSxcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVBY3F1aXJlXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgPCBTdGFuZGFyZEVycm9yOyBlbmRcXG5cIn0sXG4gICAge3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlUmVhZFwiKSwgdGV4dDogXCJjbGFzcyBQcm9iZVJlYWRGYWlsdXJlIDwgU3RhbmRhcmRFcnJvcjsgZW5kXFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUNsb3NlXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIDwgU3RhbmRhcmRFcnJvcjsgZW5kXFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVJlYWRcIikgfHwgb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUNsb3NlXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgPCBTdGFuZGFyZEVycm9yOyBlbmRcXG5cIn0sXG4gICAge1xuICAgICAgd2hlbjogcmVzb3VyY2UsXG4gICAgICB0ZXh0OiBcImNsYXNzIFByb2JlUmVzb3VyY2VcXG4gIGF0dHJfYWNjZXNzb3IgOmhhbmRsZSwgOmNsb3NlZFxcbiAgZGVmIGluaXRpYWxpemUoaGFuZGxlKTsgQGhhbmRsZSA9IGhhbmRsZTsgQGNsb3NlZCA9IGZhbHNlOyBlbmRcXG5lbmRcXG5cIlxuICAgIH0sXG4gICAge3doZW46IGFueSwgdGV4dDogXCIkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlID0gW11cXG5cIn0sXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVFZmZlY3RcIiksXG4gICAgICB0ZXh0OiBcImRlZiBwcm9iZUVmZmVjdChsYWJlbCwgdmFsdWUsIGZhaWxfdmFsdWUpXFxuICAkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlIDw8IFxcXCJlZmZlY3Q6I3tsYWJlbH1cXFwiXFxuICByYWlzZSBQcm9iZU9wZXJhdGlvbkZhaWx1cmUsIFxcXCJQcm9iZU9wZXJhdGlvbkZhaWx1cmVcXFwiIGlmIGZhaWxfdmFsdWVcXG4gIHZhbHVlXFxuZW5kXFxuXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHdoZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQWNxdWlyZVwiKSxcbiAgICAgIHRleHQ6IFwiZGVmIHByb2JlQWNxdWlyZShmYWlsX3ZhbHVlKVxcbiAgJF9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSA8PCBcXFwiYWNxdWlyZVxcXCJcXG4gIHJhaXNlIFByb2JlQWNxdWlyZUZhaWx1cmUsIFxcXCJQcm9iZUFjcXVpcmVGYWlsdXJlXFxcIiBpZiBmYWlsX3ZhbHVlXFxuICBiZWdpbjsgUHJvYmVSZXNvdXJjZS5uZXcoRmlsZS5vcGVuKEVOVi5mZXRjaChcXFwiU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRIXFxcIiksIFxcXCJyXFxcIikpOyByZXNjdWUgUHJvYmVBY3F1aXJlRmFpbHVyZTsgcmFpc2U7IHJlc2N1ZSBTdGFuZGFyZEVycm9yOyByYWlzZSBQcm9iZUFjcXVpcmVGYWlsdXJlLCBcXFwiUHJvYmVBY3F1aXJlRmFpbHVyZVxcXCI7IGVuZFxcbmVuZFxcblwiXG4gICAgfSxcbiAgICB7XG4gICAgICB3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVJlYWRcIiksXG4gICAgICB0ZXh0OiBcImRlZiBwcm9iZVJlYWQocmVzb3VyY2UsIGZhaWxfdmFsdWUpXFxuICByYWlzZSBQcm9iZVJlc291cmNlQ2xvc2VkLCBcXFwiUHJvYmVSZXNvdXJjZUNsb3NlZFxcXCIgaWYgcmVzb3VyY2UuY2xvc2VkXFxuICAkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlIDw8IFxcXCJyZWFkXFxcIlxcbiAgcmFpc2UgUHJvYmVSZWFkRmFpbHVyZSwgXFxcIlByb2JlUmVhZEZhaWx1cmVcXFwiIGlmIGZhaWxfdmFsdWVcXG4gIGJlZ2luOyB2YWx1ZSA9IHJlc291cmNlLmhhbmRsZS5nZXRzOyB2YWx1ZS5uaWw/ID8gbmlsIDogdmFsdWUuY2hvbXA7IHJlc2N1ZSBQcm9iZVJlYWRGYWlsdXJlOyByYWlzZTsgcmVzY3VlIFN0YW5kYXJkRXJyb3I7IHJhaXNlIFByb2JlUmVhZEZhaWx1cmUsIFxcXCJQcm9iZVJlYWRGYWlsdXJlXFxcIjsgZW5kXFxuZW5kXFxuXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIHdoZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQ2xvc2VcIiksXG4gICAgICB0ZXh0OiBcImRlZiBwcm9iZUNsb3NlKHJlc291cmNlLCBmYWlsX3ZhbHVlKVxcbiAgcmFpc2UgUHJvYmVSZXNvdXJjZUNsb3NlZCwgXFxcIlByb2JlUmVzb3VyY2VDbG9zZWRcXFwiIGlmIHJlc291cmNlLmNsb3NlZFxcbiAgJF9fc2VtYW50aWZvbGRfdGFzazAzNF90cmFjZSA8PCBcXFwiY2xvc2VcXFwiXFxuICBiZWdpbjsgcmVzb3VyY2UuaGFuZGxlLmNsb3NlOyByZXNjdWUgU3RhbmRhcmRFcnJvcjsgcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgcmFpc2UgUHJvYmVDbG9zZUZhaWx1cmUsIFxcXCJQcm9iZUNsb3NlRmFpbHVyZVxcXCI7IGVuZFxcbiAgcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZVxcbiAgcmFpc2UgUHJvYmVDbG9zZUZhaWx1cmUsIFxcXCJQcm9iZUNsb3NlRmFpbHVyZVxcXCIgaWYgZmFpbF92YWx1ZVxcbiAgbmlsXFxuZW5kXFxuXCJcbiAgICB9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVRyYWNlXCIpLCB0ZXh0OiBcImRlZiBwcm9iZVRyYWNlOyAkX19zZW1hbnRpZm9sZF90YXNrMDM0X3RyYWNlLmpvaW4oXFxcIixcXFwiKTsgZW5kXFxuXCJ9XG4gIF1cbiAgY29uc3QgZnMgPSAvKiogQHR5cGUge1N1cHBvcnRTZWdtZW50fSAqLyAoe3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQWNxdWlyZVwiKSwgdGV4dDogJ2NvbnN0IF9fc2VtYW50aWZvbGRUYXNrMDM0RnMgPSBwcm9jZXNzLmdldEJ1aWx0aW5Nb2R1bGUoXCJub2RlOmZzXCIpXFxuJ30pXG4gIGNvbnN0IHRyYWNlID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCJcbiAgICA/IHt3aGVuOiBhbnksIHRleHQ6IFwiY29uc3QgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZSA9IFtdXFxuXCJ9XG4gICAgOiB7d2hlbjogYW55LCB0ZXh0OiBcImNvbnN0IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2U6IHN0cmluZ1tdID0gW11cXG5cIn1cbiAgY29uc3QgcmVzb3VyY2VDbGFzcyA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiXG4gICAgPyB7d2hlbjogcmVzb3VyY2UsIHRleHQ6IFwiY2xhc3MgUHJvYmVSZXNvdXJjZSB7IGNvbnN0cnVjdG9yKGhhbmRsZSkgeyB0aGlzLmhhbmRsZSA9IGhhbmRsZTsgdGhpcy5jbG9zZWQgPSBmYWxzZTsgdGhpcy5wb3NpdGlvbiA9IDAgfSB9XFxuXCJ9XG4gICAgOiB7d2hlbjogcmVzb3VyY2UsIHRleHQ6IFwiY2xhc3MgUHJvYmVSZXNvdXJjZSB7IGNsb3NlZCA9IGZhbHNlOyBwb3NpdGlvbiA9IDA7IGNvbnN0cnVjdG9yKHJlYWRvbmx5IGhhbmRsZTogbnVtYmVyKSB7fSB9XFxuXCJ9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiKSByZXR1cm4gW1xuICAgIGZzLFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUVmZmVjdFwiKSwgdGV4dDogXCJjbGFzcyBQcm9iZU9wZXJhdGlvbkZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxcblwifSxcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVBY3F1aXJlXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlQWNxdWlyZUZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxcblwifSxcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVSZWFkXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlUmVhZEZhaWx1cmUgZXh0ZW5kcyBFcnJvciB7fVxcblwifSxcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVDbG9zZVwiKSwgdGV4dDogXCJjbGFzcyBQcm9iZUNsb3NlRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVJlYWRcIikgfHwgb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUNsb3NlXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlUmVzb3VyY2VDbG9zZWQgZXh0ZW5kcyBFcnJvciB7fVxcblwifSxcbiAgICByZXNvdXJjZUNsYXNzLFxuICAgIHRyYWNlLFxuICAgIHtcbiAgICAgIHdoZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlRWZmZWN0XCIpLFxuICAgICAgdGV4dDogJ2Z1bmN0aW9uIHByb2JlRWZmZWN0KGxhYmVsLCB2YWx1ZSwgZmFpbCkgeyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLnB1c2goYGVmZmVjdDoke2xhYmVsfWApOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlT3BlcmF0aW9uRmFpbHVyZShcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiKTsgcmV0dXJuIHZhbHVlIH1cXG4nXG4gICAgfSxcbiAgICB7XG4gICAgICB3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUFjcXVpcmVcIiksXG4gICAgICB0ZXh0OiAnZnVuY3Rpb24gcHJvYmVBY3F1aXJlKGZhaWwpIHsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwiYWNxdWlyZVwiKTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUFjcXVpcmVGYWlsdXJlKFwiUHJvYmVBY3F1aXJlRmFpbHVyZVwiKTsgdHJ5IHsgcmV0dXJuIG5ldyBQcm9iZVJlc291cmNlKF9fc2VtYW50aWZvbGRUYXNrMDM0RnMub3BlblN5bmMocHJvY2Vzcy5lbnYuU0VNQU5USUZPTERfVEFTSzAzNF9QUk9CRV9QQVRILCBcInJcIikpIH0gY2F0Y2ggeyB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZShcIlByb2JlQWNxdWlyZUZhaWx1cmVcIikgfSB9XFxuJ1xuICAgIH0sXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVSZWFkXCIpLFxuICAgICAgdGV4dDogJ2Z1bmN0aW9uIHByb2JlUmVhZChyZXNvdXJjZSwgZmFpbCkgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZChcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcInJlYWRcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZShcIlByb2JlUmVhZEZhaWx1cmVcIik7IHRyeSB7IGNvbnN0IGJ5dGVzID0gW107IGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxKTsgd2hpbGUgKHRydWUpIHsgY29uc3QgY291bnQgPSBfX3NlbWFudGlmb2xkVGFzazAzNEZzLnJlYWRTeW5jKHJlc291cmNlLmhhbmRsZSwgYnVmZmVyLCAwLCAxLCByZXNvdXJjZS5wb3NpdGlvbisrKTsgaWYgKGNvdW50ID09PSAwKSByZXR1cm4gYnl0ZXMubGVuZ3RoID09PSAwID8gbnVsbCA6IEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZyhcInV0ZjhcIik7IGlmIChidWZmZXJbMF0gPT09IDEwKSByZXR1cm4gQnVmZmVyLmZyb20oYnl0ZXMpLnRvU3RyaW5nKFwidXRmOFwiKS5yZXBsYWNlKC9cXFxcciQvdSwgXCJcIik7IGJ5dGVzLnB1c2goYnVmZmVyWzBdKSB9IH0gY2F0Y2ggeyB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZShcIlByb2JlUmVhZEZhaWx1cmVcIikgfSB9XFxuJ1xuICAgIH0sXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVDbG9zZVwiKSxcbiAgICAgIHRleHQ6ICdmdW5jdGlvbiBwcm9iZUNsb3NlKHJlc291cmNlLCBmYWlsKSB7IGlmIChyZXNvdXJjZS5jbG9zZWQpIHRocm93IG5ldyBQcm9iZVJlc291cmNlQ2xvc2VkKFwiUHJvYmVSZXNvdXJjZUNsb3NlZFwiKTsgX19zZW1hbnRpZm9sZFRhc2swMzRUcmFjZS5wdXNoKFwiY2xvc2VcIik7IHRyeSB7IF9fc2VtYW50aWZvbGRUYXNrMDM0RnMuY2xvc2VTeW5jKHJlc291cmNlLmhhbmRsZSkgfSBjYXRjaCB7IHJlc291cmNlLmNsb3NlZCA9IHRydWU7IHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZShcIlByb2JlQ2xvc2VGYWlsdXJlXCIpIH0gcmVzb3VyY2UuY2xvc2VkID0gdHJ1ZTsgaWYgKGZhaWwpIHRocm93IG5ldyBQcm9iZUNsb3NlRmFpbHVyZShcIlByb2JlQ2xvc2VGYWlsdXJlXCIpIH1cXG4nXG4gICAgfSxcbiAgICB7d2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVUcmFjZVwiKSwgdGV4dDogJ2Z1bmN0aW9uIHByb2JlVHJhY2UoKSB7IHJldHVybiBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLmpvaW4oXCIsXCIpIH1cXG4nfVxuICBdXG4gIHJldHVybiBbXG4gICAgZnMsXG4gICAge3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlRWZmZWN0XCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlT3BlcmF0aW9uRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUFjcXVpcmVcIiksIHRleHQ6IFwiY2xhc3MgUHJvYmVBY3F1aXJlRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZVJlYWRcIiksIHRleHQ6IFwiY2xhc3MgUHJvYmVSZWFkRmFpbHVyZSBleHRlbmRzIEVycm9yIHt9XFxuXCJ9LFxuICAgIHt3aGVuOiAob3BlcmF0aW9ucykgPT4gb3BlcmF0aW9ucy5oYXMoXCJwcm9iZUNsb3NlXCIpLCB0ZXh0OiBcImNsYXNzIFByb2JlQ2xvc2VGYWlsdXJlIGV4dGVuZHMgRXJyb3Ige31cXG5cIn0sXG4gICAge3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlUmVhZFwiKSB8fCBvcGVyYXRpb25zLmhhcyhcInByb2JlQ2xvc2VcIiksIHRleHQ6IFwiY2xhc3MgUHJvYmVSZXNvdXJjZUNsb3NlZCBleHRlbmRzIEVycm9yIHt9XFxuXCJ9LFxuICAgIHJlc291cmNlQ2xhc3MsXG4gICAgdHJhY2UsXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVFZmZlY3RcIiksXG4gICAgICB0ZXh0OiAnZnVuY3Rpb24gcHJvYmVFZmZlY3QobGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciwgZmFpbDogYm9vbGVhbik6IG51bWJlciB7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChgZWZmZWN0OiR7bGFiZWx9YCk7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVPcGVyYXRpb25GYWlsdXJlKFwiUHJvYmVPcGVyYXRpb25GYWlsdXJlXCIpOyByZXR1cm4gdmFsdWUgfVxcbidcbiAgICB9LFxuICAgIHtcbiAgICAgIHdoZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQWNxdWlyZVwiKSxcbiAgICAgIHRleHQ6ICdmdW5jdGlvbiBwcm9iZUFjcXVpcmUoZmFpbDogYm9vbGVhbik6IFByb2JlUmVzb3VyY2UgeyBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLnB1c2goXCJhY3F1aXJlXCIpOyBpZiAoZmFpbCkgdGhyb3cgbmV3IFByb2JlQWNxdWlyZUZhaWx1cmUoXCJQcm9iZUFjcXVpcmVGYWlsdXJlXCIpOyB0cnkgeyByZXR1cm4gbmV3IFByb2JlUmVzb3VyY2UoX19zZW1hbnRpZm9sZFRhc2swMzRGcy5vcGVuU3luYyhwcm9jZXNzLmVudi5TRU1BTlRJRk9MRF9UQVNLMDM0X1BST0JFX1BBVEggYXMgc3RyaW5nLCBcInJcIikpIH0gY2F0Y2ggeyB0aHJvdyBuZXcgUHJvYmVBY3F1aXJlRmFpbHVyZShcIlByb2JlQWNxdWlyZUZhaWx1cmVcIikgfSB9XFxuJ1xuICAgIH0sXG4gICAge1xuICAgICAgd2hlbjogKG9wZXJhdGlvbnMpID0+IG9wZXJhdGlvbnMuaGFzKFwicHJvYmVSZWFkXCIpLFxuICAgICAgdGV4dDogJ2Z1bmN0aW9uIHByb2JlUmVhZChyZXNvdXJjZTogUHJvYmVSZXNvdXJjZSwgZmFpbDogYm9vbGVhbik6IHN0cmluZyB8IG51bGwgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZChcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcInJlYWRcIik7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVSZWFkRmFpbHVyZShcIlByb2JlUmVhZEZhaWx1cmVcIik7IHRyeSB7IGNvbnN0IGJ5dGVzOiBudW1iZXJbXSA9IFtdOyBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoMSk7IHdoaWxlICh0cnVlKSB7IGNvbnN0IGNvdW50ID0gX19zZW1hbnRpZm9sZFRhc2swMzRGcy5yZWFkU3luYyhyZXNvdXJjZS5oYW5kbGUsIGJ1ZmZlciwgMCwgMSwgcmVzb3VyY2UucG9zaXRpb24rKyk7IGlmIChjb3VudCA9PT0gMCkgcmV0dXJuIGJ5dGVzLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBCdWZmZXIuZnJvbShieXRlcykudG9TdHJpbmcoXCJ1dGY4XCIpOyBpZiAoYnVmZmVyWzBdID09PSAxMCkgcmV0dXJuIEJ1ZmZlci5mcm9tKGJ5dGVzKS50b1N0cmluZyhcInV0ZjhcIikucmVwbGFjZSgvXFxcXHIkL3UsIFwiXCIpOyBieXRlcy5wdXNoKGJ1ZmZlclswXSkgfSB9IGNhdGNoIHsgdGhyb3cgbmV3IFByb2JlUmVhZEZhaWx1cmUoXCJQcm9iZVJlYWRGYWlsdXJlXCIpIH0gfVxcbidcbiAgICB9LFxuICAgIHtcbiAgICAgIHdoZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlQ2xvc2VcIiksXG4gICAgICB0ZXh0OiAnZnVuY3Rpb24gcHJvYmVDbG9zZShyZXNvdXJjZTogUHJvYmVSZXNvdXJjZSwgZmFpbDogYm9vbGVhbik6IHZvaWQgeyBpZiAocmVzb3VyY2UuY2xvc2VkKSB0aHJvdyBuZXcgUHJvYmVSZXNvdXJjZUNsb3NlZChcIlByb2JlUmVzb3VyY2VDbG9zZWRcIik7IF9fc2VtYW50aWZvbGRUYXNrMDM0VHJhY2UucHVzaChcImNsb3NlXCIpOyB0cnkgeyBfX3NlbWFudGlmb2xkVGFzazAzNEZzLmNsb3NlU3luYyhyZXNvdXJjZS5oYW5kbGUpIH0gY2F0Y2ggeyByZXNvdXJjZS5jbG9zZWQgPSB0cnVlOyB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoXCJQcm9iZUNsb3NlRmFpbHVyZVwiKSB9IHJlc291cmNlLmNsb3NlZCA9IHRydWU7IGlmIChmYWlsKSB0aHJvdyBuZXcgUHJvYmVDbG9zZUZhaWx1cmUoXCJQcm9iZUNsb3NlRmFpbHVyZVwiKSB9XFxuJ1xuICAgIH0sXG4gICAge3doZW46IChvcGVyYXRpb25zKSA9PiBvcGVyYXRpb25zLmhhcyhcInByb2JlVHJhY2VcIiksIHRleHQ6ICdmdW5jdGlvbiBwcm9iZVRyYWNlKCk6IHN0cmluZyB7IHJldHVybiBfX3NlbWFudGlmb2xkVGFzazAzNFRyYWNlLmpvaW4oXCIsXCIpIH1cXG4nfVxuICBdXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb21wbGV0ZSB0cmVlLXNoYWtlbiBzdGRsaWIgcHJvdmlkZXIgYXJ0aWZhY3QgY29udGVudCBmb3Igb25lIGFkb3B0ZWQgdGFyZ2V0LlxuICogQHBhcmFtIHtTdGRsaWJQcm92aWRlclRhcmdldH0gbGFuZ3VhZ2UgLSBBZG9wdGVkIHRhcmdldCBob3N0IHByb3ZpZGVyLlxuICogQHBhcmFtIHtyZWFkb25seSBzdHJpbmdbXX0gb3BlcmF0aW9ucyAtIFVzZWQgY2Fub25pY2FsIG9wZXJhdGlvbnMgaW4gY29udHJhY3Qgb3JkZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW21vZHVsZV0gLSBRdWFsaWZpZWQgY2Fub25pY2FsIG1vZHVsZSBpZGVudGl0eTsgb21pdHRlZCBmb3IgdGhlIFRhc2sgMDM0IHByb2JlLlxuICogQHJldHVybnMge3N0cmluZ30gQ29tcGxldGUgcHJvdmlkZXIgc291cmNlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0ZGxpYlByb3ZpZGVyQ29udGVudChsYW5ndWFnZSwgb3BlcmF0aW9ucywgbW9kdWxlKSB7XG4gIGlmIChtb2R1bGUgIT09IHVuZGVmaW5lZCAmJiBtb2R1bGUgIT0gXCJzZW1hbnRpZm9sZC50YXNrMDM0LnJlc291cmNlLXByb2JlXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgIT0gXCJwaHBcIikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYENhbm9uaWNhbCBtb2R1bGUgJyR7bW9kdWxlfScgaGFzIG5vICcke2xhbmd1YWdlfScgcHJvdmlkZXIgY29udGVudC5gKVxuICAgIHJldHVybiBnZW5lcmF0ZVRhc2swMzdQaHBQcm92aWRlckNvbnRlbnQobW9kdWxlLCBvcGVyYXRpb25zKVxuICB9XG4gIGNvbnN0IHVzZWQgPSBuZXcgU2V0KG9wZXJhdGlvbnMpXG5cbiAgaWYgKHVzZWQuc2l6ZSA9PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJBIHN0ZGxpYiBwcm92aWRlciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgdXNlZCBvcGVyYXRpb24uXCIpXG4gIGNvbnN0IHNlZ21lbnRzID0gc3VwcG9ydFNlZ21lbnRzKGxhbmd1YWdlKVxuICBjb25zdCBzdGFydCA9IGxhbmd1YWdlID09IFwicnVieVwiID8gXCIjIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydFxcblwiIDogXCIvKiBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQgKi9cXG5cIlxuICBjb25zdCBlbmQgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiIyBzZW1hbnRpZm9sZC10YXNrMDM0LXN1cHBvcnQtZW5kXFxuXFxuXCIgOiBcIi8qIHNlbWFudGlmb2xkLXRhc2swMzQtc3VwcG9ydC1lbmQgKi9cXG5cXG5cIlxuICBjb25zdCBzdXBwb3J0ID0gc3RhcnQgK1xuICAgIHNlZ21lbnRzLmZpbHRlcigoe3doZW59KSA9PiB3aGVuKHVzZWQpKS5tYXAoKHt0ZXh0fSkgPT4gdGV4dCkuam9pbihcIlwiKSArXG4gICAgZW5kXG4gIGNvbnN0IGhlYWRlciA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIjw/cGhwXFxuZGVjbGFyZShzdHJpY3RfdHlwZXM9MSk7XFxuXCIgOiBcIlwiXG4gIGNvbnN0IGNsYXNzRXhwb3J0cyA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID9cbiAgICBgZXhwb3J0IHske1tcbiAgICAgIFtcIlByb2JlT3BlcmF0aW9uRmFpbHVyZVwiLCB1c2VkLmhhcyhcInByb2JlRWZmZWN0XCIpXSxcbiAgICAgIFtcIlByb2JlQWNxdWlyZUZhaWx1cmVcIiwgdXNlZC5oYXMoXCJwcm9iZUFjcXVpcmVcIildLFxuICAgICAgW1wiUHJvYmVSZWFkRmFpbHVyZVwiLCB1c2VkLmhhcyhcInByb2JlUmVhZFwiKV0sXG4gICAgICBbXCJQcm9iZUNsb3NlRmFpbHVyZVwiLCB1c2VkLmhhcyhcInByb2JlQ2xvc2VcIildLFxuICAgICAgW1wiUHJvYmVSZXNvdXJjZUNsb3NlZFwiLCB1c2VkLmhhcyhcInByb2JlUmVhZFwiKSB8fCB1c2VkLmhhcyhcInByb2JlQ2xvc2VcIildLFxuICAgICAgW1wiUHJvYmVSZXNvdXJjZVwiLCB1c2VkLmhhcyhcInByb2JlQWNxdWlyZVwiKSB8fCB1c2VkLmhhcyhcInByb2JlUmVhZFwiKSB8fCB1c2VkLmhhcyhcInByb2JlQ2xvc2VcIildXG4gICAgXS5maWx0ZXIoKFssIHByZXNlbnRdKSA9PiBwcmVzZW50KS5tYXAoKFtuYW1lXSkgPT4gbmFtZSkuam9pbihcIiwgXCIpfX1cXG5gIDogXCJcIlxuICBjb25zdCBzaGltcyA9IHByb3ZpZGVyU2hpbXMobGFuZ3VhZ2UsIG9wZXJhdGlvbnMpXG5cbiAgcmV0dXJuIGhlYWRlciArIHN1cHBvcnQgKyBjbGFzc0V4cG9ydHMgKyAoc2hpbXMubGVuZ3RoID4gMCA/IHNoaW1zLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiIDogXCJcIilcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ /** Exact target-only support for Unicode-scalar string equality. */
2
+ export declare const swiftRuntime = "func semantifold_string_equal(_ left: String, _ right: String) -> Bool {\n return left.unicodeScalars.elementsEqual(right.unicodeScalars)\n}\n\nfunc semantifold_string_not_equal(_ left: String, _ right: String) -> Bool {\n return !left.unicodeScalars.elementsEqual(right.unicodeScalars)\n}\n\nfunc semantifold_keep_mutable<T>(_ value: inout T) {\n}\n";
3
+ //# sourceMappingURL=swift-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift-runtime.d.ts","sourceRoot":"","sources":["../../../src/backends/swift-runtime.js"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,eAAO,MAAM,YAAY,qWAUxB,CAAA"}
@@ -0,0 +1,14 @@
1
+ // @ts-check
2
+ /** Exact target-only support for Unicode-scalar string equality. */
3
+ export const swiftRuntime = `func semantifold_string_equal(_ left: String, _ right: String) -> Bool {
4
+ return left.unicodeScalars.elementsEqual(right.unicodeScalars)
5
+ }
6
+
7
+ func semantifold_string_not_equal(_ left: String, _ right: String) -> Bool {
8
+ return !left.unicodeScalars.elementsEqual(right.unicodeScalars)
9
+ }
10
+
11
+ func semantifold_keep_mutable<T>(_ value: inout T) {
12
+ }
13
+ `;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpZnQtcnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kcy9zd2lmdC1ydW50aW1lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHOzs7Ozs7Ozs7O0NBVTNCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEV4YWN0IHRhcmdldC1vbmx5IHN1cHBvcnQgZm9yIFVuaWNvZGUtc2NhbGFyIHN0cmluZyBlcXVhbGl0eS4gKi9cbmV4cG9ydCBjb25zdCBzd2lmdFJ1bnRpbWUgPSBgZnVuYyBzZW1hbnRpZm9sZF9zdHJpbmdfZXF1YWwoXyBsZWZ0OiBTdHJpbmcsIF8gcmlnaHQ6IFN0cmluZykgLT4gQm9vbCB7XG4gIHJldHVybiBsZWZ0LnVuaWNvZGVTY2FsYXJzLmVsZW1lbnRzRXF1YWwocmlnaHQudW5pY29kZVNjYWxhcnMpXG59XG5cbmZ1bmMgc2VtYW50aWZvbGRfc3RyaW5nX25vdF9lcXVhbChfIGxlZnQ6IFN0cmluZywgXyByaWdodDogU3RyaW5nKSAtPiBCb29sIHtcbiAgcmV0dXJuICFsZWZ0LnVuaWNvZGVTY2FsYXJzLmVsZW1lbnRzRXF1YWwocmlnaHQudW5pY29kZVNjYWxhcnMpXG59XG5cbmZ1bmMgc2VtYW50aWZvbGRfa2VlcF9tdXRhYmxlPFQ+KF8gdmFsdWU6IGlub3V0IFQpIHtcbn1cbmBcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Emits one deterministic dependency-free Swift program through the source-aware writer.
3
+ * @param {import("../semantic/types.js").SemanticModule} module - Validated semantic module.
4
+ * @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
5
+ * @returns {void}
6
+ */
7
+ export declare function generateSwift(module: import("../semantic/types.js").SemanticModule, writer: import("./writer.js").SourceWriter): void;
8
+ //# sourceMappingURL=swift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../../src/backends/swift.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAJzB,OAAO,sBAAsB,EAAE,cAIN,EAAE,MAAM,EAHjC,OAAO,aAAa,EAAE,YAGW,GAF/B,IAAI,CAiChB"}
@@ -0,0 +1,127 @@
1
+ // @ts-check
2
+ import { emitExpression } from "./shared.js";
3
+ import { emitScalarType } from "./scalars.js";
4
+ import { swiftRuntime } from "./swift-runtime.js";
5
+ /**
6
+ * Emits one deterministic dependency-free Swift program through the source-aware writer.
7
+ * @param {import("../semantic/types.js").SemanticModule} module - Validated semantic module.
8
+ * @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
9
+ * @returns {void}
10
+ */
11
+ export function generateSwift(module, writer) {
12
+ writer.synthetic(swiftRuntime, "Exact Swift Unicode-scalar string equality support", [module], [""]);
13
+ module.functions.forEach((declaration, functionIndex) => {
14
+ const path = `/functions/${functionIndex}`;
15
+ writer.synthetic("\n", "declaration separator", [declaration], [path]);
16
+ writer.mapped("func", { mappingKind: "anchor", node: declaration, path });
17
+ writer.synthetic(" ", "declaration spacing", [declaration], [path]);
18
+ writer.mapped(declaration.name, { mappingKind: "exact", node: declaration, path, role: "name" });
19
+ writer.synthetic("(", "function parameter scaffold", [declaration], [path]);
20
+ declaration.parameters.forEach((parameter, parameterIndex) => {
21
+ const parameterPath = `${path}/parameters/${parameterIndex}`;
22
+ if (parameterIndex)
23
+ writer.synthetic(", ", "parameter separator", [parameter], [parameterPath]);
24
+ writer.synthetic("_ ", "unlabeled Swift parameter scaffold", [parameter], [parameterPath]);
25
+ writer.mapped(parameter.name, { mappingKind: "exact", node: parameter, path: parameterPath, role: "name" });
26
+ writer.synthetic(": ", "parameter annotation scaffold", [parameter], [parameterPath]);
27
+ writer.mapped(emitScalarType("swift", parameter.type), { mappingKind: "exact", node: parameter.type,
28
+ path: `${parameterPath}/type`, role: "type" });
29
+ });
30
+ writer.synthetic(") -> ", "function return scaffold", [declaration], [path]);
31
+ writer.mapped(emitScalarType("swift", declaration.returnType), { mappingKind: "exact", node: declaration.returnType,
32
+ path: `${path}/returnType`, role: "type" });
33
+ writer.synthetic(" {\n", "Swift function body scaffold", [declaration], [path]);
34
+ emitBlock(writer, declaration.body, " ", `${path}/body`);
35
+ writer.synthetic("}\n", "Swift function body scaffold", [declaration], [path]);
36
+ });
37
+ writer.synthetic("\n", "Swift top-level entry scaffold", [module.entryPoint], ["/entryPoint"]);
38
+ emitBlock(writer, module.entryPoint.body, "", "/entryPoint/body");
39
+ }
40
+ /**
41
+ * Emits one ordered Swift block.
42
+ * @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
43
+ * @param {import("../semantic/types.js").Block} block - Semantic block.
44
+ * @param {string} indent - Current indentation.
45
+ * @param {string} path - Exact block path.
46
+ * @returns {void}
47
+ */
48
+ function emitBlock(writer, block, indent, path) {
49
+ block.statements.forEach((statement, index) => emitStatement(writer, statement, indent, `${path}/statements/${index}`));
50
+ }
51
+ /**
52
+ * Emits one validated Swift statement.
53
+ * @param {import("./writer.js").SourceWriter} writer - Source-aware writer.
54
+ * @param {import("../semantic/types.js").Statement} statement - Semantic statement.
55
+ * @param {string} indent - Current indentation.
56
+ * @param {string} path - Statement occurrence path.
57
+ * @returns {void}
58
+ */
59
+ function emitStatement(writer, statement, indent, path) {
60
+ writer.synthetic(indent, "indentation", [statement], [path]);
61
+ if (statement.kind == "LocalDeclaration") {
62
+ writer.mapped(statement.mutable ? "var" : "let", { mappingKind: "anchor", node: statement, path });
63
+ writer.synthetic(" ", "declaration spacing", [statement], [path]);
64
+ writer.mapped(statement.name, { mappingKind: "exact", node: statement, path, role: "name" });
65
+ writer.synthetic(": ", "local annotation scaffold", [statement], [path]);
66
+ writer.mapped(emitScalarType("swift", statement.type), { mappingKind: "exact", node: statement.type,
67
+ path: `${path}/type`, role: "type" });
68
+ writer.synthetic(" ", "assignment spacing", [statement], [path]);
69
+ writer.mapped("=", { mappingKind: "exact", node: statement, path, role: "operator" });
70
+ writer.synthetic(" ", "assignment spacing", [statement], [path]);
71
+ emitExpression(writer, statement.initializer, `${path}/initializer`, "swift", identity);
72
+ writer.synthetic("\n", "line break", [statement], [path]);
73
+ if (statement.mutable) {
74
+ writer.synthetic(`${indent}semantifold_keep_mutable(&${statement.name})\n`, "Swift mutable-local warning marker", [statement], [path]);
75
+ }
76
+ return;
77
+ }
78
+ if (statement.kind == "AssignmentStatement") {
79
+ writer.mapped(statement.target.name, { mappingKind: "exact", node: statement.target, path: `${path}/target`, role: "name" });
80
+ writer.synthetic(" ", "assignment spacing", [statement], [path]);
81
+ writer.mapped("=", { mappingKind: "exact", node: statement, path, role: "operator" });
82
+ writer.synthetic(" ", "assignment spacing", [statement], [path]);
83
+ emitExpression(writer, statement.expression, `${path}/expression`, "swift", identity);
84
+ writer.synthetic("\n", "line break", [statement], [path]);
85
+ return;
86
+ }
87
+ if (statement.kind == "ExpressionStatement")
88
+ throw new TypeError("Swift Task 005 expression statement reached emission.");
89
+ if (statement.kind == "ReturnStatement") {
90
+ if (!statement.expression)
91
+ throw new TypeError("Swift bare return reached emission.");
92
+ writer.mapped("return", { mappingKind: "anchor", node: statement, path });
93
+ writer.synthetic(" ", "return spacing", [statement], [path]);
94
+ emitExpression(writer, statement.expression, `${path}/expression`, "swift", identity);
95
+ writer.synthetic("\n", "line break", [statement], [path]);
96
+ return;
97
+ }
98
+ if (statement.kind == "PrintStatement") {
99
+ writer.synthetic("print(", "Swift print plumbing", [statement], [path]);
100
+ emitExpression(writer, statement.expression, `${path}/expression`, "swift", identity);
101
+ writer.synthetic(")\n", "Swift print plumbing", [statement], [path]);
102
+ return;
103
+ }
104
+ if (statement.kind != "IfStatement")
105
+ throw new TypeError("Unsupported Swift statement reached emission.");
106
+ writer.mapped("if", { mappingKind: "anchor", node: statement, path });
107
+ writer.synthetic(" ", "conditional spacing", [statement], [path]);
108
+ emitExpression(writer, statement.condition, `${path}/condition`, "swift", identity);
109
+ writer.synthetic(" {\n", "Swift conditional scaffold", [statement.consequent], [`${path}/consequent`]);
110
+ emitBlock(writer, statement.consequent, `${indent} `, `${path}/consequent`);
111
+ writer.synthetic(`${indent}}`, "Swift conditional scaffold", [statement.consequent], [`${path}/consequent`]);
112
+ if (statement.alternate) {
113
+ writer.synthetic(" else {\n", "Swift alternate scaffold", [statement.alternate], [`${path}/alternate`]);
114
+ emitBlock(writer, statement.alternate, `${indent} `, `${path}/alternate`);
115
+ writer.synthetic(`${indent}}`, "Swift alternate scaffold", [statement.alternate], [`${path}/alternate`]);
116
+ }
117
+ writer.synthetic("\n", "line break", [statement], [path]);
118
+ }
119
+ /**
120
+ * Returns an unchanged Swift identifier.
121
+ * @param {string} name - Validated identifier.
122
+ * @returns {string} Unchanged identifier.
123
+ */
124
+ function identity(name) {
125
+ return name;
126
+ }
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpZnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvc3dpZnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxhQUFhLENBQUE7QUFDMUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFFL0M7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNO0lBQzFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLG9EQUFvRCxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRXBHLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxFQUFFO1FBQ3RELE1BQU0sSUFBSSxHQUFHLGNBQWMsYUFBYSxFQUFFLENBQUE7UUFFMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUN2RSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksRUFB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LEVBQUUsR0FBRyxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQTtJQUN0RyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUE7SUFDNUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLDRCQUE0QixFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUE7SUFDNUcsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQTtRQUN2RyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUE7UUFDMUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLDBCQUEwQixFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUE7SUFDMUcsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUMzRCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsUUFBUSxDQUFDLElBQUk7SUFDcEIsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZW1pdEV4cHJlc3Npb259IGZyb20gXCIuL3NoYXJlZC5qc1wiXG5pbXBvcnQge2VtaXRTY2FsYXJUeXBlfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcbmltcG9ydCB7c3dpZnRSdW50aW1lfSBmcm9tIFwiLi9zd2lmdC1ydW50aW1lLmpzXCJcblxuLyoqXG4gKiBFbWl0cyBvbmUgZGV0ZXJtaW5pc3RpYyBkZXBlbmRlbmN5LWZyZWUgU3dpZnQgcHJvZ3JhbSB0aHJvdWdoIHRoZSBzb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN3aWZ0KG1vZHVsZSwgd3JpdGVyKSB7XG4gIHdyaXRlci5zeW50aGV0aWMoc3dpZnRSdW50aW1lLCBcIkV4YWN0IFN3aWZ0IFVuaWNvZGUtc2NhbGFyIHN0cmluZyBlcXVhbGl0eSBzdXBwb3J0XCIsIFttb2R1bGVdLCBbXCJcIl0pXG5cbiAgbW9kdWxlLmZ1bmN0aW9ucy5mb3JFYWNoKChkZWNsYXJhdGlvbiwgZnVuY3Rpb25JbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhdGggPSBgL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uSW5kZXh9YFxuXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImRlY2xhcmF0aW9uIHNlcGFyYXRvclwiLCBbZGVjbGFyYXRpb25dLCBbcGF0aF0pXG4gICAgd3JpdGVyLm1hcHBlZChcImZ1bmNcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJkZWNsYXJhdGlvbiBzcGFjaW5nXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGRlY2xhcmF0aW9uLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBkZWNsYXJhdGlvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIoXCIsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgICBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtZXRlciwgcGFyYW1ldGVySW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlclBhdGggPSBgJHtwYXRofS9wYXJhbWV0ZXJzLyR7cGFyYW1ldGVySW5kZXh9YFxuXG4gICAgICBpZiAocGFyYW1ldGVySW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcInBhcmFtZXRlciBzZXBhcmF0b3JcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCJfIFwiLCBcInVubGFiZWxlZCBTd2lmdCBwYXJhbWV0ZXIgc2NhZmZvbGRcIiwgW3BhcmFtZXRlcl0sIFtwYXJhbWV0ZXJQYXRoXSlcbiAgICAgIHdyaXRlci5tYXBwZWQocGFyYW1ldGVyLm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBwYXJhbWV0ZXIsIHBhdGg6IHBhcmFtZXRlclBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCI6IFwiLCBcInBhcmFtZXRlciBhbm5vdGF0aW9uIHNjYWZmb2xkXCIsIFtwYXJhbWV0ZXJdLCBbcGFyYW1ldGVyUGF0aF0pXG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRTY2FsYXJUeXBlKFwic3dpZnRcIiwgcGFyYW1ldGVyLnR5cGUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogcGFyYW1ldGVyLnR5cGUsXG4gICAgICAgIHBhdGg6IGAke3BhcmFtZXRlclBhdGh9L3R5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKSAtPiBcIiwgXCJmdW5jdGlvbiByZXR1cm4gc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJzd2lmdFwiLCBkZWNsYXJhdGlvbi5yZXR1cm5UeXBlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGRlY2xhcmF0aW9uLnJldHVyblR5cGUsXG4gICAgICBwYXRoOiBgJHtwYXRofS9yZXR1cm5UeXBlYCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcIlN3aWZ0IGZ1bmN0aW9uIGJvZHkgc2NhZmZvbGRcIiwgW2RlY2xhcmF0aW9uXSwgW3BhdGhdKVxuICAgIGVtaXRCbG9jayh3cml0ZXIsIGRlY2xhcmF0aW9uLmJvZHksIFwiICBcIiwgYCR7cGF0aH0vYm9keWApXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIn1cXG5cIiwgXCJTd2lmdCBmdW5jdGlvbiBib2R5IHNjYWZmb2xkXCIsIFtkZWNsYXJhdGlvbl0sIFtwYXRoXSlcbiAgfSlcblxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwiU3dpZnQgdG9wLWxldmVsIGVudHJ5IHNjYWZmb2xkXCIsIFttb2R1bGUuZW50cnlQb2ludF0sIFtcIi9lbnRyeVBvaW50XCJdKVxuICBlbWl0QmxvY2sod3JpdGVyLCBtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBcIlwiLCBcIi9lbnRyeVBvaW50L2JvZHlcIilcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgb3JkZXJlZCBTd2lmdCBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBibG9jayBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRCbG9jayh3cml0ZXIsIGJsb2NrLCBpbmRlbnQsIHBhdGgpIHtcbiAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKChzdGF0ZW1lbnQsIGluZGV4KSA9PiBlbWl0U3RhdGVtZW50KHdyaXRlciwgc3RhdGVtZW50LCBpbmRlbnQsIGAke3BhdGh9L3N0YXRlbWVudHMvJHtpbmRleH1gKSlcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgdmFsaWRhdGVkIFN3aWZ0IHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnR9IHN0YXRlbWVudCAtIFNlbWFudGljIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgLSBDdXJyZW50IGluZGVudGF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBTdGF0ZW1lbnQgb2NjdXJyZW5jZSBwYXRoLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGVtaXRTdGF0ZW1lbnQod3JpdGVyLCBzdGF0ZW1lbnQsIGluZGVudCwgcGF0aCkge1xuICB3cml0ZXIuc3ludGhldGljKGluZGVudCwgXCJpbmRlbnRhdGlvblwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5tdXRhYmxlID8gXCJ2YXJcIiA6IFwibGV0XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRofSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcImRlY2xhcmF0aW9uIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKHN0YXRlbWVudC5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIjogXCIsIFwibG9jYWwgYW5ub3RhdGlvbiBzY2FmZm9sZFwiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoZW1pdFNjYWxhclR5cGUoXCJzd2lmdFwiLCBzdGF0ZW1lbnQudHlwZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudHlwZSxcbiAgICAgIHBhdGg6IGAke3BhdGh9L3R5cGVgLCByb2xlOiBcInR5cGVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIsIGAke3BhdGh9L2luaXRpYWxpemVyYCwgXCJzd2lmdFwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIGlmIChzdGF0ZW1lbnQubXV0YWJsZSkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9c2VtYW50aWZvbGRfa2VlcF9tdXRhYmxlKCYke3N0YXRlbWVudC5uYW1lfSlcXG5gLCBcIlN3aWZ0IG11dGFibGUtbG9jYWwgd2FybmluZyBtYXJrZXJcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChzdGF0ZW1lbnQudGFyZ2V0Lm5hbWUsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBzdGF0ZW1lbnQudGFyZ2V0LCBwYXRoOiBgJHtwYXRofS90YXJnZXRgLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJhc3NpZ25tZW50IHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiPVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogc3RhdGVtZW50LCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiYXNzaWdubWVudCBzcGFjaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBzdGF0ZW1lbnQuZXhwcmVzc2lvbiwgYCR7cGF0aH0vZXhwcmVzc2lvbmAsIFwic3dpZnRcIiwgaWRlbnRpdHkpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIlxcblwiLCBcImxpbmUgYnJlYWtcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTd2lmdCBUYXNrIDAwNSBleHByZXNzaW9uIHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGlmICghc3RhdGVtZW50LmV4cHJlc3Npb24pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTd2lmdCBiYXJlIHJldHVybiByZWFjaGVkIGVtaXNzaW9uLlwiKVxuICAgIHdyaXRlci5tYXBwZWQoXCJyZXR1cm5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBzdGF0ZW1lbnQsIHBhdGh9KVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwicmV0dXJuIHNwYWNpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJzd2lmdFwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwicHJpbnQoXCIsIFwiU3dpZnQgcHJpbnQgcGx1bWJpbmdcIiwgW3N0YXRlbWVudF0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5leHByZXNzaW9uLCBgJHtwYXRofS9leHByZXNzaW9uYCwgXCJzd2lmdFwiLCBpZGVudGl0eSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKVxcblwiLCBcIlN3aWZ0IHByaW50IHBsdW1iaW5nXCIsIFtzdGF0ZW1lbnRdLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHN0YXRlbWVudC5raW5kICE9IFwiSWZTdGF0ZW1lbnRcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIFN3aWZ0IHN0YXRlbWVudCByZWFjaGVkIGVtaXNzaW9uLlwiKVxuXG4gIHdyaXRlci5tYXBwZWQoXCJpZlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHN0YXRlbWVudCwgcGF0aH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwiY29uZGl0aW9uYWwgc3BhY2luZ1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIHN0YXRlbWVudC5jb25kaXRpb24sIGAke3BhdGh9L2NvbmRpdGlvbmAsIFwic3dpZnRcIiwgaWRlbnRpdHkpXG4gIHdyaXRlci5zeW50aGV0aWMoXCIge1xcblwiLCBcIlN3aWZ0IGNvbmRpdGlvbmFsIHNjYWZmb2xkXCIsIFtzdGF0ZW1lbnQuY29uc2VxdWVudF0sIFtgJHtwYXRofS9jb25zZXF1ZW50YF0pXG4gIGVtaXRCbG9jayh3cml0ZXIsIHN0YXRlbWVudC5jb25zZXF1ZW50LCBgJHtpbmRlbnR9ICBgLCBgJHtwYXRofS9jb25zZXF1ZW50YClcbiAgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRlbnR9fWAsIFwiU3dpZnQgY29uZGl0aW9uYWwgc2NhZmZvbGRcIiwgW3N0YXRlbWVudC5jb25zZXF1ZW50XSwgW2Ake3BhdGh9L2NvbnNlcXVlbnRgXSlcbiAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHtcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIGVsc2Uge1xcblwiLCBcIlN3aWZ0IGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmFsdGVybmF0ZV0sIFtgJHtwYXRofS9hbHRlcm5hdGVgXSlcbiAgICBlbWl0QmxvY2sod3JpdGVyLCBzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBgJHtpbmRlbnR9ICBgLCBgJHtwYXRofS9hbHRlcm5hdGVgKVxuICAgIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZW50fX1gLCBcIlN3aWZ0IGFsdGVybmF0ZSBzY2FmZm9sZFwiLCBbc3RhdGVtZW50LmFsdGVybmF0ZV0sIFtgJHtwYXRofS9hbHRlcm5hdGVgXSlcbiAgfVxuICB3cml0ZXIuc3ludGhldGljKFwiXFxuXCIsIFwibGluZSBicmVha1wiLCBbc3RhdGVtZW50XSwgW3BhdGhdKVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gdW5jaGFuZ2VkIFN3aWZ0IGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFZhbGlkYXRlZCBpZGVudGlmaWVyLlxuICogQHJldHVybnMge3N0cmluZ30gVW5jaGFuZ2VkIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KG5hbWUpIHtcbiAgcmV0dXJuIG5hbWVcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/backends/typescript.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAJ9B,OAAO,sBAAsB,EAAE,cAID,EAAE,MAAM,EAHtC,OAAO,aAAa,EAAE,YAGgB,GAFpC,IAAI,CA2ChB"}
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../../src/backends/typescript.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAJ9B,OAAO,sBAAsB,EAAE,cAID,EAAE,MAAM,EAHtC,OAAO,aAAa,EAAE,YAGgB,GAFpC,IAAI,CAqFhB"}