@magic-xpa/engine 4.1100.0-dev4110.2 → 4.1100.0-dev4110.202
Sign up to get free protection for your applications and to get access to all the features.
- package/{esm2020 → esm2022}/index.mjs +188 -188
- package/{esm2020 → esm2022}/magic-xpa-engine.mjs +1 -1
- package/esm2022/src/AccessHelper.mjs +15 -0
- package/esm2022/src/ClientManager.mjs +409 -0
- package/esm2022/src/CommandsProcessorBase.mjs +56 -0
- package/esm2022/src/CommandsProcessorManager.mjs +26 -0
- package/esm2022/src/CommandsTable.mjs +162 -0
- package/esm2022/src/ConstInterface.mjs +517 -0
- package/{esm2020 → esm2022}/src/CurrentClientVersion.mjs +2 -2
- package/esm2022/src/FlowMonitorInterface.mjs +16 -0
- package/esm2022/src/GUIManager.mjs +62 -0
- package/esm2022/src/GlobalCommandsManager.mjs +34 -0
- package/esm2022/src/GuiEventsProcessor.mjs +157 -0
- package/{esm2020 → esm2022}/src/ICommandsTable.mjs +1 -1
- package/esm2022/src/ServerConfig.mjs +122 -0
- package/{esm2020 → esm2022}/src/bridge/IGuiEvent.mjs +19 -19
- package/{esm2020 → esm2022}/src/bridge/MagicBridge.mjs +40 -40
- package/esm2022/src/commands/ClientOriginatedCommandTaskTag.mjs +12 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserLocateDataViewCommand.mjs +8 -8
- package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserRangeDataviewCommand.mjs +9 -9
- package/{esm2020 → esm2022}/src/commands/ClientToServer/AddUserSortDataViewCommand.mjs +9 -9
- package/{esm2020 → esm2022}/src/commands/ClientToServer/BrowserEscEventCommand.mjs +23 -23
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ClientOriginatedCommand.mjs +14 -14
- package/esm2022/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +60 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ColumnSortEventCommand.mjs +26 -26
- package/esm2022/src/commands/ClientToServer/CommandFactory.mjs +260 -0
- package/esm2022/src/commands/ClientToServer/CommandSerializationHelper.mjs +67 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ComputeEventCommand.mjs +23 -23
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTerminationEventCommand.mjs +20 -20
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ContextTimeoutResetCommand.mjs +19 -19
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ControlItemsRefreshCommand.mjs +8 -8
- package/esm2022/src/commands/ClientToServer/DataViewOutputCommand.mjs +13 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/DataviewCommand.mjs +44 -44
- package/esm2022/src/commands/ClientToServer/EvaluateCommand.mjs +37 -0
- package/esm2022/src/commands/ClientToServer/EventCommand.mjs +40 -0
- package/esm2022/src/commands/ClientToServer/ExecOperCommand.mjs +67 -0
- package/esm2022/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +22 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/GlobalParamsQueryCommand.mjs +10 -10
- package/{esm2020 → esm2022}/src/commands/ClientToServer/ICommandTaskTag.mjs +1 -1
- package/{esm2020 → esm2022}/src/commands/ClientToServer/IndexChangeEventCommand.mjs +21 -21
- package/esm2022/src/commands/ClientToServer/IniputForceWriteCommand.mjs +23 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/NonReversibleExitEventCommand.mjs +23 -23
- package/{esm2020 → esm2022}/src/commands/ClientToServer/QueryCommand.mjs +20 -20
- package/esm2022/src/commands/ClientToServer/RecomputeCommand.mjs +27 -0
- package/esm2022/src/commands/ClientToServer/RefreshEventCommand.mjs +27 -0
- package/esm2022/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +24 -0
- package/esm2022/src/commands/ClientToServer/RollbackEventCommand.mjs +40 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/SelectProgramCommand.mjs +14 -14
- package/{esm2020 → esm2022}/src/commands/ClientToServer/SetTransactionStateDataviewCommand.mjs +9 -9
- package/{esm2020 → esm2022}/src/commands/ClientToServer/SubformOpenEventCommand.mjs +21 -21
- package/esm2022/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +24 -0
- package/esm2022/src/commands/ClientToServer/TransactionCommand.mjs +30 -0
- package/{esm2020 → esm2022}/src/commands/ClientToServer/UnloadCommand.mjs +14 -14
- package/esm2022/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +18 -0
- package/esm2022/src/commands/DataViewCommandBase.mjs +8 -0
- package/{esm2020 → esm2022}/src/commands/IClientCommand.mjs +1 -1
- package/esm2022/src/commands/IClientTargetedCommand.mjs +13 -0
- package/{esm2020 → esm2022}/src/commands/IClientToServerCommandInfo.mjs +1 -1
- package/esm2022/src/commands/ServerToClient/AbortCommand.mjs +65 -0
- package/{esm2020 → esm2022}/src/commands/ServerToClient/AddLocateCommand.mjs +21 -21
- package/esm2022/src/commands/ServerToClient/AddRangeCommand.mjs +62 -0
- package/esm2022/src/commands/ServerToClient/AddSortCommand.mjs +33 -0
- package/esm2022/src/commands/ServerToClient/ClientRefreshCommand.mjs +25 -0
- package/esm2022/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +24 -0
- package/esm2022/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +45 -0
- package/esm2022/src/commands/ServerToClient/OpenURLCommand.mjs +221 -0
- package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetLocateCommand.mjs +14 -14
- package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetRangeCommand.mjs +14 -14
- package/{esm2020 → esm2022}/src/commands/ServerToClient/ResetSortCommand.mjs +14 -14
- package/esm2022/src/commands/ServerToClient/ResultCommand.mjs +37 -0
- package/esm2022/src/commands/ServerToClient/VerifyCommand.mjs +83 -0
- package/esm2022/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +132 -0
- package/{esm2020 → esm2022}/src/communications/IConnectionStateManager.mjs +1 -1
- package/esm2022/src/communications/InteractiveCommunicationsFailureHandler.mjs +15 -0
- package/{esm2020 → esm2022}/src/data/DataSourceIdKey.mjs +2 -2
- package/esm2022/src/data/DataView.mjs +1613 -0
- package/{esm2020 → esm2022}/src/data/DataViewBase.mjs +3 -3
- package/esm2022/src/data/DataviewManager.mjs +28 -0
- package/esm2022/src/data/DataviewManagerBase.mjs +15 -0
- package/esm2022/src/data/DvCache.mjs +67 -0
- package/esm2022/src/data/Field.mjs +646 -0
- package/esm2022/src/data/FieldBase.mjs +15 -0
- package/esm2022/src/data/FieldsTable.mjs +103 -0
- package/{esm2020 → esm2022}/src/data/IRecordsTable.mjs +1 -1
- package/esm2022/src/data/Key.mjs +88 -0
- package/esm2022/src/data/Record.mjs +866 -0
- package/{esm2020 → esm2022}/src/data/RecordOutOfDataViewException.mjs +15 -15
- package/esm2022/src/data/RecordsTable.mjs +267 -0
- package/esm2022/src/data/TaskTransactionManager.mjs +103 -0
- package/esm2022/src/data/XMLBasedDcValuesBuilder.mjs +74 -0
- package/{esm2020 → esm2022}/src/enums.mjs +23 -23
- package/esm2022/src/env/EnvVariablesTable.mjs +340 -0
- package/esm2022/src/env/Environment.mjs +487 -0
- package/{esm2020 → esm2022}/src/env/ILanguageData.mjs +1 -1
- package/esm2022/src/env/LanguageData.mjs +227 -0
- package/esm2022/src/env/MirrorString.mjs +65 -0
- package/esm2022/src/event/ActionManager.mjs +91 -0
- package/esm2022/src/event/Event.mjs +1333 -0
- package/esm2022/src/event/EventHandler.mjs +766 -0
- package/esm2022/src/event/EventHandlerPosition.mjs +204 -0
- package/esm2022/src/event/EventsManager.mjs +2988 -0
- package/{esm2020 → esm2022}/src/event/IEventsManager.mjs +6 -6
- package/esm2022/src/event/RunTimeEvent.mjs +399 -0
- package/{esm2020 → esm2022}/src/event/RunTimeEventBase.mjs +3 -3
- package/esm2022/src/event/UserEventsTable.mjs +47 -0
- package/esm2022/src/exp/ExpTable.mjs +57 -0
- package/esm2022/src/exp/Expression.mjs +200 -0
- package/esm2022/src/exp/ExpressionDict.mjs +727 -0
- package/esm2022/src/exp/ExpressionEvaluator.mjs +4206 -0
- package/esm2022/src/exp/ExpressionLocalJpn.mjs +314 -0
- package/esm2022/src/exp/GlobalParamsTable.mjs +85 -0
- package/esm2022/src/exp/YesNoExp.mjs +36 -0
- package/esm2022/src/gui/CreatedFormVector.mjs +23 -0
- package/esm2022/src/gui/FormsTable.mjs +66 -0
- package/esm2022/src/gui/MgControl.mjs +363 -0
- package/esm2022/src/gui/MgForm.mjs +1181 -0
- package/esm2022/src/http/HttpManager.mjs +97 -0
- package/esm2022/src/http/client/HttpClientAsync.mjs +68 -0
- package/esm2022/src/http/client/HttpClientBase.mjs +132 -0
- package/esm2022/src/http/client/HttpClientEvents.mjs +39 -0
- package/esm2022/src/http/client/HttpClientSync.mjs +42 -0
- package/esm2022/src/http/client/HttpUtility.mjs +84 -0
- package/{esm2020 → esm2022}/src/http/client/ICommunicationsFailureHandler.mjs +1 -1
- package/esm2022/src/remote/AddUserLocateRemoteDataViewCommand.mjs +18 -0
- package/esm2022/src/remote/AddUserRangeRemoteDataViewCommand.mjs +18 -0
- package/esm2022/src/remote/AddUserSortRemoteDataViewCommand.mjs +18 -0
- package/esm2022/src/remote/RemoteCommandsProcessor.mjs +882 -0
- package/esm2022/src/remote/RemoteControlItemsRefreshCommand.mjs +25 -0
- package/esm2022/src/remote/RemoteDataViewCommandBase.mjs +24 -0
- package/esm2022/src/remote/RemoteDataViewCommandFactory.mjs +61 -0
- package/{esm2020 → esm2022}/src/remote/RemoteDataViewCommandUpdateNonModifiable.mjs +15 -15
- package/{esm2020 → esm2022}/src/remote/RemoteDataviewManager.mjs +17 -17
- package/{esm2020 → esm2022}/src/remote/RemoteInitDataViewCommand.mjs +10 -10
- package/esm2022/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +17 -0
- package/{esm2020 → esm2022}/src/remote/ResetUserRangeRemoteDataviewCommand.mjs +12 -12
- package/esm2022/src/remote/ResetUserSortRemoteDataviewCommand.mjs +16 -0
- package/esm2022/src/remote/ServerError.mjs +40 -0
- package/esm2022/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +20 -0
- package/esm2022/src/rt/Argument.mjs +265 -0
- package/esm2022/src/rt/ArgumentsList.mjs +103 -0
- package/esm2022/src/rt/Boundary.mjs +152 -0
- package/esm2022/src/rt/CompMainPrgTable.mjs +63 -0
- package/{esm2020 → esm2022}/src/rt/DataviewHeaderBase.mjs +98 -96
- package/{esm2020 → esm2022}/src/rt/DataviewHeaderFactory.mjs +6 -6
- package/esm2022/src/rt/DataviewHeaders.mjs +53 -0
- package/esm2022/src/rt/DataviewHeadersSaxHandler.mjs +38 -0
- package/esm2022/src/rt/ExecutionStack.mjs +94 -0
- package/{esm2020 → esm2022}/src/rt/ExecutionStackEntry.mjs +17 -17
- package/esm2022/src/rt/HandlersTable.mjs +96 -0
- package/{esm2020 → esm2022}/src/rt/IDataSourceViewDefinition.mjs +1 -1
- package/{esm2020 → esm2022}/src/rt/IDataviewHeader.mjs +1 -1
- package/{esm2020 → esm2022}/src/rt/IResultValue.mjs +1 -1
- package/esm2022/src/rt/LastFocusedManager.mjs +65 -0
- package/esm2022/src/rt/Operation.mjs +735 -0
- package/esm2022/src/rt/OperationTable.mjs +67 -0
- package/esm2022/src/rt/Recompute.mjs +355 -0
- package/esm2022/src/rt/RecomputeTable.mjs +63 -0
- package/esm2022/src/rt/RemoteDataviewHeader.mjs +108 -0
- package/esm2022/src/rt/ResultValue.mjs +10 -0
- package/esm2022/src/rt/TableCache.mjs +177 -0
- package/esm2022/src/rt/TableCacheManager.mjs +67 -0
- package/esm2022/src/rt/Transaction.mjs +53 -0
- package/esm2022/src/security/UserDetails.mjs +71 -0
- package/{esm2020 → esm2022}/src/tasks/IMGDataCollection.mjs +1 -1
- package/esm2022/src/tasks/MGData.mjs +552 -0
- package/esm2022/src/tasks/MGDataCollection.mjs +252 -0
- package/esm2022/src/tasks/RCTimer.mjs +63 -0
- package/esm2022/src/tasks/RemoteTaskService.mjs +45 -0
- package/esm2022/src/tasks/Task.mjs +2498 -0
- package/esm2022/src/tasks/TaskBase.mjs +83 -0
- package/esm2022/src/tasks/TaskServiceBase.mjs +25 -0
- package/esm2022/src/tasks/TasksTable.mjs +80 -0
- package/esm2022/src/tasks/sort/Sort.mjs +5 -0
- package/esm2022/src/tasks/sort/SortCollection.mjs +67 -0
- package/esm2022/src/util/ConstUtils.mjs +14 -0
- package/esm2022/src/util/FlowMonitorQueue.mjs +451 -0
- package/esm2022/src/util/HeapSort.mjs +70 -0
- package/{esm2020 → esm2022}/src/util/IMirrorXML.mjs +1 -1
- package/{esm2020 → esm2022}/src/util/IServerConfig.mjs +1 -1
- package/{esm2020 → esm2022}/src/util/MgBlockingQueue.mjs +1 -1
- package/esm2022/src/util/MgPriorityBlockingQueue.mjs +74 -0
- package/esm2022/src/util/MgPriorityQueue.mjs +66 -0
- package/{esm2020 → esm2022}/src/util/ParamParseResult.mjs +7 -7
- package/esm2022/src/util/PrmMap.mjs +152 -0
- package/esm2022/src/util/ReturnResult.mjs +46 -0
- package/esm2022/src/util/ReturnResultBase.mjs +18 -0
- package/esm2022/src/util/Scrambler.mjs +89 -0
- package/esm2022/src/util/UniqueIDUtils.mjs +13 -0
- package/esm2022/src/util/cookie.service.mjs +92 -0
- package/{fesm2020 → fesm2022}/magic-xpa-engine.mjs +29750 -29694
- package/fesm2022/magic-xpa-engine.mjs.map +1 -0
- package/index.d.ts +187 -187
- package/package.json +8 -14
- package/src/AccessHelper.d.ts +20 -20
- package/src/ClientManager.d.ts +34 -32
- package/src/CommandsProcessorBase.d.ts +23 -23
- package/src/CommandsProcessorManager.d.ts +6 -6
- package/src/CommandsTable.d.ts +22 -22
- package/src/ConstInterface.d.ts +516 -515
- package/src/CurrentClientVersion.d.ts +1 -1
- package/src/FlowMonitorInterface.d.ts +15 -15
- package/src/GUIManager.d.ts +17 -17
- package/src/GlobalCommandsManager.d.ts +17 -17
- package/src/GuiEventsProcessor.d.ts +24 -24
- package/src/ICommandsTable.d.ts +9 -9
- package/src/ServerConfig.d.ts +35 -34
- package/src/bridge/IGuiEvent.d.ts +19 -19
- package/src/bridge/MagicBridge.d.ts +16 -16
- package/src/commands/ClientOriginatedCommandTaskTag.d.ts +8 -8
- package/src/commands/ClientToServer/AddUserLocateDataViewCommand.d.ts +4 -4
- package/src/commands/ClientToServer/AddUserRangeDataviewCommand.d.ts +6 -6
- package/src/commands/ClientToServer/AddUserSortDataViewCommand.d.ts +6 -6
- package/src/commands/ClientToServer/BrowserEscEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/ClientOriginatedCommand.d.ts +8 -8
- package/src/commands/ClientToServer/ClientOriginatedCommandSerializer.d.ts +6 -6
- package/src/commands/ClientToServer/ColumnSortEventCommand.d.ts +10 -10
- package/src/commands/ClientToServer/CommandFactory.d.ts +64 -64
- package/src/commands/ClientToServer/CommandSerializationHelper.d.ts +20 -20
- package/src/commands/ClientToServer/ComputeEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/ContextTerminationEventCommand.d.ts +7 -7
- package/src/commands/ClientToServer/ContextTimeoutResetCommand.d.ts +7 -7
- package/src/commands/ClientToServer/ControlItemsRefreshCommand.d.ts +6 -6
- package/src/commands/ClientToServer/DataViewOutputCommand.d.ts +9 -9
- package/src/commands/ClientToServer/DataviewCommand.d.ts +32 -32
- package/src/commands/ClientToServer/EvaluateCommand.d.ts +15 -15
- package/src/commands/ClientToServer/EventCommand.d.ts +15 -15
- package/src/commands/ClientToServer/ExecOperCommand.d.ts +23 -23
- package/src/commands/ClientToServer/FetchDataControlValuesEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/GlobalParamsQueryCommand.d.ts +5 -5
- package/src/commands/ClientToServer/ICommandTaskTag.d.ts +3 -3
- package/src/commands/ClientToServer/IndexChangeEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/IniputForceWriteCommand.d.ts +10 -10
- package/src/commands/ClientToServer/NonReversibleExitEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/QueryCommand.d.ts +8 -8
- package/src/commands/ClientToServer/RecomputeCommand.d.ts +11 -11
- package/src/commands/ClientToServer/RefreshEventCommand.d.ts +12 -12
- package/src/commands/ClientToServer/RefreshScreenEventCommand.d.ts +10 -10
- package/src/commands/ClientToServer/RollbackEventCommand.d.ts +14 -14
- package/src/commands/ClientToServer/SelectProgramCommand.d.ts +6 -6
- package/src/commands/ClientToServer/SetTransactionStateDataviewCommand.d.ts +5 -5
- package/src/commands/ClientToServer/SubformOpenEventCommand.d.ts +8 -8
- package/src/commands/ClientToServer/SubformRefreshEventCommand.d.ts +9 -9
- package/src/commands/ClientToServer/TransactionCommand.d.ts +12 -12
- package/src/commands/ClientToServer/UnloadCommand.d.ts +7 -7
- package/src/commands/ClientToServer/WriteMessageToServerLogCommand.d.ts +6 -6
- package/src/commands/DataViewCommandBase.d.ts +6 -6
- package/src/commands/IClientCommand.d.ts +2 -2
- package/src/commands/IClientTargetedCommand.d.ts +12 -12
- package/src/commands/IClientToServerCommandInfo.d.ts +3 -3
- package/src/commands/ServerToClient/AbortCommand.d.ts +11 -11
- package/src/commands/ServerToClient/AddLocateCommand.d.ts +6 -6
- package/src/commands/ServerToClient/AddRangeCommand.d.ts +10 -10
- package/src/commands/ServerToClient/AddSortCommand.d.ts +9 -9
- package/src/commands/ServerToClient/ClientRefreshCommand.d.ts +7 -7
- package/src/commands/ServerToClient/ClientTargetedCommandBase.d.ts +12 -12
- package/src/commands/ServerToClient/EnhancedVerifyCommand.d.ts +13 -13
- package/src/commands/ServerToClient/OpenURLCommand.d.ts +21 -21
- package/src/commands/ServerToClient/ResetLocateCommand.d.ts +6 -6
- package/src/commands/ServerToClient/ResetRangeCommand.d.ts +6 -6
- package/src/commands/ServerToClient/ResetSortCommand.d.ts +6 -6
- package/src/commands/ServerToClient/ResultCommand.d.ts +10 -10
- package/src/commands/ServerToClient/VerifyCommand.d.ts +17 -17
- package/src/commands/ServerToClient/XMLBasedCommandBuilder.d.ts +11 -11
- package/src/communications/IConnectionStateManager.d.ts +4 -4
- package/src/communications/InteractiveCommunicationsFailureHandler.d.ts +6 -6
- package/src/data/DataSourceIdKey.d.ts +2 -2
- package/src/data/DataView.d.ts +162 -162
- package/src/data/DataViewBase.d.ts +12 -12
- package/src/data/DataviewManager.d.ts +14 -14
- package/src/data/DataviewManagerBase.d.ts +11 -11
- package/src/data/DvCache.d.ts +15 -15
- package/src/data/Field.d.ts +103 -103
- package/src/data/FieldBase.d.ts +23 -23
- package/src/data/FieldsTable.d.ts +27 -27
- package/src/data/IRecordsTable.d.ts +7 -7
- package/src/data/Key.d.ts +15 -15
- package/src/data/Record.d.ts +156 -156
- package/src/data/RecordOutOfDataViewException.d.ts +10 -10
- package/src/data/RecordsTable.d.ts +38 -38
- package/src/data/TaskTransactionManager.d.ts +17 -17
- package/src/data/XMLBasedDcValuesBuilder.d.ts +11 -11
- package/src/enums.d.ts +21 -21
- package/src/env/EnvVariablesTable.d.ts +17 -17
- package/src/env/Environment.d.ts +118 -118
- package/src/env/ILanguageData.d.ts +3 -3
- package/src/env/LanguageData.d.ts +20 -20
- package/src/env/MirrorString.d.ts +15 -15
- package/src/event/ActionManager.d.ts +14 -14
- package/src/event/Event.d.ts +79 -79
- package/src/event/EventHandler.d.ts +66 -66
- package/src/event/EventHandlerPosition.d.ts +25 -25
- package/src/event/EventsManager.d.ts +205 -204
- package/src/event/IEventsManager.d.ts +77 -77
- package/src/event/RunTimeEvent.d.ts +126 -123
- package/src/event/RunTimeEventBase.d.ts +5 -5
- package/src/event/UserEventsTable.d.ts +11 -11
- package/src/exp/ExpTable.d.ts +11 -11
- package/src/exp/Expression.d.ts +37 -37
- package/src/exp/ExpressionDict.d.ts +12 -12
- package/src/exp/ExpressionEvaluator.d.ts +198 -198
- package/src/exp/ExpressionLocalJpn.d.ts +18 -18
- package/src/exp/GlobalParamsTable.d.ts +19 -19
- package/src/exp/YesNoExp.d.ts +9 -9
- package/src/gui/CreatedFormVector.d.ts +10 -10
- package/src/gui/FormsTable.d.ts +15 -15
- package/src/gui/MgControl.d.ts +60 -60
- package/src/gui/MgForm.d.ts +93 -93
- package/src/http/HttpManager.d.ts +25 -25
- package/src/http/client/HttpClientAsync.d.ts +16 -16
- package/src/http/client/HttpClientBase.d.ts +30 -30
- package/src/http/client/HttpClientEvents.d.ts +18 -18
- package/src/http/client/HttpClientSync.d.ts +17 -17
- package/src/http/client/HttpUtility.d.ts +10 -10
- package/src/http/client/ICommunicationsFailureHandler.d.ts +5 -5
- package/src/remote/AddUserLocateRemoteDataViewCommand.d.ts +8 -8
- package/src/remote/AddUserRangeRemoteDataViewCommand.d.ts +8 -8
- package/src/remote/AddUserSortRemoteDataViewCommand.d.ts +8 -8
- package/src/remote/RemoteCommandsProcessor.d.ts +51 -51
- package/src/remote/RemoteControlItemsRefreshCommand.d.ts +8 -8
- package/src/remote/RemoteDataViewCommandBase.d.ts +10 -10
- package/src/remote/RemoteDataViewCommandFactory.d.ts +6 -6
- package/src/remote/RemoteDataViewCommandUpdateNonModifiable.d.ts +8 -8
- package/src/remote/RemoteDataviewManager.d.ts +9 -9
- package/src/remote/RemoteInitDataViewCommand.d.ts +7 -7
- package/src/remote/ResetUserLocateRemoteDataviewCommand.d.ts +7 -7
- package/src/remote/ResetUserRangeRemoteDataviewCommand.d.ts +7 -7
- package/src/remote/ResetUserSortRemoteDataviewCommand.d.ts +7 -7
- package/src/remote/ServerError.d.ts +16 -16
- package/src/remote/SetTransactionStateRemoteDataViewCommand.d.ts +8 -8
- package/src/rt/Argument.d.ts +36 -36
- package/src/rt/ArgumentsList.d.ts +24 -24
- package/src/rt/Boundary.d.ts +27 -27
- package/src/rt/CompMainPrgTable.d.ts +10 -10
- package/src/rt/DataviewHeaderBase.d.ts +34 -34
- package/src/rt/DataviewHeaderFactory.d.ts +5 -5
- package/src/rt/DataviewHeaders.d.ts +12 -12
- package/src/rt/DataviewHeadersSaxHandler.d.ts +10 -10
- package/src/rt/ExecutionStack.d.ts +22 -22
- package/src/rt/ExecutionStackEntry.d.ts +7 -7
- package/src/rt/HandlersTable.d.ts +19 -19
- package/src/rt/IDataSourceViewDefinition.d.ts +6 -6
- package/src/rt/IDataviewHeader.d.ts +10 -10
- package/src/rt/IResultValue.d.ts +4 -4
- package/src/rt/LastFocusedManager.d.ts +23 -23
- package/src/rt/Operation.d.ts +97 -97
- package/src/rt/OperationTable.d.ts +15 -15
- package/src/rt/Recompute.d.ts +41 -41
- package/src/rt/RecomputeTable.d.ts +9 -9
- package/src/rt/RemoteDataviewHeader.d.ts +14 -14
- package/src/rt/ResultValue.d.ts +7 -7
- package/src/rt/TableCache.d.ts +29 -29
- package/src/rt/TableCacheManager.d.ts +10 -10
- package/src/rt/Transaction.d.ts +23 -23
- package/src/security/UserDetails.d.ts +16 -16
- package/src/tasks/IMGDataCollection.d.ts +26 -26
- package/src/tasks/MGData.d.ts +63 -63
- package/src/tasks/MGDataCollection.d.ts +42 -42
- package/src/tasks/RCTimer.d.ts +13 -13
- package/src/tasks/RemoteTaskService.d.ts +16 -16
- package/src/tasks/Task.d.ts +312 -312
- package/src/tasks/TaskBase.d.ts +123 -123
- package/src/tasks/TaskServiceBase.d.ts +16 -16
- package/src/tasks/TasksTable.d.ts +21 -21
- package/src/tasks/sort/Sort.d.ts +4 -4
- package/src/tasks/sort/SortCollection.d.ts +11 -11
- package/src/util/ConstUtils.d.ts +3 -3
- package/src/util/FlowMonitorQueue.d.ts +70 -70
- package/src/util/HeapSort.d.ts +6 -6
- package/src/util/IMirrorXML.d.ts +6 -6
- package/src/util/IServerConfig.d.ts +11 -11
- package/src/util/MgBlockingQueue.d.ts +5 -5
- package/src/util/MgPriorityBlockingQueue.d.ts +17 -17
- package/src/util/MgPriorityQueue.d.ts +13 -13
- package/src/util/ParamParseResult.d.ts +6 -6
- package/src/util/PrmMap.d.ts +28 -28
- package/src/util/ReturnResult.d.ts +18 -18
- package/src/util/ReturnResultBase.d.ts +11 -11
- package/src/util/Scrambler.d.ts +10 -10
- package/src/util/UniqueIDUtils.d.ts +4 -4
- package/src/util/cookie.service.d.ts +8 -8
- package/esm2020/src/AccessHelper.mjs +0 -9
- package/esm2020/src/ClientManager.mjs +0 -399
- package/esm2020/src/CommandsProcessorBase.mjs +0 -58
- package/esm2020/src/CommandsProcessorManager.mjs +0 -26
- package/esm2020/src/CommandsTable.mjs +0 -162
- package/esm2020/src/ConstInterface.mjs +0 -516
- package/esm2020/src/FlowMonitorInterface.mjs +0 -16
- package/esm2020/src/GUIManager.mjs +0 -62
- package/esm2020/src/GlobalCommandsManager.mjs +0 -34
- package/esm2020/src/GuiEventsProcessor.mjs +0 -154
- package/esm2020/src/ServerConfig.mjs +0 -117
- package/esm2020/src/commands/ClientOriginatedCommandTaskTag.mjs +0 -11
- package/esm2020/src/commands/ClientToServer/ClientOriginatedCommandSerializer.mjs +0 -60
- package/esm2020/src/commands/ClientToServer/CommandFactory.mjs +0 -260
- package/esm2020/src/commands/ClientToServer/CommandSerializationHelper.mjs +0 -69
- package/esm2020/src/commands/ClientToServer/DataViewOutputCommand.mjs +0 -13
- package/esm2020/src/commands/ClientToServer/EvaluateCommand.mjs +0 -36
- package/esm2020/src/commands/ClientToServer/EventCommand.mjs +0 -40
- package/esm2020/src/commands/ClientToServer/ExecOperCommand.mjs +0 -67
- package/esm2020/src/commands/ClientToServer/FetchDataControlValuesEventCommand.mjs +0 -22
- package/esm2020/src/commands/ClientToServer/IniputForceWriteCommand.mjs +0 -23
- package/esm2020/src/commands/ClientToServer/RecomputeCommand.mjs +0 -27
- package/esm2020/src/commands/ClientToServer/RefreshEventCommand.mjs +0 -27
- package/esm2020/src/commands/ClientToServer/RefreshScreenEventCommand.mjs +0 -24
- package/esm2020/src/commands/ClientToServer/RollbackEventCommand.mjs +0 -39
- package/esm2020/src/commands/ClientToServer/SubformRefreshEventCommand.mjs +0 -24
- package/esm2020/src/commands/ClientToServer/TransactionCommand.mjs +0 -28
- package/esm2020/src/commands/ClientToServer/WriteMessageToServerLogCommand.mjs +0 -18
- package/esm2020/src/commands/DataViewCommandBase.mjs +0 -10
- package/esm2020/src/commands/IClientTargetedCommand.mjs +0 -9
- package/esm2020/src/commands/ServerToClient/AbortCommand.mjs +0 -65
- package/esm2020/src/commands/ServerToClient/AddRangeCommand.mjs +0 -62
- package/esm2020/src/commands/ServerToClient/AddSortCommand.mjs +0 -33
- package/esm2020/src/commands/ServerToClient/ClientRefreshCommand.mjs +0 -25
- package/esm2020/src/commands/ServerToClient/ClientTargetedCommandBase.mjs +0 -27
- package/esm2020/src/commands/ServerToClient/EnhancedVerifyCommand.mjs +0 -45
- package/esm2020/src/commands/ServerToClient/OpenURLCommand.mjs +0 -221
- package/esm2020/src/commands/ServerToClient/ResultCommand.mjs +0 -37
- package/esm2020/src/commands/ServerToClient/VerifyCommand.mjs +0 -83
- package/esm2020/src/commands/ServerToClient/XMLBasedCommandBuilder.mjs +0 -132
- package/esm2020/src/communications/InteractiveCommunicationsFailureHandler.mjs +0 -17
- package/esm2020/src/data/DataView.mjs +0 -1610
- package/esm2020/src/data/DataviewManager.mjs +0 -28
- package/esm2020/src/data/DataviewManagerBase.mjs +0 -15
- package/esm2020/src/data/DvCache.mjs +0 -67
- package/esm2020/src/data/Field.mjs +0 -646
- package/esm2020/src/data/FieldBase.mjs +0 -18
- package/esm2020/src/data/FieldsTable.mjs +0 -103
- package/esm2020/src/data/Key.mjs +0 -88
- package/esm2020/src/data/Record.mjs +0 -846
- package/esm2020/src/data/RecordsTable.mjs +0 -267
- package/esm2020/src/data/TaskTransactionManager.mjs +0 -103
- package/esm2020/src/data/XMLBasedDcValuesBuilder.mjs +0 -74
- package/esm2020/src/env/EnvVariablesTable.mjs +0 -340
- package/esm2020/src/env/Environment.mjs +0 -489
- package/esm2020/src/env/LanguageData.mjs +0 -226
- package/esm2020/src/env/MirrorString.mjs +0 -65
- package/esm2020/src/event/ActionManager.mjs +0 -91
- package/esm2020/src/event/Event.mjs +0 -1333
- package/esm2020/src/event/EventHandler.mjs +0 -766
- package/esm2020/src/event/EventHandlerPosition.mjs +0 -204
- package/esm2020/src/event/EventsManager.mjs +0 -2975
- package/esm2020/src/event/RunTimeEvent.mjs +0 -392
- package/esm2020/src/event/UserEventsTable.mjs +0 -47
- package/esm2020/src/exp/ExpTable.mjs +0 -59
- package/esm2020/src/exp/Expression.mjs +0 -200
- package/esm2020/src/exp/ExpressionDict.mjs +0 -727
- package/esm2020/src/exp/ExpressionEvaluator.mjs +0 -4212
- package/esm2020/src/exp/ExpressionLocalJpn.mjs +0 -314
- package/esm2020/src/exp/GlobalParamsTable.mjs +0 -85
- package/esm2020/src/exp/YesNoExp.mjs +0 -36
- package/esm2020/src/gui/CreatedFormVector.mjs +0 -23
- package/esm2020/src/gui/FormsTable.mjs +0 -66
- package/esm2020/src/gui/MgControl.mjs +0 -353
- package/esm2020/src/gui/MgForm.mjs +0 -1181
- package/esm2020/src/http/HttpManager.mjs +0 -97
- package/esm2020/src/http/client/HttpClientAsync.mjs +0 -67
- package/esm2020/src/http/client/HttpClientBase.mjs +0 -132
- package/esm2020/src/http/client/HttpClientEvents.mjs +0 -39
- package/esm2020/src/http/client/HttpClientSync.mjs +0 -42
- package/esm2020/src/http/client/HttpUtility.mjs +0 -84
- package/esm2020/src/remote/AddUserLocateRemoteDataViewCommand.mjs +0 -18
- package/esm2020/src/remote/AddUserRangeRemoteDataViewCommand.mjs +0 -18
- package/esm2020/src/remote/AddUserSortRemoteDataViewCommand.mjs +0 -18
- package/esm2020/src/remote/RemoteCommandsProcessor.mjs +0 -880
- package/esm2020/src/remote/RemoteControlItemsRefreshCommand.mjs +0 -25
- package/esm2020/src/remote/RemoteDataViewCommandBase.mjs +0 -24
- package/esm2020/src/remote/RemoteDataViewCommandFactory.mjs +0 -61
- package/esm2020/src/remote/ResetUserLocateRemoteDataviewCommand.mjs +0 -17
- package/esm2020/src/remote/ResetUserSortRemoteDataviewCommand.mjs +0 -16
- package/esm2020/src/remote/ServerError.mjs +0 -40
- package/esm2020/src/remote/SetTransactionStateRemoteDataViewCommand.mjs +0 -20
- package/esm2020/src/rt/Argument.mjs +0 -265
- package/esm2020/src/rt/ArgumentsList.mjs +0 -103
- package/esm2020/src/rt/Boundary.mjs +0 -152
- package/esm2020/src/rt/CompMainPrgTable.mjs +0 -65
- package/esm2020/src/rt/DataviewHeaders.mjs +0 -53
- package/esm2020/src/rt/DataviewHeadersSaxHandler.mjs +0 -38
- package/esm2020/src/rt/ExecutionStack.mjs +0 -94
- package/esm2020/src/rt/HandlersTable.mjs +0 -96
- package/esm2020/src/rt/LastFocusedManager.mjs +0 -67
- package/esm2020/src/rt/Operation.mjs +0 -735
- package/esm2020/src/rt/OperationTable.mjs +0 -67
- package/esm2020/src/rt/Recompute.mjs +0 -355
- package/esm2020/src/rt/RecomputeTable.mjs +0 -63
- package/esm2020/src/rt/RemoteDataviewHeader.mjs +0 -108
- package/esm2020/src/rt/ResultValue.mjs +0 -12
- package/esm2020/src/rt/TableCache.mjs +0 -177
- package/esm2020/src/rt/TableCacheManager.mjs +0 -67
- package/esm2020/src/rt/Transaction.mjs +0 -53
- package/esm2020/src/security/UserDetails.mjs +0 -71
- package/esm2020/src/tasks/MGData.mjs +0 -552
- package/esm2020/src/tasks/MGDataCollection.mjs +0 -252
- package/esm2020/src/tasks/RCTimer.mjs +0 -63
- package/esm2020/src/tasks/RemoteTaskService.mjs +0 -45
- package/esm2020/src/tasks/Task.mjs +0 -2496
- package/esm2020/src/tasks/TaskBase.mjs +0 -87
- package/esm2020/src/tasks/TaskServiceBase.mjs +0 -25
- package/esm2020/src/tasks/TasksTable.mjs +0 -80
- package/esm2020/src/tasks/sort/Sort.mjs +0 -7
- package/esm2020/src/tasks/sort/SortCollection.mjs +0 -67
- package/esm2020/src/util/ConstUtils.mjs +0 -14
- package/esm2020/src/util/FlowMonitorQueue.mjs +0 -453
- package/esm2020/src/util/HeapSort.mjs +0 -70
- package/esm2020/src/util/MgPriorityBlockingQueue.mjs +0 -74
- package/esm2020/src/util/MgPriorityQueue.mjs +0 -66
- package/esm2020/src/util/PrmMap.mjs +0 -151
- package/esm2020/src/util/ReturnResult.mjs +0 -46
- package/esm2020/src/util/ReturnResultBase.mjs +0 -18
- package/esm2020/src/util/Scrambler.mjs +0 -89
- package/esm2020/src/util/UniqueIDUtils.mjs +0 -12
- package/esm2020/src/util/cookie.service.mjs +0 -92
- package/fesm2015/magic-xpa-engine.mjs +0 -30836
- package/fesm2015/magic-xpa-engine.mjs.map +0 -1
- package/fesm2020/magic-xpa-engine.mjs.map +0 -1
@@ -1,489 +0,0 @@
|
|
1
|
-
import { DisplayConvertor } from '@magic-xpa/gui';
|
2
|
-
import { Debug, Encoding, Hashtable, NString } from '@magic-xpa/mscorelib';
|
3
|
-
import { Constants, Logger, OSEnvironment, UtilDateJpn, UtilStrByteMode, XMLConstants, XmlParser } from '@magic-xpa/utils';
|
4
|
-
import { CommandsProcessorManager } from '../CommandsProcessorManager';
|
5
|
-
import { ConstInterface } from '../ConstInterface';
|
6
|
-
import { ServerConfig } from '../ServerConfig';
|
7
|
-
import { AccessHelper } from '../AccessHelper';
|
8
|
-
export class Environment {
|
9
|
-
constructor() {
|
10
|
-
this._environments = new Hashtable();
|
11
|
-
this._contextInactivityTimeout = 0;
|
12
|
-
this._clientContextInactivityTimeout = 0;
|
13
|
-
this._contextInactivityWarningTime = 0;
|
14
|
-
this._toolitipTimeout = 0;
|
15
|
-
this._contextUnloadTimeout = 0;
|
16
|
-
this._canReplaceDecimalSeparator = false;
|
17
|
-
this._codePage = 0;
|
18
|
-
this._dateSeparator = '\0';
|
19
|
-
this._decimalSeparator = '\0';
|
20
|
-
this._thousandsSeparator = '\0';
|
21
|
-
this._timeSeparator = '\0';
|
22
|
-
this._guid = null;
|
23
|
-
this._imeAutoOff = false;
|
24
|
-
this._language = '\0';
|
25
|
-
this._localAs400Set = false;
|
26
|
-
this._localExtraGengo = null;
|
27
|
-
this._localFlags = null;
|
28
|
-
this._lowHigh = true;
|
29
|
-
this._owner = null;
|
30
|
-
this._debugMode = 0;
|
31
|
-
this._significantNumSize = 0;
|
32
|
-
this._specialAnsiExpression = false;
|
33
|
-
this._specialImmediatehandlerEnd = false;
|
34
|
-
this._specialShowStatusBarPanes = false;
|
35
|
-
this._specialRouteToRootProgOnContextRecreation = false;
|
36
|
-
this._specialCancelOnCreate = false;
|
37
|
-
this._system = null;
|
38
|
-
this._terminal = 0;
|
39
|
-
this._forwardSlash = Constants.ForwardSlashWebUsage;
|
40
|
-
this._dropUserFormats = null;
|
41
|
-
this._webclientReinitSession = "N";
|
42
|
-
this._specialValNewPolicy = false;
|
43
|
-
this.IgnoreReplaceDecimalSeparator = false;
|
44
|
-
}
|
45
|
-
get Language() {
|
46
|
-
return this._language;
|
47
|
-
}
|
48
|
-
get SpecialRestoreMaximizedForm() {
|
49
|
-
return false;
|
50
|
-
}
|
51
|
-
set ForwardSlashUsage(value) {
|
52
|
-
this._forwardSlash = value;
|
53
|
-
}
|
54
|
-
get ForwardSlashUsage() {
|
55
|
-
return this._forwardSlash;
|
56
|
-
}
|
57
|
-
fillData(tokensVectorOrParser) {
|
58
|
-
if (arguments[0] instanceof XmlParser) {
|
59
|
-
this.fillData_0(tokensVectorOrParser);
|
60
|
-
return;
|
61
|
-
}
|
62
|
-
this.fillData_1(tokensVectorOrParser);
|
63
|
-
}
|
64
|
-
fillData_0(parser) {
|
65
|
-
let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
|
66
|
-
if (endContext !== -1 && endContext < parser.getXMLdata().length) {
|
67
|
-
let tag = parser.getXMLsubstring(endContext);
|
68
|
-
parser.add2CurrIndex(tag.indexOf(ConstInterface.MG_TAG_ENV) + ConstInterface.MG_TAG_ENV.length);
|
69
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
70
|
-
this.fillData(tokensVector);
|
71
|
-
parser.setCurrIndex(endContext + XMLConstants.TAG_TERM.length);
|
72
|
-
}
|
73
|
-
else
|
74
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Environment.FillData() out of string bounds");
|
75
|
-
}
|
76
|
-
fillData_1(tokensVector) {
|
77
|
-
let attribute;
|
78
|
-
let valueStr;
|
79
|
-
let hashKey;
|
80
|
-
let env;
|
81
|
-
env = new EnvironmentDetails();
|
82
|
-
for (let j = 0; j < tokensVector.length; j += 2) {
|
83
|
-
attribute = (tokensVector.get_Item(j));
|
84
|
-
valueStr = (tokensVector.get_Item(j + 1));
|
85
|
-
valueStr = XmlParser.unescape(valueStr);
|
86
|
-
switch (attribute) {
|
87
|
-
case ConstInterface.MG_ATTR_THOUSANDS:
|
88
|
-
this._thousandsSeparator = valueStr[0];
|
89
|
-
break;
|
90
|
-
case ConstInterface.MG_ATTR_DECIMAL_SEPARATOR:
|
91
|
-
this._decimalSeparator = valueStr[0];
|
92
|
-
break;
|
93
|
-
case ConstInterface.MG_ATTR_WEBCLIENT_REINIT_SESSION:
|
94
|
-
this._webclientReinitSession = valueStr[0];
|
95
|
-
break;
|
96
|
-
case ConstInterface.MG_ATTR_DATE:
|
97
|
-
this._dateSeparator = valueStr[0];
|
98
|
-
DisplayConvertor.Instance.setDateChar(this._dateSeparator.charCodeAt(0));
|
99
|
-
break;
|
100
|
-
case ConstInterface.MG_ATTR_TIME:
|
101
|
-
this._timeSeparator = valueStr[0];
|
102
|
-
break;
|
103
|
-
case ConstInterface.MG_ATTR_OWNER:
|
104
|
-
this._owner = valueStr;
|
105
|
-
break;
|
106
|
-
case ConstInterface.MG_ATTR_SIGNIFICANT_NUM_SIZE:
|
107
|
-
this._significantNumSize = XmlParser.getInt(valueStr);
|
108
|
-
break;
|
109
|
-
case ConstInterface.MG_ATTR_DEBUG_MODE:
|
110
|
-
this._debugMode = XmlParser.getInt(valueStr);
|
111
|
-
break;
|
112
|
-
case ConstInterface.MG_ATTR_POINT_TRANSLATION:
|
113
|
-
this._canReplaceDecimalSeparator = XmlParser.getBoolean(valueStr);
|
114
|
-
break;
|
115
|
-
case ConstInterface.MG_ATTR_SPECIAL_EXITCTRL:
|
116
|
-
break;
|
117
|
-
case ConstInterface.MG_ATTR_LOWHIGH:
|
118
|
-
this._lowHigh = XmlParser.getBoolean(valueStr);
|
119
|
-
break;
|
120
|
-
case ConstInterface.MG_ATTR_ACCESS_TEST:
|
121
|
-
break;
|
122
|
-
case ConstInterface.MG_ATTR_SPECIAL_TEXT_SIZE_FACTORING:
|
123
|
-
break;
|
124
|
-
case ConstInterface.MG_ATTR_SPECIAL_FLAT_EDIT_ON_CLASSIC_THEME:
|
125
|
-
break;
|
126
|
-
case ConstInterface.MG_ATTR_ENCODING:
|
127
|
-
if (valueStr !== " ") {
|
128
|
-
this._codePage = XmlParser.getInt(valueStr);
|
129
|
-
UtilStrByteMode.Encoding = this.GetEncoding();
|
130
|
-
}
|
131
|
-
break;
|
132
|
-
case ConstInterface.MG_ATTR_SYSTEM:
|
133
|
-
this._system = XmlParser.unescape(valueStr);
|
134
|
-
break;
|
135
|
-
case ConstInterface.MG_ATTR_COMPONENT:
|
136
|
-
env.CompIdx = XmlParser.getInt(valueStr);
|
137
|
-
break;
|
138
|
-
case ConstInterface.MG_ATTR_DATEMODE:
|
139
|
-
env.DateMode = valueStr[0];
|
140
|
-
break;
|
141
|
-
case ConstInterface.MG_ATTR_CENTURY:
|
142
|
-
env.Century = XmlParser.getInt(valueStr);
|
143
|
-
break;
|
144
|
-
case ConstInterface.MG_ATTR_IDLETIME:
|
145
|
-
env.IdleTime = XmlParser.getInt(valueStr);
|
146
|
-
if (env.IdleTime === 0)
|
147
|
-
env.IdleTime = 1;
|
148
|
-
break;
|
149
|
-
case ConstInterface.MG_ATTR_UPD_IN_QUERY:
|
150
|
-
env.UpdateInQueryMode = XmlParser.getBoolean(valueStr);
|
151
|
-
break;
|
152
|
-
case ConstInterface.MG_ATTR_CRE_IN_MODIFY:
|
153
|
-
env.CreateInModifyMode = XmlParser.getBoolean(valueStr);
|
154
|
-
break;
|
155
|
-
case ConstInterface.MG_ATTR_DEFAULT_COLOR:
|
156
|
-
break;
|
157
|
-
case ConstInterface.MG_ATTR_DEFAULT_FOCUS_COLOR:
|
158
|
-
break;
|
159
|
-
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_TIMEOUT:
|
160
|
-
this._contextInactivityTimeout = XmlParser.getInt(valueStr);
|
161
|
-
break;
|
162
|
-
case ConstInterface.MG_ATTR_CLIENT_CONTEXT_INACTIVITY_TIMEOUT:
|
163
|
-
this._clientContextInactivityTimeout = XmlParser.getInt(valueStr);
|
164
|
-
break;
|
165
|
-
case ConstInterface.MG_ATTR_CONTEXT_INACTIVITY_WARNING_TIME:
|
166
|
-
this._contextInactivityWarningTime = XmlParser.getInt(valueStr);
|
167
|
-
break;
|
168
|
-
case ConstInterface.MG_ATTR_TOOLTIP_TIMEOUT:
|
169
|
-
this._toolitipTimeout = XmlParser.getInt(valueStr);
|
170
|
-
break;
|
171
|
-
case ConstInterface.MG_ATTR_CONTEXT_UNLOAD_TIMEOUT:
|
172
|
-
this._contextUnloadTimeout = XmlParser.getInt(valueStr);
|
173
|
-
break;
|
174
|
-
case ConstInterface.MG_ATTR_IME_AUTO_OFF:
|
175
|
-
this._imeAutoOff = XmlParser.getBoolean(valueStr);
|
176
|
-
break;
|
177
|
-
case ConstInterface.MG_ATTR_LOCAL_AS400SET:
|
178
|
-
this._localAs400Set = XmlParser.getBoolean(valueStr);
|
179
|
-
break;
|
180
|
-
case ConstInterface.MG_ATTR_LOCAL_EXTRA_GENGO:
|
181
|
-
this._localExtraGengo = valueStr;
|
182
|
-
UtilDateJpn.getInstance().addExtraGengo(this._localExtraGengo);
|
183
|
-
break;
|
184
|
-
case ConstInterface.MG_ATTR_LOCAL_FLAGS:
|
185
|
-
this._localFlags = valueStr;
|
186
|
-
break;
|
187
|
-
case ConstInterface.MG_ATTR_SPECIAL_IMMEDIATE_HANDLER_END:
|
188
|
-
this._specialImmediatehandlerEnd = XmlParser.getBoolean(valueStr);
|
189
|
-
break;
|
190
|
-
case ConstInterface.MG_ATTR_SPEACIAL_ANSI_EXP:
|
191
|
-
this._specialAnsiExpression = XmlParser.getBoolean(valueStr);
|
192
|
-
break;
|
193
|
-
case ConstInterface.MG_ATTR_SPECIAL_SHOW_STATUSBAR_PANES:
|
194
|
-
this._specialShowStatusBarPanes = XmlParser.getBoolean(valueStr);
|
195
|
-
break;
|
196
|
-
case ConstInterface.MG_ATTR_SPECIAL_ROUTE_TO_ROOT_PROG_ON_CONTEXT_RECREATION:
|
197
|
-
this._specialRouteToRootProgOnContextRecreation = XmlParser.getBoolean(valueStr);
|
198
|
-
break;
|
199
|
-
case ConstInterface.MG_ATTR_SPECIAL_SPECIAL_EDIT_LEFT_ALIGN:
|
200
|
-
break;
|
201
|
-
case ConstInterface.MG_ATTR_SPEACIAL_SWF_CONTROL_NAME:
|
202
|
-
break;
|
203
|
-
case ConstInterface.MG_ATTR_LANGUAGE:
|
204
|
-
this._language = valueStr[0];
|
205
|
-
break;
|
206
|
-
case ConstInterface.MG_ATTR_USERID:
|
207
|
-
break;
|
208
|
-
case ConstInterface.MG_TAG_USERNAME:
|
209
|
-
ServerConfig.Instance.setUsername(valueStr);
|
210
|
-
break;
|
211
|
-
case ConstInterface.MG_ATTR_TERMINAL:
|
212
|
-
this._terminal = XmlParser.getInt(valueStr);
|
213
|
-
break;
|
214
|
-
case ConstInterface.MG_ATTR_USERINFO:
|
215
|
-
break;
|
216
|
-
case ConstInterface.MG_ATTR_GUID:
|
217
|
-
this._guid = valueStr;
|
218
|
-
break;
|
219
|
-
case ConstInterface.MG_ATTR_CONTROLS_PERSISTENCY_PATH:
|
220
|
-
break;
|
221
|
-
case ConstInterface.MG_ATTR_PROJDIR:
|
222
|
-
env.ProjDir = valueStr;
|
223
|
-
break;
|
224
|
-
case ConstInterface.MG_ATTR_DROP_USERFORMATS:
|
225
|
-
this._dropUserFormats = valueStr;
|
226
|
-
break;
|
227
|
-
case ConstInterface.MG_ATTR_SPECIAL_VAL_NEW_POLICY:
|
228
|
-
this._specialValNewPolicy = XmlParser.getBoolean(valueStr);
|
229
|
-
break;
|
230
|
-
case ConstInterface.MG_ATTR_SPECIAL_CANCEL_ON_CREATE:
|
231
|
-
this._specialCancelOnCreate = XmlParser.getBoolean(valueStr);
|
232
|
-
break;
|
233
|
-
case ConstInterface.MG_ATTR_SPECIAL_LEGACY_TRIM_RANGE:
|
234
|
-
case ConstInterface.MG_ATTR_SPECIAL_LEGACY_EMPTY_RANGE:
|
235
|
-
case ConstInterface.MG_ATTR_DEFAULT_DISABLED_COLOR:
|
236
|
-
case ConstInterface.MG_ATTR_SPECIAL_ANSI_BLOB_CHECK_NULL:
|
237
|
-
case ConstInterface.MG_ATTR_SPECIAL_TABLE_REDUCE_TITLE_HEIGHT:
|
238
|
-
case ConstInterface.MG_ATTR_SPECIAL_DOTNET_ALLOW_ZERO_DATE:
|
239
|
-
case ConstInterface.MG_ATTR_SPECIAL_REUSE_TABLE_EDITOR:
|
240
|
-
break;
|
241
|
-
default:
|
242
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Environment.fillData(): unknown attribute: " + attribute);
|
243
|
-
break;
|
244
|
-
}
|
245
|
-
}
|
246
|
-
hashKey = env.CompIdx;
|
247
|
-
this._environments.set_Item(hashKey, env);
|
248
|
-
}
|
249
|
-
async fillFromUrl(tagName, parser) {
|
250
|
-
let XMLdata = parser.getXMLdata();
|
251
|
-
let endContext = parser.getXMLdata().indexOf(XMLConstants.TAG_TERM, parser.getCurrIndex());
|
252
|
-
if (endContext !== -1 && endContext < XMLdata.length) {
|
253
|
-
let tagAndAttributes = parser.getXMLsubstring(endContext);
|
254
|
-
parser.add2CurrIndex(tagAndAttributes.indexOf(tagName) + tagName.length);
|
255
|
-
let tokensVector = XmlParser.getTokens(parser.getXMLsubstring(endContext), XMLConstants.XML_ATTR_DELIM);
|
256
|
-
Debug.Assert(tokensVector.get_Item(0) === XMLConstants.MG_ATTR_VALUE);
|
257
|
-
let cachedFileUrl = (tokensVector.get_Item(1));
|
258
|
-
if (cachedFileUrl.trim() === "")
|
259
|
-
Logger.Instance.WriteErrorToLog(NString.Format("Empty cached file URL: '{0}'", tagAndAttributes.trim()));
|
260
|
-
else {
|
261
|
-
let Content = await CommandsProcessorManager.GetContent(cachedFileUrl, true);
|
262
|
-
try {
|
263
|
-
switch (tagName) {
|
264
|
-
case ConstInterface.MG_TAG_KBDMAP_URL:
|
265
|
-
break;
|
266
|
-
case ConstInterface.MG_TAG_ENV_PARAM_URL:
|
267
|
-
let innerXmlParser = new XmlParser(Content);
|
268
|
-
while (AccessHelper.envParamsTable.mirrorFromXML(innerXmlParser.getNextTag(), innerXmlParser)) {
|
269
|
-
}
|
270
|
-
break;
|
271
|
-
}
|
272
|
-
}
|
273
|
-
catch (ex) {
|
274
|
-
switch (tagName) {
|
275
|
-
case ConstInterface.MG_TAG_KBDMAP_URL:
|
276
|
-
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Keyboard Mapping: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
|
277
|
-
break;
|
278
|
-
case ConstInterface.MG_TAG_ENV_PARAM_URL:
|
279
|
-
Logger.Instance.WriteExceptionToLogWithMsg(NString.Format("Env Params Table: '{0}'{1}{2}", cachedFileUrl, OSEnvironment.EolSeq, ex.Message));
|
280
|
-
}
|
281
|
-
}
|
282
|
-
}
|
283
|
-
endContext = XMLdata.indexOf(XMLConstants.TAG_OPEN, endContext);
|
284
|
-
if (endContext !== -1)
|
285
|
-
parser.setCurrIndex(endContext);
|
286
|
-
}
|
287
|
-
}
|
288
|
-
getEnvDet(compIdx) {
|
289
|
-
let environmentDetails = this._environments.get_Item(compIdx);
|
290
|
-
if (environmentDetails === null)
|
291
|
-
Logger.Instance.WriteExceptionToLogWithMsg("in Environment.getEnvDet() there is no env");
|
292
|
-
return environmentDetails;
|
293
|
-
}
|
294
|
-
GetDateMode(compIdx) {
|
295
|
-
return this.getEnvDet(compIdx).DateMode;
|
296
|
-
}
|
297
|
-
GetThousands() {
|
298
|
-
return this._thousandsSeparator;
|
299
|
-
}
|
300
|
-
GetDecimal() {
|
301
|
-
return this._decimalSeparator;
|
302
|
-
}
|
303
|
-
setDecimalSeparator(value) {
|
304
|
-
this._decimalSeparator = value;
|
305
|
-
}
|
306
|
-
setThousandsSeparator(value) {
|
307
|
-
this._thousandsSeparator = value;
|
308
|
-
}
|
309
|
-
setDateSeparator(value) {
|
310
|
-
this._dateSeparator = value;
|
311
|
-
}
|
312
|
-
setTimeSeparator(value) {
|
313
|
-
this._timeSeparator = value;
|
314
|
-
}
|
315
|
-
GetDate() {
|
316
|
-
return this._dateSeparator;
|
317
|
-
}
|
318
|
-
getIdleTime(compIdx) {
|
319
|
-
return this.getEnvDet(compIdx).IdleTime;
|
320
|
-
}
|
321
|
-
getOwner() {
|
322
|
-
return this._owner;
|
323
|
-
}
|
324
|
-
GetTime() {
|
325
|
-
return this._timeSeparator;
|
326
|
-
}
|
327
|
-
GetCentury(compIdx) {
|
328
|
-
return this.getEnvDet(compIdx).Century;
|
329
|
-
}
|
330
|
-
allowUpdateInQueryMode(compIdx) {
|
331
|
-
return this.getEnvDet(compIdx).allowUpdateInQueryMode();
|
332
|
-
}
|
333
|
-
allowCreateInModifyMode(compIdx) {
|
334
|
-
return this.getEnvDet(compIdx).allowCreateInModifyMode();
|
335
|
-
}
|
336
|
-
GetSignificantNumSize() {
|
337
|
-
return this._significantNumSize;
|
338
|
-
}
|
339
|
-
setSignificantNumSize(newSize) {
|
340
|
-
this._significantNumSize = newSize;
|
341
|
-
}
|
342
|
-
getCodePage() {
|
343
|
-
return this._codePage;
|
344
|
-
}
|
345
|
-
GetEncoding() {
|
346
|
-
let encoding;
|
347
|
-
try {
|
348
|
-
encoding = Encoding.GetEncoding(this._codePage);
|
349
|
-
}
|
350
|
-
catch (exception) {
|
351
|
-
encoding = null;
|
352
|
-
}
|
353
|
-
return encoding;
|
354
|
-
}
|
355
|
-
getSystem() {
|
356
|
-
return this._system;
|
357
|
-
}
|
358
|
-
GetDebugLevel() {
|
359
|
-
return this._debugMode;
|
360
|
-
}
|
361
|
-
CanReplaceDecimalSeparator() {
|
362
|
-
return !this.IgnoreReplaceDecimalSeparator && this._canReplaceDecimalSeparator;
|
363
|
-
}
|
364
|
-
getClientContextInactivityTimeout() {
|
365
|
-
return this._clientContextInactivityTimeout;
|
366
|
-
}
|
367
|
-
getContextInactivityTimeout() {
|
368
|
-
return this._contextInactivityTimeout;
|
369
|
-
}
|
370
|
-
getContextInactivityWarningTime() {
|
371
|
-
return this._contextInactivityWarningTime;
|
372
|
-
}
|
373
|
-
getContextUnloadTimeout() {
|
374
|
-
return this._contextUnloadTimeout;
|
375
|
-
}
|
376
|
-
GetTooltipTimeout() {
|
377
|
-
return this._toolitipTimeout;
|
378
|
-
}
|
379
|
-
getLowHigh() {
|
380
|
-
return this._lowHigh;
|
381
|
-
}
|
382
|
-
GetImeAutoOff() {
|
383
|
-
return this._imeAutoOff;
|
384
|
-
}
|
385
|
-
GetLocalAs400Set() {
|
386
|
-
return this._localAs400Set;
|
387
|
-
}
|
388
|
-
getLocalExtraGengo() {
|
389
|
-
return this._localExtraGengo;
|
390
|
-
}
|
391
|
-
GetLocalFlag(f) {
|
392
|
-
return this._localFlags !== null && this._localFlags.indexOf(f) >= 0;
|
393
|
-
}
|
394
|
-
getSpecialImmediateHandlerEnd() {
|
395
|
-
return this._specialImmediatehandlerEnd;
|
396
|
-
}
|
397
|
-
getSpecialAnsiExpression() {
|
398
|
-
return this._specialAnsiExpression;
|
399
|
-
}
|
400
|
-
getSpecialShowStatusBarPanes() {
|
401
|
-
return this._specialShowStatusBarPanes;
|
402
|
-
}
|
403
|
-
getTerminal() {
|
404
|
-
return this._terminal;
|
405
|
-
}
|
406
|
-
getWebClientReinitSession() {
|
407
|
-
return this._webclientReinitSession;
|
408
|
-
}
|
409
|
-
setWebClientReinitSession(session) {
|
410
|
-
this._webclientReinitSession = session;
|
411
|
-
}
|
412
|
-
getSpecialRouteToRootProgOnContextRecreation() {
|
413
|
-
return this._specialRouteToRootProgOnContextRecreation;
|
414
|
-
}
|
415
|
-
GetGUID() {
|
416
|
-
return this._guid;
|
417
|
-
}
|
418
|
-
getProjDir(compIdx) {
|
419
|
-
return this.getEnvDet(compIdx).ProjDir;
|
420
|
-
}
|
421
|
-
GetSpecialLogInternalExceptions() {
|
422
|
-
return true;
|
423
|
-
}
|
424
|
-
setOwner(val) {
|
425
|
-
this._owner = val;
|
426
|
-
}
|
427
|
-
setDateMode(compIdx, val) {
|
428
|
-
this.getEnvDet(compIdx).DateMode = val;
|
429
|
-
}
|
430
|
-
setCentury(compIdx, val) {
|
431
|
-
this.getEnvDet(compIdx).Century = val;
|
432
|
-
}
|
433
|
-
setIdleTime(compIdx, val) {
|
434
|
-
this.getEnvDet(compIdx).IdleTime = val;
|
435
|
-
}
|
436
|
-
setAllowUpdateInQueryMode(compIdx, val) {
|
437
|
-
this.getEnvDet(compIdx).UpdateInQueryMode = val;
|
438
|
-
}
|
439
|
-
setAllowCreateInModifyMode(compIdx, val) {
|
440
|
-
this.getEnvDet(compIdx).CreateInModifyMode = val;
|
441
|
-
}
|
442
|
-
setContextInactivityTimeout(val) {
|
443
|
-
this._contextInactivityTimeout = val;
|
444
|
-
}
|
445
|
-
setContextInactivityWarningTime(val) {
|
446
|
-
this._contextInactivityWarningTime = val;
|
447
|
-
}
|
448
|
-
setContextUnloadTimeout(val) {
|
449
|
-
this._contextUnloadTimeout = val;
|
450
|
-
}
|
451
|
-
setTerminal(val) {
|
452
|
-
this._terminal = val;
|
453
|
-
}
|
454
|
-
GetDropUserFormats() {
|
455
|
-
return this._dropUserFormats;
|
456
|
-
}
|
457
|
-
GetSpecialValNewPolicy() {
|
458
|
-
return this._specialValNewPolicy;
|
459
|
-
}
|
460
|
-
GetSpecialCancelOnCreate() {
|
461
|
-
return this._specialCancelOnCreate;
|
462
|
-
}
|
463
|
-
}
|
464
|
-
Environment.Instance = new Environment();
|
465
|
-
export class EnvironmentDetails {
|
466
|
-
set UpdateInQueryMode(value) {
|
467
|
-
this._updateInQueryMode = value;
|
468
|
-
}
|
469
|
-
set CreateInModifyMode(value) {
|
470
|
-
this._createInModifyMode = value;
|
471
|
-
}
|
472
|
-
constructor() {
|
473
|
-
this._createInModifyMode = false;
|
474
|
-
this._updateInQueryMode = false;
|
475
|
-
this.CompIdx = 0;
|
476
|
-
this.DateMode = '\0';
|
477
|
-
this.Century = 0;
|
478
|
-
this.IdleTime = 0;
|
479
|
-
this.ProjDir = null;
|
480
|
-
this.CompIdx = 0;
|
481
|
-
}
|
482
|
-
allowUpdateInQueryMode() {
|
483
|
-
return this._updateInQueryMode;
|
484
|
-
}
|
485
|
-
allowCreateInModifyMode() {
|
486
|
-
return this._createInModifyMode;
|
487
|
-
}
|
488
|
-
}
|
489
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbmdpbmUvc3JjL2Vudi9FbnZpcm9ubWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQVEsT0FBTyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sYUFBYSxFQUNiLFdBQVcsRUFDWCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSzdDLE1BQU0sT0FBTyxXQUFXO0lBQXhCO1FBQ1Usa0JBQWEsR0FBMEMsSUFBSSxTQUFTLEVBQThCLENBQUM7UUFDbkcsOEJBQXlCLEdBQVcsQ0FBQyxDQUFDO1FBQ3RDLG9DQUErQixHQUFXLENBQUMsQ0FBQztRQUM1QyxrQ0FBNkIsR0FBVyxDQUFDLENBQUM7UUFDMUMscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLDBCQUFxQixHQUFXLENBQUMsQ0FBQztRQUNsQyxnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFDN0MsY0FBUyxHQUFXLENBQUMsQ0FBQztRQUN0QixtQkFBYyxHQUFXLElBQUksQ0FBQztRQUM5QixzQkFBaUIsR0FBVyxJQUFJLENBQUM7UUFDakMsd0JBQW1CLEdBQVcsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQVcsSUFBSSxDQUFDO1FBRTlCLFVBQUssR0FBVyxJQUFJLENBQUM7UUFDckIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDN0IsY0FBUyxHQUFXLElBQUksQ0FBQztRQUN6QixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxxQkFBZ0IsR0FBVyxJQUFJLENBQUM7UUFDaEMsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFDM0IsYUFBUSxHQUFZLElBQUksQ0FBQztRQUN6QixXQUFNLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsd0JBQW1CLEdBQVcsQ0FBQyxDQUFDO1FBQ2hDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFDN0MsK0JBQTBCLEdBQVksS0FBSyxDQUFDO1FBQzVDLCtDQUEwQyxHQUFZLEtBQUssQ0FBQztRQUc1RCwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMsWUFBTyxHQUFXLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBQ3RCLGtCQUFhLEdBQVcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBQ3ZELHFCQUFnQixHQUFXLElBQUksQ0FBQztRQUVoQyw0QkFBdUIsR0FBVyxHQUFHLENBQUM7UUFDdEMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBUzlDLGtDQUE2QixHQUFZLEtBQUssQ0FBQztJQXF0QmpELENBQUM7SUExdEJDLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBTUQsSUFBSSwyQkFBMkI7UUFDN0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBS0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFhO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUlELFFBQVEsQ0FBQyxvQkFBMEI7UUFDakMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksU0FBUyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN0QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUtNLFVBQVUsQ0FBQyxNQUFpQjtRQUNqQyxJQUFJLFVBQVUsR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkcsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFFaEUsSUFBSSxHQUFHLEdBQVcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEcsSUFBSSxZQUFZLEdBQWlCLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdEgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QixNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hFOztZQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBTU8sVUFBVSxDQUFDLFlBQTBCO1FBQzNDLElBQUksU0FBaUIsQ0FBQztRQUN0QixJQUFJLFFBQWdCLENBQUM7UUFDckIsSUFBSSxPQUFlLENBQUM7UUFDcEIsSUFBSSxHQUF1QixDQUFDO1FBQzVCLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2RCxTQUFTLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsUUFBUSxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QyxRQUFRLFNBQVMsRUFBRTtnQkFDakIsS0FBSyxjQUFjLENBQUMsaUJBQWlCO29CQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHlCQUF5QjtvQkFDM0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDckMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxnQ0FBZ0M7b0JBQ2xELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsWUFBWTtvQkFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekUsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxZQUFZO29CQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxhQUFhO29CQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztvQkFDdkIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyw0QkFBNEI7b0JBQzlDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN0RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGtCQUFrQjtvQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3QyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHlCQUF5QjtvQkFDM0MsSUFBSSxDQUFDLDJCQUEyQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsd0JBQXdCO29CQUMxQyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGVBQWU7b0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0MsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxtQkFBbUI7b0JBQ3JDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsbUNBQW1DO29CQUNyRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLDBDQUEwQztvQkFFNUQsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0I7b0JBQ2xDLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM1QyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztxQkFDL0M7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxjQUFjO29CQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzVDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsaUJBQWlCO29CQUNuQyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxlQUFlO29CQUNqQyxHQUFHLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsZ0JBQWdCO29CQUNsQyxHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBRTFDLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxDQUFDO3dCQUNwQixHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDbkIsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxvQkFBb0I7b0JBQ3RDLEdBQUcsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHFCQUFxQjtvQkFDdkMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMscUJBQXFCO29CQUN2QyxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLDJCQUEyQjtvQkFDN0MsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxrQ0FBa0M7b0JBQ3BELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHlDQUF5QztvQkFDM0QsSUFBSSxDQUFDLCtCQUErQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsdUNBQXVDO29CQUN6RCxJQUFJLENBQUMsNkJBQTZCLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDaEUsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyx1QkFBdUI7b0JBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLDhCQUE4QjtvQkFDaEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsb0JBQW9CO29CQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsc0JBQXNCO29CQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3JELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMseUJBQXlCO29CQUMzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO29CQUNqQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUMvRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLG1CQUFtQjtvQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7b0JBQzVCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMscUNBQXFDO29CQUN2RCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDbEUsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyx5QkFBeUI7b0JBQzNDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM3RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLG9DQUFvQztvQkFDdEQsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pFLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsd0RBQXdEO29CQUMxRSxJQUFJLENBQUMsMENBQTBDLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDakYsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyx1Q0FBdUM7b0JBQ3pELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsaUNBQWlDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGdCQUFnQjtvQkFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzdCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsY0FBYztvQkFDaEMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxlQUFlO29CQUNqQyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDNUMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0I7b0JBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDNUMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyxnQkFBZ0I7b0JBQ2xDLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsWUFBWTtvQkFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsaUNBQWlDO29CQUNuRCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGVBQWU7b0JBQ2pDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO29CQUN2QixNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLHdCQUF3QjtvQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztvQkFDakMsTUFBTTtnQkFDUixLQUFLLGNBQWMsQ0FBQyw4QkFBOEI7b0JBQ2hELElBQUksQ0FBQyxvQkFBb0IsR0FBSSxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM1RCxNQUFNO2dCQUNSLEtBQUssY0FBYyxDQUFDLGdDQUFnQztvQkFDbEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdELE1BQU07Z0JBQ1IsS0FBSyxjQUFjLENBQUMsaUNBQWlDLENBQUM7Z0JBQ3RELEtBQUssY0FBYyxDQUFDLGtDQUFrQyxDQUFDO2dCQUN2RCxLQUFLLGNBQWMsQ0FBQyw4QkFBOEIsQ0FBQztnQkFDbkQsS0FBSyxjQUFjLENBQUMsb0NBQW9DLENBQUM7Z0JBQ3pELEtBQUssY0FBYyxDQUFDLHlDQUF5QyxDQUFDO2dCQUM5RCxLQUFLLGNBQWMsQ0FBQyxzQ0FBc0MsQ0FBQztnQkFDM0QsS0FBSyxjQUFjLENBQUMsa0NBQWtDO29CQUNwRCxNQUFNO2dCQUNSO29CQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsZ0RBQWdELEdBQUcsU0FBUyxDQUFDLENBQUM7b0JBQ3pHLE1BQU07YUFDVDtTQUNGO1FBQ0QsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBVzVDLENBQUM7SUFPRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQWUsRUFBRSxNQUFpQjtRQUNsRCxJQUFJLE9BQU8sR0FBVyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFMUMsSUFBSSxVQUFVLEdBQVcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ25HLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBR3BELElBQUksZ0JBQWdCLEdBQVcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFekUsSUFBSSxZQUFZLEdBQWlCLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdEgsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV0RSxJQUFJLGFBQWEsR0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO2dCQUk3QixNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLDhCQUE4QixFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDdEc7Z0JBQ0gsSUFBSSxPQUFPLEdBQVcsTUFBTSx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyRixJQUFJO29CQUNGLFFBQVEsT0FBTyxFQUFFO3dCQUNmLEtBQUssY0FBYyxDQUFDLGlCQUFpQjs0QkFDbkMsTUFBTTt3QkFDUixLQUFLLGNBQWMsQ0FBQyxvQkFBb0I7NEJBQ3RDLElBQUksY0FBYyxHQUFjLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUN2RCxPQUFPLFlBQVksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRTs2QkFFOUY7NEJBQ0QsTUFBTTtxQkFDVDtpQkFDRjtnQkFDRCxPQUFPLEVBQUUsRUFBRTtvQkFDVCxRQUFRLE9BQU8sRUFBRTt3QkFDZixLQUFLLGNBQWMsQ0FBQyxpQkFBaUI7NEJBQ25DLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzs0QkFDN0ksTUFBTTt3QkFDUixLQUFLLGNBQWMsQ0FBQyxvQkFBb0I7NEJBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztxQkFDaEo7aUJBQ0Y7YUFFRjtZQUNELFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDaEUsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDO2dCQUNuQixNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQU9PLFNBQVMsQ0FBQyxPQUFlO1FBQy9CLElBQUksa0JBQWtCLEdBQTJDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRHLElBQUksa0JBQWtCLEtBQUssSUFBSTtZQUM3QixNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDM0YsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBT0QsV0FBVyxDQUFDLE9BQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0lBTUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFNRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUtELG1CQUFtQixDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBS0QscUJBQXFCLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFNRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFPRCxXQUFXLENBQUMsT0FBZTtRQUN6QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQzFDLENBQUM7SUFNRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFNRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFPRCxVQUFVLENBQUMsT0FBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3pDLENBQUM7SUFPRCxzQkFBc0IsQ0FBQyxPQUFlO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFPRCx1QkFBdUIsQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQzNELENBQUM7SUFNRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQU1ELHFCQUFxQixDQUFDLE9BQWU7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztJQUNyQyxDQUFDO0lBT0QsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBS0QsV0FBVztRQUNULElBQUksUUFBa0IsQ0FBQztRQUN2QixJQUFJO1lBQ0YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxTQUFTLEVBQUU7WUFDaEIsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNqQjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFRRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFPRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFLRCwwQkFBMEI7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDakYsQ0FBQztJQU1ELGlDQUFpQztRQUMvQixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0lBTUQsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQ3hDLENBQUM7SUFNRCwrQkFBK0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUM7SUFDNUMsQ0FBQztJQUtELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUNwQyxDQUFDO0lBTUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUtELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQU9ELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQU1ELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBSUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFJRCxZQUFZLENBQUMsQ0FBUztRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBS0QsNkJBQTZCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzFDLENBQUM7SUFLRCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FBQztJQUVELDRCQUE0QjtRQUMxQixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQztJQUN6QyxDQUFDO0lBTUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBTUQseUJBQXlCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDO0lBQ3RDLENBQUM7SUFFRCx5QkFBeUIsQ0FBRSxPQUFnQjtRQUN4QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDO0lBQzFDLENBQUM7SUFNRCw0Q0FBNEM7UUFDMUMsT0FBTyxJQUFJLENBQUMsMENBQTBDLENBQUM7SUFDekQsQ0FBQztJQUlELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQVFELFVBQVUsQ0FBQyxPQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekMsQ0FBQztJQU9ELCtCQUErQjtRQUM3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFNRCxRQUFRLENBQUMsR0FBVztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNwQixDQUFDO0lBT0QsV0FBVyxDQUFDLE9BQWUsRUFBRSxHQUFXO1FBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUN6QyxDQUFDO0lBT0QsVUFBVSxDQUFDLE9BQWUsRUFBRSxHQUFXO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0lBT0QsV0FBVyxDQUFDLE9BQWUsRUFBRSxHQUFXO1FBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztJQUN6QyxDQUFDO0lBT0QseUJBQXlCLENBQUMsT0FBZSxFQUFFLEdBQVk7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7SUFDbEQsQ0FBQztJQU9ELDBCQUEwQixDQUFDLE9BQWUsRUFBRSxHQUFZO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0lBQ25ELENBQUM7SUFNRCwyQkFBMkIsQ0FBQyxHQUFXO1FBQ3JDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdkMsQ0FBQztJQU9ELCtCQUErQixDQUFDLEdBQVc7UUFDekMsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEdBQUcsQ0FBQztJQUMzQyxDQUFDO0lBTUQsdUJBQXVCLENBQUMsR0FBVztRQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDO0lBQ25DLENBQUM7SUFNRCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBTUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFNRCxzQkFBc0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztJQUVELHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDOztBQTN0Qk0sb0JBQVEsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQWl1Qm5ELE1BQU0sT0FBTyxrQkFBa0I7SUFTN0IsSUFBSSxpQkFBaUIsQ0FBQyxLQUFjO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksa0JBQWtCLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFPRDtRQXJCUSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFDckMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBRTVDLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFDcEIsYUFBUSxHQUFXLElBQUksQ0FBQztRQUN4QixZQUFPLEdBQVcsQ0FBQyxDQUFDO1FBQ3BCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFVckIsWUFBTyxHQUFXLElBQUksQ0FBQztRQU1yQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBS0Qsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFLRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXNwbGF5Q29udmVydG9yLCBJRW52aXJvbm1lbnR9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuaW1wb3J0IHtEZWJ1ZywgRW5jb2RpbmcsIEhhc2h0YWJsZSwgTGlzdCwgTlN0cmluZ30gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1xyXG4gIENvbnN0YW50cyxcclxuICBMb2dnZXIsXHJcbiAgT1NFbnZpcm9ubWVudCxcclxuICBVdGlsRGF0ZUpwbixcclxuICBVdGlsU3RyQnl0ZU1vZGUsXHJcbiAgWE1MQ29uc3RhbnRzLFxyXG4gIFhtbFBhcnNlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge0NvbW1hbmRzUHJvY2Vzc29yTWFuYWdlcn0gZnJvbSAnLi4vQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyJztcclxuaW1wb3J0IHtDb25zdEludGVyZmFjZX0gZnJvbSAnLi4vQ29uc3RJbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NlcnZlckNvbmZpZ30gZnJvbSAnLi4vU2VydmVyQ29uZmlnJztcclxuaW1wb3J0IHtBY2Nlc3NIZWxwZXJ9IGZyb20gJy4uL0FjY2Vzc0hlbHBlcic7XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFRoaXMgY2xhc3MgaG9sZHMgc29tZSBvZiB0aGUgTWFnaWMgZW52aXJvbm1lbnQgcGFyYW1ldGVycyB3aGljaCB0aGUgY2xpZW50IG5lZWRzXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudCBpbXBsZW1lbnRzIElFbnZpcm9ubWVudCB7XHJcbiAgcHJpdmF0ZSBfZW52aXJvbm1lbnRzOiBIYXNodGFibGU8bnVtYmVyLCBFbnZpcm9ubWVudERldGFpbHM+ID0gbmV3IEhhc2h0YWJsZTxudW1iZXIsIEVudmlyb25tZW50RGV0YWlscz4oKTtcclxuICBwcml2YXRlIF9jb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfY2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NvbnRleHRJbmFjdGl2aXR5V2FybmluZ1RpbWU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfdG9vbGl0aXBUaW1lb3V0OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NvbnRleHRVbmxvYWRUaW1lb3V0OiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2NhblJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfY29kZVBhZ2U6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfZGF0ZVNlcGFyYXRvcjogc3RyaW5nID0gJ1xcMCc7IC8vIGRhdGUgc2VwYXJhdG9yXHJcbiAgcHJpdmF0ZSBfZGVjaW1hbFNlcGFyYXRvcjogc3RyaW5nID0gJ1xcMCc7IC8vIGRlY2ltYWwgc2VwYXJhdG9yXHJcbiAgcHJpdmF0ZSBfdGhvdXNhbmRzU2VwYXJhdG9yOiBzdHJpbmcgPSAnXFwwJzsgLy8gdGhvdXNhbmRzIHNlcGFyYXRvclxyXG4gIHByaXZhdGUgX3RpbWVTZXBhcmF0b3I6IHN0cmluZyA9ICdcXDAnOyAvLyB0aW1lIHNlcGFyYXRvclxyXG5cclxuICBwcml2YXRlIF9ndWlkOiBzdHJpbmcgPSBudWxsOyAvLyBndWlkIG9mIHRoZSBhcHBsaWNhdGlvblxyXG4gIHByaXZhdGUgX2ltZUF1dG9PZmY6IGJvb2xlYW4gPSBmYWxzZTsgLy8gSlBOOiBJTUUgc3VwcG9ydFxyXG4gIHByaXZhdGUgX2xhbmd1YWdlOiBzdHJpbmcgPSAnXFwwJztcclxuICBwcml2YXRlIF9sb2NhbEFzNDAwU2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbG9jYWxFeHRyYUdlbmdvOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xvY2FsRmxhZ3M6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbG93SGlnaDogYm9vbGVhbiA9IHRydWU7IC8vIHdoYXQgaXMgdGhlIG9yZGVyIG9mIGJ5dGVzIGluIGV4cHJlc3Npb25zIChMT1dfSElHSCBvciBISUdIX0xPVylcclxuICBwcml2YXRlIF9vd25lcjogc3RyaW5nID0gbnVsbDsgLy8gb3duZXJcclxuICBwcml2YXRlIF9kZWJ1Z01vZGU6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfc2lnbmlmaWNhbnROdW1TaXplOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxBbnNpRXhwcmVzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxJbW1lZGlhdGVoYW5kbGVyRW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3BlY2lhbFNob3dTdGF0dXNCYXJQYW5lczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3NwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBwcml2YXRlIF9zcGVjaWFsQ2FuY2VsT25DcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9zeXN0ZW06IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfdGVybWluYWw6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfZm9yd2FyZFNsYXNoOiBzdHJpbmcgPSBDb25zdGFudHMuRm9yd2FyZFNsYXNoV2ViVXNhZ2U7IC8vIHJlZmVyIHRvIGEgZm9yd2FyZCBzbGFzaCBhcyBhIHJlbGF0aXZlIHdlYiB1cmwuXHJcbiAgcHJpdmF0ZSBfZHJvcFVzZXJGb3JtYXRzOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF93ZWJjbGllbnRSZWluaXRTZXNzaW9uOiBzdHJpbmcgPSBcIk5cIjtcclxuICBwcml2YXRlIF9zcGVjaWFsVmFsTmV3UG9saWN5OiBib29sZWFuID0gZmFsc2U7IC8vPz9cclxuXHJcbiAgc3RhdGljIEluc3RhbmNlOiBFbnZpcm9ubWVudCA9IG5ldyBFbnZpcm9ubWVudCgpO1xyXG5cclxuICBnZXQgTGFuZ3VhZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sYW5ndWFnZTtcclxuICB9XHJcblxyXG5cclxuICBJZ25vcmVSZXBsYWNlRGVjaW1hbFNlcGFyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgZ2V0IFNwZWNpYWxSZXN0b3JlTWF4aW1pemVkRm9ybSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pmluc3RydWN0cyBob3cgdG8gcmVmZXIgYSBmb3J3YXJkIHNsYXNoIC0gZWl0aGVyIGFzIGEgcmVsYXRpdmUgd2ViIHVybCwgb3IgYXMgYSBmaWxlIGluIHRoZSBmaWxlIHN5c3RlbS4uPC9zdW1tYXJ5PlxyXG4gIHNldCBGb3J3YXJkU2xhc2hVc2FnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9mb3J3YXJkU2xhc2ggPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBGb3J3YXJkU2xhc2hVc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZvcndhcmRTbGFzaDtcclxuICB9XHJcblxyXG4gIGZpbGxEYXRhKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZDtcclxuICBmaWxsRGF0YSh0b2tlbnNWZWN0b3I6IExpc3Q8c3RyaW5nPik6IHZvaWQ7XHJcbiAgZmlsbERhdGEodG9rZW5zVmVjdG9yT3JQYXJzZXI/OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChhcmd1bWVudHNbMF0gaW5zdGFuY2VvZiBYbWxQYXJzZXIpIHtcclxuICAgICAgdGhpcy5maWxsRGF0YV8wKHRva2Vuc1ZlY3Rvck9yUGFyc2VyKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maWxsRGF0YV8xKHRva2Vuc1ZlY3Rvck9yUGFyc2VyKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBOZWVkIHBhcnQgaW5wdXQgU3RyaW5nIHRvIHJlbGV2YW50IGZvciB0aGUgY2xhc3MgZGF0YS4gZW5kIDxlbnYgLi4uPiB0YWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHB1YmxpYyBmaWxsRGF0YV8wKHBhcnNlcjogWG1sUGFyc2VyKTogdm9pZCB7XHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgcGFyc2VyLmdldFhNTGRhdGEoKS5sZW5ndGgpIHtcclxuICAgICAgLy8gbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWc6IFN0cmluZyA9IHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCk7XHJcbiAgICAgIHBhcnNlci5hZGQyQ3VyckluZGV4KHRhZy5pbmRleE9mKENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlYpICsgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVi5sZW5ndGgpO1xyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIHRoaXMuZmlsbERhdGEodG9rZW5zVmVjdG9yKTtcclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19URVJNLmxlbmd0aCk7XHJcbiAgICB9IGVsc2UgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKFwiaW4gRW52aXJvbm1lbnQuRmlsbERhdGEoKSBvdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBNYWtlIGluaXRpYWxpemF0aW9uIG9mIHByaXZhdGUgZWxlbWVudHMgYnkgZm91bmQgdG9rZW5zXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRva2Vuc1ZlY3RvclwiPmZvdW5kIHRva2Vucywgd2hpY2ggY29uc2lzdCBhdHRyaWJ1dGUvdmFsdWUgb2YgZXZlcnkgZm91bmQgZWxlbWVudDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBmaWxsRGF0YV8xKHRva2Vuc1ZlY3RvcjogTGlzdDxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICBsZXQgYXR0cmlidXRlOiBzdHJpbmc7XHJcbiAgICBsZXQgdmFsdWVTdHI6IHN0cmluZztcclxuICAgIGxldCBoYXNoS2V5OiBudW1iZXI7XHJcbiAgICBsZXQgZW52OiBFbnZpcm9ubWVudERldGFpbHM7XHJcbiAgICBlbnYgPSBuZXcgRW52aXJvbm1lbnREZXRhaWxzKCk7XHJcblxyXG4gICAgZm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHRva2Vuc1ZlY3Rvci5sZW5ndGg7IGogKz0gMikge1xyXG4gICAgICBhdHRyaWJ1dGUgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKGopKTtcclxuICAgICAgdmFsdWVTdHIgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKGogKyAxKSk7XHJcbiAgICAgIHZhbHVlU3RyID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVEhPVVNBTkRTOlxyXG4gICAgICAgICAgdGhpcy5fdGhvdXNhbmRzU2VwYXJhdG9yID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfREVDSU1BTF9TRVBBUkFUT1I6XHJcbiAgICAgICAgICB0aGlzLl9kZWNpbWFsU2VwYXJhdG9yID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfV0VCQ0xJRU5UX1JFSU5JVF9TRVNTSU9OOlxyXG4gICAgICAgICAgdGhpcy5fd2ViY2xpZW50UmVpbml0U2Vzc2lvbiA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RBVEU6XHJcbiAgICAgICAgICB0aGlzLl9kYXRlU2VwYXJhdG9yID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLnNldERhdGVDaGFyKHRoaXMuX2RhdGVTZXBhcmF0b3IuY2hhckNvZGVBdCgwKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVElNRTpcclxuICAgICAgICAgIHRoaXMuX3RpbWVTZXBhcmF0b3IgPSB2YWx1ZVN0clswXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9PV05FUjpcclxuICAgICAgICAgIHRoaXMuX293bmVyID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU0lHTklGSUNBTlRfTlVNX1NJWkU6XHJcbiAgICAgICAgICB0aGlzLl9zaWduaWZpY2FudE51bVNpemUgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUJVR19NT0RFOlxyXG4gICAgICAgICAgdGhpcy5fZGVidWdNb2RlID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUE9JTlRfVFJBTlNMQVRJT046XHJcbiAgICAgICAgICB0aGlzLl9jYW5SZXBsYWNlRGVjaW1hbFNlcGFyYXRvciA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0VYSVRDVFJMOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPV0hJR0g6XHJcbiAgICAgICAgICB0aGlzLl9sb3dIaWdoID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0FDQ0VTU19URVNUOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfVEVYVF9TSVpFX0ZBQ1RPUklORzpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0ZMQVRfRURJVF9PTl9DTEFTU0lDX1RIRU1FOlxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9FTkNPRElORzpcclxuICAgICAgICAgIGlmICh2YWx1ZVN0ciAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29kZVBhZ2UgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgICAgVXRpbFN0ckJ5dGVNb2RlLkVuY29kaW5nID0gdGhpcy5HZXRFbmNvZGluZygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NZU1RFTTpcclxuICAgICAgICAgIHRoaXMuX3N5c3RlbSA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09NUE9ORU5UOlxyXG4gICAgICAgICAgZW52LkNvbXBJZHggPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9EQVRFTU9ERTpcclxuICAgICAgICAgIGVudi5EYXRlTW9kZSA9IHZhbHVlU3RyWzBdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NFTlRVUlk6XHJcbiAgICAgICAgICBlbnYuQ2VudHVyeSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lETEVUSU1FOlxyXG4gICAgICAgICAgZW52LklkbGVUaW1lID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAvLyBoYW5kbGUgdGhlIGRlZmF1bHQgaWRsZSB0aW1lIHZhbHVlXHJcbiAgICAgICAgICBpZiAoZW52LklkbGVUaW1lID09PSAwKVxyXG4gICAgICAgICAgICBlbnYuSWRsZVRpbWUgPSAxO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1VQRF9JTl9RVUVSWTpcclxuICAgICAgICAgIGVudi5VcGRhdGVJblF1ZXJ5TW9kZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DUkVfSU5fTU9ESUZZOlxyXG4gICAgICAgICAgZW52LkNyZWF0ZUluTW9kaWZ5TW9kZSA9IFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9ERUZBVUxUX0NPTE9SOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFRkFVTFRfRk9DVVNfQ09MT1I6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl9jb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DTElFTlRfQ09OVEVYVF9JTkFDVElWSVRZX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl9jbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9DT05URVhUX0lOQUNUSVZJVFlfV0FSTklOR19USU1FOlxyXG4gICAgICAgICAgdGhpcy5fY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RPT0xUSVBfVElNRU9VVDpcclxuICAgICAgICAgIHRoaXMuX3Rvb2xpdGlwVGltZW91dCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRFWFRfVU5MT0FEX1RJTUVPVVQ6XHJcbiAgICAgICAgICB0aGlzLl9jb250ZXh0VW5sb2FkVGltZW91dCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0lNRV9BVVRPX09GRjpcclxuICAgICAgICAgIHRoaXMuX2ltZUF1dG9PZmYgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfTE9DQUxfQVM0MDBTRVQ6XHJcbiAgICAgICAgICB0aGlzLl9sb2NhbEFzNDAwU2V0ID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0xPQ0FMX0VYVFJBX0dFTkdPOlxyXG4gICAgICAgICAgdGhpcy5fbG9jYWxFeHRyYUdlbmdvID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBVdGlsRGF0ZUpwbi5nZXRJbnN0YW5jZSgpLmFkZEV4dHJhR2VuZ28odGhpcy5fbG9jYWxFeHRyYUdlbmdvKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MT0NBTF9GTEFHUzpcclxuICAgICAgICAgIHRoaXMuX2xvY2FsRmxhZ3MgPSB2YWx1ZVN0cjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0lNTUVESUFURV9IQU5ETEVSX0VORDpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxJbW1lZGlhdGVoYW5kbGVyRW5kID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUFDSUFMX0FOU0lfRVhQOlxyXG4gICAgICAgICAgdGhpcy5fc3BlY2lhbEFuc2lFeHByZXNzaW9uID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfU0hPV19TVEFUVVNCQVJfUEFORVM6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsU2hvd1N0YXR1c0JhclBhbmVzID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfUk9VVEVfVE9fUk9PVF9QUk9HX09OX0NPTlRFWFRfUkVDUkVBVElPTjpcclxuICAgICAgICAgIHRoaXMuX3NwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uID0gWG1sUGFyc2VyLmdldEJvb2xlYW4odmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfU1BFQ0lBTF9FRElUX0xFRlRfQUxJR046XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQUNJQUxfU1dGX0NPTlRST0xfTkFNRTpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9MQU5HVUFHRTpcclxuICAgICAgICAgIHRoaXMuX2xhbmd1YWdlID0gdmFsdWVTdHJbMF07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfVVNFUklEOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19UQUdfVVNFUk5BTUU6XHJcbiAgICAgICAgICBTZXJ2ZXJDb25maWcuSW5zdGFuY2Uuc2V0VXNlcm5hbWUodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1RFUk1JTkFMOlxyXG4gICAgICAgICAgdGhpcy5fdGVybWluYWwgPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9VU0VSSU5GTzpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9HVUlEOlxyXG4gICAgICAgICAgdGhpcy5fZ3VpZCA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0NPTlRST0xTX1BFUlNJU1RFTkNZX1BBVEg6XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfUFJPSkRJUjpcclxuICAgICAgICAgIGVudi5Qcm9qRGlyID0gdmFsdWVTdHI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfRFJPUF9VU0VSRk9STUFUUzpcclxuICAgICAgICAgIHRoaXMuX2Ryb3BVc2VyRm9ybWF0cyA9IHZhbHVlU3RyO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfVkFMX05FV19QT0xJQ1k6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsVmFsTmV3UG9saWN5ID0gIFhtbFBhcnNlci5nZXRCb29sZWFuKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX0NBTkNFTF9PTl9DUkVBVEU6XHJcbiAgICAgICAgICB0aGlzLl9zcGVjaWFsQ2FuY2VsT25DcmVhdGUgPSBYbWxQYXJzZXIuZ2V0Qm9vbGVhbih2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MRUdBQ1lfVFJJTV9SQU5HRTpcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9MRUdBQ1lfRU1QVFlfUkFOR0U6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX0RFRkFVTFRfRElTQUJMRURfQ09MT1I6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfQU5TSV9CTE9CX0NIRUNLX05VTEw6XHJcbiAgICAgICAgY2FzZSBDb25zdEludGVyZmFjZS5NR19BVFRSX1NQRUNJQUxfVEFCTEVfUkVEVUNFX1RJVExFX0hFSUdIVDpcclxuICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX0FUVFJfU1BFQ0lBTF9ET1RORVRfQUxMT1dfWkVST19EQVRFOlxyXG4gICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfQVRUUl9TUEVDSUFMX1JFVVNFX1RBQkxFX0VESVRPUjpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFeGNlcHRpb25Ub0xvZ1dpdGhNc2coXCJpbiBFbnZpcm9ubWVudC5maWxsRGF0YSgpOiB1bmtub3duIGF0dHJpYnV0ZTogXCIgKyBhdHRyaWJ1dGUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGhhc2hLZXkgPSBlbnYuQ29tcElkeDtcclxuICAgIHRoaXMuX2Vudmlyb25tZW50cy5zZXRfSXRlbShoYXNoS2V5LCBlbnYpO1xyXG5cclxuXHJcbiAgICAvLyBUT0RPOiBzb21laG93IGFkZEFzeW5jIHRocm93cyBzb21lIGV4Y2VwdGlvbiBmb3IgU0VUX0VOVl9UT09MVElQX1RJTUVPVVQuIEV2YWx1YXRlIGFuZCBmaXggaXQsIGlmIHBvc3NpYmxlXHJcbiAgICAvLyBpZiAodGhpcy5fdG9vbGl0aXBUaW1lb3V0ID4gMClcclxuICAgIC8vICAgQ29tbWFuZHMuYWRkQXN5bmMoQ29tbWFuZFR5cGUuU0VUX0VOVl9UT09MVElQX1RJTUVPVVQsIDxPYmplY3Q+bnVsbCwgPE9iamVjdD50aGlzLl90b29saXRpcFRpbWVvdXQpO1xyXG5cclxuXHJcblxyXG4gICAgLy8gaWYgKHRoaXMuX2xhbmd1YWdlICE9PSAnICcpXHJcbiAgICAvLyAgIENvbW1hbmRzLmFkZEFzeW5jKENvbW1hbmRUeXBlLlNFVF9FTlZfTEFNR1VBR0UsIG51bGwsIDAsIHRoaXMuX2xhbmd1YWdlLmNoYXJDb2RlQXQoMCkpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGZpbGwgdGhlIGZpbGUgbWFwcGluZyB3aGVuIHBhc3NlZCB0aHJvdWdoIHRoZSBjYWNoZTogcGxhY2VkIGludG8gdGhlIGNhY2hlIGJ5IHRoZSBydW50aW1lLWVuZ2luZSwgcGFzc2VkXHJcbiAgLy8vICAgYXMgJzxmaWxldXJsIHZhbCA9IFwiLy4uLlwiJ1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJUQUdfVVJMXCI+PC9wYXJhbT5cclxuICBhc3luYyBmaWxsRnJvbVVybCh0YWdOYW1lOiBzdHJpbmcsIHBhcnNlcjogWG1sUGFyc2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgWE1MZGF0YTogc3RyaW5nID0gcGFyc2VyLmdldFhNTGRhdGEoKTtcclxuXHJcbiAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0gcGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5UQUdfVEVSTSwgcGFyc2VyLmdldEN1cnJJbmRleCgpKTtcclxuICAgIGlmIChlbmRDb250ZXh0ICE9PSAtMSAmJiBlbmRDb250ZXh0IDwgWE1MZGF0YS5sZW5ndGgpIHtcclxuXHJcbiAgICAgIC8vIGZpbmQgbGFzdCBwb3NpdGlvbiBvZiBpdHMgdGFnXHJcbiAgICAgIGxldCB0YWdBbmRBdHRyaWJ1dGVzOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWdBbmRBdHRyaWJ1dGVzLmluZGV4T2YodGFnTmFtZSkgKyB0YWdOYW1lLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIERlYnVnLkFzc2VydCh0b2tlbnNWZWN0b3IuZ2V0X0l0ZW0oMCkgPT09IFhNTENvbnN0YW50cy5NR19BVFRSX1ZBTFVFKTtcclxuXHJcbiAgICAgIGxldCBjYWNoZWRGaWxlVXJsOiBzdHJpbmcgPSAodG9rZW5zVmVjdG9yLmdldF9JdGVtKDEpKTtcclxuICAgICAgaWYgKGNhY2hlZEZpbGVVcmwudHJpbSgpID09PSBcIlwiKVxyXG4gICAgICAvLyBtaWdodCBoYXBwZW4gaW4gY2FzZSB0aGUgeHBhIHNlcnZlciBmYWlsZWQgdG8gd3JpdGUgdG8gaXRzIGNhY2hlIGZvbGRlclxyXG4gICAgICAvLyAoZS5nLiB0aGUgY2FjaGUgZm9sZGVyIGlzIGludmFsaWQsIGR1ZSB0byBhIGNvbmZpZ3VyYXRpb24gbWlzdGFrZSxcclxuICAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGUgY3VycmVudCBlcnJvciBtZXNzYWdlIHdpbGwgYmUgbWF0Y2hlZCB3aXRoIGFuIGVycm9yIGluIHRoZSB4cGEgc2VydmVyJ3MgbG9nIGZpbGUgKEdlbmVyYWxFcnJvckxvZz0pKS5cclxuICAgICAgICBMb2dnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKE5TdHJpbmcuRm9ybWF0KFwiRW1wdHkgY2FjaGVkIGZpbGUgVVJMOiAnezB9J1wiLCB0YWdBbmRBdHRyaWJ1dGVzLnRyaW0oKSkpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgQ29udGVudDogc3RyaW5nID0gYXdhaXQgQ29tbWFuZHNQcm9jZXNzb3JNYW5hZ2VyLkdldENvbnRlbnQoY2FjaGVkRmlsZVVybCwgdHJ1ZSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVBfVVJMOlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19FTlZfUEFSQU1fVVJMOlxyXG4gICAgICAgICAgICAgIGxldCBpbm5lclhtbFBhcnNlcjogWG1sUGFyc2VyID0gbmV3IFhtbFBhcnNlcihDb250ZW50KTtcclxuICAgICAgICAgICAgICB3aGlsZSAoQWNjZXNzSGVscGVyLmVudlBhcmFtc1RhYmxlLm1pcnJvckZyb21YTUwoaW5uZXJYbWxQYXJzZXIuZ2V0TmV4dFRhZygpLCBpbm5lclhtbFBhcnNlcikpIHtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXgpIHtcclxuICAgICAgICAgIHN3aXRjaCAodGFnTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIENvbnN0SW50ZXJmYWNlLk1HX1RBR19LQkRNQVBfVVJMOlxyXG4gICAgICAgICAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhOU3RyaW5nLkZvcm1hdChcIktleWJvYXJkIE1hcHBpbmc6ICd7MH0nezF9ezJ9XCIsIGNhY2hlZEZpbGVVcmwsIE9TRW52aXJvbm1lbnQuRW9sU2VxLCBleC5NZXNzYWdlKSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgQ29uc3RJbnRlcmZhY2UuTUdfVEFHX0VOVl9QQVJBTV9VUkw6XHJcbiAgICAgICAgICAgICAgTG9nZ2VyLkluc3RhbmNlLldyaXRlRXhjZXB0aW9uVG9Mb2dXaXRoTXNnKE5TdHJpbmcuRm9ybWF0KFwiRW52IFBhcmFtcyBUYWJsZTogJ3swfSd7MX17Mn1cIiwgY2FjaGVkRmlsZVVybCwgT1NFbnZpcm9ubWVudC5Fb2xTZXEsIGV4Lk1lc3NhZ2UpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVuZENvbnRleHQgPSBYTUxkYXRhLmluZGV4T2YoWE1MQ29uc3RhbnRzLlRBR19PUEVOLCBlbmRDb250ZXh0KTtcclxuICAgICAgaWYgKGVuZENvbnRleHQgIT09IC0xKVxyXG4gICAgICAgIHBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IEVudmlyb25tZW50RGV0YWlscyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBJZHhcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBFbnZpcm9ubWVudERldGFpbHM8L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRFbnZEZXQoY29tcElkeDogbnVtYmVyKTogRW52aXJvbm1lbnREZXRhaWxzIHtcclxuICAgIGxldCBlbnZpcm9ubWVudERldGFpbHM6IEVudmlyb25tZW50RGV0YWlscyA9IDxFbnZpcm9ubWVudERldGFpbHM+dGhpcy5fZW52aXJvbm1lbnRzLmdldF9JdGVtKGNvbXBJZHgpO1xyXG5cclxuICAgIGlmIChlbnZpcm9ubWVudERldGFpbHMgPT09IG51bGwpXHJcbiAgICAgIExvZ2dlci5JbnN0YW5jZS5Xcml0ZUV4Y2VwdGlvblRvTG9nV2l0aE1zZyhcImluIEVudmlyb25tZW50LmdldEVudkRldCgpIHRoZXJlIGlzIG5vIGVudlwiKTtcclxuICAgIHJldHVybiBlbnZpcm9ubWVudERldGFpbHM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBkYXRlIG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IERhdGVNb2RlPC9yZXR1cm5zPlxyXG4gIEdldERhdGVNb2RlKGNvbXBJZHg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuRGF0ZU1vZGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBUaG91c2FuZHNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gVGhvdXNhbmRzPC9yZXR1cm5zPlxyXG4gIEdldFRob3VzYW5kcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rob3VzYW5kc1NlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIERlY2ltYWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRGVjaW1hbDwvcmV0dXJucz5cclxuICBHZXREZWNpbWFsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVjaW1hbFNlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBEZWNpbWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXREZWNpbWFsU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXRzIHRoZSBEZWNpbWFsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBzZXRUaG91c2FuZHNTZXBhcmF0b3IodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGhvdXNhbmRzU2VwYXJhdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzZXREYXRlU2VwYXJhdG9yKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RhdGVTZXBhcmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldFRpbWVTZXBhcmF0b3IodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fdGltZVNlcGFyYXRvciA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgRGF0ZSBTZXBhcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gRGF0ZSBTZXBhcmF0b3I8L3JldHVybnM+XHJcbiAgR2V0RGF0ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGVTZXBhcmF0b3I7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSBJZGxlVGltZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+b2YgdGhlIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gSWRsZVRpbWU8L3JldHVybnM+XHJcbiAgZ2V0SWRsZVRpbWUoY29tcElkeDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVudkRldChjb21wSWR4KS5JZGxlVGltZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIG93bmVyXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IG93bmVyPC9yZXR1cm5zPlxyXG4gIGdldE93bmVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fb3duZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRoZSB0aW1lIHNlcGFyYXRvclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aW1lIHNlcGVyYXRvcjwvcmV0dXJucz5cclxuICBHZXRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGltZVNlcGFyYXRvcjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIGNlbnR1cnlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPm9mIHRoZSB0YXNrPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+Y2VudHVyeTwvcmV0dXJucz5cclxuICBHZXRDZW50dXJ5KGNvbXBJZHg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuQ2VudHVyeTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiB1cGRhdGUgaXMgYWxsb3dlZCBpbiBxdWVyeSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImNvbXBJZHhcIj5vZiB0aGUgdGFzazwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBVcGRhdGVJblF1ZXJ5TW9kZTwvcmV0dXJucz5cclxuICBhbGxvd1VwZGF0ZUluUXVlcnlNb2RlKGNvbXBJZHg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLmFsbG93VXBkYXRlSW5RdWVyeU1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiBjcmVhdGUgaXMgYWxsb3dlZCBpbiBtb2RpZnkgbW9kZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+b2YgdGhlIHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGU8L3JldHVybnM+XHJcbiAgYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoY29tcElkeDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuYWxsb3dDcmVhdGVJbk1vZGlmeU1vZGUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHNpZ25pZmljYW50IG51bSBzaXplXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzaWduaWZpY2FudCBudW0gc2l6ZTwvcmV0dXJucz5cclxuICBHZXRTaWduaWZpY2FudE51bVNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zaWduaWZpY2FudE51bVNpemU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBzaWduaWZpY2FudCBudW0gc2l6ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzZXRTaWduaWZpY2FudE51bVNpemUobmV3U2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zaWduaWZpY2FudE51bVNpemUgPSBuZXdTaXplO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgY29kZSBwYWdlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBjb2RlIHBhZ2VcclxuICAvLy8gPC9yZXR1cm5zPlxyXG4gIGdldENvZGVQYWdlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29kZVBhZ2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgZ2V0IGNoYXJzZXQgb2YgdGhlIGN1cnJlbnQgZG9jdW1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldEVuY29kaW5nKCk6IEVuY29kaW5nIHtcclxuICAgIGxldCBlbmNvZGluZzogRW5jb2Rpbmc7XHJcbiAgICB0cnkge1xyXG4gICAgICBlbmNvZGluZyA9IEVuY29kaW5nLkdldEVuY29kaW5nKHRoaXMuX2NvZGVQYWdlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleGNlcHRpb24pIHtcclxuICAgICAgZW5jb2RpbmcgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVuY29kaW5nO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHN5c3RlbSBuYW1lXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBzeXN0ZW0gbmFtZVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgZ2V0U3lzdGVtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3lzdGVtO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGRlYnVnIGxldmVsXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IDAgbm8gZGVidWcgMSBkZWJ1ZyAyIGRlYnVnIGFuZCBkYXRhIHRyYW5zZmVycyBpbiBoZXggKCBub3QgaW4gYmFzZTY0KVxyXG4gIC8vLyA8L3JldHVybnM+XHJcbiAgR2V0RGVidWdMZXZlbCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlYnVnTW9kZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIGlmICcuJyBzaG91bGQgYmUgY2hhbmdlZCB0byB0aGUgZGVjaW1hbCBzZXBhcmF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENhblJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLklnbm9yZVJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yICYmIHRoaXMuX2NhblJlcGxhY2VEZWNpbWFsU2VwYXJhdG9yO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgQ2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBDbGllbnRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ8L3JldHVybnM+XHJcbiAgZ2V0Q2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgQ29udGV4dEluYWN0aXZpdHlUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSBDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQ8L3JldHVybnM+XHJcbiAgZ2V0Q29udGV4dEluYWN0aXZpdHlUaW1lb3V0KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dEluYWN0aXZpdHlUaW1lb3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgQ29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZW91dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiB0aGUgQ29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZW91dDwvcmV0dXJucz5cclxuICBnZXRDb250ZXh0SW5hY3Rpdml0eVdhcm5pbmdUaW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIENvbnRleHRVbmxvYWRUaW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRDb250ZXh0VW5sb2FkVGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRleHRVbmxvYWRUaW1lb3V0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiB0aGUgdG9vbHRpcCB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRoZSB0b29sdGlwVGltZW91dDwvcmV0dXJucz5cclxuICBHZXRUb29sdGlwVGltZW91dCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rvb2xpdGlwVGltZW91dDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIFRSVUUgaWYgdGhlIGJ5dGVzIHNlcXVlbmNlIGZvciBudW1iZXJzIGluIGV4cHJlc3Npb25zIGlzIGZyb20gbG93IHRvIGhpZ2hcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGdldExvd0hpZ2goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbG93SGlnaDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIHRydWUgaWYgSU1FQXV0b09mZiA9IFlcclxuICAvLy8gICAoSlBOOiBJTUUgc3VwcG9ydClcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEdldEltZUF1dG9PZmYoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faW1lQXV0b09mZjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdHJ1ZSBpZiBBczQwMFNldCBmbGFnID0gWVxyXG4gIC8vLyAgIChEQkNTIFN1cHBvcnQpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBHZXRMb2NhbEFzNDAwU2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsQXM0MDBTZXQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+RnVuY3Rpb24gcmV0dXJuaW5nIGFkZGl0aW9uYWwgR2VuZ28gdmFsdWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRMb2NhbEV4dHJhR2VuZ28oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2NhbEV4dHJhR2VuZ287XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+RnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciBmbGFnIGYgaXMgaW4gdGhlIGxvY2FsIGZsYWdzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0TG9jYWxGbGFnKGY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsRmxhZ3MgIT09IG51bGwgJiYgdGhpcy5fbG9jYWxGbGFncy5pbmRleE9mKGYpID49IDA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgU3BlY2lhbEltbWVkaWF0ZUhhbmRsZXJFbmQgZmxhZyA9IFk8L3JldHVybnM+XHJcbiAgZ2V0U3BlY2lhbEltbWVkaWF0ZUhhbmRsZXJFbmQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3BlY2lhbEltbWVkaWF0ZWhhbmRsZXJFbmQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgU3BlY2lhbEFuc2lFeHByZXNzaW9uIGZsYWcgPSBZPC9yZXR1cm5zPlxyXG4gIGdldFNwZWNpYWxBbnNpRXhwcmVzc2lvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsQW5zaUV4cHJlc3Npb247XHJcbiAgfVxyXG5cclxuICBnZXRTcGVjaWFsU2hvd1N0YXR1c0JhclBhbmVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxTaG93U3RhdHVzQmFyUGFuZXM7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJucyB0aGUgdGVybWluYWwgbnVtYmVyLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRlcm1pbmFsIG51bWJlci48L3JldHVybnM+XHJcbiAgZ2V0VGVybWluYWwoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtaW5hbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBGdW5jdGlvbiByZXR1cm5zIHdlYiBjbGllbnQgcmUtaW5pdCBzZXNzaW9uLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPnRlcm1pbmFsIG51bWJlci48L3JldHVybnM+XHJcbiAgZ2V0V2ViQ2xpZW50UmVpbml0U2Vzc2lvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dlYmNsaWVudFJlaW5pdFNlc3Npb247XHJcbiAgfVxyXG5cclxuICBzZXRXZWJDbGllbnRSZWluaXRTZXNzaW9uKCBzZXNzaW9uIDogc3RyaW5nKSB7XHJcbiAgICAgdGhpcy5fd2ViY2xpZW50UmVpbml0U2Vzc2lvbiA9IHNlc3Npb247XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgRnVuY3Rpb24gcmV0dXJucyB3ZWIgY2xpZW50IHJlLWluaXQgc2Vzc2lvbi5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz50ZXJtaW5hbCBudW1iZXIuPC9yZXR1cm5zPlxyXG4gIGdldFNwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxSb3V0ZVRvUm9vdFByb2dPbkNvbnRleHRSZWNyZWF0aW9uO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PmdldHMgZ3VpIElkIG9mIHRoZSBhcHBsaWNhdGlvbjwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldEdVSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9ndWlkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gdGhlIHByb2plY3QncyBkaXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbXBJZHhcIj5jb21wb25lbnQgaW5kZXguPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldFByb2pEaXIoY29tcElkeDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVudkRldChjb21wSWR4KS5Qcm9qRGlyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyB2YWx1ZSBvZiBTcGVjaWFsTG9nSW50ZXJuYWxFeGNlcHRpb25zLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRTcGVjaWFsTG9nSW50ZXJuYWxFeGNlcHRpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBvd25lclxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldE93bmVyKHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vd25lciA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGRhdGUgbW9kZSBpbiB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldERhdGVNb2RlKGNvbXBJZHg6IG51bWJlciwgdmFsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLkRhdGVNb2RlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgY2VudHVyeSBpbiB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldENlbnR1cnkoY29tcElkeDogbnVtYmVyLCB2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuQ2VudHVyeSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBTZXQgdGhlIGlkbGUgdGltZSBpbiB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldElkbGVUaW1lKGNvbXBJZHg6IG51bWJlciwgdmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RW52RGV0KGNvbXBJZHgpLklkbGVUaW1lID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFNldCB0aGUgYWxsb3ctdXBkYXRlLWluLXF1cnktbW9kZSBmbGFnIGluIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjb21wSWR4XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0QWxsb3dVcGRhdGVJblF1ZXJ5TW9kZShjb21wSWR4OiBudW1iZXIsIHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRFbnZEZXQoY29tcElkeCkuVXBkYXRlSW5RdWVyeU1vZGUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgU2V0IHRoZSBhbGxvdy1jcmVhdGUtaW4tbW9kaWZ5LW1vZGUgZmxhZyBpbiB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY29tcElkeFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj48L3BhcmFtPlxyXG4gIHNldEFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKGNvbXBJZHg6IG51bWJlciwgdmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldEVudkRldChjb21wSWR4KS5DcmVhdGVJbk1vZGlmeU1vZGUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjb250ZXh0IHRpbWVvdXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRDb250ZXh0SW5hY3Rpdml0eVRpbWVvdXQodmFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbnRleHRJbmFjdGl2aXR5VGltZW91dCA9IHZhbDtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSBjb250ZXh0IGluYWN0aXZpdHkgd2FybmluZyB0aW1lb3V0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPjwvcGFyYW0+XHJcbiAgc2V0Q29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udGV4dEluYWN0aXZpdHlXYXJuaW5nVGltZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGNvbnRleHQgdW5sb2FkIHRpbWVvdXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRDb250ZXh0VW5sb2FkVGltZW91dCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29udGV4dFVubG9hZFRpbWVvdXQgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IHRoZSB0ZXJtaW5hbCBudW1iZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidmFsXCI+PC9wYXJhbT5cclxuICBzZXRUZXJtaW5hbCh2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fdGVybWluYWwgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICBHZXQgdGhlIFVzZXJGb3JtYXRzIGZvciBEcmFnICYgRHJvcCBPcGVyYXRpb24uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldERyb3BVc2VyRm9ybWF0cygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Ryb3BVc2VyRm9ybWF0cztcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgX3NwZWNpYWxWYWxOZXdQb2xpY3kgZmxhZyA9IFk8L3JldHVybnM+XHJcbiAgR2V0U3BlY2lhbFZhbE5ld1BvbGljeSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zcGVjaWFsVmFsTmV3UG9saWN5O1xyXG4gIH1cclxuXHJcbiAgR2V0U3BlY2lhbENhbmNlbE9uQ3JlYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NwZWNpYWxDYW5jZWxPbkNyZWF0ZTtcclxuICB9XHJcbn1cclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vICAgVGhpcyBjbGFzcyBob2xkcyBkZXRhaWxzIGZvciBzaW5nbGUgRW52aXJvbm1lbnQgKHBlciBDb21wb25lbnQpXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudERldGFpbHMge1xyXG4gIHByaXZhdGUgX2NyZWF0ZUluTW9kaWZ5TW9kZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBhbGxvdyBjcmVhdGUgaW4gbW9kaWZ5IG1vZGUgP1xyXG4gIHByaXZhdGUgX3VwZGF0ZUluUXVlcnlNb2RlOiBib29sZWFuID0gZmFsc2U7IC8vIGFsbG93IHVwZGF0ZSBpbiBxdWVyeSBtb2RlID9cclxuXHJcbiAgQ29tcElkeDogbnVtYmVyID0gMDtcclxuICBEYXRlTW9kZTogc3RyaW5nID0gJ1xcMCc7XHJcbiAgQ2VudHVyeTogbnVtYmVyID0gMDtcclxuICBJZGxlVGltZTogbnVtYmVyID0gMDtcclxuXHJcbiAgc2V0IFVwZGF0ZUluUXVlcnlNb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl91cGRhdGVJblF1ZXJ5TW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0IENyZWF0ZUluTW9kaWZ5TW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY3JlYXRlSW5Nb2RpZnlNb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBQcm9qRGlyOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29uc3RydWN0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5Db21wSWR4ID0gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm4gVFJVRSBpZiB1cGRhdGUgaXMgYWxsb3dlZCBpbiBxdWVyeSBtb2RlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBhbGxvd1VwZGF0ZUluUXVlcnlNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZUluUXVlcnlNb2RlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHVwZGF0ZSBpcyBhbGxvd2VkIGluIHF1ZXJ5IG1vZGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGFsbG93Q3JlYXRlSW5Nb2RpZnlNb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUluTW9kaWZ5TW9kZTtcclxuICB9XHJcbn1cclxuIl19
|