@magic-xpa/engine 4.800.0 → 4.801.0-dev000.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 (379) hide show
  1. package/esm2020/index.mjs +190 -0
  2. package/{esm2015/magic-xpa-engine.js → esm2020/magic-xpa-engine.mjs} +0 -0
  3. package/esm2020/src/AccessHelper.mjs +3 -0
  4. package/esm2020/src/ClientManager.mjs +403 -0
  5. package/esm2020/src/CommandsProcessorBase.mjs +58 -0
  6. package/esm2020/src/CommandsProcessorManager.mjs +26 -0
  7. package/esm2020/src/CommandsTable.mjs +163 -0
  8. package/{esm2015/src/ConstInterface.js → esm2020/src/ConstInterface.mjs} +0 -0
  9. package/{esm2015/src/CurrentClientVersion.js → esm2020/src/CurrentClientVersion.mjs} +2 -2
  10. package/{esm2015/src/FlowMonitorInterface.js → esm2020/src/FlowMonitorInterface.mjs} +0 -0
  11. package/esm2020/src/GUIManager.mjs +63 -0
  12. package/{esm2015/src/GlobalCommandsManager.js → esm2020/src/GlobalCommandsManager.mjs} +0 -0
  13. package/esm2020/src/GuiEventsProcessor.mjs +171 -0
  14. package/{esm2015/src/ICommandsTable.js → esm2020/src/ICommandsTable.mjs} +1 -0
  15. package/{esm2015/src/ServerConfig.js → esm2020/src/ServerConfig.mjs} +0 -0
  16. package/{esm2015/src/bridge/IGuiEvent.js → esm2020/src/bridge/IGuiEvent.mjs} +0 -0
  17. package/esm2020/src/bridge/MagicBridge.mjs +41 -0
  18. package/{esm2015/src/commands/ClientOriginatedCommandTaskTag.js → esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs} +0 -0
  19. package/{esm2015/src/commands/ClientToServer/AddUserLocateDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs} +0 -0
  20. package/{esm2015/src/commands/ClientToServer/AddUserRangeDataviewCommand.js → esm2020/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs} +0 -0
  21. package/{esm2015/src/commands/ClientToServer/AddUserSortDataViewCommand.js → esm2020/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs} +0 -0
  22. package/esm2020/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -0
  23. package/esm2020/src/commands/ClientToServer/ClientOriginatedCommand.mjs +15 -0
  24. package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
  25. package/esm2020/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -0
  26. package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +278 -0
  27. package/{esm2015/src/commands/ClientToServer/CommandSerializationHelper.js → esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs} +0 -0
  28. package/esm2020/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -0
  29. package/esm2020/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +21 -0
  30. package/esm2020/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +20 -0
  31. package/{esm2015/src/commands/ClientToServer/ControlItemsRefreshCommand.js → esm2020/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs} +0 -0
  32. package/{esm2015/src/commands/ClientToServer/DataViewOutputCommand.js → esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs} +0 -0
  33. package/{esm2015/src/commands/ClientToServer/DataviewCommand.js → esm2020/src/commands/ClientToServer/DataviewCommand.mjs} +2 -2
  34. package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +36 -0
  35. package/esm2020/src/commands/ClientToServer/EventCommand.mjs +40 -0
  36. package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
  37. package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -0
  38. package/{esm2015/src/commands/ClientToServer/GlobalParamsQueryCommand.js → esm2020/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs} +0 -0
  39. package/{esm2015/src/commands/ClientToServer/ICommandTaskTag.js → esm2020/src/commands/ClientToServer/ICommandTaskTag.mjs} +1 -0
  40. package/esm2020/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -0
  41. package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
  42. package/esm2020/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -0
  43. package/esm2020/src/commands/ClientToServer/QueryCommand.mjs +21 -0
  44. package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
  45. package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
  46. package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
  47. package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +39 -0
  48. package/{esm2015/src/commands/ClientToServer/SelectProgramCommand.js → esm2020/src/commands/ClientToServer/SelectProgramCommand.mjs} +0 -0
  49. package/{esm2015/src/commands/ClientToServer/SetTransactionStateDataviewCommand.js → esm2020/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs} +0 -0
  50. package/esm2020/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -0
  51. package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
  52. package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +28 -0
  53. package/{esm2015/src/commands/ClientToServer/UnloadCommand.js → esm2020/src/commands/ClientToServer/UnloadCommand.mjs} +0 -0
  54. package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
  55. package/esm2020/src/commands/DataViewCommandBase.mjs +10 -0
  56. package/{esm2015/src/commands/IClientCommand.js → esm2020/src/commands/IClientCommand.mjs} +1 -0
  57. package/esm2020/src/commands/IClientTargetedCommand.mjs +9 -0
  58. package/{esm2015/src/commands/IClientToServerCommandInfo.js → esm2020/src/commands/IClientToServerCommandInfo.mjs} +1 -0
  59. package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +65 -0
  60. package/esm2020/src/commands/ServerToClient/AddLocateCommand.mjs +22 -0
  61. package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
  62. package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
  63. package/{esm2015/src/commands/ServerToClient/ClientRefreshCommand.js → esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs} +14 -17
  64. package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +27 -0
  65. package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
  66. package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +222 -0
  67. package/esm2020/src/commands/ServerToClient/ResetLocateCommand.mjs +15 -0
  68. package/esm2020/src/commands/ServerToClient/ResetRangeCommand.mjs +15 -0
  69. package/esm2020/src/commands/ServerToClient/ResetSortCommand.mjs +15 -0
  70. package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +37 -0
  71. package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +85 -0
  72. package/{esm2015/src/commands/ServerToClient/XMLBasedCommandBuilder.js → esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs} +0 -0
  73. package/{esm2015/src/communications/IConnectionStateManager.js → esm2020/src/communications/IConnectionStateManager.mjs} +1 -0
  74. package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +17 -0
  75. package/{esm2015/src/data/DataSourceIdKey.js → esm2020/src/data/DataSourceIdKey.mjs} +0 -0
  76. package/esm2020/src/data/DataView.mjs +1634 -0
  77. package/{esm2015/src/data/DataViewBase.js → esm2020/src/data/DataViewBase.mjs} +0 -0
  78. package/esm2020/src/data/DataviewManager.mjs +28 -0
  79. package/esm2020/src/data/DataviewManagerBase.mjs +15 -0
  80. package/{esm2015/src/data/DvCache.js → esm2020/src/data/DvCache.mjs} +0 -0
  81. package/esm2020/src/data/Field.mjs +645 -0
  82. package/esm2020/src/data/FieldBase.mjs +18 -0
  83. package/{esm2015/src/data/FieldsTable.js → esm2020/src/data/FieldsTable.mjs} +0 -0
  84. package/{esm2015/src/data/IRecordsTable.js → esm2020/src/data/IRecordsTable.mjs} +1 -0
  85. package/{esm2015/src/data/Key.js → esm2020/src/data/Key.mjs} +0 -0
  86. package/esm2020/src/data/Record.mjs +846 -0
  87. package/{esm2015/src/data/RecordOutOfDataViewException.js → esm2020/src/data/RecordOutOfDataViewException.mjs} +0 -0
  88. package/esm2020/src/data/RecordsTable.mjs +267 -0
  89. package/esm2020/src/data/TaskTransactionManager.mjs +103 -0
  90. package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
  91. package/{esm2015/src/enums.js → esm2020/src/enums.mjs} +0 -0
  92. package/esm2020/src/env/EnvVariablesTable.mjs +340 -0
  93. package/esm2020/src/env/Environment.mjs +554 -0
  94. package/{esm2015/src/env/ILanguageData.js → esm2020/src/env/ILanguageData.mjs} +1 -0
  95. package/esm2020/src/env/LanguageData.mjs +222 -0
  96. package/esm2020/src/env/MirrorString.mjs +66 -0
  97. package/{esm2015/src/event/ActionManager.js → esm2020/src/event/ActionManager.mjs} +0 -0
  98. package/esm2020/src/event/Event.mjs +1436 -0
  99. package/esm2020/src/event/EventHandler.mjs +773 -0
  100. package/esm2020/src/event/EventHandlerPosition.mjs +201 -0
  101. package/esm2020/src/event/EventsManager.mjs +2983 -0
  102. package/esm2020/src/event/IEventsManager.mjs +7 -0
  103. package/esm2020/src/event/RunTimeEvent.mjs +406 -0
  104. package/{esm2015/src/event/RunTimeEventBase.js → esm2020/src/event/RunTimeEventBase.mjs} +0 -0
  105. package/{esm2015/src/event/UserEventsTable.js → esm2020/src/event/UserEventsTable.mjs} +0 -0
  106. package/{esm2015/src/exp/ExpTable.js → esm2020/src/exp/ExpTable.mjs} +0 -0
  107. package/esm2020/src/exp/Expression.mjs +200 -0
  108. package/{esm2015/src/exp/ExpressionDict.js → esm2020/src/exp/ExpressionDict.mjs} +0 -0
  109. package/esm2020/src/exp/ExpressionEvaluator.mjs +4373 -0
  110. package/esm2020/src/exp/ExpressionLocalJpn.mjs +314 -0
  111. package/esm2020/src/exp/GlobalParamsTable.mjs +85 -0
  112. package/esm2020/src/exp/YesNoExp.mjs +41 -0
  113. package/{esm2015/src/gui/CreatedFormVector.js → esm2020/src/gui/CreatedFormVector.mjs} +0 -0
  114. package/esm2020/src/gui/FormsTable.mjs +66 -0
  115. package/esm2020/src/gui/MgControl.mjs +357 -0
  116. package/esm2020/src/gui/MgForm.mjs +1195 -0
  117. package/esm2020/src/http/HttpManager.mjs +97 -0
  118. package/esm2020/src/http/client/HttpClientAsync.mjs +67 -0
  119. package/esm2020/src/http/client/HttpClientBase.mjs +148 -0
  120. package/{esm2015/src/http/client/HttpClientEvents.js → esm2020/src/http/client/HttpClientEvents.mjs} +0 -0
  121. package/esm2020/src/http/client/HttpClientSync.mjs +42 -0
  122. package/{esm2015/src/http/client/HttpUtility.js → esm2020/src/http/client/HttpUtility.mjs} +0 -0
  123. package/{esm2015/src/http/client/ICommunicationsFailureHandler.js → esm2020/src/http/client/ICommunicationsFailureHandler.mjs} +1 -0
  124. package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
  125. package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
  126. package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
  127. package/esm2020/src/remote/RemoteCommandsProcessor.mjs +872 -0
  128. package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
  129. package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +24 -0
  130. package/{esm2015/src/remote/RemoteDataViewCommandFactory.js → esm2020/src/remote/RemoteDataViewCommandFactory.mjs} +0 -0
  131. package/esm2020/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +16 -0
  132. package/esm2020/src/remote/RemoteDataviewManager.mjs +17 -0
  133. package/esm2020/src/remote/RemoteInitDataViewCommand.mjs +11 -0
  134. package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
  135. package/esm2020/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +13 -0
  136. package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
  137. package/esm2020/src/remote/ServerError.mjs +44 -0
  138. package/{esm2015/src/remote/SetTransactionStateRemoteDataViewCommand.js → esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs} +8 -11
  139. package/esm2020/src/rt/Argument.mjs +274 -0
  140. package/esm2020/src/rt/ArgumentsList.mjs +103 -0
  141. package/esm2020/src/rt/Boundary.mjs +158 -0
  142. package/{esm2015/src/rt/CompMainPrgTable.js → esm2020/src/rt/CompMainPrgTable.mjs} +0 -0
  143. package/esm2020/src/rt/DataviewHeaderBase.mjs +96 -0
  144. package/esm2020/src/rt/DataviewHeaderFactory.mjs +7 -0
  145. package/{esm2015/src/rt/DataviewHeaders.js → esm2020/src/rt/DataviewHeaders.mjs} +0 -0
  146. package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +39 -0
  147. package/{esm2015/src/rt/ExecutionStack.js → esm2020/src/rt/ExecutionStack.mjs} +0 -0
  148. package/{esm2015/src/rt/ExecutionStackEntry.js → esm2020/src/rt/ExecutionStackEntry.mjs} +0 -0
  149. package/{esm2015/src/rt/HandlersTable.js → esm2020/src/rt/HandlersTable.mjs} +0 -0
  150. package/{esm2015/src/rt/IDataSourceViewDefinition.js → esm2020/src/rt/IDataSourceViewDefinition.mjs} +1 -0
  151. package/{esm2015/src/rt/IDataviewHeader.js → esm2020/src/rt/IDataviewHeader.mjs} +1 -0
  152. package/{esm2015/src/rt/IResultValue.js → esm2020/src/rt/IResultValue.mjs} +1 -0
  153. package/{esm2015/src/rt/LastFocusedManager.js → esm2020/src/rt/LastFocusedManager.mjs} +0 -0
  154. package/esm2020/src/rt/Operation.mjs +745 -0
  155. package/{esm2015/src/rt/OperationTable.js → esm2020/src/rt/OperationTable.mjs} +0 -0
  156. package/esm2020/src/rt/Recompute.mjs +355 -0
  157. package/{esm2015/src/rt/RecomputeTable.js → esm2020/src/rt/RecomputeTable.mjs} +0 -0
  158. package/esm2020/src/rt/RemoteDataviewHeader.mjs +105 -0
  159. package/{esm2015/src/rt/ResultValue.js → esm2020/src/rt/ResultValue.mjs} +0 -0
  160. package/esm2020/src/rt/TableCache.mjs +177 -0
  161. package/esm2020/src/rt/TableCacheManager.mjs +67 -0
  162. package/esm2020/src/rt/Transaction.mjs +54 -0
  163. package/{esm2015/src/security/UserDetails.js → esm2020/src/security/UserDetails.mjs} +0 -0
  164. package/{esm2015/src/tasks/IMGDataCollection.js → esm2020/src/tasks/IMGDataCollection.mjs} +1 -0
  165. package/esm2020/src/tasks/MGData.mjs +552 -0
  166. package/esm2020/src/tasks/MGDataCollection.mjs +259 -0
  167. package/{esm2015/src/tasks/MenusDeserializer.js → esm2020/src/tasks/MenusDeserializer.mjs} +0 -0
  168. package/{esm2015/src/tasks/RCTimer.js → esm2020/src/tasks/RCTimer.mjs} +0 -0
  169. package/esm2020/src/tasks/RemoteTaskService.mjs +45 -0
  170. package/esm2020/src/tasks/Task.mjs +2501 -0
  171. package/{esm2015/src/tasks/TaskBase.js → esm2020/src/tasks/TaskBase.mjs} +22 -1
  172. package/esm2020/src/tasks/TaskServiceBase.mjs +25 -0
  173. package/esm2020/src/tasks/TasksTable.mjs +80 -0
  174. package/{esm2015/src/tasks/sort/Sort.js → esm2020/src/tasks/sort/Sort.mjs} +0 -0
  175. package/esm2020/src/tasks/sort/SortCollection.mjs +72 -0
  176. package/{esm2015/src/util/ConstUtils.js → esm2020/src/util/ConstUtils.mjs} +0 -0
  177. package/{esm2015/src/util/FlowMonitorQueue.js → esm2020/src/util/FlowMonitorQueue.mjs} +15 -18
  178. package/{esm2015/src/util/HeapSort.js → esm2020/src/util/HeapSort.mjs} +0 -0
  179. package/{esm2015/src/util/IMirrorXML.js → esm2020/src/util/IMirrorXML.mjs} +2 -1
  180. package/{esm2015/src/util/IServerConfig.js → esm2020/src/util/IServerConfig.mjs} +1 -0
  181. package/{esm2015/src/util/MgBlockingQueue.js → esm2020/src/util/MgBlockingQueue.mjs} +1 -0
  182. package/esm2020/src/util/MgPriorityBlockingQueue.mjs +76 -0
  183. package/{esm2015/src/util/MgPriorityQueue.js → esm2020/src/util/MgPriorityQueue.mjs} +0 -0
  184. package/esm2020/src/util/ParamParseResult.mjs +8 -0
  185. package/esm2020/src/util/PrmMap.mjs +151 -0
  186. package/esm2020/src/util/Process.mjs +7 -0
  187. package/esm2020/src/util/ReturnResult.mjs +46 -0
  188. package/{esm2015/src/util/ReturnResultBase.js → esm2020/src/util/ReturnResultBase.mjs} +0 -0
  189. package/{esm2015/src/util/Scrambler.js → esm2020/src/util/Scrambler.mjs} +0 -0
  190. package/{esm2015/src/util/UniqueIDUtils.js → esm2020/src/util/UniqueIDUtils.mjs} +0 -0
  191. package/{esm2015/src/util/cookie.service.js → esm2020/src/util/cookie.service.mjs} +0 -0
  192. package/fesm2015/{magic-xpa-engine.js → magic-xpa-engine.mjs} +267 -254
  193. package/fesm2015/magic-xpa-engine.mjs.map +1 -0
  194. package/fesm2020/magic-xpa-engine.mjs +30705 -0
  195. package/fesm2020/magic-xpa-engine.mjs.map +1 -0
  196. package/index.d.ts +2 -0
  197. package/package.json +27 -13
  198. package/src/AccessHelper.d.ts +1 -1
  199. package/src/CommandsProcessorBase.d.ts +3 -3
  200. package/src/GuiEventsProcessor.d.ts +1 -1
  201. package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +1 -2
  202. package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +1 -2
  203. package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +1 -2
  204. package/src/commands/ClientToServer/ComputeEventCommand.d.ts +1 -2
  205. package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +1 -2
  206. package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +1 -2
  207. package/src/commands/ClientToServer/DataviewCommand.d.ts +1 -2
  208. package/src/commands/ClientToServer/EvaluateCommand.d.ts +1 -2
  209. package/src/commands/ClientToServer/EventCommand.d.ts +1 -2
  210. package/src/commands/ClientToServer/ExecOperCommand.d.ts +1 -2
  211. package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +1 -2
  212. package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +1 -2
  213. package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +1 -2
  214. package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +1 -2
  215. package/src/commands/ClientToServer/QueryCommand.d.ts +1 -2
  216. package/src/commands/ClientToServer/RecomputeCommand.d.ts +1 -2
  217. package/src/commands/ClientToServer/RefreshEventCommand.d.ts +1 -2
  218. package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +1 -2
  219. package/src/commands/ClientToServer/RollbackEventCommand.d.ts +1 -2
  220. package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +1 -2
  221. package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +1 -2
  222. package/src/commands/ClientToServer/TransactionCommand.d.ts +1 -2
  223. package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +1 -2
  224. package/src/commands/DataViewCommandBase.d.ts +2 -2
  225. package/src/commands/IClientTargetedCommand.d.ts +1 -1
  226. package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +1 -1
  227. package/src/data/FieldBase.d.ts +3 -3
  228. package/src/data/Record.d.ts +2 -9
  229. package/src/data/RecordsTable.d.ts +1 -2
  230. package/src/data/XMLBasedDcValuesBuilder.d.ts +1 -1
  231. package/src/env/EnvVariablesTable.d.ts +2 -15
  232. package/src/env/Environment.d.ts +0 -3
  233. package/src/env/MirrorString.d.ts +15 -0
  234. package/src/event/Event.d.ts +0 -3
  235. package/src/event/EventsManager.d.ts +7 -8
  236. package/src/event/IEventsManager.d.ts +5 -6
  237. package/src/exp/ExpressionEvaluator.d.ts +2 -2
  238. package/src/exp/ExpressionLocalJpn.d.ts +2 -2
  239. package/src/exp/GlobalParamsTable.d.ts +2 -1
  240. package/src/gui/MgControl.d.ts +0 -2
  241. package/src/gui/MgForm.d.ts +4 -4
  242. package/src/http/client/HttpClientAsync.d.ts +2 -2
  243. package/src/http/client/HttpClientBase.d.ts +3 -3
  244. package/src/http/client/HttpClientSync.d.ts +2 -2
  245. package/src/remote/RemoteCommandsProcessor.d.ts +1 -1
  246. package/src/rt/DataviewHeaderBase.d.ts +2 -2
  247. package/src/rt/DataviewHeaderFactory.d.ts +1 -1
  248. package/src/rt/Operation.d.ts +3 -1
  249. package/src/rt/RemoteDataviewHeader.d.ts +1 -2
  250. package/src/rt/Transaction.d.ts +1 -1
  251. package/src/tasks/RemoteTaskService.d.ts +2 -3
  252. package/src/tasks/Task.d.ts +1 -1
  253. package/src/tasks/TaskBase.d.ts +7 -7
  254. package/src/tasks/TaskServiceBase.d.ts +2 -4
  255. package/src/tasks/sort/SortCollection.d.ts +2 -3
  256. package/src/util/FlowMonitorQueue.d.ts +1 -1
  257. package/src/util/IMirrorXML.d.ts +1 -1
  258. package/src/util/ParamParseResult.d.ts +6 -0
  259. package/src/util/PrmMap.d.ts +0 -6
  260. package/src/util/Process.d.ts +1 -1
  261. package/bundles/magic-xpa-engine.umd.js +0 -38066
  262. package/bundles/magic-xpa-engine.umd.js.map +0 -1
  263. package/bundles/magic-xpa-engine.umd.min.js +0 -16
  264. package/bundles/magic-xpa-engine.umd.min.js.map +0 -1
  265. package/esm2015/index.js +0 -188
  266. package/esm2015/src/AccessHelper.js +0 -3
  267. package/esm2015/src/ClientManager.js +0 -412
  268. package/esm2015/src/CommandsProcessorBase.js +0 -54
  269. package/esm2015/src/CommandsProcessorManager.js +0 -31
  270. package/esm2015/src/CommandsTable.js +0 -166
  271. package/esm2015/src/GUIManager.js +0 -72
  272. package/esm2015/src/GuiEventsProcessor.js +0 -171
  273. package/esm2015/src/bridge/MagicBridge.js +0 -44
  274. package/esm2015/src/commands/ClientToServer/BrowserEscEventCommand.js +0 -24
  275. package/esm2015/src/commands/ClientToServer/ClientOriginatedCommand.js +0 -15
  276. package/esm2015/src/commands/ClientToServer/ClientOriginatedCommandSerializer.js +0 -60
  277. package/esm2015/src/commands/ClientToServer/ColumnSortEventCommand.js +0 -26
  278. package/esm2015/src/commands/ClientToServer/CommandFactory.js +0 -283
  279. package/esm2015/src/commands/ClientToServer/ComputeEventCommand.js +0 -23
  280. package/esm2015/src/commands/ClientToServer/ContextTerminationEventCommand.js +0 -21
  281. package/esm2015/src/commands/ClientToServer/ContextTimeoutResetCommand.js +0 -20
  282. package/esm2015/src/commands/ClientToServer/EvaluateCommand.js +0 -36
  283. package/esm2015/src/commands/ClientToServer/EventCommand.js +0 -40
  284. package/esm2015/src/commands/ClientToServer/ExecOperCommand.js +0 -67
  285. package/esm2015/src/commands/ClientToServer/FetchDataControlValuesEventCommand.js +0 -22
  286. package/esm2015/src/commands/ClientToServer/IndexChangeEventCommand.js +0 -21
  287. package/esm2015/src/commands/ClientToServer/IniputForceWriteCommand.js +0 -23
  288. package/esm2015/src/commands/ClientToServer/NonReversibleExitEventCommand.js +0 -23
  289. package/esm2015/src/commands/ClientToServer/QueryCommand.js +0 -21
  290. package/esm2015/src/commands/ClientToServer/RecomputeCommand.js +0 -27
  291. package/esm2015/src/commands/ClientToServer/RefreshEventCommand.js +0 -27
  292. package/esm2015/src/commands/ClientToServer/RefreshScreenEventCommand.js +0 -24
  293. package/esm2015/src/commands/ClientToServer/RollbackEventCommand.js +0 -39
  294. package/esm2015/src/commands/ClientToServer/SubformOpenEventCommand.js +0 -21
  295. package/esm2015/src/commands/ClientToServer/SubformRefreshEventCommand.js +0 -24
  296. package/esm2015/src/commands/ClientToServer/TransactionCommand.js +0 -28
  297. package/esm2015/src/commands/ClientToServer/WriteMessageToServerLogCommand.js +0 -18
  298. package/esm2015/src/commands/DataViewCommandBase.js +0 -6
  299. package/esm2015/src/commands/IClientTargetedCommand.js +0 -6
  300. package/esm2015/src/commands/ServerToClient/AbortCommand.js +0 -68
  301. package/esm2015/src/commands/ServerToClient/AddLocateCommand.js +0 -25
  302. package/esm2015/src/commands/ServerToClient/AddRangeCommand.js +0 -65
  303. package/esm2015/src/commands/ServerToClient/AddSortCommand.js +0 -36
  304. package/esm2015/src/commands/ServerToClient/ClientTargetedCommandBase.js +0 -24
  305. package/esm2015/src/commands/ServerToClient/EnhancedVerifyCommand.js +0 -48
  306. package/esm2015/src/commands/ServerToClient/OpenURLCommand.js +0 -225
  307. package/esm2015/src/commands/ServerToClient/ResetLocateCommand.js +0 -18
  308. package/esm2015/src/commands/ServerToClient/ResetRangeCommand.js +0 -18
  309. package/esm2015/src/commands/ServerToClient/ResetSortCommand.js +0 -18
  310. package/esm2015/src/commands/ServerToClient/ResultCommand.js +0 -40
  311. package/esm2015/src/commands/ServerToClient/VerifyCommand.js +0 -88
  312. package/esm2015/src/communications/InteractiveCommunicationsFailureHandler.js +0 -20
  313. package/esm2015/src/data/DataView.js +0 -1693
  314. package/esm2015/src/data/DataviewManager.js +0 -31
  315. package/esm2015/src/data/DataviewManagerBase.js +0 -18
  316. package/esm2015/src/data/Field.js +0 -672
  317. package/esm2015/src/data/FieldBase.js +0 -9
  318. package/esm2015/src/data/Record.js +0 -914
  319. package/esm2015/src/data/RecordsTable.js +0 -267
  320. package/esm2015/src/data/TaskTransactionManager.js +0 -110
  321. package/esm2015/src/data/XMLBasedDcValuesBuilder.js +0 -74
  322. package/esm2015/src/env/EnvVariablesTable.js +0 -408
  323. package/esm2015/src/env/Environment.js +0 -563
  324. package/esm2015/src/env/LanguageData.js +0 -230
  325. package/esm2015/src/event/Event.js +0 -1449
  326. package/esm2015/src/event/EventHandler.js +0 -787
  327. package/esm2015/src/event/EventHandlerPosition.js +0 -201
  328. package/esm2015/src/event/EventsManager.js +0 -3107
  329. package/esm2015/src/event/IEventsManager.js +0 -7
  330. package/esm2015/src/event/RunTimeEvent.js +0 -406
  331. package/esm2015/src/exp/Expression.js +0 -209
  332. package/esm2015/src/exp/ExpressionEvaluator.js +0 -4441
  333. package/esm2015/src/exp/ExpressionLocalJpn.js +0 -314
  334. package/esm2015/src/exp/GlobalParamsTable.js +0 -84
  335. package/esm2015/src/exp/YesNoExp.js +0 -44
  336. package/esm2015/src/gui/FormsTable.js +0 -73
  337. package/esm2015/src/gui/MgControl.js +0 -438
  338. package/esm2015/src/gui/MgForm.js +0 -1292
  339. package/esm2015/src/http/HttpManager.js +0 -100
  340. package/esm2015/src/http/client/HttpClientAsync.js +0 -72
  341. package/esm2015/src/http/client/HttpClientBase.js +0 -148
  342. package/esm2015/src/http/client/HttpClientSync.js +0 -47
  343. package/esm2015/src/remote/AddUserLocateRemoteDataViewCommand.js +0 -21
  344. package/esm2015/src/remote/AddUserRangeRemoteDataViewCommand.js +0 -21
  345. package/esm2015/src/remote/AddUserSortRemoteDataViewCommand.js +0 -21
  346. package/esm2015/src/remote/RemoteCommandsProcessor.js +0 -903
  347. package/esm2015/src/remote/RemoteControlItemsRefreshCommand.js +0 -28
  348. package/esm2015/src/remote/RemoteDataViewCommandBase.js +0 -27
  349. package/esm2015/src/remote/RemoteDataViewCommandUpdateNonModifiable.js +0 -19
  350. package/esm2015/src/remote/RemoteDataviewManager.js +0 -23
  351. package/esm2015/src/remote/RemoteInitDataViewCommand.js +0 -14
  352. package/esm2015/src/remote/ResetUserLocateRemoteDataviewCommand.js +0 -20
  353. package/esm2015/src/remote/ResetUserRangeRemoteDataviewCommand.js +0 -16
  354. package/esm2015/src/remote/ResetUserSortRemoteDataviewCommand.js +0 -19
  355. package/esm2015/src/remote/ServerError.js +0 -45
  356. package/esm2015/src/rt/Argument.js +0 -281
  357. package/esm2015/src/rt/ArgumentsList.js +0 -108
  358. package/esm2015/src/rt/Boundary.js +0 -161
  359. package/esm2015/src/rt/DataviewHeaderBase.js +0 -96
  360. package/esm2015/src/rt/DataviewHeaderFactory.js +0 -7
  361. package/esm2015/src/rt/DataviewHeadersSaxHandler.js +0 -40
  362. package/esm2015/src/rt/Operation.js +0 -769
  363. package/esm2015/src/rt/Recompute.js +0 -372
  364. package/esm2015/src/rt/RemoteDataviewHeader.js +0 -114
  365. package/esm2015/src/rt/TableCache.js +0 -182
  366. package/esm2015/src/rt/TableCacheManager.js +0 -70
  367. package/esm2015/src/rt/Transaction.js +0 -54
  368. package/esm2015/src/tasks/MGData.js +0 -561
  369. package/esm2015/src/tasks/MGDataCollection.js +0 -270
  370. package/esm2015/src/tasks/RemoteTaskService.js +0 -45
  371. package/esm2015/src/tasks/Task.js +0 -2593
  372. package/esm2015/src/tasks/TaskServiceBase.js +0 -30
  373. package/esm2015/src/tasks/TasksTable.js +0 -87
  374. package/esm2015/src/tasks/sort/SortCollection.js +0 -72
  375. package/esm2015/src/util/MgPriorityBlockingQueue.js +0 -79
  376. package/esm2015/src/util/PrmMap.js +0 -157
  377. package/esm2015/src/util/Process.js +0 -7
  378. package/esm2015/src/util/ReturnResult.js +0 -46
  379. package/fesm2015/magic-xpa-engine.js.map +0 -1
@@ -0,0 +1,355 @@
1
+ import { PropInterface, PropTable } from "@magic-xpa/gui";
2
+ import { FieldBase } from "../data/FieldBase";
3
+ import { List } from "@magic-xpa/mscorelib";
4
+ import { CommandsProcessorBase_SendingInstruction } from "../CommandsProcessorBase";
5
+ import { Constants, InternalInterface, Logger, XMLConstants, XmlParser } from "@magic-xpa/utils";
6
+ import { Record } from "../data/Record";
7
+ import { CommandFactory } from "../commands/ClientToServer/CommandFactory";
8
+ import { RemoteCommandsProcessor } from "../remote/RemoteCommandsProcessor";
9
+ import { DataviewHeaderBase } from "./DataviewHeaderBase";
10
+ import { FlowMonitorQueue } from "../util/FlowMonitorQueue";
11
+ import { ConstInterface } from "../ConstInterface";
12
+ import { Environment } from "../env/Environment";
13
+ import { AccessHelper } from "../AccessHelper";
14
+ export var Recompute_RcmpBy;
15
+ (function (Recompute_RcmpBy) {
16
+ Recompute_RcmpBy["CLIENT"] = "C";
17
+ Recompute_RcmpBy["SERVER_ON_CHANGE"] = "O";
18
+ })(Recompute_RcmpBy || (Recompute_RcmpBy = {}));
19
+ export class Recompute {
20
+ constructor() {
21
+ this._ctrlProps = null;
22
+ this._formProps = null;
23
+ this._isOwnerFld = true;
24
+ this.OwnerFld = null;
25
+ this._rcmpOrder = null;
26
+ this._subForms = null;
27
+ this._subFormsOnlyRecomp = false;
28
+ this._hasServerLinksRecomputes = false;
29
+ this.RcmpMode = null;
30
+ this.Task = null;
31
+ }
32
+ fillData(dataView, taskRef, parser) {
33
+ this.Task = taskRef;
34
+ this._isOwnerFld = true;
35
+ while (this.initInnerObjects(parser, parser.getNextTag(), dataView)) {
36
+ }
37
+ }
38
+ initInnerObjects(parser, foundTagName, dataView) {
39
+ switch (foundTagName) {
40
+ case XMLConstants.MG_TAG_FLD:
41
+ if (this._isOwnerFld) {
42
+ this.fillFldField(parser, dataView);
43
+ this._isOwnerFld = false;
44
+ }
45
+ else
46
+ this.fillFldField(parser, dataView);
47
+ break;
48
+ case ConstInterface.MG_TAG_LINK:
49
+ this.fillLink(parser, dataView);
50
+ break;
51
+ case XMLConstants.MG_TAG_CONTROL:
52
+ if (this._ctrlProps == null)
53
+ this._ctrlProps = new PropTable();
54
+ this._ctrlProps.fillDataByExists(this.Task, parser);
55
+ if (this._ctrlProps.getCtrlRef() != null && this._ctrlProps.getCtrlRef().IsRepeatable && this.OwnerFld.IsVirtual &&
56
+ !(this.OwnerFld.hasInitExp()))
57
+ this.OwnerFld.causeTableInvalidation(true);
58
+ break;
59
+ case XMLConstants.MG_TAG_FORM_PROPERTIES:
60
+ if (this._formProps == null)
61
+ this._formProps = new PropTable();
62
+ this._formProps.fillDataByExists(this.Task, parser);
63
+ break;
64
+ case ConstInterface.MG_TAG_FLD_END:
65
+ parser.setCurrIndex2EndOfTag();
66
+ return false;
67
+ default:
68
+ Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in Recompute. Insert else if to Recompute.initInnerObjects for " + foundTagName);
69
+ return false;
70
+ }
71
+ return true;
72
+ }
73
+ AddRecomputeItem(item) {
74
+ if (this._rcmpOrder === null)
75
+ this._rcmpOrder = new List();
76
+ this._rcmpOrder.push(item);
77
+ }
78
+ fillLink(parser, dataView) {
79
+ let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
80
+ if (endContext !== -1 && endContext < parser.getXMLdata().length) {
81
+ let tag = parser.getXMLsubstring(endContext);
82
+ parser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_LINK) + ConstInterface.MG_TAG_LINK.length);
83
+ let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
84
+ for (let j = 0; j < tokensVector.length; j += 2) {
85
+ let attribute = (tokensVector.get_Item(j));
86
+ let valueStr = (tokensVector.get_Item(j + 1));
87
+ if (attribute === XMLConstants.MG_ATTR_ID)
88
+ this.AddRecomputeItem(dataView.getTask().getDataviewHeaders().getDataviewHeaderById(XmlParser.getInt(valueStr)));
89
+ else
90
+ Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in Recompute class. Insert case to Recompute.fillLink for " + attribute);
91
+ }
92
+ parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
93
+ return;
94
+ }
95
+ else
96
+ Logger.Instance.WriteExceptionToLogWithMsg("in Recompute.fillLink() out of bounds");
97
+ }
98
+ fillFldField(parser, dataView) {
99
+ let endContext = parser.getXMLdata().indexOf(this._isOwnerFld
100
+ ? XMLConstants.TAG_CLOSE
101
+ : XMLConstants.TAG_TERM, parser.getCurrIndex());
102
+ if (endContext !== -1 && endContext < parser.getXMLdata().length) {
103
+ let tag = parser.getXMLsubstring(endContext);
104
+ parser.add2CurrIndex(tag.indexOf(XMLConstants.MG_TAG_FLD) + XMLConstants.MG_TAG_FLD.length);
105
+ let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
106
+ this.initElements(tokensVector, dataView);
107
+ if (this._isOwnerFld) {
108
+ parser.setCurrIndex(++endContext);
109
+ return;
110
+ }
111
+ parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
112
+ return;
113
+ }
114
+ Logger.Instance.WriteExceptionToLogWithMsg("in Command.FillData() out of bounds");
115
+ }
116
+ initElements(tokensVector, dataView) {
117
+ for (let j = 0; j < tokensVector.length; j += 2) {
118
+ let attribute = (tokensVector.get_Item(j));
119
+ let valueStr = (tokensVector.get_Item(j + 1));
120
+ switch (attribute) {
121
+ case XMLConstants.MG_ATTR_ID: {
122
+ let fldId = XmlParser.getInt(valueStr);
123
+ let fld = dataView.getField(fldId);
124
+ if (this._isOwnerFld) {
125
+ this.OwnerFld = fld;
126
+ this.OwnerFld.setRecompute(this);
127
+ }
128
+ else {
129
+ fld.setRecomputed();
130
+ this.AddRecomputeItem(fld);
131
+ }
132
+ break;
133
+ }
134
+ case ConstInterface.MG_ATTR_RECOMPUTEBY:
135
+ this.RcmpMode = valueStr[0];
136
+ break;
137
+ case ConstInterface.MG_ATTR_SUB_FORM_RCMP:
138
+ this._subFormsOnlyRecomp = true;
139
+ break;
140
+ case ConstInterface.MG_ATTR_HAS_LINK_RECOMPUTES:
141
+ this._hasServerLinksRecomputes = true;
142
+ break;
143
+ case XMLConstants.MG_ATTR_NAME:
144
+ break;
145
+ default:
146
+ Logger.Instance.WriteExceptionToLogWithMsg("There is no such tag in Recompute class. Insert case to Recompute.initElements for " + attribute);
147
+ break;
148
+ }
149
+ }
150
+ }
151
+ async execute(rec) {
152
+ let i;
153
+ let fld;
154
+ let cmdsToServer = this.Task.getMGData().CmdsToServer;
155
+ let cmd;
156
+ try {
157
+ rec.setInRecompute(true);
158
+ this.Task.SetInRecompute(true);
159
+ this.SetSubformsInRecompute(true);
160
+ let allowServerRecompute = this._hasServerLinksRecomputes ||
161
+ (this.Task.getForm().AllowedSubformRecompute && await this.checkRefreshSubForms());
162
+ if (this.RcmpMode !== Recompute_RcmpBy.CLIENT && allowServerRecompute) {
163
+ let inClient = this._subFormsOnlyRecomp;
164
+ this.Task.ExecuteClientSubformRefresh = false;
165
+ if (inClient) {
166
+ inClient = await this.Task.prepareCache(true);
167
+ if (inClient)
168
+ inClient = await this.Task.testAndSet(true);
169
+ }
170
+ if (!inClient) {
171
+ this.Task.DataView.GetFieldsTab().setServerRcmp(true);
172
+ cmd = CommandFactory.CreateRecomputeCommand(this.Task.getTaskTag(), this.OwnerFld.getId(), !this.Task.getForm().AllowedSubformRecompute);
173
+ cmdsToServer.Add(cmd);
174
+ await RemoteCommandsProcessor.GetInstance().Execute(CommandsProcessorBase_SendingInstruction.TASKS_AND_COMMANDS);
175
+ }
176
+ if (this.Task.ExecuteClientSubformRefresh)
177
+ await this.RefreshSubforms();
178
+ else {
179
+ if (await this.recPrefixSubForms())
180
+ await this.recSuffixSubForms();
181
+ this.Task.CleanDoSubformPrefixSuffix();
182
+ }
183
+ }
184
+ else {
185
+ try {
186
+ FlowMonitorQueue.Instance.addRecompute(this.OwnerFld.getVarName(), this.Task.GetTaskDetails());
187
+ if (this._formProps != null)
188
+ await this._formProps.RefreshDisplay(false, false);
189
+ if (this._ctrlProps != null)
190
+ await this._ctrlProps.RefreshDisplay(false, false);
191
+ if (this._rcmpOrder != null) {
192
+ for (i = 0; i < this._rcmpOrder.length; i++) {
193
+ if (this._rcmpOrder.get_Item(i) instanceof FieldBase) {
194
+ fld = this._rcmpOrder.get_Item(i);
195
+ await this.fldRcmp(fld, true);
196
+ }
197
+ else if (this._rcmpOrder.get_Item(i) instanceof DataviewHeaderBase) {
198
+ let curLnk = this._rcmpOrder.get_Item(i);
199
+ await curLnk.getLinkedRecord(rec);
200
+ let linkFields = this.Task.DataView.GetFieldsTab().getLinkFields(curLnk.Id);
201
+ rec.setInCompute(true);
202
+ let saveInForceUpdate = rec.InForceUpdate;
203
+ rec.InForceUpdate = false;
204
+ for (let j = 0; j < linkFields.length; j++) {
205
+ await this.fldRcmp(linkFields.get_Item(j), false);
206
+ rec.clearFlag((linkFields.get_Item(j)).getId(), Record.FLAG_UPDATED);
207
+ rec.clearFlag((linkFields.get_Item(j)).getId(), Record.FLAG_MODIFIED);
208
+ rec.clearFlag((linkFields.get_Item(j)).getId(), Record.FLAG_CRSR_MODIFIED);
209
+ rec.clearHistoryFlag((linkFields.get_Item(j)).getId());
210
+ }
211
+ rec.InForceUpdate = saveInForceUpdate;
212
+ let retFld = curLnk.ReturnField;
213
+ if (retFld != null)
214
+ await this.fldRcmp(retFld, false);
215
+ rec.setInCompute(false);
216
+ rec.setForceSaveOrg(true);
217
+ }
218
+ }
219
+ }
220
+ await this.RefreshSubforms();
221
+ }
222
+ catch (e) {
223
+ Logger.Instance.WriteExceptionToLogWithMsg("in Recompute.execute(): " + e.Message);
224
+ }
225
+ }
226
+ this.Task.SetInRecompute(false);
227
+ this.SetSubformsInRecompute(false);
228
+ }
229
+ finally {
230
+ rec.buildLinksPosStr();
231
+ rec.setInRecompute(false);
232
+ }
233
+ }
234
+ async RefreshSubforms() {
235
+ if (this.Task.getForm().AllowedSubformRecompute) {
236
+ let subformsToRefresh = await this.GetSubformsToRefresh();
237
+ for (let i = 0; i < subformsToRefresh.length; i++) {
238
+ let subformTask = subformsToRefresh.get_Item(i);
239
+ await this.Task.SubformRefresh(subformTask, true);
240
+ }
241
+ }
242
+ }
243
+ async SetSubformsInRecompute(inRecompute) {
244
+ let subformsToRefresh = await this.GetSubformsToRefresh();
245
+ for (let i = 0; i < subformsToRefresh.length; i++) {
246
+ let subformTask = subformsToRefresh.get_Item(i);
247
+ subformTask.SetInRecompute(inRecompute);
248
+ }
249
+ }
250
+ async fldRcmp(fld, computeField) {
251
+ if (fld.IsVirtual
252
+ || ((this.Task.getMode() !== Constants.TASK_MODE_QUERY ||
253
+ Environment.Instance.allowUpdateInQueryMode(this.Task.getCompIdx())))) {
254
+ if (!fld.isInEvalProcess()) {
255
+ if (computeField)
256
+ await fld.compute(true);
257
+ else
258
+ await fld.setValueAndStartRecompute(fld.getValue(false), fld.isNull(), true, false, false);
259
+ await fld.updateDisplay();
260
+ }
261
+ }
262
+ }
263
+ buildSubFormList() {
264
+ if (this._subForms === null) {
265
+ this._subForms = new List();
266
+ let subTasksTab = this.Task.getSubTasks();
267
+ if (subTasksTab !== null) {
268
+ for (let i = 0; i < subTasksTab.getSize(); i = i + 1) {
269
+ let subForm = subTasksTab.getTask(i);
270
+ if (subForm.getForm().getSubFormCtrl() !== null && subForm.refreshesOn(this.OwnerFld.getId())) {
271
+ this._subForms.push(subForm);
272
+ }
273
+ }
274
+ }
275
+ }
276
+ }
277
+ RemoveSubform(subformTask) {
278
+ this._subForms.Remove(subformTask);
279
+ }
280
+ AddSubform(subformTask) {
281
+ if (this._subForms === null)
282
+ this._subForms = new List();
283
+ if (!this._subForms.Contains(subformTask))
284
+ this._subForms.push(subformTask);
285
+ }
286
+ async recSuffixSubForms() {
287
+ let i;
288
+ let subForm;
289
+ let successful = true;
290
+ let subformCtrl;
291
+ this.buildSubFormList();
292
+ for (i = 0; successful && i < this._subForms.length; i++) {
293
+ subForm = this._subForms.get_Item(i);
294
+ subformCtrl = subForm.getForm().getSubFormCtrl();
295
+ if (subForm.isStarted() && !subformCtrl.RefreshOnVisible &&
296
+ await subformCtrl.checkProp(PropInterface.PROP_TYPE_AUTO_REFRESH, true) && !subForm.InSelect
297
+ && subForm.DoSubformPrefixSuffix) {
298
+ await AccessHelper.eventsManager.handleInternalEventWithTask(subForm, InternalInterface.MG_ACT_REC_SUFFIX);
299
+ successful = !AccessHelper.eventsManager.GetStopExecutionFlag();
300
+ }
301
+ }
302
+ this.Task.DataView.setPrevCurrRec();
303
+ return (successful);
304
+ }
305
+ async checkRefreshSubForms() {
306
+ let refresh = !this._subFormsOnlyRecomp;
307
+ let subformsToRefresh = await this.GetSubformsToRefresh();
308
+ if (subformsToRefresh.length > 0)
309
+ refresh = true;
310
+ return refresh;
311
+ }
312
+ async GetSubformsToRefresh() {
313
+ let subTasks = new List();
314
+ let subformCtrl;
315
+ this.buildSubFormList();
316
+ for (let i = 0; i < this._subForms.length; i++) {
317
+ let subTask = this._subForms[i];
318
+ subformCtrl = subTask.getForm().getSubFormCtrl();
319
+ if (subTask.isStarted() && await subformCtrl.checkProp(PropInterface.PROP_TYPE_AUTO_REFRESH, true) &&
320
+ !subTask.InSelect && !subTask.InEndTask) {
321
+ await subformCtrl.checkProp(PropInterface.PROP_TYPE_VISIBLE, true);
322
+ if (!subformCtrl.isVisible() && !await subformCtrl.checkProp(PropInterface.PROP_TYPE_REFRESH_WHEN_HIDDEN, false))
323
+ subformCtrl.RefreshOnVisible = true;
324
+ else
325
+ subTasks.push(subTask);
326
+ }
327
+ }
328
+ return subTasks;
329
+ }
330
+ async recPrefixSubForms() {
331
+ let i;
332
+ let subForm;
333
+ let successful = true;
334
+ let subformCtrl;
335
+ this.buildSubFormList();
336
+ for (i = 0; successful && i < this._subForms.length; i++) {
337
+ subForm = this._subForms.get_Item(i);
338
+ subformCtrl = subForm.getForm().getSubFormCtrl();
339
+ if (subForm.isStarted() && !subformCtrl.RefreshOnVisible
340
+ && await subformCtrl.checkProp(PropInterface.PROP_TYPE_AUTO_REFRESH, true)
341
+ && !subForm.InSelect && subForm.DoSubformPrefixSuffix) {
342
+ await AccessHelper.eventsManager.handleInternalEventWithTaskAndSubformRefresh(subForm, InternalInterface.MG_ACT_REC_PREFIX, true);
343
+ successful = !AccessHelper.eventsManager.GetStopExecutionFlag();
344
+ }
345
+ }
346
+ return successful;
347
+ }
348
+ notifyServerOnChange() {
349
+ return this.RcmpMode === Recompute_RcmpBy.SERVER_ON_CHANGE;
350
+ }
351
+ isServerRcmp() {
352
+ return this.RcmpMode !== Recompute_RcmpBy.CLIENT;
353
+ }
354
+ }
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVjb21wdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW5naW5lL3NyYy9ydC9SZWNvbXB1dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTFDLE9BQU8sRUFBQyx3Q0FBd0MsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBSTFELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE1BQU0sQ0FBTixJQUFZLGdCQUdYO0FBSEQsV0FBWSxnQkFBZ0I7SUFDMUIsZ0NBQVksQ0FBQTtJQUNaLDBDQUFzQixDQUFBO0FBQ3hCLENBQUMsRUFIVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRzNCO0FBRUQsTUFBTSxPQUFPLFNBQVM7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Q0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLFdBQVcsR0FBYyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO21CQUNuRCxNQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQzttQkFDeEUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtnQkFDdkQsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLDRDQUE0QyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEksVUFBVSxHQUFHLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQ2pFO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztJQUM3RCxDQUFDO0lBR0QsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcm9wSW50ZXJmYWNlLCBQcm9wVGFibGV9IGZyb20gXCJAbWFnaWMteHBhL2d1aVwiO1xyXG5pbXBvcnQge0ZpZWxkQmFzZX0gZnJvbSBcIi4uL2RhdGEvRmllbGRCYXNlXCI7XHJcbmltcG9ydCB7TGlzdH0gZnJvbSBcIkBtYWdpYy14cGEvbXNjb3JlbGliXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tcIjtcclxuaW1wb3J0IHtDb21tYW5kc1Byb2Nlc3NvckJhc2VfU2VuZGluZ0luc3RydWN0aW9ufSBmcm9tIFwiLi4vQ29tbWFuZHNQcm9jZXNzb3JCYXNlXCI7XHJcbmltcG9ydCB7Q29uc3RhbnRzLCBJbnRlcm5hbEludGVyZmFjZSwgTG9nZ2VyLCBYTUxDb25zdGFudHMsIFhtbFBhcnNlcn0gZnJvbSBcIkBtYWdpYy14cGEvdXRpbHNcIjtcclxuaW1wb3J0IHtSZWNvcmR9IGZyb20gXCIuLi9kYXRhL1JlY29yZFwiO1xyXG5pbXBvcnQge0NvbW1hbmRzVGFibGV9IGZyb20gXCIuLi9Db21tYW5kc1RhYmxlXCI7XHJcbmltcG9ydCB7SUNsaWVudENvbW1hbmR9IGZyb20gXCIuLi9jb21tYW5kcy9JQ2xpZW50Q29tbWFuZFwiO1xyXG5pbXBvcnQge0NvbW1hbmRGYWN0b3J5fSBmcm9tIFwiLi4vY29tbWFuZHMvQ2xpZW50VG9TZXJ2ZXIvQ29tbWFuZEZhY3RvcnlcIjtcclxuaW1wb3J0IHtSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvcn0gZnJvbSBcIi4uL3JlbW90ZS9SZW1vdGVDb21tYW5kc1Byb2Nlc3NvclwiO1xyXG5pbXBvcnQge0RhdGF2aWV3SGVhZGVyQmFzZX0gZnJvbSBcIi4vRGF0YXZpZXdIZWFkZXJCYXNlXCI7XHJcbmltcG9ydCB7Rmxvd01vbml0b3JRdWV1ZX0gZnJvbSBcIi4uL3V0aWwvRmxvd01vbml0b3JRdWV1ZVwiO1xyXG5pbXBvcnQge0ZpZWxkc1RhYmxlRXh0IGFzIEZpZWxkc1RhYmxlIH0gZnJvbSBcIi4uL2RhdGEvRmllbGRzVGFibGVcIjtcclxuaW1wb3J0IHtUYXNrc1RhYmxlfSBmcm9tIFwiLi4vdGFza3MvVGFza3NUYWJsZVwiO1xyXG5pbXBvcnQge01nQ29udHJvbH0gZnJvbSBcIi4uL2d1aS9NZ0NvbnRyb2xcIjtcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSBcIi4uL0NvbnN0SW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7RGF0YVZpZXd9IGZyb20gXCIuLi9kYXRhL0RhdGFWaWV3XCI7XHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL2Vudi9FbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBBY2Nlc3NIZWxwZXIgfSBmcm9tIFwiLi4vQWNjZXNzSGVscGVyXCI7XHJcblxyXG5leHBvcnQgZW51bSBSZWNvbXB1dGVfUmNtcEJ5IHtcclxuICBDTElFTlQgPSAnQycsXHJcbiAgU0VSVkVSX09OX0NIQU5HRSA9ICdPJ1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVjb21wdXRlIHtcclxuICBwcml2YXRlIF9jdHJsUHJvcHM6IFByb3BUYWJsZSA9IG51bGw7IC8vIGFmZmVjdGVkIGNvbnRyb2wgcHJvcGVydGllc1xyXG4gIHByaXZhdGUgX2Zvcm1Qcm9wczogUHJvcFRhYmxlID0gbnVsbDsgLy8gYWZmZWN0ZWQgZm9ybSBwcm9wZXJ0aWVzXHJcbiAgcHJpdmF0ZSBfaXNPd25lckZsZDogYm9vbGVhbiA9IHRydWU7IC8vIGRlbm90ZXMgaWYgdGhlIGN1cnJlbnQgcGFyc2VkIGZpZWxkIHRhZyBpcyB0aGUgb3duZXIgZmllbGRcclxuICBPd25lckZsZDogRmllbGRCYXNlID0gbnVsbDsgLy8gdGhlIGZpZWxkIHRoYXQgb3ducyB0aGlzIHJlY29tcHV0ZSBzdHJ1Y3R1cmVcclxuXHJcbiAgcHJpdmF0ZSBfcmNtcE9yZGVyOiBMaXN0PEZpZWxkQmFzZSB8IERhdGF2aWV3SGVhZGVyQmFzZT4gPSBudWxsOyAvLyBhZmZlY3RlZCBmaWVsZHMgYW5kIGxpbmtzLiBDYW4ndCB1c2UgTGlzdDxUPiAtIGhvbGRzIGJvdGggZmllbGRzIGFuZCBsaW5rc1xyXG4gIHByaXZhdGUgX3N1YkZvcm1zOiBMaXN0PFRhc2s+ID0gbnVsbDsgLy8gc3ViZm9ybXMgKHRhc2tzKSBhZmZlY3RlZCBieSB0aGlzIHJlY29tcHV0ZVxyXG4gIHByaXZhdGUgX3N1YkZvcm1zT25seVJlY29tcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2hhc1NlcnZlckxpbmtzUmVjb21wdXRlczogYm9vbGVhbiA9IGZhbHNlOyAvLyB0cnVlLCBpZiB0aGUgZmllbGQgaGFzIGFueSBsaW5rIHJlY29tcHV0ZXMgYW5kIGl0IGlzIGEgc2VydmVyIHJlY29tcHV0ZVxyXG4gIFJjbXBNb2RlOiBSZWNvbXB1dGVfUmNtcEJ5ID0gbnVsbDsgIC8vIFdobyAoYW5kIHdoZW4pIHBlcmZvcm1zIHJjbXAgKGJ5IGNsaWVudCxcclxuXHJcbiAgVGFzazogVGFzayA9IG51bGw7IC8vIGEgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIG9mIHRoaXMgUmVjb21wdXRlXHJcblxyXG4gIGNvbnN0cnVjdG9yKCl7XHJcbiAgfVxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB0byBmaWxsIGFsbCByZWxldmFudCBkYXRhIGZvciA8ZmxkIC4uLj4gLi4uPC9mbGQ+IHRhZ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJkYXRhVmlld1wiPnJlZmVyZW5jZSB0byBhbGwgRGF0YVZpZXcgb2JqZWN0LCB3aGljaCBjb25zaXN0IHJlbGV2YW50IGZpZWxkcyA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidGFza1JlZlwiPnRvIHBhcmVudCB0YXNrLCB3aGljaCBuZWVkIGJlIGluaXRpYWxpemVkIGluIENvbnRyb2xUYWJsZS5Db250cm9sLnRhc2sgPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGluZGV4IG9mIHRoZSBlbmQgb2YgY3VycmVudCA8ZmxkIC4uLj49PiA8L2ZsZD4gPC9yZXR1cm5zPlxyXG4gIGZpbGxEYXRhKGRhdGFWaWV3OiBEYXRhVmlldywgdGFza1JlZjogVGFzaywgcGFyc2VyOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLlRhc2sgPSB0YXNrUmVmO1xyXG4gICAgdGhpcy5faXNPd25lckZsZCA9IHRydWU7IC8vIHN0YXJ0IG9mIG5ldyA8ZmxkPiB0YWdcclxuICAgIHdoaWxlICh0aGlzLmluaXRJbm5lck9iamVjdHMocGFyc2VyLCBwYXJzZXIuZ2V0TmV4dFRhZygpLCBkYXRhVmlldykpIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGaWxsIGlubmVyIG1lbWJlcnMgYW5kIG5lZWRlZCBsaW5rcyBmb3IgdGhlIGN1cnJlbnQgJ2ZsZCdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiKChEYXRhVmlldylkYXRhVmlldylcIj5yZWZlcmVuY2UgdG8gYWxsIERhdGFWaWV3IG9iamVjdCwgd2hpY2ggY29uc2lzdCByZWxldmFudCBmaWVsZHMgPC9wYXJhbT5cclxuICBwcml2YXRlIGluaXRJbm5lck9iamVjdHMocGFyc2VyOiBYbWxQYXJzZXIsIGZvdW5kVGFnTmFtZTogc3RyaW5nLCBkYXRhVmlldzogRGF0YVZpZXcpOiBib29sZWFuIHtcclxuICAgIHN3aXRjaCAoZm91bmRUYWdOYW1lKSB7XHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19GTEQ6XHJcbiAgICAgICAgLy8gaW5pdCA8ZmxkIGlkID0gcmVjb21wdXRlX2J5PT4gZmlyc3QgdGltZSwgaW5pdCByZWZlcmVuY2UgYnkgaWRcclxuICAgICAgICBpZiAodGhpcy5faXNPd25lckZsZCkge1xyXG4gICAgICAgICAgdGhpcy5maWxsRmxkRmllbGQocGFyc2VyLCBkYXRhVmlldyk7XHJcbiAgICAgICAgICB0aGlzLl9pc093bmVyRmxkID0gZmFsc2U7IC8vIG11c3QgdG8gYmUgYWZ0ZXIgRmlsbEZsZEZpZWxkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuZmlsbEZsZEZpZWxkKHBhcnNlciwgZGF0YVZpZXcpOyAvLyBpdCdzIG5vdCBuZWVkICgoRGF0YVZpZXcpZGF0YVZpZXcpLCBpdCdzIG5vdCBmaXJzdCA8ZmxkID5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0xJTks6XHJcbiAgICAgICAgdGhpcy5maWxsTGluayhwYXJzZXIsIGRhdGFWaWV3KTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX1RBR19DT05UUk9MOlxyXG4gICAgICAgIGlmICh0aGlzLl9jdHJsUHJvcHMgPT0gbnVsbClcclxuICAgICAgICAgIHRoaXMuX2N0cmxQcm9wcyA9IG5ldyBQcm9wVGFibGUoKTtcclxuXHJcbiAgICAgICAgLy8gZmlsbCB0aGUgcHJvcCB0YWJsZSB1c2luZyB0aGUgZXhpc3RpbmcgcHJvcGVydGllc1xyXG4gICAgICAgIHRoaXMuX2N0cmxQcm9wcy5maWxsRGF0YUJ5RXhpc3RzKHRoaXMuVGFzaywgcGFyc2VyKTtcclxuXHJcbiAgICAgICAgLy8gaWYgdmlydHVhbCBmaWVsZCBjYXVzZXMgcmVjb21wdXRlIG9mIHJlcGVhdGFibGUgY29udHJvbFxyXG4gICAgICAgIGlmICh0aGlzLl9jdHJsUHJvcHMuZ2V0Q3RybFJlZigpICE9IG51bGwgJiYgdGhpcy5fY3RybFByb3BzLmdldEN0cmxSZWYoKS5Jc1JlcGVhdGFibGUgJiYgdGhpcy5Pd25lckZsZC5Jc1ZpcnR1YWwgJiZcclxuICAgICAgICAgICEodGhpcy5Pd25lckZsZC5oYXNJbml0RXhwKCkpKVxyXG4gICAgICAgICAgdGhpcy5Pd25lckZsZC5jYXVzZVRhYmxlSW52YWxpZGF0aW9uKHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX0ZPUk1fUFJPUEVSVElFUzpcclxuICAgICAgICBpZiAodGhpcy5fZm9ybVByb3BzID09IG51bGwpXHJcbiAgICAgICAgICB0aGlzLl9mb3JtUHJvcHMgPSBuZXcgUHJvcFRhYmxlKCk7XHJcblxyXG4gICAgICAgIC8vIGZpbGwgdGhlIHByb3AgdGFibGUgdXNpbmcgdGhlIGV4aXN0aW5nIHByb3BlcnRpZXNcclxuICAgICAgICB0aGlzLl9mb3JtUHJvcHMuZmlsbERhdGFCeUV4aXN0cyh0aGlzLlRhc2ssIHBhcnNlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19GTERfRU5EOlxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgyRW5kT2ZUYWcoKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIFJlY29tcHV0ZS4gSW5zZXJ0IGVsc2UgaWYgdG8gUmVjb21wdXRlLmluaXRJbm5lck9iamVjdHMgZm9yIFwiICsgZm91bmRUYWdOYW1lKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgQWRkUmVjb21wdXRlSXRlbShpdGVtOiBGaWVsZEJhc2UgfCBEYXRhdmlld0hlYWRlckJhc2UpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9yY21wT3JkZXIgPT09IG51bGwpXHJcbiAgICAgIHRoaXMuX3JjbXBPcmRlciA9IG5ldyBMaXN0KCk7XHJcbiAgICB0aGlzLl9yY21wT3JkZXIucHVzaChpdGVtKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBmaWxsIHRoZSByZWNvbXB1dGVkIGxpbmsgZGF0YSAob25seSBpZClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgZmlsbExpbmsocGFyc2VyOiBYbWxQYXJzZXIsIGRhdGFWaWV3OiBEYXRhVmlldyk6IHZvaWQge1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZihYTUxDb25zdGFudHMuVEFHX1RFUk0sIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBTdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihDb25zdEludGVyZmFjZS5NR19UQUdfTElOSykgKyBDb25zdEludGVyZmFjZS5NR19UQUdfTElOSy5sZW5ndGgpO1xyXG5cclxuICAgICAgbGV0IHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2VucyhwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpLCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG5cclxuICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogKz0gMikge1xyXG4gICAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9ICh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oaikpO1xyXG4gICAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgICBpZiAoYXR0cmlidXRlID09PSBYTUxDb25zdGFudHMuTUdfQVRUUl9JRClcclxuICAgICAgICAgIHRoaXMuQWRkUmVjb21wdXRlSXRlbSgoPFRhc2s+ZGF0YVZpZXcuZ2V0VGFzaygpKS5nZXREYXRhdmlld0hlYWRlcnMoKS5nZXREYXRhdmlld0hlYWRlckJ5SWQoWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cikpKTtcclxuXHJcbiAgICAgICAgZWxzZSBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJUaGVyZSBpcyBubyBzdWNoIHRhZyBpbiBSZWNvbXB1dGUgY2xhc3MuIEluc2VydCBjYXNlIHRvIFJlY29tcHV0ZS5maWxsTGluayBmb3IgXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpOyAvLyB0byBkZWxldGUgXCIvPlwiIHRvb1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIFJlY29tcHV0ZS5maWxsTGluaygpIG91dCBvZiBib3VuZHNcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgSW5pdCBSZWNvbXB1dGVCeSBtZW1iZXIgYW5kIGluaXQgcmVmZXJlbmNlIGZyb20gdGhlIEZpZWxkUm9vdCB0byB0aGUgUmVjb21wdXRlIG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ4bWxQYXJzZXIuZ2V0WE1MZGF0YSgpXCI+LCBpbnB1dCBzdHJpbmcgZnVsbCBYTUwuaW5uZXJUZXh0IDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ4bWxQYXJzZXIuZ2V0Q3VyckluZGV4KClcIj4sIGluZGV4IG9mIHN0YXJ0IGZpcnN0IDxmbGQgLi4uPiB0YWcgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIigoRGF0YVZpZXcpZGF0YVZpZXcpXCI+cmVmZXJlbmNlIHRvIGFsbCBEYXRhVmlldyBvYmplY3QsIHdoaWNoIGNvbnNpc3QgcmVsZXZhbnQgZmllbGRzIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbmRleCBvZiBlbmQgb2YgPGZsZCAuLi4+IHRhZyA8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBmaWxsRmxkRmllbGQocGFyc2VyOiBYbWxQYXJzZXIsIGRhdGFWaWV3OiBEYXRhVmlldyk6IHZvaWQge1xyXG4gICAgbGV0IGVuZENvbnRleHQ6IG51bWJlciA9IHBhcnNlci5nZXRYTUxkYXRhKCkuaW5kZXhPZih0aGlzLl9pc093bmVyRmxkXHJcbiAgICAgID8gWE1MQ29uc3RhbnRzLlRBR19DTE9TRVxyXG4gICAgICA6IFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcblxyXG4gICAgICAvLyBsYXN0IHBvc2l0aW9uIG9mIGl0cyB0YWdcclxuICAgICAgbGV0IHRhZzogU3RyaW5nID0gcGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KTtcclxuICAgICAgcGFyc2VyLmFkZDJDdXJySW5kZXgodGFnLmluZGV4T2YoWE1MQ29uc3RhbnRzLk1HX1RBR19GTEQpICsgWE1MQ29uc3RhbnRzLk1HX1RBR19GTEQubGVuZ3RoKTtcclxuXHJcbiAgICAgIGxldCB0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPiA9IFhtbFBhcnNlci5nZXRUb2tlbnMocGFyc2VyLmdldFhNTHN1YnN0cmluZyhlbmRDb250ZXh0KSxcclxuICAgICAgICBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IsIGRhdGFWaWV3KTtcclxuICAgICAgaWYgKHRoaXMuX2lzT3duZXJGbGQpIHtcclxuICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4KCsrZW5kQ29udGV4dCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIFhNTENvbnN0YW50cy5UQUdfVEVSTS5sZW5ndGgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBDb21tYW5kLkZpbGxEYXRhKCkgb3V0IG9mIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmQgZWxlbWVudCA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiKChEYXRhVmlldylkYXRhVmlldylcIj5yZWZlcmVuY2UgdG8gZmllbGQgb2JqZWN0cywgZm9yIDxmbGQgaWQgPSAuLi4+XHJcbiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChEYXRhVmlldylkYXRhVmlldyk9PW51bGw9PiBpdCdzIGZpcnN0IGZvdW5kIGZpZWxkLCBuZWVkIHRvIGluaXQgcmVmZXJlbmNlXHJcbiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgRmllbGRSb290XHJcbiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChEYXRhVmlldylkYXRhVmlldykhPW51bGw9PiBhZGQgdGhlIGRhdGEgdG8gY3VycmllbnQgUmVjb3JkLCBpdCdzIG5vdCBmaXJzdCA8ZmxkPlxyXG4gIC8vLyA8L3BhcmFtPlxyXG4gIHByaXZhdGUgaW5pdEVsZW1lbnRzKHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+LCBkYXRhVmlldzogRGF0YVZpZXcpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lEOiB7XHJcbiAgICAgICAgICBsZXQgZmxkSWQ6IG51bWJlciA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgbGV0IGZsZCA9IDxGaWVsZEJhc2U+ZGF0YVZpZXcuZ2V0RmllbGQoZmxkSWQpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2lzT3duZXJGbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5Pd25lckZsZCA9IGZsZDtcclxuICAgICAgICAgICAgdGhpcy5Pd25lckZsZC5zZXRSZWNvbXB1dGUodGhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZmxkLnNldFJlY29tcHV0ZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5BZGRSZWNvbXB1dGVJdGVtKGZsZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1JFQ09NUFVURUJZOlxyXG4gICAgICAgICAgdGhpcy5SY21wTW9kZSA9IDxSZWNvbXB1dGVfUmNtcEJ5PnZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TVUJfRk9STV9SQ01QOlxyXG4gICAgICAgICAgdGhpcy5fc3ViRm9ybXNPbmx5UmVjb21wID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSEFTX0xJTktfUkVDT01QVVRFUzpcclxuICAgICAgICAgIHRoaXMuX2hhc1NlcnZlckxpbmtzUmVjb21wdXRlcyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOlxyXG4gICAgICAgICAgLyogaWdub3JlIHRoZSBuYW1lICovXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIFJlY29tcHV0ZSBjbGFzcy4gSW5zZXJ0IGNhc2UgdG8gUmVjb21wdXRlLmluaXRFbGVtZW50cyBmb3IgXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIHJlY29tcHV0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZWNcIj50aGUgcmVjb3JkIG9uIHdoaWNoIHRoZSByZWNvbXB1dGUgaXMgZXhlY3V0ZWQ8L3BhcmFtPlxyXG4gIHB1YmxpYyBhc3luYyBleGVjdXRlKHJlYzogUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgaTogbnVtYmVyO1xyXG4gICAgbGV0IGZsZDogRmllbGRCYXNlO1xyXG4gICAgbGV0IGNtZHNUb1NlcnZlcjogQ29tbWFuZHNUYWJsZSA9IDxDb21tYW5kc1RhYmxlPnRoaXMuVGFzay5nZXRNR0RhdGEoKS5DbWRzVG9TZXJ2ZXI7XHJcbiAgICBsZXQgY21kOiBJQ2xpZW50Q29tbWFuZDtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZWMuc2V0SW5SZWNvbXB1dGUodHJ1ZSk7XHJcbiAgICAgIHRoaXMuVGFzay5TZXRJblJlY29tcHV0ZSAodHJ1ZSk7XHJcbiAgICAgIHRoaXMuU2V0U3ViZm9ybXNJblJlY29tcHV0ZSh0cnVlKTtcclxuICAgICAgbGV0IGFsbG93U2VydmVyUmVjb21wdXRlOiBib29sZWFuID0gdGhpcy5faGFzU2VydmVyTGlua3NSZWNvbXB1dGVzIHx8XHJcbiAgICAgICAgICAodGhpcy5UYXNrLmdldEZvcm0oKS5BbGxvd2VkU3ViZm9ybVJlY29tcHV0ZSAmJiBhd2FpdCB0aGlzLmNoZWNrUmVmcmVzaFN1YkZvcm1zKCkpO1xyXG5cclxuICAgICAgLy8gU0VSVkVSXHJcbiAgICAgIGlmICh0aGlzLlJjbXBNb2RlICE9PSBSZWNvbXB1dGVfUmNtcEJ5LkNMSUVOVCAmJiBhbGxvd1NlcnZlclJlY29tcHV0ZSkge1xyXG4gICAgICAgIGxldCBpbkNsaWVudDogYm9vbGVhbiA9IHRoaXMuX3N1YkZvcm1zT25seVJlY29tcDtcclxuICAgICAgICB0aGlzLlRhc2suRXhlY3V0ZUNsaWVudFN1YmZvcm1SZWZyZXNoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIGlmIHRoZSByZWNvbXB1dGUgaXMgbm90IG9ubHkgZHVlIHRvIHN1Yi1mb3JtcyBnbyB0byBzZXJ2ZXJcclxuICAgICAgICBpZiAoaW5DbGllbnQpIHtcclxuICAgICAgICAgIGluQ2xpZW50ID0gYXdhaXQgdGhpcy5UYXNrLnByZXBhcmVDYWNoZSh0cnVlKTtcclxuICAgICAgICAgIC8vIGlmIGFsbCBzdWItZm9ybSBhcmUgbm90IHVwZGF0ZVxyXG4gICAgICAgICAgaWYgKGluQ2xpZW50KVxyXG4gICAgICAgICAgICBpbkNsaWVudCA9IGF3YWl0IHRoaXMuVGFzay50ZXN0QW5kU2V0KHRydWUpOyAvLyB0cnkgdG8gdGFrZSBkYXRhdmlld3MgZnJvbSBjYWNoZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWluQ2xpZW50KSB7XHJcbiAgICAgICAgICAoPEZpZWxkc1RhYmxlPnRoaXMuVGFzay5EYXRhVmlldy5HZXRGaWVsZHNUYWIoKSkuc2V0U2VydmVyUmNtcCh0cnVlKTtcclxuICAgICAgICAgIGNtZCA9IENvbW1hbmRGYWN0b3J5LkNyZWF0ZVJlY29tcHV0ZUNvbW1hbmQodGhpcy5UYXNrLmdldFRhc2tUYWcoKSwgdGhpcy5Pd25lckZsZC5nZXRJZCgpLCAhdGhpcy5UYXNrLmdldEZvcm0oKS5BbGxvd2VkU3ViZm9ybVJlY29tcHV0ZSk7XHJcbiAgICAgICAgICBjbWRzVG9TZXJ2ZXIuQWRkKGNtZCk7XHJcbiAgICAgICAgICBhd2FpdCBSZW1vdGVDb21tYW5kc1Byb2Nlc3Nvci5HZXRJbnN0YW5jZSgpLkV4ZWN1dGUoQ29tbWFuZHNQcm9jZXNzb3JCYXNlX1NlbmRpbmdJbnN0cnVjdGlvbi5UQVNLU19BTkRfQ09NTUFORFMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5UYXNrLkV4ZWN1dGVDbGllbnRTdWJmb3JtUmVmcmVzaClcclxuICAgICAgICAgIGF3YWl0IHRoaXMuUmVmcmVzaFN1YmZvcm1zKCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoYXdhaXQgdGhpcy5yZWNQcmVmaXhTdWJGb3JtcygpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlY1N1ZmZpeFN1YkZvcm1zKCk7XHJcbiAgICAgICAgICB0aGlzLlRhc2suQ2xlYW5Eb1N1YmZvcm1QcmVmaXhTdWZmaXgoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gQ0xJRU5UXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBGbG93TW9uaXRvclF1ZXVlLkluc3RhbmNlLmFkZFJlY29tcHV0ZSh0aGlzLk93bmVyRmxkLmdldFZhck5hbWUoKSwgdGhpcy5UYXNrLkdldFRhc2tEZXRhaWxzKCkpO1xyXG5cclxuICAgICAgICAgIC8vIEZPUk0gUFJPUEVSVElFU1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2Zvcm1Qcm9wcyAhPSBudWxsKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9mb3JtUHJvcHMuUmVmcmVzaERpc3BsYXkoZmFsc2UsIGZhbHNlKTtcclxuXHJcbiAgICAgICAgICAvLyBDVFJMIFBST1BFUlRJRVNcclxuICAgICAgICAgIGlmICh0aGlzLl9jdHJsUHJvcHMgIT0gbnVsbClcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY3RybFByb3BzLlJlZnJlc2hEaXNwbGF5KGZhbHNlLCBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgLy8gcmUtY3VtcHV0ZSBjbGllbnQgc2lkZSBmaWVsZHMgYW5kIGxpbmtzXHJcbiAgICAgICAgICBpZiAodGhpcy5fcmNtcE9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuX3JjbXBPcmRlci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9yY21wT3JkZXIuZ2V0X0l0ZW0oaSkgaW5zdGFuY2VvZiBGaWVsZEJhc2UpIHtcclxuICAgICAgICAgICAgICAgIGZsZCA9IDxGaWVsZEJhc2U+dGhpcy5fcmNtcE9yZGVyLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mbGRSY21wKGZsZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3JjbXBPcmRlci5nZXRfSXRlbShpKSBpbnN0YW5jZW9mIERhdGF2aWV3SGVhZGVyQmFzZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1ckxuayA9IDxEYXRhdmlld0hlYWRlckJhc2U+dGhpcy5fcmNtcE9yZGVyLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY3VyTG5rLmdldExpbmtlZFJlY29yZChyZWMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgcmVjb21wdXRlZCBhIGxpbmsgd2Ugc2hvdWxkIGFsc28gc3RhcnQgdGhlIHJlY29tcHV0ZSBwcm9jZXNzIG9uIGFsbCBvZiBpdHMgZmllbGRzXHJcbiAgICAgICAgICAgICAgICBsZXQgbGlua0ZpZWxkczogTGlzdDxGaWVsZEJhc2U+ID0gKDxGaWVsZHNUYWJsZT50aGlzLlRhc2suRGF0YVZpZXcuR2V0RmllbGRzVGFiKCkpLmdldExpbmtGaWVsZHMoY3VyTG5rLklkKTtcclxuICAgICAgICAgICAgICAgIHJlYy5zZXRJbkNvbXB1dGUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2F2ZUluRm9yY2VVcGRhdGU6IGJvb2xlYW4gPSByZWMuSW5Gb3JjZVVwZGF0ZTtcclxuICAgICAgICAgICAgICAgIHJlYy5JbkZvcmNlVXBkYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IGxpbmtGaWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mbGRSY21wKGxpbmtGaWVsZHMuZ2V0X0l0ZW0oaiksIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgcmVjLmNsZWFyRmxhZygobGlua0ZpZWxkcy5nZXRfSXRlbShqKSkuZ2V0SWQoKSwgUmVjb3JkLkZMQUdfVVBEQVRFRCk7XHJcbiAgICAgICAgICAgICAgICAgIHJlYy5jbGVhckZsYWcoKGxpbmtGaWVsZHMuZ2V0X0l0ZW0oaikpLmdldElkKCksIFJlY29yZC5GTEFHX01PRElGSUVEKTtcclxuICAgICAgICAgICAgICAgICAgcmVjLmNsZWFyRmxhZygobGlua0ZpZWxkcy5nZXRfSXRlbShqKSkuZ2V0SWQoKSwgUmVjb3JkLkZMQUdfQ1JTUl9NT0RJRklFRCk7XHJcbiAgICAgICAgICAgICAgICAgIHJlYy5jbGVhckhpc3RvcnlGbGFnKChsaW5rRmllbGRzLmdldF9JdGVtKGopKS5nZXRJZCgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlYy5JbkZvcmNlVXBkYXRlID0gc2F2ZUluRm9yY2VVcGRhdGU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgcmVjb21wdXRlIHByb2Nlc3Mgb24gdGhlIHJldCB2YWwgb2YgdGhlIGxpbmtcclxuICAgICAgICAgICAgICAgIGxldCByZXRGbGQ6IEZpZWxkQmFzZSA9IGN1ckxuay5SZXR1cm5GaWVsZDtcclxuICAgICAgICAgICAgICAgIGlmIChyZXRGbGQgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5mbGRSY21wKHJldEZsZCwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJlYy5zZXRJbkNvbXB1dGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmVjLnNldEZvcmNlU2F2ZU9yZyh0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuUmVmcmVzaFN1YmZvcm1zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBSZWNvbXB1dGUuZXhlY3V0ZSgpOiBcIiArIGUuTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSAgLy8gRU5EIENMSUVOVCBCTE9DS1xyXG4gICAgICB0aGlzLlRhc2suU2V0SW5SZWNvbXB1dGUgKGZhbHNlKTtcclxuICAgICAgdGhpcy5TZXRTdWJmb3Jtc0luUmVjb21wdXRlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgcmVjLmJ1aWxkTGlua3NQb3NTdHIoKTtcclxuICAgICAgcmVjLnNldEluUmVjb21wdXRlKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLyBTdWJmb3JtcyByZWNvbXB1dGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgUmVmcmVzaFN1YmZvcm1zKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuVGFzay5nZXRGb3JtKCkuQWxsb3dlZFN1YmZvcm1SZWNvbXB1dGUpIHtcclxuICAgICAgbGV0IHN1YmZvcm1zVG9SZWZyZXNoOiBMaXN0PFRhc2s+ID0gYXdhaXQgdGhpcy5HZXRTdWJmb3Jtc1RvUmVmcmVzaCgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc3ViZm9ybXNUb1JlZnJlc2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgc3ViZm9ybVRhc2s6IFRhc2sgPSBzdWJmb3Jtc1RvUmVmcmVzaC5nZXRfSXRlbShpKTtcclxuICAgICAgICBhd2FpdCB0aGlzLlRhc2suU3ViZm9ybVJlZnJlc2goc3ViZm9ybVRhc2ssIHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBTZXRTdWJmb3Jtc0luUmVjb21wdXRlKGluUmVjb21wdXRlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgICBsZXQgc3ViZm9ybXNUb1JlZnJlc2g6IExpc3Q8VGFzaz4gPSBhd2FpdCB0aGlzLkdldFN1YmZvcm1zVG9SZWZyZXNoKCk7XHJcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBzdWJmb3Jtc1RvUmVmcmVzaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBzdWJmb3JtVGFzazogVGFzayA9IHN1YmZvcm1zVG9SZWZyZXNoLmdldF9JdGVtKGkpO1xyXG4gICAgICAgICAgc3ViZm9ybVRhc2suU2V0SW5SZWNvbXB1dGUoaW5SZWNvbXB1dGUpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYSBoZWxwZXIgZnVuY3Rpb24gdG8gcmVjb21wdXRlIGZpZWxkc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJmbGRcIj4tIHRoZSBmaWVkbCB0byByZWNvbXB1dGU8L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgZmxkUmNtcChmbGQ6IEZpZWxkQmFzZSwgY29tcHV0ZUZpZWxkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoZmxkLklzVmlydHVhbFxyXG4gICAgICB8fCAoKHRoaXMuVGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfUVVFUlkgfHxcclxuICAgICAgICBFbnZpcm9ubWVudC5JbnN0YW5jZS5hbGxvd1VwZGF0ZUluUXVlcnlNb2RlKHRoaXMuVGFzay5nZXRDb21wSWR4KCkpKSkpIHtcclxuICAgICAgaWYgKCFmbGQuaXNJbkV2YWxQcm9jZXNzKCkpIHtcclxuICAgICAgICBpZiAoY29tcHV0ZUZpZWxkKVxyXG4gICAgICAgICAgYXdhaXQgZmxkLmNvbXB1dGUodHJ1ZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYXdhaXQgZmxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUoZmxkLmdldFZhbHVlKGZhbHNlKSwgZmxkLmlzTnVsbCgpLCB0cnVlLCBmYWxzZSwgZmFsc2UpO1xyXG4gICAgICAgIGF3YWl0IGZsZC51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+PC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYnVpbGRTdWJGb3JtTGlzdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zdWJGb3JtcyA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zdWJGb3JtcyA9IG5ldyBMaXN0PFRhc2s+KCk7XHJcbiAgICAgIGxldCBzdWJUYXNrc1RhYjogVGFza3NUYWJsZSA9IHRoaXMuVGFzay5nZXRTdWJUYXNrcygpO1xyXG5cclxuICAgICAgaWYgKHN1YlRhc2tzVGFiICE9PSBudWxsKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHN1YlRhc2tzVGFiLmdldFNpemUoKTsgaSA9IGkgKyAxKSB7XHJcbiAgICAgICAgICBsZXQgc3ViRm9ybTogVGFzayA9IDxUYXNrPnN1YlRhc2tzVGFiLmdldFRhc2soaSk7XHJcbiAgICAgICAgICAvLyBRQ1IgIzI5OTE1My4gQWRkIG9ubHkgc3ViZm9ybXMgKG5vdCBzdWJ0YXNrcykuXHJcbiAgICAgICAgICBpZiAoc3ViRm9ybS5nZXRGb3JtKCkuZ2V0U3ViRm9ybUN0cmwoKSAhPT0gbnVsbCAmJiBzdWJGb3JtLnJlZnJlc2hlc09uKHRoaXMuT3duZXJGbGQuZ2V0SWQoKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3ViRm9ybXMucHVzaChzdWJGb3JtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVtb3ZlcyB0aGUgc3BlY2lmaWMgdGFzayBmcm9tIHN1YmZvcm1zIGxpc3RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN1YmZvcm1UYXNrXCI+PC9wYXJhbT5cclxuICBSZW1vdmVTdWJmb3JtKHN1YmZvcm1UYXNrOiBUYXNrKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJGb3Jtcy5SZW1vdmUoc3ViZm9ybVRhc2spO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBJbnNlcnRzIHRoZSBzcGVjaWZpYyBzdWJmb3JtIHRhc2sgaW50byB0aGUgc3ViZm9ybSBsaXN0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdWJmb3JtVGFza1wiPjwvcGFyYW0+XHJcbiAgQWRkU3ViZm9ybShzdWJmb3JtVGFzazogVGFzayk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3N1YkZvcm1zID09PSBudWxsKVxyXG4gICAgICB0aGlzLl9zdWJGb3JtcyA9IG5ldyBMaXN0PFRhc2s+KCk7XHJcbiAgICBpZiAoIXRoaXMuX3N1YkZvcm1zLkNvbnRhaW5zKHN1YmZvcm1UYXNrKSlcclxuICAgICAgdGhpcy5fc3ViRm9ybXMucHVzaChzdWJmb3JtVGFzayk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZXhlY3V0ZSByZWNvcmQgc3VmZml4IGZvciB0aGUgYWZmZWN0ZWQgc3ViZm9ybXMgaWYgUmVmcmVzaCBpcyBuZWVkZWRcclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5IGFuZCBpdCBpcyBuZWVkZWQgdG8gcmVmcmVzaFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBhc3luYyByZWNTdWZmaXhTdWJGb3JtcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBsZXQgc3ViRm9ybTogVGFzaztcclxuICAgIGxldCBzdWNjZXNzZnVsOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIGxldCBzdWJmb3JtQ3RybDogTWdDb250cm9sO1xyXG5cclxuICAgIC8vIGJ1aWxkIHRoZSBzdWJmb3JtcyBsaXN0IGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlXHJcbiAgICB0aGlzLmJ1aWxkU3ViRm9ybUxpc3QoKTtcclxuXHJcbiAgICAvLyBleGVjdXRlIFwicmVjb3JkIHN1ZmZpeFwiIGZvciB0aGUgc3ViZm9ybXNcclxuICAgIGZvciAoaSA9IDA7IHN1Y2Nlc3NmdWwgJiYgaSA8IHRoaXMuX3N1YkZvcm1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHN1YkZvcm0gPSB0aGlzLl9zdWJGb3Jtcy5nZXRfSXRlbShpKTtcclxuICAgICAgc3ViZm9ybUN0cmwgPSA8TWdDb250cm9sPnN1YkZvcm0uZ2V0Rm9ybSgpLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICAgIGlmIChzdWJGb3JtLmlzU3RhcnRlZCgpICYmICFzdWJmb3JtQ3RybC5SZWZyZXNoT25WaXNpYmxlICYmXHJcbiAgICAgICAgYXdhaXQgc3ViZm9ybUN0cmwuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fUkVGUkVTSCwgdHJ1ZSkgJiYgIXN1YkZvcm0uSW5TZWxlY3RcclxuICAgICAgICAmJiBzdWJGb3JtLkRvU3ViZm9ybVByZWZpeFN1ZmZpeCkge1xyXG4gICAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoVGFzayhzdWJGb3JtLCBJbnRlcm5hbEludGVyZmFjZS5NR19BQ1RfUkVDX1NVRkZJWCk7XHJcbiAgICAgICAgc3VjY2Vzc2Z1bCA9ICFBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5HZXRTdG9wRXhlY3V0aW9uRmxhZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAoPERhdGFWaWV3PnRoaXMuVGFzay5EYXRhVmlldykuc2V0UHJldkN1cnJSZWMoKTtcclxuICAgIHJldHVybiAoc3VjY2Vzc2Z1bCk7XHJcbiAgfVxyXG5cclxuICAvLyBjaGVjayBpZiBkbyByZWZyZXNoIGZvciBhbnkgc3ViZm9ybSB0aGF0IHRoZSBmaWVsZCBhZmZlY3RzXHJcbiAgcHJpdmF0ZSBhc3luYyBjaGVja1JlZnJlc2hTdWJGb3JtcygpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCByZWZyZXNoOiBib29sZWFuID0gIXRoaXMuX3N1YkZvcm1zT25seVJlY29tcDtcclxuICAgIGxldCBzdWJmb3Jtc1RvUmVmcmVzaDogTGlzdDxUYXNrPiA9IGF3YWl0IHRoaXMuR2V0U3ViZm9ybXNUb1JlZnJlc2goKTtcclxuICAgIGlmIChzdWJmb3Jtc1RvUmVmcmVzaC5sZW5ndGggPiAwKVxyXG4gICAgICByZWZyZXNoID0gdHJ1ZTtcclxuICAgIHJldHVybiByZWZyZXNoO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXRzIGEgbGlzdCBvZiB0aG9zZSBzdWJmb3JtcyB0aGF0IG11c3QgYmUgcmVmcmVzaGVkLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPmxpc3Qgb2Ygc3ViZm9ybXMgdG8gcmVmcmVzaDwvcmV0dXJucz5cclxuICBwcml2YXRlIGFzeW5jIEdldFN1YmZvcm1zVG9SZWZyZXNoKCk6IFByb21pc2U8TGlzdDxUYXNrPj4ge1xyXG5cclxuICAgIGxldCBzdWJUYXNrczogTGlzdDxUYXNrPiA9IG5ldyBMaXN0PFRhc2s+KCk7XHJcbiAgICBsZXQgc3ViZm9ybUN0cmw6IE1nQ29udHJvbDtcclxuICAgIC8vIGJ1aWxkIHRoZSBzdWJmb3JtcyBsaXN0IGFuZCBzYXZlIGl0IGZvciBmdXR1cmUgdXNlXHJcbiAgICB0aGlzLmJ1aWxkU3ViRm9ybUxpc3QoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaTx0aGlzLl9zdWJGb3Jtcy5sZW5ndGg7IGkrKylcclxuICAgIHtcclxuICAgICAgbGV0IHN1YlRhc2sgPSB0aGlzLl9zdWJGb3Jtc1tpXTtcclxuICAgICAgc3ViZm9ybUN0cmwgPSA8TWdDb250cm9sPnN1YlRhc2suZ2V0Rm9ybSgpLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICAgIGlmIChzdWJUYXNrLmlzU3RhcnRlZCgpICYmIGF3YWl0ICBzdWJmb3JtQ3RybC5jaGVja1Byb3AoUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQVVUT19SRUZSRVNILCB0cnVlKSAmJlxyXG4gICAgICAgICFzdWJUYXNrLkluU2VsZWN0ICYmICFzdWJUYXNrLkluRW5kVGFzaykge1xyXG5cclxuICAgICAgICAvLyBjb21wdXRlIHRoZSB2aXNpYmlsaXR5IHByb3BlcnR5IGZvciB0aGUgc3ViZm9ybSBjb250cm9sIGJlZm9yZSB1c2UgaXQgaW4gaXNWaXNpYmxlKCkgbWV0aG9kXHJcbiAgICAgICAgYXdhaXQgc3ViZm9ybUN0cmwuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIHRydWUpO1xyXG4gICAgICAgIGlmICghc3ViZm9ybUN0cmwuaXNWaXNpYmxlKCkgJiYgIWF3YWl0IHN1YmZvcm1DdHJsLmNoZWNrUHJvcChQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRUZSRVNIX1dIRU5fSElEREVOLCBmYWxzZSkpXHJcbiAgICAgICAgICBzdWJmb3JtQ3RybC5SZWZyZXNoT25WaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICBlbHNlIHN1YlRhc2tzLnB1c2goc3ViVGFzayk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWJUYXNrcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBleGVjdXRlIHJlY29yZCBwcmVmaXggZm9yIHRoZSBhZmZlY3RlZCBzdWJmb3JtcyBpZiBSZWZyZXNoIGlzIG5lZWRlZFxyXG4gIC8vLyAgIHJldHVybnMgdHJ1ZSBpZiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkgYW5kIGl0IGlzIG5lZWRlZCB0byByZWZyZXNoXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIHJlY1ByZWZpeFN1YkZvcm1zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGxldCBzdWJGb3JtOiBUYXNrO1xyXG4gICAgbGV0IHN1Y2Nlc3NmdWw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbGV0IHN1YmZvcm1DdHJsOiBNZ0NvbnRyb2w7XHJcblxyXG4gICAgLy8gYnVpbGQgdGhlIHN1YmZvcm1zIGxpc3QgYW5kIHNhdmUgaXQgZm9yIGZ1dHVyZSB1c2VcclxuICAgIHRoaXMuYnVpbGRTdWJGb3JtTGlzdCgpO1xyXG5cclxuICAgIC8vIGV4ZWN1dGUgXCJyZWNvcmQgcHJlZml4XCIgZm9yIHRoZSBzdWJmb3Jtc1xyXG4gICAgZm9yIChpID0gMDsgc3VjY2Vzc2Z1bCAmJiBpIDwgdGhpcy5fc3ViRm9ybXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgc3ViRm9ybSA9IHRoaXMuX3N1YkZvcm1zLmdldF9JdGVtKGkpO1xyXG4gICAgICBzdWJmb3JtQ3RybCA9IDxNZ0NvbnRyb2w+c3ViRm9ybS5nZXRGb3JtKCkuZ2V0U3ViRm9ybUN0cmwoKTtcclxuICAgICAgaWYgKHN1YkZvcm0uaXNTdGFydGVkKCkgJiYgIXN1YmZvcm1DdHJsLlJlZnJlc2hPblZpc2libGVcclxuICAgICAgICAmJiBhd2FpdCAgc3ViZm9ybUN0cmwuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fUkVGUkVTSCwgdHJ1ZSlcclxuICAgICAgICAmJiAhc3ViRm9ybS5JblNlbGVjdCAmJiBzdWJGb3JtLkRvU3ViZm9ybVByZWZpeFN1ZmZpeCkge1xyXG4gICAgICAgIGF3YWl0IEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLmhhbmRsZUludGVybmFsRXZlbnRXaXRoVGFza0FuZFN1YmZvcm1SZWZyZXNoKHN1YkZvcm0sIEludGVybmFsSW50ZXJmYWNlLk1HX0FDVF9SRUNfUFJFRklYLCB0cnVlKTtcclxuICAgICAgICBzdWNjZXNzZnVsID0gIUFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLkdldFN0b3BFeGVjdXRpb25GbGFnKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZXNzZnVsO1xyXG4gIH1cclxuXHJcbiAgbm90aWZ5U2VydmVyT25DaGFuZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5SY21wTW9kZSA9PT0gUmVjb21wdXRlX1JjbXBCeS5TRVJWRVJfT05fQ0hBTkdFO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxyZXR1cm5zPiB0cnVlIGlmIHRoZSBjbGllbnQgZG9lc24ndCBrbm93IHRvIHJlY29tcHV0ZSB0aGlzIGZpZWxkPC9yZXR1cm5zPlxyXG4gIGlzU2VydmVyUmNtcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLlJjbXBNb2RlICE9PSBSZWNvbXB1dGVfUmNtcEJ5LkNMSUVOVDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,105 @@
1
+ import { List } from "@magic-xpa/mscorelib";
2
+ import { StorageAttribute } from "@magic-xpa/utils";
3
+ import { DisplayConvertor, PIC } from "@magic-xpa/gui";
4
+ import { DataviewHeaderBase } from "./DataviewHeaderBase";
5
+ import { TableCache } from "./TableCache";
6
+ import { Record } from "../data/Record";
7
+ import { ConstInterface } from "../ConstInterface";
8
+ import { TableCacheManager } from "./TableCacheManager";
9
+ import { AccessHelper } from "../AccessHelper";
10
+ export class RemoteDataviewHeader extends DataviewHeaderBase {
11
+ constructor(task) {
12
+ super(task);
13
+ this._table = null;
14
+ this._lastFetchRecPos = null;
15
+ }
16
+ setAttribute(attribute, valueStr) {
17
+ switch (attribute) {
18
+ case ConstInterface.MG_ATTR_CACHED_TABLE:
19
+ if (TableCacheManager.Instance.TableExists(valueStr))
20
+ this._table = TableCacheManager.Instance.GetTableById(valueStr);
21
+ else {
22
+ this._table = new TableCache(valueStr);
23
+ TableCacheManager.Instance.InsertTable(this._table);
24
+ }
25
+ break;
26
+ case ConstInterface.MG_ATTR_IDENT:
27
+ this._table.SetTableIdent(valueStr);
28
+ break;
29
+ default:
30
+ super.setAttribute(attribute, valueStr);
31
+ break;
32
+ }
33
+ }
34
+ async getLinkedRecord(curRec) {
35
+ let lnkFlds = this._task.DataView.GetFieldsTab().getLinkFields(this._id);
36
+ let ret = false;
37
+ if (this._cond.getVal()) {
38
+ if (this.Loc == null) {
39
+ this.Loc = new List();
40
+ for (let i = 0; i < lnkFlds.length; i++) {
41
+ let currLoc = lnkFlds.get_Item(i).Locate;
42
+ if (currLoc != null) {
43
+ this.Loc.push(currLoc);
44
+ await currLoc.compute(false);
45
+ }
46
+ }
47
+ }
48
+ else {
49
+ for (let i = 0; i < this.Loc.length; i++)
50
+ await this.Loc.get_Item(i).compute(false);
51
+ }
52
+ await this._table.SortTable(this._keyIdx, this._dir);
53
+ let res = this._table.Fetch(this.Loc);
54
+ if (res == null)
55
+ await this.initRec(curRec, false);
56
+ else {
57
+ ret = true;
58
+ await this.copyLinkFldToRec(curRec, lnkFlds, res, true);
59
+ }
60
+ }
61
+ else
62
+ await this.initRec(curRec, false);
63
+ return ret;
64
+ }
65
+ async copyLinkFldToRec(curRec, linkFlds, tableRec, ret) {
66
+ this._lastFetchRecPos = tableRec.getDbPosVal();
67
+ for (let i = 0; i < linkFlds.length; i++) {
68
+ let curFld = linkFlds.get_Item(i);
69
+ curRec.setFieldValue(curFld.getId(), tableRec.GetFieldValue(curFld.CacheTableFldIdx), false);
70
+ curRec.clearFlag(curFld.getId(), Record.FLAG_INVALID);
71
+ curFld.invalidate(true, false);
72
+ }
73
+ await this.SetReturnValue(ret, true);
74
+ }
75
+ async initRec(currRec, ret) {
76
+ this._lastFetchRecPos = "#";
77
+ await this.InitLinkFields(currRec);
78
+ let retFld = this.ReturnField;
79
+ if (retFld != null) {
80
+ currRec.setFieldValue(retFld.getId(), (ret ? "1" : "0"), false);
81
+ retFld.invalidate(true, false);
82
+ }
83
+ }
84
+ getLastFetchedDbPos() {
85
+ return this._lastFetchRecPos;
86
+ }
87
+ async SetReturnValue(ret, recompute) {
88
+ let returnField = this.ReturnField;
89
+ if (returnField !== null) {
90
+ let enforceVariableChange = returnField.getTask() !== this.Task;
91
+ AccessHelper.eventsManager.pushNewExecStacks();
92
+ let result = ret ? "1" : "0";
93
+ if (returnField.getType() === StorageAttribute.NUMERIC)
94
+ result = DisplayConvertor.Instance.toNum(result, new PIC(returnField.getPicture(), StorageAttribute.NUMERIC, 0), 0);
95
+ await returnField.setValueAndStartRecompute(result, false, recompute, false, false, enforceVariableChange);
96
+ AccessHelper.eventsManager.popNewExecStacks();
97
+ if (!recompute)
98
+ returnField.setModified();
99
+ returnField.invalidate(true, false);
100
+ if (returnField.getTask() !== this.Task)
101
+ await returnField.updateDisplay();
102
+ }
103
+ }
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlRGF0YXZpZXdIZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL3J0L1JlbW90ZURhdGF2aWV3SGVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUs3QyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsa0JBQWtCO0lBSTFELFlBQVksSUFBVTtRQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFKTixXQUFNLEdBQWUsSUFBSSxDQUFDO1FBQzFCLHFCQUFnQixHQUFXLElBQUksQ0FBQztJQUl4QyxDQUFDO0lBRVMsWUFBWSxDQUFDLFNBQWlCLEVBQUUsUUFBZ0I7UUFDeEQsUUFBUSxTQUFTLEVBQUU7WUFFakIsS0FBSyxjQUFjLENBQUMsb0JBQW9CO2dCQUN0QyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO29CQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZ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cUJBQXFCLEdBQVksV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7WUFHekUsWUFBWSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBSS9DLElBQUksTUFBTSxHQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDckMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDcEQsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFdEgsTUFBTSxXQUFXLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBRTNHLFlBQVksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUU5QyxJQUFJLENBQUMsU0FBUztnQkFDWixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFNUIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFHcEMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUk7Z0JBQ3JDLE1BQU0sV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMaXN0fSBmcm9tIFwiQG1hZ2ljLXhwYS9tc2NvcmVsaWJcIjtcclxuaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlfSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge0Rpc3BsYXlDb252ZXJ0b3IsIFBJQ30gZnJvbSBcIkBtYWdpYy14cGEvZ3VpXCI7XHJcbmltcG9ydCB7RGF0YXZpZXdIZWFkZXJCYXNlfSBmcm9tIFwiLi9EYXRhdmlld0hlYWRlckJhc2VcIjtcclxuaW1wb3J0IHtUYWJsZUNhY2hlfSBmcm9tIFwiLi9UYWJsZUNhY2hlXCI7XHJcbmltcG9ydCB7VGFza30gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tcIjtcclxuaW1wb3J0IHtSZWNvcmR9IGZyb20gXCIuLi9kYXRhL1JlY29yZFwiO1xyXG5pbXBvcnQge0ZpZWxkfSBmcm9tIFwiLi4vZGF0YS9GaWVsZFwiO1xyXG5pbXBvcnQge0ZpZWxkc1RhYmxlRXh0IGFzIEZpZWxkc1RhYmxlfSBmcm9tIFwiLi4vZGF0YS9GaWVsZHNUYWJsZVwiO1xyXG5pbXBvcnQge0JvdW5kYXJ5fSBmcm9tIFwiLi9Cb3VuZGFyeVwiO1xyXG5pbXBvcnQge0NvbnN0SW50ZXJmYWNlfSBmcm9tIFwiLi4vQ29uc3RJbnRlcmZhY2VcIjtcclxuaW1wb3J0IHtUYWJsZUNhY2hlTWFuYWdlcn0gZnJvbSBcIi4vVGFibGVDYWNoZU1hbmFnZXJcIjtcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gXCIuLi9BY2Nlc3NIZWxwZXJcIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIGxpbmsgdG8gUmVtb3RlIHRhYmxlXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBSZW1vdGVEYXRhdmlld0hlYWRlciBleHRlbmRzIERhdGF2aWV3SGVhZGVyQmFzZSB7XHJcbiAgcHJpdmF0ZSBfdGFibGU6IFRhYmxlQ2FjaGUgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhc3RGZXRjaFJlY1Bvczogc3RyaW5nID0gbnVsbDsgLy8gdGhlIGRiIHBvcyBvZiB0aGUgbGFzdCBmZXRjaGVkIHJlY29yZCBmcm9tIHRoZSB0YWJsZSBjYWNoZVxyXG5cclxuICBjb25zdHJ1Y3Rvcih0YXNrOiBUYXNrKSB7XHJcbiAgICBzdXBlcih0YXNrKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBzdHJpbmcsIHZhbHVlU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoYXR0cmlidXRlKSB7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ0FDSEVEX1RBQkxFOlxyXG4gICAgICAgIGlmIChUYWJsZUNhY2hlTWFuYWdlci5JbnN0YW5jZS5UYWJsZUV4aXN0cyh2YWx1ZVN0cikpXHJcbiAgICAgICAgICB0aGlzLl90YWJsZSA9IFRhYmxlQ2FjaGVNYW5hZ2VyLkluc3RhbmNlLkdldFRhYmxlQnlJZCh2YWx1ZVN0cik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl90YWJsZSA9IG5ldyBUYWJsZUNhY2hlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIFRhYmxlQ2FjaGVNYW5hZ2VyLkluc3RhbmNlLkluc2VydFRhYmxlKHRoaXMuX3RhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfSURFTlQ6XHJcbiAgICAgICAgdGhpcy5fdGFibGUuU2V0VGFibGVJZGVudCh2YWx1ZVN0cik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHN1cGVyLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIHZhbHVlU3RyKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB3aWxsIHJldHVybiB0aGUgbGlua2VkIHJlY29yZCBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgcHJvcGVydGllcyBhbmQgdGhlIGN1cnJlbnQgcmVjb3JkXHJcbiAgLy8vICAgdGhpcyBtZXRob2Qgd2lsbCBjaGFuZ2UgdGhlIGN1cnJlbnQgcmVjb3JkIGZpZWxkcyB2YWx1ZXNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBhc3luYyBnZXRMaW5rZWRSZWNvcmQoY3VyUmVjOiBSZWNvcmQpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGxldCBsbmtGbGRzID0gKDxGaWVsZHNUYWJsZT4gdGhpcy5fdGFzay5EYXRhVmlldy5HZXRGaWVsZHNUYWIoKSkuZ2V0TGlua0ZpZWxkcyh0aGlzLl9pZCk7XHJcbiAgICBsZXQgcmV0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuX2NvbmQuZ2V0VmFsKCkpIHtcclxuXHJcbiAgICAgIC8vIGJ1aWxkIGxvY2F0ZSBhbmQgcmFuZ2UgdmVjdG9yc1xyXG4gICAgICBpZiAodGhpcy5Mb2MgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuTG9jID0gbmV3IExpc3Q8Qm91bmRhcnk+KCk7XHJcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxua0ZsZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGxldCBjdXJyTG9jOiBCb3VuZGFyeSA9IGxua0ZsZHMuZ2V0X0l0ZW0oaSkuTG9jYXRlO1xyXG4gICAgICAgICAgaWYgKGN1cnJMb2MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLkxvYy5wdXNoKGN1cnJMb2MpO1xyXG4gICAgICAgICAgICBhd2FpdCBjdXJyTG9jLmNvbXB1dGUoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBjb21wdXRlIHRoZSByYW5nZSBhbmQgbG9jYXRlIGV4cHJlc3Npb25zIGFuZXdcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5Mb2MubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLkxvYy5nZXRfSXRlbShpKS5jb21wdXRlKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBzb3J0IHRoZSB0YWJsZSAoaWYgdGhlIHRhYmxlIHdhcyBub3QgbG9hZGVkIHlldCBpdCB3aWxsIGFsc28gbG9hZCBpdFxyXG4gICAgICBhd2FpdCB0aGlzLl90YWJsZS5Tb3J0VGFibGUodGhpcy5fa2V5SWR4LCB0aGlzLl9kaXIpO1xyXG4gICAgICAvLyBwZXJmb3JtIHRoZSBsaW5rXHJcbiAgICAgIGxldCByZXM6IFJlY29yZCA9IHRoaXMuX3RhYmxlLkZldGNoKHRoaXMuTG9jKTtcclxuICAgICAgaWYgKHJlcyA9PSBudWxsKVxyXG4gICAgICAvLyBsaW5rIGZhaWxkXHJcbiAgICAgICAgYXdhaXQgdGhpcy5pbml0UmVjKGN1clJlYywgZmFsc2UpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXQgPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29weUxpbmtGbGRUb1JlYyhjdXJSZWMsIGxua0ZsZHMsIHJlcywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNhbGN1bGF0ZSBpbml0IGV4cHJlc3Npb25zIGlmIHRoZXJlIGFyZSBhbnkgb3IgZGVmYXVsdCB2YWx1ZXNcclxuICAgIGVsc2VcclxuICAgICAgYXdhaXQgdGhpcy5pbml0UmVjKGN1clJlYywgIGZhbHNlKTsgLy8gZXZlcnkgc2NlbmFyaW8gd2hlcmUgdGhlIGxpbmtlZCBkaWQgbm90XHJcbiAgICAvLyByZXR1cm5lZCBhbnkgcmVjb3JkIGZybyBleGFtcGxlIGhlcmUgd2hlblxyXG4gICAgLy8gdGhlIGxpbmsgY29uZGl0aW9uIGlzIGZhbHNlIHRoZW4gdGhlIGxpbmsgaXNcclxuICAgIC8vIGNvbnNpZGVyZWQgdG8gaGFzIGZhaWxlZCBhbmQgc2hvdWxkIHJldHVyblxyXG4gICAgLy8gZmFsc2UgYXMgcmV0dXJuIHZhbHVlXHJcblxyXG4gICAgcmV0dXJuIHJldDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBpZiB0aGUgbGluayBzdWNjZWVkZWQgY29waWVzIHRoZSB2YWx1ZXMgcmV0dXJuIGZyb20gdGhlIGxpbmtlZCB0YWJsZSByZWNvcmRcclxuICAvLy8gICB0byB0aGUgY3VycmVudCBkYXRhIHZpZXcgcmVjb3JkXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGNvcHlMaW5rRmxkVG9SZWMoY3VyUmVjOiBSZWNvcmQsIGxpbmtGbGRzOiBMaXN0PEZpZWxkPiwgdGFibGVSZWM6IFJlY29yZCwgcmV0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAvLyBpZiB3ZSBnb3QgaGVyZSBpdCBtZWFucyB0aGF0IHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IGZldGNoIGEgcmVjb3JkIGZyb20gdGhlIGxpbmtcclxuICAgIC8vIHNldCB0aGUgbGFzdEZldGNoUmVjUG9zIHRvIGJlIHRoZSBwb3Mgb2YgdGhlIGZldGNoZWQgcmVjb3JkXHJcbiAgICB0aGlzLl9sYXN0RmV0Y2hSZWNQb3MgPSB0YWJsZVJlYy5nZXREYlBvc1ZhbCgpO1xyXG5cclxuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsaW5rRmxkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY3VyRmxkOiBGaWVsZCA9IGxpbmtGbGRzLmdldF9JdGVtKGkpO1xyXG4gICAgICBjdXJSZWMuc2V0RmllbGRWYWx1ZShjdXJGbGQuZ2V0SWQoKSwgdGFibGVSZWMuR2V0RmllbGRWYWx1ZShjdXJGbGQuQ2FjaGVUYWJsZUZsZElkeCksIGZhbHNlKTtcclxuXHJcbiAgICAgIC8vIGNsZWFyIHRoZSBpbnZhbGlkIGZsYWcgaW4gY2FzZSBpdCB3YXMgc2V0XHJcbiAgICAgIGN1clJlYy5jbGVhckZsYWcoY3VyRmxkLmdldElkKCksIFJlY29yZC5GTEFHX0lOVkFMSUQpO1xyXG4gICAgICBjdXJGbGQuaW52YWxpZGF0ZSh0cnVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICAvLyBzZXQgdGhlIHJldCB2YWx1ZVxyXG4gICAgYXdhaXQgdGhpcy5TZXRSZXR1cm5WYWx1ZShyZXQsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluIGNhc2UgdGhlIGxpbmsgZmFpbHMgc2V0IHRoZSB2YWx1ZSB0byBkZWZhdWx0IG9yIHRvIHRoZSB2YWx1ZSBvZiB0aGUgaW5pdCBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGluaXRSZWMoY3VyclJlYzogUmVjb3JkLCByZXQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIGlmIHdlIGFyZSBoZXJlIGl0IG1lYW5zIHRoYXQgd2UgdHJpZWQgdG8gZmV0Y2ggYSByZWNvcmQgYnV0IGZhaWxlZCB0byBmaW5kIG9uZSB0aGVyZWZvclxyXG4gICAgLy8gdGhlIGxhc3RGZXRjaFJlY1BvcyBzaG91bGQgYmUgbWFya2VkIGFjY29yZGluZ2x5XHJcbiAgICB0aGlzLl9sYXN0RmV0Y2hSZWNQb3MgPSBcIiNcIjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLkluaXRMaW5rRmllbGRzKGN1cnJSZWMpO1xyXG5cclxuICAgIC8vIHNldCB0aGUgcmV0IHZhbHVlXHJcbiAgICBsZXQgcmV0RmxkID0gdGhpcy5SZXR1cm5GaWVsZDtcclxuICAgIGlmIChyZXRGbGQgIT0gbnVsbCkge1xyXG4gICAgICBjdXJyUmVjLnNldEZpZWxkVmFsdWUocmV0RmxkLmdldElkKCksIChyZXQgPyBcIjFcIiA6IFwiMFwiKSwgZmFsc2UpO1xyXG4gICAgICByZXRGbGQuaW52YWxpZGF0ZSh0cnVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgbGFzdCBmZXRjaCByZWNvcmQgZGIgcG9zIHZhbHVlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwdWJsaWMgZ2V0TGFzdEZldGNoZWREYlBvcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhc3RGZXRjaFJlY1BvcztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gdXBkYXRlIGxpbmsgcmVzdWx0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdXJSZWNcIj5jdXJyZW50IHJlY29yZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmV0XCI+bGluayBzdWNjZXNzPC9wYXJhbT5cclxuICBhc3luYyBTZXRSZXR1cm5WYWx1ZSggcmV0OiBib29sZWFuLCByZWNvbXB1dGU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXR1cm5GaWVsZDogRmllbGQgPSB0aGlzLlJldHVybkZpZWxkO1xyXG5cclxuICAgIGlmIChyZXR1cm5GaWVsZCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgZW5mb3JjZVZhcmlhYmxlQ2hhbmdlOiBib29sZWFuID0gcmV0dXJuRmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLlRhc2s7XHJcblxyXG4gICAgICAvLyBpZiB3ZSBhcmUgZmV0Y2hpbmcgZmlyc3QgY2h1bmsgd2UgZGlkbid0IHVwZGF0ZWQgdGhlIGV4ZWN1dHVpb24gc3RhY2sgeWV0XHJcbiAgICAgIEFjY2Vzc0hlbHBlci5ldmVudHNNYW5hZ2VyLnB1c2hOZXdFeGVjU3RhY2tzKCk7XHJcbiAgICAgIC8vIHNhbWUgYXMgTm9uUmVjb21wdXRlVmFyQ2hhbmdlRXZlbnQgb24gc2VydmVyIGZldGNoLmNwcFxyXG5cclxuICAgICAgLy8gaWYgdGhlIHJldHVybiBmaWVsZCBpcyBudW1lcmljLCB0aGVuIGNvbnZlcnQgcmVzdWx0IHZhbHVlIHRvTnVtKCkgYmVmb3JlIHBhc3NpbmcgdG8gc2V0VmFsdWVBbmRTdGFydFJlY29tcHV0ZSgpLlxyXG4gICAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSByZXQgPyBcIjFcIiA6IFwiMFwiO1xyXG4gICAgICBpZiAocmV0dXJuRmllbGQuZ2V0VHlwZSgpID09PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpXHJcbiAgICAgICAgcmVzdWx0ID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS50b051bShyZXN1bHQsIG5ldyBQSUMocmV0dXJuRmllbGQuZ2V0UGljdHVyZSgpLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIDApLCAwKTtcclxuXHJcbiAgICAgIGF3YWl0IHJldHVybkZpZWxkLnNldFZhbHVlQW5kU3RhcnRSZWNvbXB1dGUocmVzdWx0LCBmYWxzZSwgcmVjb21wdXRlLCBmYWxzZSwgZmFsc2UsIGVuZm9yY2VWYXJpYWJsZUNoYW5nZSk7XHJcblxyXG4gICAgICBBY2Nlc3NIZWxwZXIuZXZlbnRzTWFuYWdlci5wb3BOZXdFeGVjU3RhY2tzKCk7XHJcblxyXG4gICAgICBpZiAoIXJlY29tcHV0ZSlcclxuICAgICAgICByZXR1cm5GaWVsZC5zZXRNb2RpZmllZCgpO1xyXG5cclxuICAgICAgcmV0dXJuRmllbGQuaW52YWxpZGF0ZSh0cnVlLCBmYWxzZSk7XHJcblxyXG4gICAgICAvLyBJZiBmaWVsZCBpcyBmcm9tIGFub3RoZXIgdGFzaywgbmVlZCB0byB1cGRhdGUgdGhlIGRpc3BsYXkgYXMgd2VsbFxyXG4gICAgICBpZiAocmV0dXJuRmllbGQuZ2V0VGFzaygpICE9PSB0aGlzLlRhc2spXHJcbiAgICAgICAgYXdhaXQgcmV0dXJuRmllbGQudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=