mobx-keystone 0.67.4 → 0.68.1-alpha

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 (394) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/_virtual/_tslib.mjs +12 -0
  3. package/dist/mobx-keystone.umd.js +5339 -5261
  4. package/dist/model/utils.d.ts +1 -1
  5. package/dist/node_modules/fast-deep-equal/es6/index.mjs +68 -0
  6. package/dist/node_modules/nanoid/non-secure/index.mjs +11 -0
  7. package/dist/snapshot/index.d.ts +0 -8
  8. package/dist/{dataModel/_BaseDataModel.d.ts → snapshot/registerDefaultReconcilers.d.ts} +0 -0
  9. package/dist/{model/_BaseModel.d.ts → snapshot/registerDefaultSnapshotters.d.ts} +0 -0
  10. package/dist/src/action/actionDecoratorUtils.mjs +25 -0
  11. package/dist/src/action/applyAction.mjs +54 -0
  12. package/dist/src/action/applyDelete.mjs +20 -0
  13. package/dist/src/action/applyMethodCall.mjs +19 -0
  14. package/dist/src/action/applySet.mjs +25 -0
  15. package/dist/src/action/builtInActions.mjs +15 -0
  16. package/dist/src/action/context.mjs +22 -0
  17. package/dist/src/action/hookActions.mjs +13 -0
  18. package/dist/src/action/isModelAction.mjs +6 -0
  19. package/dist/src/action/middleware.mjs +84 -0
  20. package/dist/src/action/modelAction.mjs +34 -0
  21. package/dist/src/action/modelFlow.mjs +251 -0
  22. package/dist/src/action/pendingActions.mjs +30 -0
  23. package/dist/src/action/protection.mjs +19 -0
  24. package/dist/src/action/runUnprotected.mjs +24 -0
  25. package/dist/src/action/wrapInAction.mjs +90 -0
  26. package/dist/src/actionMiddlewares/actionSerialization/actionSerialization.mjs +131 -0
  27. package/dist/src/actionMiddlewares/actionSerialization/applySerializedAction.mjs +110 -0
  28. package/dist/src/actionMiddlewares/actionSerialization/arraySerializer.mjs +15 -0
  29. package/dist/src/actionMiddlewares/actionSerialization/core.mjs +3 -0
  30. package/dist/src/actionMiddlewares/actionSerialization/dateSerializer.mjs +15 -0
  31. package/dist/src/actionMiddlewares/actionSerialization/mapSerializer.mjs +32 -0
  32. package/dist/src/actionMiddlewares/actionSerialization/objectPathSerializer.mjs +33 -0
  33. package/dist/src/actionMiddlewares/actionSerialization/objectSnapshotSerializer.mjs +18 -0
  34. package/dist/src/actionMiddlewares/actionSerialization/plainObjectSerializer.mjs +27 -0
  35. package/dist/src/actionMiddlewares/actionSerialization/primitiveSerializer.mjs +39 -0
  36. package/dist/src/actionMiddlewares/actionSerialization/setSerializer.mjs +29 -0
  37. package/dist/src/actionMiddlewares/actionTrackingMiddleware.mjs +239 -0
  38. package/dist/src/actionMiddlewares/onActionMiddleware.mjs +44 -0
  39. package/dist/src/actionMiddlewares/readonlyMiddleware.mjs +49 -0
  40. package/dist/src/actionMiddlewares/transactionMiddleware.mjs +69 -0
  41. package/dist/src/actionMiddlewares/undoMiddleware.mjs +472 -0
  42. package/dist/src/actionMiddlewares/utils.mjs +25 -0
  43. package/dist/src/computedTree/computedTree.mjs +63 -0
  44. package/dist/src/context/context.mjs +141 -0
  45. package/dist/src/dataModel/BaseDataModel.mjs +108 -0
  46. package/dist/src/dataModel/DataModel.mjs +32 -0
  47. package/dist/src/dataModel/actions.mjs +12 -0
  48. package/dist/src/dataModel/getDataModelMetadata.mjs +14 -0
  49. package/dist/src/dataModel/newDataModel.mjs +31 -0
  50. package/dist/src/dataModel/utils.mjs +29 -0
  51. package/dist/src/frozen/Frozen.mjs +68 -0
  52. package/dist/src/globalConfig/globalConfig.mjs +57 -0
  53. package/dist/src/index.mjs +97 -0
  54. package/dist/src/model/BaseModel.mjs +118 -0
  55. package/dist/src/model/Model.mjs +36 -0
  56. package/dist/src/model/getModelMetadata.mjs +19 -0
  57. package/dist/src/model/metadata.mjs +7 -0
  58. package/dist/src/model/newModel.mjs +95 -0
  59. package/dist/src/model/utils.mjs +33 -0
  60. package/dist/src/modelShared/BaseModelShared.mjs +9 -0
  61. package/dist/src/modelShared/Model.mjs +249 -0
  62. package/dist/src/modelShared/checkModelDecoratorArgs.mjs +21 -0
  63. package/dist/src/modelShared/modelClassInitializer.mjs +14 -0
  64. package/dist/src/modelShared/modelDecorator.mjs +117 -0
  65. package/dist/src/modelShared/modelInfo.mjs +7 -0
  66. package/dist/src/modelShared/modelPropsInfo.mjs +9 -0
  67. package/dist/src/modelShared/modelSymbols.mjs +5 -0
  68. package/dist/src/modelShared/newModel.mjs +13 -0
  69. package/dist/src/modelShared/prop.mjs +138 -0
  70. package/dist/src/modelShared/utils.mjs +10 -0
  71. package/dist/src/parent/core.mjs +34 -0
  72. package/dist/src/parent/coreObjectChildren.mjs +98 -0
  73. package/dist/src/parent/detach.mjs +32 -0
  74. package/dist/src/parent/findChildren.mjs +16 -0
  75. package/dist/src/parent/findParent.mjs +30 -0
  76. package/dist/src/parent/getChildrenObjects.mjs +12 -0
  77. package/dist/src/parent/onChildAttachedTo.mjs +101 -0
  78. package/dist/src/parent/path.mjs +149 -0
  79. package/dist/src/parent/path2.mjs +12 -0
  80. package/dist/src/parent/setParent.mjs +83 -0
  81. package/dist/src/parent/walkTree.mjs +104 -0
  82. package/dist/src/patch/applyPatches.mjs +118 -0
  83. package/dist/src/patch/emitPatch.mjs +100 -0
  84. package/dist/src/patch/jsonPatch.mjs +60 -0
  85. package/dist/src/patch/patchRecorder.mjs +75 -0
  86. package/dist/src/redux/connectReduxDevTools.mjs +153 -0
  87. package/dist/src/redux/redux.mjs +60 -0
  88. package/dist/src/ref/Ref.mjs +38 -0
  89. package/dist/src/ref/core.mjs +179 -0
  90. package/dist/src/ref/customRef.mjs +9 -0
  91. package/dist/src/ref/rootRef.mjs +34 -0
  92. package/dist/src/rootStore/attachDetach.mjs +53 -0
  93. package/dist/src/rootStore/rootStore.mjs +50 -0
  94. package/dist/src/snapshot/SnapshotterAndReconcilerPriority.mjs +9 -0
  95. package/dist/src/snapshot/applySnapshot.mjs +92 -0
  96. package/dist/src/snapshot/clone.mjs +29 -0
  97. package/dist/src/snapshot/fromArraySnapshot.mjs +23 -0
  98. package/dist/src/snapshot/fromFrozenSnapshot.mjs +13 -0
  99. package/dist/src/snapshot/fromModelSnapshot.mjs +38 -0
  100. package/dist/src/snapshot/fromPlainObjectSnapshot.mjs +26 -0
  101. package/dist/src/snapshot/fromSnapshot.mjs +91 -0
  102. package/dist/src/snapshot/getSnapshot.mjs +27 -0
  103. package/dist/src/snapshot/internal.mjs +97 -0
  104. package/dist/src/snapshot/onSnapshot.mjs +16 -0
  105. package/dist/src/snapshot/reconcileArraySnapshot.mjs +40 -0
  106. package/dist/src/snapshot/reconcileFrozenSnapshot.mjs +19 -0
  107. package/dist/src/snapshot/reconcileModelSnapshot.mjs +77 -0
  108. package/dist/src/snapshot/reconcilePlainObjectSnapshot.mjs +47 -0
  109. package/dist/src/snapshot/reconcileSnapshot.mjs +49 -0
  110. package/dist/src/snapshot/registerDefaultReconcilers.mjs +17 -0
  111. package/dist/src/snapshot/registerDefaultSnapshotters.mjs +17 -0
  112. package/dist/src/standardActions/actions.mjs +35 -0
  113. package/dist/src/standardActions/arrayActions.mjs +66 -0
  114. package/dist/src/standardActions/objectActions.mjs +36 -0
  115. package/dist/src/standardActions/standaloneActions.mjs +9 -0
  116. package/dist/src/transforms/ImmutableDate.mjs +51 -0
  117. package/dist/src/transforms/asMap.mjs +29 -0
  118. package/dist/src/transforms/asSet.mjs +12 -0
  119. package/dist/src/transforms/bigint.mjs +14 -0
  120. package/dist/src/transforms/date.mjs +27 -0
  121. package/dist/src/treeUtils/deepEquals.mjs +40 -0
  122. package/dist/src/treeUtils/draft.mjs +116 -0
  123. package/dist/src/treeUtils/sandbox.mjs +158 -0
  124. package/dist/src/tweaker/TweakerPriority.mjs +9 -0
  125. package/dist/src/tweaker/core.mjs +38 -0
  126. package/dist/src/tweaker/registerDefaultTweakers.mjs +17 -0
  127. package/dist/src/tweaker/tweak.mjs +109 -0
  128. package/dist/src/tweaker/tweakArray.mjs +272 -0
  129. package/dist/src/tweaker/tweakFrozen.mjs +28 -0
  130. package/dist/src/tweaker/tweakModel.mjs +26 -0
  131. package/dist/src/tweaker/tweakPlainObject.mjs +205 -0
  132. package/dist/src/tweaker/typeChecking.mjs +46 -0
  133. package/dist/src/tweaker/withoutTypeChecking.mjs +15 -0
  134. package/dist/src/types/TypeCheckError.mjs +31 -0
  135. package/dist/src/types/TypeChecker.mjs +165 -0
  136. package/dist/src/types/arrayBased/array.mjs +68 -0
  137. package/dist/src/types/arrayBased/tuple.mjs +71 -0
  138. package/dist/src/types/getTypeInfo.mjs +12 -0
  139. package/dist/src/types/objectBased/arraySet.mjs +83 -0
  140. package/dist/src/types/objectBased/dataModelData.mjs +95 -0
  141. package/dist/src/types/objectBased/model.mjs +133 -0
  142. package/dist/src/types/objectBased/object.mjs +119 -0
  143. package/dist/src/types/objectBased/objectMap.mjs +90 -0
  144. package/dist/src/types/objectBased/record.mjs +80 -0
  145. package/dist/src/types/objectBased/ref.mjs +62 -0
  146. package/dist/src/types/primitiveBased/enum.mjs +20 -0
  147. package/dist/src/types/primitiveBased/primitives.mjs +59 -0
  148. package/dist/src/types/primitiveBased/refinedPrimitives.mjs +6 -0
  149. package/dist/src/types/registerDefaultStandardTypeResolvers.mjs +13 -0
  150. package/dist/src/types/resolveTypeChecker.mjs +52 -0
  151. package/dist/src/types/tProp.mjs +53 -0
  152. package/dist/src/types/typeCheck.mjs +11 -0
  153. package/dist/src/types/types.mjs +69 -0
  154. package/dist/src/types/utility/maybe.mjs +10 -0
  155. package/dist/src/types/utility/or.mjs +99 -0
  156. package/dist/src/types/utility/refinement.mjs +52 -0
  157. package/dist/src/types/utility/unchecked.mjs +10 -0
  158. package/dist/src/utils/ModelPool.mjs +50 -0
  159. package/dist/src/utils/chainFns.mjs +15 -0
  160. package/dist/src/utils/index.mjs +228 -0
  161. package/dist/src/utils/mapUtils.mjs +10 -0
  162. package/dist/src/utils/tag.mjs +16 -0
  163. package/dist/src/wrappers/ArraySet.mjs +85 -0
  164. package/dist/src/wrappers/ObjectMap.mjs +96 -0
  165. package/dist/src/wrappers/asMap.mjs +181 -0
  166. package/dist/src/wrappers/asSet.mjs +97 -0
  167. package/dist/tweaker/index.d.ts +0 -4
  168. package/dist/tweaker/registerDefaultTweakers.d.ts +1 -0
  169. package/dist/types/registerDefaultStandardTypeResolvers.d.ts +1 -0
  170. package/package.json +12 -14
  171. package/src/actionMiddlewares/actionSerialization/actionSerialization.ts +24 -9
  172. package/src/dataModel/BaseDataModel.ts +0 -3
  173. package/src/dataModel/utils.ts +4 -4
  174. package/src/dist/action/actionDecoratorUtils.d.ts +5 -0
  175. package/src/dist/action/applyAction.d.ts +36 -0
  176. package/src/dist/action/applyDelete.d.ts +7 -0
  177. package/src/dist/action/applyMethodCall.d.ts +9 -0
  178. package/src/dist/action/applySet.d.ts +8 -0
  179. package/src/dist/action/builtInActions.d.ts +39 -0
  180. package/src/dist/action/context.d.ts +85 -0
  181. package/src/dist/action/hookActions.d.ts +32 -0
  182. package/src/dist/action/index.d.ts +12 -0
  183. package/src/dist/action/isModelAction.d.ts +7 -0
  184. package/src/dist/action/middleware.d.ts +34 -0
  185. package/src/dist/action/modelAction.d.ts +9 -0
  186. package/src/dist/action/modelFlow.d.ts +34 -0
  187. package/src/dist/action/pendingActions.d.ts +1 -0
  188. package/src/dist/action/protection.d.ts +1 -0
  189. package/src/dist/action/runUnprotected.d.ts +19 -0
  190. package/src/dist/action/wrapInAction.d.ts +1 -0
  191. package/src/dist/actionMiddlewares/actionSerialization/actionSerialization.d.ts +84 -0
  192. package/src/dist/actionMiddlewares/actionSerialization/applySerializedAction.d.ts +45 -0
  193. package/src/dist/actionMiddlewares/actionSerialization/arraySerializer.d.ts +3 -0
  194. package/src/dist/actionMiddlewares/actionSerialization/core.d.ts +28 -0
  195. package/src/dist/actionMiddlewares/actionSerialization/dateSerializer.d.ts +2 -0
  196. package/src/dist/actionMiddlewares/actionSerialization/index.d.ts +3 -0
  197. package/src/dist/actionMiddlewares/actionSerialization/mapSerializer.d.ts +6 -0
  198. package/src/dist/actionMiddlewares/actionSerialization/objectPathSerializer.d.ts +8 -0
  199. package/src/dist/actionMiddlewares/actionSerialization/objectSnapshotSerializer.d.ts +2 -0
  200. package/src/dist/actionMiddlewares/actionSerialization/plainObjectSerializer.d.ts +2 -0
  201. package/src/dist/actionMiddlewares/actionSerialization/primitiveSerializer.d.ts +2 -0
  202. package/src/dist/actionMiddlewares/actionSerialization/setSerializer.d.ts +3 -0
  203. package/src/dist/actionMiddlewares/actionTrackingMiddleware.d.ts +122 -0
  204. package/src/dist/actionMiddlewares/index.d.ts +6 -0
  205. package/src/dist/actionMiddlewares/onActionMiddleware.d.ts +26 -0
  206. package/src/dist/actionMiddlewares/readonlyMiddleware.d.ts +35 -0
  207. package/src/dist/actionMiddlewares/transactionMiddleware.d.ts +21 -0
  208. package/src/dist/actionMiddlewares/undoMiddleware.d.ts +283 -0
  209. package/src/dist/actionMiddlewares/utils.d.ts +1 -0
  210. package/src/dist/computedTree/computedTree.d.ts +16 -0
  211. package/src/dist/computedTree/index.d.ts +1 -0
  212. package/src/dist/context/context.d.ts +84 -0
  213. package/src/dist/context/index.d.ts +1 -0
  214. package/src/dist/dataModel/BaseDataModel.d.ts +52 -0
  215. package/src/dist/dataModel/DataModel.d.ts +47 -0
  216. package/src/dist/dataModel/DataModelConstructorOptions.d.ts +1 -0
  217. package/src/dist/dataModel/actions.d.ts +1 -0
  218. package/src/dist/dataModel/getDataModelMetadata.d.ts +19 -0
  219. package/src/dist/dataModel/index.d.ts +4 -0
  220. package/src/dist/dataModel/newDataModel.d.ts +1 -0
  221. package/src/dist/dataModel/utils.d.ts +8 -0
  222. package/src/dist/frozen/Frozen.d.ts +50 -0
  223. package/src/dist/frozen/index.d.ts +1 -0
  224. package/src/dist/globalConfig/globalConfig.d.ts +51 -0
  225. package/src/dist/globalConfig/index.d.ts +1 -0
  226. package/src/dist/index.d.ts +23 -0
  227. package/src/dist/mobx-keystone.umd.js +8201 -0
  228. package/src/dist/model/BaseModel.d.ts +125 -0
  229. package/src/dist/model/Model.d.ts +94 -0
  230. package/src/dist/model/ModelConstructorOptions.d.ts +1 -0
  231. package/src/dist/model/getModelMetadata.d.ts +27 -0
  232. package/src/dist/model/index.d.ts +5 -0
  233. package/src/dist/model/metadata.d.ts +8 -0
  234. package/src/dist/model/newModel.d.ts +1 -0
  235. package/src/dist/model/utils.d.ts +8 -0
  236. package/src/dist/modelShared/BaseModelShared.d.ts +76 -0
  237. package/src/dist/modelShared/Model.d.ts +15 -0
  238. package/src/dist/modelShared/checkModelDecoratorArgs.d.ts +1 -0
  239. package/src/dist/modelShared/index.d.ts +3 -0
  240. package/src/dist/modelShared/modelClassInitializer.d.ts +1 -0
  241. package/src/dist/modelShared/modelDecorator.d.ts +24 -0
  242. package/src/dist/modelShared/modelInfo.d.ts +1 -0
  243. package/src/dist/modelShared/modelPropsInfo.d.ts +1 -0
  244. package/src/dist/modelShared/modelSymbols.d.ts +3 -0
  245. package/src/dist/modelShared/newModel.d.ts +4 -0
  246. package/src/dist/modelShared/prop.d.ts +179 -0
  247. package/src/dist/modelShared/utils.d.ts +1 -0
  248. package/src/dist/parent/core.d.ts +1 -0
  249. package/src/dist/parent/coreObjectChildren.d.ts +1 -0
  250. package/src/dist/parent/detach.d.ts +9 -0
  251. package/src/dist/parent/findChildren.d.ts +13 -0
  252. package/src/dist/parent/findParent.d.ts +41 -0
  253. package/src/dist/parent/getChildrenObjects.d.ts +11 -0
  254. package/src/dist/parent/index.d.ts +9 -0
  255. package/src/dist/parent/onChildAttachedTo.d.ts +22 -0
  256. package/src/dist/parent/path.d.ts +107 -0
  257. package/src/dist/parent/path2.d.ts +16 -0
  258. package/src/dist/parent/pathTypes.d.ts +12 -0
  259. package/src/dist/parent/setParent.d.ts +1 -0
  260. package/src/dist/parent/walkTree.d.ts +25 -0
  261. package/src/dist/patch/Patch.d.ts +16 -0
  262. package/src/dist/patch/applyPatches.d.ts +9 -0
  263. package/src/dist/patch/emitPatch.d.ts +29 -0
  264. package/src/dist/patch/index.d.ts +5 -0
  265. package/src/dist/patch/jsonPatch.d.ts +45 -0
  266. package/src/dist/patch/patchRecorder.d.ts +70 -0
  267. package/src/dist/redux/connectReduxDevTools.d.ts +12 -0
  268. package/src/dist/redux/index.d.ts +2 -0
  269. package/src/dist/redux/redux.d.ts +47 -0
  270. package/src/dist/ref/Ref.d.ts +53 -0
  271. package/src/dist/ref/core.d.ts +46 -0
  272. package/src/dist/ref/customRef.d.ts +38 -0
  273. package/src/dist/ref/index.d.ts +4 -0
  274. package/src/dist/ref/rootRef.d.ts +33 -0
  275. package/src/dist/rootStore/attachDetach.d.ts +1 -0
  276. package/src/dist/rootStore/index.d.ts +1 -0
  277. package/src/dist/rootStore/rootStore.d.ts +33 -0
  278. package/src/dist/snapshot/SnapshotOf.d.ts +47 -0
  279. package/src/dist/snapshot/SnapshotterAndReconcilerPriority.d.ts +1 -0
  280. package/src/dist/snapshot/applySnapshot.d.ts +17 -0
  281. package/src/dist/snapshot/clone.d.ts +18 -0
  282. package/src/dist/snapshot/fromArraySnapshot.d.ts +1 -0
  283. package/src/dist/snapshot/fromFrozenSnapshot.d.ts +1 -0
  284. package/src/dist/snapshot/fromModelSnapshot.d.ts +1 -0
  285. package/src/dist/snapshot/fromPlainObjectSnapshot.d.ts +1 -0
  286. package/src/dist/snapshot/fromSnapshot.d.ts +36 -0
  287. package/src/dist/snapshot/getSnapshot.d.ts +22 -0
  288. package/src/dist/snapshot/index.d.ts +6 -0
  289. package/src/dist/snapshot/internal.d.ts +1 -0
  290. package/src/dist/snapshot/onSnapshot.d.ts +18 -0
  291. package/src/dist/snapshot/reconcileArraySnapshot.d.ts +1 -0
  292. package/src/dist/snapshot/reconcileFrozenSnapshot.d.ts +1 -0
  293. package/src/dist/snapshot/reconcileModelSnapshot.d.ts +1 -0
  294. package/src/dist/snapshot/reconcilePlainObjectSnapshot.d.ts +1 -0
  295. package/src/dist/snapshot/reconcileSnapshot.d.ts +1 -0
  296. package/src/dist/snapshot/registerDefaultReconcilers.d.ts +1 -0
  297. package/src/dist/snapshot/registerDefaultSnapshotters.d.ts +1 -0
  298. package/src/dist/standardActions/actions.d.ts +1 -0
  299. package/src/dist/standardActions/arrayActions.d.ts +18 -0
  300. package/src/dist/standardActions/index.d.ts +3 -0
  301. package/src/dist/standardActions/objectActions.d.ts +7 -0
  302. package/src/dist/standardActions/standaloneActions.d.ts +16 -0
  303. package/src/dist/transforms/ImmutableDate.d.ts +1 -0
  304. package/src/dist/transforms/asMap.d.ts +3 -0
  305. package/src/dist/transforms/asSet.d.ts +2 -0
  306. package/src/dist/transforms/bigint.d.ts +2 -0
  307. package/src/dist/transforms/date.d.ts +3 -0
  308. package/src/dist/transforms/index.d.ts +4 -0
  309. package/src/dist/treeUtils/deepEquals.d.ts +20 -0
  310. package/src/dist/treeUtils/draft.d.ts +70 -0
  311. package/src/dist/treeUtils/index.d.ts +3 -0
  312. package/src/dist/treeUtils/sandbox.d.ts +85 -0
  313. package/src/dist/tweaker/TweakerPriority.d.ts +1 -0
  314. package/src/dist/tweaker/core.d.ts +14 -0
  315. package/src/dist/tweaker/index.d.ts +2 -0
  316. package/src/dist/tweaker/registerDefaultTweakers.d.ts +1 -0
  317. package/src/dist/tweaker/tweak.d.ts +22 -0
  318. package/src/dist/tweaker/tweakArray.d.ts +1 -0
  319. package/src/dist/tweaker/tweakFrozen.d.ts +1 -0
  320. package/src/dist/tweaker/tweakModel.d.ts +1 -0
  321. package/src/dist/tweaker/tweakPlainObject.d.ts +1 -0
  322. package/src/dist/tweaker/typeChecking.d.ts +1 -0
  323. package/src/dist/tweaker/withoutTypeChecking.d.ts +2 -0
  324. package/src/dist/types/TypeCheckError.d.ts +22 -0
  325. package/src/dist/types/TypeChecker.d.ts +8 -0
  326. package/src/dist/types/arrayBased/array.d.ts +23 -0
  327. package/src/dist/types/arrayBased/tuple.d.ts +24 -0
  328. package/src/dist/types/getTypeInfo.d.ts +9 -0
  329. package/src/dist/types/index.d.ts +5 -0
  330. package/src/dist/types/objectBased/arraySet.d.ts +24 -0
  331. package/src/dist/types/objectBased/dataModelData.d.ts +44 -0
  332. package/src/dist/types/objectBased/model.d.ts +43 -0
  333. package/src/dist/types/objectBased/object.d.ts +63 -0
  334. package/src/dist/types/objectBased/objectMap.d.ts +24 -0
  335. package/src/dist/types/objectBased/record.d.ts +24 -0
  336. package/src/dist/types/objectBased/ref.d.ts +21 -0
  337. package/src/dist/types/primitiveBased/enum.d.ts +34 -0
  338. package/src/dist/types/primitiveBased/primitives.d.ts +81 -0
  339. package/src/dist/types/primitiveBased/refinedPrimitives.d.ts +18 -0
  340. package/src/dist/types/registerDefaultStandardTypeResolvers.d.ts +1 -0
  341. package/src/dist/types/resolveTypeChecker.d.ts +1 -0
  342. package/src/dist/types/schemas.d.ts +53 -0
  343. package/src/dist/types/tProp.d.ts +92 -0
  344. package/src/dist/types/typeCheck.d.ts +11 -0
  345. package/src/dist/types/types.d.ts +51 -0
  346. package/src/dist/types/utility/maybe.d.ts +29 -0
  347. package/src/dist/types/utility/or.d.ts +35 -0
  348. package/src/dist/types/utility/refinement.d.ts +45 -0
  349. package/src/dist/types/utility/unchecked.d.ts +22 -0
  350. package/src/dist/utils/ModelPool.d.ts +7 -0
  351. package/src/dist/utils/chainFns.d.ts +1 -0
  352. package/src/dist/utils/index.d.ts +6 -0
  353. package/src/dist/utils/mapUtils.d.ts +2 -0
  354. package/src/dist/utils/tag.d.ts +13 -0
  355. package/src/dist/utils/types.d.ts +39 -0
  356. package/src/dist/wrappers/ArraySet.d.ts +29 -0
  357. package/src/dist/wrappers/ObjectMap.d.ts +32 -0
  358. package/src/dist/wrappers/asMap.d.ts +29 -0
  359. package/src/dist/wrappers/asSet.d.ts +15 -0
  360. package/src/dist/wrappers/index.d.ts +4 -0
  361. package/src/model/BaseModel.ts +0 -3
  362. package/src/model/utils.ts +4 -5
  363. package/src/modelShared/checkModelDecoratorArgs.ts +6 -6
  364. package/src/parent/setParent.ts +2 -2
  365. package/src/rootStore/attachDetach.ts +2 -3
  366. package/src/snapshot/fromArraySnapshot.ts +11 -6
  367. package/src/snapshot/fromFrozenSnapshot.ts +11 -6
  368. package/src/snapshot/fromModelSnapshot.ts +11 -6
  369. package/src/snapshot/fromPlainObjectSnapshot.ts +11 -6
  370. package/src/snapshot/fromSnapshot.ts +3 -0
  371. package/src/snapshot/index.ts +0 -10
  372. package/src/snapshot/reconcileArraySnapshot.ts +11 -6
  373. package/src/snapshot/reconcileFrozenSnapshot.ts +11 -6
  374. package/src/snapshot/reconcileModelSnapshot.ts +11 -6
  375. package/src/snapshot/reconcilePlainObjectSnapshot.ts +11 -6
  376. package/src/snapshot/reconcileSnapshot.ts +3 -0
  377. package/src/snapshot/registerDefaultReconcilers.ts +21 -0
  378. package/src/snapshot/registerDefaultSnapshotters.ts +21 -0
  379. package/src/tweaker/index.ts +0 -6
  380. package/src/tweaker/registerDefaultTweakers.ts +21 -0
  381. package/src/tweaker/tweak.ts +3 -0
  382. package/src/tweaker/tweakArray.ts +406 -401
  383. package/src/tweaker/tweakFrozen.ts +11 -6
  384. package/src/tweaker/tweakModel.ts +11 -6
  385. package/src/tweaker/tweakPlainObject.ts +288 -283
  386. package/src/types/objectBased/model.ts +6 -1
  387. package/src/types/objectBased/ref.ts +1 -1
  388. package/src/types/primitiveBased/primitives.ts +177 -166
  389. package/src/types/registerDefaultStandardTypeResolvers.ts +17 -0
  390. package/src/types/resolveTypeChecker.ts +7 -1
  391. package/dist/mobx-keystone.es.js +0 -7856
  392. package/dist/mobx-keystone.es.mjs +0 -7856
  393. package/src/dataModel/_BaseDataModel.ts +0 -15
  394. package/src/model/_BaseModel.ts +0 -15
@@ -0,0 +1,472 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __publicField = (obj, key, value) => {
21
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
+ return value;
23
+ };
24
+ import { __decorate } from "../../_virtual/_tslib.mjs";
25
+ import { computed, action } from "mobx";
26
+ import { modelAction } from "../action/modelAction.mjs";
27
+ import { Model } from "../model/Model.mjs";
28
+ import { model } from "../modelShared/modelDecorator.mjs";
29
+ import { fastGetRootPath } from "../parent/path.mjs";
30
+ import { applyPatches } from "../patch/applyPatches.mjs";
31
+ import { assertTweakedObject } from "../tweaker/core.mjs";
32
+ import { failure, namespace, getMobxVersion, mobx6 } from "../utils/index.mjs";
33
+ import { patchRecorder } from "../patch/patchRecorder.mjs";
34
+ import { typesArray } from "../types/arrayBased/array.mjs";
35
+ import { tProp } from "../types/tProp.mjs";
36
+ import { typesUnchecked } from "../types/utility/unchecked.mjs";
37
+ import { actionTrackingMiddleware } from "./actionTrackingMiddleware.mjs";
38
+ var UndoEventType;
39
+ (function(UndoEventType2) {
40
+ UndoEventType2["Single"] = "single";
41
+ UndoEventType2["Group"] = "group";
42
+ })(UndoEventType || (UndoEventType = {}));
43
+ function toSingleEvents(event, reverse) {
44
+ if (event.type === UndoEventType.Single)
45
+ return [event];
46
+ else {
47
+ const array = [];
48
+ for (const e of event.events) {
49
+ if (reverse) {
50
+ array.unshift(...toSingleEvents(e, true));
51
+ } else {
52
+ array.push(...toSingleEvents(e, false));
53
+ }
54
+ }
55
+ return array;
56
+ }
57
+ }
58
+ let UndoStore = class UndoStore2 extends Model({
59
+ undoEvents: tProp(typesArray(typesUnchecked()), () => []),
60
+ redoEvents: tProp(typesArray(typesUnchecked()), () => [])
61
+ }) {
62
+ constructor() {
63
+ super(...arguments);
64
+ __publicField(this, "_groupStack", []);
65
+ }
66
+ _clearUndo() {
67
+ withoutUndo(() => {
68
+ this.undoEvents.length = 0;
69
+ });
70
+ }
71
+ _clearRedo() {
72
+ withoutUndo(() => {
73
+ this.redoEvents.length = 0;
74
+ });
75
+ }
76
+ _undo() {
77
+ withoutUndo(() => {
78
+ const event = this.undoEvents.pop();
79
+ this.redoEvents.push(event);
80
+ });
81
+ }
82
+ _redo() {
83
+ withoutUndo(() => {
84
+ const event = this.redoEvents.pop();
85
+ this.undoEvents.push(event);
86
+ });
87
+ }
88
+ _addUndo(event) {
89
+ withoutUndo(() => {
90
+ this.undoEvents.push(event);
91
+ this.redoEvents.length = 0;
92
+ });
93
+ }
94
+ _addUndoToParentGroup(parentGroup, event) {
95
+ parentGroup.events.push(event);
96
+ }
97
+ get _currentGroup() {
98
+ return this._groupStack[this._groupStack.length - 1];
99
+ }
100
+ _startGroup(groupName, startRunning, options) {
101
+ var _a;
102
+ let running = false;
103
+ let ended = false;
104
+ const parentGroup = this._currentGroup;
105
+ const group = {
106
+ type: UndoEventType.Group,
107
+ groupName,
108
+ events: []
109
+ };
110
+ const attachedStateBeforeEvent = parentGroup ? void 0 : (_a = options == null ? void 0 : options.attachedState) == null ? void 0 : _a.save();
111
+ const api = {
112
+ pause: () => {
113
+ if (ended) {
114
+ throw failure("cannot pause a group when it is already ended");
115
+ }
116
+ if (!running) {
117
+ throw failure("cannot pause a group when it is not running");
118
+ }
119
+ if (this._currentGroup !== group) {
120
+ throw failure("group out of order");
121
+ }
122
+ this._groupStack.pop();
123
+ running = false;
124
+ },
125
+ resume: () => {
126
+ if (ended) {
127
+ throw failure("cannot resume a group when it is already ended");
128
+ }
129
+ if (running) {
130
+ throw failure("cannot resume a group when it is already running");
131
+ }
132
+ this._groupStack.push(group);
133
+ running = true;
134
+ },
135
+ end: () => {
136
+ var _a2;
137
+ if (running) {
138
+ api.pause();
139
+ }
140
+ ended = true;
141
+ if (parentGroup) {
142
+ this._addUndoToParentGroup(parentGroup, group);
143
+ } else {
144
+ this._addUndo(__spreadProps(__spreadValues({}, group), {
145
+ attachedState: {
146
+ beforeEvent: attachedStateBeforeEvent,
147
+ afterEvent: (_a2 = options == null ? void 0 : options.attachedState) == null ? void 0 : _a2.save()
148
+ }
149
+ }));
150
+ }
151
+ }
152
+ };
153
+ if (startRunning) {
154
+ api.resume();
155
+ }
156
+ return api;
157
+ }
158
+ };
159
+ __decorate([
160
+ modelAction
161
+ ], UndoStore.prototype, "_clearUndo", null);
162
+ __decorate([
163
+ modelAction
164
+ ], UndoStore.prototype, "_clearRedo", null);
165
+ __decorate([
166
+ modelAction
167
+ ], UndoStore.prototype, "_undo", null);
168
+ __decorate([
169
+ modelAction
170
+ ], UndoStore.prototype, "_redo", null);
171
+ __decorate([
172
+ modelAction
173
+ ], UndoStore.prototype, "_addUndo", null);
174
+ UndoStore = __decorate([
175
+ model(`${namespace}/UndoStore`)
176
+ ], UndoStore);
177
+ class UndoManager {
178
+ constructor(disposer, subtreeRoot, store, options) {
179
+ __publicField(this, "disposer");
180
+ __publicField(this, "subtreeRoot");
181
+ __publicField(this, "options");
182
+ __publicField(this, "store");
183
+ __publicField(this, "_isUndoRecordingDisabled", false);
184
+ this.disposer = disposer;
185
+ this.subtreeRoot = subtreeRoot;
186
+ this.options = options;
187
+ if (getMobxVersion() >= 6) {
188
+ mobx6.makeObservable(this);
189
+ }
190
+ this.store = store != null ? store : new UndoStore({});
191
+ }
192
+ get undoQueue() {
193
+ return this.store.undoEvents;
194
+ }
195
+ get redoQueue() {
196
+ return this.store.redoEvents;
197
+ }
198
+ get undoLevels() {
199
+ return this.undoQueue.length;
200
+ }
201
+ get canUndo() {
202
+ return this.undoLevels > 0;
203
+ }
204
+ clearUndo() {
205
+ this.store._clearUndo();
206
+ }
207
+ get redoLevels() {
208
+ return this.redoQueue.length;
209
+ }
210
+ get canRedo() {
211
+ return this.redoLevels > 0;
212
+ }
213
+ clearRedo() {
214
+ this.store._clearRedo();
215
+ }
216
+ undo() {
217
+ if (!this.canUndo) {
218
+ throw failure("nothing to undo");
219
+ }
220
+ const event = this.undoQueue[this.undoQueue.length - 1];
221
+ withoutUndo(() => {
222
+ var _a, _b, _c;
223
+ toSingleEvents(event, true).forEach((e) => {
224
+ applyPatches(this.subtreeRoot, e.inversePatches, true);
225
+ });
226
+ if ((_a = event.attachedState) == null ? void 0 : _a.beforeEvent) {
227
+ (_c = (_b = this.options) == null ? void 0 : _b.attachedState) == null ? void 0 : _c.restore(event.attachedState.beforeEvent);
228
+ }
229
+ });
230
+ this.store._undo();
231
+ }
232
+ redo() {
233
+ if (!this.canRedo) {
234
+ throw failure("nothing to redo");
235
+ }
236
+ const event = this.redoQueue[this.redoQueue.length - 1];
237
+ withoutUndo(() => {
238
+ var _a, _b, _c;
239
+ toSingleEvents(event, false).forEach((e) => {
240
+ applyPatches(this.subtreeRoot, e.patches);
241
+ });
242
+ if ((_a = event.attachedState) == null ? void 0 : _a.afterEvent) {
243
+ (_c = (_b = this.options) == null ? void 0 : _b.attachedState) == null ? void 0 : _c.restore(event.attachedState.afterEvent);
244
+ }
245
+ });
246
+ this.store._redo();
247
+ }
248
+ dispose() {
249
+ this.disposer();
250
+ }
251
+ get isUndoRecordingDisabled() {
252
+ return this._isUndoRecordingDisabled;
253
+ }
254
+ withoutUndo(fn) {
255
+ const savedUndoDisabled = this._isUndoRecordingDisabled;
256
+ this._isUndoRecordingDisabled = true;
257
+ try {
258
+ return fn();
259
+ } finally {
260
+ this._isUndoRecordingDisabled = savedUndoDisabled;
261
+ }
262
+ }
263
+ createGroup(groupName) {
264
+ const group = this.store._startGroup(groupName, false, this.options);
265
+ return {
266
+ continue(fn) {
267
+ group.resume();
268
+ try {
269
+ return fn();
270
+ } finally {
271
+ group.pause();
272
+ }
273
+ },
274
+ end() {
275
+ group.end();
276
+ }
277
+ };
278
+ }
279
+ withGroup(arg1, arg2) {
280
+ let groupName;
281
+ let fn;
282
+ if (typeof arg1 === "string") {
283
+ groupName = arg1;
284
+ fn = arg2;
285
+ } else {
286
+ fn = arg1;
287
+ }
288
+ const group = this.store._startGroup(groupName, true, this.options);
289
+ try {
290
+ return fn();
291
+ } finally {
292
+ group.end();
293
+ }
294
+ }
295
+ withGroupFlow(arg1, arg2) {
296
+ let groupName;
297
+ let fn;
298
+ if (typeof arg1 === "string") {
299
+ groupName = arg1;
300
+ fn = arg2;
301
+ } else {
302
+ fn = arg1;
303
+ }
304
+ const gen = fn();
305
+ const group = this.store._startGroup(groupName, false, this.options);
306
+ const genNext = gen.next.bind(gen);
307
+ const genThrow = gen.throw.bind(gen);
308
+ const promise = new Promise(function(resolve, reject) {
309
+ function onFulfilled(res) {
310
+ group.resume();
311
+ let ret;
312
+ try {
313
+ ret = genNext(res);
314
+ } catch (e) {
315
+ group.end();
316
+ reject(e);
317
+ return;
318
+ }
319
+ group.pause();
320
+ next(ret);
321
+ }
322
+ function onRejected(err) {
323
+ group.resume();
324
+ let ret;
325
+ try {
326
+ ret = genThrow(err);
327
+ } catch (e) {
328
+ group.end();
329
+ reject(e);
330
+ return;
331
+ }
332
+ group.pause();
333
+ next(ret);
334
+ }
335
+ function next(ret) {
336
+ if (ret && typeof ret.then === "function") {
337
+ ret.then(next, reject);
338
+ } else if (ret.done) {
339
+ group.end();
340
+ resolve(ret.value);
341
+ } else {
342
+ Promise.resolve(ret.value).then(onFulfilled, onRejected);
343
+ }
344
+ }
345
+ onFulfilled(void 0);
346
+ });
347
+ return promise;
348
+ }
349
+ }
350
+ __decorate([
351
+ computed
352
+ ], UndoManager.prototype, "undoQueue", null);
353
+ __decorate([
354
+ computed
355
+ ], UndoManager.prototype, "redoQueue", null);
356
+ __decorate([
357
+ computed
358
+ ], UndoManager.prototype, "undoLevels", null);
359
+ __decorate([
360
+ computed
361
+ ], UndoManager.prototype, "canUndo", null);
362
+ __decorate([
363
+ action
364
+ ], UndoManager.prototype, "clearUndo", null);
365
+ __decorate([
366
+ computed
367
+ ], UndoManager.prototype, "redoLevels", null);
368
+ __decorate([
369
+ computed
370
+ ], UndoManager.prototype, "canRedo", null);
371
+ __decorate([
372
+ action
373
+ ], UndoManager.prototype, "clearRedo", null);
374
+ __decorate([
375
+ action
376
+ ], UndoManager.prototype, "undo", null);
377
+ __decorate([
378
+ action
379
+ ], UndoManager.prototype, "redo", null);
380
+ function undoMiddleware(subtreeRoot, store, options) {
381
+ assertTweakedObject(subtreeRoot, "subtreeRoot");
382
+ let manager;
383
+ const patchRecorderSymbol = Symbol("patchRecorder");
384
+ function initPatchRecorder(ctx) {
385
+ var _a;
386
+ const group = manager.store._currentGroup;
387
+ const patchRecorderData = {
388
+ recorder: patchRecorder(subtreeRoot, {
389
+ recording: false,
390
+ filter: () => {
391
+ return !_isGlobalUndoRecordingDisabled && !manager.isUndoRecordingDisabled;
392
+ }
393
+ }),
394
+ recorderStack: 0,
395
+ undoRootContext: ctx,
396
+ group,
397
+ attachedStateBeforeEvent: (_a = options == null ? void 0 : options.attachedState) == null ? void 0 : _a.save()
398
+ };
399
+ ctx.rootContext.data[patchRecorderSymbol] = patchRecorderData;
400
+ }
401
+ function getPatchRecorderData(ctx) {
402
+ return ctx.rootContext.data[patchRecorderSymbol];
403
+ }
404
+ const middlewareDisposer = actionTrackingMiddleware(subtreeRoot, {
405
+ onStart(ctx) {
406
+ if (!getPatchRecorderData(ctx)) {
407
+ initPatchRecorder(ctx);
408
+ }
409
+ },
410
+ onResume(ctx) {
411
+ const patchRecorderData = getPatchRecorderData(ctx);
412
+ patchRecorderData.recorderStack++;
413
+ patchRecorderData.recorder.recording = patchRecorderData.recorderStack > 0;
414
+ },
415
+ onSuspend(ctx) {
416
+ const patchRecorderData = getPatchRecorderData(ctx);
417
+ patchRecorderData.recorderStack--;
418
+ patchRecorderData.recorder.recording = patchRecorderData.recorderStack > 0;
419
+ },
420
+ onFinish(ctx) {
421
+ var _a;
422
+ const patchRecorderData = getPatchRecorderData(ctx);
423
+ if (patchRecorderData && patchRecorderData.undoRootContext === ctx) {
424
+ const patchRecorder2 = patchRecorderData.recorder;
425
+ if (patchRecorder2.events.length > 0) {
426
+ const patches = [];
427
+ const inversePatches = [];
428
+ for (const event2 of patchRecorder2.events) {
429
+ patches.push(...event2.patches);
430
+ inversePatches.push(...event2.inversePatches);
431
+ }
432
+ const event = {
433
+ type: UndoEventType.Single,
434
+ targetPath: fastGetRootPath(ctx.target).path,
435
+ actionName: ctx.actionName,
436
+ patches,
437
+ inversePatches
438
+ };
439
+ const parentGroup = patchRecorderData.group;
440
+ if (parentGroup) {
441
+ manager.store._addUndoToParentGroup(parentGroup, event);
442
+ } else {
443
+ manager.store._addUndo(__spreadProps(__spreadValues({}, event), {
444
+ attachedState: {
445
+ beforeEvent: patchRecorderData.attachedStateBeforeEvent,
446
+ afterEvent: (_a = options == null ? void 0 : options.attachedState) == null ? void 0 : _a.save()
447
+ }
448
+ }));
449
+ }
450
+ }
451
+ patchRecorder2.dispose();
452
+ }
453
+ }
454
+ });
455
+ manager = new UndoManager(middlewareDisposer, subtreeRoot, store, options);
456
+ return manager;
457
+ }
458
+ let _isGlobalUndoRecordingDisabled = false;
459
+ function isGlobalUndoRecordingDisabled() {
460
+ return _isGlobalUndoRecordingDisabled;
461
+ }
462
+ function withoutUndo(fn) {
463
+ const savedUndoDisabled = _isGlobalUndoRecordingDisabled;
464
+ _isGlobalUndoRecordingDisabled = true;
465
+ try {
466
+ return fn();
467
+ } finally {
468
+ _isGlobalUndoRecordingDisabled = savedUndoDisabled;
469
+ }
470
+ }
471
+ export { UndoEventType, UndoManager, UndoStore, isGlobalUndoRecordingDisabled, undoMiddleware, withoutUndo };
472
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5kb01pZGRsZXdhcmUubWpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uTWlkZGxld2FyZXMvdW5kb01pZGRsZXdhcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uLCBjb21wdXRlZCB9IGZyb20gXCJtb2J4XCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uTWlkZGxld2FyZURpc3Bvc2VyIH0gZnJvbSBcIi4uL2FjdGlvbi9taWRkbGV3YXJlXCJcbmltcG9ydCB7IG1vZGVsQWN0aW9uIH0gZnJvbSBcIi4uL2FjdGlvbi9tb2RlbEFjdGlvblwiXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbC9Nb2RlbFwiXG5pbXBvcnQgeyBtb2RlbCB9IGZyb20gXCIuLi9tb2RlbFNoYXJlZC9tb2RlbERlY29yYXRvclwiXG5pbXBvcnQgeyBmYXN0R2V0Um9vdFBhdGggfSBmcm9tIFwiLi4vcGFyZW50L3BhdGhcIlxuaW1wb3J0IHR5cGUgeyBQYXRoIH0gZnJvbSBcIi4uL3BhcmVudC9wYXRoVHlwZXNcIlxuaW1wb3J0IHsgYXBwbHlQYXRjaGVzLCBQYXRjaCwgcGF0Y2hSZWNvcmRlciwgUGF0Y2hSZWNvcmRlciB9IGZyb20gXCIuLi9wYXRjaFwiXG5pbXBvcnQgeyBhc3NlcnRUd2Vha2VkT2JqZWN0IH0gZnJvbSBcIi4uL3R3ZWFrZXIvY29yZVwiXG5pbXBvcnQgeyB0eXBlc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2FycmF5QmFzZWQvYXJyYXlcIlxuaW1wb3J0IHsgdFByb3AgfSBmcm9tIFwiLi4vdHlwZXMvdFByb3BcIlxuaW1wb3J0IHsgdHlwZXNVbmNoZWNrZWQgfSBmcm9tIFwiLi4vdHlwZXMvdXRpbGl0eS91bmNoZWNrZWRcIlxuaW1wb3J0IHsgZmFpbHVyZSwgZ2V0TW9ieFZlcnNpb24sIG1vYng2LCBuYW1lc3BhY2UgfSBmcm9tIFwiLi4vdXRpbHNcIlxuaW1wb3J0IHsgYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlLCBTaW1wbGVBY3Rpb25Db250ZXh0IH0gZnJvbSBcIi4vYWN0aW9uVHJhY2tpbmdNaWRkbGV3YXJlXCJcblxuLyoqXG4gKiBBbiB1bmRvL3JlZG8gZXZlbnQgd2l0aG91dCBhdHRhY2hlZCBzdGF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgVW5kb0V2ZW50V2l0aG91dEF0dGFjaGVkU3RhdGUgPSBVbmRvU2luZ2xlRXZlbnQgfCBVbmRvRXZlbnRHcm91cFxuXG4vKipcbiAqIEFuIHVuZG8vcmVkbyBldmVudC5cbiAqL1xuZXhwb3J0IHR5cGUgVW5kb0V2ZW50ID0gVW5kb0V2ZW50V2l0aG91dEF0dGFjaGVkU3RhdGUgJiB7XG4gIC8qKlxuICAgKiBUaGUgc3RhdGUgc2F2ZWQgYmVmb3JlIHRoZSBldmVudCBhY3Rpb25zIHN0YXJ0ZWQgLyBhZnRlciB0aGUgZXZlbnQgYWN0aW9ucyBmaW5pc2hlZC5cbiAgICovXG4gIGF0dGFjaGVkU3RhdGU6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgc2F2ZWQgYmVmb3JlIHRoZSBldmVudCBhY3Rpb25zIHN0YXJ0ZWQuXG4gICAgICovXG4gICAgYmVmb3JlRXZlbnQ/OiB1bmtub3duXG4gICAgLyoqXG4gICAgICogVGhlIHN0YXRlIHNhdmVkIGFmdGVyIHRoZSBldmVudCBhY3Rpb25zIGZpbmlzaGVkLlxuICAgICAqL1xuICAgIGFmdGVyRXZlbnQ/OiB1bmtub3duXG4gIH1cbn1cblxuLyoqXG4gKiBVbmRvIGV2ZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIFVuZG9FdmVudFR5cGUge1xuICBTaW5nbGUgPSBcInNpbmdsZVwiLFxuICBHcm91cCA9IFwiZ3JvdXBcIixcbn1cblxuLyoqXG4gKiBBbiB1bmRvL3JlZG8gc2luZ2xlIGV2ZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuZG9TaW5nbGVFdmVudCB7XG4gIC8qKlxuICAgKiBFeHByZXNzZXMgdGhpcyBpcyBhIHNpbmdsZSBldmVudC5cbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IFVuZG9FdmVudFR5cGUuU2luZ2xlXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBvYmplY3QgdGhhdCBpbnZva2VkIHRoZSBhY3Rpb24gZnJvbSBpdHMgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFBhdGg6IFBhdGhcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGFjdGlvbiB0aGF0IHdhcyBpbnZva2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBQYXRjaGVzIHdpdGggY2hhbmdlcyBkb25lIGluc2lkZSB0aGUgYWN0aW9uLlxuICAgKiBVc2UgYHJlZG8oKWAgaW4gdGhlIGBVbmRvTWFuYWdlcmAgdG8gYXBwbHkgdGhlbS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGNoZXM6IFJlYWRvbmx5QXJyYXk8UGF0Y2g+XG4gIC8qKlxuICAgKiBQYXRjaGVzIHRvIHVuZG8gdGhlIGNoYW5nZXMgZG9uZSBpbnNpZGUgdGhlIGFjdGlvbi5cbiAgICogVXNlIGB1bmRvKClgIGluIHRoZSBgVW5kb01hbmFnZXJgIHRvIGFwcGx5IHRoZW0uXG4gICAqL1xuICByZWFkb25seSBpbnZlcnNlUGF0Y2hlczogUmVhZG9ubHlBcnJheTxQYXRjaD5cbn1cblxuLyoqXG4gKiBBbiB1bmRvL3JlZG8gZXZlbnQgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5kb0V2ZW50R3JvdXAge1xuICAvKipcbiAgICogRXhwcmVzc2VzIHRoaXMgaXMgYW4gZXZlbnQgZ3JvdXAuXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBVbmRvRXZlbnRUeXBlLkdyb3VwXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBncm91cCAoaWYgYW55KS5cbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICogRXZlbnRzIHRoYXQgY29uZm9ybSB0aGlzIGdyb3VwIChtaWdodCBiZSBzaW5nbGUgZXZlbnRzIG9yIG90aGVyIG5lc3RlZCBncm91cHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzOiBSZWFkb25seUFycmF5PFVuZG9FdmVudFdpdGhvdXRBdHRhY2hlZFN0YXRlPlxufVxuXG5mdW5jdGlvbiB0b1NpbmdsZUV2ZW50cyhcbiAgZXZlbnQ6IFVuZG9FdmVudFdpdGhvdXRBdHRhY2hlZFN0YXRlLFxuICByZXZlcnNlOiBib29sZWFuXG4pOiBSZWFkb25seUFycmF5PFVuZG9TaW5nbGVFdmVudD4ge1xuICBpZiAoZXZlbnQudHlwZSA9PT0gVW5kb0V2ZW50VHlwZS5TaW5nbGUpIHJldHVybiBbZXZlbnRdXG4gIGVsc2Uge1xuICAgIGNvbnN0IGFycmF5OiBVbmRvU2luZ2xlRXZlbnRbXSA9IFtdXG4gICAgZm9yIChjb25zdCBlIG9mIGV2ZW50LmV2ZW50cykge1xuICAgICAgaWYgKHJldmVyc2UpIHtcbiAgICAgICAgYXJyYXkudW5zaGlmdCguLi50b1NpbmdsZUV2ZW50cyhlLCB0cnVlKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5LnB1c2goLi4udG9TaW5nbGVFdmVudHMoZSwgZmFsc2UpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlcbiAgfVxufVxuXG4vKipcbiAqIFN0b3JlIG1vZGVsIGluc3RhbmNlIGZvciB1bmRvL3JlZG8gYWN0aW9ucy5cbiAqIERvIG5vdCBtYW5pcHVsYXRlIGRpcmVjdGx5LCBvdGhlciB0aGF0IGNyZWF0aW5nIGl0LlxuICovXG5AbW9kZWwoYCR7bmFtZXNwYWNlfS9VbmRvU3RvcmVgKVxuZXhwb3J0IGNsYXNzIFVuZG9TdG9yZSBleHRlbmRzIE1vZGVsKHtcbiAgLy8gVE9ETzogYWRkIHByb3BlciB0eXBlIGNoZWNraW5nIHRvIHVuZG8gc3RvcmVcbiAgdW5kb0V2ZW50czogdFByb3AodHlwZXNBcnJheSh0eXBlc1VuY2hlY2tlZDxVbmRvRXZlbnQ+KCkpLCAoKSA9PiBbXSksXG4gIHJlZG9FdmVudHM6IHRQcm9wKHR5cGVzQXJyYXkodHlwZXNVbmNoZWNrZWQ8VW5kb0V2ZW50PigpKSwgKCkgPT4gW10pLFxufSkge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQG1vZGVsQWN0aW9uXG4gIF9jbGVhclVuZG8oKSB7XG4gICAgd2l0aG91dFVuZG8oKCkgPT4ge1xuICAgICAgdGhpcy51bmRvRXZlbnRzLmxlbmd0aCA9IDBcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBtb2RlbEFjdGlvblxuICBfY2xlYXJSZWRvKCkge1xuICAgIHdpdGhvdXRVbmRvKCgpID0+IHtcbiAgICAgIHRoaXMucmVkb0V2ZW50cy5sZW5ndGggPSAwXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAbW9kZWxBY3Rpb25cbiAgX3VuZG8oKSB7XG4gICAgd2l0aG91dFVuZG8oKCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLnVuZG9FdmVudHMucG9wKCkhXG4gICAgICB0aGlzLnJlZG9FdmVudHMucHVzaChldmVudClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIEBtb2RlbEFjdGlvblxuICBfcmVkbygpIHtcbiAgICB3aXRob3V0VW5kbygoKSA9PiB7XG4gICAgICBjb25zdCBldmVudCA9IHRoaXMucmVkb0V2ZW50cy5wb3AoKSFcbiAgICAgIHRoaXMudW5kb0V2ZW50cy5wdXNoKGV2ZW50KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQG1vZGVsQWN0aW9uXG4gIF9hZGRVbmRvKGV2ZW50OiBVbmRvRXZlbnQpIHtcbiAgICB3aXRob3V0VW5kbygoKSA9PiB7XG4gICAgICB0aGlzLnVuZG9FdmVudHMucHVzaChldmVudClcbiAgICAgIC8vIG9uY2UgYW4gdW5kbyBldmVudCBpcyBhZGRlZCByZWRvIHF1ZXVlIGlzIG5vIGxvbmdlciB2YWxpZFxuICAgICAgdGhpcy5yZWRvRXZlbnRzLmxlbmd0aCA9IDBcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfZ3JvdXBTdGFjazogVW5kb0V2ZW50R3JvdXBbXSA9IFtdXG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIF9hZGRVbmRvVG9QYXJlbnRHcm91cChwYXJlbnRHcm91cDogVW5kb0V2ZW50R3JvdXAsIGV2ZW50OiBVbmRvRXZlbnRXaXRob3V0QXR0YWNoZWRTdGF0ZSkge1xuICAgIDsocGFyZW50R3JvdXAuZXZlbnRzIGFzIFVuZG9FdmVudFdpdGhvdXRBdHRhY2hlZFN0YXRlW10pLnB1c2goZXZlbnQpXG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgZ2V0IF9jdXJyZW50R3JvdXAoKTogVW5kb0V2ZW50R3JvdXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9ncm91cFN0YWNrW3RoaXMuX2dyb3VwU3RhY2subGVuZ3RoIC0gMV1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBfc3RhcnRHcm91cChcbiAgICBncm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzdGFydFJ1bm5pbmc6IGJvb2xlYW4sXG4gICAgb3B0aW9uczogVW5kb01pZGRsZXdhcmVPcHRpb25zPHVua25vd24+IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGxldCBydW5uaW5nID0gZmFsc2VcbiAgICBsZXQgZW5kZWQgPSBmYWxzZVxuICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGhpcy5fY3VycmVudEdyb3VwXG5cbiAgICBjb25zdCBncm91cDogVW5kb0V2ZW50R3JvdXAgPSB7XG4gICAgICB0eXBlOiBVbmRvRXZlbnRUeXBlLkdyb3VwLFxuICAgICAgZ3JvdXBOYW1lLFxuICAgICAgZXZlbnRzOiBbXSxcbiAgICB9XG5cbiAgICBjb25zdCBhdHRhY2hlZFN0YXRlQmVmb3JlRXZlbnQgPSBwYXJlbnRHcm91cCA/IHVuZGVmaW5lZCA6IG9wdGlvbnM/LmF0dGFjaGVkU3RhdGU/LnNhdmUoKVxuXG4gICAgY29uc3QgYXBpID0ge1xuICAgICAgcGF1c2U6ICgpID0+IHtcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShcImNhbm5vdCBwYXVzZSBhIGdyb3VwIHdoZW4gaXQgaXMgYWxyZWFkeSBlbmRlZFwiKVxuICAgICAgICB9XG4gICAgICAgIGlmICghcnVubmluZykge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoXCJjYW5ub3QgcGF1c2UgYSBncm91cCB3aGVuIGl0IGlzIG5vdCBydW5uaW5nXCIpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCAhPT0gZ3JvdXApIHtcbiAgICAgICAgICB0aHJvdyBmYWlsdXJlKFwiZ3JvdXAgb3V0IG9mIG9yZGVyXCIpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ3JvdXBTdGFjay5wb3AoKVxuICAgICAgICBydW5uaW5nID0gZmFsc2VcbiAgICAgIH0sXG4gICAgICByZXN1bWU6ICgpID0+IHtcbiAgICAgICAgaWYgKGVuZGVkKSB7XG4gICAgICAgICAgdGhyb3cgZmFpbHVyZShcImNhbm5vdCByZXN1bWUgYSBncm91cCB3aGVuIGl0IGlzIGFscmVhZHkgZW5kZWRcIilcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVubmluZykge1xuICAgICAgICAgIHRocm93IGZhaWx1cmUoXCJjYW5ub3QgcmVzdW1lIGEgZ3JvdXAgd2hlbiBpdCBpcyBhbHJlYWR5IHJ1bm5pbmdcIilcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ncm91cFN0YWNrLnB1c2goZ3JvdXApXG4gICAgICAgIHJ1bm5pbmcgPSB0cnVlXG4gICAgICB9LFxuICAgICAgZW5kOiAoKSA9PiB7XG4gICAgICAgIGlmIChydW5uaW5nKSB7XG4gICAgICAgICAgYXBpLnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgICBlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKHBhcmVudEdyb3VwKSB7XG4gICAgICAgICAgdGhpcy5fYWRkVW5kb1RvUGFyZW50R3JvdXAocGFyZW50R3JvdXAsIGdyb3VwKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2FkZFVuZG8oe1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBhdHRhY2hlZFN0YXRlOiB7XG4gICAgICAgICAgICAgIGJlZm9yZUV2ZW50OiBhdHRhY2hlZFN0YXRlQmVmb3JlRXZlbnQsXG4gICAgICAgICAgICAgIGFmdGVyRXZlbnQ6IG9wdGlvbnM/LmF0dGFjaGVkU3RhdGU/LnNhdmUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRSdW5uaW5nKSB7XG4gICAgICBhcGkucmVzdW1lKClcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpXG4gIH1cbn1cblxuLyoqXG4gKiBNYW5hZ2VyIGNsYXNzIHJldHVybmVkIGJ5IGB1bmRvTWlkZGxld2FyZWAgdGhhdCBhbGxvd3MgeW91IHRvIHBlcmZvcm0gdW5kby9yZWRvIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmRvTWFuYWdlciB7XG4gIC8qKlxuICAgKiBUaGUgc3RvcmUgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3RvcmUgdW5kby9yZWRvIGFjdGlvbiBldmVudHMuXG4gICAqL1xuICByZWFkb25seSBzdG9yZTogVW5kb1N0b3JlXG5cbiAgLyoqXG4gICAqIFRoZSB1bmRvIHN0YWNrLCB3aGVyZSB0aGUgZmlyc3Qgb3BlcmF0aW9uIHRvIHVuZG8gd2lsbCBiZSB0aGUgbGFzdCBvZiB0aGUgYXJyYXkuXG4gICAqIERvIG5vdCBtYW5pcHVsYXRlIHRoaXMgYXJyYXkgZGlyZWN0bHkuXG4gICAqL1xuICBAY29tcHV0ZWRcbiAgZ2V0IHVuZG9RdWV1ZSgpOiBSZWFkb25seUFycmF5PFVuZG9FdmVudD4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnVuZG9FdmVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVkbyBzdGFjaywgd2hlcmUgdGhlIGZpcnN0IG9wZXJhdGlvbiB0byByZWRvIHdpbGwgYmUgdGhlIGxhc3Qgb2YgdGhlIGFycmF5LlxuICAgKiBEbyBub3QgbWFuaXB1bGF0ZSB0aGlzIGFycmF5IGRpcmVjdGx5LlxuICAgKi9cbiAgQGNvbXB1dGVkXG4gIGdldCByZWRvUXVldWUoKTogUmVhZG9ubHlBcnJheTxVbmRvRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5yZWRvRXZlbnRzXG4gIH1cblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB1bmRvIGFjdGlvbnMgYXZhaWxhYmxlLlxuICAgKi9cbiAgQGNvbXB1dGVkXG4gIGdldCB1bmRvTGV2ZWxzKCkge1xuICAgIHJldHVybiB0aGlzLnVuZG9RdWV1ZS5sZW5ndGhcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB1bmRvIGNhbiBiZSBwZXJmb3JtZWQgKGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bmRvIGFjdGlvbiBhdmFpbGFibGUpLlxuICAgKi9cbiAgQGNvbXB1dGVkXG4gIGdldCBjYW5VbmRvKCkge1xuICAgIHJldHVybiB0aGlzLnVuZG9MZXZlbHMgPiAwXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSB1bmRvIHF1ZXVlLlxuICAgKi9cbiAgQGFjdGlvblxuICBjbGVhclVuZG8oKSB7XG4gICAgdGhpcy5zdG9yZS5fY2xlYXJVbmRvKClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlZG8gYWN0aW9ucyBhdmFpbGFibGUuXG4gICAqL1xuICBAY29tcHV0ZWRcbiAgZ2V0IHJlZG9MZXZlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1F1ZXVlLmxlbmd0aFxuICB9XG5cbiAgLyoqXG4gICAqIElmIHJlZG8gY2FuIGJlIHBlcmZvcm1lZCAoaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJlZG8gYWN0aW9uIGF2YWlsYWJsZSlcbiAgICovXG4gIEBjb21wdXRlZFxuICBnZXQgY2FuUmVkbygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvTGV2ZWxzID4gMFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgcmVkbyBxdWV1ZS5cbiAgICovXG4gIEBhY3Rpb25cbiAgY2xlYXJSZWRvKCkge1xuICAgIHRoaXMuc3RvcmUuX2NsZWFyUmVkbygpXG4gIH1cblxuICAvKipcbiAgICogVW5kb2VzIHRoZSBsYXN0IGFjdGlvbi5cbiAgICogV2lsbCB0aHJvdyBpZiB0aGVyZSBpcyBubyBhY3Rpb24gdG8gdW5kby5cbiAgICovXG4gIEBhY3Rpb25cbiAgdW5kbygpIHtcbiAgICBpZiAoIXRoaXMuY2FuVW5kbykge1xuICAgICAgdGhyb3cgZmFpbHVyZShcIm5vdGhpbmcgdG8gdW5kb1wiKVxuICAgIH1cbiAgICBjb25zdCBldmVudCA9IHRoaXMudW5kb1F1ZXVlW3RoaXMudW5kb1F1ZXVlLmxlbmd0aCAtIDFdXG5cbiAgICB3aXRob3V0VW5kbygoKSA9PiB7XG4gICAgICB0b1NpbmdsZUV2ZW50cyhldmVudCwgdHJ1ZSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBhcHBseVBhdGNoZXModGhpcy5zdWJ0cmVlUm9vdCwgZS5pbnZlcnNlUGF0Y2hlcywgdHJ1ZSlcbiAgICAgIH0pXG5cbiAgICAgIC8vIHJlc3RvcmUgdGhlIGF0dGFjaGVkIHN0YXRlIGJlZm9yZSB0aGUgb3BlcmF0aW9uIHdhcyBtYWRlXG4gICAgICBpZiAoZXZlbnQuYXR0YWNoZWRTdGF0ZT8uYmVmb3JlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zPy5hdHRhY2hlZFN0YXRlPy5yZXN0b3JlKGV2ZW50LmF0dGFjaGVkU3RhdGUuYmVmb3JlRXZlbnQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuc3RvcmUuX3VuZG8oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZG9lcyB0aGUgcHJldmlvdXMgYWN0aW9uLlxuICAgKiBXaWxsIHRocm93IGlmIHRoZXJlIGlzIG5vIGFjdGlvbiB0byByZWRvLlxuICAgKi9cbiAgQGFjdGlvblxuICByZWRvKCkge1xuICAgIGlmICghdGhpcy5jYW5SZWRvKSB7XG4gICAgICB0aHJvdyBmYWlsdXJlKFwibm90aGluZyB0byByZWRvXCIpXG4gICAgfVxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5yZWRvUXVldWVbdGhpcy5yZWRvUXVldWUubGVuZ3RoIC0gMV1cblxuICAgIHdpdGhvdXRVbmRvKCgpID0+IHtcbiAgICAgIHRvU2luZ2xlRXZlbnRzKGV2ZW50LCBmYWxzZSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICBhcHBseVBhdGNoZXModGhpcy5zdWJ0cmVlUm9vdCwgZS5wYXRjaGVzKVxuICAgICAgfSlcblxuICAgICAgLy8gcmVzdG9yZSB0aGUgYXR0YWNoZWQgc3RhdGUgYWZ0ZXIgdGhlIG9wZXJhdGlvbiB3YXMgbWFkZVxuICAgICAgaWYgKGV2ZW50LmF0dGFjaGVkU3RhdGU/LmFmdGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zPy5hdHRhY2hlZFN0YXRlPy5yZXN0b3JlKGV2ZW50LmF0dGFjaGVkU3RhdGUuYWZ0ZXJFdmVudClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5zdG9yZS5fcmVkbygpXG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIHVuZG8gbWlkZGxld2FyZS5cbiAgICovXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5kaXNwb3NlcigpXG4gIH1cblxuICBwcml2YXRlIF9pc1VuZG9SZWNvcmRpbmdEaXNhYmxlZCA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIFJldHVybnMgaWYgdW5kbyByZWNvcmRpbmcgaXMgY3VycmVudGx5IGRpc2FibGVkIG9yIG5vdCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGBVbmRvTWFuYWdlcmAuXG4gICAqL1xuICBnZXQgaXNVbmRvUmVjb3JkaW5nRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVW5kb1JlY29yZGluZ0Rpc2FibGVkXG4gIH1cblxuICAvKipcbiAgICogU2tpcHMgdGhlIHVuZG8gcmVjb3JkaW5nIG1lY2hhbmlzbSBmb3IgdGhlIGNvZGUgYmxvY2sgdGhhdCBnZXRzIHJ1biBzeW5jaHJvbm91c2x5IGluc2lkZS5cbiAgICpcbiAgICogQHR5cGVwYXJhbSBUIENvZGUgYmxvY2sgcmV0dXJuIHR5cGUuXG4gICAqIEBwYXJhbSBmbiBDb2RlIGJsb2NrIHRvIHJ1bi5cbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBjb2RlIGJsb2NrLlxuICAgKi9cbiAgd2l0aG91dFVuZG88VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgICBjb25zdCBzYXZlZFVuZG9EaXNhYmxlZCA9IHRoaXMuX2lzVW5kb1JlY29yZGluZ0Rpc2FibGVkXG4gICAgdGhpcy5faXNVbmRvUmVjb3JkaW5nRGlzYWJsZWQgPSB0cnVlXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbigpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2lzVW5kb1JlY29yZGluZ0Rpc2FibGVkID0gc2F2ZWRVbmRvRGlzYWJsZWRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBncm91cCB0aGF0IGNhbiBiZSBjb250aW51ZWQgbXVsdGlwbGUgdGltZXMgYW5kIHRoZW4gZW5kZWQuXG4gICAqIEBwYXJhbSBncm91cE5hbWUgT3B0aW9uYWwgZ3JvdXAgbmFtZS5cbiAgICogQHJldHVybnMgQW4gQVBJIHRvIGNvbnRpbnVlL2VuZCB0aGUgZ3JvdXAuXG4gICAqL1xuICBjcmVhdGVHcm91cChncm91cE5hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBncm91cCA9IHRoaXMuc3RvcmUuX3N0YXJ0R3JvdXAoZ3JvdXBOYW1lLCBmYWxzZSwgdGhpcy5vcHRpb25zKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRpbnVlPFQ+KGZuOiAoKSA9PiBUKTogVCB7XG4gICAgICAgIGdyb3VwLnJlc3VtZSgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGZuKClcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBncm91cC5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGVuZCgpIHtcbiAgICAgICAgZ3JvdXAuZW5kKClcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeW5jaHJvbm91cyBjb2RlIGJsb2NrIGFzIGFuIHVuZG8gZ3JvdXAuXG4gICAqIE5vdGUgdGhhdCBuZXN0ZWQgZ3JvdXBzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lIEdyb3VwIG5hbWUuXG4gICAqIEBwYXJhbSBmbiBDb2RlIGJsb2NrLlxuICAgKiBAcmV0dXJucyBDb2RlIGJsb2NrIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHdpdGhHcm91cDxUPihncm91cE5hbWU6IHN0cmluZywgZm46ICgpID0+IFQpOiBUXG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBzeW5jaHJvbm91cyBjb2RlIGJsb2NrIGFzIGFuIHVuZG8gZ3JvdXAuXG4gICAqIE5vdGUgdGhhdCBuZXN0ZWQgZ3JvdXBzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gQ29kZSBibG9jay5cbiAgICogQHJldHVybnMgQ29kZSBibG9jayByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB3aXRoR3JvdXA8VD4oZm46ICgpID0+IFQpOiBUXG5cbiAgd2l0aEdyb3VwPFQ+KGFyZzE6IGFueSwgYXJnMj86IGFueSk6IFQge1xuICAgIGxldCBncm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGxldCBmbjogKCkgPT4gVFxuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZ3JvdXBOYW1lID0gYXJnMVxuICAgICAgZm4gPSBhcmcyXG4gICAgfSBlbHNlIHtcbiAgICAgIGZuID0gYXJnMVxuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5zdG9yZS5fc3RhcnRHcm91cChncm91cE5hbWUsIHRydWUsIHRoaXMub3B0aW9ucylcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZ3JvdXAuZW5kKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbiBhc3luY2hyb25vdXMgY29kZSBibG9jayBhcyBhbiB1bmRvIGdyb3VwLlxuICAgKiBOb3RlIHRoYXQgbmVzdGVkIGdyb3VwcyBhcmUgYWxsb3dlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyb3VwTmFtZSBHcm91cCBuYW1lLlxuICAgKiBAcGFyYW0gZm4gRmxvdyBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgRmxvdyBmdW5jdGlvbiByZXR1cm4gdmFsdWUuXG4gICAqL1xuICB3aXRoR3JvdXBGbG93PFI+KGdyb3VwTmFtZTogc3RyaW5nLCBmbjogKCkgPT4gR2VuZXJhdG9yPGFueSwgUiwgYW55Pik6IFByb21pc2U8Uj5cblxuICAvKipcbiAgICogUnVucyBhbiBhc3luY2hyb25vdXMgY29kZSBibG9jayBhcyBhbiB1bmRvIGdyb3VwLlxuICAgKiBOb3RlIHRoYXQgbmVzdGVkIGdyb3VwcyBhcmUgYWxsb3dlZC5cbiAgICpcbiAgICogQHBhcmFtIGZuIEZsb3cgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIEZsb3cgZnVuY3Rpb24gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgd2l0aEdyb3VwRmxvdzxSPihmbjogKCkgPT4gR2VuZXJhdG9yPGFueSwgUiwgYW55Pik6IFByb21pc2U8Uj5cblxuICB3aXRoR3JvdXBGbG93PFI+KGFyZzE6IGFueSwgYXJnMj86IGFueSk6IFByb21pc2U8Uj4ge1xuICAgIGxldCBncm91cE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgIGxldCBmbjogKCkgPT4gR2VuZXJhdG9yPGFueSwgUiwgYW55PlxuICAgIGlmICh0eXBlb2YgYXJnMSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZ3JvdXBOYW1lID0gYXJnMVxuICAgICAgZm4gPSBhcmcyXG4gICAgfSBlbHNlIHtcbiAgICAgIGZuID0gYXJnMVxuICAgIH1cblxuICAgIGNvbnN0IGdlbiA9IGZuKClcblxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5zdG9yZS5fc3RhcnRHcm91cChncm91cE5hbWUsIGZhbHNlLCB0aGlzLm9wdGlvbnMpXG5cbiAgICAvLyB1c2UgYm91bmQgZnVuY3Rpb25zIHRvIGZpeCBlczYgY29tcGlsYXRpb25cbiAgICBjb25zdCBnZW5OZXh0ID0gZ2VuLm5leHQuYmluZChnZW4pXG4gICAgY29uc3QgZ2VuVGhyb3cgPSBnZW4udGhyb3chLmJpbmQoZ2VuKVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPFI+KGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIG9uRnVsZmlsbGVkKHJlczogYW55KTogdm9pZCB7XG4gICAgICAgIGdyb3VwLnJlc3VtZSgpXG4gICAgICAgIGxldCByZXRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBnZW5OZXh0KHJlcylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGdyb3VwLmVuZCgpXG4gICAgICAgICAgcmVqZWN0KGUpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBncm91cC5wYXVzZSgpXG4gICAgICAgIG5leHQocmV0KVxuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvblJlamVjdGVkKGVycjogYW55KTogdm9pZCB7XG4gICAgICAgIGdyb3VwLnJlc3VtZSgpXG4gICAgICAgIGxldCByZXRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXQgPSBnZW5UaHJvdyhlcnIpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBncm91cC5lbmQoKVxuICAgICAgICAgIHJlamVjdChlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXAucGF1c2UoKVxuICAgICAgICBuZXh0KHJldClcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbmV4dChyZXQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAocmV0ICYmIHR5cGVvZiByZXQudGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgLy8gYW4gYXN5bmMgaXRlcmF0b3JcbiAgICAgICAgICByZXQudGhlbihuZXh0LCByZWplY3QpXG4gICAgICAgIH0gZWxzZSBpZiAocmV0LmRvbmUpIHtcbiAgICAgICAgICAvLyBkb25lXG4gICAgICAgICAgZ3JvdXAuZW5kKClcbiAgICAgICAgICByZXNvbHZlKHJldC52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb250aW51ZVxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZXQudmFsdWUpLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgb25GdWxmaWxsZWQodW5kZWZpbmVkKSAvLyBraWNrIG9mZiB0aGUgcHJvY2Vzc1xuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgYFVuZG9NYW5hZ2VyYC5cbiAgICogRG8gbm90IHVzZSBkaXJlY3RseSwgdXNlIGB1bmRvTWlkZGxld2FyZWAgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIGRpc3Bvc2VyXG4gICAqIEBwYXJhbSBzdWJ0cmVlUm9vdFxuICAgKiBAcGFyYW0gW3N0b3JlXVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwb3NlcjogQWN0aW9uTWlkZGxld2FyZURpc3Bvc2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3VidHJlZVJvb3Q6IG9iamVjdCxcbiAgICBzdG9yZTogVW5kb1N0b3JlIHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogVW5kb01pZGRsZXdhcmVPcHRpb25zPHVua25vd24+IHwgdW5kZWZpbmVkXG4gICkge1xuICAgIGlmIChnZXRNb2J4VmVyc2lvbigpID49IDYpIHtcbiAgICAgIG1vYng2Lm1ha2VPYnNlcnZhYmxlKHRoaXMpXG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlID8/IG5ldyBVbmRvU3RvcmUoe30pXG4gIH1cbn1cblxuLyoqXG4gKiBVbmRvIG1pZGRsZXdhcmUgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbmRvTWlkZGxld2FyZU9wdGlvbnM8Uz4ge1xuICBhdHRhY2hlZFN0YXRlPzoge1xuICAgIHNhdmUoKTogU1xuICAgIHJlc3RvcmUoczogUyk6IHZvaWRcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gdW5kbyBtaWRkbGV3YXJlLlxuICpcbiAqIEBwYXJhbSBzdWJ0cmVlUm9vdCBTdWJ0cmVlIHJvb3QgdGFyZ2V0IG9iamVjdC5cbiAqIEBwYXJhbSBzdG9yZSBPcHRpb25hbCBgVW5kb1N0b3JlYCB3aGVyZSB0byBzdG9yZSB0aGUgdW5kby9yZWRvIHF1ZXVlcy4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG9cbiAqIHN0b3JlIHN1Y2ggcXVldWVzIHNvbWV3aGVyZSBpbiB5b3VyIG1vZGVscy4gSWYgbm9uZSBpcyBwcm92aWRlZCBpdCB3aWxsIHJlc2lkZSBpbiBtZW1vcnkuXG4gKiBAcGFyYW0gb3B0aW9ucyBFeHRyYSBvcHRpb25zLCBzdWNoIGFzIGhvdyB0byBzYXZlIC8gcmVzdG9yZSBjZXJ0YWluIHNuYXBzaG90IG9mIHRoZSBzdGF0ZSB0byBiZSByZXN0b3JlZCB3aGVuIHVuZG9pbmcvcmVkb2luZy5cbiAqIEByZXR1cm5zIEFuIGBVbmRvTWFuYWdlcmAgd2hpY2ggYWxsb3dzIHlvdSB0byBkbyB0aGUgbWFuYWdlIHRoZSB1bmRvL3JlZG8gb3BlcmF0aW9ucyBhbmQgZGlzcG9zZSBvZiB0aGUgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZG9NaWRkbGV3YXJlPFM+KFxuICBzdWJ0cmVlUm9vdDogb2JqZWN0LFxuICBzdG9yZT86IFVuZG9TdG9yZSxcbiAgb3B0aW9ucz86IFVuZG9NaWRkbGV3YXJlT3B0aW9uczxTPlxuKTogVW5kb01hbmFnZXIge1xuICBhc3NlcnRUd2Vha2VkT2JqZWN0KHN1YnRyZWVSb290LCBcInN1YnRyZWVSb290XCIpXG5cbiAgbGV0IG1hbmFnZXI6IFVuZG9NYW5hZ2VyXG5cbiAgaW50ZXJmYWNlIFBhdGNoUmVjb3JkZXJEYXRhIHtcbiAgICByZWNvcmRlcjogUGF0Y2hSZWNvcmRlclxuICAgIHJlY29yZGVyU3RhY2s6IG51bWJlclxuICAgIHVuZG9Sb290Q29udGV4dDogU2ltcGxlQWN0aW9uQ29udGV4dFxuICAgIGdyb3VwOiBVbmRvRXZlbnRHcm91cCB8IHVuZGVmaW5lZFxuICAgIGF0dGFjaGVkU3RhdGVCZWZvcmVFdmVudDogUyB8IHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3QgcGF0Y2hSZWNvcmRlclN5bWJvbCA9IFN5bWJvbChcInBhdGNoUmVjb3JkZXJcIilcblxuICBmdW5jdGlvbiBpbml0UGF0Y2hSZWNvcmRlcihjdHg6IFNpbXBsZUFjdGlvbkNvbnRleHQpIHtcbiAgICBjb25zdCBncm91cCA9IG1hbmFnZXIuc3RvcmUuX2N1cnJlbnRHcm91cFxuXG4gICAgY29uc3QgcGF0Y2hSZWNvcmRlckRhdGE6IFBhdGNoUmVjb3JkZXJEYXRhID0ge1xuICAgICAgcmVjb3JkZXI6IHBhdGNoUmVjb3JkZXIoc3VidHJlZVJvb3QsIHtcbiAgICAgICAgcmVjb3JkaW5nOiBmYWxzZSxcbiAgICAgICAgZmlsdGVyOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICFfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQgJiYgIW1hbmFnZXIuaXNVbmRvUmVjb3JkaW5nRGlzYWJsZWRcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgcmVjb3JkZXJTdGFjazogMCxcbiAgICAgIHVuZG9Sb290Q29udGV4dDogY3R4LFxuICAgICAgZ3JvdXAsXG5cbiAgICAgIGF0dGFjaGVkU3RhdGVCZWZvcmVFdmVudDogb3B0aW9ucz8uYXR0YWNoZWRTdGF0ZT8uc2F2ZSgpLFxuICAgIH1cblxuICAgIGN0eC5yb290Q29udGV4dC5kYXRhW3BhdGNoUmVjb3JkZXJTeW1ib2xdID0gcGF0Y2hSZWNvcmRlckRhdGFcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eDogU2ltcGxlQWN0aW9uQ29udGV4dCk6IFBhdGNoUmVjb3JkZXJEYXRhIHtcbiAgICByZXR1cm4gY3R4LnJvb3RDb250ZXh0LmRhdGFbcGF0Y2hSZWNvcmRlclN5bWJvbF1cbiAgfVxuXG4gIGNvbnN0IG1pZGRsZXdhcmVEaXNwb3NlciA9IGFjdGlvblRyYWNraW5nTWlkZGxld2FyZShzdWJ0cmVlUm9vdCwge1xuICAgIG9uU3RhcnQoY3R4KSB7XG4gICAgICBpZiAoIWdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eCkpIHtcbiAgICAgICAgaW5pdFBhdGNoUmVjb3JkZXIoY3R4KVxuICAgICAgfVxuICAgIH0sXG4gICAgb25SZXN1bWUoY3R4KSB7XG4gICAgICBjb25zdCBwYXRjaFJlY29yZGVyRGF0YSA9IGdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eClcbiAgICAgIHBhdGNoUmVjb3JkZXJEYXRhLnJlY29yZGVyU3RhY2srK1xuICAgICAgcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXIucmVjb3JkaW5nID0gcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXJTdGFjayA+IDBcbiAgICB9LFxuICAgIG9uU3VzcGVuZChjdHgpIHtcbiAgICAgIGNvbnN0IHBhdGNoUmVjb3JkZXJEYXRhID0gZ2V0UGF0Y2hSZWNvcmRlckRhdGEoY3R4KVxuICAgICAgcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXJTdGFjay0tXG4gICAgICBwYXRjaFJlY29yZGVyRGF0YS5yZWNvcmRlci5yZWNvcmRpbmcgPSBwYXRjaFJlY29yZGVyRGF0YS5yZWNvcmRlclN0YWNrID4gMFxuICAgIH0sXG4gICAgb25GaW5pc2goY3R4KSB7XG4gICAgICBjb25zdCBwYXRjaFJlY29yZGVyRGF0YSA9IGdldFBhdGNoUmVjb3JkZXJEYXRhKGN0eClcbiAgICAgIGlmIChwYXRjaFJlY29yZGVyRGF0YSAmJiBwYXRjaFJlY29yZGVyRGF0YS51bmRvUm9vdENvbnRleHQgPT09IGN0eCkge1xuICAgICAgICBjb25zdCBwYXRjaFJlY29yZGVyID0gcGF0Y2hSZWNvcmRlckRhdGEucmVjb3JkZXJcblxuICAgICAgICBpZiAocGF0Y2hSZWNvcmRlci5ldmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGNoZXM6IFBhdGNoW10gPSBbXVxuICAgICAgICAgIGNvbnN0IGludmVyc2VQYXRjaGVzOiBQYXRjaFtdID0gW11cblxuICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgcGF0Y2hSZWNvcmRlci5ldmVudHMpIHtcbiAgICAgICAgICAgIHBhdGNoZXMucHVzaCguLi5ldmVudC5wYXRjaGVzKVxuICAgICAgICAgICAgaW52ZXJzZVBhdGNoZXMucHVzaCguLi5ldmVudC5pbnZlcnNlUGF0Y2hlcylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICAgIHR5cGU6IFVuZG9FdmVudFR5cGUuU2luZ2xlLFxuICAgICAgICAgICAgdGFyZ2V0UGF0aDogZmFzdEdldFJvb3RQYXRoKGN0eC50YXJnZXQpLnBhdGgsXG4gICAgICAgICAgICBhY3Rpb25OYW1lOiBjdHguYWN0aW9uTmFtZSxcbiAgICAgICAgICAgIHBhdGNoZXMsXG4gICAgICAgICAgICBpbnZlcnNlUGF0Y2hlcyxcbiAgICAgICAgICB9IGFzIGNvbnN0XG5cbiAgICAgICAgICBjb25zdCBwYXJlbnRHcm91cCA9IHBhdGNoUmVjb3JkZXJEYXRhLmdyb3VwXG5cbiAgICAgICAgICBpZiAocGFyZW50R3JvdXApIHtcbiAgICAgICAgICAgIG1hbmFnZXIuc3RvcmUuX2FkZFVuZG9Ub1BhcmVudEdyb3VwKHBhcmVudEdyb3VwLCBldmVudClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFuYWdlci5zdG9yZS5fYWRkVW5kbyh7XG4gICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICBhdHRhY2hlZFN0YXRlOiB7XG4gICAgICAgICAgICAgICAgYmVmb3JlRXZlbnQ6IHBhdGNoUmVjb3JkZXJEYXRhLmF0dGFjaGVkU3RhdGVCZWZvcmVFdmVudCxcbiAgICAgICAgICAgICAgICBhZnRlckV2ZW50OiBvcHRpb25zPy5hdHRhY2hlZFN0YXRlPy5zYXZlKCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBhdGNoUmVjb3JkZXIuZGlzcG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcblxuICBtYW5hZ2VyID0gbmV3IFVuZG9NYW5hZ2VyKG1pZGRsZXdhcmVEaXNwb3Nlciwgc3VidHJlZVJvb3QsIHN0b3JlLCBvcHRpb25zKVxuICByZXR1cm4gbWFuYWdlclxufVxuXG5sZXQgX2lzR2xvYmFsVW5kb1JlY29yZGluZ0Rpc2FibGVkID0gZmFsc2VcblxuLyoqXG4gKiBSZXR1cm5zIGlmIHRoZSB1bmRvIHJlY29yZGluZyBtZWNoYW5pc20gaXMgY3VycmVudGx5IGRpc2FibGVkLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBjdXJyZW50bHkgZGlzYWJsZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQoKSB7XG4gIHJldHVybiBfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWRcbn1cblxuLyoqXG4gKiBHbG9iYWxseSBza2lwcyB0aGUgdW5kbyByZWNvcmRpbmcgbWVjaGFuaXNtIGZvciB0aGUgY29kZSBibG9jayB0aGF0IGdldHMgcnVuIHN5bmNocm9ub3VzbHkgaW5zaWRlLlxuICogQ29uc2lkZXIgdXNpbmcgdGhlIGB3aXRob3V0VW5kb2AgbWV0aG9kIG9mIGEgcGFydGljdWxhciBgVW5kb01hbmFnZXJgIGluc3RlYWQuXG4gKlxuICogQHR5cGVwYXJhbSBUIENvZGUgYmxvY2sgcmV0dXJuIHR5cGUuXG4gKiBAcGFyYW0gZm4gQ29kZSBibG9jayB0byBydW4uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0VW5kbzxUPihmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBzYXZlZFVuZG9EaXNhYmxlZCA9IF9pc0dsb2JhbFVuZG9SZWNvcmRpbmdEaXNhYmxlZFxuICBfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQgPSB0cnVlXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKClcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXNHbG9iYWxVbmRvUmVjb3JkaW5nRGlzYWJsZWQgPSBzYXZlZFVuZG9EaXNhYmxlZFxuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTBDWTtVQUFBOzs7QUFHWixHQUhZO0FBbURaLHdCQUNFLE9BQ0E7TUFFSSxNQUFNLFNBQVMsY0FBYztXQUFlLENBQUMsS0FBSztBQUFBLE9BQ2pEO1VBQ0csUUFBMkI7ZUFDdEIsS0FBSyxNQUFNLFFBQVE7VUFDeEIsU0FBUztjQUNMLFFBQVEsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQUEsYUFDbkM7Y0FDQyxLQUFLLEdBQUcsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUFBOztXQUduQztBQUFBO0FBRVg7SUFPYSxZQUFiLE1BQWEsbUJBQWtCLE1BQU07QUFBQSxFQUVuQyxZQUFZLE1BQU0sV0FBVyxnQkFBMkIsR0FBRyxNQUFNLEVBQUU7QUFBQSxFQUNuRSxZQUFZLE1BQU0sV0FBVyxnQkFBMkIsR0FBRyxNQUFNLEVBQUU7Q0FDcEU7RUFKRDtBQUFBO0FBMkRVLHVDQUFnQzs7RUFsRHhDO2dCQUNjO1dBQ0wsV0FBVyxTQUFTO0FBQUEsS0FDMUI7QUFBQTtFQU9IO2dCQUNjO1dBQ0wsV0FBVyxTQUFTO0FB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
@@ -0,0 +1,25 @@
1
+ import { modelIdKey } from "../model/metadata.mjs";
2
+ import { isModel } from "../model/utils.mjs";
3
+ function rootPathToTargetPathIds(rootPath) {
4
+ var _a;
5
+ const targetPathIds = [];
6
+ for (let i = 0; i < rootPath.path.length; i++) {
7
+ const targetObj = rootPath.pathObjects[i + 1];
8
+ const targetObjId = isModel(targetObj) ? (_a = targetObj[modelIdKey]) != null ? _a : null : null;
9
+ targetPathIds.push(targetObjId);
10
+ }
11
+ return targetPathIds;
12
+ }
13
+ function pathToTargetPathIds(root, path) {
14
+ var _a;
15
+ const targetPathIds = [];
16
+ let current = root;
17
+ for (let i = 0; i < path.length; i++) {
18
+ current = current[path[i]];
19
+ const targetObjId = isModel(current) ? (_a = current[modelIdKey]) != null ? _a : null : null;
20
+ targetPathIds.push(targetObjId);
21
+ }
22
+ return targetPathIds;
23
+ }
24
+ export { pathToTargetPathIds, rootPathToTargetPathIds };
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMubWpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uTWlkZGxld2FyZXMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWxJZEtleSB9IGZyb20gXCIuLi9tb2RlbC9tZXRhZGF0YVwiXG5pbXBvcnQgeyBpc01vZGVsIH0gZnJvbSBcIi4uL21vZGVsL3V0aWxzXCJcbmltcG9ydCB0eXBlIHsgUm9vdFBhdGggfSBmcm9tIFwiLi4vcGFyZW50L3BhdGhcIlxuaW1wb3J0IHR5cGUgeyBQYXRoIH0gZnJvbSBcIi4uL3BhcmVudC9wYXRoVHlwZXNcIlxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcm9vdFBhdGhUb1RhcmdldFBhdGhJZHMocm9vdFBhdGg6IFJvb3RQYXRoPGFueT4pOiAoc3RyaW5nIHwgbnVsbClbXSB7XG4gIGNvbnN0IHRhcmdldFBhdGhJZHM6IChzdHJpbmcgfCBudWxsKVtdID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvb3RQYXRoLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB0YXJnZXRPYmogPSByb290UGF0aC5wYXRoT2JqZWN0c1tpICsgMV0gLy8gZmlyc3QgaXMgcm9vdCwgd2UgZG9uJ3QgY2FyZSBhYm91dCBpdHMgSURcbiAgICBjb25zdCB0YXJnZXRPYmpJZCA9IGlzTW9kZWwodGFyZ2V0T2JqKSA/IHRhcmdldE9ialttb2RlbElkS2V5XSA/PyBudWxsIDogbnVsbFxuICAgIHRhcmdldFBhdGhJZHMucHVzaCh0YXJnZXRPYmpJZClcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRQYXRoSWRzXG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoVG9UYXJnZXRQYXRoSWRzKHJvb3Q6IGFueSwgcGF0aDogUGF0aCk6IChzdHJpbmcgfCBudWxsKVtdIHtcbiAgY29uc3QgdGFyZ2V0UGF0aElkczogKHN0cmluZyB8IG51bGwpW10gPSBbXVxuICBsZXQgY3VycmVudCA9IHJvb3QgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcm9vdCBJRFxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhbaV1dXG4gICAgY29uc3QgdGFyZ2V0T2JqSWQgPSBpc01vZGVsKGN1cnJlbnQpID8gY3VycmVudFttb2RlbElkS2V5XSA/PyBudWxsIDogbnVsbFxuICAgIHRhcmdldFBhdGhJZHMucHVzaCh0YXJnZXRPYmpJZClcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRQYXRoSWRzXG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7aUNBUXdDOztRQUNoQyxnQkFBbUM7V0FFaEMsSUFBSSxHQUFHLElBQUksU0FBUyxLQUFLLFFBQVEsS0FBSztVQUN2QyxZQUFZLFNBQVMsWUFBWSxJQUFJO1VBQ3JDLGNBQWMsUUFBUSxTQUFTLElBQUksZ0JBQVUsZ0JBQVYsWUFBeUIsT0FBTztrQkFDM0QsS0FBSyxXQUFXO0FBQUE7U0FHekI7QUFDVDs2QkFLb0MsTUFBVzs7UUFDdkMsZ0JBQW1DO01BQ3JDLFVBQVU7V0FFTCxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztjQUMxQixRQUFRLEtBQUs7VUFDakIsY0FBYyxRQUFRLE9BQU8sSUFBSSxjQUFRLGdCQUFSLFlBQXVCLE9BQU87a0JBQ3ZELEtBQUssV0FBVztBQUFBO1NBR3pCO0FBQ1Q7OyJ9
@@ -0,0 +1,63 @@
1
+ import { computed } from "mobx";
2
+ import { readonlyMiddleware } from "../actionMiddlewares/readonlyMiddleware.mjs";
3
+ import { createContext } from "../context/context.mjs";
4
+ import { isDataModelClass } from "../dataModel/utils.mjs";
5
+ import { isModelClass } from "../model/utils.mjs";
6
+ import { isTreeNode } from "../tweaker/core.mjs";
7
+ import { tweak, tryUntweak } from "../tweaker/tweak.mjs";
8
+ import { failure, addLateInitializationFunction, runBeforeOnInitSymbol } from "../utils/index.mjs";
9
+ import { getOrCreate } from "../utils/mapUtils.mjs";
10
+ const computedTreeContext = createContext(false);
11
+ function isComputedTreeNode(node) {
12
+ return computedTreeContext.get(node);
13
+ }
14
+ const tweakedComputedTreeNodes = /* @__PURE__ */ new WeakSet();
15
+ function tweakComputedTreeNode(newValue, parent, path) {
16
+ const tweakedValue = tweak(newValue, { parent, path });
17
+ if (isTreeNode(tweakedValue) && !tweakedComputedTreeNodes.has(tweakedValue)) {
18
+ tweakedComputedTreeNodes.add(tweakedValue);
19
+ readonlyMiddleware(tweakedValue);
20
+ computedTreeContext.set(tweakedValue, true);
21
+ }
22
+ return tweakedValue;
23
+ }
24
+ const computedTreeNodeInfo = /* @__PURE__ */ new WeakMap();
25
+ function getOrCreateComputedTreeNodeInfo(instance) {
26
+ return getOrCreate(computedTreeNodeInfo, instance, () => /* @__PURE__ */ new Map());
27
+ }
28
+ function computedTree(target, propertyKey, descriptor) {
29
+ if (!descriptor.get) {
30
+ throw failure("@computedTree requires a 'get' accessor");
31
+ }
32
+ const targetClass = target.constructor;
33
+ if (!isModelClass(targetClass) && !isDataModelClass(targetClass)) {
34
+ throw failure("@computedTree can only decorate 'get' accessors of class or data models");
35
+ }
36
+ const original = descriptor.get;
37
+ descriptor.get = function() {
38
+ const entry = getOrCreateComputedTreeNodeInfo(this).get(propertyKey);
39
+ const oldValue = entry.value;
40
+ const newValue = entry.computed.get();
41
+ if (oldValue === newValue) {
42
+ return entry.tweakedValue;
43
+ }
44
+ tweak(oldValue, void 0);
45
+ tryUntweak(oldValue);
46
+ const tweakedValue = tweakComputedTreeNode(newValue, this, propertyKey);
47
+ entry.value = newValue;
48
+ entry.tweakedValue = tweakedValue;
49
+ return tweakedValue;
50
+ };
51
+ addLateInitializationFunction(target, runBeforeOnInitSymbol, (instance) => {
52
+ const c = computed(() => original.call(instance), { keepAlive: true });
53
+ const newValue = c.get();
54
+ const tweakedValue = tweakComputedTreeNode(newValue, instance, propertyKey);
55
+ getOrCreateComputedTreeNodeInfo(instance).set(propertyKey, {
56
+ computed: c,
57
+ value: newValue,
58
+ tweakedValue
59
+ });
60
+ });
61
+ }
62
+ export { computedTree, isComputedTreeNode };
63
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZWRUcmVlLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXB1dGVkVHJlZS9jb21wdXRlZFRyZWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIElDb21wdXRlZFZhbHVlIH0gZnJvbSBcIm1vYnhcIlxuaW1wb3J0IHsgcmVhZG9ubHlNaWRkbGV3YXJlIH0gZnJvbSBcIi4uL2FjdGlvbk1pZGRsZXdhcmVzL3JlYWRvbmx5TWlkZGxld2FyZVwiXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcIi4uL2NvbnRleHQvY29udGV4dFwiXG5pbXBvcnQgeyBpc0RhdGFNb2RlbENsYXNzIH0gZnJvbSBcIi4uL2RhdGFNb2RlbC91dGlsc1wiXG5pbXBvcnQgeyBpc01vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vbW9kZWwvdXRpbHNcIlxuaW1wb3J0IHsgaXNUcmVlTm9kZSB9IGZyb20gXCIuLi90d2Vha2VyL2NvcmVcIlxuaW1wb3J0IHsgdHJ5VW50d2VhaywgdHdlYWsgfSBmcm9tIFwiLi4vdHdlYWtlci90d2Vha1wiXG5pbXBvcnQgeyBhZGRMYXRlSW5pdGlhbGl6YXRpb25GdW5jdGlvbiwgZmFpbHVyZSwgcnVuQmVmb3JlT25Jbml0U3ltYm9sIH0gZnJvbSBcIi4uL3V0aWxzXCJcbmltcG9ydCB7IGdldE9yQ3JlYXRlIH0gZnJvbSBcIi4uL3V0aWxzL21hcFV0aWxzXCJcblxuY29uc3QgY29tcHV0ZWRUcmVlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoZmFsc2UpXG5cbi8qKlxuICogUmV0dXJucyBpZiBhIGdpdmVuIG5vZGUgaXMgYSBjb21wdXRlZCB0cmVlIG5vZGUuXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIGNvbXB1dGVkIHRyZWUgbm9kZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXB1dGVkVHJlZU5vZGUobm9kZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiBjb21wdXRlZFRyZWVDb250ZXh0LmdldChub2RlKVxufVxuXG5jb25zdCB0d2Vha2VkQ29tcHV0ZWRUcmVlTm9kZXMgPSBuZXcgV2Vha1NldDxvYmplY3Q+KClcblxuZnVuY3Rpb24gdHdlYWtDb21wdXRlZFRyZWVOb2RlPFQ+KG5ld1ZhbHVlOiBULCBwYXJlbnQ6IHVua25vd24sIHBhdGg6IHN0cmluZyk6IFQge1xuICBjb25zdCB0d2Vha2VkVmFsdWUgPSB0d2VhayhuZXdWYWx1ZSwgeyBwYXJlbnQsIHBhdGggfSlcbiAgaWYgKGlzVHJlZU5vZGUodHdlYWtlZFZhbHVlKSAmJiAhdHdlYWtlZENvbXB1dGVkVHJlZU5vZGVzLmhhcyh0d2Vha2VkVmFsdWUpKSB7XG4gICAgdHdlYWtlZENvbXB1dGVkVHJlZU5vZGVzLmFkZCh0d2Vha2VkVmFsdWUpXG4gICAgcmVhZG9ubHlNaWRkbGV3YXJlKHR3ZWFrZWRWYWx1ZSlcbiAgICBjb21wdXRlZFRyZWVDb250ZXh0LnNldCh0d2Vha2VkVmFsdWUsIHRydWUpXG4gIH1cbiAgcmV0dXJuIHR3ZWFrZWRWYWx1ZVxufVxuXG5jb25zdCBjb21wdXRlZFRyZWVOb2RlSW5mbyA9IG5ldyBXZWFrTWFwPFxuICBvYmplY3QsXG4gIE1hcDxzdHJpbmcsIHsgY29tcHV0ZWQ6IElDb21wdXRlZFZhbHVlPHVua25vd24+OyB2YWx1ZTogdW5rbm93bjsgdHdlYWtlZFZhbHVlOiB1bmtub3duIH0+XG4+KClcblxuZnVuY3Rpb24gZ2V0T3JDcmVhdGVDb21wdXRlZFRyZWVOb2RlSW5mbyhpbnN0YW5jZTogb2JqZWN0KSB7XG4gIHJldHVybiBnZXRPckNyZWF0ZShjb21wdXRlZFRyZWVOb2RlSW5mbywgaW5zdGFuY2UsICgpID0+IG5ldyBNYXAoKSlcbn1cblxuLyoqXG4gKiBEZWNvcmF0b3IgZm9yIHR1cm5pbmcgYSBjb21wdXRlZCBwcm9wZXJ0eSBpbnRvIGEgY29tcHV0ZWQgdHJlZSB3aGljaCBzdXBwb3J0cyB0cmVlIHRyYXZlcnNhbFxuICogZnVuY3Rpb25zLCBjb250ZXh0cywgcmVmZXJlbmNlcywgZXRjLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgUHJvdG90eXBlIG9mIHRoZSBjbGFzcy5cbiAqIEBwYXJhbSBwcm9wZXJ0eUtleSBOYW1lIG9mIHRoZSBtZW1iZXIuXG4gKiBAcGFyYW0gZGVzY3JpcHRvciBQcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWRUcmVlKFxuICB0YXJnZXQ6IGFueSxcbiAgcHJvcGVydHlLZXk6IHN0cmluZyxcbiAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yXG4pOiB2b2lkIHtcbiAgaWYgKCFkZXNjcmlwdG9yLmdldCkge1xuICAgIHRocm93IGZhaWx1cmUoXCJAY29tcHV0ZWRUcmVlIHJlcXVpcmVzIGEgJ2dldCcgYWNjZXNzb3JcIilcbiAgfVxuXG4gIGNvbnN0IHRhcmdldENsYXNzID0gdGFyZ2V0LmNvbnN0cnVjdG9yXG4gIGlmICghaXNNb2RlbENsYXNzKHRhcmdldENsYXNzKSAmJiAhaXNEYXRhTW9kZWxDbGFzcyh0YXJnZXRDbGFzcykpIHtcbiAgICB0aHJvdyBmYWlsdXJlKFwiQGNvbXB1dGVkVHJlZSBjYW4gb25seSBkZWNvcmF0ZSAnZ2V0JyBhY2Nlc3NvcnMgb2YgY2xhc3Mgb3IgZGF0YSBtb2RlbHNcIilcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsID0gZGVzY3JpcHRvci5nZXRcblxuICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlbnRyeSA9IGdldE9yQ3JlYXRlQ29tcHV0ZWRUcmVlTm9kZUluZm8odGhpcykuZ2V0KHByb3BlcnR5S2V5KSFcblxuICAgIGNvbnN0IG9sZFZhbHVlID0gZW50cnkudmFsdWVcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGVudHJ5LmNvbXB1dGVkLmdldCgpXG5cbiAgICBpZiAob2xkVmFsdWUgPT09IG5ld1ZhbHVlKSB7XG4gICAgICByZXR1cm4gZW50cnkudHdlYWtlZFZhbHVlXG4gICAgfVxuXG4gICAgdHdlYWsob2xkVmFsdWUsIHVuZGVmaW5lZClcbiAgICB0cnlVbnR3ZWFrKG9sZFZhbHVlKVxuXG4gICAgY29uc3QgdHdlYWtlZFZhbHVlID0gdHdlYWtDb21wdXRlZFRyZWVOb2RlKG5ld1ZhbHVlLCB0aGlzLCBwcm9wZXJ0eUtleSlcbiAgICBlbnRyeS52YWx1ZSA9IG5ld1ZhbHVlXG4gICAgZW50cnkudHdlYWtlZFZhbHVlID0gdHdlYWtlZFZhbHVlXG4gICAgcmV0dXJuIHR3ZWFrZWRWYWx1ZVxuICB9XG5cbiAgYWRkTGF0ZUluaXRpYWxpemF0aW9uRnVuY3Rpb24odGFyZ2V0LCBydW5CZWZvcmVPbkluaXRTeW1ib2wsIChpbnN0YW5jZSkgPT4ge1xuICAgIGNvbnN0IGMgPSBjb21wdXRlZCgoKSA9PiBvcmlnaW5hbC5jYWxsKGluc3RhbmNlKSwgeyBrZWVwQWxpdmU6IHRydWUgfSlcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGMuZ2V0KClcbiAgICBjb25zdCB0d2Vha2VkVmFsdWUgPSB0d2Vha0NvbXB1dGVkVHJlZU5vZGUobmV3VmFsdWUsIGluc3RhbmNlLCBwcm9wZXJ0eUtleSlcblxuICAgIGdldE9yQ3JlYXRlQ29tcHV0ZWRUcmVlTm9kZUluZm8oaW5zdGFuY2UpLnNldChwcm9wZXJ0eUtleSwge1xuICAgICAgY29tcHV0ZWQ6IGMsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICB0d2Vha2VkVmFsdWUsXG4gICAgfSlcbiAgfSlcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVQSxNQUFNLHNCQUFzQixjQUFjLEtBQUs7NEJBUVo7U0FDMUIsb0JBQW9CLElBQUksSUFBSTtBQUNyQztBQUVBLE1BQU0sK0NBQStCO0FBRXJDLCtCQUFrQyxVQUFhLFFBQWlCO1FBQ3hELGVBQWUsTUFBTSxVQUFVLEVBQUUsUUFBUSxNQUFNO01BQ2pELFdBQVcsWUFBWSxLQUFLLENBQUMseUJBQXlCLElBQUksWUFBWSxHQUFHOzZCQUNsRCxJQUFJLFlBQVk7dUJBQ3RCLFlBQVk7d0JBQ1gsSUFBSSxjQUFjLElBQUk7QUFBQTtTQUVyQztBQUNUO0FBRUEsTUFBTSwyQ0FBMkI7QUFLakMseUNBQXlDO1NBQ2hDLFlBQVksc0JBQXNCLFVBQVUsMEJBQVUsS0FBSztBQUNwRTtzQkFXRSxRQUNBLGFBQ0E7TUFFSSxDQUFDLFdBQVcsS0FBSztVQUNiLFFBQVEseUNBQXlDO0FBQUE7UUFHbkQsY0FBYyxPQUFPO01BQ3ZCLENBQUMsYUFBYSxXQUFXLEtBQUssQ0FBQyxpQkFBaUIsV0FBVyxHQUFHO1VBQzFELFFBQVEseUVBQXlFO0FBQUE7UUFHbkYsV0FBVyxXQUFXO2FBRWpCLE1BQU07VUFDVCxRQUFRLGdDQUFnQyxJQUFJLEVBQUUsSUFBSSxXQUFXO1VBRTdELFdBQVcsTUFBTTtVQUNqQixXQUFXLE1BQU0sU0FBUztRQUU1QixhQUFhLFVBQVU7YUFDbEIsTUFBTTtBQUFBO1VBR1QsVUFBVSxNQUFTO2VBQ2QsUUFBUTtVQUViLGVBQWUsc0JBQXNCLFVBQVUsTUFBTSxXQUFXO1VBQ2hFLFFBQVE7VUFDUixlQUFlO1dBQ2Q7QUFBQTtnQ0FHcUIsUUFBUSx1QkFBdUIsQ0FBQztVQUN0RCxJQUFJLFNBQVMsTUFBTSxTQUFTLEtBQUssUUFBUSxHQUFHLEVBQUUsV0FBVyxNQUFNO1VBQy9ELFdBQVcsRUFBRTtVQUNiLGVBQWUsc0JBQXNCLFVBQVUsVUFBVSxXQUFXO29DQUUxQyxRQUFRLEVBQUUsSUFBSSxhQUFhO0FBQUEsTUFDekQsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLE1BQ1A7QUFBQSxLQUNEO0FBQUEsR0FDRjtBQUNIOzsifQ==