@sapui5/sap.fe.core 1.103.0 → 1.104.1

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 (162) hide show
  1. package/package.json +3 -3
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +12 -5
  4. package/src/sap/fe/core/AppComponent.ts +9 -3
  5. package/src/sap/fe/core/AppStateHandler.js +74 -62
  6. package/src/sap/fe/core/AppStateHandler.ts +24 -29
  7. package/src/sap/fe/core/CommonUtils.js +10 -34
  8. package/src/sap/fe/core/CommonUtils.ts +10 -43
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  10. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  11. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +582 -207
  12. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +237 -88
  13. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -4
  14. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +4 -3
  15. package/src/sap/fe/core/controllerextensions/EditFlow.js +257 -219
  16. package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -108
  17. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +80 -54
  18. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +40 -44
  19. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +28 -26
  20. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
  21. package/src/sap/fe/core/controllerextensions/InternalRouting.js +89 -47
  22. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +85 -48
  23. package/src/sap/fe/core/controllerextensions/MassEdit.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  26. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
  27. package/src/sap/fe/core/controllerextensions/Share.js +153 -122
  28. package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
  29. package/src/sap/fe/core/controllerextensions/ViewState.js +139 -73
  30. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -90
  31. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -5
  32. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +5 -3
  33. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +18 -13
  34. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +17 -15
  35. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +88 -17
  36. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +105 -31
  37. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -4
  38. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +28 -32
  39. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +10 -17
  40. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -6
  41. package/src/sap/fe/core/controls/FileWrapper.js +6 -1
  42. package/src/sap/fe/core/controls/FileWrapper.ts +4 -0
  43. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
  44. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  45. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  46. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
  47. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
  48. package/src/sap/fe/core/converters/ConverterContext.js +1 -1
  49. package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
  50. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  51. package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
  52. package/src/sap/fe/core/converters/MetaModelConverter.js +15 -4
  53. package/src/sap/fe/core/converters/MetaModelConverter.ts +10 -3
  54. package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
  55. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  56. package/src/sap/fe/core/converters/common/AnnotationConverter.js +11 -11
  57. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  58. package/src/sap/fe/core/converters/controls/Common/Chart.ts +4 -8
  59. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +4 -2
  60. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +25 -30
  61. package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
  62. package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -14
  63. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  64. package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
  65. package/src/sap/fe/core/converters/controls/Common/Table.js +8 -15
  66. package/src/sap/fe/core/converters/controls/Common/Table.ts +14 -30
  67. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  68. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -4
  69. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  70. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
  71. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  72. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -2
  73. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  74. package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -3
  75. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  76. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  77. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  78. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
  79. package/src/sap/fe/core/converters/templates/ListReportConverter.js +27 -15
  80. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -27
  81. package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
  82. package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
  83. package/src/sap/fe/core/helpers/BindingToolkit.js +36 -13
  84. package/src/sap/fe/core/helpers/BindingToolkit.ts +37 -11
  85. package/src/sap/fe/core/helpers/ClassSupport.js +30 -2
  86. package/src/sap/fe/core/helpers/ClassSupport.ts +23 -0
  87. package/src/sap/fe/core/helpers/MassEditHelper.js +94 -89
  88. package/src/sap/fe/core/helpers/MassEditHelper.ts +128 -157
  89. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  90. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  91. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  92. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  93. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  94. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  95. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  96. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  97. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  98. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  99. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  100. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  101. package/src/sap/fe/core/library.js +1 -1
  102. package/src/sap/fe/core/messagebundle.properties +4 -37
  103. package/src/sap/fe/core/messagebundle_ar.properties +20 -40
  104. package/src/sap/fe/core/messagebundle_bg.properties +20 -40
  105. package/src/sap/fe/core/messagebundle_ca.properties +20 -40
  106. package/src/sap/fe/core/messagebundle_cs.properties +20 -40
  107. package/src/sap/fe/core/messagebundle_cy.properties +20 -40
  108. package/src/sap/fe/core/messagebundle_da.properties +20 -40
  109. package/src/sap/fe/core/messagebundle_de.properties +20 -40
  110. package/src/sap/fe/core/messagebundle_el.properties +20 -40
  111. package/src/sap/fe/core/messagebundle_en.properties +19 -39
  112. package/src/sap/fe/core/messagebundle_en_GB.properties +19 -39
  113. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -39
  114. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +19 -39
  115. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +22 -18
  116. package/src/sap/fe/core/messagebundle_es.properties +22 -42
  117. package/src/sap/fe/core/messagebundle_es_MX.properties +20 -40
  118. package/src/sap/fe/core/messagebundle_et.properties +20 -40
  119. package/src/sap/fe/core/messagebundle_fi.properties +20 -40
  120. package/src/sap/fe/core/messagebundle_fr.properties +21 -41
  121. package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -40
  122. package/src/sap/fe/core/messagebundle_hi.properties +20 -40
  123. package/src/sap/fe/core/messagebundle_hr.properties +20 -40
  124. package/src/sap/fe/core/messagebundle_hu.properties +20 -40
  125. package/src/sap/fe/core/messagebundle_id.properties +20 -40
  126. package/src/sap/fe/core/messagebundle_it.properties +20 -40
  127. package/src/sap/fe/core/messagebundle_iw.properties +20 -40
  128. package/src/sap/fe/core/messagebundle_ja.properties +20 -40
  129. package/src/sap/fe/core/messagebundle_kk.properties +20 -40
  130. package/src/sap/fe/core/messagebundle_ko.properties +25 -45
  131. package/src/sap/fe/core/messagebundle_lt.properties +20 -40
  132. package/src/sap/fe/core/messagebundle_lv.properties +20 -40
  133. package/src/sap/fe/core/messagebundle_ms.properties +20 -40
  134. package/src/sap/fe/core/messagebundle_nl.properties +22 -42
  135. package/src/sap/fe/core/messagebundle_no.properties +20 -40
  136. package/src/sap/fe/core/messagebundle_pl.properties +21 -41
  137. package/src/sap/fe/core/messagebundle_pt.properties +21 -41
  138. package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -40
  139. package/src/sap/fe/core/messagebundle_ro.properties +20 -40
  140. package/src/sap/fe/core/messagebundle_ru.properties +20 -40
  141. package/src/sap/fe/core/messagebundle_sh.properties +20 -40
  142. package/src/sap/fe/core/messagebundle_sk.properties +20 -40
  143. package/src/sap/fe/core/messagebundle_sl.properties +20 -40
  144. package/src/sap/fe/core/messagebundle_sv.properties +20 -40
  145. package/src/sap/fe/core/messagebundle_th.properties +20 -40
  146. package/src/sap/fe/core/messagebundle_tr.properties +20 -40
  147. package/src/sap/fe/core/messagebundle_uk.properties +20 -40
  148. package/src/sap/fe/core/messagebundle_vi.properties +20 -40
  149. package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -40
  150. package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -40
  151. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +96 -68
  152. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +58 -59
  153. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -7
  154. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
  155. package/src/sap/fe/core/services/ShellServicesFactory.js +21 -1
  156. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
  157. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +211 -190
  158. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +114 -120
  159. package/src/sap/fe/core/templating/FilterHelper.js +7 -7
  160. package/src/sap/fe/core/templating/FilterHelper.ts +5 -5
  161. package/src/sap/fe/core/templating/UIFormatters.js +5 -3
  162. package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
@@ -524,8 +524,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
524
524
  ;
525
525
 
526
526
  _proto._pushNewState = function _pushNewState(oNewState, bRebuildOnly, bPreserveHistory, bDisableHistoryPreservation) {
527
- var _this4 = this;
528
-
529
527
  var sCurrentHash = this.getHash();
530
528
  var lastIndex = this._oManagedHistory.length - 1;
531
529
  var iPopCount = bRebuildOnly ? 1 : 0; // 1. Do some cleanup in the managed history : in case the user has navigated back in the browser history, we need to remove
@@ -582,12 +580,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
582
580
 
583
581
  this.sIAppStateKey = findAppStateInHash(oNewState.hash);
584
582
 
585
- if (this.fclEnabled && this.sIAppStateKey) {
586
- // In case of FCL, the new app state needs to be applied to the whole history
587
- this._oManagedHistory.forEach(function (oManagedState) {
588
- oManagedState.hash = setAppStateInHash(oManagedState.hash, _this4.sIAppStateKey);
589
- });
590
- } else if (!this.fclEnabled && oLastRemovedItem) {
583
+ if (!this.fclEnabled && oLastRemovedItem) {
591
584
  var sPreviousIAppStateKey = findAppStateInHash(oLastRemovedItem.hash);
592
585
 
593
586
  var oComparisonStateResult = this._compareCacheStates(oLastRemovedItem, oNewState); // if current state doesn't contain a i-appstate and this state should replace a state containing a iAppState
@@ -679,14 +672,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
679
672
  ;
680
673
 
681
674
  _proto._rebuildBrowserHistory = function _rebuildBrowserHistory(oHistoryAction, bRebuildOnly) {
682
- var _this5 = this;
675
+ var _this4 = this;
683
676
 
684
677
  // eslint-disable-next-line @typescript-eslint/no-this-alias
685
678
  var that = this;
686
679
  return new Promise(function (resolve) {
687
- _this5.bIsRebuildHistoryRunning = true;
688
- var oTargetState = _this5._oManagedHistory[_this5._oManagedHistory.length - 1],
689
- newLevel = _this5._oManagedHistory.length - 1;
680
+ _this4.bIsRebuildHistoryRunning = true;
681
+ var oTargetState = _this4._oManagedHistory[_this4._oManagedHistory.length - 1],
682
+ newLevel = _this4._oManagedHistory.length - 1;
690
683
 
691
684
  function replaceAsync() {
692
685
  if (!bRebuildOnly) {
@@ -757,7 +750,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
757
750
  break;
758
751
 
759
752
  case "back-replace":
760
- _this5._disableEventOnHashChange();
753
+ _this4._disableEventOnHashChange();
761
754
 
762
755
  window.addEventListener("popstate", backReplaceAsync);
763
756
  history.go(-oHistoryAction.steps);
@@ -765,7 +758,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
765
758
 
766
759
  default:
767
760
  // No navigation
768
- _this5.bIsRebuildHistoryRunning = false;
761
+ _this4.bIsRebuildHistoryRunning = false;
769
762
  resolve(false);
770
763
  // no navigation --> resolve to false
771
764
  }
@@ -783,7 +776,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
783
776
  };
784
777
 
785
778
  _proto.hashGuard = function hashGuard() {
786
- var _this6 = this;
779
+ var _this5 = this;
787
780
 
788
781
  var sHash = window.location.hash;
789
782
 
@@ -811,7 +804,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
811
804
  this._pushNewState(oNewState, false, false, true);
812
805
 
813
806
  setTimeout(function () {
814
- _this6._bDelayedRebuild = false;
807
+ _this5._bDelayedRebuild = false;
815
808
  }, 0);
816
809
  }
817
810
  }
@@ -934,4 +927,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
934
927
  }(BaseObject)) || _class);
935
928
  return RouterProxy;
936
929
  }, false);
937
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnRzIl0sIm5hbWVzIjpbImVudW1TdGF0ZSIsIkVRVUFMIiwiQ09NUEFUSUJMRSIsIkFOQ0VTVE9SIiwiRElGRkVSRU5UIiwiZW51bVVSTFBhcmFtcyIsIkxBWU9VVFBBUkFNIiwiSUFQUFNUQVRFUEFSQU0iLCJjcmVhdGVHdWFyZEZyb21IYXNoIiwic0d1YXJkSGFzaCIsIl9ndWFyZEhhc2giLCJyZXBsYWNlIiwiY2hlY2siLCJzSGFzaCIsImluZGV4T2YiLCJmaW5kQXBwU3RhdGVJbkhhc2giLCJhQXBwU3RhdGUiLCJtYXRjaCIsIlJlZ0V4cCIsImxlbmd0aCIsInJlbW92ZUFwcFN0YXRlSW5IYXNoIiwic2V0QXBwU3RhdGVJbkhhc2giLCJzQXBwU3RhdGVLZXkiLCJzTmV3SGFzaCIsIlJvdXRlclByb3h5IiwiZGVmaW5lVUk1Q2xhc3MiLCJiSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmciLCJiSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5IiwiYklzR3VhcmRDcm9zc0FsbG93ZWQiLCJzSUFwcFN0YXRlS2V5IiwiX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvIiwiX2JBcHBseVJlc3RvcmUiLCJfYkRlbGF5ZWRSZWJ1aWxkIiwiX3BhdGhNYXBwaW5ncyIsImluaXQiLCJvQXBwQ29tcG9uZW50IiwiaXNmY2xFbmFibGVkIiwiZ2V0U2VydmljZSIsInRoZW4iLCJfb1NoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW5pdFJhdyIsImdldFJvdXRlciIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJmZUxldmVsIiwic3RhdGUiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImZjbEVuYWJsZWQiLCJfZm5CbG9ja2luZ05hdkZpbHRlciIsIl9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIiLCJiaW5kIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsIl9mbkhhc2hHdWFyZCIsImhhc2hHdWFyZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfYkRpc2FibGVPbkhhc2hDaGFuZ2UiLCJfYklnbm9yZVJlc3RvcmUiLCJfYkZvcmNlRm9jdXMiLCJkZXN0cm95IiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib1JvdXRlciIsIl9vUm91dGVyIiwiX29NYW5hZ2VkSGlzdG9yeSIsIl9vTmF2aWdhdGlvbkd1YXJkIiwic0N1cnJlbnRBcHBIYXNoIiwiZ2V0SGFzaCIsInB1c2giLCJfZXh0cmFjdFN0YXRlRnJvbUhhc2giLCJnZXRIYXNoQ2hhbmdlciIsImlzRm9jdXNGb3JjZWQiLCJzZXRGb2N1c0ZvcmNlZCIsImJGb3JjZWQiLCJyZW1vdmVJQXBwU3RhdGVLZXkiLCJuYXZUb0hhc2giLCJiUHJlc2VydmVIaXN0b3J5IiwiYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSIsImJGb3JjZUZvY3VzIiwiYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsIl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsIndhaXRGb3IiLCJ1bmRlZmluZWQiLCJfaW50ZXJuYWxOYXZUb0hhc2giLCJjaGVja0hhc2hXaXRoR3VhcmQiLCJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiY29uZmlybSIsImdldFRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9OZXdTdGF0ZSIsImFDdXJyZW50SGFzaEtleXMiLCJfZXh0cmFjdEtleXNGcm9tSGFzaCIsImtleXMiLCJldmVyeSIsImtleSIsImluZGV4Iiwib0hpc3RvcnlBY3Rpb24iLCJfcHVzaE5ld1N0YXRlIiwiX3JlYnVpbGRCcm93c2VySGlzdG9yeSIsInJlc3RvcmVIaXN0b3J5Iiwic1RhcmdldEhhc2giLCJuYXZCYWNrIiwic0N1cnJlbnRIYXNoIiwic1ByZXZpb3VzSGFzaCIsImkiLCJoYXNoIiwiYmFjayIsIm5hdlRvIiwic1JvdXRlTmFtZSIsIm9QYXJhbWV0ZXJzIiwiZ2V0VVJMIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJJc1N0aWNreU1vZGUiLCJleGl0RnJvbUFwcCIsImJhY2tUb1ByZXZpb3VzQXBwIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwic3Vic3RyaW5nIiwib0xvY2FsR3VhcmQiLCJpc05hdmlnYXRpb25GaW5hbGl6ZWQiLCJzZXROYXZpZ2F0aW9uR3VhcmQiLCJkaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiaGFzTmF2aWdhdGlvbkd1YXJkIiwiaXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlciIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsInJlc29sdmVSb3V0ZU1hdGNoIiwiU3luY2hyb25pemF0aW9uIiwic0hhc2hOb1BhcmFtcyIsInNwbGl0IiwiYVRva2VucyIsImFLZXlzIiwiZm9yRWFjaCIsInNUb2tlbiIsInJlZ2V4S2V5IiwidGVzdCIsIm9TdGF0ZSIsImFMYXlvdXQiLCJzTGF5b3V0Iiwic2NyZWVuTW9kZSIsImJSZWJ1aWxkT25seSIsImJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbiIsImxhc3RJbmRleCIsImlQb3BDb3VudCIsInBvcCIsInByZXNlcnZlZCIsIm9MYXN0UmVtb3ZlZEl0ZW0iLCJvVG9wU3RhdGUiLCJfY29tcGFyZUNhY2hlU3RhdGVzIiwib01hbmFnZWRTdGF0ZSIsInNQcmV2aW91c0lBcHBTdGF0ZUtleSIsIm9Db21wYXJpc29uU3RhdGVSZXN1bHQiLCJiSGFzU2FtZUhhc2giLCJ0eXBlIiwic3RlcHMiLCJfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlIiwic3RvcCIsIl9lbmFibGVFdmVudE9uSGFzaENoYW5nZSIsImJJZ25vcmVDdXJyZW50SGFzaCIsImluaXRpYWxpemUiLCJ0aGF0Iiwib1RhcmdldFN0YXRlIiwibmV3TGV2ZWwiLCJyZXBsYWNlQXN5bmMiLCJyZXBsYWNlSGFzaCIsInNldFRpbWVvdXQiLCJiYWNrUmVwbGFjZUFzeW5jIiwiYmFja0FzeW5jIiwic2V0SGFzaCIsImdvIiwiZ2V0TGFzdEhpc3RvcnlFbnRyeSIsInNldFBhdGhNYXBwaW5nIiwibWFwcGluZ3MiLCJmaWx0ZXIiLCJtYXBwaW5nIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJmaW5kIiwibSIsImFIYXNoU3BsaXQiLCJzQXBwSGFzaCIsIm9TdGF0ZTEiLCJvU3RhdGUyIiwiZXF1YWwiLCJjaGVja0lmQmFja0lzT3V0T2ZHdWFyZCIsInNQcmVzZW50SGFzaCIsInNQcmV2SGFzaCIsIm9TcGxpdEhhc2giLCJzcGxpdEhhc2giLCJhcHBTcGVjaWZpY1JvdXRlIiwiVVJJIiwiZGVjb2RlIiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsIm9DdXJyZW50U3RhdGUiLCJvUHJldmlvdXNTdGF0ZSIsIkJhc2VPYmplY3QiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVNBLE1BQU1BLFNBQVMsR0FBRztBQUNqQkMsSUFBQUEsS0FBSyxFQUFFLENBRFU7QUFFakJDLElBQUFBLFVBQVUsRUFBRSxDQUZLO0FBR2pCQyxJQUFBQSxRQUFRLEVBQUUsQ0FITztBQUlqQkMsSUFBQUEsU0FBUyxFQUFFO0FBSk0sR0FBbEI7QUFNQSxNQUFNQyxhQUFhLEdBQUc7QUFDckJDLElBQUFBLFdBQVcsRUFBRSxRQURRO0FBRXJCQyxJQUFBQSxjQUFjLEVBQUU7QUFGSyxHQUF0QjtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxXQUFTQyxtQkFBVCxDQUE2QkMsVUFBN0IsRUFBaUQ7QUFDaEQsV0FBTztBQUNOQyxNQUFBQSxVQUFVLEVBQUVELFVBQVUsQ0FBQ0UsT0FBWCxDQUFtQixXQUFuQixFQUFnQyxFQUFoQyxDQUROO0FBQzJDO0FBQ2pEQyxNQUFBQSxLQUFLLEVBQUUsVUFBVUMsS0FBVixFQUFzQjtBQUM1QixlQUFPQSxLQUFLLENBQUNDLE9B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SUFBekIsS0FBa0M4RSxZQUF0QyxFQUFvRDtBQUNuREMsWUFBQUEsU0FBUyxHQUFHLEtBQUs1SCxnQkFBTCxDQUFzQjRDLENBQUMsR0FBRyxDQUExQixFQUE2QkMsSUFBekM7QUFDQTtBQUNBO0FBQ0Q7O0FBRUQsZUFBTyxDQUFDK0UsU0FBRCxJQUFjLENBQUMsS0FBS3ZHLGtCQUFMLENBQXdCdUcsU0FBeEIsQ0FBdEI7QUFDQTs7QUFDRCxhQUFPLEtBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7OztXQUNDTSx5QixHQUFBLHFDQUE0QjtBQUMzQixVQUFJLEtBQUtsSSxnQkFBTCxDQUFzQnJELE1BQXRCLEdBQStCLENBQW5DLEVBQXNDO0FBQ3JDLGVBQU8sS0FBUDtBQUNBOztBQUVELFVBQU13TCxhQUFhLEdBQUcsS0FBS25JLGdCQUFMLENBQXNCLEtBQUtBLGdCQUFMLENBQXNCckQsTUFBdEIsR0FBK0IsQ0FBckQsQ0FBdEI7QUFDQSxVQUFNeUwsY0FBYyxHQUFHLEtBQUtwSSxnQkFBTCxDQUFzQixLQUFLQSxnQkFBTCxDQUFzQnJELE1BQXRCLEdBQStCLENBQXJELENBQXZCO0FBRUEsYUFBT3dMLGFBQWEsQ0FBQ3RGLElBQWQsQ0FBbUJzQixLQUFuQixDQUF5QixHQUF6QixFQUE4QixDQUE5QixNQUFxQ2lFLGNBQWMsQ0FBQ3ZGLElBQWYsQ0FBb0JzQixLQUFwQixDQUEwQixHQUExQixFQUErQixDQUEvQixDQUE1QztBQUNBLEs7OztJQS92QndCa0UsVTtTQWt3QlhyTCxXIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFN5bmNocm9uaXphdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TeW5jaHJvbml6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgVVJJIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9VUklcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5jb25zdCBlbnVtU3RhdGUgPSB7XG5cdEVRVUFMOiAwLFxuXHRDT01QQVRJQkxFOiAxLFxuXHRBTkNFU1RPUjogMixcblx0RElGRkVSRU5UOiAzXG59O1xuY29uc3QgZW51bVVSTFBhcmFtcyA9IHtcblx0TEFZT1VUUEFSQU06IFwibGF5b3V0XCIsXG5cdElBUFBTVEFURVBBUkFNOiBcInNhcC1pYXBwLXN0YXRlXCJcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIEhhc2hHdWFyZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNHdWFyZEhhc2ggVGhlIGhhc2ggdXNlZCBmb3IgdGhlIGd1YXJkXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBoYXNoIGd1YXJkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUd1YXJkRnJvbUhhc2goc0d1YXJkSGFzaDogc3RyaW5nKSB7XG5cdHJldHVybiB7XG5cdFx0X2d1YXJkSGFzaDogc0d1YXJkSGFzaC5yZXBsYWNlKC9cXD9bXlxcP10qJC8sIFwiXCIpLCAvLyBSZW1vdmUgcXVlcnkgcGFydFxuXHRcdGNoZWNrOiBmdW5jdGlvbiAoc0hhc2g6IGFueSkge1xuXHRcdFx0cmV0dXJuIHNIYXNoLmluZGV4T2YodGhpcy5fZ3VhcmRIYXNoKSA9PT0gMDtcblx0XHR9XG5cdH07XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGlBcHBTdGF0ZSBwYXJ0IGZyb20gYSBoYXNoIChvciBudWxsIGlmIG5vdCBmb3VuZCkuXG4gKlxuICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoXG4gKiBAcmV0dXJucyBUaGUgaUFwcFN0YXRlIHBhcnQgb2YgdGhlIGhhc2hcbiAqL1xuZnVuY3Rpb24gZmluZEFwcFN0YXRlSW5IYXNoKHNIYXNoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblx0Y29uc3QgYUFwcFN0YXRlID0gc0hhc2gubWF0Y2gobmV3IFJlZ0V4cChgXFxcXD8uKiR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09KFteJl0qKWApKTtcblx0cmV0dXJuIGFBcHBTdGF0ZSAmJiBhQXBwU3RhdGUubGVuZ3RoID4gMSA/IGFBcHBTdGF0ZVsxXSA6IG51bGw7XG59XG4vKipcbiAqIFJldHVybnMgYSBoYXNoIHdpdGhvdXQgaXRzIGlBcHBTdGF0ZSBwYXJ0LlxuICpcbiAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaFxuICogQHJldHVybnMgVGhlIGhhc2ggd2l0aG91dCB0aGUgaUFwcFN0YXRlXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFwcFN0YXRlSW5IYXNoKHNIYXNoOiBzdHJpbmcpIHtcblx0cmV0dXJuIHNIYXNoLnJlcGxhY2UobmV3IFJlZ0V4cChgWyY/XSoke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PVteJl0qYCksIFwiXCIpO1xufVxuLyoqXG4gKiBBZGRzIGFuIGlBcHBTdGF0ZSBpbnNpZGUgYSBoYXNoIChvciByZXBsYWNlcyBhbiBleGlzdGluZyBvbmUpLlxuICpcbiAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaFxuICogQHBhcmFtIHNBcHBTdGF0ZUtleSBUaGUgaUFwcFN0YXRlIHRvIGFkZFxuICogQHJldHVybnMgVGhlIGhhc2ggd2l0aCB0aGUgYXBwIHN0YXRlXG4gKi9cbmZ1bmN0aW9uIHNldEFwcFN0YXRlSW5IYXNoKHNIYXNoOiBhbnksIHNBcHBTdGF0ZUtleTogYW55KSB7XG5cdGxldCBzTmV3SGFzaDtcblxuXHRpZiAoc0hhc2guaW5kZXhPZihlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNKSA+PSAwKSB7XG5cdFx0Ly8gSWYgdGhlcmUncyBhbHJlYWR5IGFuIGlBcHBTdGF0ZSBwYXJhbWV0ZXIgaW4gdGhlIGhhc2gsIHJlcGxhY2UgaXRcblx0XHRzTmV3SGFzaCA9IHNIYXNoLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT1bXiZdKmApLCBgJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT0ke3NBcHBTdGF0ZUtleX1gKTtcblx0fSBlbHNlIHtcblx0XHQvLyBBZGQgdGhlIGlBcHBTdGF0ZSBwYXJhbWV0ZXIgaW4gdGhlIGhhc2hcblx0XHRpZiAoc0hhc2guaW5kZXhPZihcIj9cIikgPCAwKSB7XG5cdFx0XHRzTmV3SGFzaCA9IGAke3NIYXNofT9gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTmV3SGFzaCA9IGAke3NIYXNofSZgO1xuXHRcdH1cblx0XHRzTmV3SGFzaCArPSBgJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT0ke3NBcHBTdGF0ZUtleX1gO1xuXHR9XG5cblx0cmV0dXJuIHNOZXdIYXNoO1xufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVwiKVxuY2xhc3MgUm91dGVyUHJveHkgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0YklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblx0YklzR3VhcmRDcm9zc0FsbG93ZWQgPSBmYWxzZTtcblx0c0lBcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdF9vU2hlbGxTZXJ2aWNlcyE6IElTaGVsbFNlcnZpY2VzO1xuXHRmY2xFbmFibGVkITogYm9vbGVhbjtcblx0X2ZuQmxvY2tpbmdOYXZGaWx0ZXIhOiBGdW5jdGlvbjtcblx0X2ZuSGFzaEd1YXJkITogRnVuY3Rpb247XG5cdF9iRGlzYWJsZU9uSGFzaENoYW5nZSE6IGJvb2xlYW47XG5cdF9iSWdub3JlUmVzdG9yZSE6IGJvb2xlYW47XG5cdF9iRm9yY2VGb2N1cyE6IGJvb2xlYW47XG5cdF9vUm91dGVyITogUm91dGVyO1xuXHRfb01hbmFnZWRIaXN0b3J5ITogYW55W107XG5cdF9vTmF2aWdhdGlvbkd1YXJkOiBhbnk7XG5cdG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRfb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24/OiBTeW5jaHJvbml6YXRpb247XG5cdF9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybzogYm9vbGVhbiA9IGZhbHNlO1xuXHRfYkFwcGx5UmVzdG9yZTogYm9vbGVhbiA9IGZhbHNlO1xuXHRfYkRlbGF5ZWRSZWJ1aWxkOiBib29sZWFuID0gZmFsc2U7XG5cdF9wYXRoTWFwcGluZ3M6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdID0gW107XG5cblx0aW5pdChvQXBwQ29tcG9uZW50OiBhbnksIGlzZmNsRW5hYmxlZDogYm9vbGVhbikge1xuXHRcdC8vIFNhdmUgdGhlIG5hbWUgb2YgdGhlIGFwcCAoaW5jbHVkaW5nIHN0YXJ0dXAgcGFyYW1ldGVycykgZm9yIHJlYnVpbGRpbmcgZnVsbCBoYXNoZXMgbGF0ZXJcblx0XHRvQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInNoZWxsU2VydmljZXNcIilcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblxuXHRcdFx0XHR0aGlzLmluaXRSYXcob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKSk7XG5cdFx0XHRcdC8vIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgaW5pdGlhbCByb3V0ZU1hdGNoZWQgaXMgZG9uZSBiZWZvcmUgZG9pbmcgYW55IG5hdmlnYXRpb25cblx0XHRcdFx0dGhpcy53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdFx0XHQvLyBTZXQgZmVMZXZlbD0wIGZvciB0aGUgZmlyc3QgQXBwbGljYXRpb24gcGFnZSBpbiB0aGUgaGlzdG9yeVxuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmZUxldmVsOiAwXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aGlzdG9yeS5zdGF0ZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gYXMgYW55XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMuZmNsRW5hYmxlZCA9IGlzZmNsRW5hYmxlZDtcblxuXHRcdFx0XHR0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyID0gdGhpcy5fYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyLmJpbmQodGhpcyk7XG5cdFx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcih0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgc2hlbGwgc2VydmljZXNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHRcdHRoaXMuX2ZuSGFzaEd1YXJkID0gdGhpcy5oYXNoR3VhcmQuYmluZCh0aGlzKTtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkIGFzIGFueSk7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9iSWdub3JlUmVzdG9yZSA9IGZhbHNlO1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gdHJ1ZTsgLy8gVHJpZ2dlciB0aGUgZm9jdXMgbWVjaGFuaXNtIGZvciB0aGUgZmlyc3QgdmlldyBkaXNwbGF5ZWQgYnkgdGhlIGFwcFxuXHR9XG5cblx0ZGVzdHJveSgpIHtcblx0XHRpZiAodGhpcy5fb1NoZWxsU2VydmljZXMpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIpO1xuXHRcdH1cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkIGFzIGFueSk7XG5cdH1cblxuXHQvKipcblx0ICogUmF3IGluaXRpYWxpemF0aW9uIChmb3IgdW5pdCB0ZXN0cykuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgdXNlZCBieSB0aGlzIHByb3h5XG5cdCAqL1xuXHRpbml0UmF3KG9Sb3V0ZXI6IFJvdXRlcikge1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSBvUm91dGVyO1xuXHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeSA9IFtdO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPSBudWxsO1xuXG5cdFx0Y29uc3Qgc0N1cnJlbnRBcHBIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5LnB1c2godGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0N1cnJlbnRBcHBIYXNoKSk7XG5cblx0XHQvLyBTZXQgdGhlIGlBcHBTdGF0ZSBpZiB0aGUgaW5pdGlhbCBoYXNoIGNvbnRhaW5zIG9uZVxuXHRcdHRoaXMuc0lBcHBTdGF0ZUtleSA9IGZpbmRBcHBTdGF0ZUluSGFzaChzQ3VycmVudEFwcEhhc2gpO1xuXHR9XG5cblx0Z2V0SGFzaCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmdldEhhc2goKTtcblx0fVxuXG5cdGlzRm9jdXNGb3JjZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2JGb3JjZUZvY3VzO1xuXHR9XG5cblx0c2V0Rm9jdXNGb3JjZWQoYkZvcmNlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gYkZvcmNlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIGludGVybmFsIHZhcmlhYmxlIHNJQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eSNyZW1vdmVJQXBwU3RhdGVLZXlcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRyZW1vdmVJQXBwU3RhdGVLZXkoKSB7XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBoYXNoLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuUm91dGVyUHJveHkjbmF2VG9IYXNoXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSBzSGFzaCBIYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBJZiBzZXQgdG8gdHJ1ZSwgbm9uLWFuY2VzdG9yIGVudHJpZXMgaW4gaGlzdG9yeSB3aWxsIGJlIHJldGFpbmVkXG5cdCAqIEBwYXJhbSBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlIElmIHNldCB0byB0cnVlLCBjYWNoZSBwcmVzZXJ2YXRpb24gbWVjaGFuaXNtIGlzIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBiRm9yY2VGb2N1cyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGxvZ2ljIHRvIHNldCB0aGUgZm9jdXMgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQgd2lsbCBiZSB0cmlnZ2VyZWQgKG9uUGFnZVJlYWR5KVxuXHQgKiBAcGFyYW0gYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIgSWYgbm90IHNldCB0byBmYWxzZSwgdGhlIGJhY2sgbmF2aWdhdGlvbiBpcyBzZXQgdG8gdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgKHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkKSB0aGF0IHJldHVybnMgJ3RydWUnIGlmIGEgbmF2aWdhdGlvbiB0b29rIHBsYWNlLCAnZmFsc2UnIGlmIHRoZSBuYXZpZ2F0aW9uIGRpZG4ndCBoYXBwZW5cblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRuYXZUb0hhc2goXG5cdFx0c0hhc2g6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbixcblx0XHRiRm9yY2VGb2N1cz86IGJvb2xlYW4sXG5cdFx0YlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXI/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChiUHJlc2VydmVTaGVsbEJhY2tOYXZpZ2F0aW9uSGFuZGxlciAhPT0gZmFsc2UpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uLndhaXRGb3IoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9pbnRlcm5hbE5hdlRvSGFzaChzSGFzaCwgYlByZXNlcnZlSGlzdG9yeSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSwgYkZvcmNlRm9jdXMpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybykge1xuXHRcdFx0XHR0aGlzLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuX2ludGVybmFsTmF2VG9IYXNoKHNIYXNoLCBiUHJlc2VydmVIaXN0b3J5LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlLCBiRm9yY2VGb2N1cyk7XG5cdFx0fVxuXHR9XG5cblx0X2ludGVybmFsTmF2VG9IYXNoKHNIYXNoOiBhbnksIGJQcmVzZXJ2ZUhpc3Rvcnk6IGFueSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZTogYW55LCBiRm9yY2VGb2N1cz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBBZGQgdGhlIGFwcCBzdGF0ZSBpbiB0aGUgaGFzaCBpZiBuZWVkZWRcblx0XHRpZiAodGhpcy5mY2xFbmFibGVkICYmIHRoaXMuc0lBcHBTdGF0ZUtleSAmJiAhZmluZEFwcFN0YXRlSW5IYXNoKHNIYXNoKSkge1xuXHRcdFx0c0hhc2ggPSBzZXRBcHBTdGF0ZUluSGFzaChzSGFzaCwgdGhpcy5zSUFwcFN0YXRlS2V5KTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoKSkge1xuXHRcdFx0aWYgKCF0aGlzLm9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlIGhhdmUgdG8gdXNlIGEgY29uZmlybSBoZXJlIGZvciBVSSBjb25zaXN0ZW5jeSByZWFzb25zLCBhcyB3aXRoIHNvbWUgc2NlbmFyaW9zXG5cdFx0XHQvLyBpbiB0aGUgRWRpdEZsb3cgd2UgcmVseSBvbiBhIFVJNSBtZWNoYW5pc20gdGhhdCBkaXNwbGF5cyBhIGNvbmZpcm0gZGlhbG9nLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRpZiAoIWNvbmZpcm0odGhpcy5vUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUk9VVEVSX1BST1hZX1NBUEZFX0VYSVRfTk9UU0FWRURfTUVTU0FHRVwiKSkpIHtcblx0XHRcdFx0Ly8gVGhlIHVzZXIgY2xpY2tlZCBvbiBDYW5jZWwgLS0+IGNhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSB0aGUgbmF2aWdhdGlvbiB3aWxsIGNhdXNlIGEgbmV3IHZpZXcgdG8gYmUgZGlzcGxheWVkLCB3ZSBmb3JjZSB0aGUgZm9jdXNcblx0XHQvLyBJLmUuIGlmIHRoZSBrZXlzIGZvciB0aGUgaGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGN1cnJlbnQgaGFzaCBrZXlzLlxuXHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNIYXNoKTtcblx0XHRpZiAoIXRoaXMuX2JGb3JjZUZvY3VzKSB7XG5cdFx0XHQvLyBJZiB0aGUgZm9jdXMgd2FzIGFscmVhZHkgZm9yY2VkLCBrZWVwIGl0XG5cdFx0XHRjb25zdCBhQ3VycmVudEhhc2hLZXlzID0gdGhpcy5fZXh0cmFjdEtleXNGcm9tSGFzaCh0aGlzLmdldEhhc2goKSk7XG5cdFx0XHR0aGlzLl9iRm9yY2VGb2N1cyA9XG5cdFx0XHRcdGJGb3JjZUZvY3VzIHx8XG5cdFx0XHRcdChhQ3VycmVudEhhc2hLZXlzLmxlbmd0aCA8IG9OZXdTdGF0ZS5rZXlzLmxlbmd0aCAmJlxuXHRcdFx0XHRcdGFDdXJyZW50SGFzaEtleXMuZXZlcnkoZnVuY3Rpb24gKGtleTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5ID09PSBvTmV3U3RhdGUua2V5c1tpbmRleF07XG5cdFx0XHRcdFx0fSkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9IaXN0b3J5QWN0aW9uID0gdGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGJQcmVzZXJ2ZUhpc3RvcnksIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3JlYnVpbGRCcm93c2VySGlzdG9yeShvSGlzdG9yeUFjdGlvbiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBicm93c2VyIGhpc3RvcnkgaWYgZW50cmllcyBoYXZlIGJlZW4gYWRkZWQgd2l0aG91dCB1c2luZyB0aGUgUm91dGVyUHJveHkuXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIGhpc3RvcnkgYWNjb3JkaW5nbHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSBoaXN0b3J5IGlzIHJlYnVpbHRcblx0ICovXG5cdHJlc3RvcmVIaXN0b3J5KCkge1xuXHRcdGlmICh0aGlzLl9iQXBwbHlSZXN0b3JlKSB7XG5cdFx0XHR0aGlzLl9iQXBwbHlSZXN0b3JlID0gZmFsc2U7XG5cdFx0XHRsZXQgc1RhcmdldEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRcdHNUYXJnZXRIYXNoID0gc1RhcmdldEhhc2gucmVwbGFjZSgvKFxcP3wmKXJlc3RvcmVIaXN0b3J5PXRydWUvLCBcIlwiKTtcblx0XHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNUYXJnZXRIYXNoKTtcblxuXHRcdFx0Y29uc3Qgb0hpc3RvcnlBY3Rpb24gPSB0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb24sIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBiYWNrIGluIHRoZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICovXG5cdG5hdkJhY2soKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IHNQcmV2aW91c0hhc2g7XG5cblx0XHQvLyBMb29rIGZvciB0aGUgY3VycmVudCBoYXNoIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaV0uaGFzaCA9PT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRcdHNQcmV2aW91c0hhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzUHJldmlvdXNIYXNoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXZUb0hhc2goc1ByZXZpb3VzSGFzaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGNvdWxkbid0IGZpbmQgYSBwcmV2aW91cyBoYXNoIGluIGhpc3Rvcnlcblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHRyYW5zaWVudCBoYXNoIGluIGEgY3JlYXRlIGFwcCwgYW5kXG5cdFx0XHQvLyBpbiB0aGF0IGNhc2UgaGlzdG9yeS5iYWNrIHdvdWxkIGdvIGJhY2sgdG8gdGhlIEZMUFxuXHRcdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZSB3aXRoIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUm91dGVOYW1lIFRoZSByb3V0ZSBuYW1lIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0bmF2VG8oc1JvdXRlTmFtZTogc3RyaW5nLCBvUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLl9vUm91dGVyLmdldFVSTChzUm91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMubmF2VG9IYXNoKHNIYXNoLCBmYWxzZSwgb1BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZSwgZmFsc2UsICFvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGl0cyB0aGUgY3VycmVudCBhcHAgYnkgbmF2aWdhdGluZyBiYWNrXG5cdCAqIHRvIHRoZSBwcmV2aW91cyBhcHAgKGlmIGFueSkgb3IgdGhlIEZMUC5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gd2UgZXhpdCB0aGUgYXBwXG5cdCAqL1xuXHRleGl0RnJvbUFwcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1NoZWxsU2VydmljZXMuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIGhhc2ggY2FuIGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBjdXJyZW50IHN0YXRlXG5cdCAqIGkuZS4gaWYgdGhlIGhhc2ggaXMgZXF1YWwsIGNvbXBhdGlibGUgb3IgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBgdHJ1ZWAgaWYgdGhlcmUgaXMgYW4gaW1wYWN0XG5cdCAqIEByZXR1cm5zIElmIHRoZXJlIGlzIGFuIGltcGFjdFxuXHQgKi9cblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNIYXNoOiBhbnkpIHtcblx0XHRpZiAoc0hhc2hbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzSGFzaCA9IHNIYXNoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0xvY2FsR3VhcmQgPSBjcmVhdGVHdWFyZEZyb21IYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0xvY2FsR3VhcmQuY2hlY2sodGhpcy5nZXRIYXNoKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIG5hdmlnYXRpb24gaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICpcblx0ICogQHJldHVybnMgYGZhbHNlYCBpZiBhIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGluIHRoZSBSb3V0ZXJQcm94eSBhbmQgaXMgbm90IHlldCBmaW5hbGl6ZWRcblx0ICovXG5cdGlzTmF2aWdhdGlvbkZpbmFsaXplZCgpIHtcblx0XHRyZXR1cm4gIXRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nICYmICF0aGlzLl9iRGVsYXllZFJlYnVpbGQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBzdGF0ZSBhcyBhIGd1YXJkLlxuXHQgKiBFYWNoIGZ1dHVyZSBuYXZpZ2F0aW9uIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgZ3VhcmQsIGFuZCBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2lsbFxuXHQgKiBiZSBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uIGNyb3NzZXMgdGhlIGd1YXJkIChpLmUuIGdvZXMgdG8gYW4gYW5jZXN0b3Igb2YgdGhlIGd1YXJkKS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIGZvciB0aGUgZ3VhcmRcblx0ICovXG5cdHNldE5hdmlnYXRpb25HdWFyZChzSGFzaDogc3RyaW5nKSB7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IGNyZWF0ZUd1YXJkRnJvbUhhc2goc0hhc2gpO1xuXHRcdHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlcyB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICovXG5cdGRpc2NhcmROYXZpZ2F0aW9uR3VhcmQoKSB7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGluZyBndWFyZCBpcyBhdmFpbGFibGVcblx0ICovXG5cdGhhc05hdmlnYXRpb25HdWFyZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb05hdmlnYXRpb25HdWFyZCAhPT0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUZXN0cyBhIGhhc2ggYWdhaW5zdCB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIHRlc3RlZFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGluZyB0byB0aGUgaGFzaCBkb2Vzbid0IGNyb3NzIHRoZSBndWFyZFxuXHQgKi9cblx0Y2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5fb05hdmlnYXRpb25HdWFyZCA9PT0gbnVsbCB8fCB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkLmNoZWNrKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHVzZXIgYWxsb3dlZCB0aGUgbmF2aWdhdGlvbiBndWFyZCB0byBiZSBjcm9zc2VkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgY3Jvc3NpbmcgdGhlIGd1YXJkIGhhcyBiZWVuIGFsbG93ZWQgYnkgdGhlIHVzZXJcblx0ICovXG5cdGlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGVzIHRoZSBzeW5jaHJvbml6YXRpb24gZm9yIHJvdXRlTWF0Y2hlZEV2ZW50LlxuXHQgKiBUaGUgbmV4dCBOYXZUb0hhc2ggY2FsbCB3aWxsIGNyZWF0ZSBhIFN5bmNocm9uaXphdGlvbiBvYmplY3QgdGhhdCB3aWxsIGJlIHJlc29sdmVkXG5cdCAqIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG9uUm91dGVNYXRjaGVkIGV2ZW50LCBwcmV2ZW50aW5nIGFub3RoZXIgTmF2VG9IYXNoIHRvIGhhcHBlbiBpbiBwYXJhbGxlbC5cblx0ICovXG5cdGFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbigpIHtcblx0XHR0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSB0aGUgcm91dGVNYXRjaCBzeW5jaHJvbml6YXRpb24gb2JqZWN0LCB1bmxvY2tpbmcgcG90ZW50aWFsIHBlbmRpbmcgTmF2VG9IYXNoIGNhbGxzLlxuXHQgKi9cblx0cmVzb2x2ZVJvdXRlTWF0Y2goKSB7XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbi5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2VzIHN1cmUgbm8gbmF2aWdhdGlvbiBjYW4gaGFwcGVuIGJlZm9yZSBhIHJvdXRlTWF0Y2ggaGFwcGVuZWQuXG5cdCAqL1xuXHR3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKSB7XG5cdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSBuZXcgU3luY2hyb25pemF0aW9uKCk7XG5cdFx0dGhpcy5fYkFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm8gPSBmYWxzZTtcblx0fVxuXG5cdF9leHRyYWN0S2V5c0Zyb21IYXNoKHNIYXNoOiBhbnkpIHtcblx0XHRpZiAoc0hhc2ggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c0hhc2ggPSBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCBzSGFzaE5vUGFyYW1zID0gc0hhc2guc3BsaXQoXCI/XCIpWzBdOyAvLyByZW1vdmUgcGFyYW1zXG5cdFx0Y29uc3QgYVRva2VucyA9IHNIYXNoTm9QYXJhbXMuc3BsaXQoXCIvXCIpO1xuXHRcdGNvbnN0IGFLZXlzOiBhbnlbXSA9IFtdO1xuXG5cdFx0YVRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uIChzVG9rZW46IGFueSkge1xuXHRcdFx0Y29uc3QgcmVnZXhLZXkgPSAvW15cXChcXCldK1xcKFteXFwoXFwpXStcXCkvOyAvLyBhYmMoZGVmKVxuXHRcdFx0aWYgKHJlZ2V4S2V5LnRlc3Qoc1Rva2VuKSkge1xuXHRcdFx0XHRhS2V5cy5wdXNoKHNUb2tlbi5zcGxpdChcIihcIilbMF0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGFLZXlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhIHN0YXRlIGZyb20gYSBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggdG8gYmUgdXNlZCBhcyBlbnRyeVxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRfZXh0cmFjdFN0YXRlRnJvbUhhc2goc0hhc2g6IHN0cmluZykge1xuXHRcdGlmIChzSGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzSGFzaCA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1N0YXRlOiBhbnkgPSB7XG5cdFx0XHRrZXlzOiB0aGlzLl9leHRyYWN0S2V5c0Zyb21IYXNoKHNIYXNoKVxuXHRcdH07XG5cblx0XHQvLyBSZXRyaWV2ZSBsYXlvdXQgKGlmIGFueSlcblx0XHRjb25zdCBhTGF5b3V0ID0gc0hhc2gubWF0Y2gobmV3IFJlZ0V4cChgXFxcXD8uKiR7ZW51bVVSTFBhcmFtcy5MQVlPVVRQQVJBTX09KFteJl0qKWApKTtcblx0XHRvU3RhdGUuc0xheW91dCA9IGFMYXlvdXQgJiYgYUxheW91dC5sZW5ndGggPiAxID8gYUxheW91dFsxXSA6IG51bGw7XG5cdFx0aWYgKG9TdGF0ZS5zTGF5b3V0ID09PSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIikge1xuXHRcdFx0b1N0YXRlLnNjcmVlbk1vZGUgPSAxO1xuXHRcdH0gZWxzZSBpZiAob1N0YXRlLnNMYXlvdXQgPT09IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiKSB7XG5cdFx0XHRvU3RhdGUuc2NyZWVuTW9kZSA9IDI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9TdGF0ZS5zY3JlZW5Nb2RlID0gMDtcblx0XHR9XG5cblx0XHRvU3RhdGUuaGFzaCA9IHNIYXNoO1xuXHRcdHJldHVybiBvU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG5ldyBzdGF0ZSBpbnRvIHRoZSBpbnRlcm5hbCBoaXN0b3J5IHN0cnVjdHVyZS5cblx0ICogTWFrZXMgc3VyZSB0aGlzIG5ldyBzdGF0ZSBpcyBhZGRlZCBhZnRlciBhbiBhbmNlc3Rvci5cblx0ICogQWxzbyBzZXRzIHRoZSBpQXBwU3RhdGUga2V5IGluIHRoZSB3aG9sZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuUm91dGVyUHJveHlcblx0ICogQHBhcmFtIG9OZXdTdGF0ZSBUaGUgbmV3IHN0YXRlIHRvIGJlIGFkZGVkXG5cdCAqIEBwYXJhbSBiUmVidWlsZE9ubHkgYHRydWVgIGlmIHdlJ3JlIHJlYnVpbGRpbmcgdGhlIGhpc3RvcnkgYWZ0ZXIgYSBzaGVsbCBtZW51IG5hdmlnYXRpb25cblx0ICogQHBhcmFtIGJQcmVzZXJ2ZUhpc3RvcnkgSWYgc2V0IHRvIHRydWUsIG5vbi1hbmNlc3RvciBlbnRyaWVzIGluIGhpc3Rvcnkgd2lsbCBiZSByZXRhaW5lZFxuXHQgKiBAcGFyYW0gYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uIERpc2FibGUgdGhlIG1lY2hhbmlzbSB0byByZXRhaW5lZCBtYXJrZWQgZW50cmllcyBpbiBjYWNoZVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHN0YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9wdXNoTmV3U3RhdGUob05ld1N0YXRlOiBhbnksIGJSZWJ1aWxkT25seTogYm9vbGVhbiwgYlByZXNlcnZlSGlzdG9yeTogYm9vbGVhbiwgYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IGxhc3RJbmRleCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxO1xuXHRcdGxldCBpUG9wQ291bnQgPSBiUmVidWlsZE9ubHkgPyAxIDogMDtcblxuXHRcdC8vIDEuIERvIHNvbWUgY2xlYW51cCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5IDogaW4gY2FzZSB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIGJhY2sgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeSwgd2UgbmVlZCB0byByZW1vdmVcblx0XHQvLyB0aGUgc3RhdGVzIGFoZWFkIGluIGhpc3RvcnkgYW5kIG1ha2Ugc3VyZSB0aGUgdG9wIHN0YXRlIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2Vcblx0XHQvLyBXZSBkb24ndCBkbyB0aGF0IHdoZW4gcmVzdG9yaW5nIHRoZSBoaXN0b3J5LCBhcyB0aGUgY3VycmVudCBzdGF0ZSBoYXMgYmVlbiBhZGRlZCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIgaGlzdG9yeVxuXHRcdC8vIGFuZCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRpZiAoIWJSZWJ1aWxkT25seSkge1xuXHRcdFx0d2hpbGUgKGxhc3RJbmRleCA+PSAwICYmIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtsYXN0SW5kZXhdLmhhc2ggIT09IHNDdXJyZW50SGFzaCkge1xuXHRcdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGxhc3RJbmRleC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBoaXN0b3J5LiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBicm93c2VyIHJlbG9hZFxuXHRcdFx0XHQvLyBoYXBwZW5lZCwgY2F1c2luZyBhIHJlaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZWQgaGlzdG9yeS5cblx0XHRcdFx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgbG9jYXRpb24gYXMgdGhlIG5ldyBzdGFydGluZyBwb2ludCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNDdXJyZW50SGFzaCkpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogMCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gMi4gTWFyayB0aGUgdG9wIHN0YXRlIGFzIHByZXNlcnZlZCBpZiByZXF1aXJlZFxuXHRcdGlmIChiUHJlc2VydmVIaXN0b3J5ICYmICFiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24pIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0ucHJlc2VydmVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyAzLiBUaGVuIHBvcCBhbGwgc3RhdGVzIHVudGlsIHdlIGZpbmQgYW4gYW5jZXN0b3Igb2YgdGhlIG5ldyBzdGF0ZSwgb3Igd2UgZmluZCBhIHN0YXRlIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWRcblx0XHRsZXQgb0xhc3RSZW1vdmVkSXRlbTtcblx0XHR3aGlsZSAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9Ub3BTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24gfHwgIW9Ub3BTdGF0ZS5wcmVzZXJ2ZWQpICYmXG5cdFx0XHRcdHRoaXMuX2NvbXBhcmVDYWNoZVN0YXRlcyhvVG9wU3RhdGUsIG9OZXdTdGF0ZSkgIT09IGVudW1TdGF0ZS5BTkNFU1RPUlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSB0b3Agc3RhdGUgaXMgbm90IGFuIGFuY2VzdG9yIG9mIG9OZXdTdGF0ZSBhbmQgaXMgbm90IHByZXNlcnZlZCAtLT4gd2UgY2FuIHBvcCBpdFxuXHRcdFx0XHRvTGFzdFJlbW92ZWRJdGVtID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5LnBvcCgpO1xuXHRcdFx0XHRpUG9wQ291bnQrKztcblx0XHRcdH0gZWxzZSBpZiAob1RvcFN0YXRlLnByZXNlcnZlZCAmJiByZW1vdmVBcHBTdGF0ZUluSGFzaChvVG9wU3RhdGUuaGFzaCkgPT09IHJlbW92ZUFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKSkge1xuXHRcdFx0XHQvLyBXZSB0cnkgdG8gYWRkIGEgc3RhdGUgdGhhdCBpcyBhbHJlYWR5IGluIGNhY2hlIChkdWUgdG8gcHJlc2VydmVkIGZsYWcpIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGlhcHAtc3RhdGVcblx0XHRcdFx0Ly8gLS0+IHdlIHNob3VsZCBkZWxldGUgdGhlIHByZXZpb3VzIGVudHJ5IChpdCB3aWxsIGJlIGxhdGVyIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lKSBhbmQgc3RvcCBwb3BwaW5nXG5cdFx0XHRcdG9MYXN0UmVtb3ZlZEl0ZW0gPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGlQb3BDb3VudCsrO1xuXHRcdFx0XHRvTmV3U3RhdGUucHJlc2VydmVkID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhazsgLy8gQW5jZXN0b3Igb3IgcHJlc2VydmVkIHN0YXRlIGZvdW5kIC0tPiB3ZSBzdG9wIHBvcHBpbmcgb3V0IHN0YXRlc1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDQuIGlBcHBTdGF0ZSBtYW5hZ2VtZW50XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gZmluZEFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKTtcblx0XHRpZiAodGhpcy5mY2xFbmFibGVkICYmIHRoaXMuc0lBcHBTdGF0ZUtleSkge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBGQ0wsIHRoZSBuZXcgYXBwIHN0YXRlIG5lZWRzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHdob2xlIGhpc3Rvcnlcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5mb3JFYWNoKChvTWFuYWdlZFN0YXRlOiBhbnkpID0+IHtcblx0XHRcdFx0b01hbmFnZWRTdGF0ZS5oYXNoID0gc2V0QXBwU3RhdGVJbkhhc2gob01hbmFnZWRTdGF0ZS5oYXNoLCB0aGlzLnNJQXBwU3RhdGVLZXkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5mY2xFbmFibGVkICYmIG9MYXN0UmVtb3ZlZEl0ZW0pIHtcblx0XHRcdGNvbnN0IHNQcmV2aW91c0lBcHBTdGF0ZUtleSA9IGZpbmRBcHBTdGF0ZUluSGFzaChvTGFzdFJlbW92ZWRJdGVtLmhhc2gpO1xuXHRcdFx0Y29uc3Qgb0NvbXBhcmlzb25TdGF0ZVJlc3VsdCA9IHRoaXMuX2NvbXBhcmVDYWNoZVN0YXRlcyhvTGFzdFJlbW92ZWRJdGVtLCBvTmV3U3RhdGUpO1xuXHRcdFx0Ly8gaWYgY3VycmVudCBzdGF0ZSBkb2Vzbid0IGNvbnRhaW4gYSBpLWFwcHN0YXRlIGFuZCB0aGlzIHN0YXRlIHNob3VsZCByZXBsYWNlIGEgc3RhdGUgY29udGFpbmluZyBhIGlBcHBTdGF0ZVxuXHRcdFx0Ly8gdGhlbiB0aGUgcHJldmlvdXMgaUFwcFN0YXRlIGlzIHByZXNlcnZlZFxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGhpcy5zSUFwcFN0YXRlS2V5ICYmXG5cdFx0XHRcdHNQcmV2aW91c0lBcHBTdGF0ZUtleSAmJlxuXHRcdFx0XHQob0NvbXBhcmlzb25TdGF0ZVJlc3VsdCA9PT0gZW51bVN0YXRlLkVRVUFMIHx8IG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPT09IGVudW1TdGF0ZS5DT01QQVRJQkxFKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9OZXdTdGF0ZS5oYXNoID0gc2V0QXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gsIHNQcmV2aW91c0lBcHBTdGF0ZUtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNS4gTm93IHdlIGNhbiBwdXNoIHRoZSBzdGF0ZSBhdCB0aGUgdG9wIG9mIHRoZSBpbnRlcm5hbCBoaXN0b3J5XG5cdFx0Y29uc3QgYkhhc1NhbWVIYXNoID0gb0xhc3RSZW1vdmVkSXRlbSAmJiBvTmV3U3RhdGUuaGFzaCA9PT0gb0xhc3RSZW1vdmVkSXRlbS5oYXNoO1xuXHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID09PSAwIHx8IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0uaGFzaCAhPT0gb05ld1N0YXRlLmhhc2gpIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKG9OZXdTdGF0ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gNi4gRGV0ZXJtaW5lIHdoaWNoIGFjdGlvbnMgdG8gZG8gb24gdGhlIGhpc3Rvcnlcblx0XHRpZiAoaVBvcENvdW50ID09PSAwKSB7XG5cdFx0XHQvLyBObyBzdGF0ZSB3YXMgcG9wcGVkIC0tPiBhcHBlbmRcblx0XHRcdHJldHVybiB7IHR5cGU6IFwiYXBwZW5kXCIgfTtcblx0XHR9IGVsc2UgaWYgKGlQb3BDb3VudCA9PT0gMSkge1xuXHRcdFx0Ly8gT25seSAxIHN0YXRlIHdhcyBwb3BwZWQgLS0+IHJlcGxhY2UgY3VycmVudCBoYXNoIHVubGVzcyBoYXNoIGlzIHRoZSBzYW1lICh0aGVuIG5vdGhpbmcgdG8gZG8pXG5cdFx0XHRyZXR1cm4gYkhhc1NhbWVIYXNoID8geyB0eXBlOiBcIm5vbmVcIiB9IDogeyB0eXBlOiBcInJlcGxhY2VcIiB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBNb3JlIHRoYW4gMSBzdGF0ZSB3YXMgcG9wcGVkIC0tPiBnbyBiYWtjIGluIGhpc3RvcnkgYW5kIHJlcGxhY2UgaGFzaCBpZiBuZWNlc3Nhcnlcblx0XHRcdHJldHVybiBiSGFzU2FtZUhhc2ggPyB7IHR5cGU6IFwiYmFja1wiLCBzdGVwczogaVBvcENvdW50IC0gMSB9IDogeyB0eXBlOiBcImJhY2stcmVwbGFjZVwiLCBzdGVwczogaVBvcENvdW50IC0gMSB9O1xuXHRcdH1cblx0fVxuXG5cdF9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID8gXCJDdXN0b21cIiA6IFwiQ29udGludWVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSByb3V0aW5nIGJ5IGNhbGxpbmcgdGhlIHJvdXRlciBzdG9wIG1ldGhvZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlKCkge1xuXHRcdHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID0gdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyLnN0b3AoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIHJvdXRpbmcgYnkgY2FsbGluZyB0aGUgcm91dGVyIGluaXRpYWxpemUgbWV0aG9kLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuUm91dGVyUHJveHkjX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAcGFyYW0gW2JJZ25vcmVDdXJyZW50SGFzaF0gSWdub3JlIHRoZSBsYXN0IGhhc2ggZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgcm91dGVyIGhhcyBpbml0aWFsaXplZFxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UoYklnbm9yZUN1cnJlbnRIYXNoOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9vUm91dGVyLmluaXRpYWxpemUoYklnbm9yZUN1cnJlbnRIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTeW5jaHJvbml6ZXMgdGhlIGJyb3dzZXIgaGlzdG9yeSB3aXRoIHRoZSBpbnRlcm5hbCBoaXN0b3J5IG9mIHRoZSByb3V0ZXJQcm94eSwgYW5kIHRyaWdnZXJzIGEgbmF2aWdhdGlvbiBpZiBuZWVkZWQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAcGFyYW0gb0hpc3RvcnlBY3Rpb24gU3BlY2lmaWVzIHRoZSBuYXZpZ2F0aW9uIGFjdGlvbiB0byBiZSBwZXJmb3JtZWRcblx0ICogQHBhcmFtIGJSZWJ1aWxkT25seSBgdHJ1ZWAgaWYgaW50ZXJuYWwgaGlzdG9yeSBpcyBjdXJyZW50bHkgYmVpbmcgcmVidWlsdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIChyZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZCkgdGhhdCByZXR1cm5zICd0cnVlJyBpZiBhIG5hdmlnYXRpb24gdG9vayBwbGFjZSwgJ2ZhbHNlJyBpZiB0aGUgbmF2aWdhdGlvbiBkaWRuJ3QgaGFwcGVuXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb246IGFueSwgYlJlYnVpbGRPbmx5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IHRydWU7XG5cdFx0XHRjb25zdCBvVGFyZ2V0U3RhdGUgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdLFxuXHRcdFx0XHRuZXdMZXZlbCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxO1xuXG5cdFx0XHRmdW5jdGlvbiByZXBsYWNlQXN5bmMoKSB7XG5cdFx0XHRcdGlmICghYlJlYnVpbGRPbmx5KSB7XG5cdFx0XHRcdFx0dGhhdC5fZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UodHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQodGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogbmV3TGV2ZWwgfSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIpO1xuXG5cdFx0XHRcdGlmIChiUmVidWlsZE9ubHkpIHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFRpbWVvdXQgdG8gbGV0ICdoYXNoY2hhbmdlJyBldmVudCBiZSBwcm9jZXNzZWQgYmVmb3JlIGJ5IHRoZSBIYXNoQ2hhbmdlciwgc28gdGhhdFxuXHRcdFx0XHRcdFx0Ly8gb25Sb3V0ZU1hdGNoZWQgbm90aWZpY2F0aW9uIGlzbid0IHJhaXNlZFxuXHRcdFx0XHRcdFx0dGhhdC5fZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UodHJ1ZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXN5bmMgY2FsbGJhY2tzIHdoZW4gbmF2aWdhdGluZyBiYWNrLCBpbiBvcmRlciB0byBsZXQgYWxsIG5vdGlmaWNhdGlvbnMgYW5kIGV2ZW50cyBnZXQgcHJvY2Vzc2VkXG5cdFx0XHRmdW5jdGlvbiBiYWNrUmVwbGFjZUFzeW5jKCkge1xuXHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIGJhY2tSZXBsYWNlQXN5bmMpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBUaW1lb3V0IHRvIGxldCAnaGFzaGNoYW5nZScgZXZlbnQgYmUgcHJvY2Vzc2VkIGJlZm9yZSBieSB0aGUgSGFzaENoYW5nZXJcblx0XHRcdFx0XHRyZXBsYWNlQXN5bmMoKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGJhY2tBc3luYygpIHtcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrQXN5bmMpO1xuXHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdH1cblxuXHRcdFx0dGhhdC5fYklnbm9yZVJlc3RvcmUgPSB0cnVlO1xuXG5cdFx0XHRzd2l0Y2ggKG9IaXN0b3J5QWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInJlcGxhY2VcIjpcblx0XHRcdFx0XHQodGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiBuZXdMZXZlbCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYXBwZW5kXCI6XG5cdFx0XHRcdFx0dGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnNldEhhc2gob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiBuZXdMZXZlbCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYmFja1wiOlxuXHRcdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja0FzeW5jKTtcblx0XHRcdFx0XHRoaXN0b3J5LmdvKC1vSGlzdG9yeUFjdGlvbi5zdGVwcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImJhY2stcmVwbGFjZVwiOlxuXHRcdFx0XHRcdHRoaXMuX2Rpc2FibGVFdmVudE9uSGFzaENoYW5nZSgpO1xuXHRcdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja1JlcGxhY2VBc3luYyk7XG5cdFx0XHRcdFx0aGlzdG9yeS5nbygtb0hpc3RvcnlBY3Rpb24uc3RlcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gTm8gbmF2aWdhdGlvblxuXHRcdFx0XHRcdHRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7IC8vIG5vIG5hdmlnYXRpb24gLS0+IHJlc29sdmUgdG8gZmFsc2Vcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldExhc3RIaXN0b3J5RW50cnkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRzZXRQYXRoTWFwcGluZyhtYXBwaW5nczogeyBvbGRQYXRoOiBzdHJpbmc7IG5ld1BhdGg6IHN0cmluZyB9W10pIHtcblx0XHR0aGlzLl9wYXRoTWFwcGluZ3MgPSBtYXBwaW5ncy5maWx0ZXIoKG1hcHBpbmcpID0+IHtcblx0XHRcdHJldHVybiBtYXBwaW5nLm9sZFBhdGggIT09IG1hcHBpbmcubmV3UGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdGhhc2hHdWFyZCgpIHtcblx0XHRsZXQgc0hhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuXHRcdGlmIChzSGFzaC5pbmRleE9mKFwicmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiKSAhPT0gLTEpIHtcblx0XHRcdHRoaXMuX2JBcHBseVJlc3RvcmUgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgaGFzaCBuZWVkcyB0byBiZSBjaGFuZ2VkICh0aGlzIGhhcHBlbnMgaW4gRkNMIHdoZW4gc3dpdGNoaW5nIGIvdyBlZGl0IGFuZCByZWFkLW9ubHkgd2l0aCAzIGNvbHVtbnMgb3Blbilcblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0aGlzLl9wYXRoTWFwcGluZ3MuZmluZCgobSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc0hhc2guaW5kZXhPZihtLm9sZFBhdGgpID49IDA7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChtYXBwaW5nKSB7XG5cdFx0XHRcdC8vIFJlcGxhY2UgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRzSGFzaCA9IHNIYXNoLnJlcGxhY2UobWFwcGluZy5vbGRQYXRoLCBtYXBwaW5nLm5ld1BhdGgpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHt9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIiwgc0hhc2gpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUhhc2hTcGxpdCA9IHNIYXNoLnNwbGl0KFwiJi9cIik7XG5cdFx0XHRcdGNvbnN0IHNBcHBIYXNoID0gYUhhc2hTcGxpdFsxXSA/IGFIYXNoU3BsaXRbMV0gOiBcIlwiO1xuXHRcdFx0XHRpZiAodGhpcy5jaGVja0hhc2hXaXRoR3VhcmQoc0FwcEhhc2gpKSB7XG5cdFx0XHRcdFx0dGhpcy5fYkRlbGF5ZWRSZWJ1aWxkID0gdHJ1ZTtcblx0XHRcdFx0XHRjb25zdCBvTmV3U3RhdGUgPSB0aGlzLl9leHRyYWN0U3RhdGVGcm9tSGFzaChzQXBwSGFzaCk7XG5cdFx0XHRcdFx0dGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fYkRlbGF5ZWRSZWJ1aWxkID0gZmFsc2U7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGFyZXMgMiBzdGF0ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUxXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUyXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5FUVVBTCBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBlcXVhbFxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuQ09NUEFUSUJMRSBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBjb21wYXRpYmxlXG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5BTkNFU1RPUiBpZiBvU3RhdGUxIGlzIGFuIGFuY2VzdG9yIG9mIG9TdGF0ZTJcblx0ICogICAgICAgIC0gZW51bVN0YXRlLkRJRkZFUkVOVCBpZiB0aGUgMiBzdGF0ZXMgYXJlIGRpZmZlcmVudFxuXHQgKi9cblxuXHRfY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTE6IGFueSwgb1N0YXRlMjogYW55KSB7XG5cdFx0Ly8gRmlyc3QgY29tcGFyZSBvYmplY3Qga2V5c1xuXHRcdGlmIChvU3RhdGUxLmtleXMubGVuZ3RoID4gb1N0YXRlMi5rZXlzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5ESUZGRVJFTlQ7XG5cdFx0fVxuXHRcdGxldCBlcXVhbCA9IHRydWU7XG5cdFx0bGV0IGluZGV4O1xuXHRcdGZvciAoaW5kZXggPSAwOyBlcXVhbCAmJiBpbmRleCA8IG9TdGF0ZTEua2V5cy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdGlmIChvU3RhdGUxLmtleXNbaW5kZXhdICE9PSBvU3RhdGUyLmtleXNbaW5kZXhdKSB7XG5cdFx0XHRcdGVxdWFsID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghZXF1YWwpIHtcblx0XHRcdC8vIFNvbWUgb2JqZWN0cyBrZXlzIGFyZSBkaWZmZXJlbnRcblx0XHRcdHJldHVybiBlbnVtU3RhdGUuRElGRkVSRU5UO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBrZXlzIGZyb20gb1N0YXRlMSBhcmUgaW4gb1N0YXRlMiAtLT4gY2hlY2sgaWYgYW5jZXN0b3Jcblx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA8IG9TdGF0ZTIua2V5cy5sZW5ndGggfHwgb1N0YXRlMS5zY3JlZW5Nb2RlIDwgb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkFOQ0VTVE9SO1xuXHRcdH1cblx0XHRpZiAob1N0YXRlMS5zY3JlZW5Nb2RlID4gb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkRJRkZFUkVOVDsgLy8gTm90IHN1cmUgdGhpcyBjYXNlIGNhbiBoYXBwZW4uLi5cblx0XHR9XG5cblx0XHQvLyBBdCB0aGlzIHN0YWdlLCB0aGUgMiBzdGF0ZXMgaGF2ZSB0aGUgc2FtZSBvYmplY3Qga2V5cyAoaW4gdGhlIHNhbWUgb3JkZXIpIGFuZCBzYW1lIHNjcmVlbm1vZGVcblx0XHQvLyBUaGV5IGNhbiBiZSBlaXRoZXIgY29tcGF0aWJsZSBvciBlcXVhbFxuXHRcdHJldHVybiBvU3RhdGUxLnNMYXlvdXQgPT09IG9TdGF0ZTIuc0xheW91dCA/IGVudW1TdGF0ZS5FUVVBTCA6IGVudW1TdGF0ZS5DT01QQVRJQkxFO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBiYWNrIGV4aXRzIHRoZSBwcmVzZW50IGd1YXJkIHNldC5cblx0ICpcblx0ICogQHBhcmFtIHNQcmVzZW50SGFzaCBUaGUgY3VycmVudCBoYXNoLiBPbmx5IHVzZWQgZm9yIHVuaXQgdGVzdHMuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBiYWNrIGV4aXRzIHRoZXJlIGlzIGEgZ3VhcmQgZXhpdCBvbiBiYWNrXG5cdCAqL1xuXHRjaGVja0lmQmFja0lzT3V0T2ZHdWFyZChzUHJlc2VudEhhc2g/OiBzdHJpbmcpIHtcblx0XHRsZXQgc1ByZXZIYXNoO1xuXHRcdGxldCBzQ3VycmVudEhhc2g6IHN0cmluZztcblx0XHRpZiAoc1ByZXNlbnRIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFdlIHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBpbnN0ZWFkIG9mIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpIGJlY2F1c2UgdGhlIGxhdHRlclxuXHRcdFx0Ly8gcmVwbGFjZXMgY2hhcmFjdGVycyBpbiB0aGUgVVJMIChlLmcuICUyNCByZXBsYWNlZCBieSAkKSBhbmQgaXQgY2F1c2VzIGlzc3VlcyB3aGVuIGNvbXBhcmluZ1xuXHRcdFx0Ly8gd2l0aCB0aGUgVVJMcyBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRjb25zdCBvU3BsaXRIYXNoID0gdGhpcy5fb1NoZWxsU2VydmljZXMuc3BsaXRIYXNoKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSBhcyBhbnk7XG5cdFx0XHRpZiAob1NwbGl0SGFzaCAmJiBvU3BsaXRIYXNoLmFwcFNwZWNpZmljUm91dGUpIHtcblx0XHRcdFx0c0N1cnJlbnRIYXNoID0gb1NwbGl0SGFzaC5hcHBTcGVjaWZpY1JvdXRlO1xuXHRcdFx0XHRpZiAoc0N1cnJlbnRIYXNoLmluZGV4T2YoXCImL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdHNDdXJyZW50SGFzaCA9IHNDdXJyZW50SGFzaC5zdWJzdHJpbmcoMik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNDdXJyZW50SGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSAnIydcblx0XHRcdFx0aWYgKHNDdXJyZW50SGFzaFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDdXJyZW50SGFzaCA9IHNQcmVzZW50SGFzaDtcblx0XHR9XG5cdFx0c1ByZXNlbnRIYXNoID0gVVJJLmRlY29kZShzQ3VycmVudEhhc2gpO1xuXHRcdGlmICh0aGlzLl9vTmF2aWdhdGlvbkd1YXJkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpXS5oYXNoID09PSBzUHJlc2VudEhhc2gpIHtcblx0XHRcdFx0XHRzUHJldkhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICFzUHJldkhhc2ggfHwgIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNQcmV2SGFzaCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGxhc3QgMiBlbnRyaWVzIGluIHRoZSBoaXN0b3J5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGV5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqL1xuXHRjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkge1xuXHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIDwgMikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9DdXJyZW50U3RhdGUgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdO1xuXHRcdGNvbnN0IG9QcmV2aW91c1N0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAyXTtcblxuXHRcdHJldHVybiBvQ3VycmVudFN0YXRlLmhhc2guc3BsaXQoXCI/XCIpWzBdID09PSBvUHJldmlvdXNTdGF0ZS5oYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXJQcm94eTtcbiJdfQ==
930
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnRzIl0sIm5hbWVzIjpbImVudW1TdGF0ZSIsIkVRVUFMIiwiQ09NUEFUSUJMRSIsIkFOQ0VTVE9SIiwiRElGRkVSRU5UIiwiZW51bVVSTFBhcmFtcyIsIkxBWU9VVFBBUkFNIiwiSUFQUFNUQVRFUEFSQU0iLCJjcmVhdGVHdWFyZEZyb21IYXNoIiwic0d1YXJkSGFzaCIsIl9ndWFyZEhhc2giLCJyZXBsYWNlIiwiY2hlY2siLCJzSGFzaCIsImluZGV4T2YiLCJmaW5kQXBwU3RhdGVJbkhhc2giLCJhQXBwU3RhdGUiLCJtYXRjaCIsIlJlZ0V4cCIsImxlbmd0aCIsInJlbW92ZUFwcFN0YXRlSW5IYXNoIiwic2V0QXBwU3RhdGVJbkhhc2giLCJzQXBwU3RhdGVLZXkiLCJzTmV3SGFzaCIsIlJvdXRlclByb3h5IiwiZGVmaW5lVUk1Q2xhc3MiLCJiSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmciLCJiSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5IiwiYklzR3VhcmRDcm9zc0FsbG93ZWQiLCJzSUFwcFN0YXRlS2V5IiwiX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvIiwiX2JBcHBseVJlc3RvcmUiLCJfYkRlbGF5ZWRSZWJ1aWxkIiwiX3BhdGhNYXBwaW5ncyIsImluaXQiLCJvQXBwQ29tcG9uZW50IiwiaXNmY2xFbmFibGVkIiwiZ2V0U2VydmljZSIsInRoZW4iLCJfb1NoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaW5pdFJhdyIsImdldFJvdXRlciIsIndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbiIsImhpc3RvcnkiLCJyZXBsYWNlU3RhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJmZUxldmVsIiwic3RhdGUiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImZjbEVuYWJsZWQiLCJfZm5CbG9ja2luZ05hdkZpbHRlciIsIl9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIiLCJiaW5kIiwicmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsIl9mbkhhc2hHdWFyZCIsImhhc2hHdWFyZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfYkRpc2FibGVPbkhhc2hDaGFuZ2UiLCJfYklnbm9yZVJlc3RvcmUiLCJfYkZvcmNlRm9jdXMiLCJkZXN0cm95IiwidW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib1JvdXRlciIsIl9vUm91dGVyIiwiX29NYW5hZ2VkSGlzdG9yeSIsIl9vTmF2aWdhdGlvbkd1YXJkIiwic0N1cnJlbnRBcHBIYXNoIiwiZ2V0SGFzaCIsInB1c2giLCJfZXh0cmFjdFN0YXRlRnJvbUhhc2giLCJnZXRIYXNoQ2hhbmdlciIsImlzRm9jdXNGb3JjZWQiLCJzZXRGb2N1c0ZvcmNlZCIsImJGb3JjZWQiLCJyZW1vdmVJQXBwU3RhdGVLZXkiLCJuYXZUb0hhc2giLCJiUHJlc2VydmVIaXN0b3J5IiwiYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSIsImJGb3JjZUZvY3VzIiwiYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIiLCJzZXRCYWNrTmF2aWdhdGlvbiIsIl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsIndhaXRGb3IiLCJ1bmRlZmluZWQiLCJfaW50ZXJuYWxOYXZUb0hhc2giLCJjaGVja0hhc2hXaXRoR3VhcmQiLCJvUmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiY29uZmlybSIsImdldFRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9OZXdTdGF0ZSIsImFDdXJyZW50SGFzaEtleXMiLCJfZXh0cmFjdEtleXNGcm9tSGFzaCIsImtleXMiLCJldmVyeSIsImtleSIsImluZGV4Iiwib0hpc3RvcnlBY3Rpb24iLCJfcHVzaE5ld1N0YXRlIiwiX3JlYnVpbGRCcm93c2VySGlzdG9yeSIsInJlc3RvcmVIaXN0b3J5Iiwic1RhcmdldEhhc2giLCJuYXZCYWNrIiwic0N1cnJlbnRIYXNoIiwic1ByZXZpb3VzSGFzaCIsImkiLCJoYXNoIiwiYmFjayIsIm5hdlRvIiwic1JvdXRlTmFtZSIsIm9QYXJhbWV0ZXJzIiwiZ2V0VVJMIiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJJc1N0aWNreU1vZGUiLCJleGl0RnJvbUFwcCIsImJhY2tUb1ByZXZpb3VzQXBwIiwiaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5Iiwic3Vic3RyaW5nIiwib0xvY2FsR3VhcmQiLCJpc05hdmlnYXRpb25GaW5hbGl6ZWQiLCJzZXROYXZpZ2F0aW9uR3VhcmQiLCJkaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiaGFzTmF2aWdhdGlvbkd1YXJkIiwiaXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlciIsImFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiIsInJlc29sdmVSb3V0ZU1hdGNoIiwiU3luY2hyb25pemF0aW9uIiwic0hhc2hOb1BhcmFtcyIsInNwbGl0IiwiYVRva2VucyIsImFLZXlzIiwiZm9yRWFjaCIsInNUb2tlbiIsInJlZ2V4S2V5IiwidGVzdCIsIm9TdGF0ZSIsImFMYXlvdXQiLCJzTGF5b3V0Iiwic2NyZWVuTW9kZSIsImJSZWJ1aWxkT25seSIsImJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbiIsImxhc3RJbmRleCIsImlQb3BDb3VudCIsInBvcCIsInByZXNlcnZlZCIsIm9MYXN0UmVtb3ZlZEl0ZW0iLCJvVG9wU3RhdGUiLCJfY29tcGFyZUNhY2hlU3RhdGVzIiwic1ByZXZpb3VzSUFwcFN0YXRlS2V5Iiwib0NvbXBhcmlzb25TdGF0ZVJlc3VsdCIsImJIYXNTYW1lSGFzaCIsInR5cGUiLCJzdGVwcyIsIl9kaXNhYmxlRXZlbnRPbkhhc2hDaGFuZ2UiLCJzdG9wIiwiX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlIiwiYklnbm9yZUN1cnJlbnRIYXNoIiwiaW5pdGlhbGl6ZSIsInRoYXQiLCJvVGFyZ2V0U3RhdGUiLCJuZXdMZXZlbCIsInJlcGxhY2VBc3luYyIsInJlcGxhY2VIYXNoIiwic2V0VGltZW91dCIsImJhY2tSZXBsYWNlQXN5bmMiLCJiYWNrQXN5bmMiLCJzZXRIYXNoIiwiZ28iLCJnZXRMYXN0SGlzdG9yeUVudHJ5Iiwic2V0UGF0aE1hcHBpbmciLCJtYXBwaW5ncyIsImZpbHRlciIsIm1hcHBpbmciLCJvbGRQYXRoIiwibmV3UGF0aCIsImZpbmQiLCJtIiwiYUhhc2hTcGxpdCIsInNBcHBIYXNoIiwib1N0YXRlMSIsIm9TdGF0ZTIiLCJlcXVhbCIsImNoZWNrSWZCYWNrSXNPdXRPZkd1YXJkIiwic1ByZXNlbnRIYXNoIiwic1ByZXZIYXNoIiwib1NwbGl0SGFzaCIsInNwbGl0SGFzaCIsImFwcFNwZWNpZmljUm91dGUiLCJVUkkiLCJkZWNvZGUiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0Iiwib0N1cnJlbnRTdGF0ZSIsIm9QcmV2aW91c1N0YXRlIiwiQmFzZU9iamVjdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBU0EsTUFBTUEsU0FBUyxHQUFHO0FBQ2pCQyxJQUFBQSxLQUFLLEVBQUUsQ0FEVTtBQUVqQkMsSUFBQUEsVUFBVSxFQUFFLENBRks7QUFHakJDLElBQUFBLFFBQVEsRUFBRSxDQUhPO0FBSWpCQyxJQUFBQSxTQUFTLEVBQUU7QUFKTSxHQUFsQjtBQU1BLE1BQU1DLGFBQWEsR0FBRztBQUNyQkMsSUFBQUEsV0FBVyxFQUFFLFFBRFE7QUFFckJDLElBQUFBLGNBQWMsRUFBRTtBQUZLLEdBQXRCO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFdBQVNDLG1CQUFULENBQTZCQyxVQUE3QixFQUFpRDtBQUNoRCxXQUFPO0FBQ05DLE1BQUFBLFVBQVUsRUFBRUQsVUFBVSxDQUFDRSxPQUFYLENBQW1CLFdBQW5CLEVBQWdDLEVBQWhDLENBRE47QUFDMkM7QUFDakRDLE1BQUFBLEtBQUssRUFBRSxVQUFVQyxLQUFWLEVBQXNCO0FBQzVCLGVBQU9BLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUtKLFVB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QTRCO0FBQzNCLFVBQUksS0FBS2pJLGdCQUFMLENBQXNCckQsTUFBdEIsR0FBK0IsQ0FBbkMsRUFBc0M7QUFDckMsZUFBTyxLQUFQO0FBQ0E7O0FBRUQsVUFBTXVMLGFBQWEsR0FBRyxLQUFLbEksZ0JBQUwsQ0FBc0IsS0FBS0EsZ0JBQUwsQ0FBc0JyRCxNQUF0QixHQUErQixDQUFyRCxDQUF0QjtBQUNBLFVBQU13TCxjQUFjLEdBQUcsS0FBS25JLGdCQUFMLENBQXNCLEtBQUtBLGdCQUFMLENBQXNCckQsTUFBdEIsR0FBK0IsQ0FBckQsQ0FBdkI7QUFFQSxhQUFPdUwsYUFBYSxDQUFDckYsSUFBZCxDQUFtQnNCLEtBQW5CLENBQXlCLEdBQXpCLEVBQThCLENBQTlCLE1BQXFDZ0UsY0FBYyxDQUFDdEYsSUFBZixDQUFvQnNCLEtBQXBCLENBQTBCLEdBQTFCLEVBQStCLENBQS9CLENBQTVDO0FBQ0EsSzs7O0lBMXZCd0JpRSxVO1NBNnZCWHBMLFciLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgU3luY2hyb25pemF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N5bmNocm9uaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBVUkkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L1VSSVwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5cbmNvbnN0IGVudW1TdGF0ZSA9IHtcblx0RVFVQUw6IDAsXG5cdENPTVBBVElCTEU6IDEsXG5cdEFOQ0VTVE9SOiAyLFxuXHRESUZGRVJFTlQ6IDNcbn07XG5jb25zdCBlbnVtVVJMUGFyYW1zID0ge1xuXHRMQVlPVVRQQVJBTTogXCJsYXlvdXRcIixcblx0SUFQUFNUQVRFUEFSQU06IFwic2FwLWlhcHAtc3RhdGVcIlxufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgSGFzaEd1YXJkIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gc0d1YXJkSGFzaCBUaGUgaGFzaCB1c2VkIGZvciB0aGUgZ3VhcmRcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGhhc2ggZ3VhcmRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlR3VhcmRGcm9tSGFzaChzR3VhcmRIYXNoOiBzdHJpbmcpIHtcblx0cmV0dXJuIHtcblx0XHRfZ3VhcmRIYXNoOiBzR3VhcmRIYXNoLnJlcGxhY2UoL1xcP1teXFw/XSokLywgXCJcIiksIC8vIFJlbW92ZSBxdWVyeSBwYXJ0XG5cdFx0Y2hlY2s6IGZ1bmN0aW9uIChzSGFzaDogYW55KSB7XG5cdFx0XHRyZXR1cm4gc0hhc2guaW5kZXhPZih0aGlzLl9ndWFyZEhhc2gpID09PSAwO1xuXHRcdH1cblx0fTtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgaUFwcFN0YXRlIHBhcnQgZnJvbSBhIGhhc2ggKG9yIG51bGwgaWYgbm90IGZvdW5kKS5cbiAqXG4gKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcbiAqIEByZXR1cm5zIFRoZSBpQXBwU3RhdGUgcGFydCBvZiB0aGUgaGFzaFxuICovXG5mdW5jdGlvbiBmaW5kQXBwU3RhdGVJbkhhc2goc0hhc2g6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCBhQXBwU3RhdGUgPSBzSGFzaC5tYXRjaChuZXcgUmVnRXhwKGBcXFxcPy4qJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT0oW14mXSopYCkpO1xuXHRyZXR1cm4gYUFwcFN0YXRlICYmIGFBcHBTdGF0ZS5sZW5ndGggPiAxID8gYUFwcFN0YXRlWzFdIDogbnVsbDtcbn1cbi8qKlxuICogUmV0dXJucyBhIGhhc2ggd2l0aG91dCBpdHMgaUFwcFN0YXRlIHBhcnQuXG4gKlxuICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoXG4gKiBAcmV0dXJucyBUaGUgaGFzaCB3aXRob3V0IHRoZSBpQXBwU3RhdGVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXBwU3RhdGVJbkhhc2goc0hhc2g6IHN0cmluZykge1xuXHRyZXR1cm4gc0hhc2gucmVwbGFjZShuZXcgUmVnRXhwKGBbJj9dKiR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09W14mXSpgKSwgXCJcIik7XG59XG4vKipcbiAqIEFkZHMgYW4gaUFwcFN0YXRlIGluc2lkZSBhIGhhc2ggKG9yIHJlcGxhY2VzIGFuIGV4aXN0aW5nIG9uZSkuXG4gKlxuICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoXG4gKiBAcGFyYW0gc0FwcFN0YXRlS2V5IFRoZSBpQXBwU3RhdGUgdG8gYWRkXG4gKiBAcmV0dXJucyBUaGUgaGFzaCB3aXRoIHRoZSBhcHAgc3RhdGVcbiAqL1xuZnVuY3Rpb24gc2V0QXBwU3RhdGVJbkhhc2goc0hhc2g6IGFueSwgc0FwcFN0YXRlS2V5OiBhbnkpIHtcblx0bGV0IHNOZXdIYXNoO1xuXG5cdGlmIChzSGFzaC5pbmRleE9mKGVudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU0pID49IDApIHtcblx0XHQvLyBJZiB0aGVyZSdzIGFscmVhZHkgYW4gaUFwcFN0YXRlIHBhcmFtZXRlciBpbiB0aGUgaGFzaCwgcmVwbGFjZSBpdFxuXHRcdHNOZXdIYXNoID0gc0hhc2gucmVwbGFjZShuZXcgUmVnRXhwKGAke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PVteJl0qYCksIGAke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PSR7c0FwcFN0YXRlS2V5fWApO1xuXHR9IGVsc2Uge1xuXHRcdC8vIEFkZCB0aGUgaUFwcFN0YXRlIHBhcmFtZXRlciBpbiB0aGUgaGFzaFxuXHRcdGlmIChzSGFzaC5pbmRleE9mKFwiP1wiKSA8IDApIHtcblx0XHRcdHNOZXdIYXNoID0gYCR7c0hhc2h9P2A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOZXdIYXNoID0gYCR7c0hhc2h9JmA7XG5cdFx0fVxuXHRcdHNOZXdIYXNoICs9IGAke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PSR7c0FwcFN0YXRlS2V5fWA7XG5cdH1cblxuXHRyZXR1cm4gc05ld0hhc2g7XG59XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLlJvdXRlclByb3h5XCIpXG5jbGFzcyBSb3V0ZXJQcm94eSBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHRiSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0YklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXHRiSXNHdWFyZENyb3NzQWxsb3dlZCA9IGZhbHNlO1xuXHRzSUFwcFN0YXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0X29TaGVsbFNlcnZpY2VzITogSVNoZWxsU2VydmljZXM7XG5cdGZjbEVuYWJsZWQhOiBib29sZWFuO1xuXHRfZm5CbG9ja2luZ05hdkZpbHRlciE6IEZ1bmN0aW9uO1xuXHRfZm5IYXNoR3VhcmQhOiBGdW5jdGlvbjtcblx0X2JEaXNhYmxlT25IYXNoQ2hhbmdlITogYm9vbGVhbjtcblx0X2JJZ25vcmVSZXN0b3JlITogYm9vbGVhbjtcblx0X2JGb3JjZUZvY3VzITogYm9vbGVhbjtcblx0X29Sb3V0ZXIhOiBSb3V0ZXI7XG5cdF9vTWFuYWdlZEhpc3RvcnkhOiBhbnlbXTtcblx0X29OYXZpZ2F0aW9uR3VhcmQ6IGFueTtcblx0b1Jlc291cmNlQnVuZGxlPzogUmVzb3VyY2VCdW5kbGU7XG5cdF9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbj86IFN5bmNocm9uaXphdGlvbjtcblx0X2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvOiBib29sZWFuID0gZmFsc2U7XG5cdF9iQXBwbHlSZXN0b3JlOiBib29sZWFuID0gZmFsc2U7XG5cdF9iRGVsYXllZFJlYnVpbGQ6IGJvb2xlYW4gPSBmYWxzZTtcblx0X3BhdGhNYXBwaW5nczogeyBvbGRQYXRoOiBzdHJpbmc7IG5ld1BhdGg6IHN0cmluZyB9W10gPSBbXTtcblxuXHRpbml0KG9BcHBDb21wb25lbnQ6IGFueSwgaXNmY2xFbmFibGVkOiBib29sZWFuKSB7XG5cdFx0Ly8gU2F2ZSB0aGUgbmFtZSBvZiB0aGUgYXBwIChpbmNsdWRpbmcgc3RhcnR1cCBwYXJhbWV0ZXJzKSBmb3IgcmVidWlsZGluZyBmdWxsIGhhc2hlcyBsYXRlclxuXHRcdG9BcHBDb21wb25lbnRcblx0XHRcdC5nZXRTZXJ2aWNlKFwic2hlbGxTZXJ2aWNlc1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9vU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXG5cdFx0XHRcdHRoaXMuaW5pdFJhdyhvQXBwQ29tcG9uZW50LmdldFJvdXRlcigpKTtcblx0XHRcdFx0Ly8gV2Ugd2FudCB0byB3YWl0IHVudGlsIHRoZSBpbml0aWFsIHJvdXRlTWF0Y2hlZCBpcyBkb25lIGJlZm9yZSBkb2luZyBhbnkgbmF2aWdhdGlvblxuXHRcdFx0XHR0aGlzLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXG5cdFx0XHRcdC8vIFNldCBmZUxldmVsPTAgZm9yIHRoZSBmaXJzdCBBcHBsaWNhdGlvbiBwYWdlIGluIHRoZSBoaXN0b3J5XG5cdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdGZlTGV2ZWw6IDBcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRoaXN0b3J5LnN0YXRlXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbiBhcyBhbnlcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5mY2xFbmFibGVkID0gaXNmY2xFbmFibGVkO1xuXG5cdFx0XHRcdHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIgPSB0aGlzLl9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIuYmluZCh0aGlzKTtcblx0XHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBzaGVsbCBzZXJ2aWNlc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdFx0dGhpcy5fZm5IYXNoR3VhcmQgPSB0aGlzLmhhc2hHdWFyZC5iaW5kKHRoaXMpO1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgdGhpcy5fZm5IYXNoR3VhcmQgYXMgYW55KTtcblx0XHR0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA9IGZhbHNlO1xuXHRcdHRoaXMuX2JJZ25vcmVSZXN0b3JlID0gZmFsc2U7XG5cdFx0dGhpcy5fYkZvcmNlRm9jdXMgPSB0cnVlOyAvLyBUcmlnZ2VyIHRoZSBmb2N1cyBtZWNoYW5pc20gZm9yIHRoZSBmaXJzdCB2aWV3IGRpc3BsYXllZCBieSB0aGUgYXBwXG5cdH1cblxuXHRkZXN0cm95KCkge1xuXHRcdGlmICh0aGlzLl9vU2hlbGxTZXJ2aWNlcykge1xuXHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMudW5yZWdpc3Rlck5hdmlnYXRpb25GaWx0ZXIodGhpcy5fZm5CbG9ja2luZ05hdkZpbHRlcik7XG5cdFx0fVxuXHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgdGhpcy5fZm5IYXNoR3VhcmQgYXMgYW55KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSYXcgaW5pdGlhbGl6YXRpb24gKGZvciB1bml0IHRlc3RzKS5cblx0ICpcblx0ICogQHBhcmFtIG9Sb3V0ZXIgVGhlIHJvdXRlciB1c2VkIGJ5IHRoaXMgcHJveHlcblx0ICovXG5cdGluaXRSYXcob1JvdXRlcjogUm91dGVyKSB7XG5cdFx0dGhpcy5fb1JvdXRlciA9IG9Sb3V0ZXI7XG5cdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5ID0gW107XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IG51bGw7XG5cblx0XHRjb25zdCBzQ3VycmVudEFwcEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucHVzaCh0aGlzLl9leHRyYWN0U3RhdGVGcm9tSGFzaChzQ3VycmVudEFwcEhhc2gpKTtcblxuXHRcdC8vIFNldCB0aGUgaUFwcFN0YXRlIGlmIHRoZSBpbml0aWFsIGhhc2ggY29udGFpbnMgb25lXG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gZmluZEFwcFN0YXRlSW5IYXNoKHNDdXJyZW50QXBwSGFzaCk7XG5cdH1cblxuXHRnZXRIYXNoKCkge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHR9XG5cblx0aXNGb2N1c0ZvcmNlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fYkZvcmNlRm9jdXM7XG5cdH1cblxuXHRzZXRGb2N1c0ZvcmNlZChiRm9yY2VkOiBib29sZWFuKSB7XG5cdFx0dGhpcy5fYkZvcmNlRm9jdXMgPSBiRm9yY2VkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgdmFyaWFibGUgc0lBcHBTdGF0ZUtleS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLlJvdXRlclByb3h5I3JlbW92ZUlBcHBTdGF0ZUtleVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdHJlbW92ZUlBcHBTdGF0ZUtleSgpIHtcblx0XHR0aGlzLnNJQXBwU3RhdGVLZXkgPSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmljIGhhc2guXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eSNuYXZUb0hhc2hcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlJvdXRlclByb3h5XG5cdCAqIEBzdGF0aWNcblx0ICogQHBhcmFtIHNIYXNoIEhhc2ggdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBiUHJlc2VydmVIaXN0b3J5IElmIHNldCB0byB0cnVlLCBub24tYW5jZXN0b3IgZW50cmllcyBpbiBoaXN0b3J5IHdpbGwgYmUgcmV0YWluZWRcblx0ICogQHBhcmFtIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUgSWYgc2V0IHRvIHRydWUsIGNhY2hlIHByZXNlcnZhdGlvbiBtZWNoYW5pc20gaXMgZGlzYWJsZWQgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb25cblx0ICogQHBhcmFtIGJGb3JjZUZvY3VzIElmIHNldCB0byB0cnVlLCB0aGUgbG9naWMgdG8gc2V0IHRoZSBmb2N1cyBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZCB3aWxsIGJlIHRyaWdnZXJlZCAob25QYWdlUmVhZHkpXG5cdCAqIEBwYXJhbSBiUHJlc2VydmVTaGVsbEJhY2tOYXZpZ2F0aW9uSGFuZGxlciBJZiBub3Qgc2V0IHRvIGZhbHNlLCB0aGUgYmFjayBuYXZpZ2F0aW9uIGlzIHNldCB0byB1bmRlZmluZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSAocmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQpIHRoYXQgcmV0dXJucyAndHJ1ZScgaWYgYSBuYXZpZ2F0aW9uIHRvb2sgcGxhY2UsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkbid0IGhhcHBlblxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdG5hdlRvSGFzaChcblx0XHRzSGFzaDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuLFxuXHRcdGJGb3JjZUZvY3VzPzogYm9vbGVhbixcblx0XHRiUHJlc2VydmVTaGVsbEJhY2tOYXZpZ2F0aW9uSGFuZGxlcj86IGJvb2xlYW5cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKGJQcmVzZXJ2ZVNoZWxsQmFja05hdmlnYXRpb25IYW5kbGVyICE9PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMuc2V0QmFja05hdmlnYXRpb24oKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24ud2FpdEZvcigpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2ludGVybmFsTmF2VG9IYXNoKHNIYXNoLCBiUHJlc2VydmVIaXN0b3J5LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlLCBiRm9yY2VGb2N1cyk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvKSB7XG5cdFx0XHRcdHRoaXMud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJuYWxOYXZUb0hhc2goc0hhc2gsIGJQcmVzZXJ2ZUhpc3RvcnksIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUsIGJGb3JjZUZvY3VzKTtcblx0XHR9XG5cdH1cblxuXHRfaW50ZXJuYWxOYXZUb0hhc2goc0hhc2g6IGFueSwgYlByZXNlcnZlSGlzdG9yeTogYW55LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlOiBhbnksIGJGb3JjZUZvY3VzPzogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIEFkZCB0aGUgYXBwIHN0YXRlIGluIHRoZSBoYXNoIGlmIG5lZWRlZFxuXHRcdGlmICh0aGlzLmZjbEVuYWJsZWQgJiYgdGhpcy5zSUFwcFN0YXRlS2V5ICYmICFmaW5kQXBwU3RhdGVJbkhhc2goc0hhc2gpKSB7XG5cdFx0XHRzSGFzaCA9IHNldEFwcFN0YXRlSW5IYXNoKHNIYXNoLCB0aGlzLnNJQXBwU3RhdGVLZXkpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jaGVja0hhc2hXaXRoR3VhcmQoc0hhc2gpKSB7XG5cdFx0XHRpZiAoIXRoaXMub1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2UgaGF2ZSB0byB1c2UgYSBjb25maXJtIGhlcmUgZm9yIFVJIGNvbnNpc3RlbmN5IHJlYXNvbnMsIGFzIHdpdGggc29tZSBzY2VuYXJpb3Ncblx0XHRcdC8vIGluIHRoZSBFZGl0RmxvdyB3ZSByZWx5IG9uIGEgVUk1IG1lY2hhbmlzbSB0aGF0IGRpc3BsYXlzIGEgY29uZmlybSBkaWFsb2cuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYWxlcnRcblx0XHRcdGlmICghY29uZmlybSh0aGlzLm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19ST1VURVJfUFJPWFlfU0FQRkVfRVhJVF9OT1RTQVZFRF9NRVNTQUdFXCIpKSkge1xuXHRcdFx0XHQvLyBUaGUgdXNlciBjbGlja2VkIG9uIENhbmNlbCAtLT4gY2FuY2VsIG5hdmlnYXRpb25cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmJJc0d1YXJkQ3Jvc3NBbGxvd2VkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBJbiBjYXNlIHRoZSBuYXZpZ2F0aW9uIHdpbGwgY2F1c2UgYSBuZXcgdmlldyB0byBiZSBkaXNwbGF5ZWQsIHdlIGZvcmNlIHRoZSBmb2N1c1xuXHRcdC8vIEkuZS4gaWYgdGhlIGtleXMgZm9yIHRoZSBoYXNoIHdlJ3JlIG5hdmlnYXRpbmcgdG8gaXMgYSBzdXBlcnNldCBvZiB0aGUgY3VycmVudCBoYXNoIGtleXMuXG5cdFx0Y29uc3Qgb05ld1N0YXRlID0gdGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0hhc2gpO1xuXHRcdGlmICghdGhpcy5fYkZvcmNlRm9jdXMpIHtcblx0XHRcdC8vIElmIHRoZSBmb2N1cyB3YXMgYWxyZWFkeSBmb3JjZWQsIGtlZXAgaXRcblx0XHRcdGNvbnN0IGFDdXJyZW50SGFzaEtleXMgPSB0aGlzLl9leHRyYWN0S2V5c0Zyb21IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRcdHRoaXMuX2JGb3JjZUZvY3VzID1cblx0XHRcdFx0YkZvcmNlRm9jdXMgfHxcblx0XHRcdFx0KGFDdXJyZW50SGFzaEtleXMubGVuZ3RoIDwgb05ld1N0YXRlLmtleXMubGVuZ3RoICYmXG5cdFx0XHRcdFx0YUN1cnJlbnRIYXNoS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5OiBhbnksIGluZGV4OiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBrZXkgPT09IG9OZXdTdGF0ZS5rZXlzW2luZGV4XTtcblx0XHRcdFx0XHR9KSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb0hpc3RvcnlBY3Rpb24gPSB0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCBmYWxzZSwgYlByZXNlcnZlSGlzdG9yeSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSk7XG5cblx0XHRyZXR1cm4gdGhpcy5fcmVidWlsZEJyb3dzZXJIaXN0b3J5KG9IaXN0b3J5QWN0aW9uLCBmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYXJzIGJyb3dzZXIgaGlzdG9yeSBpZiBlbnRyaWVzIGhhdmUgYmVlbiBhZGRlZCB3aXRob3V0IHVzaW5nIHRoZSBSb3V0ZXJQcm94eS5cblx0ICogVXBkYXRlcyB0aGUgaW50ZXJuYWwgaGlzdG9yeSBhY2NvcmRpbmdseS5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uY2UgdGhlIGhpc3RvcnkgaXMgcmVidWlsdFxuXHQgKi9cblx0cmVzdG9yZUhpc3RvcnkoKSB7XG5cdFx0aWYgKHRoaXMuX2JBcHBseVJlc3RvcmUpIHtcblx0XHRcdHRoaXMuX2JBcHBseVJlc3RvcmUgPSBmYWxzZTtcblx0XHRcdGxldCBzVGFyZ2V0SGFzaCA9IHRoaXMuZ2V0SGFzaCgpO1xuXHRcdFx0c1RhcmdldEhhc2ggPSBzVGFyZ2V0SGFzaC5yZXBsYWNlKC8oXFw/fCYpcmVzdG9yZUhpc3Rvcnk9dHJ1ZS8sIFwiXCIpO1xuXHRcdFx0Y29uc3Qgb05ld1N0YXRlID0gdGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc1RhcmdldEhhc2gpO1xuXG5cdFx0XHRjb25zdCBvSGlzdG9yeUFjdGlvbiA9IHRoaXMuX3B1c2hOZXdTdGF0ZShvTmV3U3RhdGUsIHRydWUsIGZhbHNlLCB0cnVlKTtcblxuXHRcdFx0cmV0dXJuIHRoaXMuX3JlYnVpbGRCcm93c2VySGlzdG9yeShvSGlzdG9yeUFjdGlvbiwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGJhY2sgaW4gdGhlIGhpc3RvcnkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKi9cblx0bmF2QmFjaygpIHtcblx0XHRjb25zdCBzQ3VycmVudEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRsZXQgc1ByZXZpb3VzSGFzaDtcblxuXHRcdC8vIExvb2sgZm9yIHRoZSBjdXJyZW50IGhhc2ggaW4gdGhlIG1hbmFnZWQgaGlzdG9yeVxuXHRcdGZvciAobGV0IGkgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuXHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpXS5oYXNoID09PSBzQ3VycmVudEhhc2gpIHtcblx0XHRcdFx0c1ByZXZpb3VzSGFzaCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpIC0gMV0uaGFzaDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNQcmV2aW91c0hhc2gpIHtcblx0XHRcdHJldHVybiB0aGlzLm5hdlRvSGFzaChzUHJldmlvdXNIYXNoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgY291bGRuJ3QgZmluZCBhIHByZXZpb3VzIGhhc2ggaW4gaGlzdG9yeVxuXHRcdFx0Ly8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gbmF2aWdhdGluZyBmcm9tIGEgdHJhbnNpZW50IGhhc2ggaW4gYSBjcmVhdGUgYXBwLCBhbmRcblx0XHRcdC8vIGluIHRoYXQgY2FzZSBoaXN0b3J5LmJhY2sgd291bGQgZ28gYmFjayB0byB0aGUgRkxQXG5cdFx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHJvdXRlIHdpdGggcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIHNSb3V0ZU5hbWUgVGhlIHJvdXRlIG5hbWUgdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBvUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRuYXZUbyhzUm91dGVOYW1lOiBzdHJpbmcsIG9QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzSGFzaCA9IHRoaXMuX29Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUsIG9QYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5uYXZUb0hhc2goc0hhc2gsIGZhbHNlLCBvUGFyYW1ldGVycy5ub1ByZXNlcnZhdGlvbkNhY2hlLCBmYWxzZSwgIW9QYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4aXRzIHRoZSBjdXJyZW50IGFwcCBieSBuYXZpZ2F0aW5nIGJhY2tcblx0ICogdG8gdGhlIHByZXZpb3VzIGFwcCAoaWYgYW55KSBvciB0aGUgRkxQLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB3ZSBleGl0IHRoZSBhcHBcblx0ICovXG5cdGV4aXRGcm9tQXBwKCkge1xuXHRcdHJldHVybiB0aGlzLl9vU2hlbGxTZXJ2aWNlcy5iYWNrVG9QcmV2aW91c0FwcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gaGFzaCBjYW4gaGF2ZSBhbiBpbXBhY3Qgb24gdGhlIGN1cnJlbnQgc3RhdGVcblx0ICogaS5lLiBpZiB0aGUgaGFzaCBpcyBlcXVhbCwgY29tcGF0aWJsZSBvciBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBzdGF0ZS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIGB0cnVlYCBpZiB0aGVyZSBpcyBhbiBpbXBhY3Rcblx0ICogQHJldHVybnMgSWYgdGhlcmUgaXMgYW4gaW1wYWN0XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc0hhc2g6IGFueSkge1xuXHRcdGlmIChzSGFzaFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHNIYXNoID0gc0hhc2guc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRjb25zdCBvTG9jYWxHdWFyZCA9IGNyZWF0ZUd1YXJkRnJvbUhhc2goc0hhc2gpO1xuXHRcdHJldHVybiBvTG9jYWxHdWFyZC5jaGVjayh0aGlzLmdldEhhc2goKSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgbmF2aWdhdGlvbiBpcyBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgZmFsc2VgIGlmIGEgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgaW4gdGhlIFJvdXRlclByb3h5IGFuZCBpcyBub3QgeWV0IGZpbmFsaXplZFxuXHQgKi9cblx0aXNOYXZpZ2F0aW9uRmluYWxpemVkKCkge1xuXHRcdHJldHVybiAhdGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgJiYgIXRoaXMuX2JEZWxheWVkUmVidWlsZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBsYXN0IHN0YXRlIGFzIGEgZ3VhcmQuXG5cdCAqIEVhY2ggZnV0dXJlIG5hdmlnYXRpb24gd2lsbCBiZSBjaGVja2VkIGFnYWluc3QgdGhpcyBndWFyZCwgYW5kIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aWxsXG5cdCAqIGJlIGRpc3BsYXllZCBiZWZvcmUgdGhlIG5hdmlnYXRpb24gY3Jvc3NlcyB0aGUgZ3VhcmQgKGkuZS4gZ29lcyB0byBhbiBhbmNlc3RvciBvZiB0aGUgZ3VhcmQpLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggZm9yIHRoZSBndWFyZFxuXHQgKi9cblx0c2V0TmF2aWdhdGlvbkd1YXJkKHNIYXNoOiBzdHJpbmcpIHtcblx0XHR0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID0gY3JlYXRlR3VhcmRGcm9tSGFzaChzSGFzaCk7XG5cdFx0dGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZCA9IGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGVzIHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKi9cblx0ZGlzY2FyZE5hdmlnYXRpb25HdWFyZCgpIHtcblx0XHR0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIG5hdmlnYXRpb24gZ3VhcmQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW5nIGd1YXJkIGlzIGF2YWlsYWJsZVxuXHQgKi9cblx0aGFzTmF2aWdhdGlvbkd1YXJkKCkge1xuXHRcdHJldHVybiB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkICE9PSBudWxsO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRlc3RzIGEgaGFzaCBhZ2FpbnN0IHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggdG8gYmUgdGVzdGVkXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW5nIHRvIHRoZSBoYXNoIGRvZXNuJ3QgY3Jvc3MgdGhlIGd1YXJkXG5cdCAqL1xuXHRjaGVja0hhc2hXaXRoR3VhcmQoc0hhc2g6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkID09PSBudWxsIHx8IHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQuY2hlY2soc0hhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgdXNlciBhbGxvd2VkIHRoZSBuYXZpZ2F0aW9uIGd1YXJkIHRvIGJlIGNyb3NzZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBjcm9zc2luZyB0aGUgZ3VhcmQgaGFzIGJlZW4gYWxsb3dlZCBieSB0aGUgdXNlclxuXHQgKi9cblx0aXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBY3RpdmF0ZXMgdGhlIHN5bmNocm9uaXphdGlvbiBmb3Igcm91dGVNYXRjaGVkRXZlbnQuXG5cdCAqIFRoZSBuZXh0IE5hdlRvSGFzaCBjYWxsIHdpbGwgY3JlYXRlIGEgU3luY2hyb25pemF0aW9uIG9iamVjdCB0aGF0IHdpbGwgYmUgcmVzb2x2ZWRcblx0ICogYnkgdGhlIGNvcnJlc3BvbmRpbmcgb25Sb3V0ZU1hdGNoZWQgZXZlbnQsIHByZXZlbnRpbmcgYW5vdGhlciBOYXZUb0hhc2ggdG8gaGFwcGVuIGluIHBhcmFsbGVsLlxuXHQgKi9cblx0YWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKCkge1xuXHRcdHRoaXMuX2JBY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvID0gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlIHRoZSByb3V0ZU1hdGNoIHN5bmNocm9uaXphdGlvbiBvYmplY3QsIHVubG9ja2luZyBwb3RlbnRpYWwgcGVuZGluZyBOYXZUb0hhc2ggY2FsbHMuXG5cdCAqL1xuXHRyZXNvbHZlUm91dGVNYXRjaCgpIHtcblx0XHRpZiAodGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24pIHtcblx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWFrZXMgc3VyZSBubyBuYXZpZ2F0aW9uIGNhbiBoYXBwZW4gYmVmb3JlIGEgcm91dGVNYXRjaCBoYXBwZW5lZC5cblx0ICovXG5cdHdhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpIHtcblx0XHR0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbiA9IG5ldyBTeW5jaHJvbml6YXRpb24oKTtcblx0XHR0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyA9IGZhbHNlO1xuXHR9XG5cblx0X2V4dHJhY3RLZXlzRnJvbUhhc2goc0hhc2g6IGFueSkge1xuXHRcdGlmIChzSGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzSGFzaCA9IFwiXCI7XG5cdFx0fVxuXHRcdGNvbnN0IHNIYXNoTm9QYXJhbXMgPSBzSGFzaC5zcGxpdChcIj9cIilbMF07IC8vIHJlbW92ZSBwYXJhbXNcblx0XHRjb25zdCBhVG9rZW5zID0gc0hhc2hOb1BhcmFtcy5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgYUtleXM6IGFueVtdID0gW107XG5cblx0XHRhVG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHNUb2tlbjogYW55KSB7XG5cdFx0XHRjb25zdCByZWdleEtleSA9IC9bXlxcKFxcKV0rXFwoW15cXChcXCldK1xcKS87IC8vIGFiYyhkZWYpXG5cdFx0XHRpZiAocmVnZXhLZXkudGVzdChzVG9rZW4pKSB7XG5cdFx0XHRcdGFLZXlzLnB1c2goc1Rva2VuLnNwbGl0KFwiKFwiKVswXSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYUtleXM7XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGRzIGEgc3RhdGUgZnJvbSBhIGhhc2guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaCB0byBiZSB1c2VkIGFzIGVudHJ5XG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0ZVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICovXG5cdF9leHRyYWN0U3RhdGVGcm9tSGFzaChzSGFzaDogc3RyaW5nKSB7XG5cdFx0aWYgKHNIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHNIYXNoID0gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBvU3RhdGU6IGFueSA9IHtcblx0XHRcdGtleXM6IHRoaXMuX2V4dHJhY3RLZXlzRnJvbUhhc2goc0hhc2gpXG5cdFx0fTtcblxuXHRcdC8vIFJldHJpZXZlIGxheW91dCAoaWYgYW55KVxuXHRcdGNvbnN0IGFMYXlvdXQgPSBzSGFzaC5tYXRjaChuZXcgUmVnRXhwKGBcXFxcPy4qJHtlbnVtVVJMUGFyYW1zLkxBWU9VVFBBUkFNfT0oW14mXSopYCkpO1xuXHRcdG9TdGF0ZS5zTGF5b3V0ID0gYUxheW91dCAmJiBhTGF5b3V0Lmxlbmd0aCA+IDEgPyBhTGF5b3V0WzFdIDogbnVsbDtcblx0XHRpZiAob1N0YXRlLnNMYXlvdXQgPT09IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiKSB7XG5cdFx0XHRvU3RhdGUuc2NyZWVuTW9kZSA9IDE7XG5cdFx0fSBlbHNlIGlmIChvU3RhdGUuc0xheW91dCA9PT0gXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCIpIHtcblx0XHRcdG9TdGF0ZS5zY3JlZW5Nb2RlID0gMjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1N0YXRlLnNjcmVlbk1vZGUgPSAwO1xuXHRcdH1cblxuXHRcdG9TdGF0ZS5oYXNoID0gc0hhc2g7XG5cdFx0cmV0dXJuIG9TdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbmV3IHN0YXRlIGludG8gdGhlIGludGVybmFsIGhpc3Rvcnkgc3RydWN0dXJlLlxuXHQgKiBNYWtlcyBzdXJlIHRoaXMgbmV3IHN0YXRlIGlzIGFkZGVkIGFmdGVyIGFuIGFuY2VzdG9yLlxuXHQgKiBBbHNvIHNldHMgdGhlIGlBcHBTdGF0ZSBrZXkgaW4gdGhlIHdob2xlIGhpc3RvcnkuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAcGFyYW0gb05ld1N0YXRlIFRoZSBuZXcgc3RhdGUgdG8gYmUgYWRkZWRcblx0ICogQHBhcmFtIGJSZWJ1aWxkT25seSBgdHJ1ZWAgaWYgd2UncmUgcmVidWlsZGluZyB0aGUgaGlzdG9yeSBhZnRlciBhIHNoZWxsIG1lbnUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBJZiBzZXQgdG8gdHJ1ZSwgbm9uLWFuY2VzdG9yIGVudHJpZXMgaW4gaGlzdG9yeSB3aWxsIGJlIHJldGFpbmVkXG5cdCAqIEBwYXJhbSBiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24gRGlzYWJsZSB0aGUgbWVjaGFuaXNtIHRvIHJldGFpbmVkIG1hcmtlZCBlbnRyaWVzIGluIGNhY2hlXG5cdCAqIEByZXR1cm5zIFRoZSBuZXcgc3RhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X3B1c2hOZXdTdGF0ZShvTmV3U3RhdGU6IGFueSwgYlJlYnVpbGRPbmx5OiBib29sZWFuLCBiUHJlc2VydmVIaXN0b3J5OiBib29sZWFuLCBiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb246IGJvb2xlYW4pIHtcblx0XHRjb25zdCBzQ3VycmVudEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRsZXQgbGFzdEluZGV4ID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7XG5cdFx0bGV0IGlQb3BDb3VudCA9IGJSZWJ1aWxkT25seSA/IDEgOiAwO1xuXG5cdFx0Ly8gMS4gRG8gc29tZSBjbGVhbnVwIGluIHRoZSBtYW5hZ2VkIGhpc3RvcnkgOiBpbiBjYXNlIHRoZSB1c2VyIGhhcyBuYXZpZ2F0ZWQgYmFjayBpbiB0aGUgYnJvd3NlciBoaXN0b3J5LCB3ZSBuZWVkIHRvIHJlbW92ZVxuXHRcdC8vIHRoZSBzdGF0ZXMgYWhlYWQgaW4gaGlzdG9yeSBhbmQgbWFrZSBzdXJlIHRoZSB0b3Agc3RhdGUgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgcGFnZVxuXHRcdC8vIFdlIGRvbid0IGRvIHRoYXQgd2hlbiByZXN0b3JpbmcgdGhlIGhpc3RvcnksIGFzIHRoZSBjdXJyZW50IHN0YXRlIGhhcyBiZWVuIGFkZGVkIG9uIHRvcCBvZiB0aGUgYnJvd3NlciBoaXN0b3J5XG5cdFx0Ly8gYW5kIGlzIG5vdCByZWZsZWN0ZWQgaW4gdGhlIG1hbmFnZWQgaGlzdG9yeVxuXHRcdGlmICghYlJlYnVpbGRPbmx5KSB7XG5cdFx0XHR3aGlsZSAobGFzdEluZGV4ID49IDAgJiYgdGhpcy5fb01hbmFnZWRIaXN0b3J5W2xhc3RJbmRleF0uaGFzaCAhPT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wb3AoKTtcblx0XHRcdFx0bGFzdEluZGV4LS07XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdC8vIFdlIGNvdWxkbid0IGZpbmQgdGhlIGN1cnJlbnQgbG9jYXRpb24gaW4gdGhlIGhpc3RvcnkuIFRoaXMgY2FuIGhhcHBlbiBpZiBhIGJyb3dzZXIgcmVsb2FkXG5cdFx0XHRcdC8vIGhhcHBlbmVkLCBjYXVzaW5nIGEgcmVpbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlZCBoaXN0b3J5LlxuXHRcdFx0XHQvLyBJbiB0aGF0IGNhc2UsIHdlIHVzZSB0aGUgY3VycmVudCBsb2NhdGlvbiBhcyB0aGUgbmV3IHN0YXJ0aW5nIHBvaW50IGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRcdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5LnB1c2godGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0N1cnJlbnRIYXNoKSk7XG5cdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiAwIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyAyLiBNYXJrIHRoZSB0b3Agc3RhdGUgYXMgcHJlc2VydmVkIGlmIHJlcXVpcmVkXG5cdFx0aWYgKGJQcmVzZXJ2ZUhpc3RvcnkgJiYgIWJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbikge1xuXHRcdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXS5wcmVzZXJ2ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIDMuIFRoZW4gcG9wIGFsbCBzdGF0ZXMgdW50aWwgd2UgZmluZCBhbiBhbmNlc3RvciBvZiB0aGUgbmV3IHN0YXRlLCBvciB3ZSBmaW5kIGEgc3RhdGUgdGhhdCBuZWVkIHRvIGJlIHByZXNlcnZlZFxuXHRcdGxldCBvTGFzdFJlbW92ZWRJdGVtO1xuXHRcdHdoaWxlICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb1RvcFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGJEaXNhYmxlSGlzdG9yeVByZXNlcnZhdGlvbiB8fCAhb1RvcFN0YXRlLnByZXNlcnZlZCkgJiZcblx0XHRcdFx0dGhpcy5fY29tcGFyZUNhY2hlU3RhdGVzKG9Ub3BTdGF0ZSwgb05ld1N0YXRlKSAhPT0gZW51bVN0YXRlLkFOQ0VTVE9SXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhlIHRvcCBzdGF0ZSBpcyBub3QgYW4gYW5jZXN0b3Igb2Ygb05ld1N0YXRlIGFuZCBpcyBub3QgcHJlc2VydmVkIC0tPiB3ZSBjYW4gcG9wIGl0XG5cdFx0XHRcdG9MYXN0UmVtb3ZlZEl0ZW0gPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGlQb3BDb3VudCsrO1xuXHRcdFx0fSBlbHNlIGlmIChvVG9wU3RhdGUucHJlc2VydmVkICYmIHJlbW92ZUFwcFN0YXRlSW5IYXNoKG9Ub3BTdGF0ZS5oYXNoKSA9PT0gcmVtb3ZlQXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gpKSB7XG5cdFx0XHRcdC8vIFdlIHRyeSB0byBhZGQgYSBzdGF0ZSB0aGF0IGlzIGFscmVhZHkgaW4gY2FjaGUgKGR1ZSB0byBwcmVzZXJ2ZWQgZmxhZykgYnV0IHdpdGggYSBkaWZmZXJlbnQgaWFwcC1zdGF0ZVxuXHRcdFx0XHQvLyAtLT4gd2Ugc2hvdWxkIGRlbGV0ZSB0aGUgcHJldmlvdXMgZW50cnkgKGl0IHdpbGwgYmUgbGF0ZXIgcmVwbGFjZWQgYnkgdGhlIG5ldyBvbmUpIGFuZCBzdG9wIHBvcHBpbmdcblx0XHRcdFx0b0xhc3RSZW1vdmVkSXRlbSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wb3AoKTtcblx0XHRcdFx0aVBvcENvdW50Kys7XG5cdFx0XHRcdG9OZXdTdGF0ZS5wcmVzZXJ2ZWQgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJyZWFrOyAvLyBBbmNlc3RvciBvciBwcmVzZXJ2ZWQgc3RhdGUgZm91bmQgLS0+IHdlIHN0b3AgcG9wcGluZyBvdXQgc3RhdGVzXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNC4gaUFwcFN0YXRlIG1hbmFnZW1lbnRcblx0XHR0aGlzLnNJQXBwU3RhdGVLZXkgPSBmaW5kQXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gpO1xuXHRcdGlmICghdGhpcy5mY2xFbmFibGVkICYmIG9MYXN0UmVtb3ZlZEl0ZW0pIHtcblx0XHRcdGNvbnN0IHNQcmV2aW91c0lBcHBTdGF0ZUtleSA9IGZpbmRBcHBTdGF0ZUluSGFzaChvTGFzdFJlbW92ZWRJdGVtLmhhc2gpO1xuXHRcdFx0Y29uc3Qgb0NvbXBhcmlzb25TdGF0ZVJlc3VsdCA9IHRoaXMuX2NvbXBhcmVDYWNoZVN0YXRlcyhvTGFzdFJlbW92ZWRJdGVtLCBvTmV3U3RhdGUpO1xuXHRcdFx0Ly8gaWYgY3VycmVudCBzdGF0ZSBkb2Vzbid0IGNvbnRhaW4gYSBpLWFwcHN0YXRlIGFuZCB0aGlzIHN0YXRlIHNob3VsZCByZXBsYWNlIGEgc3RhdGUgY29udGFpbmluZyBhIGlBcHBTdGF0ZVxuXHRcdFx0Ly8gdGhlbiB0aGUgcHJldmlvdXMgaUFwcFN0YXRlIGlzIHByZXNlcnZlZFxuXHRcdFx0aWYgKFxuXHRcdFx0XHQhdGhpcy5zSUFwcFN0YXRlS2V5ICYmXG5cdFx0XHRcdHNQcmV2aW91c0lBcHBTdGF0ZUtleSAmJlxuXHRcdFx0XHQob0NvbXBhcmlzb25TdGF0ZVJlc3VsdCA9PT0gZW51bVN0YXRlLkVRVUFMIHx8IG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPT09IGVudW1TdGF0ZS5DT01QQVRJQkxFKVxuXHRcdFx0KSB7XG5cdFx0XHRcdG9OZXdTdGF0ZS5oYXNoID0gc2V0QXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gsIHNQcmV2aW91c0lBcHBTdGF0ZUtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gNS4gTm93IHdlIGNhbiBwdXNoIHRoZSBzdGF0ZSBhdCB0aGUgdG9wIG9mIHRoZSBpbnRlcm5hbCBoaXN0b3J5XG5cdFx0Y29uc3QgYkhhc1NhbWVIYXNoID0gb0xhc3RSZW1vdmVkSXRlbSAmJiBvTmV3U3RhdGUuaGFzaCA9PT0gb0xhc3RSZW1vdmVkSXRlbS5oYXNoO1xuXHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoID09PSAwIHx8IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0uaGFzaCAhPT0gb05ld1N0YXRlLmhhc2gpIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKG9OZXdTdGF0ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gNi4gRGV0ZXJtaW5lIHdoaWNoIGFjdGlvbnMgdG8gZG8gb24gdGhlIGhpc3Rvcnlcblx0XHRpZiAoaVBvcENvdW50ID09PSAwKSB7XG5cdFx0XHQvLyBObyBzdGF0ZSB3YXMgcG9wcGVkIC0tPiBhcHBlbmRcblx0XHRcdHJldHVybiB7IHR5cGU6IFwiYXBwZW5kXCIgfTtcblx0XHR9IGVsc2UgaWYgKGlQb3BDb3VudCA9PT0gMSkge1xuXHRcdFx0Ly8gT25seSAxIHN0YXRlIHdhcyBwb3BwZWQgLS0+IHJlcGxhY2UgY3VycmVudCBoYXNoIHVubGVzcyBoYXNoIGlzIHRoZSBzYW1lICh0aGVuIG5vdGhpbmcgdG8gZG8pXG5cdFx0XHRyZXR1cm4gYkhhc1NhbWVIYXNoID8geyB0eXBlOiBcIm5vbmVcIiB9IDogeyB0eXBlOiBcInJlcGxhY2VcIiB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBNb3JlIHRoYW4gMSBzdGF0ZSB3YXMgcG9wcGVkIC0tPiBnbyBiYWtjIGluIGhpc3RvcnkgYW5kIHJlcGxhY2UgaGFzaCBpZiBuZWNlc3Nhcnlcblx0XHRcdHJldHVybiBiSGFzU2FtZUhhc2ggPyB7IHR5cGU6IFwiYmFja1wiLCBzdGVwczogaVBvcENvdW50IC0gMSB9IDogeyB0eXBlOiBcImJhY2stcmVwbGFjZVwiLCBzdGVwczogaVBvcENvdW50IC0gMSB9O1xuXHRcdH1cblx0fVxuXG5cdF9ibG9ja2luZ05hdmlnYXRpb25GaWx0ZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID8gXCJDdXN0b21cIiA6IFwiQ29udGludWVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlIHRoZSByb3V0aW5nIGJ5IGNhbGxpbmcgdGhlIHJvdXRlciBzdG9wIG1ldGhvZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlKCkge1xuXHRcdHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID0gdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyLnN0b3AoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGUgdGhlIHJvdXRpbmcgYnkgY2FsbGluZyB0aGUgcm91dGVyIGluaXRpYWxpemUgbWV0aG9kLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuUm91dGVyUHJveHkjX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAcGFyYW0gW2JJZ25vcmVDdXJyZW50SGFzaF0gSWdub3JlIHRoZSBsYXN0IGhhc2ggZXZlbnQgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgcm91dGVyIGhhcyBpbml0aWFsaXplZFxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UoYklnbm9yZUN1cnJlbnRIYXNoOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9vUm91dGVyLmluaXRpYWxpemUoYklnbm9yZUN1cnJlbnRIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTeW5jaHJvbml6ZXMgdGhlIGJyb3dzZXIgaGlzdG9yeSB3aXRoIHRoZSBpbnRlcm5hbCBoaXN0b3J5IG9mIHRoZSByb3V0ZXJQcm94eSwgYW5kIHRyaWdnZXJzIGEgbmF2aWdhdGlvbiBpZiBuZWVkZWQuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAcGFyYW0gb0hpc3RvcnlBY3Rpb24gU3BlY2lmaWVzIHRoZSBuYXZpZ2F0aW9uIGFjdGlvbiB0byBiZSBwZXJmb3JtZWRcblx0ICogQHBhcmFtIGJSZWJ1aWxkT25seSBgdHJ1ZWAgaWYgaW50ZXJuYWwgaGlzdG9yeSBpcyBjdXJyZW50bHkgYmVpbmcgcmVidWlsdFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIChyZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZCkgdGhhdCByZXR1cm5zICd0cnVlJyBpZiBhIG5hdmlnYXRpb24gdG9vayBwbGFjZSwgJ2ZhbHNlJyBpZiB0aGUgbmF2aWdhdGlvbiBkaWRuJ3QgaGFwcGVuXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb246IGFueSwgYlJlYnVpbGRPbmx5OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IHRydWU7XG5cdFx0XHRjb25zdCBvVGFyZ2V0U3RhdGUgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdLFxuXHRcdFx0XHRuZXdMZXZlbCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxO1xuXG5cdFx0XHRmdW5jdGlvbiByZXBsYWNlQXN5bmMoKSB7XG5cdFx0XHRcdGlmICghYlJlYnVpbGRPbmx5KSB7XG5cdFx0XHRcdFx0dGhhdC5fZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UodHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQodGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogbmV3TGV2ZWwgfSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIpO1xuXG5cdFx0XHRcdGlmIChiUmVidWlsZE9ubHkpIHtcblx0XHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdC8vIFRpbWVvdXQgdG8gbGV0ICdoYXNoY2hhbmdlJyBldmVudCBiZSBwcm9jZXNzZWQgYmVmb3JlIGJ5IHRoZSBIYXNoQ2hhbmdlciwgc28gdGhhdFxuXHRcdFx0XHRcdFx0Ly8gb25Sb3V0ZU1hdGNoZWQgbm90aWZpY2F0aW9uIGlzbid0IHJhaXNlZFxuXHRcdFx0XHRcdFx0dGhhdC5fZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2UodHJ1ZSk7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXN5bmMgY2FsbGJhY2tzIHdoZW4gbmF2aWdhdGluZyBiYWNrLCBpbiBvcmRlciB0byBsZXQgYWxsIG5vdGlmaWNhdGlvbnMgYW5kIGV2ZW50cyBnZXQgcHJvY2Vzc2VkXG5cdFx0XHRmdW5jdGlvbiBiYWNrUmVwbGFjZUFzeW5jKCkge1xuXHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIGJhY2tSZXBsYWNlQXN5bmMpO1xuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHQvLyBUaW1lb3V0IHRvIGxldCAnaGFzaGNoYW5nZScgZXZlbnQgYmUgcHJvY2Vzc2VkIGJlZm9yZSBieSB0aGUgSGFzaENoYW5nZXJcblx0XHRcdFx0XHRyZXBsYWNlQXN5bmMoKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGJhY2tBc3luYygpIHtcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrQXN5bmMpO1xuXHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdH1cblxuXHRcdFx0dGhhdC5fYklnbm9yZVJlc3RvcmUgPSB0cnVlO1xuXG5cdFx0XHRzd2l0Y2ggKG9IaXN0b3J5QWN0aW9uLnR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInJlcGxhY2VcIjpcblx0XHRcdFx0XHQodGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIGFueSkob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiBuZXdMZXZlbCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYXBwZW5kXCI6XG5cdFx0XHRcdFx0dGhhdC5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnNldEhhc2gob1RhcmdldFN0YXRlLmhhc2gpO1xuXHRcdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiBuZXdMZXZlbCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpOyAvLyBhIG5hdmlnYXRpb24gb2NjdXJyZWRcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYmFja1wiOlxuXHRcdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja0FzeW5jKTtcblx0XHRcdFx0XHRoaXN0b3J5LmdvKC1vSGlzdG9yeUFjdGlvbi5zdGVwcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImJhY2stcmVwbGFjZVwiOlxuXHRcdFx0XHRcdHRoaXMuX2Rpc2FibGVFdmVudE9uSGFzaENoYW5nZSgpO1xuXHRcdFx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja1JlcGxhY2VBc3luYyk7XG5cdFx0XHRcdFx0aGlzdG9yeS5nbygtb0hpc3RvcnlBY3Rpb24uc3RlcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gTm8gbmF2aWdhdGlvblxuXHRcdFx0XHRcdHRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7IC8vIG5vIG5hdmlnYXRpb24gLS0+IHJlc29sdmUgdG8gZmFsc2Vcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldExhc3RIaXN0b3J5RW50cnkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdH1cblxuXHRzZXRQYXRoTWFwcGluZyhtYXBwaW5nczogeyBvbGRQYXRoOiBzdHJpbmc7IG5ld1BhdGg6IHN0cmluZyB9W10pIHtcblx0XHR0aGlzLl9wYXRoTWFwcGluZ3MgPSBtYXBwaW5ncy5maWx0ZXIoKG1hcHBpbmcpID0+IHtcblx0XHRcdHJldHVybiBtYXBwaW5nLm9sZFBhdGggIT09IG1hcHBpbmcubmV3UGF0aDtcblx0XHR9KTtcblx0fVxuXG5cdGhhc2hHdWFyZCgpIHtcblx0XHRsZXQgc0hhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuXHRcdGlmIChzSGFzaC5pbmRleE9mKFwicmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiKSAhPT0gLTEpIHtcblx0XHRcdHRoaXMuX2JBcHBseVJlc3RvcmUgPSB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgaGFzaCBuZWVkcyB0byBiZSBjaGFuZ2VkICh0aGlzIGhhcHBlbnMgaW4gRkNMIHdoZW4gc3dpdGNoaW5nIGIvdyBlZGl0IGFuZCByZWFkLW9ubHkgd2l0aCAzIGNvbHVtbnMgb3Blbilcblx0XHRcdGNvbnN0IG1hcHBpbmcgPSB0aGlzLl9wYXRoTWFwcGluZ3MuZmluZCgobSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gc0hhc2guaW5kZXhPZihtLm9sZFBhdGgpID49IDA7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChtYXBwaW5nKSB7XG5cdFx0XHRcdC8vIFJlcGxhY2UgdGhlIGN1cnJlbnQgaGFzaFxuXHRcdFx0XHRzSGFzaCA9IHNIYXNoLnJlcGxhY2UobWFwcGluZy5vbGRQYXRoLCBtYXBwaW5nLm5ld1BhdGgpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHt9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIiwgc0hhc2gpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgYUhhc2hTcGxpdCA9IHNIYXNoLnNwbGl0KFwiJi9cIik7XG5cdFx0XHRcdGNvbnN0IHNBcHBIYXNoID0gYUhhc2hTcGxpdFsxXSA/IGFIYXNoU3BsaXRbMV0gOiBcIlwiO1xuXHRcdFx0XHRpZiAodGhpcy5jaGVja0hhc2hXaXRoR3VhcmQoc0FwcEhhc2gpKSB7XG5cdFx0XHRcdFx0dGhpcy5fYkRlbGF5ZWRSZWJ1aWxkID0gdHJ1ZTtcblx0XHRcdFx0XHRjb25zdCBvTmV3U3RhdGUgPSB0aGlzLl9leHRyYWN0U3RhdGVGcm9tSGFzaChzQXBwSGFzaCk7XG5cdFx0XHRcdFx0dGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fYkRlbGF5ZWRSZWJ1aWxkID0gZmFsc2U7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGFyZXMgMiBzdGF0ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUxXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUyXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5FUVVBTCBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBlcXVhbFxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuQ09NUEFUSUJMRSBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBjb21wYXRpYmxlXG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5BTkNFU1RPUiBpZiBvU3RhdGUxIGlzIGFuIGFuY2VzdG9yIG9mIG9TdGF0ZTJcblx0ICogICAgICAgIC0gZW51bVN0YXRlLkRJRkZFUkVOVCBpZiB0aGUgMiBzdGF0ZXMgYXJlIGRpZmZlcmVudFxuXHQgKi9cblxuXHRfY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTE6IGFueSwgb1N0YXRlMjogYW55KSB7XG5cdFx0Ly8gRmlyc3QgY29tcGFyZSBvYmplY3Qga2V5c1xuXHRcdGlmIChvU3RhdGUxLmtleXMubGVuZ3RoID4gb1N0YXRlMi5rZXlzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5ESUZGRVJFTlQ7XG5cdFx0fVxuXHRcdGxldCBlcXVhbCA9IHRydWU7XG5cdFx0bGV0IGluZGV4O1xuXHRcdGZvciAoaW5kZXggPSAwOyBlcXVhbCAmJiBpbmRleCA8IG9TdGF0ZTEua2V5cy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdGlmIChvU3RhdGUxLmtleXNbaW5kZXhdICE9PSBvU3RhdGUyLmtleXNbaW5kZXhdKSB7XG5cdFx0XHRcdGVxdWFsID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghZXF1YWwpIHtcblx0XHRcdC8vIFNvbWUgb2JqZWN0cyBrZXlzIGFyZSBkaWZmZXJlbnRcblx0XHRcdHJldHVybiBlbnVtU3RhdGUuRElGRkVSRU5UO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBrZXlzIGZyb20gb1N0YXRlMSBhcmUgaW4gb1N0YXRlMiAtLT4gY2hlY2sgaWYgYW5jZXN0b3Jcblx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA8IG9TdGF0ZTIua2V5cy5sZW5ndGggfHwgb1N0YXRlMS5zY3JlZW5Nb2RlIDwgb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkFOQ0VTVE9SO1xuXHRcdH1cblx0XHRpZiAob1N0YXRlMS5zY3JlZW5Nb2RlID4gb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkRJRkZFUkVOVDsgLy8gTm90IHN1cmUgdGhpcyBjYXNlIGNhbiBoYXBwZW4uLi5cblx0XHR9XG5cblx0XHQvLyBBdCB0aGlzIHN0YWdlLCB0aGUgMiBzdGF0ZXMgaGF2ZSB0aGUgc2FtZSBvYmplY3Qga2V5cyAoaW4gdGhlIHNhbWUgb3JkZXIpIGFuZCBzYW1lIHNjcmVlbm1vZGVcblx0XHQvLyBUaGV5IGNhbiBiZSBlaXRoZXIgY29tcGF0aWJsZSBvciBlcXVhbFxuXHRcdHJldHVybiBvU3RhdGUxLnNMYXlvdXQgPT09IG9TdGF0ZTIuc0xheW91dCA/IGVudW1TdGF0ZS5FUVVBTCA6IGVudW1TdGF0ZS5DT01QQVRJQkxFO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBiYWNrIGV4aXRzIHRoZSBwcmVzZW50IGd1YXJkIHNldC5cblx0ICpcblx0ICogQHBhcmFtIHNQcmVzZW50SGFzaCBUaGUgY3VycmVudCBoYXNoLiBPbmx5IHVzZWQgZm9yIHVuaXQgdGVzdHMuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBiYWNrIGV4aXRzIHRoZXJlIGlzIGEgZ3VhcmQgZXhpdCBvbiBiYWNrXG5cdCAqL1xuXHRjaGVja0lmQmFja0lzT3V0T2ZHdWFyZChzUHJlc2VudEhhc2g/OiBzdHJpbmcpIHtcblx0XHRsZXQgc1ByZXZIYXNoO1xuXHRcdGxldCBzQ3VycmVudEhhc2g6IHN0cmluZztcblx0XHRpZiAoc1ByZXNlbnRIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFdlIHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBpbnN0ZWFkIG9mIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpIGJlY2F1c2UgdGhlIGxhdHRlclxuXHRcdFx0Ly8gcmVwbGFjZXMgY2hhcmFjdGVycyBpbiB0aGUgVVJMIChlLmcuICUyNCByZXBsYWNlZCBieSAkKSBhbmQgaXQgY2F1c2VzIGlzc3VlcyB3aGVuIGNvbXBhcmluZ1xuXHRcdFx0Ly8gd2l0aCB0aGUgVVJMcyBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRjb25zdCBvU3BsaXRIYXNoID0gdGhpcy5fb1NoZWxsU2VydmljZXMuc3BsaXRIYXNoKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSBhcyBhbnk7XG5cdFx0XHRpZiAob1NwbGl0SGFzaCAmJiBvU3BsaXRIYXNoLmFwcFNwZWNpZmljUm91dGUpIHtcblx0XHRcdFx0c0N1cnJlbnRIYXNoID0gb1NwbGl0SGFzaC5hcHBTcGVjaWZpY1JvdXRlO1xuXHRcdFx0XHRpZiAoc0N1cnJlbnRIYXNoLmluZGV4T2YoXCImL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdHNDdXJyZW50SGFzaCA9IHNDdXJyZW50SGFzaC5zdWJzdHJpbmcoMik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNDdXJyZW50SGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSAnIydcblx0XHRcdFx0aWYgKHNDdXJyZW50SGFzaFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDdXJyZW50SGFzaCA9IHNQcmVzZW50SGFzaDtcblx0XHR9XG5cdFx0c1ByZXNlbnRIYXNoID0gVVJJLmRlY29kZShzQ3VycmVudEhhc2gpO1xuXHRcdGlmICh0aGlzLl9vTmF2aWdhdGlvbkd1YXJkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpXS5oYXNoID09PSBzUHJlc2VudEhhc2gpIHtcblx0XHRcdFx0XHRzUHJldkhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICFzUHJldkhhc2ggfHwgIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNQcmV2SGFzaCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGxhc3QgMiBlbnRyaWVzIGluIHRoZSBoaXN0b3J5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGV5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqL1xuXHRjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkge1xuXHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIDwgMikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9DdXJyZW50U3RhdGUgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdO1xuXHRcdGNvbnN0IG9QcmV2aW91c1N0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAyXTtcblxuXHRcdHJldHVybiBvQ3VycmVudFN0YXRlLmhhc2guc3BsaXQoXCI/XCIpWzBdID09PSBvUHJldmlvdXNTdGF0ZS5oYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXJQcm94eTtcbiJdfQ==
@@ -550,12 +550,7 @@ class RouterProxy extends BaseObject {
550
550
 
551
551
  // 4. iAppState management
552
552
  this.sIAppStateKey = findAppStateInHash(oNewState.hash);
553
- if (this.fclEnabled && this.sIAppStateKey) {
554
- // In case of FCL, the new app state needs to be applied to the whole history
555
- this._oManagedHistory.forEach((oManagedState: any) => {
556
- oManagedState.hash = setAppStateInHash(oManagedState.hash, this.sIAppStateKey);
557
- });
558
- } else if (!this.fclEnabled && oLastRemovedItem) {
553
+ if (!this.fclEnabled && oLastRemovedItem) {
559
554
  const sPreviousIAppStateKey = findAppStateInHash(oLastRemovedItem.hash);
560
555
  const oComparisonStateResult = this._compareCacheStates(oLastRemovedItem, oNewState);
561
556
  // if current state doesn't contain a i-appstate and this state should replace a state containing a iAppState
@@ -230,6 +230,11 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "s
230
230
  }
231
231
  };
232
232
 
233
+ _proto.getUIBusy = function getUIBusy() {
234
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
235
+ return this._busy;
236
+ };
237
+
233
238
  FileWrapper.render = function render(renderManager, fileWrapper) {
234
239
  renderManager.openStart("div", fileWrapper); // FileWrapper control div
235
240
 
@@ -357,4 +362,4 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/helpers/ClassSupport", "s
357
362
  })), _class2)) || _class);
358
363
  return FileWrapper;
359
364
  }, false);
360
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbGVXcmFwcGVyLnRzIl0sIm5hbWVzIjpbIkZpbGVXcmFwcGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2J1c3kiLCJnZXRBY2Nlc3NpYmlsaXR5SW5mbyIsImFjY0luZm8iLCJhdmF0YXIiLCJwdXNoIiwiaWNvbiIsImxpbmsiLCJ0ZXh0IiwiZmlsZVVwbG9hZGVyIiwiZGVsZXRlQnV0dG9uIiwiY2hpbGRyZW4iLCJvbkJlZm9yZVJlbmRlcmluZyIsIl9zZXRBcmlhTGFiZWxzIiwiX2FkZFNpZGVFZmZlY3RzIiwiX3NldEFyaWFMYWJlbGxlZEJ5Iiwic291cmNlUHJvcGVydHkiLCJzb3VyY2VQYXRoIiwicGF0aCIsInBhcmVudEVudGl0eVNldFdpdGhTbGFzaCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZ2V0Q3VzdG9tRGF0YSIsImZvckVhY2giLCJpdGVtIiwiZ2V0UHJvcGVydHkiLCJwYXJlbnRFbnRpdHlTZXQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwibGVuZ3RoIiwicmVwbGFjZSIsInByb3BlcnR5UGF0aCIsImZpbGVuYW1lIiwibWVkaWFUeXBlIiwiX2dldFNpZGVFZmZlY3RDb250cm9sbGVyIiwiYWRkQ29udHJvbFNpZGVFZmZlY3RzIiwicGFyZW50RW50aXR5VHlwZSIsIlNvdXJjZVByb3BlcnRpZXMiLCJUYXJnZXRFbnRpdGllcyIsInNvdXJjZUNvbnRyb2xJZCIsImdldElkIiwiY29udHJvbGxlciIsIl9nZXRWaWV3Q29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsInVuZGVmaW5lZCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0VXBsb2FkVXJsIiwiY29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwidXBsb2FkVXJsIiwiZ2V0UGF0aCIsImdldENhbm9uaWNhbFBhdGgiLCJzZXRVSUJ1c3kiLCJidXN5IiwidGhhdCIsImJ1c3lEaWFsb2ciLCJCdXN5RGlhbG9nIiwiUmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwic2V0VGltZW91dCIsIm9wZW4iLCJjbG9zZSIsInJlbmRlciIsInJlbmRlck1hbmFnZXIiLCJmaWxlV3JhcHBlciIsIm9wZW5TdGFydCIsInN0eWxlIiwid2lkdGgiLCJvcGVuRW5kIiwicmVuZGVyQ29udHJvbCIsImRlc3Ryb3kiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwib1NpZGVFZmZlY3RzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiRmllbGRXcmFwcGVyIiwicHJvdG90eXBlIiwiYXBwbHkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFlTUEsVyxXQURMQyxjQUFjLENBQUMsa0NBQUQsQyxVQUViQyxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBRCxDLFVBRVJELFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFELEMsVUFFUkQsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQUQsQyxVQUVSRCxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBRCxDLFVBRVJELFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFELEMsVUFFUkQsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQUQsQyxVQUVSQyxXQUFXLENBQUM7QUFBRUQsSUFBQUEsSUFBSSxFQUFFLGNBQVI7QUFBd0JFLElBQUFBLFFBQVEsRUFBRTtBQUFsQyxHQUFELEMsVUFFWEQsV0FBVyxDQUFDO0FBQUVELElBQUFBLElBQUksRUFBRSxrQkFBUjtBQUE0QkUsSUFBQUEsUUFBUSxFQUFFO0FBQXRDLEdBQUQsQyxXQUVYRCxXQUFXLENBQUM7QUFBRUQsSUFBQUEsSUFBSSxFQUFFLFlBQVI7QUFBc0JF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LEtBQXhCLEVBaENxRSxDQWdDckM7O0FBQ2hDRixNQUFBQSxhQUFhLENBQUNHLEtBQWQsQ0FBb0IsU0FBcEIsRUFBK0IsTUFBL0I7QUFDQUgsTUFBQUEsYUFBYSxDQUFDRyxLQUFkLENBQW9CLGFBQXBCLEVBQW1DLFFBQW5DO0FBQ0FILE1BQUFBLGFBQWEsQ0FBQ0ssT0FBZDtBQUNBTCxNQUFBQSxhQUFhLENBQUNNLGFBQWQsQ0FBNEJMLFdBQVcsQ0FBQzFELFlBQXhDLEVBcENxRSxDQW9DZDs7QUFDdkR5RCxNQUFBQSxhQUFhLENBQUNNLGFBQWQsQ0FBNEJMLFdBQVcsQ0FBQ3pELFlBQXhDLEVBckNxRSxDQXFDZDs7QUFDdkR3RCxNQUFBQSxhQUFhLENBQUNGLEtBQWQsQ0FBb0IsS0FBcEIsRUF0Q3FFLENBc0N6Qzs7QUFFNUJFLE1BQUFBLGFBQWEsQ0FBQ0YsS0FBZCxDQUFvQixLQUFwQixFQXhDcUUsQ0F3Q3pDOztBQUU1QkUsTUFBQUEsYUFBYSxDQUFDRixLQUFkLENBQW9CLEtBQXBCLEVBMUNxRSxDQTBDekM7QUFDNUIsSzs7V0FDRFMsTyxHQUFBLGlCQUFRQyxtQkFBUixFQUFzQztBQUNyQyxVQUFNQyxZQUFZLEdBQUcsS0FBSzFDLHdCQUFMLEVBQXJCOztBQUNBLFVBQUkwQyxZQUFKLEVBQWtCO0FBQ2pCQSxRQUFBQSxZQUFZLENBQUNDLHdCQUFiLENBQXNDLElBQXRDO0FBQ0E7O0FBQ0QsYUFBTyxLQUFLbkIsVUFBWjtBQUNBb0IsTUFBQUEsWUFBWSxDQUFDQyxTQUFiLENBQXVCTCxPQUF2QixDQUErQk0sS0FBL0IsQ0FBcUMsSUFBckMsRUFBMkMsQ0FBQ0wsbUJBQUQsQ0FBM0M7QUFDQSxLOzs7SUFyTHdCRyxZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1NBd0xYbEYsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCBCdXN5RGlhbG9nIGZyb20gXCJzYXAvbS9CdXN5RGlhbG9nXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IHR5cGUgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IHR5cGUgSWNvbiBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblwiO1xuaW1wb3J0IHR5cGUgeyBVUkkgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIFY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmllbGRXcmFwcGVyIGZyb20gXCIuL0ZpZWxkV3JhcHBlclwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5GaWxlV3JhcHBlclwiKVxuY2xhc3MgRmlsZVdyYXBwZXIgZXh0ZW5kcyBGaWVsZFdyYXBwZXIge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5jb3JlLlVSSVwiIH0pXG5cdHVwbG9hZFVybCE6IFVSSTtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiIH0pXG5cdHBhcmVudEVudGl0eVNldCE6IENvbnRleHQ7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiB9KVxuXHRwYXJlbnRFbnRpdHlUeXBlITogQ29udGV4dDtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwcm9wZXJ0eVBhdGghOiBzdHJpbmc7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZmlsZW5hbWUhOiBzdHJpbmc7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bWVkaWFUeXBlITogc3RyaW5nO1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkF2YXRhclwiLCBtdWx0aXBsZTogZmFsc2UgfSlcblx0YXZhdGFyITogQXZhdGFyO1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkljb25cIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGljb24hOiBJY29uO1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkxpbmtcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGxpbmshOiBMaW5rO1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLlRleHRcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdHRleHQhOiBUZXh0O1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS51bmlmaWVkLkZpbGVVcGxvYWRlclwiLCBtdWx0aXBsZTogZmFsc2UgfSlcblx0ZmlsZVVwbG9hZGVyITogRmlsZVVwbG9hZGVyO1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkJ1dHRvblwiLCBtdWx0aXBsZTogZmFsc2UgfSlcblx0ZGVsZXRlQnV0dG9uITogQnV0dG9uO1xuXHRwcml2YXRlIF9idXN5OiBib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgYnVzeURpYWxvZz86IEJ1c3lEaWFsb2c7XG5cblx0Z2V0QWNjZXNzaWJpbGl0eUluZm8oKSB7XG5cdFx0Y29uc3QgYWNjSW5mbyA9IFtdO1xuXHRcdGlmICh0aGlzLmF2YXRhcikge1xuXHRcdFx0YWNjSW5mby5wdXNoKHRoaXMuYXZhdGFyKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuaWNvbikge1xuXHRcdFx0YWNjSW5mby5wdXNoKHRoaXMuaWNvbik7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmxpbmspIHtcblx0XHRcdGFjY0luZm8ucHVzaCh0aGlzLmxpbmspO1xuXHRcdH1cblx0XHRpZiAodGhpcy50ZXh0KSB7XG5cdFx0XHRhY2NJbmZvLnB1c2godGhpcy50ZXh0KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZmlsZVVwbG9hZGVyKSB7XG5cdFx0XHRhY2NJbmZvLnB1c2godGhpcy5maWxlVXBsb2FkZXIpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5kZWxldGVCdXR0b24pIHtcblx0XHRcdGFjY0luZm8ucHVzaCh0aGlzLmRlbGV0ZUJ1dHRvbik7XG5cdFx0fVxuXHRcdHJldHVybiB7IGNoaWxkcmVuOiBhY2NJbmZvIH07XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHR0aGlzLl9zZXRBcmlhTGFiZWxzKCk7XG5cdFx0dGhpcy5fYWRkU2lkZUVmZmVjdHMoKTtcblx0fVxuXG5cdF9zZXRBcmlhTGFiZWxzKCkge1xuXHRcdHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KHRoaXMuYXZhdGFyKTtcblx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSh0aGlzLmljb24pO1xuXHRcdHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KHRoaXMubGluayk7XG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy50ZXh0KTtcblx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSh0aGlzLmZpbGVVcGxvYWRlcik7XG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5kZWxldGVCdXR0b24pO1xuXHR9XG5cblx0X2FkZFNpZGVFZmZlY3RzKCkge1xuXHRcdC8vIGFkZCBTaWRlRWZmZWN0cyBmb3Igc3RyZWFtIGNvbnRlbnQsIGZpbGVuYW1lIGFuZCBtZWRpYXR5cGVcblx0XHRsZXQgc291cmNlUHJvcGVydHkgPSBcIlwiLFxuXHRcdFx0c291cmNlUGF0aCA9IFwiXCIsXG5cdFx0XHRwYXRoID0gXCJcIixcblx0XHRcdHBhcmVudEVudGl0eVNldFdpdGhTbGFzaCA9IFwiXCI7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblByb3BlcnRpZXM6IG9iamVjdFtdID0gW107XG5cdFx0dGhpcy5nZXRDdXN0b21EYXRhKCkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogYW55KSB7XG5cdFx0XHRpZiAoaXRlbS5nZXRQcm9wZXJ0eShcImtleVwiKSA9PT0gXCJzb3VyY2VQYXRoXCIpIHtcblx0XHRcdFx0c291cmNlUGF0aCA9IGl0ZW0uZ2V0UHJvcGVydHkoXCJ2YWx1ZVwiKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRwYXJlbnRFbnRpdHlTZXRXaXRoU2xhc2ggPSBgLyR7dGhpcy5wYXJlbnRFbnRpdHlTZXR9L2A7XG5cdFx0c291cmNlUHJvcGVydHkgPSBzb3VyY2VQYXRoLnN1YnN0cmluZyhcblx0XHRcdHNvdXJjZVBhdGguaW5kZXhPZihwYXJlbnRFbnRpdHlTZXRXaXRoU2xhc2gpICsgcGFyZW50RW50aXR5U2V0V2l0aFNsYXNoLmxlbmd0aCxcblx0XHRcdHNvdXJjZVBhdGgubGVuZ3RoXG5cdFx0KTtcblx0XHRwYXRoID0gc291cmNlUHJvcGVydHkucmVwbGFjZSh0aGlzLnByb3BlcnR5UGF0aCwgXCJcIik7XG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaCh7IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjogc291cmNlUHJvcGVydHkgfSk7XG5cdFx0aWYgKHRoaXMuZmlsZW5hbWUpIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goeyBcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI6IHBhdGggKyB0aGlzLmZpbGVuYW1lIH0pO1xuXHRcdH1cblx0XHRpZiAodGhpcy5tZWRpYVR5cGUpIHtcblx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goeyBcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI6IHBhdGggKyB0aGlzLm1lZGlhVHlwZSB9KTtcblx0XHR9XG5cdFx0dGhpcy5fZ2V0U2lkZUVmZmVjdENvbnRyb2xsZXIoKS5hZGRDb250cm9sU2lkZUVmZmVjdHModGhpcy5wYXJlbnRFbnRpdHlUeXBlLCB7XG5cdFx0XHRTb3VyY2VQcm9wZXJ0aWVzOiBzb3VyY2VQcm9wZXJ0eSxcblx0XHRcdFRhcmdldEVudGl0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdHNvdXJjZUNvbnRyb2xJZDogdGhpcy5nZXRJZCgpXG5cdFx0fSk7XG5cdH1cblx0X2dldFNpZGVFZmZlY3RDb250cm9sbGVyKCkge1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLl9nZXRWaWV3Q29udHJvbGxlcigpO1xuXHRcdHJldHVybiBjb250cm9sbGVyID8gY29udHJvbGxlci5fc2lkZUVmZmVjdHMgOiB1bmRlZmluZWQ7XG5cdH1cblx0X2dldFZpZXdDb250cm9sbGVyKCkge1xuXHRcdGNvbnN0IHZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KHRoaXMpO1xuXHRcdHJldHVybiB2aWV3ICYmIHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cdGdldFVwbG9hZFVybCgpIHtcblx0XHQvLyBzZXQgdXBsb2FkIHVybCBhcyBjYW5vbmljYWwgdXJsIGZvciBOYXZpZ2F0aW9uUHJvcGVydGllc1xuXHRcdC8vIHRoaXMgaXMgYSB3b3JrYXJvdW5kIGFzIHNvbWUgYmFja2VuZHMgY2Fubm90IHJlc29sdmUgTmF2aWdhdGlvbnNQcm9wZXJ0aWVzIGZvciBzdHJlYW0gdHlwZXNcblx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIFY0Q29udGV4dDtcblx0XHRyZXR1cm4gY29udGV4dCA/IHRoaXMudXBsb2FkVXJsLnJlcGxhY2UoY29udGV4dC5nZXRQYXRoKCksIGNvbnRleHQuZ2V0Q2Fub25pY2FsUGF0aCgpKSA6IFwiXCI7XG5cdH1cblx0c2V0VUlCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHR0aGlzLl9idXN5ID0gYnVzeTtcblx0XHRpZiAoYnVzeSkge1xuXHRcdFx0aWYgKCF0aGlzLmJ1c3lEaWFsb2cpIHtcblx0XHRcdFx0dGhpcy5idXN5RGlhbG9nID0gbmV3IEJ1c3lEaWFsb2coe1xuXHRcdFx0XHRcdHRleHQ6IFJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk1fRklMRVdSQVBQRVJfQlVTWV9ESUFMT0dfVElUTEVcIiksXG5cdFx0XHRcdFx0c2hvd0NhbmNlbEJ1dHRvbjogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHRoYXQuX2J1c3kpIHtcblx0XHRcdFx0XHR0aGF0LmJ1c3lEaWFsb2c/Lm9wZW4oKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMTAwMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYnVzeURpYWxvZz8uY2xvc2UoZmFsc2UpO1xuXHRcdH1cblx0fVxuXHRzdGF0aWMgcmVuZGVyKHJlbmRlck1hbmFnZXI6IFJlbmRlck1hbmFnZXIsIGZpbGVXcmFwcGVyOiBGaWxlV3JhcHBlcikge1xuXHRcdHJlbmRlck1hbmFnZXIub3BlblN0YXJ0KFwiZGl2XCIsIGZpbGVXcmFwcGVyKTsgLy8gRmlsZVdyYXBwZXIgY29udHJvbCBkaXZcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwid2lkdGhcIiwgZmlsZVdyYXBwZXIud2lkdGgpO1xuXHRcdHJlbmRlck1hbmFnZXIub3BlbkVuZCgpO1xuXG5cdFx0Ly8gT3V0ZXIgQm94XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuU3RhcnQoXCJkaXZcIik7IC8vIGRpdiBmb3IgYWxsIGNvbnRyb2xzXG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJib3gtc2l6aW5nXCIsIFwiYm9yZGVyLWJveFwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwianVzdGlmeS1jb250ZW50XCIsIFwic3BhY2UtYmV0d2VlblwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiYWxpZ24taXRlbXNcIiwgXCJjZW50ZXJcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcImZsZXgtd3JhcFwiLCBcIndyYXBcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcImFsaWduLWNvbnRlbnRcIiwgXCJzdHJldGNoXCIpO1xuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuRW5kKCk7XG5cblx0XHQvLyBEaXNwbGF5IE1vZGVcblx0XHRyZW5kZXJNYW5hZ2VyLm9wZW5TdGFydChcImRpdlwiKTsgLy8gZGl2IGZvciBjb250cm9scyBzaG93biBpbiBEaXNwbGF5IG1vZGVcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiZGlzcGxheVwiLCBcImZsZXhcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcImFsaWduLWl0ZW1zXCIsIFwiY2VudGVyXCIpO1xuXHRcdHJlbmRlck1hbmFnZXIub3BlbkVuZCgpO1xuXG5cdFx0aWYgKGZpbGVXcmFwcGVyLmF2YXRhcikge1xuXHRcdFx0cmVuZGVyTWFuYWdlci5yZW5kZXJDb250cm9sKGZpbGVXcmFwcGVyLmF2YXRhcik7IC8vIHJlbmRlciB0aGUgQXZhdGFyIENvbnRyb2xcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVuZGVyTWFuYWdlci5yZW5kZXJDb250cm9sKGZpbGVXcmFwcGVyLmljb24pOyAvLyByZW5kZXIgdGhlIEljb24gQ29udHJvbFxuXHRcdFx0cmVuZGVyTWFuYWdlci5yZW5kZXJDb250cm9sKGZpbGVXcmFwcGVyLmxpbmspOyAvLyByZW5kZXIgdGhlIExpbmsgQ29udHJvbFxuXHRcdFx0cmVuZGVyTWFuYWdlci5yZW5kZXJDb250cm9sKGZpbGVXcmFwcGVyLnRleHQpOyAvLyByZW5kZXIgdGhlIFRleHQgQ29udHJvbCBmb3IgZW1wdHkgZmlsZSBpbmRpY2F0aW9uXG5cdFx0fVxuXHRcdHJlbmRlck1hbmFnZXIuY2xvc2UoXCJkaXZcIik7IC8vIGRpdiBmb3IgY29udHJvbHMgc2hvd24gaW4gRGlzcGxheSBtb2RlXG5cblx0XHQvLyBBZGRpdGlvbmFsIGNvbnRlbnQgZm9yIEVkaXQgTW9kZVxuXHRcdHJlbmRlck1hbmFnZXIub3BlblN0YXJ0KFwiZGl2XCIpOyAvLyBkaXYgZm9yIGNvbnRyb2xzIHNob3duIGluIERpc3BsYXkgKyBFZGl0IG1vZGVcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiZGlzcGxheVwiLCBcImZsZXhcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcImFsaWduLWl0ZW1zXCIsIFwiY2VudGVyXCIpO1xuXHRcdHJlbmRlck1hbmFnZXIub3BlbkVuZCgpO1xuXHRcdHJlbmRlck1hbmFnZXIucmVuZGVyQ29udHJvbChmaWxlV3JhcHBlci5maWxlVXBsb2FkZXIpOyAvLyByZW5kZXIgdGhlIEZpbGVVcGxvYWRlciBDb250cm9sXG5cdFx0cmVuZGVyTWFuYWdlci5yZW5kZXJDb250cm9sKGZpbGVXcmFwcGVyLmRlbGV0ZUJ1dHRvbik7IC8vIHJlbmRlciB0aGUgRGVsZXRlIEJ1dHRvbiBDb250cm9sXG5cdFx0cmVuZGVyTWFuYWdlci5jbG9zZShcImRpdlwiKTsgLy8gZGl2IGZvciBjb250cm9scyBzaG93biBpbiBEaXNwbGF5ICsgRWRpdCBtb2RlXG5cblx0XHRyZW5kZXJNYW5hZ2VyLmNsb3NlKFwiZGl2XCIpOyAvLyBkaXYgZm9yIGFsbCBjb250cm9sc1xuXG5cdFx0cmVuZGVyTWFuYWdlci5jbG9zZShcImRpdlwiKTsgLy8gZW5kIG9mIHRoZSBjb21wbGV0ZSBDb250cm9sXG5cdH1cblx0ZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzID0gdGhpcy5fZ2V0U2lkZUVmZmVjdENvbnRyb2xsZXIoKTtcblx0XHRpZiAob1NpZGVFZmZlY3RzKSB7XG5cdFx0XHRvU2lkZUVmZmVjdHMucmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKHRoaXMpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5idXN5RGlhbG9nO1xuXHRcdEZpZWxkV3JhcHBlci5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBbYlN1cHByZXNzSW52YWxpZGF0ZV0pO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVXcmFwcGVyO1xuIl19
365
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbGVXcmFwcGVyLnRzIl0sIm5hbWVzIjpbIkZpbGVXcmFwcGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJwcm9wZXJ0eSIsInR5cGUiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiX2J1c3kiLCJnZXRBY2Nlc3NpYmlsaXR5SW5mbyIsImFjY0luZm8iLCJhdmF0YXIiLCJwdXNoIiwiaWNvbiIsImxpbmsiLCJ0ZXh0IiwiZmlsZVVwbG9hZGVyIiwiZGVsZXRlQnV0dG9uIiwiY2hpbGRyZW4iLCJvbkJlZm9yZVJlbmRlcmluZyIsIl9zZXRBcmlhTGFiZWxzIiwiX2FkZFNpZGVFZmZlY3RzIiwiX3NldEFyaWFMYWJlbGxlZEJ5Iiwic291cmNlUHJvcGVydHkiLCJzb3VyY2VQYXRoIiwicGF0aCIsInBhcmVudEVudGl0eVNldFdpdGhTbGFzaCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiZ2V0Q3VzdG9tRGF0YSIsImZvckVhY2giLCJpdGVtIiwiZ2V0UHJvcGVydHkiLCJwYXJlbnRFbnRpdHlTZXQiLCJzdWJzdHJpbmciLCJpbmRleE9mIiwibGVuZ3RoIiwicmVwbGFjZSIsInByb3BlcnR5UGF0aCIsImZpbGVuYW1lIiwibWVkaWFUeXBlIiwiX2dldFNpZGVFZmZlY3RDb250cm9sbGVyIiwiYWRkQ29udHJvbFNpZGVFZmZlY3RzIiwicGFyZW50RW50aXR5VHlwZSIsIlNvdXJjZVByb3BlcnRpZXMiLCJUYXJnZXRFbnRpdGllcyIsInNvdXJjZUNvbnRyb2xJZCIsImdldElkIiwiY29udHJvbGxlciIsIl9nZXRWaWV3Q29udHJvbGxlciIsIl9zaWRlRWZmZWN0cyIsInVuZGVmaW5lZCIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0VXBsb2FkVXJsIiwiY29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwidXBsb2FkVXJsIiwiZ2V0UGF0aCIsImdldENhbm9uaWNhbFBhdGgiLCJzZXRVSUJ1c3kiLCJidXN5IiwidGhhdCIsImJ1c3lEaWFsb2ciLCJCdXN5RGlhbG9nIiwiUmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJzaG93Q2FuY2VsQnV0dG9uIiwic2V0VGltZW91dCIsIm9wZW4iLCJjbG9zZSIsImdldFVJQnVzeSIsInJlbmRlciIsInJlbmRlck1hbmFnZXIiLCJmaWxlV3JhcHBlciIsIm9wZW5TdGFydCIsInN0eWxlIiwid2lkdGgiLCJvcGVuRW5kIiwicmVuZGVyQ29udHJvbCIsImRlc3Ryb3kiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwib1NpZGVFZmZlY3RzIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwiRmllbGRXcmFwcGVyIiwicHJvdG90eXBlIiwiYXBwbHkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFlTUEsVyxXQURMQyxjQUFjLENBQUMsa0NBQUQsQyxVQUViQyxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBRCxDLFVBRVJELFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFELEMsVUFFUkQsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQUQsQyxVQUVSRCxRQUFRLENBQUM7QUFBRUMsSUFBQUEsSUFBSSxFQUFFO0FBQVIsR0FBRCxDLFVBRVJELFFBQVEsQ0FBQztBQUFFQyxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFELEMsVUFFUkQsUUFBUSxDQUFDO0FBQUVDLElBQUFBLElBQUksRUFBRTtBQUFSLEdBQUQsQyxVQUVSQyxXQUFXLENBQUM7QUFBRUQsSUFBQUEsSUFBSSxFQUFFLGNBQVI7QUFBd0JFLElBQUFBLFFBQVEsRUFBRTtBQUFsQyxHQUFELEMsVUFFWEQsV0FBVyxDQUFDO0FBQUVELElBQUFBLElBQUksRUFBRSxrQkFBUjtBQUE0QkUsSUFBQUEsUUFBUSxFQUFFO0FBQXRDLEdBQUQsQyxXQUVYRCxXQUFXLENBQUM7QUFBRUQsSUFBQUEsSUFBSSxFQUFF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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvbWFjcm9zL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIEF2YXRhciBmcm9tIFwic2FwL20vQXZhdGFyXCI7XG5pbXBvcnQgQnVzeURpYWxvZyBmcm9tIFwic2FwL20vQnVzeURpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCB0eXBlIFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIEljb24gZnJvbSBcInNhcC91aS9jb3JlL0ljb25cIjtcbmltcG9ydCB0eXBlIHsgVVJJIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBGaWxlVXBsb2FkZXIgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEZpZWxkV3JhcHBlciBmcm9tIFwiLi9GaWVsZFdyYXBwZXJcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuRmlsZVdyYXBwZXJcIilcbmNsYXNzIEZpbGVXcmFwcGVyIGV4dGVuZHMgRmllbGRXcmFwcGVyIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAudWkuY29yZS5VUklcIiB9KVxuXHR1cGxvYWRVcmwhOiBVUkk7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIiB9KVxuXHRwYXJlbnRFbnRpdHlTZXQhOiBDb250ZXh0O1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIgfSlcblx0cGFyZW50RW50aXR5VHlwZSE6IENvbnRleHQ7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHJvcGVydHlQYXRoITogc3RyaW5nO1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGZpbGVuYW1lITogc3RyaW5nO1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdG1lZGlhVHlwZSE6IHN0cmluZztcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5BdmF0YXJcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGF2YXRhciE6IEF2YXRhcjtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5JY29uXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRpY29uITogSWNvbjtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5MaW5rXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRsaW5rITogTGluaztcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5UZXh0XCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHR0ZXh0ITogVGV4dDtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkudW5pZmllZC5GaWxlVXBsb2FkZXJcIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGZpbGVVcGxvYWRlciE6IEZpbGVVcGxvYWRlcjtcblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAubS5CdXR0b25cIiwgbXVsdGlwbGU6IGZhbHNlIH0pXG5cdGRlbGV0ZUJ1dHRvbiE6IEJ1dHRvbjtcblx0cHJpdmF0ZSBfYnVzeTogYm9vbGVhbiA9IGZhbHNlO1xuXHRwcml2YXRlIGJ1c3lEaWFsb2c/OiBCdXN5RGlhbG9nO1xuXG5cdGdldEFjY2Vzc2liaWxpdHlJbmZvKCkge1xuXHRcdGNvbnN0IGFjY0luZm8gPSBbXTtcblx0XHRpZiAodGhpcy5hdmF0YXIpIHtcblx0XHRcdGFjY0luZm8ucHVzaCh0aGlzLmF2YXRhcik7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmljb24pIHtcblx0XHRcdGFjY0luZm8ucHVzaCh0aGlzLmljb24pO1xuXHRcdH1cblx0XHRpZiAodGhpcy5saW5rKSB7XG5cdFx0XHRhY2NJbmZvLnB1c2godGhpcy5saW5rKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMudGV4dCkge1xuXHRcdFx0YWNjSW5mby5wdXNoKHRoaXMudGV4dCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmZpbGVVcGxvYWRlcikge1xuXHRcdFx0YWNjSW5mby5wdXNoKHRoaXMuZmlsZVVwbG9hZGVyKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZGVsZXRlQnV0dG9uKSB7XG5cdFx0XHRhY2NJbmZvLnB1c2godGhpcy5kZWxldGVCdXR0b24pO1xuXHRcdH1cblx0XHRyZXR1cm4geyBjaGlsZHJlbjogYWNjSW5mbyB9O1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVscygpO1xuXHRcdHRoaXMuX2FkZFNpZGVFZmZlY3RzKCk7XG5cdH1cblxuXHRfc2V0QXJpYUxhYmVscygpIHtcblx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSh0aGlzLmF2YXRhcik7XG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5pY29uKTtcblx0XHR0aGlzLl9zZXRBcmlhTGFiZWxsZWRCeSh0aGlzLmxpbmspO1xuXHRcdHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KHRoaXMudGV4dCk7XG5cdFx0dGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkodGhpcy5maWxlVXBsb2FkZXIpO1xuXHRcdHRoaXMuX3NldEFyaWFMYWJlbGxlZEJ5KHRoaXMuZGVsZXRlQnV0dG9uKTtcblx0fVxuXG5cdF9hZGRTaWRlRWZmZWN0cygpIHtcblx0XHQvLyBhZGQgU2lkZUVmZmVjdHMgZm9yIHN0cmVhbSBjb250ZW50LCBmaWxlbmFtZSBhbmQgbWVkaWF0eXBlXG5cdFx0bGV0IHNvdXJjZVByb3BlcnR5ID0gXCJcIixcblx0XHRcdHNvdXJjZVBhdGggPSBcIlwiLFxuXHRcdFx0cGF0aCA9IFwiXCIsXG5cdFx0XHRwYXJlbnRFbnRpdHlTZXRXaXRoU2xhc2ggPSBcIlwiO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBvYmplY3RbXSA9IFtdO1xuXHRcdHRoaXMuZ2V0Q3VzdG9tRGF0YSgpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuXHRcdFx0aWYgKGl0ZW0uZ2V0UHJvcGVydHkoXCJrZXlcIikgPT09IFwic291cmNlUGF0aFwiKSB7XG5cdFx0XHRcdHNvdXJjZVBhdGggPSBpdGVtLmdldFByb3BlcnR5KFwidmFsdWVcIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cGFyZW50RW50aXR5U2V0V2l0aFNsYXNoID0gYC8ke3RoaXMucGFyZW50RW50aXR5U2V0fS9gO1xuXHRcdHNvdXJjZVByb3BlcnR5ID0gc291cmNlUGF0aC5zdWJzdHJpbmcoXG5cdFx0XHRzb3VyY2VQYXRoLmluZGV4T2YocGFyZW50RW50aXR5U2V0V2l0aFNsYXNoKSArIHBhcmVudEVudGl0eVNldFdpdGhTbGFzaC5sZW5ndGgsXG5cdFx0XHRzb3VyY2VQYXRoLmxlbmd0aFxuXHRcdCk7XG5cdFx0cGF0aCA9IHNvdXJjZVByb3BlcnR5LnJlcGxhY2UodGhpcy5wcm9wZXJ0eVBhdGgsIFwiXCIpO1xuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzLnB1c2goeyBcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI6IHNvdXJjZVByb3BlcnR5IH0pO1xuXHRcdGlmICh0aGlzLmZpbGVuYW1lKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKHsgXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiOiBwYXRoICsgdGhpcy5maWxlbmFtZSB9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWVkaWFUeXBlKSB7XG5cdFx0XHRuYXZpZ2F0aW9uUHJvcGVydGllcy5wdXNoKHsgXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiOiBwYXRoICsgdGhpcy5tZWRpYVR5cGUgfSk7XG5cdFx0fVxuXHRcdHRoaXMuX2dldFNpZGVFZmZlY3RDb250cm9sbGVyKCkuYWRkQ29udHJvbFNpZGVFZmZlY3RzKHRoaXMucGFyZW50RW50aXR5VHlwZSwge1xuXHRcdFx0U291cmNlUHJvcGVydGllczogc291cmNlUHJvcGVydHksXG5cdFx0XHRUYXJnZXRFbnRpdGllczogbmF2aWdhdGlvblByb3BlcnRpZXMsXG5cdFx0XHRzb3VyY2VDb250cm9sSWQ6IHRoaXMuZ2V0SWQoKVxuXHRcdH0pO1xuXHR9XG5cdF9nZXRTaWRlRWZmZWN0Q29udHJvbGxlcigpIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRyZXR1cm4gY29udHJvbGxlciA/IGNvbnRyb2xsZXIuX3NpZGVFZmZlY3RzIDogdW5kZWZpbmVkO1xuXHR9XG5cdF9nZXRWaWV3Q29udHJvbGxlcigpIHtcblx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRyZXR1cm4gdmlldyAmJiB2aWV3LmdldENvbnRyb2xsZXIoKTtcblx0fVxuXHRnZXRVcGxvYWRVcmwoKSB7XG5cdFx0Ly8gc2V0IHVwbG9hZCB1cmwgYXMgY2Fub25pY2FsIHVybCBmb3IgTmF2aWdhdGlvblByb3BlcnRpZXNcblx0XHQvLyB0aGlzIGlzIGEgd29ya2Fyb3VuZCBhcyBzb21lIGJhY2tlbmRzIGNhbm5vdCByZXNvbHZlIE5hdmlnYXRpb25zUHJvcGVydGllcyBmb3Igc3RyZWFtIHR5cGVzXG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBWNENvbnRleHQ7XG5cdFx0cmV0dXJuIGNvbnRleHQgPyB0aGlzLnVwbG9hZFVybC5yZXBsYWNlKGNvbnRleHQuZ2V0UGF0aCgpLCBjb250ZXh0LmdldENhbm9uaWNhbFBhdGgoKSkgOiBcIlwiO1xuXHR9XG5cdHNldFVJQnVzeShidXN5OiBib29sZWFuKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0dGhpcy5fYnVzeSA9IGJ1c3k7XG5cdFx0aWYgKGJ1c3kpIHtcblx0XHRcdGlmICghdGhpcy5idXN5RGlhbG9nKSB7XG5cdFx0XHRcdHRoaXMuYnVzeURpYWxvZyA9IG5ldyBCdXN5RGlhbG9nKHtcblx0XHRcdFx0XHR0ZXh0OiBSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJNX0ZJTEVXUkFQUEVSX0JVU1lfRElBTE9HX1RJVExFXCIpLFxuXHRcdFx0XHRcdHNob3dDYW5jZWxCdXR0b246IGZhbHNlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmICh0aGF0Ll9idXN5KSB7XG5cdFx0XHRcdFx0dGhhdC5idXN5RGlhbG9nPy5vcGVuKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDEwMDApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmJ1c3lEaWFsb2c/LmNsb3NlKGZhbHNlKTtcblx0XHR9XG5cdH1cblx0Z2V0VUlCdXN5KCkge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdHJldHVybiB0aGlzLl9idXN5O1xuXHR9XG5cdHN0YXRpYyByZW5kZXIocmVuZGVyTWFuYWdlcjogUmVuZGVyTWFuYWdlciwgZmlsZVdyYXBwZXI6IEZpbGVXcmFwcGVyKSB7XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuU3RhcnQoXCJkaXZcIiwgZmlsZVdyYXBwZXIpOyAvLyBGaWxlV3JhcHBlciBjb250cm9sIGRpdlxuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJ3aWR0aFwiLCBmaWxlV3JhcHBlci53aWR0aCk7XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuRW5kKCk7XG5cblx0XHQvLyBPdXRlciBCb3hcblx0XHRyZW5kZXJNYW5hZ2VyLm9wZW5TdGFydChcImRpdlwiKTsgLy8gZGl2IGZvciBhbGwgY29udHJvbHNcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiZGlzcGxheVwiLCBcImZsZXhcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcImJveC1zaXppbmdcIiwgXCJib3JkZXItYm94XCIpO1xuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJqdXN0aWZ5LWNvbnRlbnRcIiwgXCJzcGFjZS1iZXR3ZWVuXCIpO1xuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJhbGlnbi1pdGVtc1wiLCBcImNlbnRlclwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiZmxleC13cmFwXCIsIFwid3JhcFwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiYWxpZ24tY29udGVudFwiLCBcInN0cmV0Y2hcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLm9wZW5FbmQoKTtcblxuXHRcdC8vIERpc3BsYXkgTW9kZVxuXHRcdHJlbmRlck1hbmFnZXIub3BlblN0YXJ0KFwiZGl2XCIpOyAvLyBkaXYgZm9yIGNvbnRyb2xzIHNob3duIGluIERpc3BsYXkgbW9kZVxuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJkaXNwbGF5XCIsIFwiZmxleFwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiYWxpZ24taXRlbXNcIiwgXCJjZW50ZXJcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuRW5kKCk7XG5cblx0XHRpZiAoZmlsZVdyYXBwZXIuYXZhdGFyKSB7XG5cdFx0XHRyZW5kZXJNYW5hZ2VyLnJlbmRlckNvbnRyb2woZmlsZVdyYXBwZXIuYXZhdGFyKTsgLy8gcmVuZGVyIHRoZSBBdmF0YXIgQ29udHJvbFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW5kZXJNYW5hZ2VyLnJlbmRlckNvbnRyb2woZmlsZVdyYXBwZXIuaWNvbik7IC8vIHJlbmRlciB0aGUgSWNvbiBDb250cm9sXG5cdFx0XHRyZW5kZXJNYW5hZ2VyLnJlbmRlckNvbnRyb2woZmlsZVdyYXBwZXIubGluayk7IC8vIHJlbmRlciB0aGUgTGluayBDb250cm9sXG5cdFx0XHRyZW5kZXJNYW5hZ2VyLnJlbmRlckNvbnRyb2woZmlsZVdyYXBwZXIudGV4dCk7IC8vIHJlbmRlciB0aGUgVGV4dCBDb250cm9sIGZvciBlbXB0eSBmaWxlIGluZGljYXRpb25cblx0XHR9XG5cdFx0cmVuZGVyTWFuYWdlci5jbG9zZShcImRpdlwiKTsgLy8gZGl2IGZvciBjb250cm9scyBzaG93biBpbiBEaXNwbGF5IG1vZGVcblxuXHRcdC8vIEFkZGl0aW9uYWwgY29udGVudCBmb3IgRWRpdCBNb2RlXG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuU3RhcnQoXCJkaXZcIik7IC8vIGRpdiBmb3IgY29udHJvbHMgc2hvd24gaW4gRGlzcGxheSArIEVkaXQgbW9kZVxuXHRcdHJlbmRlck1hbmFnZXIuc3R5bGUoXCJkaXNwbGF5XCIsIFwiZmxleFwiKTtcblx0XHRyZW5kZXJNYW5hZ2VyLnN0eWxlKFwiYWxpZ24taXRlbXNcIiwgXCJjZW50ZXJcIik7XG5cdFx0cmVuZGVyTWFuYWdlci5vcGVuRW5kKCk7XG5cdFx0cmVuZGVyTWFuYWdlci5yZW5kZXJDb250cm9sKGZpbGVXcmFwcGVyLmZpbGVVcGxvYWRlcik7IC8vIHJlbmRlciB0aGUgRmlsZVVwbG9hZGVyIENvbnRyb2xcblx0XHRyZW5kZXJNYW5hZ2VyLnJlbmRlckNvbnRyb2woZmlsZVdyYXBwZXIuZGVsZXRlQnV0dG9uKTsgLy8gcmVuZGVyIHRoZSBEZWxldGUgQnV0dG9uIENvbnRyb2xcblx0XHRyZW5kZXJNYW5hZ2VyLmNsb3NlKFwiZGl2XCIpOyAvLyBkaXYgZm9yIGNvbnRyb2xzIHNob3duIGluIERpc3BsYXkgKyBFZGl0IG1vZGVcblxuXHRcdHJlbmRlck1hbmFnZXIuY2xvc2UoXCJkaXZcIik7IC8vIGRpdiBmb3IgYWxsIGNvbnRyb2xzXG5cblx0XHRyZW5kZXJNYW5hZ2VyLmNsb3NlKFwiZGl2XCIpOyAvLyBlbmQgb2YgdGhlIGNvbXBsZXRlIENvbnRyb2xcblx0fVxuXHRkZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGU6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHMgPSB0aGlzLl9nZXRTaWRlRWZmZWN0Q29udHJvbGxlcigpO1xuXHRcdGlmIChvU2lkZUVmZmVjdHMpIHtcblx0XHRcdG9TaWRlRWZmZWN0cy5yZW1vdmVDb250cm9sU2lkZUVmZmVjdHModGhpcyk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmJ1c3lEaWFsb2c7XG5cdFx0RmllbGRXcmFwcGVyLnByb3RvdHlwZS5kZXN0cm95LmFwcGx5KHRoaXMsIFtiU3VwcHJlc3NJbnZhbGlkYXRlXSk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsZVdyYXBwZXI7XG4iXX0=
@@ -145,6 +145,10 @@ class FileWrapper extends FieldWrapper {
145
145
  this.busyDialog?.close(false);
146
146
  }
147
147
  }
148
+ getUIBusy() {
149
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
150
+ return this._busy;
151
+ }
148
152
  static render(renderManager: RenderManager, fileWrapper: FileWrapper) {
149
153
  renderManager.openStart("div", fileWrapper); // FileWrapper control div
150
154
  renderManager.style("width", fileWrapper.width);