@magic-xpa/gui 4.800.0-dev480.94 → 4.801.0-dev000.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  2. package/{esm2015/magic-xpa-gui.js → esm2020/magic-xpa-gui.mjs} +0 -0
  3. package/esm2020/src/Commands.mjs +186 -0
  4. package/esm2020/src/Events.mjs +420 -0
  5. package/esm2020/src/EventsProcessor.mjs +67 -0
  6. package/esm2020/src/FocusManager.mjs +34 -0
  7. package/{esm2015/src/GuiConstants.js → esm2020/src/GuiConstants.mjs} +0 -0
  8. package/{esm2015/src/GuiEnums.js → esm2020/src/GuiEnums.mjs} +126 -127
  9. package/{esm2015/src/GuiEnvironment.js → esm2020/src/GuiEnvironment.mjs} +0 -0
  10. package/{esm2015/src/IFlowMonitorQueue.js → esm2020/src/IFlowMonitorQueue.mjs} +2 -1
  11. package/esm2020/src/Manager.mjs +192 -0
  12. package/{esm2015/src/UIBridge.js → esm2020/src/UIBridge.mjs} +0 -0
  13. package/{esm2015/src/env/IEnvironment.js → esm2020/src/env/IEnvironment.mjs} +2 -1
  14. package/{esm2015/src/gui/ControlBase.js → esm2020/src/gui/ControlBase.mjs} +0 -0
  15. package/{esm2015/src/gui/GuiMgControl.js → esm2020/src/gui/GuiMgControl.mjs} +0 -0
  16. package/{esm2015/src/gui/GuiMgForm.js → esm2020/src/gui/GuiMgForm.mjs} +0 -0
  17. package/{esm2015/src/gui/KeyboardItem.js → esm2020/src/gui/KeyboardItem.mjs} +0 -0
  18. package/{esm2015/src/gui/LastFocusedVal.js → esm2020/src/gui/LastFocusedVal.mjs} +0 -0
  19. package/{esm2015/src/gui/MgValue.js → esm2020/src/gui/MgValue.mjs} +0 -0
  20. package/{esm2015/src/gui/PropParentInterface.js → esm2020/src/gui/PropParentInterface.mjs} +1 -0
  21. package/{esm2015/src/gui/low/DialogHandler.js → esm2020/src/gui/low/DialogHandler.mjs} +0 -0
  22. package/{esm2015/src/gui/low/GuiCommand.js → esm2020/src/gui/low/GuiCommand.mjs} +0 -0
  23. package/{esm2015/src/gui/low/GuiCommandQueue.js → esm2020/src/gui/low/GuiCommandQueue.mjs} +0 -0
  24. package/esm2020/src/gui/low/GuiInteractive.mjs +545 -0
  25. package/esm2020/src/gui/low/Style.mjs +47 -0
  26. package/esm2020/src/management/RuntimeContextBase.mjs +52 -0
  27. package/{esm2015/src/management/data/BlobType.js → esm2020/src/management/data/BlobType.mjs} +0 -0
  28. package/esm2020/src/management/data/DcValues.mjs +214 -0
  29. package/esm2020/src/management/data/DcValuesBuilderBase.mjs +97 -0
  30. package/{esm2015/src/management/data/FieldDef.js → esm2020/src/management/data/FieldDef.mjs} +0 -0
  31. package/{esm2015/src/management/data/FieldsTable.js → esm2020/src/management/data/FieldsTable.mjs} +0 -0
  32. package/esm2020/src/management/data/GuiDataViewBase.mjs +90 -0
  33. package/esm2020/src/management/data/GuiFieldBase.mjs +82 -0
  34. package/{esm2015/src/management/data/IRecord.js → esm2020/src/management/data/IRecord.mjs} +1 -0
  35. package/{esm2015/src/management/data/IReferencedObject.js → esm2020/src/management/data/IReferencedObject.mjs} +1 -0
  36. package/{esm2015/src/management/data/NUM_TYPE.js → esm2020/src/management/data/NUM_TYPE.mjs} +0 -0
  37. package/esm2020/src/management/data/ObjectReferenceBase.mjs +48 -0
  38. package/{esm2015/src/management/data/ObjectReferencesCollection.js → esm2020/src/management/data/ObjectReferencesCollection.mjs} +0 -0
  39. package/esm2020/src/management/data/RecordUtils.mjs +361 -0
  40. package/{esm2015/src/management/data/VectorType.js → esm2020/src/management/data/VectorType.mjs} +0 -0
  41. package/{esm2015/src/management/data/VectorTypeBase.js → esm2020/src/management/data/VectorTypeBase.mjs} +0 -0
  42. package/{esm2015/src/management/events/IActionManager.js → esm2020/src/management/events/IActionManager.mjs} +1 -0
  43. package/esm2020/src/management/events/IGuiEventsManager.mjs +2 -0
  44. package/{esm2015/src/management/exp/ExpressionInterface.js → esm2020/src/management/exp/ExpressionInterface.mjs} +2 -1
  45. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +333 -0
  46. package/{esm2015/src/management/gui/ControlTable.js → esm2020/src/management/gui/ControlTable.mjs} +0 -0
  47. package/esm2020/src/management/gui/DisplayConvertor.mjs +1706 -0
  48. package/esm2020/src/management/gui/FieldValidator.mjs +1507 -0
  49. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +22 -0
  50. package/{esm2015/src/management/gui/GuiFormPropertyAdapter.js → esm2020/src/management/gui/GuiFormPropertyAdapter.mjs} +0 -0
  51. package/{esm2015/src/management/gui/HebrewDate.js → esm2020/src/management/gui/HebrewDate.mjs} +0 -0
  52. package/{esm2015/src/management/gui/Helps.js → esm2020/src/management/gui/Helps.mjs} +0 -0
  53. package/esm2020/src/management/gui/MgControlBase.mjs +1873 -0
  54. package/esm2020/src/management/gui/MgFormBase.mjs +748 -0
  55. package/esm2020/src/management/gui/PIC.mjs +1178 -0
  56. package/esm2020/src/management/gui/PropDefaults.mjs +230 -0
  57. package/{esm2015/src/management/gui/PropInterface.js → esm2020/src/management/gui/PropInterface.mjs} +2 -4
  58. package/esm2020/src/management/gui/PropTable.mjs +221 -0
  59. package/esm2020/src/management/gui/Property.mjs +1382 -0
  60. package/{esm2015/src/management/gui/ValidationDetails.js → esm2020/src/management/gui/ValidationDetails.mjs} +0 -0
  61. package/{esm2015/src/management/gui/ValidationDetailsBase.js → esm2020/src/management/gui/ValidationDetailsBase.mjs} +0 -0
  62. package/{esm2015/src/management/gui/WrongFormatException.js → esm2020/src/management/gui/WrongFormatException.mjs} +0 -0
  63. package/{esm2015/src/management/tasks/GuiDataCollection.js → esm2020/src/management/tasks/GuiDataCollection.mjs} +0 -0
  64. package/esm2020/src/management/tasks/GuiTaskBase.mjs +502 -0
  65. package/{esm2015/src/management/tasks/IMGDataTable.js → esm2020/src/management/tasks/IMGDataTable.mjs} +1 -0
  66. package/{esm2015/src/management/tasks/ITask.js → esm2020/src/management/tasks/ITask.mjs} +1 -0
  67. package/esm2020/src/management/tasks/MgTimer.mjs +21 -0
  68. package/esm2020/src/management/tasks/TaskDefinitionId.mjs +54 -0
  69. package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
  70. package/{esm2015/src/util/AuthenticationDialogHandler.js → esm2020/src/util/AuthenticationDialogHandler.mjs} +0 -0
  71. package/{esm2015/src/util/MemoryUtil.js → esm2020/src/util/MemoryUtil.mjs} +0 -0
  72. package/{esm2015/src/util/ObjectReference.js → esm2020/src/util/ObjectReference.mjs} +0 -0
  73. package/esm2020/src/util/ProcessLauncher.mjs +32 -0
  74. package/esm2020/src/util/UsernamePasswordCredentials.mjs +52 -0
  75. package/fesm2015/{magic-xpa-gui.js → magic-xpa-gui.mjs} +305 -365
  76. package/fesm2015/magic-xpa-gui.mjs.map +1 -0
  77. package/fesm2020/magic-xpa-gui.mjs +17805 -0
  78. package/fesm2020/magic-xpa-gui.mjs.map +1 -0
  79. package/package.json +27 -14
  80. package/src/Commands.d.ts +1 -0
  81. package/src/Events.d.ts +2 -2
  82. package/src/EventsProcessor.d.ts +1 -1
  83. package/src/GuiEnums.d.ts +125 -126
  84. package/src/IFlowMonitorQueue.d.ts +1 -1
  85. package/src/Manager.d.ts +2 -3
  86. package/src/env/IEnvironment.d.ts +1 -0
  87. package/src/gui/low/GuiInteractive.d.ts +3 -1
  88. package/src/gui/low/Style.d.ts +0 -3
  89. package/src/management/RuntimeContextBase.d.ts +2 -0
  90. package/src/management/data/DcValues.d.ts +1 -1
  91. package/src/management/data/DcValuesBuilderBase.d.ts +1 -1
  92. package/src/management/data/RecordUtils.d.ts +0 -3
  93. package/src/management/events/IGuiEventsManager.d.ts +5 -5
  94. package/src/management/exp/ExpressionInterface.d.ts +1 -0
  95. package/src/management/exp/GuiExpressionEvaluator.d.ts +2 -2
  96. package/src/management/gui/DisplayConvertor.d.ts +6 -6
  97. package/src/management/gui/GuiControlPropertyAdapter.d.ts +6 -6
  98. package/src/management/gui/MgControlBase.d.ts +4 -5
  99. package/src/management/gui/MgFormBase.d.ts +1 -1
  100. package/src/management/gui/PropInterface.d.ts +2 -4
  101. package/src/management/gui/PropTable.d.ts +1 -1
  102. package/src/management/gui/Property.d.ts +3 -3
  103. package/src/management/tasks/GuiTaskBase.d.ts +3 -8
  104. package/src/management/tasks/TaskDefinitionId.d.ts +1 -0
  105. package/src/util/ProcessLauncher.d.ts +1 -3
  106. package/bundles/magic-xpa-gui.umd.js +0 -19459
  107. package/bundles/magic-xpa-gui.umd.js.map +0 -1
  108. package/bundles/magic-xpa-gui.umd.min.js +0 -16
  109. package/bundles/magic-xpa-gui.umd.min.js.map +0 -1
  110. package/esm2015/src/Commands.js +0 -185
  111. package/esm2015/src/Events.js +0 -420
  112. package/esm2015/src/EventsProcessor.js +0 -68
  113. package/esm2015/src/FocusManager.js +0 -41
  114. package/esm2015/src/Manager.js +0 -197
  115. package/esm2015/src/gui/low/GuiInteractive.js +0 -539
  116. package/esm2015/src/gui/low/Style.js +0 -50
  117. package/esm2015/src/management/RuntimeContextBase.js +0 -50
  118. package/esm2015/src/management/data/DcValues.js +0 -214
  119. package/esm2015/src/management/data/DcValuesBuilderBase.js +0 -97
  120. package/esm2015/src/management/data/GuiDataViewBase.js +0 -90
  121. package/esm2015/src/management/data/GuiFieldBase.js +0 -85
  122. package/esm2015/src/management/data/ObjectReferenceBase.js +0 -48
  123. package/esm2015/src/management/data/RecordUtils.js +0 -447
  124. package/esm2015/src/management/events/IGuiEventsManager.js +0 -1
  125. package/esm2015/src/management/exp/GuiExpressionEvaluator.js +0 -333
  126. package/esm2015/src/management/gui/DisplayConvertor.js +0 -1706
  127. package/esm2015/src/management/gui/FieldValidator.js +0 -1507
  128. package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +0 -4
  129. package/esm2015/src/management/gui/MgControlBase.js +0 -1979
  130. package/esm2015/src/management/gui/MgFormBase.js +0 -763
  131. package/esm2015/src/management/gui/PIC.js +0 -1176
  132. package/esm2015/src/management/gui/PropDefaults.js +0 -232
  133. package/esm2015/src/management/gui/PropTable.js +0 -224
  134. package/esm2015/src/management/gui/Property.js +0 -1409
  135. package/esm2015/src/management/tasks/GuiTaskBase.js +0 -533
  136. package/esm2015/src/management/tasks/MgTimer.js +0 -21
  137. package/esm2015/src/management/tasks/TaskDefinitionId.js +0 -47
  138. package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +0 -41
  139. package/esm2015/src/util/ProcessLauncher.js +0 -32
  140. package/esm2015/src/util/UsernamePasswordCredentials.js +0 -52
  141. package/fesm2015/magic-xpa-gui.js.map +0 -1
@@ -1,539 +0,0 @@
1
- import { MgValue } from '../MgValue';
2
- import { GuiMgForm } from '../GuiMgForm';
3
- import { Events } from '../../Events';
4
- import { UIBridge } from '../../UIBridge';
5
- import { ControlBase } from '../ControlBase';
6
- import { GuiCommandQueue } from './GuiCommandQueue';
7
- export var InteractiveCommandType;
8
- (function (InteractiveCommandType) {
9
- InteractiveCommandType[InteractiveCommandType["GET_FONT_METRICS"] = 0] = "GET_FONT_METRICS";
10
- InteractiveCommandType[InteractiveCommandType["GET_RESOLUTION"] = 1] = "GET_RESOLUTION";
11
- InteractiveCommandType[InteractiveCommandType["GET_BOUNDS"] = 2] = "GET_BOUNDS";
12
- InteractiveCommandType[InteractiveCommandType["GET_VALUE"] = 3] = "GET_VALUE";
13
- InteractiveCommandType[InteractiveCommandType["SET_BROWSER_TEXT"] = 4] = "SET_BROWSER_TEXT";
14
- InteractiveCommandType[InteractiveCommandType["GET_BROWSER_TEXT"] = 5] = "GET_BROWSER_TEXT";
15
- InteractiveCommandType[InteractiveCommandType["BROWSER_EXECUTE"] = 6] = "BROWSER_EXECUTE";
16
- InteractiveCommandType[InteractiveCommandType["GET_TOP_INDEX"] = 7] = "GET_TOP_INDEX";
17
- InteractiveCommandType[InteractiveCommandType["MESSAGE_BOX"] = 8] = "MESSAGE_BOX";
18
- InteractiveCommandType[InteractiveCommandType["SET_TITLE"] = 9] = "SET_TITLE";
19
- InteractiveCommandType[InteractiveCommandType["DIRECTORY_DIALOG_BOX"] = 10] = "DIRECTORY_DIALOG_BOX";
20
- InteractiveCommandType[InteractiveCommandType["GET_CLIENT_BOUNDS"] = 11] = "GET_CLIENT_BOUNDS";
21
- InteractiveCommandType[InteractiveCommandType["SET_EDIT_TEXT"] = 12] = "SET_EDIT_TEXT";
22
- InteractiveCommandType[InteractiveCommandType["INSERT_EDIT_TEXT"] = 13] = "INSERT_EDIT_TEXT";
23
- InteractiveCommandType[InteractiveCommandType["SET_SELECTION"] = 14] = "SET_SELECTION";
24
- InteractiveCommandType[InteractiveCommandType["GET_SELECTION"] = 15] = "GET_SELECTION";
25
- InteractiveCommandType[InteractiveCommandType["GET_CARET_POS"] = 16] = "GET_CARET_POS";
26
- InteractiveCommandType[InteractiveCommandType["REFRESH_PAGE"] = 17] = "REFRESH_PAGE";
27
- InteractiveCommandType[InteractiveCommandType["GET_IS_TOP_OF_TEXTBOX"] = 18] = "GET_IS_TOP_OF_TEXTBOX";
28
- InteractiveCommandType[InteractiveCommandType["GET_IS_END_OF_TEXTBOX"] = 19] = "GET_IS_END_OF_TEXTBOX";
29
- InteractiveCommandType[InteractiveCommandType["CLIPBOARD_GET_CONTENT"] = 20] = "CLIPBOARD_GET_CONTENT";
30
- InteractiveCommandType[InteractiveCommandType["CLIPBOARD_SET_CONTENT"] = 21] = "CLIPBOARD_SET_CONTENT";
31
- InteractiveCommandType[InteractiveCommandType["CLIPBOARD_PASTE"] = 22] = "CLIPBOARD_PASTE";
32
- InteractiveCommandType[InteractiveCommandType["POST_KEY_EVENT"] = 23] = "POST_KEY_EVENT";
33
- InteractiveCommandType[InteractiveCommandType["POST_CHAR_EVENT"] = 24] = "POST_CHAR_EVENT";
34
- InteractiveCommandType[InteractiveCommandType["SET_CURSOR"] = 25] = "SET_CURSOR";
35
- InteractiveCommandType[InteractiveCommandType["DISPOSE_ALL_FORMS"] = 26] = "DISPOSE_ALL_FORMS";
36
- InteractiveCommandType[InteractiveCommandType["GET_ROWS_IN_PAGE"] = 27] = "GET_ROWS_IN_PAGE";
37
- InteractiveCommandType[InteractiveCommandType["GET_HIDDEN_ROWS_COUNT_IN_TABLE"] = 28] = "GET_HIDDEN_ROWS_COUNT_IN_TABLE";
38
- InteractiveCommandType[InteractiveCommandType["FILE_OPEN_DIALOG_BOX"] = 29] = "FILE_OPEN_DIALOG_BOX";
39
- InteractiveCommandType[InteractiveCommandType["FILE_SAVE_DIALOG_BOX"] = 30] = "FILE_SAVE_DIALOG_BOX";
40
- InteractiveCommandType[InteractiveCommandType["CREATE_DIALOG"] = 31] = "CREATE_DIALOG";
41
- InteractiveCommandType[InteractiveCommandType["OPEN_DIALOG"] = 32] = "OPEN_DIALOG";
42
- InteractiveCommandType[InteractiveCommandType["CLOSE_DIALOG"] = 33] = "CLOSE_DIALOG";
43
- InteractiveCommandType[InteractiveCommandType["SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA"] = 34] = "SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA";
44
- InteractiveCommandType[InteractiveCommandType["REFLECTION_INVOKE"] = 35] = "REFLECTION_INVOKE";
45
- InteractiveCommandType[InteractiveCommandType["REFLECTION_SET"] = 36] = "REFLECTION_SET";
46
- InteractiveCommandType[InteractiveCommandType["GET_LAST_WINDOW_STATE"] = 37] = "GET_LAST_WINDOW_STATE";
47
- InteractiveCommandType[InteractiveCommandType["GET_FRAMES_BOUNDS"] = 38] = "GET_FRAMES_BOUNDS";
48
- InteractiveCommandType[InteractiveCommandType["GET_LINKED_PARENT_IDX"] = 39] = "GET_LINKED_PARENT_IDX";
49
- InteractiveCommandType[InteractiveCommandType["GET_FORM_BOUNDS"] = 40] = "GET_FORM_BOUNDS";
50
- InteractiveCommandType[InteractiveCommandType["GET_COLUMNS_STATE"] = 41] = "GET_COLUMNS_STATE";
51
- InteractiveCommandType[InteractiveCommandType["GET_FORM_HANDLE"] = 42] = "GET_FORM_HANDLE";
52
- InteractiveCommandType[InteractiveCommandType["GET_CTRL_HANDLE"] = 43] = "GET_CTRL_HANDLE";
53
- InteractiveCommandType[InteractiveCommandType["IS_FORM_ACTIVE"] = 44] = "IS_FORM_ACTIVE";
54
- InteractiveCommandType[InteractiveCommandType["SET_MARKED_TEXT_ON_RICH_EDIT"] = 45] = "SET_MARKED_TEXT_ON_RICH_EDIT";
55
- InteractiveCommandType[InteractiveCommandType["SEND_IME_MSG"] = 46] = "SEND_IME_MSG";
56
- InteractiveCommandType[InteractiveCommandType["CAN_FOCUS"] = 47] = "CAN_FOCUS";
57
- InteractiveCommandType[InteractiveCommandType["INVOKE_OSCOMMAND"] = 48] = "INVOKE_OSCOMMAND";
58
- InteractiveCommandType[InteractiveCommandType["GET_SELECTED_INDICE"] = 49] = "GET_SELECTED_INDICE";
59
- InteractiveCommandType[InteractiveCommandType["SET_SUGGESTED_VALUE"] = 50] = "SET_SUGGESTED_VALUE";
60
- InteractiveCommandType[InteractiveCommandType["MAP_WIDGET_TO_GUI_OBJECT"] = 51] = "MAP_WIDGET_TO_GUI_OBJECT";
61
- InteractiveCommandType[InteractiveCommandType["REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER"] = 52] = "REMOVE_DN_CONTROL_VALUE_CHANGED_HANDLER";
62
- InteractiveCommandType[InteractiveCommandType["ADD_DN_CONTROL_VALUE_CHANGED_HANDLER"] = 53] = "ADD_DN_CONTROL_VALUE_CHANGED_HANDLER";
63
- InteractiveCommandType[InteractiveCommandType["GET_RTF_VALUE_BEFORE_ENTERING_CONTROL"] = 54] = "GET_RTF_VALUE_BEFORE_ENTERING_CONTROL";
64
- InteractiveCommandType[InteractiveCommandType["ATTACH_DNKEY_TO_OBJECT"] = 55] = "ATTACH_DNKEY_TO_OBJECT";
65
- InteractiveCommandType[InteractiveCommandType["GET_DVCONTROL_POSITION_ISN"] = 56] = "GET_DVCONTROL_POSITION_ISN";
66
- InteractiveCommandType[InteractiveCommandType["CLEAR_DATA_TABLE"] = 57] = "CLEAR_DATA_TABLE";
67
- InteractiveCommandType[InteractiveCommandType["SET_DATA_SOURCE_TO_DVCONTROL"] = 58] = "SET_DATA_SOURCE_TO_DVCONTROL";
68
- InteractiveCommandType[InteractiveCommandType["ACTIVATE_FORM"] = 59] = "ACTIVATE_FORM";
69
- InteractiveCommandType[InteractiveCommandType["IS_COMBO_DROPPED_DOWN"] = 60] = "IS_COMBO_DROPPED_DOWN";
70
- InteractiveCommandType[InteractiveCommandType["OPEN_FORM_DESIGNER"] = 61] = "OPEN_FORM_DESIGNER";
71
- InteractiveCommandType[InteractiveCommandType["INVOKE_UDPCOMMAND"] = 62] = "INVOKE_UDPCOMMAND";
72
- InteractiveCommandType[InteractiveCommandType["GET_HASINDENT"] = 63] = "GET_HASINDENT";
73
- InteractiveCommandType[InteractiveCommandType["GET_IS_ROW_EDITING"] = 64] = "GET_IS_ROW_EDITING";
74
- InteractiveCommandType[InteractiveCommandType["GET_MAX_ROWS_IN_PAGINATED_TABLE"] = 65] = "GET_MAX_ROWS_IN_PAGINATED_TABLE";
75
- InteractiveCommandType[InteractiveCommandType["CALL_JS"] = 66] = "CALL_JS";
76
- })(InteractiveCommandType || (InteractiveCommandType = {}));
77
- export class GuiInteractiveBase {
78
- constructor() {
79
- this._commandType = 0;
80
- this.TaskTag = null;
81
- this.controlName = null;
82
- this._x = 0;
83
- this._y = 0;
84
- this._char = null;
85
- this._str = String.fromCharCode(0);
86
- this._intVal1 = 0;
87
- this._line = 0;
88
- this._obj1 = null;
89
- this._parameters = null;
90
- this._boolVal = false;
91
- this._obj2 = null;
92
- this._mgValue = null;
93
- this._setValue = false;
94
- this.resultString = String.fromCharCode(0);
95
- }
96
- canFocus(guiMgControl) {
97
- this._commandType = InteractiveCommandType.CAN_FOCUS;
98
- this._obj1 = guiMgControl;
99
- this._mgValue = new MgValue();
100
- this.Invoke();
101
- return this._mgValue.boolVal;
102
- }
103
- GetSelectedIndice(guiMgControl) {
104
- this._commandType = InteractiveCommandType.GET_SELECTED_INDICE;
105
- this._obj1 = guiMgControl;
106
- this._mgValue = new MgValue();
107
- this.Invoke();
108
- return this._mgValue.str;
109
- }
110
- GetHasIndent(guiMgControl) {
111
- this._commandType = InteractiveCommandType.GET_HASINDENT;
112
- this._obj1 = guiMgControl;
113
- this.Invoke();
114
- return this._boolVal;
115
- }
116
- setGetSuggestedValueOfChoiceControlOnTagData(ctrl, line, retSuggestedValue) {
117
- this._commandType = InteractiveCommandType.SET_GET_SUGGESTED_VALUE_FOR_CHOICE_CONTROL_ON_TAGDATA;
118
- this._obj2 = ctrl;
119
- this._line = line;
120
- this._boolVal = retSuggestedValue;
121
- this.Invoke();
122
- }
123
- getValue(obj, line) {
124
- this._commandType = InteractiveCommandType.GET_VALUE;
125
- this._obj2 = obj;
126
- this._line = line;
127
- this._mgValue = new MgValue();
128
- this.Invoke();
129
- return this._mgValue.obj;
130
- }
131
- getTopIndex(tablecontrol) {
132
- this._commandType = InteractiveCommandType.GET_TOP_INDEX;
133
- this._obj2 = tablecontrol;
134
- this.Invoke();
135
- return this._intVal1;
136
- }
137
- getIsRowEditing(tablecontrol, line, isLineMode) {
138
- this._commandType = InteractiveCommandType.GET_IS_ROW_EDITING;
139
- this._obj2 = tablecontrol;
140
- this._intVal1 = line;
141
- this._boolVal = isLineMode;
142
- this.Invoke();
143
- return this._boolVal;
144
- }
145
- browserExecute(browserControl, text, syncExec, language) {
146
- this._commandType = InteractiveCommandType.BROWSER_EXECUTE;
147
- this._obj2 = browserControl;
148
- this._mgValue = new MgValue();
149
- this._mgValue.str = text;
150
- this._mgValue.obj = language;
151
- if (syncExec) {
152
- this.Invoke();
153
- return this._mgValue.boolVal;
154
- }
155
- else {
156
- return true;
157
- }
158
- }
159
- messageBox(title, msg, style) {
160
- this._commandType = InteractiveCommandType.MESSAGE_BOX;
161
- this._mgValue = new MgValue();
162
- this._mgValue.title = title;
163
- this._mgValue.str = ((msg === null) ? '' : msg);
164
- this._mgValue.style = style;
165
- Events.RefreshTables();
166
- this.Invoke();
167
- return this._mgValue.number;
168
- }
169
- setTitle(topMostForm, title) {
170
- this._commandType = InteractiveCommandType.SET_TITLE;
171
- this._mgValue = new MgValue();
172
- this._obj2 = topMostForm;
173
- this._mgValue.title = ((title === null) ? '' : title);
174
- this.Invoke();
175
- }
176
- invokeUDP(contextId) {
177
- this._commandType = InteractiveCommandType.INVOKE_UDPCOMMAND;
178
- this._mgValue = new MgValue();
179
- this._mgValue.obj = contextId;
180
- this.Invoke();
181
- return this._mgValue.number;
182
- }
183
- directoryDialogBox(caption, path, bShowNewFolder) {
184
- this._commandType = InteractiveCommandType.DIRECTORY_DIALOG_BOX;
185
- this._mgValue = new MgValue();
186
- this._mgValue.caption = caption;
187
- this._mgValue.path = path;
188
- this._mgValue.bool1 = bShowNewFolder;
189
- this.Invoke();
190
- return this._mgValue.str;
191
- }
192
- fileOpenDialogBox(title, dirName, fileName, filterNames, checkExists, multiSelect) {
193
- this._commandType = InteractiveCommandType.FILE_OPEN_DIALOG_BOX;
194
- this._mgValue = new MgValue();
195
- this._mgValue.title = title;
196
- this._mgValue.path = dirName;
197
- this._mgValue.str = fileName;
198
- this._mgValue.filter = filterNames;
199
- this._mgValue.boolVal = checkExists;
200
- this._mgValue.bool1 = multiSelect;
201
- this.Invoke();
202
- return this._mgValue.str;
203
- }
204
- fileSaveDialogBox(title, dirName, fileName, filterNames, defaultExtension, overwritePrompt) {
205
- this._commandType = InteractiveCommandType.FILE_SAVE_DIALOG_BOX;
206
- this._mgValue = new MgValue();
207
- this._mgValue.title = title;
208
- this._mgValue.path = dirName;
209
- this._mgValue.str = fileName;
210
- this._mgValue.filter = filterNames;
211
- this._mgValue.caption = defaultExtension;
212
- this._mgValue.bool1 = overwritePrompt;
213
- this.Invoke();
214
- return this._mgValue.str;
215
- }
216
- createDialog(handle, parameters) {
217
- this._commandType = InteractiveCommandType.CREATE_DIALOG;
218
- this._parameters = parameters;
219
- this._obj2 = handle;
220
- this.Invoke();
221
- }
222
- closeDialog(handle) {
223
- this._commandType = InteractiveCommandType.CLOSE_DIALOG;
224
- this._obj2 = handle;
225
- this.Invoke();
226
- }
227
- setEditText(control, line, text) {
228
- this._commandType = InteractiveCommandType.SET_EDIT_TEXT;
229
- this._obj2 = control;
230
- this._line = line;
231
- this._mgValue = new MgValue();
232
- this._mgValue.str = text;
233
- this.Invoke();
234
- return this._mgValue.boolVal;
235
- }
236
- insertEditText(control, line, startPosition, textToInsert) {
237
- this._commandType = InteractiveCommandType.INSERT_EDIT_TEXT;
238
- this._obj2 = control;
239
- this._line = line;
240
- this._mgValue = new MgValue();
241
- this._mgValue.str = textToInsert;
242
- this._intVal1 = startPosition;
243
- this.Invoke();
244
- return this._mgValue.boolVal;
245
- }
246
- setSelection(control, line, start, end, caretPos) {
247
- this._commandType = InteractiveCommandType.SET_SELECTION;
248
- this._obj2 = control;
249
- this._line = line;
250
- this._x = start;
251
- this._y = end;
252
- this._mgValue = new MgValue();
253
- this._mgValue.number = caretPos;
254
- this.Invoke();
255
- }
256
- setSuggestedValue(control, suggestedValue) {
257
- this._commandType = InteractiveCommandType.SET_SUGGESTED_VALUE;
258
- this._obj2 = control;
259
- this._mgValue = new MgValue();
260
- this._mgValue.str = suggestedValue;
261
- this.Invoke();
262
- }
263
- caretPosGet(control, line) {
264
- this._commandType = InteractiveCommandType.GET_CARET_POS;
265
- this._obj2 = control;
266
- this._line = line;
267
- this._mgValue = new MgValue();
268
- this.Invoke();
269
- return this._mgValue.number;
270
- }
271
- RefreshPage(navigateToRootRoute, initialUrl) {
272
- this._commandType = InteractiveCommandType.REFRESH_PAGE;
273
- this._boolVal = navigateToRootRoute;
274
- this._obj1 = initialUrl;
275
- this.Invoke();
276
- return;
277
- }
278
- getIsTopOfTextBox(control, line) {
279
- this._commandType = InteractiveCommandType.GET_IS_TOP_OF_TEXTBOX;
280
- this._obj2 = control;
281
- this._line = line;
282
- this.Invoke();
283
- return this._boolVal;
284
- }
285
- getIsEndOfTextBox(control, line) {
286
- this._commandType = InteractiveCommandType.GET_IS_END_OF_TEXTBOX;
287
- this._obj2 = control;
288
- this._line = line;
289
- this.Invoke();
290
- return this._boolVal;
291
- }
292
- postKeyEvent(control, line, keys, PostChar, forceLogicalControlTextUpdate) {
293
- this._commandType = InteractiveCommandType.POST_KEY_EVENT;
294
- this._obj2 = control;
295
- this._line = line;
296
- this._mgValue = new MgValue();
297
- this._mgValue.str = keys;
298
- this._mgValue.bool1 = forceLogicalControlTextUpdate;
299
- this._boolVal = PostChar;
300
- this.Invoke();
301
- }
302
- postCharEvent(control, line, chr) {
303
- this._commandType = InteractiveCommandType.POST_CHAR_EVENT;
304
- this._obj2 = control;
305
- this._line = line;
306
- this._char = chr;
307
- this.Invoke();
308
- }
309
- disposeAllForms() {
310
- this._commandType = InteractiveCommandType.DISPOSE_ALL_FORMS;
311
- this.Invoke();
312
- }
313
- getRowsInPage(control) {
314
- this._commandType = InteractiveCommandType.GET_ROWS_IN_PAGE;
315
- this._obj2 = control;
316
- this.Invoke();
317
- return this._intVal1;
318
- }
319
- getMaxRowsInPaginatedTable(control) {
320
- this._commandType = InteractiveCommandType.GET_MAX_ROWS_IN_PAGINATED_TABLE;
321
- this._obj2 = control;
322
- this.Invoke();
323
- return this._intVal1;
324
- }
325
- GetHiddenRowsCountInTable(control) {
326
- this._commandType = InteractiveCommandType.GET_HIDDEN_ROWS_COUNT_IN_TABLE;
327
- this._obj2 = control;
328
- this.Invoke();
329
- return this._intVal1;
330
- }
331
- getLastWindowState(guiMgForm) {
332
- this._commandType = InteractiveCommandType.GET_LAST_WINDOW_STATE;
333
- this._obj2 = guiMgForm;
334
- this.Invoke();
335
- return this._intVal1;
336
- }
337
- getLinkedParentIdx(frameset) {
338
- this._commandType = InteractiveCommandType.GET_LINKED_PARENT_IDX;
339
- this._obj2 = frameset;
340
- this.Invoke();
341
- return this._intVal1;
342
- }
343
- getColumnsState(tableCtrl) {
344
- this._commandType = InteractiveCommandType.GET_COLUMNS_STATE;
345
- this._obj2 = tableCtrl;
346
- this._mgValue = new MgValue();
347
- this.Invoke();
348
- return this._mgValue.listOfIntArr;
349
- }
350
- MapWidget(newObjectToSet) {
351
- if (arguments.length === 1)
352
- this.MapWidget_0(newObjectToSet);
353
- else
354
- this.MapWidget_1();
355
- }
356
- MapWidget_0(newObjectToSet) {
357
- this._commandType = InteractiveCommandType.MAP_WIDGET_TO_GUI_OBJECT;
358
- this._obj1 = newObjectToSet;
359
- this.Invoke();
360
- }
361
- ActivateForm(guiMgForm) {
362
- this._commandType = InteractiveCommandType.ACTIVATE_FORM;
363
- this._obj1 = guiMgForm;
364
- this.Invoke();
365
- }
366
- isFormActive(guiMgForm) {
367
- if (arguments.length === 1)
368
- return this.isFormActive_0(guiMgForm);
369
- else
370
- this.isFormActive_1();
371
- }
372
- isFormActive_0(guiMgForm) {
373
- return this._boolVal;
374
- }
375
- GetRtfValueBeforeEnteringControl(guiMgControl, line) {
376
- this._commandType = InteractiveCommandType.GET_RTF_VALUE_BEFORE_ENTERING_CONTROL;
377
- this._obj2 = guiMgControl;
378
- this._line = line;
379
- this._mgValue = new MgValue();
380
- this.Invoke();
381
- return this._mgValue.str;
382
- }
383
- GetDVControlPositionIsn(dataTable, line) {
384
- this._commandType = InteractiveCommandType.GET_DVCONTROL_POSITION_ISN;
385
- this._obj1 = dataTable;
386
- this._line = line;
387
- this.Invoke();
388
- return this._intVal1;
389
- }
390
- ClearDatatable(dvControl, dataTable) {
391
- this._commandType = InteractiveCommandType.CLEAR_DATA_TABLE;
392
- this._obj1 = dvControl;
393
- this._obj2 = dataTable;
394
- this.Invoke();
395
- }
396
- SetDataSourceToDataViewControl(dvControl, dataTable, propertyName) {
397
- this._commandType = InteractiveCommandType.SET_DATA_SOURCE_TO_DVCONTROL;
398
- this._obj1 = dvControl;
399
- this._obj2 = dataTable;
400
- this._str = propertyName;
401
- this.Invoke();
402
- }
403
- IsComboBoxInDroppedDownState(comboBox, line) {
404
- this._commandType = InteractiveCommandType.IS_COMBO_DROPPED_DOWN;
405
- this._obj1 = comboBox;
406
- this._line = line;
407
- this.Invoke();
408
- return this._boolVal;
409
- }
410
- ExecuteCallJS(form, formName, functionName, args) {
411
- this._commandType = InteractiveCommandType.CALL_JS;
412
- this._obj2 = form;
413
- this.controlName = formName;
414
- this._str = functionName;
415
- this.arguments = args;
416
- this.Invoke();
417
- return this.resultString;
418
- }
419
- Invoke() {
420
- GuiCommandQueue.getInstance().invoke();
421
- if (this._obj2 instanceof ControlBase) {
422
- let controlBase = this._obj2;
423
- this.TaskTag = controlBase.TaskTag;
424
- this.controlName = controlBase.UniqueName;
425
- }
426
- else if (this._obj2 instanceof GuiMgForm) {
427
- let guiMgForm = this._obj2;
428
- this.TaskTag = guiMgForm.TaskTag;
429
- }
430
- else
431
- this.TaskTag = '0';
432
- UIBridge.getInstance().ExecuteInteractiveCommand(this);
433
- }
434
- OnRemoveDNControlValueChangedHandler() {
435
- Events.WriteExceptionToLog('RemoveDNControlValueChangedHandler - Not Implemented Yet');
436
- }
437
- OnAddDNControlValueChangedHandler() {
438
- Events.WriteExceptionToLog('AddDNControlValueChangedHandler - Not Implemented Yet');
439
- }
440
- OnGetRtfValueBeforeEnteringControl() {
441
- Events.WriteExceptionToLog('OnGetOrgRtfValue - Not Implemented Yet');
442
- }
443
- onInvokeUDP() {
444
- }
445
- onFileOpenDialogBox() {
446
- }
447
- onFileSaveDialogBox() {
448
- }
449
- onCreateDialog() {
450
- }
451
- onOpenDialog() {
452
- }
453
- onCloseDialog() {
454
- }
455
- isFormActive_1() {
456
- }
457
- onDisposeAllForms() {
458
- }
459
- onGetFontMetrics() {
460
- }
461
- onGetResolution() {
462
- }
463
- onCaretPosGet() {
464
- }
465
- onGetIsTopOfTextBox() {
466
- return this._boolVal;
467
- }
468
- onGetIsEndOfTextBox() {
469
- return this._boolVal;
470
- }
471
- onSelectionGet() {
472
- }
473
- onSetEditText() {
474
- }
475
- onInsertEditText() {
476
- }
477
- onSetBrowserText() {
478
- }
479
- onSetSelection() {
480
- }
481
- onSetSuggestedValue() {
482
- }
483
- onGetRowsInPage() {
484
- }
485
- onGetHiddenRowsCountInTable() {
486
- }
487
- onGetTopIndex() {
488
- }
489
- getClientBounds_1() {
490
- }
491
- onPostKeyEvent() {
492
- }
493
- onPostCharEvent() {
494
- }
495
- OnSetGetSuggestedValueOfChoiceControlOnTagData() {
496
- }
497
- onSendImeMsg() {
498
- }
499
- onSetCursor() {
500
- }
501
- invokeRequired() {
502
- return false;
503
- }
504
- onGetLastWindowState() {
505
- }
506
- onGetLinkedParentIdx() {
507
- }
508
- onGetColumnsState() {
509
- }
510
- onCanFocus() {
511
- }
512
- OnGetSelectedIndice() {
513
- }
514
- OnGetHasIndent() {
515
- }
516
- MapWidget_1() {
517
- }
518
- OnGetDVControlPositionIsn() {
519
- }
520
- OnActivateForm() {
521
- }
522
- OnIsComboDroppedDowndState() {
523
- }
524
- }
525
- GuiInteractiveBase.lockObject = null;
526
- export class GuiInteractive extends GuiInteractiveBase {
527
- OnGetRtfValueBeforeEnteringControl() {
528
- }
529
- onGetBrowserText() {
530
- }
531
- onBrowserExecute() {
532
- }
533
- onDirectoryDialogBox() {
534
- }
535
- constructor() {
536
- super();
537
- }
538
- }
539
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpSW50ZXJhY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL2d1aS9sb3cvR3VpSW50ZXJhY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxDQUFOLElBQVksc0JBb0VYO0FBcEVELFdBQVksc0JBQXNCO0lBQ2hDLDJGQUFnQixDQUFBO0lBQ2hCLHVGQUFjLENBQUE7SUFDZCwrRUFBVSxDQUFBO0lBQ1YsNkVBQVMsQ0FBQTtJQUNULDJGQUFnQixDQUFBO0lBQ2hCLDJGQUFnQixDQUFBO0lBQ2hCLHlGQUFlLENBQUE7SUFDZixxRkFBYSxDQUFBO0lBQ2IsaUZBQVcsQ0FBQTtJQUNYLDZFQUFTLENBQUE7SUFDVCxvR0FBb0IsQ0FBQTtJQUNwQiw4RkFBaUIsQ0FBQTtJQUNqQixzRkFBYSxDQUFBO0lBQ2IsNEZBQWdCLENBQUE7SUFDaEIsc0ZBQWEsQ0FBQTtJQUNiLHNGQUFhLENBQUE7SUFDYixzRkFBYSxDQUFBO0lBQ2Isb0ZBQVksQ0FBQTtJQUNaLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLHNHQUFxQixDQUFBO0lBQ3JCLDBGQUFlLENBQUE7SUFDZix3RkFBYyxDQUFBO0lBQ2QsMEZBQWUsQ0FBQTtJQUNmLGdGQUFVLENBQUE7SUFDViw4RkFB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SUFHRCxjQUFjO0lBQ2QsQ0FBQztJQUdELG1CQUFtQjtJQUNuQixDQUFDO0lBSUQsZUFBZTtJQUNmLENBQUM7SUFJRCwyQkFBMkI7SUFDM0IsQ0FBQztJQUlELGFBQWE7SUFDYixDQUFDO0lBR08saUJBQWlCO0lBQ3pCLENBQUM7SUFNRCxjQUFjO0lBQ2QsQ0FBQztJQUlELGVBQWU7SUFDZixDQUFDO0lBTUQsOENBQThDO0lBQzlDLENBQUM7SUFHTyxZQUFZO0lBQ3BCLENBQUM7SUFHRCxXQUFXO0lBQ1gsQ0FBQztJQUlPLGNBQWM7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBS08sb0JBQW9CO0lBQzVCLENBQUM7SUFNTyxvQkFBb0I7SUFDNUIsQ0FBQztJQUlPLGlCQUFpQjtJQUN6QixDQUFDO0lBSU8sVUFBVTtJQUNsQixDQUFDO0lBS08sbUJBQW1CO0lBQzNCLENBQUM7SUFNTyxjQUFjO0lBQ3RCLENBQUM7SUFLTyxXQUFXO0lBQ25CLENBQUM7SUFLRCx5QkFBeUI7SUFDekIsQ0FBQztJQUtELGNBQWM7SUFDZCxDQUFDO0lBT0QsMEJBQTBCO0lBQzFCLENBQUM7O0FBMWhDYyw2QkFBVSxHQUFRLElBQUksQ0FBQztBQTZoQ3hDLE1BQU0sT0FBTyxjQUFlLFNBQVEsa0JBQWtCO0lBRXBELGtDQUFrQztJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsQ0FBQztJQUVELG9CQUFvQjtJQUNwQixDQUFDO0lBRUQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEd1aU1nQ29udHJvbCB9IGZyb20gJy4uL0d1aU1nQ29udHJvbCc7XHJcbmltcG9ydCB7IE1nVmFsdWUgfSBmcm9tICcuLi9NZ1ZhbHVlJztcclxuaW1wb3J0IHsgR3VpTWdGb3JtIH0gZnJvbSAnLi4vR3VpTWdGb3JtJztcclxuaW1wb3J0IHsgRGlhbG9nSGFuZGxlciB9IGZyb20gJy4vRGlhbG9nSGFuZGxlcic7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IExpc3QgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XHJcbmltcG9ydCB7IFVJQnJpZGdlIH0gZnJvbSAnLi4vLi4vVUlCcmlkZ2UnO1xyXG5pbXBvcnQgeyBDb250cm9sQmFzZSB9IGZyb20gJy4uL0NvbnRyb2xCYXNlJztcclxuaW1wb3J0IHsgR3VpQ29tbWFuZFF1ZXVlIH0gZnJvbSAnLi9HdWlDb21tYW5kUXVldWUnO1xyXG5cclxuZXhwb3J0IGVudW0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZSB7XHJcbiAgR0VUX0ZPTlRfTUVUUklDUyxcclxuICBHRVRfUkVTT0xVVElPTixcclxuICBHRVRfQk9VTkRTLFxyXG4gIEdFVF9WQUxVRSxcclxuICBTRVRfQlJPV1NFUl9URVhULFxyXG4gIEdFVF9CUk9XU0VSX1RFWFQsXHJcbiAgQlJPV1NFUl9FWEVDVVRFLFxyXG4gIEdFVF9UT1BfSU5ERVgsXHJcbiAgTUVTU0FHRV9CT1gsXHJcbiAgU0VUX1RJVExFLFxyXG4gIERJUkVDVE9SWV9ESUFMT0dfQk9YLFxyXG4gIEdFVF9DTElFTlRfQk9VTkRTLFxyXG4gIFNFVF9FRElUX1RFWFQsXHJcbiAgSU5TRVJUX0VESVRfVEVYVCxcclxuICBTRVRfU0VMRUNUSU9OLFxyXG4gIEdFVF9TRUxFQ1RJT04sXHJcbiAgR0VUX0NBUkVUX1BPUyxcclxuICBSRUZSRVNIX1BBR0UsXHJcbiAgR0VUX0lTX1RPUF9PRl9URVhUQk9YLFxyXG4gIEdFVF9JU19FTkRfT0ZfVEVYVEJPWCxcclxuICBDTElQQk9BUkRfR0VUX0NPTlRFTlQsXHJcbiAgQ0xJUEJPQVJEX1NFVF9DT05URU5ULFxyXG4gIENMSVBCT0FSRF9QQVNURSxcclxuICBQT1NUX0tFWV9FVkVOVCxcclxuICBQT1NUX0NIQVJfRVZFTlQsXHJcbiAgU0VUX0NVUlNPUixcclxuICBESVNQT1NFX0FMTF9GT1JNUyxcclxuICBHRVRfUk9XU19JTl9QQUdFLFxyXG4gIEdFVF9ISURERU5fUk9XU19DT1VOVF9JTl9UQUJMRSxcclxuICBGSUxFX09QRU5fRElBTE9HX0JPWCxcclxuICBGSUxFX1NBVkVfRElBTE9HX0JPWCxcclxuICBDUkVBVEVfRElBTE9HLFxyXG4gIE9QRU5fRElBTE9HLFxyXG4gIENMT1NFX0RJQUxPRyxcclxuICBTRVRfR0VUX1NVR0dFU1RFRF9WQUxVRV9GT1JfQ0hPSUNFX0NPTlRST0xfT05fVEFHREFUQSxcclxuICBSRUZMRUNUSU9OX0lOVk9LRSxcclxuICBSRUZMRUNUSU9OX1NFVCxcclxuICBHRVRfTEFTVF9XSU5ET1dfU1RBVEUsXHJcbiAgR0VUX0ZSQU1FU19CT1VORFMsXHJcbiAgR0VUX0xJTktFRF9QQVJFTlRfSURYLFxyXG4gIEdFVF9GT1JNX0JPVU5EUyxcclxuICBHRVRfQ09MVU1OU19TVEFURSxcclxuICBHRVRfRk9STV9IQU5ETEUsXHJcbiAgR0VUX0NUUkxfSEFORExFLFxyXG4gIElTX0ZPUk1fQUNUSVZFLFxyXG4gIFNFVF9NQVJLRURfVEVYVF9PTl9SSUNIX0VESVQsXHJcbiAgU0VORF9JTUVfTVNHLFxyXG4gIENBTl9GT0NVUyxcclxuICBJTlZPS0VfT1NDT01NQU5ELFxyXG4gIEdFVF9TRUxFQ1RFRF9JTkRJQ0UsXHJcbiAgU0VUX1NVR0dFU1RFRF9WQUxVRSxcclxuICBNQVBfV0lER0VUX1RPX0dVSV9PQkpFQ1QsXHJcbiAgUkVNT1ZFX0ROX0NPTlRST0xfVkFMVUVfQ0hBTkdFRF9IQU5ETEVSLFxyXG4gIEFERF9ETl9DT05UUk9MX1ZBTFVFX0NIQU5HRURfSEFORExFUixcclxuICBHRVRfUlRGX1ZBTFVFX0JFRk9SRV9FTlRFUklOR19DT05UUk9MLFxyXG4gIEFUVEFDSF9ETktFWV9UT19PQkpFQ1QsXHJcbiAgR0VUX0RWQ09OVFJPTF9QT1NJVElPTl9JU04sXHJcbiAgQ0xFQVJfREFUQV9UQUJMRSxcclxuICBTRVRfREFUQV9TT1VSQ0VfVE9fRFZDT05UUk9MLFxyXG4gIEFDVElWQVRFX0ZPUk0sXHJcbiAgSVNfQ09NQk9fRFJPUFBFRF9ET1dOLFxyXG4gIE9QRU5fRk9STV9ERVNJR05FUixcclxuICBJTlZPS0VfVURQQ09NTUFORCxcclxuICBHRVRfSEFTSU5ERU5ULFxyXG4gIEdFVF9JU19ST1dfRURJVElORyxcclxuICBHRVRfTUFYX1JPV1NfSU5fUEFHSU5BVEVEX1RBQkxFLFxyXG4gIENBTExfSlNcclxufVxyXG5cclxuLy8vIDxzdW1tYXJ5PiBHdWlVdGlscyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIEdVSSBsYXllcjwvc3VtbWFyeT5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEd1aUludGVyYWN0aXZlQmFzZSB7XHJcbiAgX2NvbW1hbmRUeXBlOiBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlID0gMDtcclxuICBUYXNrVGFnOiBzdHJpbmcgPSBudWxsO1xyXG4gIGNvbnRyb2xOYW1lOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICBfeDogbnVtYmVyID0gMDtcclxuICBfeTogbnVtYmVyID0gMDtcclxuICBfY2hhcjogc3RyaW5nID0gbnVsbDtcclxuICBfc3RyOiBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApO1xyXG4gIF9pbnRWYWwxOiBudW1iZXIgPSAwO1xyXG4gIF9saW5lOiBudW1iZXIgPSAwO1xyXG4gIF9vYmoxOiBhbnkgPSBudWxsO1xyXG4gIF9wYXJhbWV0ZXJzOiBhbnlbXSA9IG51bGw7XHJcbiAgX2Jvb2xWYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBfb2JqMjogYW55ID0gbnVsbDtcclxuICBfbWdWYWx1ZTogTWdWYWx1ZSA9IG51bGw7XHJcbiAgX3NldFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYXJndW1lbnRzIDogQXJyYXk8YW55PiA7XHJcbiAgcmVzdWx0U3RyaW5nIDogc3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTtcclxuICBwcml2YXRlIHN0YXRpYyBsb2NrT2JqZWN0OiBhbnkgPSBudWxsO1xyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBDb25zdHJ1Y3RvciA6IHNldHMgdGhlIGNvbnRleHRJRCBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZC5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBSZXR1cm5zIHdoZXRoZXIgY29udHJvbCBpcyBmb2N1c2FibGUgb3Igbm90LiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ3VpTWdDb250cm9sXCI+IHRoZSBjb250cm9sIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQuIDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBjYW5Gb2N1cyhndWlNZ0NvbnRyb2w6IEd1aU1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNBTl9GT0NVUztcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0NvbnRyb2w7XHJcblxyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiAvLy8gUmV0dXJucyB0aGUgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBmb3Igc2VsZWN0ZWQgaW5kaWNlIG9mIGxpc3QgY29udHJvbC4vLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImd1aU1nQ29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgZm9yIHNlbGVjdGVkIGluZGljZSBvZiBsaXN0IGNvbnRyb2w8L3JldHVybnM+XHJcbiAgR2V0U2VsZWN0ZWRJbmRpY2UoZ3VpTWdDb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBzdHJpbmcge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9TRUxFQ1RFRF9JTkRJQ0U7XHJcbiAgICB0aGlzLl9vYmoxID0gZ3VpTWdDb250cm9sO1xyXG5cclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUuc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGluZGVudCBoYXMgYmVlbiBhcHBsaWVkIHRvIFJpY2ggRWRpdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZ3VpTWdDb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIEdldEhhc0luZGVudChndWlNZ0NvbnRyb2w6IEd1aU1nQ29udHJvbCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9IQVNJTkRFTlQ7XHJcbiAgICB0aGlzLl9vYmoxID0gZ3VpTWdDb250cm9sO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBUaGlzIG1ldGhvZGUgaXMgc2V0IFRSVUVcXEZBTFNFIHRoYXQgR3VpVXRpbGVzXFxHZXRWYWx1ZSgpIG1ldGhvZCB3aWxsIGJlIHVzZVxyXG4gIC8vLyB0aGlzIGZhbGcgc2F5IGlmIHRvIHJldHVybiB0aGUgOiAodHJ1ZSkgc3VnZ2VzdGVkIHZhbHVlIG9yIChmYWxzZSl0aGUgcmVhbCB2YWx1ZVxyXG4gIC8vLyB0aGlzIG1ldGhvZCBpcyB1c2UgZm9yIE1HX0FDVF9DVFJMX01PRElGWVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmV0U3VnZ2VzdGVkVmFsdWVcIj48L3BhcmFtPlxyXG4gIHNldEdldFN1Z2dlc3RlZFZhbHVlT2ZDaG9pY2VDb250cm9sT25UYWdEYXRhKGN0cmw6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyLCByZXRTdWdnZXN0ZWRWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9HRVRfU1VHR0VTVEVEX1ZBTFVFX0ZPUl9DSE9JQ0VfQ09OVFJPTF9PTl9UQUdEQVRBO1xyXG4gICAgdGhpcy5fb2JqMiA9IGN0cmw7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuICAgIHRoaXMuX2Jvb2xWYWwgPSByZXRTdWdnZXN0ZWRWYWx1ZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXQgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2JqZWN0XCI+YSByZWZlcmVuY2UgdG8gdGhlIHJlbGV2YW50IG9iamVjdDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmVjdFwiPmEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdGhhdCBvbiByZXR1cm4gd2lsbCBjb250YWluIHRoZSByZXF1ZXN0ZWQgdmFsdWVzIG9uIHN0cmluZzwvcGFyYW0+XHJcbiAgZ2V0VmFsdWUob2JqOiBhbnksIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1ZBTFVFO1xyXG4gICAgdGhpcy5fb2JqMiA9IG9iajtcclxuXHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLm9iajtcclxuICB9XHJcblxyXG5cclxuICBnZXRUb3BJbmRleCh0YWJsZWNvbnRyb2w6IEd1aU1nQ29udHJvbCk6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1RPUF9JTkRFWDtcclxuICAgIHRoaXMuX29iajIgPSB0YWJsZWNvbnRyb2w7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICBnZXRJc1Jvd0VkaXRpbmcodGFibGVjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgaXNMaW5lTW9kZTogYm9vbGVhbik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9JU19ST1dfRURJVElORztcclxuICAgIHRoaXMuX29iajIgPSB0YWJsZWNvbnRyb2w7XHJcbiAgICB0aGlzLl9pbnRWYWwxID0gbGluZTtcclxuICAgIHRoaXMuX2Jvb2xWYWwgPSBpc0xpbmVNb2RlO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fYm9vbFZhbDtcclxuICB9XHJcblxyXG4gIGJyb3dzZXJFeGVjdXRlKGJyb3dzZXJDb250cm9sOiBHdWlNZ0NvbnRyb2wsIHRleHQ6IHN0cmluZywgc3luY0V4ZWM6IGJvb2xlYW4sIGxhbmd1YWdlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5CUk9XU0VSX0VYRUNVVEU7XHJcbiAgICB0aGlzLl9vYmoyID0gYnJvd3NlckNvbnRyb2w7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gdGV4dDtcclxuICAgIHRoaXMuX21nVmFsdWUub2JqID0gbGFuZ3VhZ2U7XHJcblxyXG4gICAgLy8gRm9yIGFzeW5jIGV4ZWN1dGlvbiwgcmV0dXJuIHRydWUgaWYgdGhlIGNvbW1hbmQgaXMgcGFzc2VkIHRvIHRoZSBndWkgdGhyZWFkLlxyXG4gICAgLy8gRm9yIHN5bmMgZXhlY3V0aW9uLCByZXR1cm4gdHJ1ZSBpZiB0aGUgY29tbWFuZCB3YXMgZXhlY3V0ZWQgYnkgdGhlIGd1aSB0aHJlYWQuXHJcbiAgICBpZiAoc3luY0V4ZWMpIHtcclxuICAgICAgdGhpcy5JbnZva2UoKTtcclxuICAgICAgcmV0dXJuIHRoaXMuX21nVmFsdWUuYm9vbFZhbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pk9wZW4gbWVzc2FnZSBib3ggd2l0aCBwYXJlbnQgZm9ybTwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0aXRsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibXNnXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJzdHlsZVwiPnRoZSBzdHlsZSBvZiB0aGUgbWVzc2FnZSBib3ggY2FuIGJlIGZsYWdzIG9mIFN0eWxlcy5NU0dCT1hfeHh4IDwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBtZXNzYWdlIGJveCBzdHlsZSBmcm9tIFN0eWxlcy5NU0dCT1hfWFhYPC9yZXR1cm5zPlxyXG4gIG1lc3NhZ2VCb3godGl0bGU6IHN0cmluZywgbXNnOiBzdHJpbmcsIHN0eWxlOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk1FU1NBR0VfQk9YO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnRpdGxlID0gdGl0bGU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9ICgobXNnID09PSBudWxsKSA/ICcnIDogbXNnKTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3R5bGUgPSBzdHlsZTtcclxuICAgIEV2ZW50cy5SZWZyZXNoVGFibGVzKCk7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUubnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PnNldCB0aXRsZSB0byBicm93c2VyPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRvcE1vc3RGb3JtXCI+dGhlIHBhcmVudCBmb3JtIG9mIHRoZSBtZXNzYWdlIGJveDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGl0bGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gbWVzc2FnZSBib3ggc3R5bGUgZnJvbSBTdHlsZXMuTVNHQk9YX1hYWDwvcmV0dXJucz5cclxuICBzZXRUaXRsZSh0b3BNb3N0Rm9ybTogR3VpTWdGb3JtLCB0aXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX1RJVExFO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9vYmoyID0gdG9wTW9zdEZvcm07XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnRpdGxlID0gKCh0aXRsZSA9PT0gbnVsbCkgPyAnJyA6IHRpdGxlKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy88c3VtbWFyeT5cclxuICAvLy8gSGFuZGxlcyBJbnZva2UgVURQIG9wZXJhdGlvbiBmcm9tIEdVSSB0aHJlYWRcclxuICAvLy88L3N1bW1hcnk+XHJcbiAgLy8vPHBhcmFtIG5hbWU9XCJjb250ZXh0SWRcIj5Db250ZXh0IGlkPC9wYXJhbT5cclxuICBpbnZva2VVRFAoY29udGV4dElkOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklOVk9LRV9VRFBDT01NQU5EO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLm9iaiA9IGNvbnRleHRJZDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5udW1iZXI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjYXB0aW9uXCI+ZGVzY3JpcHRpb24gZm9yIHRoZSBkaWFsb2cgd2luZG93PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXRoXCI+aW5pdGlhbCBwYXRoIHRvIGJyb3dzZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiYlNob3dOZXdGb2xkZXJcIj5zaG91bGQgc2hvdyB0aGUgbmV3IGZvbGRlciBidXR0b24/PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IGRpcmVjdG9yeSBwYXRoIHNlbGVjdGVkIGJ5IHVzZXI8L3JldHVybnM+XHJcbiAgZGlyZWN0b3J5RGlhbG9nQm94KGNhcHRpb246IHN0cmluZywgcGF0aDogc3RyaW5nLCBiU2hvd05ld0ZvbGRlcjogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRElSRUNUT1JZX0RJQUxPR19CT1g7XHJcblxyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmNhcHRpb24gPSBjYXB0aW9uO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5wYXRoID0gcGF0aDtcclxuICAgIHRoaXMuX21nVmFsdWUuYm9vbDEgPSBiU2hvd05ld0ZvbGRlcjtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUuc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBGaWxlIE9wZW4gRGlhbG9nIEJveFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGl0bGVcIj5EaWFsb2cgd2luZG93IGNhcHRpb248L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImluaXREaXJcIj5Jbml0aWFsIGRpcmVjdG9yeTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZmlsdGVyTmFtZXNcIj5maWx0ZXIgc3RyaW5nPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjaGVja0V4aXN0c1wiPnZlcmlmeSBvcGVuZWQgZmlsZSBleGlzdHM8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm11bHRpU2VsZWN0XCI+ZW5hYmxlIHNlbGVjdGluZyBtdWx0aXBsZSBmaWxlczwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPmZpbGUgcGF0aCBzZWxlY3RlZCBieSB1c2VyPC9yZXR1cm5zPlxyXG4gIGZpbGVPcGVuRGlhbG9nQm94KHRpdGxlOiBzdHJpbmcsIGRpck5hbWU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgZmlsdGVyTmFtZXM6IHN0cmluZywgY2hlY2tFeGlzdHM6IGJvb2xlYW4sIG11bHRpU2VsZWN0OiBib29sZWFuKTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5GSUxFX09QRU5fRElBTE9HX0JPWDtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuX21nVmFsdWUucGF0aCA9IGRpck5hbWU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IGZpbGVOYW1lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5maWx0ZXIgPSBmaWx0ZXJOYW1lcztcclxuICAgIHRoaXMuX21nVmFsdWUuYm9vbFZhbCA9IGNoZWNrRXhpc3RzO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sMSA9IG11bHRpU2VsZWN0O1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5zdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEZpbGUgU2F2ZSBEaWFsb2cgQm94XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0aXRsZVwiPmNhcHRpb24gb2YgdGhlIGRpYWxvZyB3aW5kb3c8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImluaXREaXJcIj4gaW5pdGlhbCBkaXJlY3Rvcnk8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZpbHRlck5hbWVzXCI+ZmlsdGVyIHN0cmluZzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGVmYXVsdEV4dGVuc2lvblwiPiBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgZmlsZSBuYW1lPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJvdmVyd3JpdGVQcm9tcHRcIj4gc2hvdWxkIHByb21wdCB3aGVuIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGZpbGU/PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXRGaWxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+ZmlsZSBwYXRoIHNlbGVjdGVkIGJ5IHVzZXI8L3JldHVybnM+XHJcbiAgZmlsZVNhdmVEaWFsb2dCb3godGl0bGU6IHN0cmluZywgZGlyTmFtZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBmaWx0ZXJOYW1lczogc3RyaW5nLCBkZWZhdWx0RXh0ZW5zaW9uOiBzdHJpbmcsIG92ZXJ3cml0ZVByb21wdDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRklMRV9TQVZFX0RJQUxPR19CT1g7XHJcblxyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnRpdGxlID0gdGl0bGU7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnBhdGggPSBkaXJOYW1lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSBmaWxlTmFtZTtcclxuICAgIHRoaXMuX21nVmFsdWUuZmlsdGVyID0gZmlsdGVyTmFtZXM7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLmNhcHRpb24gPSBkZWZhdWx0RXh0ZW5zaW9uO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sMSA9IG92ZXJ3cml0ZVByb21wdDtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUuc3RyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlB1dCBDb21tYW5kIHRvIGNyZWF0ZSBkaWFsb2c8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaGFuZGxlXCI+cmVmZXJlbmNlIHRvIHRoZSBkaWFsb2cgaGFuZGxlcnM8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm9ialR5cGVcIj5wYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBvYmplY3RzIGNvbnN0cnVjdG9yPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJhbWV0ZXJzXCI+PC9wYXJhbT5cclxuICBjcmVhdGVEaWFsb2coaGFuZGxlOiBEaWFsb2dIYW5kbGVyLCBwYXJhbWV0ZXJzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNSRUFURV9ESUFMT0c7XHJcbiAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcclxuICAgIHRoaXMuX29iajIgPSBoYW5kbGU7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlB1dCBDb21tYW5kIHRvIGNsb3NlIGRpYWxvZzwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkaWFsb2dcIj48L3BhcmFtPlxyXG4gIGNsb3NlRGlhbG9nKGhhbmRsZTogRGlhbG9nSGFuZGxlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMT1NFX0RJQUxPRztcclxuICAgIHRoaXMuX29iajIgPSBoYW5kbGU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSB0ZXh0IHRvIHRoZSB0aGUgY29udHJvbFxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPjwvcGFyYW0+XHJcbiAgc2V0RWRpdFRleHQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9FRElUX1RFWFQ7XHJcbiAgICB0aGlzLl9vYmoyID0gY29udHJvbDtcclxuICAgIHRoaXMuX2xpbmUgPSBsaW5lO1xyXG4gICAgdGhpcy5fbWdWYWx1ZSA9IG5ldyBNZ1ZhbHVlKCk7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlLnN0ciA9IHRleHQ7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBpbnNlcnQgdGhlIHRleHQgdG8gdGhlIHRoZSBjb250cm9sIGF0IHRoZSBnaXZlbiBwb3NpdGlvblxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGV4dFwiPjwvcGFyYW0+XHJcbiAgaW5zZXJ0RWRpdFRleHQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIHN0YXJ0UG9zaXRpb246IG51bWJlciwgdGV4dFRvSW5zZXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5JTlNFUlRfRURJVF9URVhUO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSB0ZXh0VG9JbnNlcnQ7XHJcbiAgICB0aGlzLl9pbnRWYWwxID0gc3RhcnRQb3NpdGlvbjtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLmJvb2xWYWw7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PiBzZXQgdGhlIHRleHQgdG8gdGhlIHRoZSBjb250cm9sPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRcIj48L3BhcmFtPlxyXG4gIHNldFNlbGVjdGlvbihjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGNhcmV0UG9zOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfU0VMRUNUSU9OO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuICAgIHRoaXMuX3ggPSBzdGFydDtcclxuICAgIHRoaXMuX3kgPSBlbmQ7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUubnVtYmVyID0gY2FyZXRQb3M7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSB0ZXh0IHRvIHRoZSB0aGUgY29udHJvbDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0ZXh0XCI+PC9wYXJhbT5cclxuICBzZXRTdWdnZXN0ZWRWYWx1ZShjb250cm9sOiBHdWlNZ0NvbnRyb2wsIHN1Z2dlc3RlZFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfU1VHR0VTVEVEX1ZBTFVFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuX21nVmFsdWUuc3RyID0gc3VnZ2VzdGVkVmFsdWU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gZ2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgY2FyZXQgb24gdGhlIGNvbnRyb2xcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGNhcmV0UG9zR2V0KGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ0FSRVRfUE9TO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX21nVmFsdWUubnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZWZyZXNoIHBhZ2VcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFJlZnJlc2hQYWdlKG5hdmlnYXRlVG9Sb290Um91dGU6IGJvb2xlYW4sIGluaXRpYWxVcmw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlJFRlJFU0hfUEFHRTtcclxuICAgIHRoaXMuX2Jvb2xWYWwgPSBuYXZpZ2F0ZVRvUm9vdFJvdXRlO1xyXG4gICAgdGhpcy5fb2JqMSA9IGluaXRpYWxVcmw7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjaGVjayBpZiB0aGUgQ2FyZWwgaXMgUG9zaXRpb25lZCBvbiB0aGUgZmlyc3QgbGluZSBpbiBUZXh0Qm94Ljwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICBnZXRJc1RvcE9mVGV4dEJveChjb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9JU19UT1BfT0ZfVEVYVEJPWDtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBjaGVjayBpZiB0aGUgQ2FyZWwgaXMgUG9zaXRpb25lZCBvbiB0aGUgbGFzdCBsaW5lIGluIFRleHRCb3guPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGdldElzRW5kT2ZUZXh0Qm94KGNvbnRyb2w6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX0VORF9PRl9URVhUQk9YO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUG9zdCBhIGtleSBldmVudCAoZW11bGF0ZSBrZXlzIHByZXNzZWQgYnkgdGhlIHVzZXIpLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwia2V5Q29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwic3RhdGVNYXNrXCI+PC9wYXJhbT5cclxuICBwb3N0S2V5RXZlbnQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIGtleXM6IHN0cmluZywgUG9zdENoYXI6IGJvb2xlYW4sIGZvcmNlTG9naWNhbENvbnRyb2xUZXh0VXBkYXRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUE9TVF9LRVlfRVZFTlQ7XHJcblxyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuICAgIHRoaXMuX21nVmFsdWUgPSBuZXcgTWdWYWx1ZSgpO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5zdHIgPSBrZXlzO1xyXG4gICAgdGhpcy5fbWdWYWx1ZS5ib29sMSA9IGZvcmNlTG9naWNhbENvbnRyb2xUZXh0VXBkYXRlO1xyXG4gICAgdGhpcy5fYm9vbFZhbCA9IFBvc3RDaGFyO1xyXG5cclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNlbmQgV01fQ0hBUiB0byB0aGUgc3BlY2lmaWVkIGNvbnRyb2wgdmlhIEdVSSB0aHJlYWQuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb250cm9sXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjaHJcIj48L3BhcmFtPlxyXG4gIHBvc3RDaGFyRXZlbnQoY29udHJvbDogR3VpTWdDb250cm9sLCBsaW5lOiBudW1iZXIsIGNocjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUE9TVF9DSEFSX0VWRU5UO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuICAgIHRoaXMuX2NoYXIgPSBjaHI7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZGlzcG9zZSBhbGwgdGhlIHNoZWxscy4gbGFzdCBkaXNwb3NlIHdpbGwgY2xvc2UgdGhlIGRpc3BsYXkuPC9zdW1tYXJ5PlxyXG4gIGRpc3Bvc2VBbGxGb3JtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5ESVNQT1NFX0FMTF9GT1JNUztcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGU8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29udHJvbFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRSb3dzSW5QYWdlKGNvbnRyb2w6IEd1aU1nQ29udHJvbCk6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JPV1NfSU5fUEFHRTtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm4gbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgZ2V0TWF4Um93c0luUGFnaW5hdGVkVGFibGUoY29udHJvbDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTUFYX1JPV1NfSU5fUEFHSU5BVEVEX1RBQkxFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGNvbnRyb2w7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgbnVtYmVyIG9mIGhpZGRlbiByb3dzIChwYXJ0aWFsbHkgb3IgZnVsbHkpIGluIHRhYmxlPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0SGlkZGVuUm93c0NvdW50SW5UYWJsZShjb250cm9sOiBHdWlNZ0NvbnRyb2wpOiBudW1iZXIge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9ISURERU5fUk9XU19DT1VOVF9JTl9UQUJMRTtcclxuICAgIHRoaXMuX29iajIgPSBjb250cm9sO1xyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm4gdGhlIGxhc3Qgd2luZG93IHN0YXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldExhc3RXaW5kb3dTdGF0ZShndWlNZ0Zvcm06IEd1aU1nRm9ybSk6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0xBU1RfV0lORE9XX1NUQVRFO1xyXG4gICAgdGhpcy5fb2JqMiA9IGd1aU1nRm9ybTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldHMgbGlua2VkIHBhcmVudCBpZHggb2YgZnJhbWVzZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImZyYW1lc2V0XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldExpbmtlZFBhcmVudElkeChmcmFtZXNldDogR3VpTWdDb250cm9sKTogbnVtYmVyIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTElOS0VEX1BBUkVOVF9JRFg7XHJcbiAgICB0aGlzLl9vYmoyID0gZnJhbWVzZXQ7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9pbnRWYWwxO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGNvbHVtbnMgc3RhdGUgLS0tIGxheWVyLCB3aWR0aCBhbmQgd2lkdGhGb3JGaWxsVGFibGVQbGFjZW1lbnRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImluZGV4XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGdldENvbHVtbnNTdGF0ZSh0YWJsZUN0cmw6IEd1aU1nQ29udHJvbCk6IExpc3Q8bnVtYmVyW10+IHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ09MVU1OU19TVEFURTtcclxuICAgIHRoaXMuX29iajIgPSB0YWJsZUN0cmw7XHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fbWdWYWx1ZS5saXN0T2ZJbnRBcnI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFVwZGF0ZSB0aGUgQ29udHJvbC5UYWdEYXRhLk1hcERhdGEgd2l0aCB0aGUgbmV3T2JqZWN0VG9TZXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cIm5ld09iamVjdFRvU2V0XCI+PC9wYXJhbT5cclxuICBNYXBXaWRnZXQobmV3T2JqZWN0VG9TZXQ6IGFueSk6IHZvaWQ7XHJcbiAgTWFwV2lkZ2V0KCk6IHZvaWQ7XHJcbiAgTWFwV2lkZ2V0KG5ld09iamVjdFRvU2V0PzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSlcclxuICAgICAgdGhpcy5NYXBXaWRnZXRfMChuZXdPYmplY3RUb1NldCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuTWFwV2lkZ2V0XzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgTWFwV2lkZ2V0XzAobmV3T2JqZWN0VG9TZXQ6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk1BUF9XSURHRVRfVE9fR1VJX09CSkVDVDtcclxuICAgIHRoaXMuX29iajEgPSBuZXdPYmplY3RUb1NldDtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBBY3RpdmF0ZSB0aGUgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImd1aU1nRm9ybVwiPjwvcGFyYW0+XHJcbiAgQWN0aXZhdGVGb3JtKGd1aU1nRm9ybTogR3VpTWdGb3JtKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuQUNUSVZBVEVfRk9STTtcclxuICAgIHRoaXMuX29iajEgPSBndWlNZ0Zvcm07XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gcmV0dXJucyBpZiB0aGUgcGFzc2VkIGZvcm0gaXMgYWN0aXZlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIGlzRm9ybUFjdGl2ZShndWlNZ0Zvcm06IEd1aU1nRm9ybSk6IGJvb2xlYW47XHJcbiAgaXNGb3JtQWN0aXZlKCk6IHZvaWQ7XHJcbiAgaXNGb3JtQWN0aXZlKGd1aU1nRm9ybT86IEd1aU1nRm9ybSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXHJcbiAgICAgIHJldHVybiB0aGlzLmlzRm9ybUFjdGl2ZV8wKGd1aU1nRm9ybSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuaXNGb3JtQWN0aXZlXzEoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNGb3JtQWN0aXZlXzAoZ3VpTWdGb3JtOiBHdWlNZ0Zvcm0pOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBHZXRzIHRoZSBSVEYgdmFsdWUgb2YgdGhlIFJURiBlZGl0IGNvbnRyb2wgd2hpY2ggd2FzIHNldCBiZWZvcmUgZW50ZXJpbmcgaXQuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJndWlNZ0NvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0UnRmVmFsdWVCZWZvcmVFbnRlcmluZ0NvbnRyb2woZ3VpTWdDb250cm9sOiBHdWlNZ0NvbnRyb2wsIGxpbmU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JURl9WQUxVRV9CRUZPUkVfRU5URVJJTkdfQ09OVFJPTDtcclxuICAgIHRoaXMuX29iajIgPSBndWlNZ0NvbnRyb2w7XHJcbiAgICB0aGlzLl9saW5lID0gbGluZTtcclxuXHJcbiAgICB0aGlzLl9tZ1ZhbHVlID0gbmV3IE1nVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9tZ1ZhbHVlLnN0cjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gR2V0IFBvc2l0aW9uIElzbiBvZiBSb3cgaW4gRGF0YVRhYmxlIGF0dGFjaGVkIHRvIERWIENvbnRyb2wuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkYXRhVGFibGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0RFZDb250cm9sUG9zaXRpb25Jc24oZGF0YVRhYmxlOiBhbnksIGxpbmU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0RWQ09OVFJPTF9QT1NJVElPTl9JU047XHJcbiAgICB0aGlzLl9vYmoxID0gZGF0YVRhYmxlO1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldCBQb3NpdGlvbiBJc24gb2YgUm93IGluIERhdGFUYWJsZSBhdHRhY2hlZCB0byBEViBDb250cm9sLiA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZGF0YVRhYmxlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJsaW5lXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIENsZWFyRGF0YXRhYmxlKGR2Q29udHJvbDogR3VpTWdDb250cm9sLCBkYXRhVGFibGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMRUFSX0RBVEFfVEFCTEU7XHJcbiAgICB0aGlzLl9vYmoxID0gZHZDb250cm9sO1xyXG4gICAgdGhpcy5fb2JqMiA9IGRhdGFUYWJsZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFNldCBEYXRhc291cmNlIHByb3BlcnR5IG9mIERhdGF2aWV3IGNvbnRyb2wuIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkdkNvbnRyb2xcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImRhdGFUYWJsZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJvcGVydHlOYW1lXCI+PC9wYXJhbT5cclxuICBTZXREYXRhU291cmNlVG9EYXRhVmlld0NvbnRyb2woZHZDb250cm9sOiBHdWlNZ0NvbnRyb2wsIGRhdGFUYWJsZTogYW55LCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tbWFuZFR5cGUgPSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9EQVRBX1NPVVJDRV9UT19EVkNPTlRST0w7XHJcbiAgICB0aGlzLl9vYmoxID0gZHZDb250cm9sO1xyXG4gICAgdGhpcy5fb2JqMiA9IGRhdGFUYWJsZTtcclxuICAgIHRoaXMuX3N0ciA9IHByb3BlcnR5TmFtZTtcclxuICAgIHRoaXMuSW52b2tlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vPHN1bW1hcnk+XHJcbiAgLy8vICBDaGVjayB3aGV0aGVyIHRoZSBjb21ib2JveCBpcyBpbiBhIERyb3BwZWREb3duIHN0YXRlIG9yIG5vdC5cclxuICAvLy88L3N1bW1hcnk+XHJcbiAgLy8vPHBhcmFtIG5hbWU9XCJjb21ib0JveFwiPk1nY29tYm9Cb3ggY29udHJvbDwvcGFyYW0+XHJcbiAgLy8vPHBhcmFtIG5hbWU9XCJsaW5lXCI+ISEuPC9wYXJhbT5cclxuICAvLy88cmV0dXJucz5ib29sPC9yZXR1cm5zPlxyXG4gIElzQ29tYm9Cb3hJbkRyb3BwZWREb3duU3RhdGUoY29tYm9Cb3g6IEd1aU1nQ29udHJvbCwgbGluZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9jb21tYW5kVHlwZSA9IEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSVNfQ09NQk9fRFJPUFBFRF9ET1dOO1xyXG4gICAgdGhpcy5fb2JqMSA9IGNvbWJvQm94O1xyXG4gICAgdGhpcy5fbGluZSA9IGxpbmU7XHJcblxyXG4gICAgdGhpcy5JbnZva2UoKTtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgRXhlY3V0ZUNhbGxKUyhmb3JtICwgZm9ybU5hbWU6IHN0cmluZywgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBhcmdzOiBBcnJheTxhbnk+KTogc3RyaW5nIHtcclxuICAgIHRoaXMuX2NvbW1hbmRUeXBlID0gSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DQUxMX0pTO1xyXG4gICAgdGhpcy5fb2JqMiA9IGZvcm07XHJcbiAgICB0aGlzLmNvbnRyb2xOYW1lID0gZm9ybU5hbWU7XHJcbiAgICB0aGlzLl9zdHIgPSBmdW5jdGlvbk5hbWU7XHJcbiAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XHJcbiAgICB0aGlzLkludm9rZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0U3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBDYWxscyBSdW4oKSBzeW5jaHJvbm91c2x5IHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQuXHJcbiAgLy8vIEJ1dCBiZWZvcmUgdGhhdCwgaXQgZXhlY3V0ZXMgdGhlIEd1aUNvbW1hbmRRdWV1ZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgSW52b2tlKCk6IHZvaWQge1xyXG4gICAgR3VpQ29tbWFuZFF1ZXVlLmdldEluc3RhbmNlKCkuaW52b2tlKCk7XHJcbiAgICBpZiAodGhpcy5fb2JqMiBpbnN0YW5jZW9mIENvbnRyb2xCYXNlKSB7XHJcbiAgICAgIGxldCBjb250cm9sQmFzZTogQ29udHJvbEJhc2UgPSA8Q29udHJvbEJhc2U+dGhpcy5fb2JqMjtcclxuICAgICAgdGhpcy5UYXNrVGFnID0gY29udHJvbEJhc2UuVGFza1RhZztcclxuICAgICAgdGhpcy5jb250cm9sTmFtZSA9IGNvbnRyb2xCYXNlLlVuaXF1ZU5hbWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29iajIgaW5zdGFuY2VvZiBHdWlNZ0Zvcm0pIHtcclxuICAgICAgbGV0IGd1aU1nRm9ybTogR3VpTWdGb3JtID0gPEd1aU1nRm9ybT50aGlzLl9vYmoyO1xyXG4gICAgICB0aGlzLlRhc2tUYWcgPSBndWlNZ0Zvcm0uVGFza1RhZztcclxuICAgIH0gZWxzZVxyXG4gICAgICB0aGlzLlRhc2tUYWcgPSAnMCc7IC8vIGdlbmVyYWwgY29tbWFuZFxyXG5cclxuICAgIFVJQnJpZGdlLmdldEluc3RhbmNlKCkuRXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZCh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gaW1wbGVtZW50cyB0aGUgUnVubmFibGUgcnVuIG1ldGhvZCBmb3IgY2FsbGluZyBEaXNwbGF5LnN5bmNFeGVjKCk8L3N1bW1hcnk+XHJcbiAgLy8gUnVuKCk6IHZvaWQge1xyXG4gIC8vICAgLy8gU2V0cyB0aGUgY3VycmVudENvbnRleHRJRFxyXG4gIC8vICAgbGV0IGNvbnRleHRJREd1YXJkID0gbmV3IENvbnRleHRJREd1YXJkKHRoaXMuX2NvbnRleHRJRCk7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBzd2l0Y2ggKHRoaXMuX2NvbW1hbmRUeXBlKSB7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9GT05UX01FVFJJQ1M6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0Rm9udE1ldHJpY3MoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUkVTT0xVVElPTjpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRSZXNvbHV0aW9uKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0JPVU5EUzpcclxuICAvLyAgICAgICAgIHRoaXMub25Cb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfVkFMVUU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uVmFsdWUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfQlJPV1NFUl9URVhUOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNldEJyb3dzZXJUZXh0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0JST1dTRVJfVEVYVDpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRCcm93c2VyVGV4dCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkJST1dTRVJfRVhFQ1VURTpcclxuICAvLyAgICAgICAgIHRoaXMub25Ccm93c2VyRXhlY3V0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9UT1BfSU5ERVg6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0VG9wSW5kZXgoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5NRVNTQUdFX0JPWDpcclxuICAvLyAgICAgICAgIHRoaXMub25NZXNzYWdlQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRElSRUNUT1JZX0RJQUxPR19CT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uRGlyZWN0b3J5RGlhbG9nQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0NMSUVOVF9CT1VORFM6XHJcbiAgLy8gICAgICAgICB0aGlzLmdldENsaWVudEJvdW5kcygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlNFVF9FRElUX1RFWFQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uU2V0RWRpdFRleHQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5JTlNFUlRfRURJVF9URVhUOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkluc2VydEVkaXRUZXh0KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX1NFTEVDVElPTjpcclxuICAvLyAgICAgICAgIHRoaXMub25TZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfU0VMRUNUSU9OOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkdldCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DQVJFVF9QT1M6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2FyZXRQb3NHZXQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfVE9QX09GX1RFWFRCT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SXNUb3BPZlRleHRCb3goKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfRU5EX09GX1RFWFRCT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SXNFbmRPZlRleHRCb3goKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTElQQk9BUkRfR0VUX0NPTlRFTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2xpcGJvYXJkUmVhZCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMSVBCT0FSRF9TRVRfQ09OVEVOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25DbGlwYm9hcmRXcml0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNMSVBCT0FSRF9QQVNURTpcclxuICAvLyAgICAgICAgIHRoaXMub25DbGlwYm9hcmRQYXN0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlBPU1RfS0VZX0VWRU5UOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblBvc3RLZXlFdmVudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLlBPU1RfQ0hBUl9FVkVOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25Qb3N0Q2hhckV2ZW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX0NVUlNPUjpcclxuICAvLyAgICAgICAgIHRoaXMub25TZXRDdXJzb3IoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5ESVNQT1NFX0FMTF9GT1JNUzpcclxuICAvLyAgICAgICAgIHRoaXMub25EaXNwb3NlQWxsRm9ybXMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUk9XU19JTl9QQUdFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldFJvd3NJblBhZ2UoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSElEREVOX1JPV1NfQ09VTlRfSU5fVEFCTEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SGlkZGVuUm93c0NvdW50SW5UYWJsZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkZJTEVfT1BFTl9ESUFMT0dfQk9YOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkZpbGVPcGVuRGlhbG9nQm94KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRklMRV9TQVZFX0RJQUxPR19CT1g6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uRmlsZVNhdmVEaWFsb2dCb3goKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DUkVBVEVfRElBTE9HOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkNyZWF0ZURpYWxvZygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLk9QRU5fRElBTE9HOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbk9wZW5EaWFsb2coKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5DTE9TRV9ESUFMT0c6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uQ2xvc2VEaWFsb2coKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfR0VUX1NVR0dFU1RFRF9WQUxVRV9GT1JfQ0hPSUNFX0NPTlRST0xfT05fVEFHREFUQTpcclxuICAvLyAgICAgICAgIHRoaXMuT25TZXRHZXRTdWdnZXN0ZWRWYWx1ZU9mQ2hvaWNlQ29udHJvbE9uVGFnRGF0YSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9MQVNUX1dJTkRPV19TVEFURTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRMYXN0V2luZG93U3RhdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRlJBTUVTX0JPVU5EUzpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRGcmFtZXNCb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTElOS0VEX1BBUkVOVF9JRFg6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0TGlua2VkUGFyZW50SWR4KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0ZPUk1fQk9VTkRTOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkdldEZvcm1Cb3VuZHMoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfQ09MVU1OU19TVEFURTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRDb2x1bW5zU3RhdGUoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRk9STV9IQU5ETEU6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0Rm9ybUhhbmRsZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9DVFJMX0hBTkRMRTpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXRDdHJsSGFuZGxlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSVNfRk9STV9BQ1RJVkU6XHJcbiAgLy8gICAgICAgICB0aGlzLmlzRm9ybUFjdGl2ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9EUk9QUEVEX0RBVEE6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0RHJvcHBlZERhdGEoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRFJPUFBFRF9QT0lOVDpcclxuICAvLyAgICAgICAgIHRoaXMub25HZXREcm9wcGVkUG9pbnQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfRFJPUFBFRF9TRUxFQ1RJT046XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0RHJvcHBlZFNlbGVjdGlvbigpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkRST1BfRk9STUFUX1NVUFBPUlRFRDpcclxuICAvLyAgICAgICAgIHRoaXMub25DaGVja0Ryb3BGb3JtYXRQcmVzZW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0lTX0JFR0lOX0RSQUc6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uR2V0SXNCZWdpbkRyYWcoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5BQ1RJVkFURV9ORVhUX09SX1BSRVZJT1VTX01ESV9DSElMRDpcclxuICAvLyAgICAgICAgIHRoaXMuT25BY3RpdmF0ZU5leHRPclByZXZpb3VzTURJQ2hpbGQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRU5EX0lNRV9NU0c6XHJcbiAgLy8gICAgICAgICB0aGlzLm9uU2VuZEltZU1zZygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkNBTl9GT0NVUzpcclxuICAvLyAgICAgICAgIHRoaXMub25DYW5Gb2N1cygpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9TRUxFQ1RFRF9JTkRJQ0U6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0U2VsZWN0ZWRJbmRpY2UoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5TRVRfU1VHR0VTVEVEX1ZBTFVFOlxyXG4gIC8vICAgICAgICAgdGhpcy5vblNldFN1Z2dlc3RlZFZhbHVlKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUFQX1dJREdFVF9UT19HVUlfT0JKRUNUOlxyXG4gIC8vICAgICAgICAgdGhpcy5NYXBXaWRnZXQoKTtcclxuICAvLyAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5SRU1PVkVfRE5fQ09OVFJPTF9WQUxVRV9DSEFOR0VEX0hBTkRMRVI6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uUmVtb3ZlRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlcigpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkFERF9ETl9DT05UUk9MX1ZBTFVFX0NIQU5HRURfSEFORExFUjpcclxuICAvLyAgICAgICAgIHRoaXMuT25BZGRETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX1JURl9WQUxVRV9CRUZPUkVfRU5URVJJTkdfQ09OVFJPTDpcclxuICAvLyAgICAgICAgIHRoaXMuT25HZXRSdGZWYWx1ZUJlZm9yZUVudGVyaW5nQ29udHJvbCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9NRElfQ0hJTERfQ09VTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0TURJQ2hpbGRDb3VudCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkFDVElWQVRFX0ZPUk06XHJcbiAgLy8gICAgICAgICB0aGlzLk9uQWN0aXZhdGVGb3JtKCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuRU5BQkxFX01FTlVfRU5UUlk6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uRW5hYmxlTWVudUVudHJ5KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0hPV19DT05URVhUX01FTlU6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uU2hvd0NvbnRleHRNZW51KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuSVNfQ09NQk9fRFJPUFBFRF9ET1dOOlxyXG4gIC8vICAgICAgICAgdGhpcy5PbklzQ29tYm9Ecm9wcGVkRG93bmRTdGF0ZSgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLklOVk9LRV9VRFBDT01NQU5EOlxyXG4gIC8vICAgICAgICAgdGhpcy5vbkludm9rZVVEUCgpO1xyXG4gIC8vICAgICAgICAgYnJlYWs7XHJcbiAgLy8gICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9IQVNJTkRFTlQ6XHJcbiAgLy8gICAgICAgICB0aGlzLk9uR2V0SGFzSW5kZW50KCk7XHJcbiAgLy8gICAgICAgICBicmVhaztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgY2F0Y2ggKGV4KSB7XHJcbiAgLy8gICAgIGlmIChleCBpbnN0YW5jZW9mIEV4Y2VwdGlvbikge1xyXG4gIC8vICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKGV4KTtcclxuICAvLyAgICAgICB0aHJvdyBleDtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBlbHNlXHJcbiAgLy8gICAgICAgdGhyb3cgZXg7IC8vIFJlc2V0IHRoZSBjdXJyZW50IGNvbnRleHRJRC5cclxuICAvLyAgIH1cclxuICAvLyAgIGZpbmFsbHkge1xyXG4gIC8vICAgICBjb250ZXh0SURHdWFyZC5EaXNwb3NlKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IFJlbW92ZSB0aGUgVmFsdWVDaGFuZ2VkSGFuZGxlci4gPC9zdW1tYXJ5PlxyXG4gIE9uUmVtb3ZlRE5Db250cm9sVmFsdWVDaGFuZ2VkSGFuZGxlcigpOiB2b2lkIHtcclxuICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKCdSZW1vdmVETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyIC0gTm90IEltcGxlbWVudGVkIFlldCcpO1xyXG4gIH1cclxuXHJcbi8vLyA8c3VtbWFyeT4gQWRkIHRoZSBWYWx1ZUNoYW5nZWRIYW5kbGVyLiA8L3N1bW1hcnk+XHJcbiAgT25BZGRETkNvbnRyb2xWYWx1ZUNoYW5nZWRIYW5kbGVyKCk6IHZvaWQge1xyXG4gICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coJ0FkZEROQ29udHJvbFZhbHVlQ2hhbmdlZEhhbmRsZXIgLSBOb3QgSW1wbGVtZW50ZWQgWWV0Jyk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IEdldHMgdGhlIFJURiB2YWx1ZSBvZiB0aGUgUlRGIGVkaXQgY29udHJvbCB3aGljaCB3YXMgc2V0IGJlZm9yZSBlbnRlcmluZyBpdC4gPC9zdW1tYXJ5PlxyXG4gIE9uR2V0UnRmVmFsdWVCZWZvcmVFbnRlcmluZ0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZygnT25HZXRPcmdSdGZWYWx1ZSAtIE5vdCBJbXBsZW1lbnRlZCBZZXQnKTtcclxuICB9XHJcblxyXG4vLy8gbWV0aG9kcyBzdXNwZWN0ZWQgYXMgZGlmZmVyZW50IGJldHdlZW4gdGhlIEd1aUludGVyYWN0aXZlIGNsYXNzZXMgb2YgdGhlIHN0YW5kYXJkL2NvbXBhY3QgZnJhbWV3b3Jrc1xyXG4gIGFic3RyYWN0IG9uR2V0QnJvd3NlclRleHQoKTogdm9pZCA7XHJcblxyXG4gIGFic3RyYWN0IG9uQnJvd3NlckV4ZWN1dGUoKTogdm9pZCA7XHJcblxyXG5cclxuICAvLy88c3VtbWFyeT5cclxuICAvLy8gSGFuZGxlcyBJbnZva2UgVURQIG9wZXJhdGlvbiBmcm9tIEdVSSB0aHJlYWRcclxuICAvLy88L3N1bW1hcnk+XHJcbiAgb25JbnZva2VVRFAoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBvbkRpcmVjdG9yeURpYWxvZ0JveCgpOiB2b2lkIDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBIYW5kbGUgdGhlIGZpbGUgb3BlbiBkaWFsb2cgYm94XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvbkZpbGVPcGVuRGlhbG9nQm94KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBIYW5kbGUgdGhlIGZpbGUgc2F2ZSBkaWFsb2cgYm94XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvbkZpbGVTYXZlRGlhbG9nQm94KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PkNyZWF0ZSBkaWFsb2c8L3N1bW1hcnk+XHJcbiAgb25DcmVhdGVEaWFsb2coKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+T3BlbnMgZGlhbG9nPC9zdW1tYXJ5PlxyXG4gIG9uT3BlbkRpYWxvZygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4vLy8gPHN1bW1hcnk+Q2xvc2VzIGRpYWxvZzwvc3VtbWFyeT5cclxuICBvbkNsb3NlRGlhbG9nKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlRoaXMgZnVuY3Rpb24gcmV0dXJucyBpZiB0aGUgZm9ybSBpcyBhY3RpdmUgb3Igbm90LlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBpc0Zvcm1BY3RpdmVfMSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGRpc3Bvc2UgYWxsIHNoZWxscy48L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkRpc3Bvc2VBbGxGb3JtcygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gY2FsY3VsYXRpbmcgdGhlIGZvbnQgbWV0cmljczwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uR2V0Rm9udE1ldHJpY3MoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuLy8vIDxzdW1tYXJ5PiBHZXRzIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBjb250cm9sLiA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldFJlc29sdXRpb24oKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgY2FyZXQgcG9zaXRpb24gb24gdGhlIGdpdmVuIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkNhcmV0UG9zR2V0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBjaGVjayBpZiB0aGUgY2FyZXQgaXMgcG9zaXRpb25lZCBvbiB0aGUgZmlyc3QgbGluZSBvZiBUZXh0Qm94PC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25HZXRJc1RvcE9mVGV4dEJveCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9ib29sVmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBjaGVjayBpZiB0aGUgY2FyZXQgaXMgcG9zaXRpb25lZCBvbiB0aGUgbGFzdCBsaW5lIG9mIFRleHRCb3g8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldElzRW5kT2ZUZXh0Qm94KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jvb2xWYWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHJldHVybiB0aGUgY2FyZXQgcG9zaXRpb24gb24gdGhlIGdpdmVuIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblNlbGVjdGlvbkdldCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbDwvc3VtbWFyeT5cclxuICAvLyBwcml2YXRlIG9uVmFsdWUoKTogdm9pZCB7XHJcbiAgLy9cclxuICAvLyAgIFVJQnJpZGdlLmdldEluc3RhbmNlKCkuR2V0SW50ZXJhY3RpdmVWYWx1ZSh0aGlzLnRhc2tUYWcsIHRoaXMpO1xyXG4gIC8vXHJcbiAgLy8gICAvL3RoaXMuX21nVmFsdWUuc3RyID0gVUlCcmlkZ2UuZ2V0SW5zdGFuY2UoKS5HZXRDb250cm9sVmFsdWUoY29udHJvbEJhc2UuVGFza1RhZywgKHRoaXMuX2xpbmUpLnRvU3RyaW5nKCksIGNvbnRyb2xCYXNlLlVuaXF1ZU5hbWUpO1xyXG4gIC8vXHJcbiAgLy8gfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgdGV4dCBpbiB0aGUgdGV4dCBjb250cm9sLjwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uU2V0RWRpdFRleHQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IGluc2VydCB0aGUgdGV4dCB0byB0aGUgdGV4dCBjb250cm9sIGF0IGEgZ2l2ZW4gcG9zaXRpb24uPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25JbnNlcnRFZGl0VGV4dCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSB0ZXh0KGh0bWwpIG9uIHRoZSBicm93c2VyIGNvbnRyb2w8L3N1bW1hcnk+XHJcbiAgb25TZXRCcm93c2VyVGV4dCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gc2V0IHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRleHQgY29udHJvbC48L3N1bW1hcnk+XHJcbiAgb25TZXRTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+IHNldCB0aGUgc3VnZ2VzdGVkIHZhbHVlIGZvciBjaG9pY2UgY29udHJvbC48L3N1bW1hcnk+XHJcbiAgb25TZXRTdWdnZXN0ZWRWYWx1ZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gZ2V0IG51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25HZXRSb3dzSW5QYWdlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiByZXR1cm4gdGhlIG51bWJlciBvZiBoaWRkZW4gcm93cyAocGFydGlhbGx5IG9yIGZ1bGx5KSBpbiB0YWJsZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgb25HZXRIaWRkZW5Sb3dzQ291bnRJblRhYmxlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGFibGUgdG9wIGluZGV4XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvbkdldFRvcEluZGV4KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBnZXQgdGhlIENsaWVudCBib3VuZHMgb2YgdGhlIG9iamVjdDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGdldENsaWVudEJvdW5kc18xKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gcG9zdCBhIGtleSBjb21iaW5hdGlvbi4gVGhpcyBlbXVsYXRlcyBrZXlzIHByZXNzZWQgYnkgdGhlIHVzZXIuIFNldHRpbmcgdGhlIGRhdGEgaW4gdGhlIHdpZGdldCB0byBpZ25vcmVcclxuICAvLy8ga2V5IGRvd24sIHdpbGwgY2F1c2UgdGhlIE9TIHRvIGhhbmRsZSB0aGUgZXZlbnQgaW5zdGVhZCBvZiB1cy5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIG9uUG9zdEtleUV2ZW50KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBTZW5kIFdNX0NIQVIgbWVzc2FnZSB0byBDb21ib0JveCBhbmQgTGlzdEJveC4gVGhpcyBlbXVsYXRlcyBrZXlzIHByZXNzZWQgYnkgdGhlIHVzZXIuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBvblBvc3RDaGFyRXZlbnQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgT25TZXRHZXRTdWdnZXN0ZWRWYWx1ZU9mQ2hvaWNlQ29udHJvbE9uVGFnRGF0YSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gKEtvcmVhbiBJTUUpIHNlbmQgTUdfSU1FX1hYWCBtZXNzYWdlIHRvIE1nVGV4dEJveCA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblNlbmRJbWVNc2coKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+c2V0IGN1cnNvciBvbiBmb3Jtczwvc3VtbWFyeT5cclxuICBvblNldEN1cnNvcigpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT50cnVlIGlmIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIGRlbGVnYXRlZCB0byB0aGUgR1VJIHRocmVhZDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgaW52b2tlUmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB3aW5kb3dTdGF0ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldExhc3RXaW5kb3dTdGF0ZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGdldCBwYXJlbnQgbGluayBJZHggb2YgdGhpcyBmcmFtZXNldFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkdldExpbmtlZFBhcmVudElkeCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLzxzdW1tYXJ5PmdldCBsYXllciBvZiB0aGUgY29sdW1uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uR2V0Q29sdW1uc1N0YXRlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gSW5kaWNhdGVzIGlmIGEgY29udHJvbCBjYW4gYmUgc2VsZWN0ZWQuIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uQ2FuRm9jdXMoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEdldCB0aGUgc2VsZWN0ZWQgaW5kaWNlIG9mIHRoZSBsaXN0Ym94IGNvbnRyb2wuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIE9uR2V0U2VsZWN0ZWRJbmRpY2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBjb250cm9sIGhhcyBpbmRlbnQgYXBwbGllZFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBwcml2YXRlIE9uR2V0SGFzSW5kZW50KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBNYXAgV2lkZ2V0IHRvIEd1aSBvYmplY3QgKE1nRm9ybS9NZ1N0YXR1c0Jhci9NZ1N0YXR1c1BhbmUpIGZvciBNREkgZnJhbWUgZm9yIGEgcGFyYWxsZWwgY29udGV4dFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBNYXBXaWRnZXRfMSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXQgUG9zaXRpb25Jc24gb2YgRGF0YVJvdyBGcm9tIERhdGFUYWJsZSBhdHRhY2hlZCB0byBEVkNvbnRyb2wuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBPbkdldERWQ29udHJvbFBvc2l0aW9uSXNuKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBBY3RpdmF0ZSB0aGUgZm9ybS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIE9uQWN0aXZhdGVGb3JtKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLzxzdW1tYXJ5PlxyXG4gIC8vLyAgQ2hlY2sgd2hldGhlciB0aGUgY29tYm9ib3ggaXMgaW4gZHJvcHBlZCBkb3duIHN0YXRlLlxyXG4gIC8vLzwvc3VtbWFyeT5cclxuICAvLy88cmV0dXJucz4hIS48L3JldHVybnM+XHJcbiAgT25Jc0NvbWJvRHJvcHBlZERvd25kU3RhdGUoKTogdm9pZCB7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3VpSW50ZXJhY3RpdmUgZXh0ZW5kcyBHdWlJbnRlcmFjdGl2ZUJhc2Uge1xyXG5cclxuICBPbkdldFJ0ZlZhbHVlQmVmb3JlRW50ZXJpbmdDb250cm9sKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgb25HZXRCcm93c2VyVGV4dCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG9uQnJvd3NlckV4ZWN1dGUoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBvbkRpcmVjdG9yeURpYWxvZ0JveCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcbn1cclxuIl19