@bikdotai/bik-component-library 0.0.77-4.beta.0.8 → 0.0.78
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.
- package/CHANGELOG.md +7 -0
- package/README.md +99 -2
- package/dist/cjs/_virtual/_tslib.js +1 -1
- package/dist/cjs/assets/icons/chevronLeft.svg.js +1 -1
- package/dist/cjs/assets/icons/chevronRight.svg.js +1 -1
- package/dist/cjs/assets/icons/emoji.svg.js +1 -1
- package/dist/cjs/assets/icons/halfRectangle.svg.js +1 -1
- package/dist/cjs/assets/icons/searchIcon.d.ts +2 -8
- package/dist/cjs/assets/icons/strikeThrough.svg.js +1 -1
- package/dist/cjs/assets/icons/vertical_dots.svg.js +1 -1
- package/dist/cjs/bundle.css +8 -0
- package/dist/cjs/components/QueryBuilder/Filters/Event/components/EventFilter.js +1 -1
- package/dist/cjs/components/QueryBuilder/Filters/Segment/components/SegmentFilter.js +1 -1
- package/dist/cjs/components/QueryBuilder/Filters/UserProperty/components/UserPropertyFilter.js +1 -1
- package/dist/cjs/components/QueryBuilder/Triggers/EVENTS/components/EventsTrigger.js +1 -1
- package/dist/cjs/components/QueryBuilder/Triggers/components/BaseTriggerQueryBuilderNode.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/Triggers/components/BaseTriggerQueryBuilderNode.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/AllowedListDropdown.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/FreeText.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/FreeText.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/FrequencyIntegerPositiveSingle.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/FrequencyIntegerPositiveSingle.js +2 -2
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/IgPicker.d.ts +3 -4
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/IgPicker.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/IntegerPositiveSingle.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/IntegerSingleValue.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/MultiselectDropdownFreeText.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/MultiselectDropdownFreeText.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/NoInput.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/NumberTime.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/NumberTime.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/SingleDate.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/SingleDate.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/TwoDate.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/TwoDate.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/TwoNumberInputsSeperatedByAnd.d.ts +2 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Connector.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/DropdownWrapper.d.ts +0 -2
- package/dist/cjs/components/QueryBuilder/components/DropdownWrapper.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/QueryBuilderNode/Base/BaseQueryBuilderNode.d.ts +1 -5
- package/dist/cjs/components/QueryBuilder/components/QueryBuilderNode/Property/PropertyNode.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/QueryBuilderNode/Property/PropertyNodeUIWrapper.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/QueryBuilderNode/QueryBuilderNode.js +1 -1
- package/dist/cjs/components/QueryBuilder/components/QueryBuilderNodes.js +1 -1
- package/dist/cjs/components/QueryBuilder/constants/connector.d.ts +13 -72
- package/dist/cjs/components/QueryBuilder/constants/connector.js +1 -1
- package/dist/cjs/components/QueryBuilder/constants/connectorPosition.d.ts +8 -22
- package/dist/cjs/components/QueryBuilder/constants/connectorPosition.js +1 -1
- package/dist/cjs/components/QueryBuilder/helpers/Connector.helper.d.ts +1 -3
- package/dist/cjs/components/QueryBuilder/helpers/Connector.helper.js +1 -1
- package/dist/cjs/components/QueryBuilder/redux/queryBuilder.reducer.js +1 -1
- package/dist/cjs/components/QueryBuilder/types/QueryBuilder.type.d.ts +2 -17
- package/dist/cjs/components/QueryBuilder/types/QueryBuilder.type.js +1 -1
- package/dist/cjs/components/QueryBuilder/types/QueryBuilderConnector.type.d.ts +1 -14
- package/dist/cjs/components/QueryBuilder/types/QueryBuilderOperator.type.d.ts +11 -63
- package/dist/cjs/components/QueryBuilder/types/QueryBuilderOperator.type.js +1 -1
- package/dist/cjs/components/QueryBuilder/types/QueryBuilderPropertyProps.d.ts +1 -5
- package/dist/cjs/components/TablePagination/TablePagination.d.ts +0 -3
- package/dist/cjs/components/TablePagination/TablePagination.js +1 -1
- package/dist/cjs/components/TablePagination/TablePagination.styled.js +0 -1
- package/dist/cjs/components/TablePagination/TablePaginationCard.d.ts +1 -3
- package/dist/cjs/components/TablePagination/TablePaginationCard.js +1 -1
- package/dist/cjs/components/TypographyStyle.d.ts +17 -121
- package/dist/cjs/components/TypographyStyle.js +78 -274
- package/dist/cjs/components/WhatsAppTextEditor/CustomEditor.styled.d.ts +3 -3
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.d.ts +1 -90
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js +1 -5
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.d.ts +0 -36
- package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +1 -1
- package/dist/cjs/components/alerts/Alert.d.ts +2 -11
- package/dist/cjs/components/alerts/Alert.js +1 -1
- package/dist/cjs/components/alerts/Alert.styled.d.ts +1 -6
- package/dist/cjs/components/alerts/Alert.styled.js +3 -12
- package/dist/cjs/components/alerts/AlertHelper.d.ts +1 -17
- package/dist/cjs/components/alerts/AlertHelper.js +1 -1
- package/dist/cjs/components/alerts/index.d.ts +0 -1
- package/dist/cjs/components/analytics-card/AnalyticsCard.d.ts +0 -1
- package/dist/cjs/components/analytics-card/AnalyticsCard.js +1 -1
- package/dist/cjs/components/analytics-card/AnalyticsCard.styled.d.ts +2 -2
- package/dist/cjs/components/analytics-card/AnalyticsCard.styled.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChip.d.ts +0 -7
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChip.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsDropdown.d.ts +0 -19
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsDropdown.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsMultiChip.d.ts +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsMultiChip.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/CommonStyles.d.ts +3 -16
- package/dist/cjs/components/analytics-chips-and-dropdowns/CommonStyles.js +1 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/index.d.ts +0 -17
- package/dist/cjs/components/avatar/Avatar.d.ts +0 -25
- package/dist/cjs/components/avatar/Avatar.js +1 -1
- package/dist/cjs/components/avatar/Avatar.styled.d.ts +1 -2
- package/dist/cjs/components/avatar/Avatar.styled.js +4 -4
- package/dist/cjs/components/avatar/AvatarHelper.d.ts +2 -5
- package/dist/cjs/components/avatar/AvatarHelper.js +1 -1
- package/dist/cjs/components/avatar/index.d.ts +0 -1
- package/dist/cjs/components/button/Button.js +1 -1
- package/dist/cjs/components/button/Button.styled.d.ts +2 -7
- package/dist/cjs/components/button/Button.styled.js +1 -1
- package/dist/cjs/components/button/model.d.ts +2 -17
- package/dist/cjs/components/button/themes.d.ts +9 -43
- package/dist/cjs/components/button/themes.js +1 -1
- package/dist/cjs/components/card-selection-modal/CardSelectionModal.styled.d.ts +2 -2
- package/dist/cjs/components/checkBox/CheckBox.d.ts +2 -12
- package/dist/cjs/components/checkBox/CheckBox.js +1 -1
- package/dist/cjs/components/checkBox/CheckBox.styled.d.ts +1 -6
- package/dist/cjs/components/checkBox/CheckBox.styled.js +8 -21
- package/dist/cjs/components/curtain/Curtain.d.ts +1 -4
- package/dist/cjs/components/curtain/Curtain.js +1 -1
- package/dist/cjs/components/curtain/Curtain.styled.d.ts +0 -7
- package/dist/cjs/components/curtain/Curtain.styled.js +7 -22
- package/dist/cjs/components/curtain/CurtainHelper.d.ts +60 -13
- package/dist/cjs/components/curtain/CurtainHelper.js +1 -1
- package/dist/cjs/components/datePicker/DatePicker.d.ts +0 -3
- package/dist/cjs/components/datePicker/DatePicker.js +1 -1
- package/dist/cjs/components/datePicker/DatePicker.styled.d.ts +1 -13
- package/dist/cjs/components/datePicker/DatePicker.styled.js +1 -1
- package/dist/cjs/components/datePicker/DatePickerWrapper.d.ts +2 -6
- package/dist/cjs/components/datePicker/DatePickerWrapper.js +1 -1
- package/dist/cjs/components/datePicker/DatePickerWrapper.styled.d.ts +0 -2
- package/dist/cjs/components/datePicker/DatePickerWrapper.styled.js +3 -4
- package/dist/cjs/components/datePicker/index.d.ts +0 -2
- package/dist/cjs/components/dropShadow/DropShadow.d.ts +2 -1
- package/dist/cjs/components/dropShadow/DropShadow.js +1 -1
- package/dist/cjs/components/dropdown/Common.styled.d.ts +1 -8
- package/dist/cjs/components/dropdown/Common.styled.js +8 -25
- package/dist/cjs/components/dropdown/Dropdown.d.ts +2 -14
- package/dist/cjs/components/dropdown/Dropdown.js +1 -1
- package/dist/cjs/components/dropdown/DropdownPopover/index.d.ts +0 -15
- package/dist/cjs/components/dropdown/DropdownPopover/index.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.d.ts +1 -3
- package/dist/cjs/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.js +12 -23
- package/dist/cjs/components/dropdown/OpenedDropdown/components/description/Description.d.ts +0 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/description/Description.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/description/Description.styled.d.ts +1 -3
- package/dist/cjs/components/dropdown/OpenedDropdown/components/description/Description.styled.js +1 -2
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.d.ts +0 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +3 -17
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +4 -43
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +3 -12
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.d.ts +1 -6
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.js +4 -5
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.d.ts +0 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.d.ts +3 -7
- package/dist/cjs/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +0 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.d.ts +0 -3
- package/dist/cjs/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.js +1 -1
- package/dist/cjs/components/dropdown/OpenedDropdown/utils/iterationOnOptions.d.ts +0 -15
- package/dist/cjs/components/dropdown/OpenedDropdown/utils/iterationOnOptions.js +1 -1
- package/dist/cjs/components/dropdown/index.d.ts +1 -4
- package/dist/cjs/components/dropdown/type.d.ts +2 -51
- package/dist/cjs/components/fab-menu/FABMenu.d.ts +0 -1
- package/dist/cjs/components/fab-menu/FABMenu.js +1 -1
- package/dist/cjs/components/floating-action-button/FloatingActionButton.styles.js +1 -1
- package/dist/cjs/components/helpers/FileUploaderHelper.d.ts +2 -8
- package/dist/cjs/components/helpers/FileUploaderHelper.js +1 -1
- package/dist/cjs/components/icon-button/IconButton.js +1 -1
- package/dist/cjs/components/icon-button/IconButton.styled.js +1 -1
- package/dist/cjs/components/icon-button/model.d.ts +1 -8
- package/dist/cjs/components/icon-button/theme.js +1 -1
- package/dist/cjs/components/image-compress/ImageCompress.d.ts +1 -5
- package/dist/cjs/components/image-compress/ImageCompress.js +1 -1
- package/dist/cjs/components/image-cropper/BikImageCropper.d.ts +4 -3
- package/dist/cjs/components/image-cropper/index.d.ts +0 -1
- package/dist/cjs/components/input/Input.d.ts +6 -36
- package/dist/cjs/components/input/Input.js +1 -1
- package/dist/cjs/components/input/Input.styled.d.ts +4 -18
- package/dist/cjs/components/input/Input.styled.js +1 -1
- package/dist/cjs/components/list-item/ListItem.d.ts +1 -3
- package/dist/cjs/components/list-item/ListItem.js +1 -1
- package/dist/cjs/components/list-item/ListItem.styled.d.ts +1 -2
- package/dist/cjs/components/list-item/ListItem.styled.js +1 -1
- package/dist/cjs/components/list-item/themes.d.ts +1 -1
- package/dist/cjs/components/list-item/themes.js +1 -1
- package/dist/cjs/components/modals/Modal.d.ts +0 -6
- package/dist/cjs/components/modals/Modal.js +1 -1
- package/dist/cjs/components/modals/modal.styled.d.ts +4 -12
- package/dist/cjs/components/modals/modal.styled.js +1 -1
- package/dist/cjs/components/modals/styledModal.d.ts +1 -15
- package/dist/cjs/components/modals/styledModal.js +1 -1
- package/dist/cjs/components/pagination/Pagination.styled.d.ts +1 -1
- package/dist/cjs/components/plans/DurationSelectorStyles.d.ts +1 -1
- package/dist/cjs/components/plans/SubscriptionPlan.d.ts +2 -15
- package/dist/cjs/components/plans/SubscriptionPlan.js +1 -1
- package/dist/cjs/components/plans/SubscriptionPlanSelector.d.ts +0 -36
- package/dist/cjs/components/plans/SubscriptionPlanSelector.js +1 -1
- package/dist/cjs/components/plans/SubscriptionPlanStyled.d.ts +1 -11
- package/dist/cjs/components/plans/SubscriptionPlanStyled.js +1 -1
- package/dist/cjs/components/plans/index.d.ts +0 -2
- package/dist/cjs/components/postPicker/PostPicker.styled.d.ts +3 -8
- package/dist/cjs/components/postPicker/PostPicker.styled.js +18 -23
- package/dist/cjs/components/postPicker/postPicker.d.ts +0 -24
- package/dist/cjs/components/postPicker/postPicker.js +1 -1
- package/dist/cjs/components/progress-bar/ProgressBarComponent.d.ts +2 -2
- package/dist/cjs/components/progress-bar/ProgressBarComponent.js +1 -1
- package/dist/cjs/components/progress-bar/index.d.ts +0 -1
- package/dist/cjs/components/radioButton/RadioButton.d.ts +0 -9
- package/dist/cjs/components/radioButton/RadioButton.js +1 -1
- package/dist/cjs/components/radioButton/RadioButton.styled.d.ts +0 -1
- package/dist/cjs/components/radioButton/RadioButton.styled.js +7 -9
- package/dist/cjs/components/sample-button/SampleButton.styled.d.ts +1 -1
- package/dist/cjs/components/searchBar/searchBar.d.ts +2 -9
- package/dist/cjs/components/shimmer/ShimmerComponent/BikShimmer.d.ts +4 -7
- package/dist/cjs/components/shimmer/ShimmerComponent/BikShimmer.js +1 -1
- package/dist/cjs/components/shimmer/ShimmerComponent/ShimmerStyled.d.ts +1 -14
- package/dist/cjs/components/shimmer/ShimmerComponent/ShimmerStyled.js +2 -2
- package/dist/cjs/components/spinner/Spinner.d.ts +2 -8
- package/dist/cjs/components/spinner/Spinner.js +1 -19
- package/dist/cjs/components/spinner/lotties/black.json.js +1 -0
- package/dist/cjs/components/spinner/lotties/brand.json.js +1 -0
- package/dist/cjs/components/spinner/lotties/red.json.js +1 -0
- package/dist/cjs/components/spinner/lotties/white.json.js +1 -0
- package/dist/cjs/components/spinner/model.d.ts +0 -1
- package/dist/cjs/components/spinner/themes.d.ts +0 -3
- package/dist/cjs/components/spinner/themes.js +1 -1
- package/dist/cjs/components/states/StateComponent.d.ts +2 -14
- package/dist/cjs/components/states/StateComponent.js +1 -1
- package/dist/cjs/components/states/StateComponent.styled.d.ts +3 -10
- package/dist/cjs/components/states/StateComponent.styled.js +8 -11
- package/dist/cjs/components/states/index.d.ts +0 -1
- package/dist/cjs/components/states-modal/DeleteConfirmationModal.d.ts +0 -1
- package/dist/cjs/components/states-modal/DeleteConfirmationModal.js +1 -1
- package/dist/cjs/components/states-modal/StateModalComponent.d.ts +1 -9
- package/dist/cjs/components/states-modal/StateModalComponent.js +1 -1
- package/dist/cjs/components/stepper/Stepper.d.ts +2 -4
- package/dist/cjs/components/stepper/Stepper.js +1 -1
- package/dist/cjs/components/stepper/Stepper.styled.d.ts +0 -2
- package/dist/cjs/components/stepper/Stepper.styled.js +4 -4
- package/dist/cjs/components/stepper/WorkingStepper.d.ts +2 -1
- package/dist/cjs/components/switch/Switch.d.ts +3 -3
- package/dist/cjs/components/switch/Switch.js +1 -1
- package/dist/cjs/components/tabs/Tabs.d.ts +1 -1
- package/dist/cjs/components/tabs/Tabs.js +1 -1
- package/dist/cjs/components/tabs/Tabs.styles.d.ts +4 -12
- package/dist/cjs/components/tabs/Tabs.styles.js +1 -1
- package/dist/cjs/components/tag/Tag.d.ts +2 -1
- package/dist/cjs/components/tag/Tag.js +1 -1
- package/dist/cjs/components/tag/Tag.styled.d.ts +1 -9
- package/dist/cjs/components/tag/Tag.styled.js +1 -1
- package/dist/cjs/components/tag/model.d.ts +3 -49
- package/dist/cjs/components/tag/model.js +1 -1
- package/dist/cjs/components/tag/themes.d.ts +1 -1
- package/dist/cjs/components/tag/themes.js +1 -1
- package/dist/cjs/components/template-context-mapper/Badge/index.d.ts +3 -5
- package/dist/cjs/components/template-context-mapper/Badge/index.js +3 -4
- package/dist/cjs/components/template-context-mapper/TemplateContextMapper.d.ts +8 -55
- package/dist/cjs/components/template-context-mapper/TemplateContextMapper.js +1 -1
- package/dist/cjs/components/template-context-mapper/context/templateModalContext.d.ts +13 -129
- package/dist/cjs/components/template-context-mapper/context/templateModalContext.js +1 -1
- package/dist/cjs/components/template-context-mapper/index.d.ts +0 -3
- package/dist/cjs/components/template-context-mapper/modalElements/Body.d.ts +2 -11
- package/dist/cjs/components/template-context-mapper/modalElements/Body.js +12 -16
- package/dist/cjs/components/template-context-mapper/modalElements/DesktopPreview.d.ts +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/DesktopPreview.js +3 -3
- package/dist/cjs/components/template-context-mapper/modalElements/EditMediaV2.d.ts +1 -3
- package/dist/cjs/components/template-context-mapper/modalElements/EditMediaV2.js +5 -6
- package/dist/cjs/components/template-context-mapper/modalElements/EditMediaV2.style.js +3 -5
- package/dist/cjs/components/template-context-mapper/modalElements/EditWhatsAppTemplateMediaV2.d.ts +9 -0
- package/dist/cjs/components/template-context-mapper/modalElements/EditWhatsAppTemplateMediaV2.js +1 -0
- package/dist/cjs/components/template-context-mapper/modalElements/EditWhatsAppTemplateV2.d.ts +4 -11
- package/dist/cjs/components/template-context-mapper/modalElements/EditWhatsAppTemplateV2.js +1 -7
- package/dist/cjs/components/template-context-mapper/modalElements/Footer.d.ts +2 -4
- package/dist/cjs/components/template-context-mapper/modalElements/Footer.js +6 -8
- package/dist/cjs/components/template-context-mapper/modalElements/Header.d.ts +2 -1
- package/dist/cjs/components/template-context-mapper/modalElements/MobilePreview.d.ts +4 -3
- package/dist/cjs/components/template-context-mapper/modalElements/MobilePreview.js +4 -9
- package/dist/cjs/components/template-context-mapper/modalElements/TemplateSelectModalContent.d.ts +2 -11
- package/dist/cjs/components/template-context-mapper/modalElements/TemplateSelectModalContent.js +1 -1
- package/dist/cjs/components/template-context-mapper/modalElements/VariableConnector.d.ts +2 -10
- package/dist/cjs/components/template-context-mapper/modalElements/VariableConnector.js +3 -15
- package/dist/cjs/components/template-context-mapper/modalElements/VariableConnectorWhatsApp.d.ts +6 -9
- package/dist/cjs/components/template-context-mapper/modalElements/VariableConnectorWhatsApp.js +1 -1
- package/dist/cjs/components/template-context-mapper/modalElements/VariableConnectorsPanel.d.ts +2 -5
- package/dist/cjs/components/template-context-mapper/modalElements/VariableConnectorsPanel.js +3 -25
- package/dist/cjs/components/template-context-mapper/modalElements/VariableEditorHeader.d.ts +1 -1
- package/dist/cjs/components/template-context-mapper/modalElements/VariableEditorHeader.js +1 -1
- package/dist/cjs/components/template-context-mapper/modalElements/WhatsAppTemplateCardButtonV2.d.ts +2 -4
- package/dist/cjs/components/template-context-mapper/modalElements/WhatsAppTemplateCardButtonV2.js +1 -1
- package/dist/cjs/components/template-context-mapper/utils/getDataFromTemplateComponent.d.ts +0 -13
- package/dist/cjs/components/template-context-mapper/utils/getDataFromTemplateComponent.js +1 -1
- package/dist/cjs/components/template-context-mapper/utils/validateIsUrl.d.ts +1 -2
- package/dist/cjs/components/template-context-mapper/utils/validateIsUrl.js +1 -1
- package/dist/cjs/components/template-preview/EmailTemplatePreview.styled.d.ts +0 -6
- package/dist/cjs/components/template-preview/EmailTemplatePreview.styled.js +2 -21
- package/dist/cjs/components/template-preview/EmailTemplateThumbnailPreview.d.ts +0 -3
- package/dist/cjs/components/template-preview/EmailTemplateThumbnailPreview.js +1 -1
- package/dist/cjs/components/template-preview/SMS/SMSBubble.d.ts +2 -1
- package/dist/cjs/components/template-preview/SmsTemplatePreview.d.ts +0 -1
- package/dist/cjs/components/template-preview/SmsTemplatePreview.js +1 -1
- package/dist/cjs/components/template-preview/TemplatePreview.d.ts +5 -14
- package/dist/cjs/components/template-preview/TemplatePreview.js +1 -1
- package/dist/cjs/components/template-preview/WhatsApp/ChatBtn.d.ts +0 -1
- package/dist/cjs/components/template-preview/WhatsApp/ChatBtn.js +1 -1
- package/dist/cjs/components/template-preview/WhatsApp/ChatHeader.d.ts +2 -1
- package/dist/cjs/components/template-preview/WhatsApp/ChatUI.d.ts +2 -1
- package/dist/cjs/components/template-preview/WhatsApp/ChatUI.js +4 -4
- package/dist/cjs/components/template-preview/WhatsApp/ChatUI.style.d.ts +2 -16
- package/dist/cjs/components/template-preview/WhatsApp/ChatUI.style.js +7 -20
- package/dist/cjs/components/template-preview/WhatsApp/ChatUiV2.d.ts +2 -2
- package/dist/cjs/components/template-preview/WhatsApp/ChatUiV2.js +7 -7
- package/dist/cjs/components/template-preview/WhatsApp/MediaCard.js +1 -1
- package/dist/cjs/components/template-preview/WhatsApp/RenderTemplateWithVariable.d.ts +2 -1
- package/dist/cjs/components/template-preview/WhatsApp/WhatsAppLikePreviewV2.js +7 -16
- package/dist/cjs/components/template-preview/WhatsAppTemplatePreview.d.ts +0 -6
- package/dist/cjs/components/template-preview/WhatsAppTemplatePreview.js +1 -1
- package/dist/cjs/components/template-preview/constants/TemplateConstants.d.ts +0 -2
- package/dist/cjs/components/template-preview/constants/TemplateConstants.js +1 -1
- package/dist/cjs/components/template-preview/constants/regexPatterns.js +1 -1
- package/dist/cjs/components/template-preview/helpers/SmsTemplateHelper.d.ts +1 -1
- package/dist/cjs/components/template-preview/helpers/SmsTemplateHelper.js +1 -1
- package/dist/cjs/components/template-preview/helpers/TemplateCreatorHelper.d.ts +1 -18
- package/dist/cjs/components/template-preview/helpers/TemplateCreatorHelper.js +1 -1
- package/dist/cjs/components/template-preview/helpers/VariableEditorHelper.js +1 -1
- package/dist/cjs/components/template-preview/index.d.ts +0 -3
- package/dist/cjs/components/template-preview/models/Channels.d.ts +1 -2
- package/dist/cjs/components/template-preview/models/Channels.js +1 -1
- package/dist/cjs/components/template-preview/models/EmailTemplate.d.ts +1 -2
- package/dist/cjs/components/template-preview/models/SmsTemplate.d.ts +1 -3
- package/dist/cjs/components/template-preview/models/TemplateMeta.d.ts +1 -20
- package/dist/cjs/components/template-preview/models/TemplateMeta.js +1 -1
- package/dist/cjs/components/template-preview/models/WhatsAppTemplate.d.ts +5 -129
- package/dist/cjs/components/template-preview/models/WhatsAppTemplate.js +1 -1
- package/dist/cjs/components/template-preview/utils/TemplateHelperUtils.d.ts +0 -2
- package/dist/cjs/components/template-preview/utils/TemplateHelperUtils.js +1 -1
- package/dist/cjs/components/toaster/Toaster.d.ts +2 -8
- package/dist/cjs/components/toaster/Toaster.js +1 -1
- package/dist/cjs/components/toaster/Toaster.styled.d.ts +1 -5
- package/dist/cjs/components/toaster/Toaster.styled.js +1 -1
- package/dist/cjs/components/tooltips/Tooltip.d.ts +0 -3
- package/dist/cjs/components/tooltips/Tooltip.js +1 -1
- package/dist/cjs/components/tooltips/TooltipInternal.d.ts +1 -3
- package/dist/cjs/components/tooltips/TooltipInternal.js +1 -1
- package/dist/cjs/components/zeroState/ZeroState.d.ts +0 -6
- package/dist/cjs/components/zeroState/ZeroState.js +5 -5
- package/dist/cjs/constants/Theme.d.ts +0 -30
- package/dist/cjs/constants/Theme.js +1 -1
- package/dist/cjs/helpers/BaseWhatsappContentLang.helper.js +1 -1
- package/dist/cjs/helpers/index.d.ts +0 -3
- package/dist/cjs/hooks/useOutside.d.ts +1 -1
- package/dist/cjs/hooks/useOutside.js +1 -1
- package/dist/cjs/index.d.ts +0 -65
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js +1 -1
- package/dist/cjs/utils/DateUtils.d.ts +0 -1
- package/dist/cjs/utils/DateUtils.js +1 -1
- package/dist/cjs/utils/StringUtils.d.ts +0 -2
- package/dist/cjs/utils/StringUtils.js +1 -1
- package/dist/esm/_virtual/_tslib.js +1 -1
- package/dist/esm/assets/icons/chevronLeft.svg.js +1 -1
- package/dist/esm/assets/icons/chevronRight.svg.js +1 -1
- package/dist/esm/assets/icons/emoji.svg.js +1 -1
- package/dist/esm/assets/icons/halfRectangle.svg.js +1 -1
- package/dist/esm/assets/icons/searchIcon.d.ts +2 -8
- package/dist/esm/assets/icons/strikeThrough.svg.js +1 -1
- package/dist/esm/assets/icons/vertical_dots.svg.js +1 -1
- package/dist/esm/bundle.css +8 -0
- package/dist/esm/components/QueryBuilder/Filters/Event/components/EventFilter.js +1 -1
- package/dist/esm/components/QueryBuilder/Filters/Segment/components/SegmentFilter.js +1 -1
- package/dist/esm/components/QueryBuilder/Filters/UserProperty/components/UserPropertyFilter.js +1 -1
- package/dist/esm/components/QueryBuilder/Triggers/EVENTS/components/EventsTrigger.js +1 -1
- package/dist/esm/components/QueryBuilder/Triggers/components/BaseTriggerQueryBuilderNode.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/Triggers/components/BaseTriggerQueryBuilderNode.js +1 -1
- package/dist/esm/components/QueryBuilder/components/AllowedListDropdown.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/FreeText.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/FreeText.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/FrequencyIntegerPositiveSingle.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/FrequencyIntegerPositiveSingle.js +2 -2
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/IgPicker.d.ts +3 -4
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/IgPicker.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/IntegerPositiveSingle.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/IntegerSingleValue.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/MultiselectDropdownFreeText.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/MultiselectDropdownFreeText.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/NoInput.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/NumberTime.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/NumberTime.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/SingleDate.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/SingleDate.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/TwoDate.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/TwoDate.js +1 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/TwoNumberInputsSeperatedByAnd.d.ts +2 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Connector.js +1 -1
- package/dist/esm/components/QueryBuilder/components/DropdownWrapper.d.ts +0 -2
- package/dist/esm/components/QueryBuilder/components/DropdownWrapper.js +1 -1
- package/dist/esm/components/QueryBuilder/components/QueryBuilderNode/Base/BaseQueryBuilderNode.d.ts +1 -5
- package/dist/esm/components/QueryBuilder/components/QueryBuilderNode/Property/PropertyNode.js +1 -1
- package/dist/esm/components/QueryBuilder/components/QueryBuilderNode/Property/PropertyNodeUIWrapper.js +1 -1
- package/dist/esm/components/QueryBuilder/components/QueryBuilderNode/QueryBuilderNode.js +1 -1
- package/dist/esm/components/QueryBuilder/components/QueryBuilderNodes.js +1 -1
- package/dist/esm/components/QueryBuilder/constants/connector.d.ts +13 -72
- package/dist/esm/components/QueryBuilder/constants/connector.js +1 -1
- package/dist/esm/components/QueryBuilder/constants/connectorPosition.d.ts +8 -22
- package/dist/esm/components/QueryBuilder/constants/connectorPosition.js +1 -1
- package/dist/esm/components/QueryBuilder/helpers/Connector.helper.d.ts +1 -3
- package/dist/esm/components/QueryBuilder/helpers/Connector.helper.js +1 -1
- package/dist/esm/components/QueryBuilder/redux/queryBuilder.reducer.js +1 -1
- package/dist/esm/components/QueryBuilder/types/QueryBuilder.type.d.ts +2 -17
- package/dist/esm/components/QueryBuilder/types/QueryBuilder.type.js +1 -1
- package/dist/esm/components/QueryBuilder/types/QueryBuilderConnector.type.d.ts +1 -14
- package/dist/esm/components/QueryBuilder/types/QueryBuilderOperator.type.d.ts +11 -63
- package/dist/esm/components/QueryBuilder/types/QueryBuilderOperator.type.js +1 -1
- package/dist/esm/components/QueryBuilder/types/QueryBuilderPropertyProps.d.ts +1 -5
- package/dist/esm/components/TablePagination/TablePagination.d.ts +0 -3
- package/dist/esm/components/TablePagination/TablePagination.js +1 -1
- package/dist/esm/components/TablePagination/TablePagination.styled.js +0 -1
- package/dist/esm/components/TablePagination/TablePaginationCard.d.ts +1 -3
- package/dist/esm/components/TablePagination/TablePaginationCard.js +1 -1
- package/dist/esm/components/TypographyStyle.d.ts +17 -121
- package/dist/esm/components/TypographyStyle.js +96 -292
- package/dist/esm/components/WhatsAppTextEditor/CustomEditor.styled.d.ts +3 -3
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.d.ts +1 -90
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js +1 -5
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.d.ts +0 -36
- package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +1 -1
- package/dist/esm/components/alerts/Alert.d.ts +2 -11
- package/dist/esm/components/alerts/Alert.js +1 -1
- package/dist/esm/components/alerts/Alert.styled.d.ts +1 -6
- package/dist/esm/components/alerts/Alert.styled.js +4 -13
- package/dist/esm/components/alerts/AlertHelper.d.ts +1 -17
- package/dist/esm/components/alerts/AlertHelper.js +1 -1
- package/dist/esm/components/alerts/index.d.ts +0 -1
- package/dist/esm/components/analytics-card/AnalyticsCard.d.ts +0 -1
- package/dist/esm/components/analytics-card/AnalyticsCard.js +1 -1
- package/dist/esm/components/analytics-card/AnalyticsCard.styled.d.ts +2 -2
- package/dist/esm/components/analytics-card/AnalyticsCard.styled.js +1 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChip.d.ts +0 -7
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChip.js +1 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsDropdown.d.ts +0 -19
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsDropdown.js +1 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsMultiChip.d.ts +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsMultiChip.js +1 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/CommonStyles.d.ts +3 -16
- package/dist/esm/components/analytics-chips-and-dropdowns/CommonStyles.js +1 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/index.d.ts +0 -17
- package/dist/esm/components/avatar/Avatar.d.ts +0 -25
- package/dist/esm/components/avatar/Avatar.js +1 -1
- package/dist/esm/components/avatar/Avatar.styled.d.ts +1 -2
- package/dist/esm/components/avatar/Avatar.styled.js +3 -3
- package/dist/esm/components/avatar/AvatarHelper.d.ts +2 -5
- package/dist/esm/components/avatar/AvatarHelper.js +1 -1
- package/dist/esm/components/avatar/index.d.ts +0 -1
- package/dist/esm/components/button/Button.js +1 -1
- package/dist/esm/components/button/Button.styled.d.ts +2 -7
- package/dist/esm/components/button/Button.styled.js +1 -1
- package/dist/esm/components/button/model.d.ts +2 -17
- package/dist/esm/components/button/themes.d.ts +9 -43
- package/dist/esm/components/button/themes.js +1 -1
- package/dist/esm/components/card-selection-modal/CardSelectionModal.styled.d.ts +2 -2
- package/dist/esm/components/checkBox/CheckBox.d.ts +2 -12
- package/dist/esm/components/checkBox/CheckBox.js +1 -1
- package/dist/esm/components/checkBox/CheckBox.styled.d.ts +1 -6
- package/dist/esm/components/checkBox/CheckBox.styled.js +8 -21
- package/dist/esm/components/curtain/Curtain.d.ts +1 -4
- package/dist/esm/components/curtain/Curtain.js +1 -1
- package/dist/esm/components/curtain/Curtain.styled.d.ts +0 -7
- package/dist/esm/components/curtain/Curtain.styled.js +5 -20
- package/dist/esm/components/curtain/CurtainHelper.d.ts +60 -13
- package/dist/esm/components/curtain/CurtainHelper.js +1 -1
- package/dist/esm/components/datePicker/DatePicker.d.ts +0 -3
- package/dist/esm/components/datePicker/DatePicker.js +1 -1
- package/dist/esm/components/datePicker/DatePicker.styled.d.ts +1 -13
- package/dist/esm/components/datePicker/DatePicker.styled.js +1 -1
- package/dist/esm/components/datePicker/DatePickerWrapper.d.ts +2 -6
- package/dist/esm/components/datePicker/DatePickerWrapper.js +1 -1
- package/dist/esm/components/datePicker/DatePickerWrapper.styled.d.ts +0 -2
- package/dist/esm/components/datePicker/DatePickerWrapper.styled.js +3 -4
- package/dist/esm/components/datePicker/index.d.ts +0 -2
- package/dist/esm/components/dropShadow/DropShadow.d.ts +2 -1
- package/dist/esm/components/dropShadow/DropShadow.js +1 -1
- package/dist/esm/components/dropdown/Common.styled.d.ts +1 -8
- package/dist/esm/components/dropdown/Common.styled.js +8 -25
- package/dist/esm/components/dropdown/Dropdown.d.ts +2 -14
- package/dist/esm/components/dropdown/Dropdown.js +1 -1
- package/dist/esm/components/dropdown/DropdownPopover/index.d.ts +0 -15
- package/dist/esm/components/dropdown/DropdownPopover/index.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.d.ts +1 -3
- package/dist/esm/components/dropdown/OpenedDropdown/components/OpennedDropdown.styled.js +12 -23
- package/dist/esm/components/dropdown/OpenedDropdown/components/description/Description.d.ts +0 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/description/Description.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/description/Description.styled.d.ts +1 -3
- package/dist/esm/components/dropdown/OpenedDropdown/components/description/Description.styled.js +1 -2
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.d.ts +0 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/FreeFormMenu.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.d.ts +3 -17
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuItem.js +4 -43
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.d.ts +3 -12
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.d.ts +1 -6
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/MenuList.styled.js +5 -6
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.d.ts +0 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/menu/SelectAllMenu.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.d.ts +3 -7
- package/dist/esm/components/dropdown/OpenedDropdown/components/multiSelect/MultiSelectDropdownBottomBar.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.d.ts +0 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchBox.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.d.ts +0 -3
- package/dist/esm/components/dropdown/OpenedDropdown/components/searchbox/SearchZeroState.js +1 -1
- package/dist/esm/components/dropdown/OpenedDropdown/utils/iterationOnOptions.d.ts +0 -15
- package/dist/esm/components/dropdown/OpenedDropdown/utils/iterationOnOptions.js +1 -1
- package/dist/esm/components/dropdown/index.d.ts +1 -4
- package/dist/esm/components/dropdown/type.d.ts +2 -51
- package/dist/esm/components/fab-menu/FABMenu.d.ts +0 -1
- package/dist/esm/components/fab-menu/FABMenu.js +1 -1
- package/dist/esm/components/floating-action-button/FloatingActionButton.styles.js +17 -17
- package/dist/esm/components/helpers/FileUploaderHelper.d.ts +2 -8
- package/dist/esm/components/helpers/FileUploaderHelper.js +1 -1
- package/dist/esm/components/icon-button/IconButton.js +1 -1
- package/dist/esm/components/icon-button/IconButton.styled.js +1 -1
- package/dist/esm/components/icon-button/model.d.ts +1 -8
- package/dist/esm/components/icon-button/theme.js +1 -1
- package/dist/esm/components/image-compress/ImageCompress.d.ts +1 -5
- package/dist/esm/components/image-compress/ImageCompress.js +1 -1
- package/dist/esm/components/image-cropper/BikImageCropper.d.ts +4 -3
- package/dist/esm/components/image-cropper/index.d.ts +0 -1
- package/dist/esm/components/input/Input.d.ts +6 -36
- package/dist/esm/components/input/Input.js +1 -1
- package/dist/esm/components/input/Input.styled.d.ts +4 -18
- package/dist/esm/components/input/Input.styled.js +1 -1
- package/dist/esm/components/list-item/ListItem.d.ts +1 -3
- package/dist/esm/components/list-item/ListItem.js +1 -1
- package/dist/esm/components/list-item/ListItem.styled.d.ts +1 -2
- package/dist/esm/components/list-item/ListItem.styled.js +1 -1
- package/dist/esm/components/list-item/themes.d.ts +1 -1
- package/dist/esm/components/list-item/themes.js +1 -1
- package/dist/esm/components/modals/Modal.d.ts +0 -6
- package/dist/esm/components/modals/Modal.js +1 -1
- package/dist/esm/components/modals/modal.styled.d.ts +4 -12
- package/dist/esm/components/modals/modal.styled.js +1 -1
- package/dist/esm/components/modals/styledModal.d.ts +1 -15
- package/dist/esm/components/modals/styledModal.js +1 -1
- package/dist/esm/components/pagination/Pagination.styled.d.ts +1 -1
- package/dist/esm/components/plans/DurationSelectorStyles.d.ts +1 -1
- package/dist/esm/components/plans/SubscriptionPlan.d.ts +2 -15
- package/dist/esm/components/plans/SubscriptionPlan.js +1 -1
- package/dist/esm/components/plans/SubscriptionPlanSelector.d.ts +0 -36
- package/dist/esm/components/plans/SubscriptionPlanSelector.js +1 -1
- package/dist/esm/components/plans/SubscriptionPlanStyled.d.ts +1 -11
- package/dist/esm/components/plans/SubscriptionPlanStyled.js +1 -1
- package/dist/esm/components/plans/index.d.ts +0 -2
- package/dist/esm/components/postPicker/PostPicker.styled.d.ts +3 -8
- package/dist/esm/components/postPicker/PostPicker.styled.js +18 -23
- package/dist/esm/components/postPicker/postPicker.d.ts +0 -24
- package/dist/esm/components/postPicker/postPicker.js +1 -1
- package/dist/esm/components/progress-bar/ProgressBarComponent.d.ts +2 -2
- package/dist/esm/components/progress-bar/ProgressBarComponent.js +1 -1
- package/dist/esm/components/progress-bar/index.d.ts +0 -1
- package/dist/esm/components/radioButton/RadioButton.d.ts +0 -9
- package/dist/esm/components/radioButton/RadioButton.js +1 -1
- package/dist/esm/components/radioButton/RadioButton.styled.d.ts +0 -1
- package/dist/esm/components/radioButton/RadioButton.styled.js +7 -9
- package/dist/esm/components/sample-button/SampleButton.styled.d.ts +1 -1
- package/dist/esm/components/searchBar/searchBar.d.ts +2 -9
- package/dist/esm/components/shimmer/ShimmerComponent/BikShimmer.d.ts +4 -7
- package/dist/esm/components/shimmer/ShimmerComponent/BikShimmer.js +1 -1
- package/dist/esm/components/shimmer/ShimmerComponent/ShimmerStyled.d.ts +1 -14
- package/dist/esm/components/shimmer/ShimmerComponent/ShimmerStyled.js +2 -2
- package/dist/esm/components/spinner/Spinner.d.ts +2 -8
- package/dist/esm/components/spinner/Spinner.js +1 -19
- package/dist/esm/components/spinner/lotties/black.json.js +1 -0
- package/dist/esm/components/spinner/lotties/brand.json.js +1 -0
- package/dist/esm/components/spinner/lotties/red.json.js +1 -0
- package/dist/esm/components/spinner/lotties/white.json.js +1 -0
- package/dist/esm/components/spinner/model.d.ts +0 -1
- package/dist/esm/components/spinner/themes.d.ts +0 -3
- package/dist/esm/components/spinner/themes.js +1 -1
- package/dist/esm/components/states/StateComponent.d.ts +2 -14
- package/dist/esm/components/states/StateComponent.js +1 -1
- package/dist/esm/components/states/StateComponent.styled.d.ts +3 -10
- package/dist/esm/components/states/StateComponent.styled.js +9 -12
- package/dist/esm/components/states/index.d.ts +0 -1
- package/dist/esm/components/states-modal/DeleteConfirmationModal.d.ts +0 -1
- package/dist/esm/components/states-modal/DeleteConfirmationModal.js +1 -1
- package/dist/esm/components/states-modal/StateModalComponent.d.ts +1 -9
- package/dist/esm/components/states-modal/StateModalComponent.js +1 -1
- package/dist/esm/components/stepper/Stepper.d.ts +2 -4
- package/dist/esm/components/stepper/Stepper.js +1 -1
- package/dist/esm/components/stepper/Stepper.styled.d.ts +0 -2
- package/dist/esm/components/stepper/Stepper.styled.js +7 -7
- package/dist/esm/components/stepper/WorkingStepper.d.ts +2 -1
- package/dist/esm/components/switch/Switch.d.ts +3 -3
- package/dist/esm/components/switch/Switch.js +1 -1
- package/dist/esm/components/tabs/Tabs.d.ts +1 -1
- package/dist/esm/components/tabs/Tabs.js +1 -1
- package/dist/esm/components/tabs/Tabs.styles.d.ts +4 -12
- package/dist/esm/components/tabs/Tabs.styles.js +1 -1
- package/dist/esm/components/tag/Tag.d.ts +2 -1
- package/dist/esm/components/tag/Tag.js +1 -1
- package/dist/esm/components/tag/Tag.styled.d.ts +1 -9
- package/dist/esm/components/tag/Tag.styled.js +1 -1
- package/dist/esm/components/tag/model.d.ts +3 -49
- package/dist/esm/components/tag/model.js +1 -1
- package/dist/esm/components/tag/themes.d.ts +1 -1
- package/dist/esm/components/tag/themes.js +1 -1
- package/dist/esm/components/template-context-mapper/Badge/index.d.ts +3 -5
- package/dist/esm/components/template-context-mapper/Badge/index.js +5 -6
- package/dist/esm/components/template-context-mapper/TemplateContextMapper.d.ts +8 -55
- package/dist/esm/components/template-context-mapper/TemplateContextMapper.js +1 -1
- package/dist/esm/components/template-context-mapper/context/templateModalContext.d.ts +13 -129
- package/dist/esm/components/template-context-mapper/context/templateModalContext.js +1 -1
- package/dist/esm/components/template-context-mapper/index.d.ts +0 -3
- package/dist/esm/components/template-context-mapper/modalElements/Body.d.ts +2 -11
- package/dist/esm/components/template-context-mapper/modalElements/Body.js +12 -16
- package/dist/esm/components/template-context-mapper/modalElements/DesktopPreview.d.ts +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/DesktopPreview.js +7 -7
- package/dist/esm/components/template-context-mapper/modalElements/EditMediaV2.d.ts +1 -3
- package/dist/esm/components/template-context-mapper/modalElements/EditMediaV2.js +5 -6
- package/dist/esm/components/template-context-mapper/modalElements/EditMediaV2.style.js +0 -2
- package/dist/esm/components/template-context-mapper/modalElements/EditWhatsAppTemplateMediaV2.d.ts +9 -0
- package/dist/esm/components/template-context-mapper/modalElements/EditWhatsAppTemplateMediaV2.js +1 -0
- package/dist/esm/components/template-context-mapper/modalElements/EditWhatsAppTemplateV2.d.ts +4 -11
- package/dist/esm/components/template-context-mapper/modalElements/EditWhatsAppTemplateV2.js +1 -7
- package/dist/esm/components/template-context-mapper/modalElements/Footer.d.ts +2 -4
- package/dist/esm/components/template-context-mapper/modalElements/Footer.js +6 -8
- package/dist/esm/components/template-context-mapper/modalElements/Header.d.ts +2 -1
- package/dist/esm/components/template-context-mapper/modalElements/MobilePreview.d.ts +4 -3
- package/dist/esm/components/template-context-mapper/modalElements/MobilePreview.js +4 -9
- package/dist/esm/components/template-context-mapper/modalElements/TemplateSelectModalContent.d.ts +2 -11
- package/dist/esm/components/template-context-mapper/modalElements/TemplateSelectModalContent.js +1 -1
- package/dist/esm/components/template-context-mapper/modalElements/VariableConnector.d.ts +2 -10
- package/dist/esm/components/template-context-mapper/modalElements/VariableConnector.js +3 -15
- package/dist/esm/components/template-context-mapper/modalElements/VariableConnectorWhatsApp.d.ts +6 -9
- package/dist/esm/components/template-context-mapper/modalElements/VariableConnectorWhatsApp.js +1 -1
- package/dist/esm/components/template-context-mapper/modalElements/VariableConnectorsPanel.d.ts +2 -5
- package/dist/esm/components/template-context-mapper/modalElements/VariableConnectorsPanel.js +3 -25
- package/dist/esm/components/template-context-mapper/modalElements/VariableEditorHeader.d.ts +1 -1
- package/dist/esm/components/template-context-mapper/modalElements/VariableEditorHeader.js +1 -1
- package/dist/esm/components/template-context-mapper/modalElements/WhatsAppTemplateCardButtonV2.d.ts +2 -4
- package/dist/esm/components/template-context-mapper/modalElements/WhatsAppTemplateCardButtonV2.js +1 -1
- package/dist/esm/components/template-context-mapper/utils/getDataFromTemplateComponent.d.ts +0 -13
- package/dist/esm/components/template-context-mapper/utils/getDataFromTemplateComponent.js +1 -1
- package/dist/esm/components/template-context-mapper/utils/validateIsUrl.d.ts +1 -2
- package/dist/esm/components/template-context-mapper/utils/validateIsUrl.js +1 -1
- package/dist/esm/components/template-preview/EmailTemplatePreview.styled.d.ts +0 -6
- package/dist/esm/components/template-preview/EmailTemplatePreview.styled.js +4 -23
- package/dist/esm/components/template-preview/EmailTemplateThumbnailPreview.d.ts +0 -3
- package/dist/esm/components/template-preview/EmailTemplateThumbnailPreview.js +1 -1
- package/dist/esm/components/template-preview/SMS/SMSBubble.d.ts +2 -1
- package/dist/esm/components/template-preview/SmsTemplatePreview.d.ts +0 -1
- package/dist/esm/components/template-preview/SmsTemplatePreview.js +1 -1
- package/dist/esm/components/template-preview/TemplatePreview.d.ts +5 -14
- package/dist/esm/components/template-preview/TemplatePreview.js +1 -1
- package/dist/esm/components/template-preview/WhatsApp/ChatBtn.d.ts +0 -1
- package/dist/esm/components/template-preview/WhatsApp/ChatBtn.js +1 -1
- package/dist/esm/components/template-preview/WhatsApp/ChatHeader.d.ts +2 -1
- package/dist/esm/components/template-preview/WhatsApp/ChatUI.d.ts +2 -1
- package/dist/esm/components/template-preview/WhatsApp/ChatUI.js +4 -4
- package/dist/esm/components/template-preview/WhatsApp/ChatUI.style.d.ts +2 -16
- package/dist/esm/components/template-preview/WhatsApp/ChatUI.style.js +11 -24
- package/dist/esm/components/template-preview/WhatsApp/ChatUiV2.d.ts +2 -2
- package/dist/esm/components/template-preview/WhatsApp/ChatUiV2.js +7 -7
- package/dist/esm/components/template-preview/WhatsApp/MediaCard.js +1 -1
- package/dist/esm/components/template-preview/WhatsApp/RenderTemplateWithVariable.d.ts +2 -1
- package/dist/esm/components/template-preview/WhatsApp/WhatsAppLikePreviewV2.js +7 -16
- package/dist/esm/components/template-preview/WhatsAppTemplatePreview.d.ts +0 -6
- package/dist/esm/components/template-preview/WhatsAppTemplatePreview.js +1 -1
- package/dist/esm/components/template-preview/constants/TemplateConstants.d.ts +0 -2
- package/dist/esm/components/template-preview/constants/TemplateConstants.js +1 -1
- package/dist/esm/components/template-preview/constants/regexPatterns.js +1 -1
- package/dist/esm/components/template-preview/helpers/SmsTemplateHelper.d.ts +1 -1
- package/dist/esm/components/template-preview/helpers/SmsTemplateHelper.js +1 -1
- package/dist/esm/components/template-preview/helpers/TemplateCreatorHelper.d.ts +1 -18
- package/dist/esm/components/template-preview/helpers/TemplateCreatorHelper.js +1 -1
- package/dist/esm/components/template-preview/helpers/VariableEditorHelper.js +1 -1
- package/dist/esm/components/template-preview/index.d.ts +0 -3
- package/dist/esm/components/template-preview/models/Channels.d.ts +1 -2
- package/dist/esm/components/template-preview/models/Channels.js +1 -1
- package/dist/esm/components/template-preview/models/EmailTemplate.d.ts +1 -2
- package/dist/esm/components/template-preview/models/SmsTemplate.d.ts +1 -3
- package/dist/esm/components/template-preview/models/TemplateMeta.d.ts +1 -20
- package/dist/esm/components/template-preview/models/TemplateMeta.js +1 -1
- package/dist/esm/components/template-preview/models/WhatsAppTemplate.d.ts +5 -129
- package/dist/esm/components/template-preview/models/WhatsAppTemplate.js +1 -1
- package/dist/esm/components/template-preview/utils/TemplateHelperUtils.d.ts +0 -2
- package/dist/esm/components/template-preview/utils/TemplateHelperUtils.js +1 -1
- package/dist/esm/components/toaster/Toaster.d.ts +2 -8
- package/dist/esm/components/toaster/Toaster.js +1 -1
- package/dist/esm/components/toaster/Toaster.styled.d.ts +1 -5
- package/dist/esm/components/toaster/Toaster.styled.js +1 -1
- package/dist/esm/components/tooltips/Tooltip.d.ts +0 -3
- package/dist/esm/components/tooltips/Tooltip.js +1 -1
- package/dist/esm/components/tooltips/TooltipInternal.d.ts +1 -3
- package/dist/esm/components/tooltips/TooltipInternal.js +1 -1
- package/dist/esm/components/zeroState/ZeroState.d.ts +0 -6
- package/dist/esm/components/zeroState/ZeroState.js +5 -5
- package/dist/esm/constants/Theme.d.ts +0 -30
- package/dist/esm/constants/Theme.js +1 -1
- package/dist/esm/helpers/BaseWhatsappContentLang.helper.js +1 -1
- package/dist/esm/helpers/index.d.ts +0 -3
- package/dist/esm/hooks/useOutside.d.ts +1 -1
- package/dist/esm/hooks/useOutside.js +1 -1
- package/dist/esm/index.d.ts +0 -65
- package/dist/esm/index.js +1 -1
- package/dist/esm/node_modules/@reduxjs/toolkit/dist/redux-toolkit.esm.js +1 -1
- package/dist/esm/utils/DateUtils.d.ts +0 -1
- package/dist/esm/utils/DateUtils.js +1 -1
- package/dist/esm/utils/StringUtils.d.ts +0 -2
- package/dist/esm/utils/StringUtils.js +1 -1
- package/package.json +15 -26
- package/dist/cjs/_virtual/_commonjsHelpers.js +0 -1
- package/dist/cjs/amplitude/Track.stories.d.ts +0 -4
- package/dist/cjs/amplitude/index.d.ts +0 -18
- package/dist/cjs/amplitude/index.js +0 -1
- package/dist/cjs/amplitude/model.d.ts +0 -48
- package/dist/cjs/amplitude/model.js +0 -1
- package/dist/cjs/assets/icons/ActiveChecklistIcon.d.ts +0 -3
- package/dist/cjs/assets/icons/ActiveChecklistIcon.js +0 -1
- package/dist/cjs/assets/icons/AiEdit.svg.js +0 -1
- package/dist/cjs/assets/icons/Ai_event_generating.svg.js +0 -1
- package/dist/cjs/assets/icons/Bik_logo.svg.js +0 -1
- package/dist/cjs/assets/icons/ChartBar.svg.js +0 -1
- package/dist/cjs/assets/icons/ChartPie.svg.js +0 -1
- package/dist/cjs/assets/icons/CheckIndicatorIcon.d.ts +0 -1
- package/dist/cjs/assets/icons/CheckIndicatorIcon.js +0 -1
- package/dist/cjs/assets/icons/CheckSquareOffset.svg.js +0 -1
- package/dist/cjs/assets/icons/CompletedChecklistIcon.d.ts +0 -3
- package/dist/cjs/assets/icons/CompletedChecklistIcon.js +0 -1
- package/dist/cjs/assets/icons/CustomiseIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/CustomiseIcon.js +0 -1
- package/dist/cjs/assets/icons/DocsIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/DocsIcon.js +0 -1
- package/dist/cjs/assets/icons/DoubtIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/DoubtIcon.js +0 -1
- package/dist/cjs/assets/icons/EditLabel.d.ts +0 -7
- package/dist/cjs/assets/icons/EditLabel.js +0 -1
- package/dist/cjs/assets/icons/EnableIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/EnableIcon.js +0 -1
- package/dist/cjs/assets/icons/GoLiveIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/GoLiveIcon.js +0 -1
- package/dist/cjs/assets/icons/HeadsetIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/HeadsetIcon.js +0 -1
- package/dist/cjs/assets/icons/HelpIcon.svg.js +0 -1
- package/dist/cjs/assets/icons/Icons.stories.d.ts +0 -31
- package/dist/cjs/assets/icons/Idea.svg.js +0 -1
- package/dist/cjs/assets/icons/InactiveChecklistIcon.d.ts +0 -3
- package/dist/cjs/assets/icons/InactiveChecklistIcon.js +0 -1
- package/dist/cjs/assets/icons/ListChecksIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/ListChecksIcon.js +0 -1
- package/dist/cjs/assets/icons/MarketingIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/MarketingIcon.js +0 -1
- package/dist/cjs/assets/icons/NotesIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/NotesIcon.js +0 -1
- package/dist/cjs/assets/icons/NudgesIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/NudgesIcon.js +0 -1
- package/dist/cjs/assets/icons/OnboardingLogo.d.ts +0 -7
- package/dist/cjs/assets/icons/OnboardingLogo.js +0 -1
- package/dist/cjs/assets/icons/OrderTrackingIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/OrderTrackingIcon.js +0 -1
- package/dist/cjs/assets/icons/PlusIcon.d.ts +0 -9
- package/dist/cjs/assets/icons/PlusIcon.js +0 -1
- package/dist/cjs/assets/icons/ProgressBadgeIcon.d.ts +0 -3
- package/dist/cjs/assets/icons/ProgressBadgeIcon.js +0 -1
- package/dist/cjs/assets/icons/RCS_PDF.svg.js +0 -1
- package/dist/cjs/assets/icons/Redirect2Icon.d.ts +0 -2
- package/dist/cjs/assets/icons/Redirect2Icon.js +0 -1
- package/dist/cjs/assets/icons/ShoppingIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/ShoppingIcon.js +0 -1
- package/dist/cjs/assets/icons/SmallCheckIcon.d.ts +0 -3
- package/dist/cjs/assets/icons/SmallCheckIcon.js +0 -1
- package/dist/cjs/assets/icons/StepsIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/StepsIcon.js +0 -1
- package/dist/cjs/assets/icons/StoreIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/StoreIcon.js +0 -1
- package/dist/cjs/assets/icons/SupportIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/SupportIcon.js +0 -1
- package/dist/cjs/assets/icons/ThreeColumnsIcon.d.ts +0 -6
- package/dist/cjs/assets/icons/ThreeColumnsIcon.js +0 -1
- package/dist/cjs/assets/icons/TrainingIcon.d.ts +0 -7
- package/dist/cjs/assets/icons/TrainingIcon.js +0 -1
- package/dist/cjs/assets/icons/WhiteStarFilled.svg.js +0 -1
- package/dist/cjs/assets/icons/actionButton.svg.js +0 -1
- package/dist/cjs/assets/icons/aiContentIcon.svg.js +0 -1
- package/dist/cjs/assets/icons/alarm.svg.js +0 -1
- package/dist/cjs/assets/icons/alert_triangle.svg.js +0 -1
- package/dist/cjs/assets/icons/arrow_back.svg.js +0 -1
- package/dist/cjs/assets/icons/arrow_down.svg.js +0 -1
- package/dist/cjs/assets/icons/arrow_up.svg.js +0 -1
- package/dist/cjs/assets/icons/back_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/bik_ai_stars_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/bik_livechat.svg.js +0 -1
- package/dist/cjs/assets/icons/box.svg.js +0 -1
- package/dist/cjs/assets/icons/boxV2.svg.js +0 -1
- package/dist/cjs/assets/icons/box_round.svg.js +0 -1
- package/dist/cjs/assets/icons/box_search.svg.js +0 -1
- package/dist/cjs/assets/icons/brand_home.svg.js +0 -1
- package/dist/cjs/assets/icons/broken_media_image.svg.js +0 -1
- package/dist/cjs/assets/icons/card_footer_arraw.svg.js +0 -1
- package/dist/cjs/assets/icons/chat-channel.svg.js +0 -1
- package/dist/cjs/assets/icons/chat.svg.js +0 -1
- package/dist/cjs/assets/icons/checkCircle.svg.js +0 -1
- package/dist/cjs/assets/icons/checklistIcon.svg.js +0 -1
- package/dist/cjs/assets/icons/chevronDownOutline.svg.js +0 -1
- package/dist/cjs/assets/icons/chevronLeft2.svg.js +0 -1
- package/dist/cjs/assets/icons/chevronRight2.svg.js +0 -1
- package/dist/cjs/assets/icons/chevronRightAlt.svg.js +0 -1
- package/dist/cjs/assets/icons/chevronUpOutline.svg.js +0 -1
- package/dist/cjs/assets/icons/circular-cross-icon.svg.js +0 -1
- package/dist/cjs/assets/icons/click.svg.js +0 -1
- package/dist/cjs/assets/icons/clock.svg.js +0 -1
- package/dist/cjs/assets/icons/copy-code-icon.svg.js +0 -1
- package/dist/cjs/assets/icons/cubeIcon.svg.js +0 -1
- package/dist/cjs/assets/icons/cursor.svg.js +0 -1
- package/dist/cjs/assets/icons/drag_handle.svg.js +0 -1
- package/dist/cjs/assets/icons/email-channel.svg.js +0 -1
- package/dist/cjs/assets/icons/expressionless_emoji.svg.js +0 -1
- package/dist/cjs/assets/icons/facebook_channel.svg.js +0 -1
- package/dist/cjs/assets/icons/file.svg.js +0 -1
- package/dist/cjs/assets/icons/gift_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/gmail.svg.js +0 -1
- package/dist/cjs/assets/icons/graph.svg.js +0 -1
- package/dist/cjs/assets/icons/grid.svg.js +0 -1
- package/dist/cjs/assets/icons/help.svg.js +0 -1
- package/dist/cjs/assets/icons/home.svg.js +0 -1
- package/dist/cjs/assets/icons/horizontal_dots.svg.js +0 -1
- package/dist/cjs/assets/icons/hover_home.svg.js +0 -1
- package/dist/cjs/assets/icons/index.d.ts +0 -167
- package/dist/cjs/assets/icons/instagram-channel.svg.js +0 -1
- package/dist/cjs/assets/icons/list.svg.js +0 -1
- package/dist/cjs/assets/icons/locked.svg.js +0 -1
- package/dist/cjs/assets/icons/log_out.svg.js +0 -1
- package/dist/cjs/assets/icons/lto_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/maximize.svg.js +0 -1
- package/dist/cjs/assets/icons/openai.svg.js +0 -1
- package/dist/cjs/assets/icons/paperclip.svg.js +0 -1
- package/dist/cjs/assets/icons/percentage_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/phone_round.svg.js +0 -1
- package/dist/cjs/assets/icons/play.svg.js +0 -1
- package/dist/cjs/assets/icons/pointer.svg.js +0 -1
- package/dist/cjs/assets/icons/profile.svg.js +0 -1
- package/dist/cjs/assets/icons/qrb.svg.js +0 -1
- package/dist/cjs/assets/icons/quotes.svg.js +0 -1
- package/dist/cjs/assets/icons/redirect.svg.js +0 -1
- package/dist/cjs/assets/icons/retry.svg.js +0 -1
- package/dist/cjs/assets/icons/retryIcon.svg.js +0 -1
- package/dist/cjs/assets/icons/sad_emoji.svg.js +0 -1
- package/dist/cjs/assets/icons/searchIcon.js +0 -1
- package/dist/cjs/assets/icons/searchIcon.svg.js +0 -1
- package/dist/cjs/assets/icons/send.svg.js +0 -1
- package/dist/cjs/assets/icons/send_template.svg.js +0 -1
- package/dist/cjs/assets/icons/shipping_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/similar.svg.js +0 -1
- package/dist/cjs/assets/icons/smile_emoji.svg.js +0 -1
- package/dist/cjs/assets/icons/smiley_emoji.svg.js +0 -1
- package/dist/cjs/assets/icons/sparkle.svg.js +0 -1
- package/dist/cjs/assets/icons/speedometer.svg.js +0 -1
- package/dist/cjs/assets/icons/starEmpty.svg.js +0 -1
- package/dist/cjs/assets/icons/starFilled.svg.js +0 -1
- package/dist/cjs/assets/icons/starFilledV2.svg.js +0 -1
- package/dist/cjs/assets/icons/state_icon.svg.js +0 -1
- package/dist/cjs/assets/icons/sub_category.svg.js +0 -1
- package/dist/cjs/assets/icons/sync.svg.js +0 -1
- package/dist/cjs/assets/icons/task.svg.js +0 -1
- package/dist/cjs/assets/icons/text_t9.svg.js +0 -1
- package/dist/cjs/assets/icons/thumbs_down.svg.js +0 -1
- package/dist/cjs/assets/icons/thumbs_up.svg.js +0 -1
- package/dist/cjs/assets/icons/tick.svg.js +0 -1
- package/dist/cjs/assets/icons/tick_double.svg.js +0 -1
- package/dist/cjs/assets/icons/triangle_error.svg.js +0 -1
- package/dist/cjs/assets/icons/undo.svg.js +0 -1
- package/dist/cjs/assets/icons/upload.svg.js +0 -1
- package/dist/cjs/assets/icons/website.svg.js +0 -1
- package/dist/cjs/assets/icons/whatsNew.svg.js +0 -1
- package/dist/cjs/assets/icons/whatsapp-channel.svg.js +0 -1
- package/dist/cjs/assets/icons/whatsapp_color.svg.js +0 -1
- package/dist/cjs/components/BikGiftedChat/Bubble/Bubble.d.ts +0 -5
- package/dist/cjs/components/BikGiftedChat/Bubble/Bubble.js +0 -1
- package/dist/cjs/components/BikGiftedChat/Bubble/types.d.ts +0 -38
- package/dist/cjs/components/BikGiftedChat/Bubble/types.js +0 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/Day.d.ts +0 -17
- package/dist/cjs/components/BikGiftedChat/GiftedChat/Day.js +0 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.d.ts +0 -5
- package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js +0 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/messageHelpers.d.ts +0 -6
- package/dist/cjs/components/BikGiftedChat/GiftedChat/messageHelpers.js +0 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/scrollHooks.d.ts +0 -10
- package/dist/cjs/components/BikGiftedChat/GiftedChat/scrollHooks.js +0 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/types.d.ts +0 -154
- package/dist/cjs/components/BikGiftedChat/GiftedChat/types.js +0 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/utils.d.ts +0 -22
- package/dist/cjs/components/BikGiftedChat/GiftedChat/utils.js +0 -1
- package/dist/cjs/components/BikGiftedChat/index.d.ts +0 -5
- package/dist/cjs/components/BikGiftedChat/types.d.ts +0 -24
- package/dist/cjs/components/InfiniteScroll/InfiniteScroll.d.ts +0 -9
- package/dist/cjs/components/InfiniteScroll/InfiniteScroll.js +0 -1
- package/dist/cjs/components/ProgressChecklist/MultiChecklistItem.d.ts +0 -10
- package/dist/cjs/components/ProgressChecklist/MultiChecklistItem.js +0 -1
- package/dist/cjs/components/ProgressChecklist/ProgressChecklist.d.ts +0 -75
- package/dist/cjs/components/ProgressChecklist/ProgressChecklist.js +0 -1
- package/dist/cjs/components/ProgressChecklist/ProgressChecklist.style.d.ts +0 -32
- package/dist/cjs/components/ProgressChecklist/ProgressChecklist.style.js +0 -133
- package/dist/cjs/components/ProgressChecklist/ProgressStepper.d.ts +0 -15
- package/dist/cjs/components/ProgressChecklist/ProgressStepper.js +0 -1
- package/dist/cjs/components/ProgressChecklist/SimpleChecklistItem.d.ts +0 -21
- package/dist/cjs/components/ProgressChecklist/SimpleChecklistItem.js +0 -1
- package/dist/cjs/components/ProgressChecklist/index.d.ts +0 -2
- package/dist/cjs/components/QueryBuilder/Filters/CustomField/components/CustomField.d.ts +0 -4
- package/dist/cjs/components/QueryBuilder/Filters/CustomField/components/CustomField.js +0 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/EmojiPicker.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/EmojiPicker.js +0 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/InTheLast.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/InTheLast.js +0 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/InTheLastAgo.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/InTheLastAgo.js +0 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/InTwoLast.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/InTwoLast.js +0 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/SingleselectDropdownFreeText.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/SingleselectDropdownFreeText.js +0 -1
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/StringSingleValue.d.ts +0 -3
- package/dist/cjs/components/QueryBuilder/components/Connectors/Components/StringSingleValue.js +0 -1
- package/dist/cjs/components/QueryBuilder/constants/DATE_OPERATORS_OPTIONS.d.ts +0 -2
- package/dist/cjs/components/QueryBuilder/constants/DATE_OPERATORS_OPTIONS.js +0 -1
- package/dist/cjs/components/QueryBuilder/helpers/MetaCustomProcessor.d.ts +0 -79
- package/dist/cjs/components/QueryBuilder/helpers/OperatorHelperV2.d.ts +0 -7
- package/dist/cjs/components/QueryBuilder/helpers/PropertyCustomProcessor.d.ts +0 -28
- package/dist/cjs/components/QueryBuilder/helpers/SegmentHelperV2.d.ts +0 -140
- package/dist/cjs/components/QueryBuilder/helpers/SegmentValidator.d.ts +0 -95
- package/dist/cjs/components/QueryBuilder/helpers/SegmentValidator.js +0 -1
- package/dist/cjs/components/SearchFilter/components/DatePickerButton.d.ts +0 -7
- package/dist/cjs/components/SearchFilter/components/DatePickerButton.js +0 -1
- package/dist/cjs/components/SearchFilter/components/DateRangeOnlyButton.d.ts +0 -7
- package/dist/cjs/components/SearchFilter/components/DateRangeOnlyButton.js +0 -1
- package/dist/cjs/components/SearchFilter/components/FilterChipListRenderer.d.ts +0 -6
- package/dist/cjs/components/SearchFilter/components/FilterChipListRenderer.js +0 -1
- package/dist/cjs/components/SearchFilter/components/SearchFilterItem.d.ts +0 -7
- package/dist/cjs/components/SearchFilter/components/SearchFilterItem.js +0 -1
- package/dist/cjs/components/SearchFilter/index.d.ts +0 -3
- package/dist/cjs/components/SearchFilter/index.js +0 -1
- package/dist/cjs/components/SearchFilter/types/SearchFilter.type.d.ts +0 -37
- package/dist/cjs/components/SearchFilter/types/SearchFilter.type.js +0 -1
- package/dist/cjs/components/WhatsAppTextEditor/AIRephrase.styled.d.ts +0 -10
- package/dist/cjs/components/WhatsAppTextEditor/AIRephrase.styled.js +0 -1
- package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.d.ts +0 -17
- package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.js +0 -1
- package/dist/cjs/components/WhatsAppTextEditor/BorderAnimation.d.ts +0 -11
- package/dist/cjs/components/WhatsAppTextEditor/BorderAnimation.js +0 -1
- package/dist/cjs/components/WhatsAppTextEditor/ai/actionRegistry.d.ts +0 -14
- package/dist/cjs/components/WhatsAppTextEditor/ai/actionRegistry.js +0 -1
- package/dist/cjs/components/WhatsAppTextEditor/ai/api.d.ts +0 -22
- package/dist/cjs/components/WhatsAppTextEditor/ai/api.js +0 -1
- package/dist/cjs/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.d.ts +0 -19
- package/dist/cjs/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.js +0 -1
- package/dist/cjs/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.styles.d.ts +0 -10
- package/dist/cjs/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.styles.js +0 -50
- package/dist/cjs/components/access-token-troubleshoot-dialog/index.d.ts +0 -1
- package/dist/cjs/components/accordion/Accordion.d.ts +0 -36
- package/dist/cjs/components/accordion/Accordion.js +0 -1
- package/dist/cjs/components/accordion/Accordion.style.d.ts +0 -17
- package/dist/cjs/components/accordion/Accordion.style.js +0 -50
- package/dist/cjs/components/accordion/AccordionArrow.d.ts +0 -7
- package/dist/cjs/components/accordion/AccordionArrow.js +0 -1
- package/dist/cjs/components/accordion/index.d.ts +0 -1
- package/dist/cjs/components/action-button/ActionButton.styled.d.ts +0 -7
- package/dist/cjs/components/action-button/ActionButton.styled.js +0 -23
- package/dist/cjs/components/action-button/ActionButtons.d.ts +0 -10
- package/dist/cjs/components/action-button/ActionButtons.js +0 -1
- package/dist/cjs/components/action-button/index.d.ts +0 -1
- package/dist/cjs/components/add-variableV2/AddVariableBox.styled.d.ts +0 -1
- package/dist/cjs/components/add-variableV2/AddVariableBox.styled.js +0 -25
- package/dist/cjs/components/add-variableV2/AddVariableV2.d.ts +0 -58
- package/dist/cjs/components/add-variableV2/AddVariableV2.js +0 -1
- package/dist/cjs/components/add-variableV2/AddVariableV2.styled.d.ts +0 -12
- package/dist/cjs/components/add-variableV2/AddVariableV2.styled.js +0 -164
- package/dist/cjs/components/add-variableV2/AddVariableV2SideModal.d.ts +0 -19
- package/dist/cjs/components/add-variableV2/AddVariableV2SideModal.js +0 -1
- package/dist/cjs/components/add-variableV2/index.d.ts +0 -2
- package/dist/cjs/components/add-variableV2/types.d.ts +0 -6
- package/dist/cjs/components/ai-modals/ActivateBikAI.d.ts +0 -9
- package/dist/cjs/components/ai-modals/ActivateBikAI.js +0 -1
- package/dist/cjs/components/ai-modals/AiCreditsExhausted.d.ts +0 -8
- package/dist/cjs/components/ai-modals/AiCreditsExhausted.js +0 -1
- package/dist/cjs/components/ai-modals/AiCreditsLow.d.ts +0 -7
- package/dist/cjs/components/ai-modals/AiCreditsLow.js +0 -1
- package/dist/cjs/components/ai-modals/AiSyncProgress.d.ts +0 -8
- package/dist/cjs/components/ai-modals/AiSyncProgress.js +0 -1
- package/dist/cjs/components/ai-modals/index.d.ts +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChipChannelFooter.d.ts +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsChipChannelFooter.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsMetric.d.ts +0 -18
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsMetric.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsTrend.d.ts +0 -36
- package/dist/cjs/components/analytics-chips-and-dropdowns/AnalyticsTrend.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.styles.d.ts +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.styles.js +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Legend/Legend.d.ts +0 -6
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Legend/Legend.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.d.ts +0 -59
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.styled.d.ts +0 -19
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.styled.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Pie/PieChart.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Pie/PieChart.js +0 -28
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Pie/PieChartAnalytics.d.ts +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Pie/PieChartAnalytics.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/Pie/PieChartInputData.d.ts +0 -21
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.d.ts +0 -2
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.d.ts +0 -92
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.styles.d.ts +0 -7
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.styles.js +0 -35
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.d.ts +0 -2
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.model.d.ts +0 -48
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.model.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.styles.d.ts +0 -7
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.styles.js +0 -25
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraphModel.d.ts +0 -34
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraphModel.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/FunnelVerticalBarGraph.d.ts +0 -14
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/FunnelVerticalBarGraph.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.styles.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.styles.js +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMap.d.ts +0 -36
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMap.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapStyled.d.ts +0 -40
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapStyled.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapVertical.d.ts +0 -14
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapVertical.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.d.ts +0 -27
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.styled.d.ts +0 -25
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.styled.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/index.d.ts +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/Chip.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/Chip.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/HorizontalBar.d.ts +0 -3
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/HorizontalBar.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.d.ts +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.styled.d.ts +0 -25
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.styled.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/index.d.ts +0 -4
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/types.d.ts +0 -57
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/scoreBlock/types.js +0 -1
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/utils/calcPercentage.d.ts +0 -20
- package/dist/cjs/components/analytics-chips-and-dropdowns/chart/utils/calcPercentage.js +0 -1
- package/dist/cjs/components/banner/AdBanner.d.ts +0 -4
- package/dist/cjs/components/banner/AdBanner.js +0 -1
- package/dist/cjs/components/banner/Banner.stories.d.ts +0 -9
- package/dist/cjs/components/banner/Banner.styled.d.ts +0 -87
- package/dist/cjs/components/banner/Banner.styled.js +0 -1
- package/dist/cjs/components/banner/BannerInline.d.ts +0 -6
- package/dist/cjs/components/banner/BannerInline.js +0 -1
- package/dist/cjs/components/banner/BannerWithImage.d.ts +0 -6
- package/dist/cjs/components/banner/BannerWithImage.js +0 -1
- package/dist/cjs/components/banner/CardBanner.d.ts +0 -6
- package/dist/cjs/components/banner/CardBanner.js +0 -1
- package/dist/cjs/components/banner/CardBannerWithImage.d.ts +0 -6
- package/dist/cjs/components/banner/CardBannerWithImage.js +0 -1
- package/dist/cjs/components/banner/index.d.ts +0 -2
- package/dist/cjs/components/banner/model.d.ts +0 -77
- package/dist/cjs/components/banner/model.js +0 -1
- package/dist/cjs/components/bik-chatbot/components/AIChat.d.ts +0 -5
- package/dist/cjs/components/bik-chatbot/components/AIChat.js +0 -1
- package/dist/cjs/components/bik-chatbot/components/BIKChatbot.d.ts +0 -40
- package/dist/cjs/components/bik-chatbot/components/BIKChatbot.js +0 -1
- package/dist/cjs/components/bik-chatbot/components/ChatLoadingState.d.ts +0 -7
- package/dist/cjs/components/bik-chatbot/components/ChatLoadingState.js +0 -177
- package/dist/cjs/components/bik-chatbot/components/ChatWindow.d.ts +0 -12
- package/dist/cjs/components/bik-chatbot/components/ChatWindow.js +0 -254
- package/dist/cjs/components/bik-chatbot/components/ThinkingIndicator.d.ts +0 -3
- package/dist/cjs/components/bik-chatbot/components/ThinkingIndicator.js +0 -147
- package/dist/cjs/components/bik-chatbot/contexts/AIContext.d.ts +0 -4
- package/dist/cjs/components/bik-chatbot/contexts/AIContext.js +0 -1
- package/dist/cjs/components/bik-chatbot/index.d.ts +0 -137
- package/dist/cjs/components/bik-chatbot/services/aiService.d.ts +0 -32
- package/dist/cjs/components/bik-chatbot/services/aiService.js +0 -1
- package/dist/cjs/components/bik-chatbot/services/callToChatbot.d.ts +0 -6
- package/dist/cjs/components/bik-chatbot/services/callToChatbot.js +0 -1
- package/dist/cjs/components/bik-chatbot/services/db.d.ts +0 -6
- package/dist/cjs/components/bik-chatbot/services/db.js +0 -1
- package/dist/cjs/components/bik-chatbot/services/useAIChat.d.ts +0 -7
- package/dist/cjs/components/bik-chatbot/services/useAIChat.js +0 -1
- package/dist/cjs/components/bik-chatbot/types/ai.d.ts +0 -163
- package/dist/cjs/components/bik-chatbot/types/ai.js +0 -1
- package/dist/cjs/components/bik-chatbot/types/chat.d.ts +0 -34
- package/dist/cjs/components/bik-chatbot/types/chat.js +0 -1
- package/dist/cjs/components/bik-chatbot/types/components.d.ts +0 -136
- package/dist/cjs/components/bik-chatbot/types/index.d.ts +0 -6
- package/dist/cjs/components/bik-chatbot/utils/guardrails.d.ts +0 -6
- package/dist/cjs/components/bik-chatbot/utils/guardrails.js +0 -1
- package/dist/cjs/components/bik-chatbot/utils/markdown.d.ts +0 -1
- package/dist/cjs/components/bik-chatbot/utils/markdown.js +0 -1
- package/dist/cjs/components/bik-chatbot-examples/AnalyticsAdvisor.d.ts +0 -8
- package/dist/cjs/components/bik-chatbot-examples/ContentIdeasDemo.d.ts +0 -12
- package/dist/cjs/components/bik-chatbot-examples/SilentModeDemo.d.ts +0 -17
- package/dist/cjs/components/bik-chatbot-examples/SimpleChatbotDemo.d.ts +0 -17
- package/dist/cjs/components/bik-chatbot-examples/SimpleJsonChatDemo.d.ts +0 -16
- package/dist/cjs/components/bik-chatbot-examples/services/MockRequestExecutor.d.ts +0 -17
- package/dist/cjs/components/bik-chatbot-examples/types.ts/examples.d.ts +0 -61
- package/dist/cjs/components/bik-layout/BikHeader.d.ts +0 -16
- package/dist/cjs/components/bik-layout/BikHeader.js +0 -1
- package/dist/cjs/components/bik-layout/BikLayout.d.ts +0 -25
- package/dist/cjs/components/bik-layout/BikLayout.js +0 -1
- package/dist/cjs/components/bik-layout/BikProfile.d.ts +0 -12
- package/dist/cjs/components/bik-layout/BikProfile.js +0 -1
- package/dist/cjs/components/bik-layout/BikSidebar.d.ts +0 -33
- package/dist/cjs/components/bik-layout/BikSidebar.js +0 -1
- package/dist/cjs/components/bik-layout/CommonStyles.d.ts +0 -110
- package/dist/cjs/components/bik-layout/CommonStyles.js +0 -1
- package/dist/cjs/components/bik-layout/FeatureModal.d.ts +0 -14
- package/dist/cjs/components/bik-layout/FeatureModal.js +0 -1
- package/dist/cjs/components/bik-layout/FeatureModalV2.d.ts +0 -13
- package/dist/cjs/components/bik-layout/FeatureModalV2.js +0 -1
- package/dist/cjs/components/bik-layout/MockMenus.d.ts +0 -93
- package/dist/cjs/components/bik-layout/PageLoader.d.ts +0 -6
- package/dist/cjs/components/bik-layout/PageLoader.js +0 -1
- package/dist/cjs/components/bik-layout/ShowShopifyRestrictedModal.d.ts +0 -13
- package/dist/cjs/components/bik-layout/ShowShopifyRestrictedModal.js +0 -1
- package/dist/cjs/components/bik-layout/SidebarPopup.d.ts +0 -12
- package/dist/cjs/components/bik-layout/SidebarPopup.js +0 -1
- package/dist/cjs/components/bik-layout/SidebarSkeleton.d.ts +0 -9
- package/dist/cjs/components/bik-layout/SidebarSkeleton.js +0 -1
- package/dist/cjs/components/bik-layout/SidebarStyles.d.ts +0 -21
- package/dist/cjs/components/bik-layout/SidebarStyles.js +0 -270
- package/dist/cjs/components/bik-layout/SimpleSidebar.d.ts +0 -29
- package/dist/cjs/components/bik-layout/SimpleSidebar.js +0 -1
- package/dist/cjs/components/bik-layout/index.d.ts +0 -9
- package/dist/cjs/components/buttonGroup/ButtonGroup.d.ts +0 -22
- package/dist/cjs/components/buttonGroup/ButtonGroup.js +0 -1
- package/dist/cjs/components/buttonGroup/ButtonGroupStyle.d.ts +0 -14
- package/dist/cjs/components/buttonGroup/ButtonGroupStyle.js +0 -34
- package/dist/cjs/components/buttonGroup/index.d.ts +0 -1
- package/dist/cjs/components/card-selector/CardSelector.d.ts +0 -17
- package/dist/cjs/components/card-selector/CardSelector.js +0 -1
- package/dist/cjs/components/card-selector/CardSelector.styled.d.ts +0 -7
- package/dist/cjs/components/card-selector/CardSelector.styled.js +0 -19
- package/dist/cjs/components/card-selector/CardSelectorGroup.d.ts +0 -10
- package/dist/cjs/components/card-selector/CardSelectorGroup.js +0 -1
- package/dist/cjs/components/card-selector/index.d.ts +0 -3
- package/dist/cjs/components/carousel/carousel.d.ts +0 -2
- package/dist/cjs/components/carousel/carousel.js +0 -22
- package/dist/cjs/components/carousel/index.d.ts +0 -1
- package/dist/cjs/components/carousel-preview/CarouselPreview.d.ts +0 -15
- package/dist/cjs/components/carousel-preview/CarouselPreview.js +0 -1
- package/dist/cjs/components/carousel-preview/CarouselPreview.style.d.ts +0 -10
- package/dist/cjs/components/carousel-preview/CarouselPreview.style.js +0 -86
- package/dist/cjs/components/carousel-preview/CarouselPreviewCard.d.ts +0 -11
- package/dist/cjs/components/carousel-preview/CarouselPreviewCard.js +0 -1
- package/dist/cjs/components/carousel-preview/CustomCarouselArrows.d.ts +0 -7
- package/dist/cjs/components/carousel-preview/CustomCarouselArrows.js +0 -1
- package/dist/cjs/components/carousel-preview/index.d.ts +0 -1
- package/dist/cjs/components/carousel-secondary/CarouselSecondary.d.ts +0 -11
- package/dist/cjs/components/carousel-secondary/CarouselSecondary.js +0 -1
- package/dist/cjs/components/carousel-secondary/CarouselSecondary.style.d.ts +0 -37
- package/dist/cjs/components/carousel-secondary/CarouselSecondary.style.js +0 -1
- package/dist/cjs/components/carousel-secondary/index.d.ts +0 -1
- package/dist/cjs/components/carousel-secondary/model.d.ts +0 -4
- package/dist/cjs/components/carousel-secondary/model.js +0 -1
- package/dist/cjs/components/checkList/CheckList.d.ts +0 -14
- package/dist/cjs/components/checkList/CheckList.js +0 -1
- package/dist/cjs/components/checkList/CheckList.styled.d.ts +0 -5
- package/dist/cjs/components/checkList/CheckList.styled.js +0 -1
- package/dist/cjs/components/checkList/index.d.ts +0 -1
- package/dist/cjs/components/code-block/CodeBlock.d.ts +0 -2
- package/dist/cjs/components/code-block/CodeBlock.js +0 -1
- package/dist/cjs/components/code-block/CodeBlock.styled.d.ts +0 -31
- package/dist/cjs/components/code-block/CodeBlock.styled.js +0 -111
- package/dist/cjs/components/code-block/CodeBlockHelper.d.ts +0 -3
- package/dist/cjs/components/code-block/CodeBlockHelper.js +0 -1
- package/dist/cjs/components/code-block/index.d.ts +0 -2
- package/dist/cjs/components/code-block/keywordMap.d.ts +0 -1
- package/dist/cjs/components/code-block/keywordMap.js +0 -1
- package/dist/cjs/components/code-block/languageSpecificFormatting/html_file.d.ts +0 -1
- package/dist/cjs/components/code-block/languageSpecificFormatting/javascript_file.d.ts +0 -3
- package/dist/cjs/components/code-block/languageSpecificFormatting/javascript_file.js +0 -1
- package/dist/cjs/components/code-block/types.d.ts +0 -20
- package/dist/cjs/components/code-block/types.js +0 -1
- package/dist/cjs/components/colourInput/ColourInput.d.ts +0 -8
- package/dist/cjs/components/colourInput/ColourInput.js +0 -1
- package/dist/cjs/components/colourInput/ColourInput.styled.d.ts +0 -9
- package/dist/cjs/components/colourInput/ColourInput.styled.js +0 -1
- package/dist/cjs/components/colourInput/index.d.ts +0 -1
- package/dist/cjs/components/country-code-picker/CountryCodePicker.d.ts +0 -19
- package/dist/cjs/components/country-code-picker/CountryCodePicker.js +0 -1
- package/dist/cjs/components/country-code-picker/CountryCodePicker.modal.d.ts +0 -7
- package/dist/cjs/components/country-code-picker/CountryCodePicker.modal.js +0 -1
- package/dist/cjs/components/country-code-picker/CountryCodePicker.styled.d.ts +0 -11
- package/dist/cjs/components/country-code-picker/CountryCodePicker.styled.js +0 -1
- package/dist/cjs/components/country-code-picker/CountryPicker.d.ts +0 -72
- package/dist/cjs/components/country-code-picker/CountryPicker.js +0 -1
- package/dist/cjs/components/country-code-picker/CountryPicker.styled.d.ts +0 -12
- package/dist/cjs/components/country-code-picker/CountryPicker.styled.js +0 -1
- package/dist/cjs/components/country-code-picker/index.d.ts +0 -3
- package/dist/cjs/components/custom-date-time/CustomDateTime.d.ts +0 -12
- package/dist/cjs/components/custom-date-time/CustomDateTime.js +0 -1
- package/dist/cjs/components/custom-date-time/CustomDateTime.styled.d.ts +0 -5
- package/dist/cjs/components/custom-date-time/CustomDateTime.styled.js +0 -1
- package/dist/cjs/components/custom-date-time/DateSelector/DateSelector.d.ts +0 -9
- package/dist/cjs/components/custom-date-time/DateSelector/DateSelector.js +0 -1
- package/dist/cjs/components/custom-date-time/index.d.ts +0 -1
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.d.ts +0 -18
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.styled.d.ts +0 -9
- package/dist/cjs/components/dashboard-review-popup/DashboardReviewPopUp.styled.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/components/FiveStar.d.ts +0 -7
- package/dist/cjs/components/dashboard-review-popup/components/FiveStar.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/components/FiveStar.styled.d.ts +0 -9
- package/dist/cjs/components/dashboard-review-popup/components/FiveStar.styled.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/components/Form.d.ts +0 -13
- package/dist/cjs/components/dashboard-review-popup/components/Form.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/components/Form.styled.d.ts +0 -27
- package/dist/cjs/components/dashboard-review-popup/components/Form.styled.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/components/ZeroState.d.ts +0 -5
- package/dist/cjs/components/dashboard-review-popup/components/ZeroState.js +0 -1
- package/dist/cjs/components/dashboard-review-popup/index.d.ts +0 -1
- package/dist/cjs/components/data-source-panel/DataSourceInfoFooter.d.ts +0 -25
- package/dist/cjs/components/data-source-panel/DataSourceInfoFooter.js +0 -1
- package/dist/cjs/components/data-source-panel/DataSourcePanel.d.ts +0 -45
- package/dist/cjs/components/data-source-panel/DataSourcePanel.js +0 -1
- package/dist/cjs/components/data-source-panel/DataSourcePanel.style.d.ts +0 -4
- package/dist/cjs/components/data-source-panel/DataSourcePanel.style.js +0 -171
- package/dist/cjs/components/data-source-panel/IntentConfig.d.ts +0 -5
- package/dist/cjs/components/data-source-panel/IntentConfig.js +0 -1
- package/dist/cjs/components/data-source-panel/Modals/DescriptionModal.d.ts +0 -8
- package/dist/cjs/components/data-source-panel/Modals/DescriptionModal.js +0 -48
- package/dist/cjs/components/data-source-panel/index.d.ts +0 -1
- package/dist/cjs/components/data-source-panel/model.d.ts +0 -142
- package/dist/cjs/components/data-source-panel/model.js +0 -1
- package/dist/cjs/components/datePicker/TimePicker.d.ts +0 -9
- package/dist/cjs/components/datePicker/TimePicker.js +0 -1
- package/dist/cjs/components/datePicker/model.d.ts +0 -4
- package/dist/cjs/components/datePicker/model.js +0 -1
- package/dist/cjs/components/discount-modal/CouponExpiration/CouponExpiration.d.ts +0 -13
- package/dist/cjs/components/discount-modal/CouponExpiration/CouponExpiration.js +0 -1
- package/dist/cjs/components/discount-modal/DiscountModal.d.ts +0 -40
- package/dist/cjs/components/discount-modal/DiscountModal.js +0 -1
- package/dist/cjs/components/discount-modal/DiscountModal.styled.d.ts +0 -23
- package/dist/cjs/components/discount-modal/DiscountModal.styled.js +0 -1
- package/dist/cjs/components/discount-modal/DiscountUtils.d.ts +0 -4
- package/dist/cjs/components/discount-modal/DiscountUtils.js +0 -1
- package/dist/cjs/components/discount-modal/DynamicCoupon/DynamicCoupon.d.ts +0 -72
- package/dist/cjs/components/discount-modal/DynamicCoupon/DynamicCoupon.js +0 -1
- package/dist/cjs/components/discount-modal/DynamicCoupon/DynamicCoupon.styled.d.ts +0 -10
- package/dist/cjs/components/discount-modal/DynamicCoupon/DynamicCoupon.styled.js +0 -76
- package/dist/cjs/components/discount-modal/DynamicCoupon/MinimumRequirementComponent.d.ts +0 -15
- package/dist/cjs/components/discount-modal/DynamicCoupon/MinimumRequirementComponent.js +0 -1
- package/dist/cjs/components/discount-modal/DynamicCoupon/ZeroState.d.ts +0 -2
- package/dist/cjs/components/discount-modal/DynamicCoupon/ZeroState.js +0 -16
- package/dist/cjs/components/discount-modal/StaticCoupon/StaticCoupon.d.ts +0 -62
- package/dist/cjs/components/discount-modal/StaticCoupon/StaticCoupon.js +0 -1
- package/dist/cjs/components/discount-modal/index.d.ts +0 -3
- package/dist/cjs/components/discount-modal/type.d.ts +0 -107
- package/dist/cjs/components/discount-modal/type.js +0 -1
- package/dist/cjs/components/dot-pulse/DotPulse.d.ts +0 -7
- package/dist/cjs/components/dot-pulse/DotPulse.js +0 -35
- package/dist/cjs/components/dot-pulse/index.d.ts +0 -1
- package/dist/cjs/components/dropShadow/index.d.ts +0 -1
- package/dist/cjs/components/dropdown/ChipDropdown.d.ts +0 -8
- package/dist/cjs/components/dropdown/ChipDropdown.js +0 -15
- package/dist/cjs/components/dropdown/ChipInput.d.ts +0 -14
- package/dist/cjs/components/dropdown/ChipInput.js +0 -1
- package/dist/cjs/components/dropdown/MenuItem/MenuItem.d.ts +0 -9
- package/dist/cjs/components/dropdown/MenuItem/MenuItem.js +0 -20
- package/dist/cjs/components/dropdown/MultilevelDropdownPopover/index.d.ts +0 -15
- package/dist/cjs/components/dropdown/MultilevelDropdownPopover/index.js +0 -1
- package/dist/cjs/components/dropdown/hooks/useDropdown.d.ts +0 -52
- package/dist/cjs/components/dropdown/hooks/useDropdown.js +0 -1
- package/dist/cjs/components/dropdown-button/DropdownButton.d.ts +0 -9
- package/dist/cjs/components/dropdown-button/DropdownButton.js +0 -1
- package/dist/cjs/components/dropdown-button/DropdownButton.style.d.ts +0 -6
- package/dist/cjs/components/dropdown-button/DropdownButton.style.js +0 -22
- package/dist/cjs/components/dropdown-button/index.d.ts +0 -1
- package/dist/cjs/components/dynamic-tabs/DynamicTabs.d.ts +0 -24
- package/dist/cjs/components/dynamic-tabs/DynamicTabs.js +0 -1
- package/dist/cjs/components/dynamic-tabs/index.d.ts +0 -1
- package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.d.ts +0 -4
- package/dist/cjs/components/feature-announcements/FeatureAnnouncementProvider.js +0 -1
- package/dist/cjs/components/feature-announcements/MajorUpdatePopup.d.ts +0 -4
- package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js +0 -1
- package/dist/cjs/components/feature-announcements/MinorUpdatePopup.d.ts +0 -4
- package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js +0 -1
- package/dist/cjs/components/feature-announcements/VideoModal.d.ts +0 -3
- package/dist/cjs/components/feature-announcements/VideoModal.js +0 -1
- package/dist/cjs/components/feature-announcements/constants/animations.d.ts +0 -27
- package/dist/cjs/components/feature-announcements/constants/animations.js +0 -1
- package/dist/cjs/components/feature-announcements/constants/dimensions.d.ts +0 -130
- package/dist/cjs/components/feature-announcements/constants/dimensions.js +0 -1
- package/dist/cjs/components/feature-announcements/constants/index.d.ts +0 -19
- package/dist/cjs/components/feature-announcements/constants/index.js +0 -1
- package/dist/cjs/components/feature-announcements/constants/localStorageKeys.d.ts +0 -18
- package/dist/cjs/components/feature-announcements/constants/localStorageKeys.js +0 -1
- package/dist/cjs/components/feature-announcements/constants/selectors.d.ts +0 -21
- package/dist/cjs/components/feature-announcements/constants/selectors.js +0 -1
- package/dist/cjs/components/feature-announcements/constants/zIndex.d.ts +0 -10
- package/dist/cjs/components/feature-announcements/constants/zIndex.js +0 -1
- package/dist/cjs/components/feature-announcements/hooks/index.d.ts +0 -1
- package/dist/cjs/components/feature-announcements/hooks/useFeatureAnnouncements.d.ts +0 -13
- package/dist/cjs/components/feature-announcements/hooks/useFeatureAnnouncements.js +0 -1
- package/dist/cjs/components/feature-announcements/index.d.ts +0 -7
- package/dist/cjs/components/feature-announcements/styles/index.d.ts +0 -4
- package/dist/cjs/components/feature-announcements/styles/joyride.styles.d.ts +0 -125
- package/dist/cjs/components/feature-announcements/styles/majorPopup.styles.d.ts +0 -36
- package/dist/cjs/components/feature-announcements/styles/majorPopup.styles.js +0 -1
- package/dist/cjs/components/feature-announcements/styles/minorPopup.styles.d.ts +0 -14
- package/dist/cjs/components/feature-announcements/styles/minorPopup.styles.js +0 -1
- package/dist/cjs/components/feature-announcements/styles/videoModal.styles.d.ts +0 -13
- package/dist/cjs/components/feature-announcements/styles/videoModal.styles.js +0 -1
- package/dist/cjs/components/feature-announcements/types/feature.types.d.ts +0 -89
- package/dist/cjs/components/feature-announcements/types/index.d.ts +0 -4
- package/dist/cjs/components/feature-announcements/types/props.types.d.ts +0 -65
- package/dist/cjs/components/feature-announcements/types/repository.types.d.ts +0 -11
- package/dist/cjs/components/feature-announcements/types/router.types.d.ts +0 -7
- package/dist/cjs/components/feature-announcements/useFeatureAnnouncements.d.ts +0 -13
- package/dist/cjs/components/feature-announcements/utils/animationHelpers.d.ts +0 -18
- package/dist/cjs/components/feature-announcements/utils/animationHelpers.js +0 -1
- package/dist/cjs/components/feature-announcements/utils/elementHelpers.d.ts +0 -30
- package/dist/cjs/components/feature-announcements/utils/elementHelpers.js +0 -1
- package/dist/cjs/components/feature-announcements/utils/htmlHelpers.d.ts +0 -18
- package/dist/cjs/components/feature-announcements/utils/htmlHelpers.js +0 -1
- package/dist/cjs/components/feature-announcements/utils/index.d.ts +0 -3
- package/dist/cjs/components/file-uploader/FileUploader.d.ts +0 -3
- package/dist/cjs/components/file-uploader/FileUploader.js +0 -1
- package/dist/cjs/components/file-uploader/FileUploaderStyle.d.ts +0 -7
- package/dist/cjs/components/file-uploader/FileUploaderStyle.js +0 -166
- package/dist/cjs/components/file-uploader/Models.d.ts +0 -34
- package/dist/cjs/components/file-uploader/index.d.ts +0 -1
- package/dist/cjs/components/file-uploader/useMockUrlUpload.d.ts +0 -8
- package/dist/cjs/components/floater/floater.d.ts +0 -9
- package/dist/cjs/components/floater/floater.js +0 -1
- package/dist/cjs/components/floater/index.d.ts +0 -1
- package/dist/cjs/components/floating-input-dropdown/FloatingInputDropdown.d.ts +0 -26
- package/dist/cjs/components/floating-input-dropdown/FloatingInputDropdown.js +0 -5
- package/dist/cjs/components/floating-input-dropdown/index.d.ts +0 -1
- package/dist/cjs/components/image-cropper/BikImageCropper.js +0 -1
- package/dist/cjs/components/image-cropper/BikImagePipeline/BikImagePipeline.d.ts +0 -33
- package/dist/cjs/components/image-cropper/BikImagePipeline/BikImagePipeline.js +0 -1
- package/dist/cjs/components/image-cropper/useMockFileUpload.d.ts +0 -8
- package/dist/cjs/components/input/Input-helper.d.ts +0 -6
- package/dist/cjs/components/input/Input-helper.js +0 -1
- package/dist/cjs/components/input-with-vars/InputWithVariables.d.ts +0 -31
- package/dist/cjs/components/input-with-vars/InputWithVariables.js +0 -7
- package/dist/cjs/components/input-with-vars/customPortal.d.ts +0 -8
- package/dist/cjs/components/input-with-vars/customPortal.js +0 -1
- package/dist/cjs/components/input-with-vars/index.d.ts +0 -1
- package/dist/cjs/components/keywords-input/KeywordsInput.d.ts +0 -11
- package/dist/cjs/components/keywords-input/KeywordsInput.js +0 -1
- package/dist/cjs/components/keywords-input/KeywordsInput.styled.d.ts +0 -5
- package/dist/cjs/components/keywords-input/index.d.ts +0 -1
- package/dist/cjs/components/markdown/MarkdownRender.d.ts +0 -4
- package/dist/cjs/components/markdown/MarkdownRender.js +0 -1
- package/dist/cjs/components/markdown/index.d.ts +0 -2
- package/dist/cjs/components/markdown/utils.d.ts +0 -25
- package/dist/cjs/components/markdown/utils.js +0 -1
- package/dist/cjs/components/multi-level-dropdown/GroupedMenuList.d.ts +0 -8
- package/dist/cjs/components/multi-level-dropdown/GroupedMenuList.js +0 -1
- package/dist/cjs/components/multi-level-dropdown/MenuItem.d.ts +0 -8
- package/dist/cjs/components/multi-level-dropdown/MenuItem.js +0 -1
- package/dist/cjs/components/multi-level-dropdown/MenuList.d.ts +0 -8
- package/dist/cjs/components/multi-level-dropdown/MenuList.js +0 -1
- package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.d.ts +0 -3
- package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.js +0 -1
- package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.styled.d.ts +0 -32
- package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.styled.js +0 -98
- package/dist/cjs/components/multi-level-dropdown/index.d.ts +0 -1
- package/dist/cjs/components/multi-level-dropdown/type.d.ts +0 -28
- package/dist/cjs/components/navigation-hyperlink/NavigationHyperlink.d.ts +0 -9
- package/dist/cjs/components/navigation-hyperlink/NavigationHyperlink.js +0 -3
- package/dist/cjs/components/navigation-hyperlink/index.d.ts +0 -1
- package/dist/cjs/components/plans/NewSubscriptionPlan.d.ts +0 -19
- package/dist/cjs/components/plans/NewSubscriptionPlan.js +0 -1
- package/dist/cjs/components/plans/SubscriptionPlansCollected.d.ts +0 -16
- package/dist/cjs/components/plans/SubscriptionPlansCollected.js +0 -19
- package/dist/cjs/components/post-live-checklist/PostLiveChecklist.d.ts +0 -18
- package/dist/cjs/components/post-live-checklist/PostLiveChecklist.js +0 -1
- package/dist/cjs/components/post-live-checklist/PostLiveChecklist.stories.d.ts +0 -12
- package/dist/cjs/components/post-live-checklist/index.d.ts +0 -2
- package/dist/cjs/components/post-live-checklist-item/PostLiveChecklistItem.d.ts +0 -10
- package/dist/cjs/components/post-live-checklist-item/PostLiveChecklistItem.js +0 -1
- package/dist/cjs/components/post-live-checklist-item/index.d.ts +0 -1
- package/dist/cjs/components/product-picker/ProductPicker.styled.d.ts +0 -9
- package/dist/cjs/components/product-picker/ProductPicker.styled.js +0 -1
- package/dist/cjs/components/product-picker/ProductPickerModal.d.ts +0 -4
- package/dist/cjs/components/product-picker/ProductPickerModal.js +0 -1
- package/dist/cjs/components/product-picker/index.d.ts +0 -1
- package/dist/cjs/components/product-picker/type.d.ts +0 -67
- package/dist/cjs/components/product-picker-v2/ProductPickerShimmer.d.ts +0 -3
- package/dist/cjs/components/product-picker-v2/ProductPickerShimmer.js +0 -1
- package/dist/cjs/components/product-picker-v2/ProductPickerTag.d.ts +0 -22
- package/dist/cjs/components/product-picker-v2/ProductPickerTag.js +0 -1
- package/dist/cjs/components/product-picker-v2/collectionScreen.d.ts +0 -52
- package/dist/cjs/components/product-picker-v2/collectionScreen.js +0 -1
- package/dist/cjs/components/product-picker-v2/constants.d.ts +0 -27
- package/dist/cjs/components/product-picker-v2/constants.js +0 -1
- package/dist/cjs/components/product-picker-v2/emptyState.d.ts +0 -6
- package/dist/cjs/components/product-picker-v2/emptyState.js +0 -8
- package/dist/cjs/components/product-picker-v2/helpers/ProductHelper.d.ts +0 -56
- package/dist/cjs/components/product-picker-v2/helpers/ProductHelper.js +0 -1
- package/dist/cjs/components/product-picker-v2/index.d.ts +0 -2
- package/dist/cjs/components/product-picker-v2/modal.d.ts +0 -110
- package/dist/cjs/components/product-picker-v2/modal.js +0 -1
- package/dist/cjs/components/product-picker-v2/product.d.ts +0 -44
- package/dist/cjs/components/product-picker-v2/product.js +0 -1
- package/dist/cjs/components/product-picker-v2/productInfoOverlay.d.ts +0 -19
- package/dist/cjs/components/product-picker-v2/productInfoOverlay.js +0 -52
- package/dist/cjs/components/product-picker-v2/productScreen.d.ts +0 -32
- package/dist/cjs/components/product-picker-v2/productScreen.js +0 -1
- package/dist/cjs/components/product-picker-v2/rearrangeScreen.d.ts +0 -23
- package/dist/cjs/components/product-picker-v2/rearrangeScreen.js +0 -1
- package/dist/cjs/components/product-picker-v2/reducers.d.ts +0 -41
- package/dist/cjs/components/product-picker-v2/reducers.js +0 -1
- package/dist/cjs/components/product-picker-v2/searchScreen.d.ts +0 -33
- package/dist/cjs/components/product-picker-v2/searchScreen.js +0 -1
- package/dist/cjs/components/product-picker-v2/selectedScreen.d.ts +0 -20
- package/dist/cjs/components/product-picker-v2/selectedScreen.js +0 -1
- package/dist/cjs/components/product-picker-v2/style.d.ts +0 -36
- package/dist/cjs/components/product-picker-v2/style.js +0 -172
- package/dist/cjs/components/product-picker-v2/type.d.ts +0 -19
- package/dist/cjs/components/product-picker-v2/type.js +0 -1
- package/dist/cjs/components/product-picker-v2/utility.d.ts +0 -52
- package/dist/cjs/components/product-picker-v2/utility.js +0 -1
- package/dist/cjs/components/product-picker-v2/variant.d.ts +0 -32
- package/dist/cjs/components/product-picker-v2/variant.js +0 -1
- package/dist/cjs/components/product-picker-v2/variantComponents.d.ts +0 -21
- package/dist/cjs/components/product-picker-v2/variantComponents.js +0 -1
- package/dist/cjs/components/progress-bar/CircularProgressBar.d.ts +0 -7
- package/dist/cjs/components/progress-bar/CircularProgressBar.js +0 -1
- package/dist/cjs/components/progress-bar-v2/ProgressBarV2.d.ts +0 -22
- package/dist/cjs/components/progress-bar-v2/ProgressBarV2.js +0 -1
- package/dist/cjs/components/progress-bar-v2/index.d.ts +0 -1
- package/dist/cjs/components/radioList/RadioList.d.ts +0 -15
- package/dist/cjs/components/radioList/RadioList.js +0 -1
- package/dist/cjs/components/radioList/RadioList.styled.d.ts +0 -5
- package/dist/cjs/components/radioList/RadioList.styled.js +0 -1
- package/dist/cjs/components/radioList/index.d.ts +0 -1
- package/dist/cjs/components/resizeImage/index.d.ts +0 -8
- package/dist/cjs/components/resizeImage/index.js +0 -1
- package/dist/cjs/components/searchBar/searchBar.js +0 -1
- package/dist/cjs/components/shimmer-image/ShimmerImage.d.ts +0 -13
- package/dist/cjs/components/shimmer-image/ShimmerImage.js +0 -1
- package/dist/cjs/components/shimmer-image/ShimmerImage.stories.d.ts +0 -6
- package/dist/cjs/components/shimmer-image/index.d.ts +0 -1
- package/dist/cjs/components/side-modal/SideModal.d.ts +0 -22
- package/dist/cjs/components/side-modal/SideModal.js +0 -1
- package/dist/cjs/components/side-modal/SideModal.style.d.ts +0 -20
- package/dist/cjs/components/side-modal/SideModal.style.js +0 -65
- package/dist/cjs/components/side-modal/index.d.ts +0 -1
- package/dist/cjs/components/slider/index.d.ts +0 -1
- package/dist/cjs/components/slider/slider.d.ts +0 -10
- package/dist/cjs/components/slider/slider.js +0 -1
- package/dist/cjs/components/star-rating/Star.d.ts +0 -13
- package/dist/cjs/components/star-rating/Star.js +0 -1
- package/dist/cjs/components/star-rating/StarRating.d.ts +0 -11
- package/dist/cjs/components/star-rating/StarRating.js +0 -1
- package/dist/cjs/components/star-rating/index.d.ts +0 -1
- package/dist/cjs/components/states/ShopifyScopeWrapper.d.ts +0 -14
- package/dist/cjs/components/states/ShopifyScopeWrapper.js +0 -1
- package/dist/cjs/components/tabs/Tabs.model.d.ts +0 -63
- package/dist/cjs/components/tag/Tag.stories.d.ts +0 -22
- package/dist/cjs/components/template-context-mapper/Mocks/constants.d.ts +0 -4364
- package/dist/cjs/components/template-context-mapper/custom-hooks/useAdditionalVariables.d.ts +0 -12
- package/dist/cjs/components/template-context-mapper/custom-hooks/useAdditionalVariables.js +0 -1
- package/dist/cjs/components/template-context-mapper/helpers/WebpushTemplateHelper.d.ts +0 -57
- package/dist/cjs/components/template-context-mapper/helpers/WebpushTemplateHelper.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/BackTrackComponent.d.ts +0 -4
- package/dist/cjs/components/template-context-mapper/modalElements/BackTrackComponent.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/DiscountCodeComponent.d.ts +0 -4
- package/dist/cjs/components/template-context-mapper/modalElements/DiscountCodeComponent.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/EditMediaModal.d.ts +0 -17
- package/dist/cjs/components/template-context-mapper/modalElements/EditMediaModal.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/EditWebpushTemplate.d.ts +0 -10
- package/dist/cjs/components/template-context-mapper/modalElements/EditWebpushTemplate.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/EditWhatsAppCarouselTemplateV2.d.ts +0 -24
- package/dist/cjs/components/template-context-mapper/modalElements/EditWhatsAppCarouselTemplateV2.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/ProductBox.d.ts +0 -8
- package/dist/cjs/components/template-context-mapper/modalElements/ProductBox.js +0 -47
- package/dist/cjs/components/template-context-mapper/modalElements/QualityWarningModal.d.ts +0 -12
- package/dist/cjs/components/template-context-mapper/modalElements/QueryParamsComponent.d.ts +0 -12
- package/dist/cjs/components/template-context-mapper/modalElements/QueryParamsComponent.js +0 -11
- package/dist/cjs/components/template-context-mapper/modalElements/TemplateAnalyticsComponent.d.ts +0 -16
- package/dist/cjs/components/template-context-mapper/modalElements/TemplateAnalyticsComponent.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/TemplateAnalyticsSkeleton.d.ts +0 -4
- package/dist/cjs/components/template-context-mapper/modalElements/TemplateAnalyticsSkeleton.js +0 -1
- package/dist/cjs/components/template-context-mapper/modalElements/useEditWhtasappTemplateMedia.d.ts +0 -32
- package/dist/cjs/components/template-context-mapper/modalElements/useEditWhtasappTemplateMedia.js +0 -1
- package/dist/cjs/components/template-context-mapper/styles/TemplateAnalyticsStyles.d.ts +0 -9
- package/dist/cjs/components/template-context-mapper/styles/TemplateAnalyticsStyles.js +0 -64
- package/dist/cjs/components/template-context-mapper/utils/TemplateConstants.d.ts +0 -54
- package/dist/cjs/components/template-context-mapper/utils/TemplateConstants.js +0 -1
- package/dist/cjs/components/template-context-mapper/utils/constants.d.ts +0 -3
- package/dist/cjs/components/template-context-mapper/utils/constants.js +0 -1
- package/dist/cjs/components/template-context-mapper/utils/getFormattedMonthDate.d.ts +0 -1
- package/dist/cjs/components/template-context-mapper/utils/getPreviewDimension.d.ts +0 -2
- package/dist/cjs/components/template-context-mapper/utils/getPreviewDimension.js +0 -1
- package/dist/cjs/components/template-context-mapper/utils/validateName.d.ts +0 -2
- package/dist/cjs/components/template-context-mapper/utils/validateName.js +0 -1
- package/dist/cjs/components/template-preview/RCS/RCSButtons.d.ts +0 -9
- package/dist/cjs/components/template-preview/RCS/RCSButtons.js +0 -1
- package/dist/cjs/components/template-preview/RCS/RCSChatHeader.d.ts +0 -2
- package/dist/cjs/components/template-preview/RCS/RCSChatHeader.js +0 -1
- package/dist/cjs/components/template-preview/RCS/RCSChatPreview.d.ts +0 -2
- package/dist/cjs/components/template-preview/RCS/RCSChatPreview.js +0 -1
- package/dist/cjs/components/template-preview/RCS/RCSMediaCard.d.ts +0 -14
- package/dist/cjs/components/template-preview/RCS/RCSMediaCard.js +0 -1
- package/dist/cjs/components/template-preview/RCS/RCSPreview.styled.d.ts +0 -33
- package/dist/cjs/components/template-preview/RCS/RCSPreview.styled.js +0 -128
- package/dist/cjs/components/template-preview/RCS/RCSTemplateLikePreview.d.ts +0 -3
- package/dist/cjs/components/template-preview/RCS/RCSTemplateLikePreview.js +0 -8
- package/dist/cjs/components/template-preview/WhatsApp/LimitedTimeOffer/LimitedTimeOffer.index.d.ts +0 -9
- package/dist/cjs/components/template-preview/WhatsApp/LimitedTimeOffer/LimitedTimeOffer.index.js +0 -21
- package/dist/cjs/components/template-preview/helpers/templateMiscHelper.d.ts +0 -8
- package/dist/cjs/components/template-preview/helpers/templateMiscHelper.js +0 -1
- package/dist/cjs/components/template-preview/models/RCSTemplate.d.ts +0 -139
- package/dist/cjs/components/template-preview/models/RCSTemplate.js +0 -1
- package/dist/cjs/components/template-preview/models/WebpushTemplate.d.ts +0 -78
- package/dist/cjs/components/template-preview/models/WebpushTemplate.js +0 -1
- package/dist/cjs/components/template-preview/models/WhatsappCarouselTemplate.d.ts +0 -111
- package/dist/cjs/components/template-preview/models/types.d.ts +0 -10
- package/dist/cjs/components/template-preview/webpush/WebpushPreview.d.ts +0 -8
- package/dist/cjs/components/template-preview/webpush/WebpushPreview.js +0 -1
- package/dist/cjs/components/template-preview/webpush/WebpushPreview.styled.d.ts +0 -1
- package/dist/cjs/components/template-preview/webpush/WebpushPreview.styled.js +0 -70
- package/dist/cjs/components/testimonial-card/TestimonialCard.d.ts +0 -17
- package/dist/cjs/components/testimonial-card/TestimonialCard.js +0 -1
- package/dist/cjs/components/testimonial-card/TestimonialCard.style.d.ts +0 -43
- package/dist/cjs/components/testimonial-card/TestimonialCard.style.js +0 -1
- package/dist/cjs/components/testimonial-card/index.d.ts +0 -1
- package/dist/cjs/components/text-picker/TextPickerCategoryCard.d.ts +0 -12
- package/dist/cjs/components/text-picker/TextPickerCategoryCard.js +0 -13
- package/dist/cjs/components/text-picker/TextPickerFooter.d.ts +0 -6
- package/dist/cjs/components/text-picker/TextPickerFooter.js +0 -13
- package/dist/cjs/components/text-picker/TextPickerItemRow.d.ts +0 -11
- package/dist/cjs/components/text-picker/TextPickerItemRow.js +0 -17
- package/dist/cjs/components/text-picker/TextPickerModal.d.ts +0 -29
- package/dist/cjs/components/text-picker/TextPickerModal.js +0 -26
- package/dist/cjs/components/text-picker/TextPickerSelectAllRow.d.ts +0 -7
- package/dist/cjs/components/text-picker/TextPickerSelectAllRow.js +0 -17
- package/dist/cjs/components/text-picker/index.d.ts +0 -1
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.d.ts +0 -14
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.js +0 -1
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.style.d.ts +0 -1
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.style.js +0 -42
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryResponseList.d.ts +0 -18
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryResponseList.js +0 -1
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryResponseList.style.d.ts +0 -1
- package/dist/cjs/components/unsatisfactory-response-list/UnsatisfactoryResponseList.style.js +0 -38
- package/dist/cjs/components/variable-picker-v3/Content.d.ts +0 -5
- package/dist/cjs/components/variable-picker-v3/Content.js +0 -1
- package/dist/cjs/components/variable-picker-v3/DefaultVariableContent.d.ts +0 -8
- package/dist/cjs/components/variable-picker-v3/DefaultVariableContent.js +0 -1
- package/dist/cjs/components/variable-picker-v3/NoResult.d.ts +0 -6
- package/dist/cjs/components/variable-picker-v3/NoResult.js +0 -17
- package/dist/cjs/components/variable-picker-v3/SubHeaderItems.d.ts +0 -14
- package/dist/cjs/components/variable-picker-v3/SubHeaderItems.js +0 -1
- package/dist/cjs/components/variable-picker-v3/VariablePicker.d.ts +0 -5
- package/dist/cjs/components/variable-picker-v3/VariablePicker.js +0 -1
- package/dist/cjs/components/variable-picker-v3/context.d.ts +0 -21
- package/dist/cjs/components/variable-picker-v3/context.js +0 -1
- package/dist/cjs/components/variable-picker-v3/highlightSearchText.d.ts +0 -1
- package/dist/cjs/components/variable-picker-v3/highlightSearchText.js +0 -1
- package/dist/cjs/components/variable-picker-v3/index.d.ts +0 -1
- package/dist/cjs/components/variable-picker-v3/model.d.ts +0 -62
- package/dist/cjs/components/variable-picker-v3/model.js +0 -1
- package/dist/cjs/components/variable-picker-v3/recommendVaribles.d.ts +0 -1
- package/dist/cjs/components/variable-picker-v3/recommendVaribles.js +0 -1
- package/dist/cjs/components/variable-picker-v3/searchVariables.d.ts +0 -2
- package/dist/cjs/components/variable-picker-v3/searchVariables.js +0 -1
- package/dist/cjs/components/variable-picker-v3/styles.d.ts +0 -8
- package/dist/cjs/components/variable-picker-v3/styles.js +0 -42
- package/dist/cjs/components/vertical-full-screen-modal/component.d.ts +0 -24
- package/dist/cjs/components/vertical-full-screen-modal/component.js +0 -1
- package/dist/cjs/components/vertical-full-screen-modal/index.d.ts +0 -2
- package/dist/cjs/components/vertical-full-screen-modal/styles.d.ts +0 -8
- package/dist/cjs/components/vertical-full-screen-modal/styles.js +0 -45
- package/dist/cjs/components/vertical-full-screen-modal/types.d.ts +0 -27
- package/dist/cjs/components/whats-new/WhatsNew.d.ts +0 -23
- package/dist/cjs/components/whats-new/WhatsNew.js +0 -1
- package/dist/cjs/components/whats-new/WhatsNew.styles.d.ts +0 -11
- package/dist/cjs/components/whats-new/WhatsNew.styles.js +0 -185
- package/dist/cjs/components/whats-new/WhatsNew.types.d.ts +0 -64
- package/dist/cjs/components/whats-new/WhatsNewButton.d.ts +0 -3
- package/dist/cjs/components/whats-new/WhatsNewButton.js +0 -1
- package/dist/cjs/components/whats-new/WhatsNewPanel.d.ts +0 -3
- package/dist/cjs/components/whats-new/WhatsNewPanel.js +0 -1
- package/dist/cjs/components/whats-new/WhatsNewProvider.d.ts +0 -4
- package/dist/cjs/components/whats-new/WhatsNewProvider.js +0 -1
- package/dist/cjs/components/whats-new/index.d.ts +0 -7
- package/dist/cjs/components/whats-new/useWhatsNew.d.ts +0 -9
- package/dist/cjs/components/whats-new/useWhatsNew.js +0 -1
- package/dist/cjs/constants/zindex.d.ts +0 -7
- package/dist/cjs/constants/zindex.js +0 -1
- package/dist/cjs/hooks/useCurreny.d.ts +0 -3
- package/dist/cjs/hooks/useCurreny.js +0 -1
- package/dist/cjs/hooks/useWindowSize.d.ts +0 -2
- package/dist/cjs/hooks/useWindowSize.js +0 -1
- package/dist/cjs/node_modules/lodash.debounce/index.js +0 -1
- package/dist/cjs/types/componentTypes.d.ts +0 -8
- package/dist/cjs/types/componentTypes.js +0 -1
- package/dist/cjs/utils/resizeImage.d.ts +0 -1
- package/dist/cjs/utils/resizeImage.js +0 -1
- package/dist/cjs/utils/validator.d.ts +0 -6
- package/dist/cjs/utils/validator.js +0 -1
- package/dist/cjs/utils/variableUtils.d.ts +0 -1
- package/dist/cjs/utils/variableUtils.js +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
- package/dist/esm/amplitude/Track.stories.d.ts +0 -4
- package/dist/esm/amplitude/index.d.ts +0 -18
- package/dist/esm/amplitude/index.js +0 -1
- package/dist/esm/amplitude/model.d.ts +0 -48
- package/dist/esm/amplitude/model.js +0 -1
- package/dist/esm/assets/icons/ActiveChecklistIcon.d.ts +0 -3
- package/dist/esm/assets/icons/ActiveChecklistIcon.js +0 -1
- package/dist/esm/assets/icons/AiEdit.svg.js +0 -1
- package/dist/esm/assets/icons/Ai_event_generating.svg.js +0 -1
- package/dist/esm/assets/icons/Bik_logo.svg.js +0 -1
- package/dist/esm/assets/icons/ChartBar.svg.js +0 -1
- package/dist/esm/assets/icons/ChartPie.svg.js +0 -1
- package/dist/esm/assets/icons/CheckIndicatorIcon.d.ts +0 -1
- package/dist/esm/assets/icons/CheckIndicatorIcon.js +0 -1
- package/dist/esm/assets/icons/CheckSquareOffset.svg.js +0 -1
- package/dist/esm/assets/icons/CompletedChecklistIcon.d.ts +0 -3
- package/dist/esm/assets/icons/CompletedChecklistIcon.js +0 -1
- package/dist/esm/assets/icons/CustomiseIcon.d.ts +0 -7
- package/dist/esm/assets/icons/CustomiseIcon.js +0 -1
- package/dist/esm/assets/icons/DocsIcon.d.ts +0 -6
- package/dist/esm/assets/icons/DocsIcon.js +0 -1
- package/dist/esm/assets/icons/DoubtIcon.d.ts +0 -6
- package/dist/esm/assets/icons/DoubtIcon.js +0 -1
- package/dist/esm/assets/icons/EditLabel.d.ts +0 -7
- package/dist/esm/assets/icons/EditLabel.js +0 -1
- package/dist/esm/assets/icons/EnableIcon.d.ts +0 -7
- package/dist/esm/assets/icons/EnableIcon.js +0 -1
- package/dist/esm/assets/icons/GoLiveIcon.d.ts +0 -7
- package/dist/esm/assets/icons/GoLiveIcon.js +0 -1
- package/dist/esm/assets/icons/HeadsetIcon.d.ts +0 -7
- package/dist/esm/assets/icons/HeadsetIcon.js +0 -1
- package/dist/esm/assets/icons/HelpIcon.svg.js +0 -1
- package/dist/esm/assets/icons/Icons.stories.d.ts +0 -31
- package/dist/esm/assets/icons/Idea.svg.js +0 -1
- package/dist/esm/assets/icons/InactiveChecklistIcon.d.ts +0 -3
- package/dist/esm/assets/icons/InactiveChecklistIcon.js +0 -1
- package/dist/esm/assets/icons/ListChecksIcon.d.ts +0 -7
- package/dist/esm/assets/icons/ListChecksIcon.js +0 -1
- package/dist/esm/assets/icons/MarketingIcon.d.ts +0 -6
- package/dist/esm/assets/icons/MarketingIcon.js +0 -1
- package/dist/esm/assets/icons/NotesIcon.d.ts +0 -6
- package/dist/esm/assets/icons/NotesIcon.js +0 -1
- package/dist/esm/assets/icons/NudgesIcon.d.ts +0 -7
- package/dist/esm/assets/icons/NudgesIcon.js +0 -1
- package/dist/esm/assets/icons/OnboardingLogo.d.ts +0 -7
- package/dist/esm/assets/icons/OnboardingLogo.js +0 -1
- package/dist/esm/assets/icons/OrderTrackingIcon.d.ts +0 -7
- package/dist/esm/assets/icons/OrderTrackingIcon.js +0 -1
- package/dist/esm/assets/icons/PlusIcon.d.ts +0 -9
- package/dist/esm/assets/icons/PlusIcon.js +0 -1
- package/dist/esm/assets/icons/ProgressBadgeIcon.d.ts +0 -3
- package/dist/esm/assets/icons/ProgressBadgeIcon.js +0 -1
- package/dist/esm/assets/icons/RCS_PDF.svg.js +0 -1
- package/dist/esm/assets/icons/Redirect2Icon.d.ts +0 -2
- package/dist/esm/assets/icons/Redirect2Icon.js +0 -1
- package/dist/esm/assets/icons/ShoppingIcon.d.ts +0 -7
- package/dist/esm/assets/icons/ShoppingIcon.js +0 -1
- package/dist/esm/assets/icons/SmallCheckIcon.d.ts +0 -3
- package/dist/esm/assets/icons/SmallCheckIcon.js +0 -1
- package/dist/esm/assets/icons/StepsIcon.d.ts +0 -6
- package/dist/esm/assets/icons/StepsIcon.js +0 -1
- package/dist/esm/assets/icons/StoreIcon.d.ts +0 -6
- package/dist/esm/assets/icons/StoreIcon.js +0 -1
- package/dist/esm/assets/icons/SupportIcon.d.ts +0 -7
- package/dist/esm/assets/icons/SupportIcon.js +0 -1
- package/dist/esm/assets/icons/ThreeColumnsIcon.d.ts +0 -6
- package/dist/esm/assets/icons/ThreeColumnsIcon.js +0 -1
- package/dist/esm/assets/icons/TrainingIcon.d.ts +0 -7
- package/dist/esm/assets/icons/TrainingIcon.js +0 -1
- package/dist/esm/assets/icons/WhiteStarFilled.svg.js +0 -1
- package/dist/esm/assets/icons/actionButton.svg.js +0 -1
- package/dist/esm/assets/icons/aiContentIcon.svg.js +0 -1
- package/dist/esm/assets/icons/alarm.svg.js +0 -1
- package/dist/esm/assets/icons/alert_triangle.svg.js +0 -1
- package/dist/esm/assets/icons/arrow_back.svg.js +0 -1
- package/dist/esm/assets/icons/arrow_down.svg.js +0 -1
- package/dist/esm/assets/icons/arrow_up.svg.js +0 -1
- package/dist/esm/assets/icons/back_icon.svg.js +0 -1
- package/dist/esm/assets/icons/bik_ai_stars_icon.svg.js +0 -1
- package/dist/esm/assets/icons/bik_livechat.svg.js +0 -1
- package/dist/esm/assets/icons/box.svg.js +0 -1
- package/dist/esm/assets/icons/boxV2.svg.js +0 -1
- package/dist/esm/assets/icons/box_round.svg.js +0 -1
- package/dist/esm/assets/icons/box_search.svg.js +0 -1
- package/dist/esm/assets/icons/brand_home.svg.js +0 -1
- package/dist/esm/assets/icons/broken_media_image.svg.js +0 -1
- package/dist/esm/assets/icons/card_footer_arraw.svg.js +0 -1
- package/dist/esm/assets/icons/chat-channel.svg.js +0 -1
- package/dist/esm/assets/icons/chat.svg.js +0 -1
- package/dist/esm/assets/icons/checkCircle.svg.js +0 -1
- package/dist/esm/assets/icons/checklistIcon.svg.js +0 -1
- package/dist/esm/assets/icons/chevronDownOutline.svg.js +0 -1
- package/dist/esm/assets/icons/chevronLeft2.svg.js +0 -1
- package/dist/esm/assets/icons/chevronRight2.svg.js +0 -1
- package/dist/esm/assets/icons/chevronRightAlt.svg.js +0 -1
- package/dist/esm/assets/icons/chevronUpOutline.svg.js +0 -1
- package/dist/esm/assets/icons/circular-cross-icon.svg.js +0 -1
- package/dist/esm/assets/icons/click.svg.js +0 -1
- package/dist/esm/assets/icons/clock.svg.js +0 -1
- package/dist/esm/assets/icons/copy-code-icon.svg.js +0 -1
- package/dist/esm/assets/icons/cubeIcon.svg.js +0 -1
- package/dist/esm/assets/icons/cursor.svg.js +0 -1
- package/dist/esm/assets/icons/drag_handle.svg.js +0 -1
- package/dist/esm/assets/icons/email-channel.svg.js +0 -1
- package/dist/esm/assets/icons/expressionless_emoji.svg.js +0 -1
- package/dist/esm/assets/icons/facebook_channel.svg.js +0 -1
- package/dist/esm/assets/icons/file.svg.js +0 -1
- package/dist/esm/assets/icons/gift_icon.svg.js +0 -1
- package/dist/esm/assets/icons/gmail.svg.js +0 -1
- package/dist/esm/assets/icons/graph.svg.js +0 -1
- package/dist/esm/assets/icons/grid.svg.js +0 -1
- package/dist/esm/assets/icons/help.svg.js +0 -1
- package/dist/esm/assets/icons/home.svg.js +0 -1
- package/dist/esm/assets/icons/horizontal_dots.svg.js +0 -1
- package/dist/esm/assets/icons/hover_home.svg.js +0 -1
- package/dist/esm/assets/icons/index.d.ts +0 -167
- package/dist/esm/assets/icons/instagram-channel.svg.js +0 -1
- package/dist/esm/assets/icons/list.svg.js +0 -1
- package/dist/esm/assets/icons/locked.svg.js +0 -1
- package/dist/esm/assets/icons/log_out.svg.js +0 -1
- package/dist/esm/assets/icons/lto_icon.svg.js +0 -1
- package/dist/esm/assets/icons/maximize.svg.js +0 -1
- package/dist/esm/assets/icons/openai.svg.js +0 -1
- package/dist/esm/assets/icons/paperclip.svg.js +0 -1
- package/dist/esm/assets/icons/percentage_icon.svg.js +0 -1
- package/dist/esm/assets/icons/phone_round.svg.js +0 -1
- package/dist/esm/assets/icons/play.svg.js +0 -1
- package/dist/esm/assets/icons/pointer.svg.js +0 -1
- package/dist/esm/assets/icons/profile.svg.js +0 -1
- package/dist/esm/assets/icons/qrb.svg.js +0 -1
- package/dist/esm/assets/icons/quotes.svg.js +0 -1
- package/dist/esm/assets/icons/redirect.svg.js +0 -1
- package/dist/esm/assets/icons/retry.svg.js +0 -1
- package/dist/esm/assets/icons/retryIcon.svg.js +0 -1
- package/dist/esm/assets/icons/sad_emoji.svg.js +0 -1
- package/dist/esm/assets/icons/searchIcon.js +0 -1
- package/dist/esm/assets/icons/searchIcon.svg.js +0 -1
- package/dist/esm/assets/icons/send.svg.js +0 -1
- package/dist/esm/assets/icons/send_template.svg.js +0 -1
- package/dist/esm/assets/icons/shipping_icon.svg.js +0 -1
- package/dist/esm/assets/icons/similar.svg.js +0 -1
- package/dist/esm/assets/icons/smile_emoji.svg.js +0 -1
- package/dist/esm/assets/icons/smiley_emoji.svg.js +0 -1
- package/dist/esm/assets/icons/sparkle.svg.js +0 -1
- package/dist/esm/assets/icons/speedometer.svg.js +0 -1
- package/dist/esm/assets/icons/starEmpty.svg.js +0 -1
- package/dist/esm/assets/icons/starFilled.svg.js +0 -1
- package/dist/esm/assets/icons/starFilledV2.svg.js +0 -1
- package/dist/esm/assets/icons/state_icon.svg.js +0 -1
- package/dist/esm/assets/icons/sub_category.svg.js +0 -1
- package/dist/esm/assets/icons/sync.svg.js +0 -1
- package/dist/esm/assets/icons/task.svg.js +0 -1
- package/dist/esm/assets/icons/text_t9.svg.js +0 -1
- package/dist/esm/assets/icons/thumbs_down.svg.js +0 -1
- package/dist/esm/assets/icons/thumbs_up.svg.js +0 -1
- package/dist/esm/assets/icons/tick.svg.js +0 -1
- package/dist/esm/assets/icons/tick_double.svg.js +0 -1
- package/dist/esm/assets/icons/triangle_error.svg.js +0 -1
- package/dist/esm/assets/icons/undo.svg.js +0 -1
- package/dist/esm/assets/icons/upload.svg.js +0 -1
- package/dist/esm/assets/icons/website.svg.js +0 -1
- package/dist/esm/assets/icons/whatsNew.svg.js +0 -1
- package/dist/esm/assets/icons/whatsapp-channel.svg.js +0 -1
- package/dist/esm/assets/icons/whatsapp_color.svg.js +0 -1
- package/dist/esm/components/BikGiftedChat/Bubble/Bubble.d.ts +0 -5
- package/dist/esm/components/BikGiftedChat/Bubble/Bubble.js +0 -1
- package/dist/esm/components/BikGiftedChat/Bubble/types.d.ts +0 -38
- package/dist/esm/components/BikGiftedChat/Bubble/types.js +0 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/Day.d.ts +0 -17
- package/dist/esm/components/BikGiftedChat/GiftedChat/Day.js +0 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.d.ts +0 -5
- package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js +0 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/messageHelpers.d.ts +0 -6
- package/dist/esm/components/BikGiftedChat/GiftedChat/messageHelpers.js +0 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/scrollHooks.d.ts +0 -10
- package/dist/esm/components/BikGiftedChat/GiftedChat/scrollHooks.js +0 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/types.d.ts +0 -154
- package/dist/esm/components/BikGiftedChat/GiftedChat/types.js +0 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/utils.d.ts +0 -22
- package/dist/esm/components/BikGiftedChat/GiftedChat/utils.js +0 -1
- package/dist/esm/components/BikGiftedChat/index.d.ts +0 -5
- package/dist/esm/components/BikGiftedChat/types.d.ts +0 -24
- package/dist/esm/components/InfiniteScroll/InfiniteScroll.d.ts +0 -9
- package/dist/esm/components/InfiniteScroll/InfiniteScroll.js +0 -1
- package/dist/esm/components/ProgressChecklist/MultiChecklistItem.d.ts +0 -10
- package/dist/esm/components/ProgressChecklist/MultiChecklistItem.js +0 -1
- package/dist/esm/components/ProgressChecklist/ProgressChecklist.d.ts +0 -75
- package/dist/esm/components/ProgressChecklist/ProgressChecklist.js +0 -1
- package/dist/esm/components/ProgressChecklist/ProgressChecklist.style.d.ts +0 -32
- package/dist/esm/components/ProgressChecklist/ProgressChecklist.style.js +0 -133
- package/dist/esm/components/ProgressChecklist/ProgressStepper.d.ts +0 -15
- package/dist/esm/components/ProgressChecklist/ProgressStepper.js +0 -1
- package/dist/esm/components/ProgressChecklist/SimpleChecklistItem.d.ts +0 -21
- package/dist/esm/components/ProgressChecklist/SimpleChecklistItem.js +0 -1
- package/dist/esm/components/ProgressChecklist/index.d.ts +0 -2
- package/dist/esm/components/QueryBuilder/Filters/CustomField/components/CustomField.d.ts +0 -4
- package/dist/esm/components/QueryBuilder/Filters/CustomField/components/CustomField.js +0 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/EmojiPicker.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/EmojiPicker.js +0 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/InTheLast.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/InTheLast.js +0 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/InTheLastAgo.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/InTheLastAgo.js +0 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/InTwoLast.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/InTwoLast.js +0 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/SingleselectDropdownFreeText.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/SingleselectDropdownFreeText.js +0 -1
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/StringSingleValue.d.ts +0 -3
- package/dist/esm/components/QueryBuilder/components/Connectors/Components/StringSingleValue.js +0 -1
- package/dist/esm/components/QueryBuilder/constants/DATE_OPERATORS_OPTIONS.d.ts +0 -2
- package/dist/esm/components/QueryBuilder/constants/DATE_OPERATORS_OPTIONS.js +0 -1
- package/dist/esm/components/QueryBuilder/helpers/MetaCustomProcessor.d.ts +0 -79
- package/dist/esm/components/QueryBuilder/helpers/OperatorHelperV2.d.ts +0 -7
- package/dist/esm/components/QueryBuilder/helpers/PropertyCustomProcessor.d.ts +0 -28
- package/dist/esm/components/QueryBuilder/helpers/SegmentHelperV2.d.ts +0 -140
- package/dist/esm/components/QueryBuilder/helpers/SegmentValidator.d.ts +0 -95
- package/dist/esm/components/QueryBuilder/helpers/SegmentValidator.js +0 -1
- package/dist/esm/components/SearchFilter/components/DatePickerButton.d.ts +0 -7
- package/dist/esm/components/SearchFilter/components/DatePickerButton.js +0 -1
- package/dist/esm/components/SearchFilter/components/DateRangeOnlyButton.d.ts +0 -7
- package/dist/esm/components/SearchFilter/components/DateRangeOnlyButton.js +0 -1
- package/dist/esm/components/SearchFilter/components/FilterChipListRenderer.d.ts +0 -6
- package/dist/esm/components/SearchFilter/components/FilterChipListRenderer.js +0 -1
- package/dist/esm/components/SearchFilter/components/SearchFilterItem.d.ts +0 -7
- package/dist/esm/components/SearchFilter/components/SearchFilterItem.js +0 -1
- package/dist/esm/components/SearchFilter/index.d.ts +0 -3
- package/dist/esm/components/SearchFilter/index.js +0 -1
- package/dist/esm/components/SearchFilter/types/SearchFilter.type.d.ts +0 -37
- package/dist/esm/components/SearchFilter/types/SearchFilter.type.js +0 -1
- package/dist/esm/components/WhatsAppTextEditor/AIRephrase.styled.d.ts +0 -10
- package/dist/esm/components/WhatsAppTextEditor/AIRephrase.styled.js +0 -1
- package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.d.ts +0 -17
- package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.js +0 -1
- package/dist/esm/components/WhatsAppTextEditor/BorderAnimation.d.ts +0 -11
- package/dist/esm/components/WhatsAppTextEditor/BorderAnimation.js +0 -1
- package/dist/esm/components/WhatsAppTextEditor/ai/actionRegistry.d.ts +0 -14
- package/dist/esm/components/WhatsAppTextEditor/ai/actionRegistry.js +0 -1
- package/dist/esm/components/WhatsAppTextEditor/ai/api.d.ts +0 -22
- package/dist/esm/components/WhatsAppTextEditor/ai/api.js +0 -1
- package/dist/esm/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.d.ts +0 -19
- package/dist/esm/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.js +0 -1
- package/dist/esm/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.styles.d.ts +0 -10
- package/dist/esm/components/access-token-troubleshoot-dialog/AccessTokenTroubleshootDialog.styles.js +0 -50
- package/dist/esm/components/access-token-troubleshoot-dialog/index.d.ts +0 -1
- package/dist/esm/components/accordion/Accordion.d.ts +0 -36
- package/dist/esm/components/accordion/Accordion.js +0 -1
- package/dist/esm/components/accordion/Accordion.style.d.ts +0 -17
- package/dist/esm/components/accordion/Accordion.style.js +0 -50
- package/dist/esm/components/accordion/AccordionArrow.d.ts +0 -7
- package/dist/esm/components/accordion/AccordionArrow.js +0 -1
- package/dist/esm/components/accordion/index.d.ts +0 -1
- package/dist/esm/components/action-button/ActionButton.styled.d.ts +0 -7
- package/dist/esm/components/action-button/ActionButton.styled.js +0 -23
- package/dist/esm/components/action-button/ActionButtons.d.ts +0 -10
- package/dist/esm/components/action-button/ActionButtons.js +0 -1
- package/dist/esm/components/action-button/index.d.ts +0 -1
- package/dist/esm/components/add-variableV2/AddVariableBox.styled.d.ts +0 -1
- package/dist/esm/components/add-variableV2/AddVariableBox.styled.js +0 -25
- package/dist/esm/components/add-variableV2/AddVariableV2.d.ts +0 -58
- package/dist/esm/components/add-variableV2/AddVariableV2.js +0 -1
- package/dist/esm/components/add-variableV2/AddVariableV2.styled.d.ts +0 -12
- package/dist/esm/components/add-variableV2/AddVariableV2.styled.js +0 -164
- package/dist/esm/components/add-variableV2/AddVariableV2SideModal.d.ts +0 -19
- package/dist/esm/components/add-variableV2/AddVariableV2SideModal.js +0 -1
- package/dist/esm/components/add-variableV2/index.d.ts +0 -2
- package/dist/esm/components/add-variableV2/types.d.ts +0 -6
- package/dist/esm/components/ai-modals/ActivateBikAI.d.ts +0 -9
- package/dist/esm/components/ai-modals/ActivateBikAI.js +0 -1
- package/dist/esm/components/ai-modals/AiCreditsExhausted.d.ts +0 -8
- package/dist/esm/components/ai-modals/AiCreditsExhausted.js +0 -1
- package/dist/esm/components/ai-modals/AiCreditsLow.d.ts +0 -7
- package/dist/esm/components/ai-modals/AiCreditsLow.js +0 -1
- package/dist/esm/components/ai-modals/AiSyncProgress.d.ts +0 -8
- package/dist/esm/components/ai-modals/AiSyncProgress.js +0 -1
- package/dist/esm/components/ai-modals/index.d.ts +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChipChannelFooter.d.ts +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsChipChannelFooter.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsMetric.d.ts +0 -18
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsMetric.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsTrend.d.ts +0 -36
- package/dist/esm/components/analytics-chips-and-dropdowns/AnalyticsTrend.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.styles.d.ts +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/HorizontalBarGraph/HorizontalGraph.styles.js +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Legend/Legend.d.ts +0 -6
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Legend/Legend.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.d.ts +0 -59
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.styled.d.ts +0 -19
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/LineChart/LineChart.styled.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Pie/PieChart.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Pie/PieChart.js +0 -28
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Pie/PieChartAnalytics.d.ts +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Pie/PieChartAnalytics.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/Pie/PieChartInputData.d.ts +0 -21
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.d.ts +0 -2
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.d.ts +0 -92
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.model.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.styles.d.ts +0 -7
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarChart.styles.js +0 -35
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.d.ts +0 -2
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.model.d.ts +0 -48
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/StackedBarChart/StackedBarDistributionChart.model.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.styles.d.ts +0 -7
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraph.styles.js +0 -25
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraphModel.d.ts +0 -34
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarAndLinearGraph/VerticalBarAndLinearGraphModel.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/FunnelVerticalBarGraph.d.ts +0 -14
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/FunnelVerticalBarGraph.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.styles.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/VerticalBarGraph/VerticalGraph.styles.js +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMap.d.ts +0 -36
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMap.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapStyled.d.ts +0 -40
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapStyled.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapVertical.d.ts +0 -14
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/heatmap/HeatMapVertical.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.d.ts +0 -27
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.styled.d.ts +0 -25
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/LinearChipGroupedChart.styled.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/linearChipGroupedChart/index.d.ts +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/Chip.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/Chip.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/HorizontalBar.d.ts +0 -3
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/HorizontalBar.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.d.ts +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.styled.d.ts +0 -25
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/ScoreBlock.styled.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/index.d.ts +0 -4
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/types.d.ts +0 -57
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/scoreBlock/types.js +0 -1
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/utils/calcPercentage.d.ts +0 -20
- package/dist/esm/components/analytics-chips-and-dropdowns/chart/utils/calcPercentage.js +0 -1
- package/dist/esm/components/banner/AdBanner.d.ts +0 -4
- package/dist/esm/components/banner/AdBanner.js +0 -1
- package/dist/esm/components/banner/Banner.stories.d.ts +0 -9
- package/dist/esm/components/banner/Banner.styled.d.ts +0 -87
- package/dist/esm/components/banner/Banner.styled.js +0 -1
- package/dist/esm/components/banner/BannerInline.d.ts +0 -6
- package/dist/esm/components/banner/BannerInline.js +0 -1
- package/dist/esm/components/banner/BannerWithImage.d.ts +0 -6
- package/dist/esm/components/banner/BannerWithImage.js +0 -1
- package/dist/esm/components/banner/CardBanner.d.ts +0 -6
- package/dist/esm/components/banner/CardBanner.js +0 -1
- package/dist/esm/components/banner/CardBannerWithImage.d.ts +0 -6
- package/dist/esm/components/banner/CardBannerWithImage.js +0 -1
- package/dist/esm/components/banner/index.d.ts +0 -2
- package/dist/esm/components/banner/model.d.ts +0 -77
- package/dist/esm/components/banner/model.js +0 -1
- package/dist/esm/components/bik-chatbot/components/AIChat.d.ts +0 -5
- package/dist/esm/components/bik-chatbot/components/AIChat.js +0 -1
- package/dist/esm/components/bik-chatbot/components/BIKChatbot.d.ts +0 -40
- package/dist/esm/components/bik-chatbot/components/BIKChatbot.js +0 -1
- package/dist/esm/components/bik-chatbot/components/ChatLoadingState.d.ts +0 -7
- package/dist/esm/components/bik-chatbot/components/ChatLoadingState.js +0 -177
- package/dist/esm/components/bik-chatbot/components/ChatWindow.d.ts +0 -12
- package/dist/esm/components/bik-chatbot/components/ChatWindow.js +0 -254
- package/dist/esm/components/bik-chatbot/components/ThinkingIndicator.d.ts +0 -3
- package/dist/esm/components/bik-chatbot/components/ThinkingIndicator.js +0 -147
- package/dist/esm/components/bik-chatbot/contexts/AIContext.d.ts +0 -4
- package/dist/esm/components/bik-chatbot/contexts/AIContext.js +0 -1
- package/dist/esm/components/bik-chatbot/index.d.ts +0 -137
- package/dist/esm/components/bik-chatbot/services/aiService.d.ts +0 -32
- package/dist/esm/components/bik-chatbot/services/aiService.js +0 -1
- package/dist/esm/components/bik-chatbot/services/callToChatbot.d.ts +0 -6
- package/dist/esm/components/bik-chatbot/services/callToChatbot.js +0 -1
- package/dist/esm/components/bik-chatbot/services/db.d.ts +0 -6
- package/dist/esm/components/bik-chatbot/services/db.js +0 -1
- package/dist/esm/components/bik-chatbot/services/useAIChat.d.ts +0 -7
- package/dist/esm/components/bik-chatbot/services/useAIChat.js +0 -1
- package/dist/esm/components/bik-chatbot/types/ai.d.ts +0 -163
- package/dist/esm/components/bik-chatbot/types/ai.js +0 -1
- package/dist/esm/components/bik-chatbot/types/chat.d.ts +0 -34
- package/dist/esm/components/bik-chatbot/types/chat.js +0 -1
- package/dist/esm/components/bik-chatbot/types/components.d.ts +0 -136
- package/dist/esm/components/bik-chatbot/types/index.d.ts +0 -6
- package/dist/esm/components/bik-chatbot/utils/guardrails.d.ts +0 -6
- package/dist/esm/components/bik-chatbot/utils/guardrails.js +0 -1
- package/dist/esm/components/bik-chatbot/utils/markdown.d.ts +0 -1
- package/dist/esm/components/bik-chatbot/utils/markdown.js +0 -1
- package/dist/esm/components/bik-chatbot-examples/AnalyticsAdvisor.d.ts +0 -8
- package/dist/esm/components/bik-chatbot-examples/ContentIdeasDemo.d.ts +0 -12
- package/dist/esm/components/bik-chatbot-examples/SilentModeDemo.d.ts +0 -17
- package/dist/esm/components/bik-chatbot-examples/SimpleChatbotDemo.d.ts +0 -17
- package/dist/esm/components/bik-chatbot-examples/SimpleJsonChatDemo.d.ts +0 -16
- package/dist/esm/components/bik-chatbot-examples/services/MockRequestExecutor.d.ts +0 -17
- package/dist/esm/components/bik-chatbot-examples/types.ts/examples.d.ts +0 -61
- package/dist/esm/components/bik-layout/BikHeader.d.ts +0 -16
- package/dist/esm/components/bik-layout/BikHeader.js +0 -1
- package/dist/esm/components/bik-layout/BikLayout.d.ts +0 -25
- package/dist/esm/components/bik-layout/BikLayout.js +0 -1
- package/dist/esm/components/bik-layout/BikProfile.d.ts +0 -12
- package/dist/esm/components/bik-layout/BikProfile.js +0 -1
- package/dist/esm/components/bik-layout/BikSidebar.d.ts +0 -33
- package/dist/esm/components/bik-layout/BikSidebar.js +0 -1
- package/dist/esm/components/bik-layout/CommonStyles.d.ts +0 -110
- package/dist/esm/components/bik-layout/CommonStyles.js +0 -1
- package/dist/esm/components/bik-layout/FeatureModal.d.ts +0 -14
- package/dist/esm/components/bik-layout/FeatureModal.js +0 -1
- package/dist/esm/components/bik-layout/FeatureModalV2.d.ts +0 -13
- package/dist/esm/components/bik-layout/FeatureModalV2.js +0 -1
- package/dist/esm/components/bik-layout/MockMenus.d.ts +0 -93
- package/dist/esm/components/bik-layout/PageLoader.d.ts +0 -6
- package/dist/esm/components/bik-layout/PageLoader.js +0 -1
- package/dist/esm/components/bik-layout/ShowShopifyRestrictedModal.d.ts +0 -13
- package/dist/esm/components/bik-layout/ShowShopifyRestrictedModal.js +0 -1
- package/dist/esm/components/bik-layout/SidebarPopup.d.ts +0 -12
- package/dist/esm/components/bik-layout/SidebarPopup.js +0 -1
- package/dist/esm/components/bik-layout/SidebarSkeleton.d.ts +0 -9
- package/dist/esm/components/bik-layout/SidebarSkeleton.js +0 -1
- package/dist/esm/components/bik-layout/SidebarStyles.d.ts +0 -21
- package/dist/esm/components/bik-layout/SidebarStyles.js +0 -270
- package/dist/esm/components/bik-layout/SimpleSidebar.d.ts +0 -29
- package/dist/esm/components/bik-layout/SimpleSidebar.js +0 -1
- package/dist/esm/components/bik-layout/index.d.ts +0 -9
- package/dist/esm/components/buttonGroup/ButtonGroup.d.ts +0 -22
- package/dist/esm/components/buttonGroup/ButtonGroup.js +0 -1
- package/dist/esm/components/buttonGroup/ButtonGroupStyle.d.ts +0 -14
- package/dist/esm/components/buttonGroup/ButtonGroupStyle.js +0 -34
- package/dist/esm/components/buttonGroup/index.d.ts +0 -1
- package/dist/esm/components/card-selector/CardSelector.d.ts +0 -17
- package/dist/esm/components/card-selector/CardSelector.js +0 -1
- package/dist/esm/components/card-selector/CardSelector.styled.d.ts +0 -7
- package/dist/esm/components/card-selector/CardSelector.styled.js +0 -19
- package/dist/esm/components/card-selector/CardSelectorGroup.d.ts +0 -10
- package/dist/esm/components/card-selector/CardSelectorGroup.js +0 -1
- package/dist/esm/components/card-selector/index.d.ts +0 -3
- package/dist/esm/components/carousel/carousel.d.ts +0 -2
- package/dist/esm/components/carousel/carousel.js +0 -22
- package/dist/esm/components/carousel/index.d.ts +0 -1
- package/dist/esm/components/carousel-preview/CarouselPreview.d.ts +0 -15
- package/dist/esm/components/carousel-preview/CarouselPreview.js +0 -1
- package/dist/esm/components/carousel-preview/CarouselPreview.style.d.ts +0 -10
- package/dist/esm/components/carousel-preview/CarouselPreview.style.js +0 -86
- package/dist/esm/components/carousel-preview/CarouselPreviewCard.d.ts +0 -11
- package/dist/esm/components/carousel-preview/CarouselPreviewCard.js +0 -1
- package/dist/esm/components/carousel-preview/CustomCarouselArrows.d.ts +0 -7
- package/dist/esm/components/carousel-preview/CustomCarouselArrows.js +0 -1
- package/dist/esm/components/carousel-preview/index.d.ts +0 -1
- package/dist/esm/components/carousel-secondary/CarouselSecondary.d.ts +0 -11
- package/dist/esm/components/carousel-secondary/CarouselSecondary.js +0 -1
- package/dist/esm/components/carousel-secondary/CarouselSecondary.style.d.ts +0 -37
- package/dist/esm/components/carousel-secondary/CarouselSecondary.style.js +0 -1
- package/dist/esm/components/carousel-secondary/index.d.ts +0 -1
- package/dist/esm/components/carousel-secondary/model.d.ts +0 -4
- package/dist/esm/components/carousel-secondary/model.js +0 -1
- package/dist/esm/components/checkList/CheckList.d.ts +0 -14
- package/dist/esm/components/checkList/CheckList.js +0 -1
- package/dist/esm/components/checkList/CheckList.styled.d.ts +0 -5
- package/dist/esm/components/checkList/CheckList.styled.js +0 -1
- package/dist/esm/components/checkList/index.d.ts +0 -1
- package/dist/esm/components/code-block/CodeBlock.d.ts +0 -2
- package/dist/esm/components/code-block/CodeBlock.js +0 -1
- package/dist/esm/components/code-block/CodeBlock.styled.d.ts +0 -31
- package/dist/esm/components/code-block/CodeBlock.styled.js +0 -111
- package/dist/esm/components/code-block/CodeBlockHelper.d.ts +0 -3
- package/dist/esm/components/code-block/CodeBlockHelper.js +0 -1
- package/dist/esm/components/code-block/index.d.ts +0 -2
- package/dist/esm/components/code-block/keywordMap.d.ts +0 -1
- package/dist/esm/components/code-block/keywordMap.js +0 -1
- package/dist/esm/components/code-block/languageSpecificFormatting/html_file.d.ts +0 -1
- package/dist/esm/components/code-block/languageSpecificFormatting/javascript_file.d.ts +0 -3
- package/dist/esm/components/code-block/languageSpecificFormatting/javascript_file.js +0 -1
- package/dist/esm/components/code-block/types.d.ts +0 -20
- package/dist/esm/components/code-block/types.js +0 -1
- package/dist/esm/components/colourInput/ColourInput.d.ts +0 -8
- package/dist/esm/components/colourInput/ColourInput.js +0 -1
- package/dist/esm/components/colourInput/ColourInput.styled.d.ts +0 -9
- package/dist/esm/components/colourInput/ColourInput.styled.js +0 -1
- package/dist/esm/components/colourInput/index.d.ts +0 -1
- package/dist/esm/components/country-code-picker/CountryCodePicker.d.ts +0 -19
- package/dist/esm/components/country-code-picker/CountryCodePicker.js +0 -1
- package/dist/esm/components/country-code-picker/CountryCodePicker.modal.d.ts +0 -7
- package/dist/esm/components/country-code-picker/CountryCodePicker.modal.js +0 -1
- package/dist/esm/components/country-code-picker/CountryCodePicker.styled.d.ts +0 -11
- package/dist/esm/components/country-code-picker/CountryCodePicker.styled.js +0 -1
- package/dist/esm/components/country-code-picker/CountryPicker.d.ts +0 -72
- package/dist/esm/components/country-code-picker/CountryPicker.js +0 -1
- package/dist/esm/components/country-code-picker/CountryPicker.styled.d.ts +0 -12
- package/dist/esm/components/country-code-picker/CountryPicker.styled.js +0 -1
- package/dist/esm/components/country-code-picker/index.d.ts +0 -3
- package/dist/esm/components/custom-date-time/CustomDateTime.d.ts +0 -12
- package/dist/esm/components/custom-date-time/CustomDateTime.js +0 -1
- package/dist/esm/components/custom-date-time/CustomDateTime.styled.d.ts +0 -5
- package/dist/esm/components/custom-date-time/CustomDateTime.styled.js +0 -1
- package/dist/esm/components/custom-date-time/DateSelector/DateSelector.d.ts +0 -9
- package/dist/esm/components/custom-date-time/DateSelector/DateSelector.js +0 -1
- package/dist/esm/components/custom-date-time/index.d.ts +0 -1
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.d.ts +0 -18
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.js +0 -1
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.styled.d.ts +0 -9
- package/dist/esm/components/dashboard-review-popup/DashboardReviewPopUp.styled.js +0 -1
- package/dist/esm/components/dashboard-review-popup/components/FiveStar.d.ts +0 -7
- package/dist/esm/components/dashboard-review-popup/components/FiveStar.js +0 -1
- package/dist/esm/components/dashboard-review-popup/components/FiveStar.styled.d.ts +0 -9
- package/dist/esm/components/dashboard-review-popup/components/FiveStar.styled.js +0 -1
- package/dist/esm/components/dashboard-review-popup/components/Form.d.ts +0 -13
- package/dist/esm/components/dashboard-review-popup/components/Form.js +0 -1
- package/dist/esm/components/dashboard-review-popup/components/Form.styled.d.ts +0 -27
- package/dist/esm/components/dashboard-review-popup/components/Form.styled.js +0 -1
- package/dist/esm/components/dashboard-review-popup/components/ZeroState.d.ts +0 -5
- package/dist/esm/components/dashboard-review-popup/components/ZeroState.js +0 -1
- package/dist/esm/components/dashboard-review-popup/index.d.ts +0 -1
- package/dist/esm/components/data-source-panel/DataSourceInfoFooter.d.ts +0 -25
- package/dist/esm/components/data-source-panel/DataSourceInfoFooter.js +0 -1
- package/dist/esm/components/data-source-panel/DataSourcePanel.d.ts +0 -45
- package/dist/esm/components/data-source-panel/DataSourcePanel.js +0 -1
- package/dist/esm/components/data-source-panel/DataSourcePanel.style.d.ts +0 -4
- package/dist/esm/components/data-source-panel/DataSourcePanel.style.js +0 -171
- package/dist/esm/components/data-source-panel/IntentConfig.d.ts +0 -5
- package/dist/esm/components/data-source-panel/IntentConfig.js +0 -1
- package/dist/esm/components/data-source-panel/Modals/DescriptionModal.d.ts +0 -8
- package/dist/esm/components/data-source-panel/Modals/DescriptionModal.js +0 -48
- package/dist/esm/components/data-source-panel/index.d.ts +0 -1
- package/dist/esm/components/data-source-panel/model.d.ts +0 -142
- package/dist/esm/components/data-source-panel/model.js +0 -1
- package/dist/esm/components/datePicker/TimePicker.d.ts +0 -9
- package/dist/esm/components/datePicker/TimePicker.js +0 -1
- package/dist/esm/components/datePicker/model.d.ts +0 -4
- package/dist/esm/components/datePicker/model.js +0 -1
- package/dist/esm/components/discount-modal/CouponExpiration/CouponExpiration.d.ts +0 -13
- package/dist/esm/components/discount-modal/CouponExpiration/CouponExpiration.js +0 -1
- package/dist/esm/components/discount-modal/DiscountModal.d.ts +0 -40
- package/dist/esm/components/discount-modal/DiscountModal.js +0 -1
- package/dist/esm/components/discount-modal/DiscountModal.styled.d.ts +0 -23
- package/dist/esm/components/discount-modal/DiscountModal.styled.js +0 -1
- package/dist/esm/components/discount-modal/DiscountUtils.d.ts +0 -4
- package/dist/esm/components/discount-modal/DiscountUtils.js +0 -1
- package/dist/esm/components/discount-modal/DynamicCoupon/DynamicCoupon.d.ts +0 -72
- package/dist/esm/components/discount-modal/DynamicCoupon/DynamicCoupon.js +0 -1
- package/dist/esm/components/discount-modal/DynamicCoupon/DynamicCoupon.styled.d.ts +0 -10
- package/dist/esm/components/discount-modal/DynamicCoupon/DynamicCoupon.styled.js +0 -76
- package/dist/esm/components/discount-modal/DynamicCoupon/MinimumRequirementComponent.d.ts +0 -15
- package/dist/esm/components/discount-modal/DynamicCoupon/MinimumRequirementComponent.js +0 -1
- package/dist/esm/components/discount-modal/DynamicCoupon/ZeroState.d.ts +0 -2
- package/dist/esm/components/discount-modal/DynamicCoupon/ZeroState.js +0 -16
- package/dist/esm/components/discount-modal/StaticCoupon/StaticCoupon.d.ts +0 -62
- package/dist/esm/components/discount-modal/StaticCoupon/StaticCoupon.js +0 -1
- package/dist/esm/components/discount-modal/index.d.ts +0 -3
- package/dist/esm/components/discount-modal/type.d.ts +0 -107
- package/dist/esm/components/discount-modal/type.js +0 -1
- package/dist/esm/components/dot-pulse/DotPulse.d.ts +0 -7
- package/dist/esm/components/dot-pulse/DotPulse.js +0 -35
- package/dist/esm/components/dot-pulse/index.d.ts +0 -1
- package/dist/esm/components/dropShadow/index.d.ts +0 -1
- package/dist/esm/components/dropdown/ChipDropdown.d.ts +0 -8
- package/dist/esm/components/dropdown/ChipDropdown.js +0 -15
- package/dist/esm/components/dropdown/ChipInput.d.ts +0 -14
- package/dist/esm/components/dropdown/ChipInput.js +0 -1
- package/dist/esm/components/dropdown/MenuItem/MenuItem.d.ts +0 -9
- package/dist/esm/components/dropdown/MenuItem/MenuItem.js +0 -20
- package/dist/esm/components/dropdown/MultilevelDropdownPopover/index.d.ts +0 -15
- package/dist/esm/components/dropdown/MultilevelDropdownPopover/index.js +0 -1
- package/dist/esm/components/dropdown/hooks/useDropdown.d.ts +0 -52
- package/dist/esm/components/dropdown/hooks/useDropdown.js +0 -1
- package/dist/esm/components/dropdown-button/DropdownButton.d.ts +0 -9
- package/dist/esm/components/dropdown-button/DropdownButton.js +0 -1
- package/dist/esm/components/dropdown-button/DropdownButton.style.d.ts +0 -6
- package/dist/esm/components/dropdown-button/DropdownButton.style.js +0 -22
- package/dist/esm/components/dropdown-button/index.d.ts +0 -1
- package/dist/esm/components/dynamic-tabs/DynamicTabs.d.ts +0 -24
- package/dist/esm/components/dynamic-tabs/DynamicTabs.js +0 -1
- package/dist/esm/components/dynamic-tabs/index.d.ts +0 -1
- package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.d.ts +0 -4
- package/dist/esm/components/feature-announcements/FeatureAnnouncementProvider.js +0 -1
- package/dist/esm/components/feature-announcements/MajorUpdatePopup.d.ts +0 -4
- package/dist/esm/components/feature-announcements/MajorUpdatePopup.js +0 -1
- package/dist/esm/components/feature-announcements/MinorUpdatePopup.d.ts +0 -4
- package/dist/esm/components/feature-announcements/MinorUpdatePopup.js +0 -1
- package/dist/esm/components/feature-announcements/VideoModal.d.ts +0 -3
- package/dist/esm/components/feature-announcements/VideoModal.js +0 -1
- package/dist/esm/components/feature-announcements/constants/animations.d.ts +0 -27
- package/dist/esm/components/feature-announcements/constants/animations.js +0 -1
- package/dist/esm/components/feature-announcements/constants/dimensions.d.ts +0 -130
- package/dist/esm/components/feature-announcements/constants/dimensions.js +0 -1
- package/dist/esm/components/feature-announcements/constants/index.d.ts +0 -19
- package/dist/esm/components/feature-announcements/constants/index.js +0 -1
- package/dist/esm/components/feature-announcements/constants/localStorageKeys.d.ts +0 -18
- package/dist/esm/components/feature-announcements/constants/localStorageKeys.js +0 -1
- package/dist/esm/components/feature-announcements/constants/selectors.d.ts +0 -21
- package/dist/esm/components/feature-announcements/constants/selectors.js +0 -1
- package/dist/esm/components/feature-announcements/constants/zIndex.d.ts +0 -10
- package/dist/esm/components/feature-announcements/constants/zIndex.js +0 -1
- package/dist/esm/components/feature-announcements/hooks/index.d.ts +0 -1
- package/dist/esm/components/feature-announcements/hooks/useFeatureAnnouncements.d.ts +0 -13
- package/dist/esm/components/feature-announcements/hooks/useFeatureAnnouncements.js +0 -1
- package/dist/esm/components/feature-announcements/index.d.ts +0 -7
- package/dist/esm/components/feature-announcements/styles/index.d.ts +0 -4
- package/dist/esm/components/feature-announcements/styles/joyride.styles.d.ts +0 -125
- package/dist/esm/components/feature-announcements/styles/majorPopup.styles.d.ts +0 -36
- package/dist/esm/components/feature-announcements/styles/majorPopup.styles.js +0 -1
- package/dist/esm/components/feature-announcements/styles/minorPopup.styles.d.ts +0 -14
- package/dist/esm/components/feature-announcements/styles/minorPopup.styles.js +0 -1
- package/dist/esm/components/feature-announcements/styles/videoModal.styles.d.ts +0 -13
- package/dist/esm/components/feature-announcements/styles/videoModal.styles.js +0 -1
- package/dist/esm/components/feature-announcements/types/feature.types.d.ts +0 -89
- package/dist/esm/components/feature-announcements/types/index.d.ts +0 -4
- package/dist/esm/components/feature-announcements/types/props.types.d.ts +0 -65
- package/dist/esm/components/feature-announcements/types/repository.types.d.ts +0 -11
- package/dist/esm/components/feature-announcements/types/router.types.d.ts +0 -7
- package/dist/esm/components/feature-announcements/useFeatureAnnouncements.d.ts +0 -13
- package/dist/esm/components/feature-announcements/utils/animationHelpers.d.ts +0 -18
- package/dist/esm/components/feature-announcements/utils/animationHelpers.js +0 -1
- package/dist/esm/components/feature-announcements/utils/elementHelpers.d.ts +0 -30
- package/dist/esm/components/feature-announcements/utils/elementHelpers.js +0 -1
- package/dist/esm/components/feature-announcements/utils/htmlHelpers.d.ts +0 -18
- package/dist/esm/components/feature-announcements/utils/htmlHelpers.js +0 -1
- package/dist/esm/components/feature-announcements/utils/index.d.ts +0 -3
- package/dist/esm/components/file-uploader/FileUploader.d.ts +0 -3
- package/dist/esm/components/file-uploader/FileUploader.js +0 -1
- package/dist/esm/components/file-uploader/FileUploaderStyle.d.ts +0 -7
- package/dist/esm/components/file-uploader/FileUploaderStyle.js +0 -166
- package/dist/esm/components/file-uploader/Models.d.ts +0 -34
- package/dist/esm/components/file-uploader/index.d.ts +0 -1
- package/dist/esm/components/file-uploader/useMockUrlUpload.d.ts +0 -8
- package/dist/esm/components/floater/floater.d.ts +0 -9
- package/dist/esm/components/floater/floater.js +0 -1
- package/dist/esm/components/floater/index.d.ts +0 -1
- package/dist/esm/components/floating-input-dropdown/FloatingInputDropdown.d.ts +0 -26
- package/dist/esm/components/floating-input-dropdown/FloatingInputDropdown.js +0 -5
- package/dist/esm/components/floating-input-dropdown/index.d.ts +0 -1
- package/dist/esm/components/image-cropper/BikImageCropper.js +0 -1
- package/dist/esm/components/image-cropper/BikImagePipeline/BikImagePipeline.d.ts +0 -33
- package/dist/esm/components/image-cropper/BikImagePipeline/BikImagePipeline.js +0 -1
- package/dist/esm/components/image-cropper/useMockFileUpload.d.ts +0 -8
- package/dist/esm/components/input/Input-helper.d.ts +0 -6
- package/dist/esm/components/input/Input-helper.js +0 -1
- package/dist/esm/components/input-with-vars/InputWithVariables.d.ts +0 -31
- package/dist/esm/components/input-with-vars/InputWithVariables.js +0 -7
- package/dist/esm/components/input-with-vars/customPortal.d.ts +0 -8
- package/dist/esm/components/input-with-vars/customPortal.js +0 -1
- package/dist/esm/components/input-with-vars/index.d.ts +0 -1
- package/dist/esm/components/keywords-input/KeywordsInput.d.ts +0 -11
- package/dist/esm/components/keywords-input/KeywordsInput.js +0 -1
- package/dist/esm/components/keywords-input/KeywordsInput.styled.d.ts +0 -5
- package/dist/esm/components/keywords-input/index.d.ts +0 -1
- package/dist/esm/components/markdown/MarkdownRender.d.ts +0 -4
- package/dist/esm/components/markdown/MarkdownRender.js +0 -1
- package/dist/esm/components/markdown/index.d.ts +0 -2
- package/dist/esm/components/markdown/utils.d.ts +0 -25
- package/dist/esm/components/markdown/utils.js +0 -1
- package/dist/esm/components/multi-level-dropdown/GroupedMenuList.d.ts +0 -8
- package/dist/esm/components/multi-level-dropdown/GroupedMenuList.js +0 -1
- package/dist/esm/components/multi-level-dropdown/MenuItem.d.ts +0 -8
- package/dist/esm/components/multi-level-dropdown/MenuItem.js +0 -1
- package/dist/esm/components/multi-level-dropdown/MenuList.d.ts +0 -8
- package/dist/esm/components/multi-level-dropdown/MenuList.js +0 -1
- package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.d.ts +0 -3
- package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.js +0 -1
- package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.d.ts +0 -32
- package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.styled.js +0 -98
- package/dist/esm/components/multi-level-dropdown/index.d.ts +0 -1
- package/dist/esm/components/multi-level-dropdown/type.d.ts +0 -28
- package/dist/esm/components/navigation-hyperlink/NavigationHyperlink.d.ts +0 -9
- package/dist/esm/components/navigation-hyperlink/NavigationHyperlink.js +0 -3
- package/dist/esm/components/navigation-hyperlink/index.d.ts +0 -1
- package/dist/esm/components/plans/NewSubscriptionPlan.d.ts +0 -19
- package/dist/esm/components/plans/NewSubscriptionPlan.js +0 -1
- package/dist/esm/components/plans/SubscriptionPlansCollected.d.ts +0 -16
- package/dist/esm/components/plans/SubscriptionPlansCollected.js +0 -19
- package/dist/esm/components/post-live-checklist/PostLiveChecklist.d.ts +0 -18
- package/dist/esm/components/post-live-checklist/PostLiveChecklist.js +0 -1
- package/dist/esm/components/post-live-checklist/PostLiveChecklist.stories.d.ts +0 -12
- package/dist/esm/components/post-live-checklist/index.d.ts +0 -2
- package/dist/esm/components/post-live-checklist-item/PostLiveChecklistItem.d.ts +0 -10
- package/dist/esm/components/post-live-checklist-item/PostLiveChecklistItem.js +0 -1
- package/dist/esm/components/post-live-checklist-item/index.d.ts +0 -1
- package/dist/esm/components/product-picker/ProductPicker.styled.d.ts +0 -9
- package/dist/esm/components/product-picker/ProductPicker.styled.js +0 -1
- package/dist/esm/components/product-picker/ProductPickerModal.d.ts +0 -4
- package/dist/esm/components/product-picker/ProductPickerModal.js +0 -1
- package/dist/esm/components/product-picker/index.d.ts +0 -1
- package/dist/esm/components/product-picker/type.d.ts +0 -67
- package/dist/esm/components/product-picker-v2/ProductPickerShimmer.d.ts +0 -3
- package/dist/esm/components/product-picker-v2/ProductPickerShimmer.js +0 -1
- package/dist/esm/components/product-picker-v2/ProductPickerTag.d.ts +0 -22
- package/dist/esm/components/product-picker-v2/ProductPickerTag.js +0 -1
- package/dist/esm/components/product-picker-v2/collectionScreen.d.ts +0 -52
- package/dist/esm/components/product-picker-v2/collectionScreen.js +0 -1
- package/dist/esm/components/product-picker-v2/constants.d.ts +0 -27
- package/dist/esm/components/product-picker-v2/constants.js +0 -1
- package/dist/esm/components/product-picker-v2/emptyState.d.ts +0 -6
- package/dist/esm/components/product-picker-v2/emptyState.js +0 -8
- package/dist/esm/components/product-picker-v2/helpers/ProductHelper.d.ts +0 -56
- package/dist/esm/components/product-picker-v2/helpers/ProductHelper.js +0 -1
- package/dist/esm/components/product-picker-v2/index.d.ts +0 -2
- package/dist/esm/components/product-picker-v2/modal.d.ts +0 -110
- package/dist/esm/components/product-picker-v2/modal.js +0 -1
- package/dist/esm/components/product-picker-v2/product.d.ts +0 -44
- package/dist/esm/components/product-picker-v2/product.js +0 -1
- package/dist/esm/components/product-picker-v2/productInfoOverlay.d.ts +0 -19
- package/dist/esm/components/product-picker-v2/productInfoOverlay.js +0 -52
- package/dist/esm/components/product-picker-v2/productScreen.d.ts +0 -32
- package/dist/esm/components/product-picker-v2/productScreen.js +0 -1
- package/dist/esm/components/product-picker-v2/rearrangeScreen.d.ts +0 -23
- package/dist/esm/components/product-picker-v2/rearrangeScreen.js +0 -1
- package/dist/esm/components/product-picker-v2/reducers.d.ts +0 -41
- package/dist/esm/components/product-picker-v2/reducers.js +0 -1
- package/dist/esm/components/product-picker-v2/searchScreen.d.ts +0 -33
- package/dist/esm/components/product-picker-v2/searchScreen.js +0 -1
- package/dist/esm/components/product-picker-v2/selectedScreen.d.ts +0 -20
- package/dist/esm/components/product-picker-v2/selectedScreen.js +0 -1
- package/dist/esm/components/product-picker-v2/style.d.ts +0 -36
- package/dist/esm/components/product-picker-v2/style.js +0 -172
- package/dist/esm/components/product-picker-v2/type.d.ts +0 -19
- package/dist/esm/components/product-picker-v2/type.js +0 -1
- package/dist/esm/components/product-picker-v2/utility.d.ts +0 -52
- package/dist/esm/components/product-picker-v2/utility.js +0 -1
- package/dist/esm/components/product-picker-v2/variant.d.ts +0 -32
- package/dist/esm/components/product-picker-v2/variant.js +0 -1
- package/dist/esm/components/product-picker-v2/variantComponents.d.ts +0 -21
- package/dist/esm/components/product-picker-v2/variantComponents.js +0 -1
- package/dist/esm/components/progress-bar/CircularProgressBar.d.ts +0 -7
- package/dist/esm/components/progress-bar/CircularProgressBar.js +0 -1
- package/dist/esm/components/progress-bar-v2/ProgressBarV2.d.ts +0 -22
- package/dist/esm/components/progress-bar-v2/ProgressBarV2.js +0 -1
- package/dist/esm/components/progress-bar-v2/index.d.ts +0 -1
- package/dist/esm/components/radioList/RadioList.d.ts +0 -15
- package/dist/esm/components/radioList/RadioList.js +0 -1
- package/dist/esm/components/radioList/RadioList.styled.d.ts +0 -5
- package/dist/esm/components/radioList/RadioList.styled.js +0 -1
- package/dist/esm/components/radioList/index.d.ts +0 -1
- package/dist/esm/components/resizeImage/index.d.ts +0 -8
- package/dist/esm/components/resizeImage/index.js +0 -1
- package/dist/esm/components/searchBar/searchBar.js +0 -1
- package/dist/esm/components/shimmer-image/ShimmerImage.d.ts +0 -13
- package/dist/esm/components/shimmer-image/ShimmerImage.js +0 -1
- package/dist/esm/components/shimmer-image/ShimmerImage.stories.d.ts +0 -6
- package/dist/esm/components/shimmer-image/index.d.ts +0 -1
- package/dist/esm/components/side-modal/SideModal.d.ts +0 -22
- package/dist/esm/components/side-modal/SideModal.js +0 -1
- package/dist/esm/components/side-modal/SideModal.style.d.ts +0 -20
- package/dist/esm/components/side-modal/SideModal.style.js +0 -65
- package/dist/esm/components/side-modal/index.d.ts +0 -1
- package/dist/esm/components/slider/index.d.ts +0 -1
- package/dist/esm/components/slider/slider.d.ts +0 -10
- package/dist/esm/components/slider/slider.js +0 -1
- package/dist/esm/components/star-rating/Star.d.ts +0 -13
- package/dist/esm/components/star-rating/Star.js +0 -1
- package/dist/esm/components/star-rating/StarRating.d.ts +0 -11
- package/dist/esm/components/star-rating/StarRating.js +0 -1
- package/dist/esm/components/star-rating/index.d.ts +0 -1
- package/dist/esm/components/states/ShopifyScopeWrapper.d.ts +0 -14
- package/dist/esm/components/states/ShopifyScopeWrapper.js +0 -1
- package/dist/esm/components/tabs/Tabs.model.d.ts +0 -63
- package/dist/esm/components/tag/Tag.stories.d.ts +0 -22
- package/dist/esm/components/template-context-mapper/Mocks/constants.d.ts +0 -4364
- package/dist/esm/components/template-context-mapper/custom-hooks/useAdditionalVariables.d.ts +0 -12
- package/dist/esm/components/template-context-mapper/custom-hooks/useAdditionalVariables.js +0 -1
- package/dist/esm/components/template-context-mapper/helpers/WebpushTemplateHelper.d.ts +0 -57
- package/dist/esm/components/template-context-mapper/helpers/WebpushTemplateHelper.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/BackTrackComponent.d.ts +0 -4
- package/dist/esm/components/template-context-mapper/modalElements/BackTrackComponent.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/DiscountCodeComponent.d.ts +0 -4
- package/dist/esm/components/template-context-mapper/modalElements/DiscountCodeComponent.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/EditMediaModal.d.ts +0 -17
- package/dist/esm/components/template-context-mapper/modalElements/EditMediaModal.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/EditWebpushTemplate.d.ts +0 -10
- package/dist/esm/components/template-context-mapper/modalElements/EditWebpushTemplate.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/EditWhatsAppCarouselTemplateV2.d.ts +0 -24
- package/dist/esm/components/template-context-mapper/modalElements/EditWhatsAppCarouselTemplateV2.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/ProductBox.d.ts +0 -8
- package/dist/esm/components/template-context-mapper/modalElements/ProductBox.js +0 -47
- package/dist/esm/components/template-context-mapper/modalElements/QualityWarningModal.d.ts +0 -12
- package/dist/esm/components/template-context-mapper/modalElements/QueryParamsComponent.d.ts +0 -12
- package/dist/esm/components/template-context-mapper/modalElements/QueryParamsComponent.js +0 -11
- package/dist/esm/components/template-context-mapper/modalElements/TemplateAnalyticsComponent.d.ts +0 -16
- package/dist/esm/components/template-context-mapper/modalElements/TemplateAnalyticsComponent.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/TemplateAnalyticsSkeleton.d.ts +0 -4
- package/dist/esm/components/template-context-mapper/modalElements/TemplateAnalyticsSkeleton.js +0 -1
- package/dist/esm/components/template-context-mapper/modalElements/useEditWhtasappTemplateMedia.d.ts +0 -32
- package/dist/esm/components/template-context-mapper/modalElements/useEditWhtasappTemplateMedia.js +0 -1
- package/dist/esm/components/template-context-mapper/styles/TemplateAnalyticsStyles.d.ts +0 -9
- package/dist/esm/components/template-context-mapper/styles/TemplateAnalyticsStyles.js +0 -64
- package/dist/esm/components/template-context-mapper/utils/TemplateConstants.d.ts +0 -54
- package/dist/esm/components/template-context-mapper/utils/TemplateConstants.js +0 -1
- package/dist/esm/components/template-context-mapper/utils/constants.d.ts +0 -3
- package/dist/esm/components/template-context-mapper/utils/constants.js +0 -1
- package/dist/esm/components/template-context-mapper/utils/getFormattedMonthDate.d.ts +0 -1
- package/dist/esm/components/template-context-mapper/utils/getPreviewDimension.d.ts +0 -2
- package/dist/esm/components/template-context-mapper/utils/getPreviewDimension.js +0 -1
- package/dist/esm/components/template-context-mapper/utils/validateName.d.ts +0 -2
- package/dist/esm/components/template-context-mapper/utils/validateName.js +0 -1
- package/dist/esm/components/template-preview/RCS/RCSButtons.d.ts +0 -9
- package/dist/esm/components/template-preview/RCS/RCSButtons.js +0 -1
- package/dist/esm/components/template-preview/RCS/RCSChatHeader.d.ts +0 -2
- package/dist/esm/components/template-preview/RCS/RCSChatHeader.js +0 -1
- package/dist/esm/components/template-preview/RCS/RCSChatPreview.d.ts +0 -2
- package/dist/esm/components/template-preview/RCS/RCSChatPreview.js +0 -1
- package/dist/esm/components/template-preview/RCS/RCSMediaCard.d.ts +0 -14
- package/dist/esm/components/template-preview/RCS/RCSMediaCard.js +0 -1
- package/dist/esm/components/template-preview/RCS/RCSPreview.styled.d.ts +0 -33
- package/dist/esm/components/template-preview/RCS/RCSPreview.styled.js +0 -128
- package/dist/esm/components/template-preview/RCS/RCSTemplateLikePreview.d.ts +0 -3
- package/dist/esm/components/template-preview/RCS/RCSTemplateLikePreview.js +0 -8
- package/dist/esm/components/template-preview/WhatsApp/LimitedTimeOffer/LimitedTimeOffer.index.d.ts +0 -9
- package/dist/esm/components/template-preview/WhatsApp/LimitedTimeOffer/LimitedTimeOffer.index.js +0 -21
- package/dist/esm/components/template-preview/helpers/templateMiscHelper.d.ts +0 -8
- package/dist/esm/components/template-preview/helpers/templateMiscHelper.js +0 -1
- package/dist/esm/components/template-preview/models/RCSTemplate.d.ts +0 -139
- package/dist/esm/components/template-preview/models/RCSTemplate.js +0 -1
- package/dist/esm/components/template-preview/models/WebpushTemplate.d.ts +0 -78
- package/dist/esm/components/template-preview/models/WebpushTemplate.js +0 -1
- package/dist/esm/components/template-preview/models/WhatsappCarouselTemplate.d.ts +0 -111
- package/dist/esm/components/template-preview/models/types.d.ts +0 -10
- package/dist/esm/components/template-preview/webpush/WebpushPreview.d.ts +0 -8
- package/dist/esm/components/template-preview/webpush/WebpushPreview.js +0 -1
- package/dist/esm/components/template-preview/webpush/WebpushPreview.styled.d.ts +0 -1
- package/dist/esm/components/template-preview/webpush/WebpushPreview.styled.js +0 -70
- package/dist/esm/components/testimonial-card/TestimonialCard.d.ts +0 -17
- package/dist/esm/components/testimonial-card/TestimonialCard.js +0 -1
- package/dist/esm/components/testimonial-card/TestimonialCard.style.d.ts +0 -43
- package/dist/esm/components/testimonial-card/TestimonialCard.style.js +0 -1
- package/dist/esm/components/testimonial-card/index.d.ts +0 -1
- package/dist/esm/components/text-picker/TextPickerCategoryCard.d.ts +0 -12
- package/dist/esm/components/text-picker/TextPickerCategoryCard.js +0 -13
- package/dist/esm/components/text-picker/TextPickerFooter.d.ts +0 -6
- package/dist/esm/components/text-picker/TextPickerFooter.js +0 -13
- package/dist/esm/components/text-picker/TextPickerItemRow.d.ts +0 -11
- package/dist/esm/components/text-picker/TextPickerItemRow.js +0 -17
- package/dist/esm/components/text-picker/TextPickerModal.d.ts +0 -29
- package/dist/esm/components/text-picker/TextPickerModal.js +0 -26
- package/dist/esm/components/text-picker/TextPickerSelectAllRow.d.ts +0 -7
- package/dist/esm/components/text-picker/TextPickerSelectAllRow.js +0 -17
- package/dist/esm/components/text-picker/index.d.ts +0 -1
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.d.ts +0 -14
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.js +0 -1
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.style.d.ts +0 -1
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryCountIntentWiseModal.style.js +0 -42
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryResponseList.d.ts +0 -18
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryResponseList.js +0 -1
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryResponseList.style.d.ts +0 -1
- package/dist/esm/components/unsatisfactory-response-list/UnsatisfactoryResponseList.style.js +0 -38
- package/dist/esm/components/variable-picker-v3/Content.d.ts +0 -5
- package/dist/esm/components/variable-picker-v3/Content.js +0 -1
- package/dist/esm/components/variable-picker-v3/DefaultVariableContent.d.ts +0 -8
- package/dist/esm/components/variable-picker-v3/DefaultVariableContent.js +0 -1
- package/dist/esm/components/variable-picker-v3/NoResult.d.ts +0 -6
- package/dist/esm/components/variable-picker-v3/NoResult.js +0 -17
- package/dist/esm/components/variable-picker-v3/SubHeaderItems.d.ts +0 -14
- package/dist/esm/components/variable-picker-v3/SubHeaderItems.js +0 -1
- package/dist/esm/components/variable-picker-v3/VariablePicker.d.ts +0 -5
- package/dist/esm/components/variable-picker-v3/VariablePicker.js +0 -1
- package/dist/esm/components/variable-picker-v3/context.d.ts +0 -21
- package/dist/esm/components/variable-picker-v3/context.js +0 -1
- package/dist/esm/components/variable-picker-v3/highlightSearchText.d.ts +0 -1
- package/dist/esm/components/variable-picker-v3/highlightSearchText.js +0 -1
- package/dist/esm/components/variable-picker-v3/index.d.ts +0 -1
- package/dist/esm/components/variable-picker-v3/model.d.ts +0 -62
- package/dist/esm/components/variable-picker-v3/model.js +0 -1
- package/dist/esm/components/variable-picker-v3/recommendVaribles.d.ts +0 -1
- package/dist/esm/components/variable-picker-v3/recommendVaribles.js +0 -1
- package/dist/esm/components/variable-picker-v3/searchVariables.d.ts +0 -2
- package/dist/esm/components/variable-picker-v3/searchVariables.js +0 -1
- package/dist/esm/components/variable-picker-v3/styles.d.ts +0 -8
- package/dist/esm/components/variable-picker-v3/styles.js +0 -42
- package/dist/esm/components/vertical-full-screen-modal/component.d.ts +0 -24
- package/dist/esm/components/vertical-full-screen-modal/component.js +0 -1
- package/dist/esm/components/vertical-full-screen-modal/index.d.ts +0 -2
- package/dist/esm/components/vertical-full-screen-modal/styles.d.ts +0 -8
- package/dist/esm/components/vertical-full-screen-modal/styles.js +0 -45
- package/dist/esm/components/vertical-full-screen-modal/types.d.ts +0 -27
- package/dist/esm/components/whats-new/WhatsNew.d.ts +0 -23
- package/dist/esm/components/whats-new/WhatsNew.js +0 -1
- package/dist/esm/components/whats-new/WhatsNew.styles.d.ts +0 -11
- package/dist/esm/components/whats-new/WhatsNew.styles.js +0 -185
- package/dist/esm/components/whats-new/WhatsNew.types.d.ts +0 -64
- package/dist/esm/components/whats-new/WhatsNewButton.d.ts +0 -3
- package/dist/esm/components/whats-new/WhatsNewButton.js +0 -1
- package/dist/esm/components/whats-new/WhatsNewPanel.d.ts +0 -3
- package/dist/esm/components/whats-new/WhatsNewPanel.js +0 -1
- package/dist/esm/components/whats-new/WhatsNewProvider.d.ts +0 -4
- package/dist/esm/components/whats-new/WhatsNewProvider.js +0 -1
- package/dist/esm/components/whats-new/index.d.ts +0 -7
- package/dist/esm/components/whats-new/useWhatsNew.d.ts +0 -9
- package/dist/esm/components/whats-new/useWhatsNew.js +0 -1
- package/dist/esm/constants/zindex.d.ts +0 -7
- package/dist/esm/constants/zindex.js +0 -1
- package/dist/esm/hooks/useCurreny.d.ts +0 -3
- package/dist/esm/hooks/useCurreny.js +0 -1
- package/dist/esm/hooks/useWindowSize.d.ts +0 -2
- package/dist/esm/hooks/useWindowSize.js +0 -1
- package/dist/esm/node_modules/lodash.debounce/index.js +0 -1
- package/dist/esm/types/componentTypes.d.ts +0 -8
- package/dist/esm/types/componentTypes.js +0 -1
- package/dist/esm/utils/resizeImage.d.ts +0 -1
- package/dist/esm/utils/resizeImage.js +0 -1
- package/dist/esm/utils/validator.d.ts +0 -6
- package/dist/esm/utils/validator.js +0 -1
- package/dist/esm/utils/variableUtils.d.ts +0 -1
- package/dist/esm/utils/variableUtils.js +0 -1
|
@@ -1,5 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var
|
|
2
|
-
0% { opacity: 0.55; }
|
|
3
|
-
50% { opacity: 1; }
|
|
4
|
-
100% { opacity: 0.55; }
|
|
5
|
-
`,n=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh14"}:{target:"ea7i3sh14",label:"EditorSkeletonContainer"})("production"===process.env.NODE_ENV?{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px"}:{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUMyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:i}),S=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh13"}:{target:"ea7i3sh13",label:"EditorSkeletonLine"})("height:16px;border-radius:6px;width:",(I=>I.width),";background:#ececef;animation:",p," 1.1s ease-in-out infinite;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0NzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),k=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh12"}:{target:"ea7i3sh12",label:"SuggestionSessionContainer"})("production"===process.env.NODE_ENV?{name:"1xsbk0a",styles:"padding:12px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:auto"}:{name:"1xsbk0a",styles:"padding:12px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:auto",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0M4QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:i}),Q=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh11"}:{target:"ea7i3sh11",label:"SuggestionBaselineText"})("text-decoration:line-through;color:",R.COLORS.content.secondary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUQwQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),U=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh10"}:{target:"ea7i3sh10",label:"SuggestionControlsRow"})("production"===process.env.NODE_ENV?{name:"1yydxi7",styles:"display:flex;align-items:center;gap:8px"}:{name:"1yydxi7",styles:"display:flex;align-items:center;gap:8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkR5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:i}),s=F.default("span","production"===process.env.NODE_ENV?{target:"ea7i3sh9"}:{target:"ea7i3sh9",label:"SuggestionCounter"})("color:",R.COLORS.content.primary,";font-size:14px;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0VzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),v=F.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh8"}:{target:"ea7i3sh8",label:"SuggestionIconButton"})("border:0;background:transparent;padding:0;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:",R.COLORS.content.primary,";:disabled{opacity:0.35;cursor:not-allowed;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0UyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),z=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh7"}:{target:"ea7i3sh7",label:"InstructionContainer"})("production"===process.env.NODE_ENV?{name:"6cf6k2",styles:"padding:10px 12px 8px"}:{name:"6cf6k2",styles:"padding:10px 12px 8px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0Z3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:i}),w=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh6"}:{target:"ea7i3sh6",label:"InstructionInputRow"})("border:1px solid #f5a4c0;border-radius:10px;padding:8px 10px;display:flex;align-items:center;gap:10px;background:",R.COLORS.surface.standard,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUZ1QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),o=F.default("input","production"===process.env.NODE_ENV?{target:"ea7i3sh5"}:{target:"ea7i3sh5",label:"InstructionInput"})("flex:1;min-width:0;border:0;outline:none;font-size:14px;background:transparent;color:",R.COLORS.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEZzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),t=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh4"}:{target:"ea7i3sh4",label:"InstructionActions"})("production"===process.env.NODE_ENV?{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px"}:{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUdzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */",toString:i}),T=F.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh3"}:{target:"ea7i3sh3",label:"InstructionCancel"})("border:0;background:transparent;color:",R.COLORS.content.secondary,";font-size:14px;font-weight:500;padding:0;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBNEd3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),j=F.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh2"}:{target:"ea7i3sh2",label:"InstructionImprove"})("border:1px solid #5d3a72;color:#5d3a72;background:",R.COLORS.surface.standard,";border-radius:8px;padding:8px 14px;font-size:14px;line-height:1.1;font-weight:600;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUh5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),e=F.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh1"}:{target:"ea7i3sh1",label:"InstructionSuggestionList"})("margin-top:10px;border-radius:12px;background:",R.COLORS.surface.standard,";box-shadow:0 6px 18px rgba(0, 0, 0, 0.1);overflow:hidden;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0k2QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),D=F.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh0"}:{target:"ea7i3sh0",label:"InstructionSuggestionButton"})("width:100%;border:0;border-top:1px solid ",R.COLORS.stroke.primary,";background:",(I=>I.selected?"#e5f3e8":"transparent"),";color:",(I=>I.selected?"#1e6b34":R.COLORS.content.primary),";text-align:left;padding:12px 14px;font-size:14px;line-height:1.2;cursor:pointer;:first-of-type{border-top:0;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUlrRCIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMsIEZyYWdtZW50IGFzIF9GcmFnbWVudCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZWZyZXNoSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9yZWZyZXNoLnN2Zyc7XHJcbmltcG9ydCBUaHVtYnNEb3duSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfZG93bi5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzVXBJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3RodW1ic191cC5zdmcnO1xyXG5pbXBvcnQgeyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlciB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0Jhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmhlbHBlclwiO1xyXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSwgfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENPTE9SUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvVGhlbWVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJy4uL3Rvb2x0aXBzL1Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBCb2R5Q2FwdGlvbiB9IGZyb20gJy4uL1R5cG9ncmFwaHlTdHlsZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUywgREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgcmVzb2x2ZUFjdGlvblByb21wdHMsIH0gZnJvbSAnLi9haS9hY3Rpb25SZWdpc3RyeSc7XHJcbmltcG9ydCB7IGJ1aWxkQWN0aW9uUHJvbXB0LCByZXF1ZXN0QUlTdWdnZXN0aW9uIH0gZnJvbSAnLi9haS9hcGknO1xyXG5pbXBvcnQgeyBDb250YWluZXIsIE91dGVyQ29udGFpbmVyLCBUZXh0U3BhY2UgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogYXV0bztcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25CYXNlbGluZVRleHQgPSBzdHlsZWQuZGl2IGBcblx0dGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ29udHJvbHNSb3cgPSBzdHlsZWQuZGl2IGBcblx0ZGlzcGxheTogZmxleDtcblx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0Z2FwOiA4cHg7XG5gO1xyXG5jb25zdCBTdWdnZXN0aW9uQ291bnRlciA9IHN0eWxlZC5zcGFuIGBcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQucHJpbWFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25JY29uQnV0dG9uID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdHBhZGRpbmc6IDA7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0Um93ID0gc3R5bGVkLmRpdiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICNmNWE0YzA7XG5cdGJvcmRlci1yYWRpdXM6IDEwcHg7XG5cdHBhZGRpbmc6IDhweCAxMHB4O1xuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbnB1dCA9IHN0eWxlZC5pbnB1dCBgXG5cdGZsZXg6IDE7XG5cdG1pbi13aWR0aDogMDtcblx0Ym9yZGVyOiAwO1xuXHRvdXRsaW5lOiBub25lO1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQWN0aW9ucyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDEwcHg7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbkNhbmNlbCA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDA7XG5cdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5zZWNvbmRhcnl9O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGZvbnQtd2VpZ2h0OiA1MDA7XG5cdHBhZGRpbmc6IDA7XG5cdGN1cnNvcjogcG9pbnRlcjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW1wcm92ZSA9IHN0eWxlZC5idXR0b24gYFxuXHRib3JkZXI6IDFweCBzb2xpZCAjNWQzYTcyO1xuXHRjb2xvcjogIzVkM2E3Mjtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5cdGJvcmRlci1yYWRpdXM6IDhweDtcblx0cGFkZGluZzogOHB4IDE0cHg7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0bGluZS1oZWlnaHQ6IDEuMTtcblx0Zm9udC13ZWlnaHQ6IDYwMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25TdWdnZXN0aW9uTGlzdCA9IHN0eWxlZC5kaXYgYFxuXHRtYXJnaW4tdG9wOiAxMHB4O1xuXHRib3JkZXItcmFkaXVzOiAxMnB4O1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG5cdG92ZXJmbG93OiBoaWRkZW47XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0d2lkdGg6IDEwMCU7XG5cdGJvcmRlcjogMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICR7Q09MT1JTLnN0cm9rZS5wcmltYXJ5fTtcblx0YmFja2dyb3VuZDogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjZTVmM2U4JyA6ICd0cmFuc3BhcmVudCcpfTtcblx0Y29sb3I6ICR7KHByb3BzKSA9PiAocHJvcHMuc2VsZWN0ZWQgPyAnIzFlNmIzNCcgOiBDT0xPUlMuY29udGVudC5wcmltYXJ5KX07XG5cdHRleHQtYWxpZ246IGxlZnQ7XG5cdHBhZGRpbmc6IDEycHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4yO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5cdDpmaXJzdC1vZi10eXBlIHtcblx0XHRib3JkZXItdG9wOiAwO1xuXHR9XG5gO1xyXG5jb25zdCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZyA9IG5ldyBCYXNlV2hhdHNhcHBDb250ZW50TGFuZ0hlbHBlcigpO1xyXG5jb25zdCBXaWxkQ2FyZE1hcCA9IHtcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5CT0xEXTogJyonLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLklUQUxJQ106ICdfJyxcclxuICAgIFtFZGl0b3JBY3Rpb25UeXBlcy5TVFJJS0VUSFJPVUdIXTogJ34nLFxyXG59O1xyXG5mdW5jdGlvbiBnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICByZXR1cm4gYHdoYXRzYXBwLWVkaXRvci1yZXBocmFzZS1oaWdobGlnaHQtJHtlZGl0b3JJbnN0YW5jZUtleSB8fCAnZGVmYXVsdCd9YDtcclxufVxyXG5mdW5jdGlvbiBnZXRFZGl0RGlzdGFuY2Uob2xkVGV4dCwgbmV3VGV4dCkge1xyXG4gICAgY29uc3QgbSA9IG9sZFRleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgbiA9IG5ld1RleHQubGVuZ3RoO1xyXG4gICAgY29uc3QgZHAgPSBBcnJheShuICsgMSlcclxuICAgICAgICAuZmlsbCgwKVxyXG4gICAgICAgIC5tYXAoKF8sIGopID0+IGopO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHByZXZEaWFnb25hbCA9IGRwWzBdO1xyXG4gICAgICAgIGRwWzBdID0gaTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMTsgaiA8PSBuOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGRwW2pdO1xyXG4gICAgICAgICAgICBpZiAob2xkVGV4dFtpIC0gMV0gPT09IG5ld1RleHRbaiAtIDFdKSB7XHJcbiAgICAgICAgICAgICAgICBkcFtqXSA9IHByZXZEaWFnb25hbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRwW2pdID0gTWF0aC5taW4oZHBbaiAtIDFdLCBkcFtqXSwgcHJldkRpYWdvbmFsKSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJldkRpYWdvbmFsID0gdGVtcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZHBbbl07XHJcbn1cclxuZXhwb3J0IGNvbnN0IFdoYXRzQXBwVGV4dEVkaXRvciA9IFJlYWN0LmZvcndhcmRSZWYoKF9hLCByZWYpID0+IHtcclxuICAgIHZhciB7IG9uQ2hhbmdlLCBvbkNsaWNrVmFyaWFibGUsIHRleHQ6IGlucHV0VmFsdWUsIFJpZ2h0Q29tcG9uZW50LCBlcnJvciwgbGltaXQsIG9uRXJyb3IsIHJvd3MsIGFjdGlvbnMsIGVkaXRvckluc3RhbmNlS2V5LCB0ZW1wbGF0ZVR5cGUgPSAnbWFya2V0aW5nJywgdGVtcGxhdGVJZCwgcmVxdWVzdEV4ZWN1dG9yLCBiYXNlVXJsLCBlbmRwb2ludFBhdGgsIHVzZUNhc2UsIHN0b3JlSWQsIGFwaUFkYXB0ZXIsIGNvbnZlcnNhdGlvbklkID0gJ3doYXRzYXBwLXRlbXBsYXRlLWVkaXRvcicsIHN5c3RlbUlkID0gJ3doYXRzYXBwLXdyaXRlcicsIGludGVudCA9ICdkZWZhdWx0JywgZW5hYmxlZEFJQWN0aW9ucyA9IFtcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgIEFJRWRpdG9yQWN0aW9uVHlwZXMuU0hPUlRFTixcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVYUEFORCxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLkVNT0pJRlksXHJcbiAgICBdLCBkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucyA9IGZhbHNlLCBwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIGFpQWN0aW9uTWluQ2hhcnMsIGluc3RydWN0aW9uU3VnZ2VzdGlvbnMgPSBERUZBVUxUX0lOU1RSVUNUSU9OX1NVR0dFU1RJT05TLCBvbkFJRXZlbnQsIG9uQUlUYWdDb21wdXRlZCwgb25BSVRvbmVTZWxlY3QsIG9uQUlBY3Rpb25SZXF1ZXN0LCBvbkJ1aWxkQUlQcm9tcHQgfSA9IF9hLCB0ZXh0QXJlYVByb3BzID0gX19yZXN0KF9hLCBbXCJvbkNoYW5nZVwiLCBcIm9uQ2xpY2tWYXJpYWJsZVwiLCBcInRleHRcIiwgXCJSaWdodENvbXBvbmVudFwiLCBcImVycm9yXCIsIFwibGltaXRcIiwgXCJvbkVycm9yXCIsIFwicm93c1wiLCBcImFjdGlvbnNcIiwgXCJlZGl0b3JJbnN0YW5jZUtleVwiLCBcInRlbXBsYXRlVHlwZVwiLCBcInRlbXBsYXRlSWRcIiwgXCJyZXF1ZXN0RXhlY3V0b3JcIiwgXCJiYXNlVXJsXCIsIFwiZW5kcG9pbnRQYXRoXCIsIFwidXNlQ2FzZVwiLCBcInN0b3JlSWRcIiwgXCJhcGlBZGFwdGVyXCIsIFwiY29udmVyc2F0aW9uSWRcIiwgXCJzeXN0ZW1JZFwiLCBcImludGVudFwiLCBcImVuYWJsZWRBSUFjdGlvbnNcIiwgXCJkaXNhYmxlQnVpbHRJbkFJQWN0aW9uc1wiLCBcInByb21wdE92ZXJyaWRlc1wiLCBcInJlcGhyYXNlVG9uZXNcIiwgXCJhaUFjdGlvbk1pbkNoYXJzXCIsIFwiaW5zdHJ1Y3Rpb25TdWdnZXN0aW9uc1wiLCBcIm9uQUlFdmVudFwiLCBcIm9uQUlUYWdDb21wdXRlZFwiLCBcIm9uQUlUb25lU2VsZWN0XCIsIFwib25BSUFjdGlvblJlcXVlc3RcIiwgXCJvbkJ1aWxkQUlQcm9tcHRcIl0pO1xyXG4gICAgY29uc3QgdGV4dFNwYWNlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgW2N1cnJlbnRUZXh0LCBzZXRDdXJyZW50VGV4dF0gPSB1c2VTdGF0ZShpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIGNvbnN0IFtpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbcmVwaHJhc2VIaWdobGlnaHRDb3VudCwgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtpc0dlbmVyYXRpbmcsIHNldElzR2VuZXJhdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSwgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XHJcbiAgICBjb25zdCBbaW5zdHJ1Y3Rpb25UZXh0LCBzZXRJbnN0cnVjdGlvblRleHRdID0gdXNlU3RhdGUoJycpO1xyXG4gICAgY29uc3QgW3RvbmVCeUFjdGlvbiwgc2V0VG9uZUJ5QWN0aW9uXSA9IHVzZVN0YXRlKHt9KTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQmFzZVRleHQsIHNldFN1Z2dlc3Rpb25CYXNlVGV4dF0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQ2FuZGlkYXRlcywgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXNdID0gdXNlU3RhdGUoW10pO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25JbmRleCwgc2V0U3VnZ2VzdGlvbkluZGV4XSA9IHVzZVN0YXRlKDApO1xyXG4gICAgY29uc3QgW3N1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZV0gPSB1c2VTdGF0ZShudWxsKTtcclxuICAgIGNvbnN0IHJlcGhyYXNlSWRsZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGhpZ2hsaWdodFJlc2V0UmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcHJldkVsaWdpYmlsaXR5UmVmID0gdXNlUmVmKGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmVycmVkSHRtbFJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICBjb25zdCBhY3RpdmVBY3Rpb25Qcm9tcHRzID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpb25Qcm9tcHRzKHRlbXBsYXRlVHlwZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzKTtcclxuICAgIH0sIFtwcm9tcHRPdmVycmlkZXMsIHJlcGhyYXNlVG9uZXMsIHRlbXBsYXRlVHlwZV0pO1xyXG4gICAgY29uc3QgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcXVlcnkgPSBpbnN0cnVjdGlvblRleHQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgaWYgKCFxdWVyeSlcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmZpbHRlcigoc3VnZ2VzdGlvbikgPT4gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSk7XHJcbiAgICB9LCBbaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucywgaW5zdHJ1Y3Rpb25UZXh0XSk7XHJcbiAgICBjb25zdCBtaW5DaGFyc0J5QWN0aW9uID0gdXNlTWVtbygoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9BSV9BQ1RJT05fTUlOX0NIQVJTKSwgKGFpQWN0aW9uTWluQ2hhcnMgfHwge30pKTtcclxuICAgIH0sIFthaUFjdGlvbk1pbkNoYXJzXSk7XHJcbiAgICBjb25zdCByZXBocmFzZU1pbkNoYXJzID0gbWluQ2hhcnNCeUFjdGlvbltBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXSB8fFxyXG4gICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1tBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFXTtcclxuICAgIGNvbnN0IGVtaXRBSUV2ZW50ID0gdXNlQ2FsbGJhY2soKG5hbWUsIHBheWxvYWQpID0+IHtcclxuICAgICAgICBvbkFJRXZlbnQgPT09IG51bGwgfHwgb25BSUV2ZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJRXZlbnQobmFtZSwgcGF5bG9hZCk7XHJcbiAgICB9LCBbb25BSUV2ZW50XSk7XHJcbiAgICBjb25zdCBzZXRFZGl0b3JUZXh0ID0gdXNlQ2FsbGJhY2soKG5leHRUZXh0KSA9PiB7XHJcbiAgICAgICAgc2V0Q3VycmVudFRleHQoKHByZXYpID0+IChwcmV2ID09PSBuZXh0VGV4dCA/IHByZXYgOiBuZXh0VGV4dCkpO1xyXG4gICAgfSwgW10pO1xyXG4gICAgY29uc3QgZW1pdENoYW5nZVdpdGhHdWFyZCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dFRleHQubGVuZ3RoID4gTEFSR0VfSU5QVVRfVEhSRVNIT0xEKSB7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgbmV4dFRleHQpO1xyXG4gICAgICAgICAgICBkZWZlcnJlZEh0bWxSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICAgICAgICAgIH0sIDE2KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwobmV4dFRleHQpKTtcclxuICAgIH0sIFtvbkNoYW5nZV0pO1xyXG4gICAgY29uc3QgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQobnVsbCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoW10pO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShudWxsKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcclxuICAgICAgICBpZiAocmVwaHJhc2VIaWdobGlnaHRDb3VudCA+PSBNQVhfUkVQSFJBU0VfSElHSExJR0hUUykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5leHRDb3VudCA9IHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgKyAxO1xyXG4gICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQobmV4dENvdW50KTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSwgU3RyaW5nKG5leHRDb3VudCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQodHJ1ZSk7XHJcbiAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldElzUmVwaHJhc2VIaWdobGlnaHRlZChmYWxzZSk7XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXksIHJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZU9uQ2hhbmdlKGUpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gc2V0Q2FyZXRQb3NpdGlvbihjYXJldFBvcykge1xyXG4gICAgICAgIGNvbnN0IGVsZW0gPSB0ZXh0U3BhY2VSZWYgPT09IG51bGwgfHwgdGV4dFNwYWNlUmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICBpZiAoZWxlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtLnNlbGVjdGlvblN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnNlbGVjdGlvbkVuZCA9IGNhcmV0UG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkFjdGlvblNlbGVjdChhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZENhcmQgPSBXaWxkQ2FyZE1hcFthY3Rpb25UeXBlXTtcclxuICAgICAgICBpZiAod2lsZENhcmQgJiYgdGV4dFNwYWNlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBpbnNlcnRUZXh0QXRJbmRleCh3aWxkQ2FyZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgc2V0Q2FyZXRQb3NpdGlvbihzdGFydCArIDEpO1xyXG4gICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCh0ZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gYWRkVGV4dE9yV3JhcCh3aWxkQ2FyZCk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gb25FbW9qaUFkZGl0aW9uKGVtb2ppKSB7XHJcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0KGVtb2ppKTtcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYWRkVGV4dE9yV3JhcCh0ZXh0VG9BZGQpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpbGRDYXJkID0gdGV4dFRvQWRkO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgLyoqIG5vdGhpbmcgaXMgc2VsZWN0ZWQgKi9cclxuICAgICAgICAgICAgICAgIC8qKiBzbyBhcHBlbmQgdGhlIHdpbGRjYXJkIGF0IHRoZSBlbmQgKi9cclxuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZXh0KHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRleHQgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy53cmFwcFdpbGRjYXJkKHN0YXJ0LCBlbmQsIHdpbGRDYXJkLCB0ZXh0KTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKHRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0ZXh0OiB0ZXh0LCBodG1sOiB0ZXh0IH07XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0KHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IChfYiA9IChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xyXG4gICAgICAgIGlmICh0ZXh0U3BhY2VSZWYuY3VycmVudCAmJiB0ZXh0VG9BZGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25TdGFydDtcclxuICAgICAgICAgICAgY29uc3QgZW5kID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgc3RhcnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGluc2VydFRleHRBdEluZGV4KHRleHRUb0FkZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgX2EsIF9iO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgaW5kZXgpICsgdGV4dFRvQWRkICsgdGV4dC5zbGljZShpbmRleCk7XHJcbiAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCh0ZXh0KTtcclxuICAgICAgICByZXR1cm4geyB0ZXh0LCBodG1sIH07XHJcbiAgICB9XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhZWRpdG9ySW5zdGFuY2VLZXkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBjYWNoZWQgPSBOdW1iZXIoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShnZXRIaWdobGlnaHRTdG9yYWdlS2V5KGVkaXRvckluc3RhbmNlS2V5KSkgfHxcclxuICAgICAgICAgICAgJzAnKTtcclxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihjYWNoZWQpKSB7XHJcbiAgICAgICAgICAgIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnQoY2FjaGVkKTtcclxuICAgICAgICB9XHJcbiAgICB9LCBbZWRpdG9ySW5zdGFuY2VLZXldKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmICghaXNFbGlnaWJsZSkge1xyXG4gICAgICAgICAgICBwcmV2RWxpZ2liaWxpdHlSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXByZXZFbGlnaWJpbGl0eVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICAgICAgcHJldkVsaWdpYmlsaXR5UmVmLmN1cnJlbnQgPSB0cnVlO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCByZXBocmFzZU1pbkNoYXJzLCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IGV4ZWN1dGVBSUFjdGlvbiA9IHVzZUNhbGxiYWNrKChhY3Rpb25UeXBlLCByZWdlbmVyYXRlRXhpc3RpbmcgPSBmYWxzZSwgaW5zdHJ1Y3Rpb25PdmVycmlkZSwgdG9uZU92ZXJyaWRlSWQsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYywgX2Q7XHJcbiAgICAgICAgaWYgKCFvbkFJQWN0aW9uUmVxdWVzdCAmJlxyXG4gICAgICAgICAgICAhYXBpQWRhcHRlciAmJlxyXG4gICAgICAgICAgICAoIXJlcXVlc3RFeGVjdXRvciB8fCAhYmFzZVVybCkpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdBSSBjb25maWd1cmF0aW9uIG1pc3NpbmcnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWN1cnJlbnRUZXh0LnRyaW0oKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1pbkNoYXJzRm9yQWN0aW9uID0gbWluQ2hhcnNCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgNTA7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRUZXh0Lmxlbmd0aCA8IG1pbkNoYXJzRm9yQWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmIChyZWdlbmVyYXRlRXhpc3RpbmcgJiYgIWNhblJlZ2VuZXJhdGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBiYXNlQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICBjb25zdCBjb25maWcgPSBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSA9PT0gJ3V0aWxpdHknICYmXHJcbiAgICAgICAgICAgIGFjdGlvblZhcmlhbnQgPT09IEFJQWN0aW9uVmFyaWFudC5SRVBIUkFTRVxyXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgbGFiZWw6ICdSZXBocmFzZScsIGJhc2VQcm9tcHQ6IFVUSUxJVFlfUkVQSFJBU0VfUFJPTVBUIH0pIDogYmFzZUNvbmZpZztcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmVJZCA9IHRvbmVPdmVycmlkZUlkIHx8XHJcbiAgICAgICAgICAgIHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICBjb25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAoKF9jID0gKF9iID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2JbMF0pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pZCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUb25lID0gKF9kID0gY29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuZmluZCgodG9uZSkgPT4gdG9uZS5pZCA9PT0gc2VsZWN0ZWRUb25lSWQpO1xyXG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uRm9yUHJvbXB0ID0gaW5zdHJ1Y3Rpb25PdmVycmlkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gaW5zdHJ1Y3Rpb25PdmVycmlkZVxyXG4gICAgICAgICAgICA6IGluc3RydWN0aW9uVGV4dDtcclxuICAgICAgICBjb25zdCBwcm9tcHQgPSAob25CdWlsZEFJUHJvbXB0ID09PSBudWxsIHx8IG9uQnVpbGRBSVByb21wdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CdWlsZEFJUHJvbXB0KHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCxcclxuICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICB0b25lTGFiZWw6IHNlbGVjdGVkVG9uZSA9PT0gbnVsbCB8fCBzZWxlY3RlZFRvbmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkVG9uZS5sYWJlbCxcclxuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgfSkpIHx8XHJcbiAgICAgICAgICAgIGJ1aWxkQWN0aW9uUHJvbXB0KHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBzZXRJc0dlbmVyYXRpbmcodHJ1ZSk7XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2FjdGlvbl90cmlnZ2VyZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvbkFJQWN0aW9uUmVxdWVzdFxyXG4gICAgICAgICAgICAgICAgPyB5aWVsZCBvbkFJQWN0aW9uUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICB0b25lSWQ6IHNlbGVjdGVkVG9uZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICA6IHlpZWxkIHJlcXVlc3RBSVN1Z2dlc3Rpb24oe1xyXG4gICAgICAgICAgICAgICAgICAgIGFwaUFkYXB0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEV4ZWN1dG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnRQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb21wdCxcclxuICAgICAgICAgICAgICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICAgICAgICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgICAgICAgICA/IHJlc3VsdC50cmltKClcclxuICAgICAgICAgICAgICAgIDogKChyZXN1bHQgPT09IG51bGwgfHwgcmVzdWx0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiByZXN1bHQuYm9keSkgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghcmVnZW5lcmF0ZUV4aXN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQmFzZVRleHQoY3VycmVudFRleHQpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUoYWN0aW9uVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcyhbY2FuZGlkYXRlXSk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkNhbmRpZGF0ZXMoKHByZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBbLi4ucHJldiwgY2FuZGlkYXRlXS5zbGljZSgwLCBNQVhfU1VHR0VTVElPTlMpO1xyXG4gICAgICAgICAgICAgICAgc2V0U3VnZ2VzdGlvbkluZGV4KG5leHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIG9uRXJyb3IgPT09IG51bGwgfHwgb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FcnJvcignRmFpbGVkIHRvIGdlbmVyYXRlIEFJIHN1Z2dlc3Rpb24nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHNldElzR2VuZXJhdGluZyhmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSksIFtcclxuICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgYmFzZVVybCxcclxuICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICBpc0dlbmVyYXRpbmcsXHJcbiAgICAgICAgY2FuUmVnZW5lcmF0ZSxcclxuICAgICAgICBhY3RpdmVBY3Rpb25Qcm9tcHRzLFxyXG4gICAgICAgIHRvbmVCeUFjdGlvbixcclxuICAgICAgICBpbnN0cnVjdGlvblRleHQsXHJcbiAgICAgICAgZW1pdEFJRXZlbnQsXHJcbiAgICAgICAgdGVtcGxhdGVJZCxcclxuICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICBpbnRlbnQsXHJcbiAgICAgICAgY29udmVyc2F0aW9uSWQsXHJcbiAgICAgICAgc3lzdGVtSWQsXHJcbiAgICAgICAgdXNlQ2FzZSxcclxuICAgICAgICBzdG9yZUlkLFxyXG4gICAgICAgIHRlbXBsYXRlVHlwZSxcclxuICAgICAgICBvbkVycm9yLFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICAgICAgb25BSUFjdGlvblJlcXVlc3QsXHJcbiAgICAgICAgb25CdWlsZEFJUHJvbXB0LFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVBY2NlcHRTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghYWN0aXZlQ2FuZGlkYXRlIHx8ICFzdWdnZXN0aW9uQmFzZVRleHQgfHwgIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQoYWN0aXZlQ2FuZGlkYXRlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9hY2NlcHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkQ2hhcmFjdGVycyA9IGdldEVkaXREaXN0YW5jZShzdWdnZXN0aW9uQmFzZVRleHQsIGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSBNYXRoLm1heChzdWdnZXN0aW9uQmFzZVRleHQubGVuZ3RoLCBhY3RpdmVDYW5kaWRhdGUubGVuZ3RoLCAxKTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VQZXJjZW50ID0gY2hhbmdlZENoYXJhY3RlcnMgLyB0ZW1wbGF0ZUxlbmd0aDtcclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQoe1xyXG4gICAgICAgICAgICBjaGFuZ2VkQ2hhcmFjdGVycyxcclxuICAgICAgICAgICAgdGVtcGxhdGVMZW5ndGgsXHJcbiAgICAgICAgICAgIGNoYW5nZVBlcmNlbnQsXHJcbiAgICAgICAgICAgIGlzQWlUYWdnZWQ6IGNoYW5nZVBlcmNlbnQgPj0gMC41LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgIH0sIFtcclxuICAgICAgICBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkJhc2VUZXh0LFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNldEVkaXRvclRleHQsXHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIG9uQUlUYWdDb21wdXRlZCxcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uLFxyXG4gICAgXSk7XHJcbiAgICBjb25zdCBoYW5kbGVSZWplY3RTdWdnZXN0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xyXG4gICAgICAgIGlmICghc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfc3VnZ2VzdGlvbl9kaXNjYXJkZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW2NsZWFyU3VnZ2VzdGlvblNlc3Npb24sIGVtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdGVtcGxhdGVJZF0pO1xyXG4gICAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjaygocmF0aW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9mZWVkYmFja19zdWJtaXR0ZWQnLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbl90eXBlOiBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgdGVtcGxhdGVfaWQ6IHRlbXBsYXRlSWQsXHJcbiAgICAgICAgICAgIHJhdGluZyxcclxuICAgICAgICAgICAgY2FuZGlkYXRlX2luZGV4OiBzdWdnZXN0aW9uSW5kZXggKyAxLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW2VtaXRBSUV2ZW50LCBzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc3VnZ2VzdGlvbkluZGV4LCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBhaUhlYWRlckFjdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcclxuICAgICAgICBpZiAoZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gZW5hYmxlZEFJQWN0aW9ucy5tYXAoKGFjdGlvblR5cGUpID0+IHtcclxuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkNvbmZpZyA9IGFjdGl2ZUFjdGlvblByb21wdHNbYWN0aW9uVHlwZV07XHJcbiAgICAgICAgICAgIGNvbnN0IHRvbmVJZCA9IHRvbmVCeUFjdGlvblthY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnLmRlZmF1bHRUb25lSWQgfHxcclxuICAgICAgICAgICAgICAgICgoX2IgPSAoX2EgPSBhY3Rpb25Db25maWcudG9uZXMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVswXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlkKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uQ29uZmlnLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgaXNQcmltYXJ5OiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLFxyXG4gICAgICAgICAgICAgICAgbG9hZGluZzogaXNHZW5lcmF0aW5nICYmIHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWQ6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWN1cnJlbnRUZXh0LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0Lmxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGlzR2VuZXJhdGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUpLFxyXG4gICAgICAgICAgICAgICAgc2hvd1RvbmVEcm9wZG93bjogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICEhKChfYyA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCksXHJcbiAgICAgICAgICAgICAgICB0b25lczogYWN0aW9uQ29uZmlnLnRvbmVzLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUb25lSWQ6IHRvbmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH0sIFtcclxuICAgICAgICBlbmFibGVkQUlBY3Rpb25zLFxyXG4gICAgICAgIGRpc2FibGVCdWlsdEluQUlBY3Rpb25zLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSxcclxuICAgICAgICBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICAgICAgaXNSZXBocmFzZUhpZ2hsaWdodGVkLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIG1pbkNoYXJzQnlBY3Rpb24sXHJcbiAgICBdKTtcclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWRkVGV4dE9yV3JhcCxcclxuICAgICAgICAgICAgYWRkVGV4dCxcclxuICAgICAgICAgICAgZ2V0KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9LCBbYWRkVGV4dE9yV3JhcCwgYWRkVGV4dCwgY3VycmVudFRleHRdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHNldEVkaXRvclRleHQoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICB9LCBbaW5wdXRWYWx1ZSwgc2V0RWRpdG9yVGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoIWxpbWl0IHx8ICFvbkVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gY3VycmVudFRleHQubGVuZ3RoID4gbGltaXQgPyBMSU1JVF9SRUFDSEVEIDogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogJyc7XHJcbiAgICAgICAgaWYgKGxhc3RFbWl0dGVkRWRpdG9yRXJyb3JSZWYuY3VycmVudCA9PT0gbmV4dEVycm9yKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID0gbmV4dEVycm9yO1xyXG4gICAgICAgIG9uRXJyb3IobmV4dEVycm9yKTtcclxuICAgIH0sIFtjdXJyZW50VGV4dCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yXSk7XHJcbiAgICByZXR1cm4gKF9qc3hzKE91dGVyQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCB7IGNoaWxkcmVuOiBbX2pzeChTdWdnZXN0aW9uQmFzZWxpbmVUZXh0LCB7IGNoaWxkcmVuOiBzdWdnZXN0aW9uQmFzZVRleHQgfSksIF9qc3goXCJkaXZcIiwgeyBjaGlsZHJlbjogYWN0aXZlQ2FuZGlkYXRlIH0pLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJSZWdlbmVyYXRlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBpc0dlbmVyYXRpbmcsIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oc3VnZ2VzdGlvbkFjdGlvblR5cGUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBfanN4KFJlZnJlc2hJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpKSA6IG51bGwsIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzY2FyZFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2NhcmQgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiBoYW5kbGVSZWplY3RTdWdnZXN0aW9uIH0sIHsgY2hpbGRyZW46IF9qc3goQ3Jvc3NJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSkgfSkpLCBfanN4KFRvb2x0aXAsIE9iamVjdC5hc3NpZ24oeyBib2R5OiBcIkFjY2VwdFwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkFjY2VwdCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDaGVja0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSldIH0pXSB9KSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZS5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXN0ZWRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gKChfYSA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0aW9uU3RhcnQpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kID0gKChfYiA9IHRleHRTcGFjZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2VsZWN0aW9uRW5kKSB8fCBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0VGV4dCA9IGN1cnJlbnRUZXh0LnNsaWNlKDAsIHN0YXJ0KSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlZFRleHQgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGV4dC5zbGljZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRvclRleHQobmV4dFRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKG5leHRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiBudWxsLCBfanN4KFdoYXRzQXBwVGV4dEVkaXRvckhlYWRlciwgeyBhY3Rpb25zOiBhY3Rpb25zLCByZWY6IHRleHRTcGFjZVJlZiwgb25BY3Rpb25TZWxlY3Q6IG9uQWN0aW9uU2VsZWN0LCBSaWdodENvbXBvbmVudDogUmlnaHRDb21wb25lbnQsIG9uRW1vamlDbGljazogb25FbW9qaUFkZGl0aW9uLCBhaUFjdGlvbnM6IGFpSGVhZGVyQWN0aW9ucywgZGlzYWJsZUFsbEFjdGlvbnM6IHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiB8fCBpc0dlbmVyYXRpbmcsIGluc3RydWN0aW9uQWN0aXZlOiBpc0luc3RydWN0aW9uSW5wdXRWaXNpYmxlLCBvbkFJSW5zdHJ1Y3Rpb25zQ2xpY2s6ICgpID0+IHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUodHJ1ZSksIG9uQUlUb25lQ2hhbmdlOiAoYWN0aW9uVHlwZSwgdG9uZUlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUb25lQnlBY3Rpb24oKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFthY3Rpb25UeXBlXTogdG9uZUlkIH0pKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkFJVG9uZVNlbGVjdCA9PT0gbnVsbCB8fCBvbkFJVG9uZVNlbGVjdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSVRvbmVTZWxlY3QoYWN0aW9uVHlwZSwgdG9uZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUFJQWN0aW9uKGFjdGlvblR5cGUsIGZhbHNlLCB1bmRlZmluZWQsIHRvbmVJZCwgQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkFJQWN0aW9uQ2xpY2s6IChhY3Rpb25UeXBlLCBhY3Rpb25WYXJpYW50ID0gQUlBY3Rpb25WYXJpYW50LkRFRkFVTFQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTYW1lIGFjdGlvbiBzaG91bGQgbm90IHJldHJpZ2dlciBmcm9tIGNoaXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2VuZXJhdGUgaXMgb25seSB2aWEgZXhwbGljaXQgcmVnZW5lcmF0ZSBjb250cm9sLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBhY3Rpb24gc3RhcnRzIGEgZnJlc2ggc3VnZ2VzdGlvbiBzZXNzaW9uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhY3Rpb25WYXJpYW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSB9KV0gfSkpLCBlcnJvciAmJiBlcnJvciAhPT0gTElNSVRfUkVBQ0hFRCA/IChfanN4cyhcImRpdlwiLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHsgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDYsIGFsaWduSXRlbXM6ICdjZW50ZXInIH0gfSwgeyBjaGlsZHJlbjogW19qc3goSW5mb0ljb24sIHsgd2lkdGg6IDE2LCBoZWlnaHQ6IDE2LCBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSksIF9qc3goQm9keUNhcHRpb24sIE9iamVjdC5hc3NpZ24oeyBjb2xvcjogQ09MT1JTLmNvbnRlbnQubmVnYXRpdmUgfSwgeyBjaGlsZHJlbjogZXJyb3IgfSkpXSB9KSkpIDogKF9qc3goX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBsaW1pdCA/IChfanN4cyhCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBlcnJvciA9PT0gTElNSVRfUkVBQ0hFRCB8fCBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDT0xPUlMuY29udGVudC5uZWdhdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xPUlMuY29udGVudC5zZWNvbmRhcnksXHJcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBbY3VycmVudFRleHQubGVuZ3RoLCBcIi9cIiwgbGltaXRdIH0pKSkgOiAoX2pzeChfRnJhZ21lbnQsIHt9KSkgfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9V2hhdHNBcHBUZXh0RWRpdG9yLmpzLm1hcCJdfQ== */")),L=new B.BaseWhatsappContentLangHelper,K={[Y.EditorActionTypes.BOLD]:"*",[Y.EditorActionTypes.ITALIC]:"_",[Y.EditorActionTypes.STRIKETHROUGH]:"~"};function O(I){return`whatsapp-editor-rephrase-highlight-${I||"default"}`}const P=h.default.forwardRef(((I,A)=>{var{onChange:B,onClickVariable:y,text:F,RightComponent:h,error:i,limit:p,onError:P,rows:E,actions:f,editorInstanceKey:M,templateType:r="marketing",templateId:q,requestExecutor:_,baseUrl:$,endpointPath:II,useCase:gI,storeId:CI,apiAdapter:AI,conversationId:cI="whatsapp-template-editor",systemId:lI="whatsapp-writer",intent:bI="default",enabledAIActions:XI=[Y.AIEditorActionTypes.REPHRASE,Y.AIEditorActionTypes.SHORTEN,Y.AIEditorActionTypes.EXPAND,Y.AIEditorActionTypes.EMOJIFY],disableBuiltInAIActions:GI=!1,promptOverrides:ZI,rephraseTones:dI,aiActionMinChars:VI,instructionSuggestions:WI=N.DEFAULT_INSTRUCTION_SUGGESTIONS,onAIEvent:BI,onAITagComputed:HI,onAIToneSelect:RI,onAIActionRequest:uI,onBuildAIPrompt:JI}=I,NI=g.__rest(I,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions","editorInstanceKey","templateType","templateId","requestExecutor","baseUrl","endpointPath","useCase","storeId","apiAdapter","conversationId","systemId","intent","enabledAIActions","disableBuiltInAIActions","promptOverrides","rephraseTones","aiActionMinChars","instructionSuggestions","onAIEvent","onAITagComputed","onAIToneSelect","onAIActionRequest","onBuildAIPrompt"]);const mI=H.useRef(null),[xI,YI]=H.useState(F||""),[yI,FI]=H.useState(!1),[hI,iI]=H.useState(0),[aI,pI]=H.useState(!1),[nI,SI]=H.useState(!1),[kI,QI]=H.useState(""),[UI,sI]=H.useState({}),[vI,zI]=H.useState(null),[wI,oI]=H.useState([]),[tI,TI]=H.useState(0),[jI,eI]=H.useState(null),DI=H.useRef(null),LI=H.useRef(null),KI=H.useRef(!1),OI=H.useRef(null),PI=H.useRef(null),EI=H.useMemo((()=>N.resolveActionPrompts(r,ZI,dI)),[ZI,dI,r]),fI=H.useMemo((()=>{const I=kI.trim().toLowerCase();return I?WI.filter((g=>g.toLowerCase().includes(I))):[]}),[WI,kI]),MI=H.useMemo((()=>Object.assign(Object.assign({},N.DEFAULT_AI_ACTION_MIN_CHARS),VI||{})),[VI]),rI=MI[Y.AIEditorActionTypes.REPHRASE]||N.DEFAULT_AI_ACTION_MIN_CHARS[Y.AIEditorActionTypes.REPHRASE],qI=H.useCallback(((I,g)=>{null==BI||BI(I,g)}),[BI]),_I=H.useCallback((I=>{YI((g=>g===I?g:I))}),[]),$I=H.useCallback((I=>{if(OI.current&&clearTimeout(OI.current),I.length>1200)return null==B||B(I,I),void(OI.current=setTimeout((()=>{null==B||B(I,L.getHTML(I))}),16));null==B||B(I,L.getHTML(I))}),[B]),Ig=H.useCallback((()=>{zI(null),oI([]),TI(0),eI(null)}),[]),gg=H.useCallback((()=>{if(hI>=5)return;const I=hI+1;iI(I),"undefined"!=typeof window&&M&&sessionStorage.setItem(O(M),String(I)),FI(!0),LI.current&&clearTimeout(LI.current),LI.current=setTimeout((()=>{FI(!1)}),1200)}),[M,hI]);function Cg(I){const g=null==mI?void 0:mI.current;null!=g&&(g.selectionStart?(g.focus(),g.selectionEnd=I):g.focus())}function Ag(I){var g,C;let A=null!==(C=null===(g=mI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(mI.current&&I){const g=mI.current.selectionStart,C=mI.current.selectionEnd,c=I;if(g===C)return cg(c);{A=L.wrappWildcard(g,C,c,A);const I=L.getHTML(A);return _I(A),{text:A,html:I}}}return{text:A,html:A}}function cg(I){var g,C;const A=null!==(C=null===(g=mI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(mI.current&&I){const g=mI.current.selectionStart;if(g===mI.current.selectionEnd)return lg(I,g)}return{text:A,html:A}}function lg(I,g){var C,A;let c=null!==(A=null===(C=mI.current)||void 0===C?void 0:C.value)&&void 0!==A?A:"";c=c.slice(0,g)+I+c.slice(g);const l=L.getHTML(c);return _I(c),{text:c,html:l}}H.useEffect((()=>{if("undefined"==typeof window||!M)return;const I=Number(sessionStorage.getItem(O(M))||"0");Number.isNaN(I)||iI(I)}),[M]),H.useEffect((()=>{if(!(xI.length>=rI))return KI.current=!1,FI(!1),void(DI.current&&(clearTimeout(DI.current),DI.current=null));KI.current||gg(),DI.current&&clearTimeout(DI.current),DI.current=setTimeout((()=>{gg()}),3e3),KI.current=!0}),[xI,rI,gg]),H.useEffect((()=>()=>{DI.current&&clearTimeout(DI.current),LI.current&&clearTimeout(LI.current),OI.current&&clearTimeout(OI.current)}),[]);const bg=wI[tI]||"",Xg=wI.length<3,Gg=!!vI&&wI.length>0,Zg=wI.length<=1||tI<=0,dg=wI.length<=1||tI>=wI.length-1,Vg=H.useCallback((function(I){let C=arguments.length>1&&void 0!==arguments[1]&&arguments[1],A=arguments.length>2?arguments[2]:void 0,c=arguments.length>3?arguments[3]:void 0,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:Y.AIActionVariant.DEFAULT;return g.__awaiter(void 0,void 0,void 0,(function*(){var g,b,X;if(!(uI||AI||_&&$))return void(null==P||P("AI configuration missing"));if(!xI.trim())return;const G=MI[I]||N.DEFAULT_AI_ACTION_MIN_CHARS[I]||50;if(xI.length<G)return;if(aI)return;if(C&&!Xg)return;const Z=EI[I],d=I===Y.AIEditorActionTypes.REPHRASE&&"utility"===r&&l===Y.AIActionVariant.REPHRASE?Object.assign(Object.assign({},Z),{label:"Rephrase",basePrompt:"Rephrase this WhatsApp utility template to improve clarity and readability while preserving variables, intent, and compliance."}):Z,V=c||UI[I]||d.defaultToneId||(null===(b=null===(g=d.tones)||void 0===g?void 0:g[0])||void 0===b?void 0:b.id),W=null===(X=d.tones)||void 0===X?void 0:X.find((I=>I.id===V)),B=void 0!==A?A:kI,H=(null==JI?void 0:JI({actionType:I,actionVariant:l,currentText:xI,templateType:r,config:d,toneId:V,toneLabel:null==W?void 0:W.label,instructionText:B||void 0}))||m.buildActionPrompt({config:d,currentText:xI,selectedToneId:V,instructionText:B});pI(!0),qI("ai_action_triggered",{action_type:I,template_id:q});try{const g=uI?yield uI({actionType:I,actionVariant:l,currentText:xI,templateType:r,toneId:V,toneLabel:null==W?void 0:W.label,instructionText:B||void 0,prompt:H}):yield m.requestAISuggestion({apiAdapter:AI,requestExecutor:_,baseUrl:$,endpointPath:II,prompt:H,intent:bI,conversationId:cI,systemId:lI,useCase:gI,storeId:CI}),A="string"==typeof g?g.trim():((null==g?void 0:g.body)||"").trim();if(!A)return;if(!C)return zI(xI),eI(I),oI([A]),void TI(0);oI((I=>{const g=[...I,A].slice(0,3);return TI(g.length-1),g}))}catch(I){null==P||P("Failed to generate AI suggestion")}finally{pI(!1)}}))}),[_,$,xI,aI,Xg,EI,UI,kI,qI,q,II,AI,bI,cI,lI,gI,CI,r,P,MI,uI,JI]),Wg=H.useCallback((()=>{if(!bg||!vI||!jI)return;_I(bg),$I(bg),qI("ai_suggestion_accepted",{action_type:jI,template_id:q});const I=function(I,g){const C=I.length,A=g.length,c=Array(A+1).fill(0).map(((I,g)=>g));for(let l=1;l<=C;l++){let C=c[0];c[0]=l;for(let b=1;b<=A;b++){const A=c[b];I[l-1]===g[b-1]?c[b]=C:c[b]=Math.min(c[b-1],c[b],C)+1,C=A}}return c[A]}(vI,bg),g=Math.max(vI.length,bg.length,1),C=I/g;null==HI||HI({changedCharacters:I,templateLength:g,changePercent:C,isAiTagged:C>=.5}),Ig()}),[bg,vI,jI,_I,$I,qI,q,HI,Ig]),Bg=H.useCallback((()=>{jI&&(qI("ai_suggestion_discarded",{action_type:jI,template_id:q}),Ig())}),[Ig,qI,jI,q]),Hg=H.useCallback((I=>{jI&&qI("ai_feedback_submitted",{action_type:jI,template_id:q,rating:I,candidate_index:tI+1})}),[qI,jI,tI,q]),Rg=H.useMemo((()=>GI?[]:XI.map((I=>{var g,C,A;const c=EI[I],l=UI[I]||c.defaultToneId||(null===(C=null===(g=c.tones)||void 0===g?void 0:g[0])||void 0===C?void 0:C.id);return{type:I,label:c.label,isPrimary:I===Y.AIEditorActionTypes.REPHRASE,loading:aI&&jI===I,highlighted:I===Y.AIEditorActionTypes.REPHRASE&&yI,disabled:!xI.trim()||xI.length<(MI[I]||N.DEFAULT_AI_ACTION_MIN_CHARS[I]||50)||aI||Gg&&jI===I,showToneDropdown:I===Y.AIEditorActionTypes.REPHRASE&&!!(null===(A=c.tones)||void 0===A?void 0:A.length),tones:c.tones,selectedToneId:l}}))),[XI,GI,EI,UI,aI,jI,Gg,yI,xI,MI]);return H.useImperativeHandle(A,(()=>({addTextOrWrap:Ag,addText:cg,get:()=>xI,setCaretPosition:Cg})),[Ag,cg,xI]),H.useEffect((()=>{void 0!==F&&_I(F||"")}),[F,_I]),H.useEffect((()=>{if(!p||!P)return;const I=xI.length>p?a:null!=i?i:"";PI.current!==I&&(PI.current=I,P(I))}),[xI,i,p,P]),C.jsxs(x.OuterContainer,{children:[C.jsxs(x.Container,Object.assign({isError:!!i},{children:[Gg?C.jsxs(k,{children:[C.jsx(Q,{children:vI}),C.jsx("div",{children:bg}),C.jsxs(U,{children:[C.jsxs(s,{children:[tI+1,"/",wI.length]}),C.jsx(v,Object.assign({"aria-label":"Previous suggestion",type:"button",disabled:Zg,onClick:()=>TI((I=>Math.max(0,I-1)))},{children:C.jsx(l.default,{width:14,height:14})})),C.jsx(v,Object.assign({"aria-label":"Next suggestion",type:"button",disabled:dg,onClick:()=>TI((I=>Math.min(wI.length-1,I+1)))},{children:C.jsx(b.default,{width:14,height:14})})),C.jsx(u.Tooltip,Object.assign({body:"Like",placement:"top"},{children:C.jsx(v,Object.assign({"aria-label":"Like suggestion",type:"button",onClick:()=>Hg("like")},{children:C.jsx(W.default,{width:14,height:14})}))})),C.jsx(u.Tooltip,Object.assign({body:"Dislike",placement:"top"},{children:C.jsx(v,Object.assign({"aria-label":"Dislike suggestion",type:"button",onClick:()=>Hg("dislike")},{children:C.jsx(V.default,{width:14,height:14})}))})),Xg?C.jsx(u.Tooltip,Object.assign({body:"Regenerate",placement:"top"},{children:C.jsx(v,Object.assign({"aria-label":"Regenerate suggestion",type:"button",disabled:aI,onClick:()=>{jI&&Vg(jI,!0)}},{children:C.jsx(d.default,{width:14,height:14})}))})):null,C.jsx(u.Tooltip,Object.assign({body:"Discard",placement:"top"},{children:C.jsx(v,Object.assign({"aria-label":"Discard suggestion",type:"button",onClick:Bg},{children:C.jsx(X.default,{width:14,height:14})}))})),C.jsx(u.Tooltip,Object.assign({body:"Accept",placement:"top"},{children:C.jsx(v,Object.assign({"aria-label":"Accept suggestion",type:"button",onClick:Wg},{children:C.jsx(c.default,{width:14,height:14})}))}))]})]}):aI?C.jsxs(n,{children:[C.jsx(S,{width:"96%"}),C.jsx(S,{width:"92%"}),C.jsx(S,{width:"88%"}),C.jsx(S,{width:"54%"})]}):C.jsx(x.TextSpace,Object.assign({ref:mI},NI,{value:xI,onChange:function(I){const g=I.target.value;_I(g),$I(g)},onPaste:I=>{var g,C;const A=I.clipboardData.getData("text");if(A.length>1200){const c=(null===(g=mI.current)||void 0===g?void 0:g.selectionStart)||0,l=(null===(C=mI.current)||void 0===C?void 0:C.selectionEnd)||c,b=xI.slice(0,c)+A+xI.slice(l);requestAnimationFrame((()=>{_I(b),$I(b)})),I.preventDefault()}},rows:E})),nI?C.jsxs(z,{children:[C.jsxs(w,{children:[C.jsx(G.default,{width:18,height:18,color:R.COLORS.content.secondary}),C.jsx(o,{value:kI,placeholder:"Add specific instructions to refine your message",onChange:I=>QI(I.target.value)}),C.jsxs(t,{children:[C.jsx(T,Object.assign({type:"button",onClick:()=>{QI(""),SI(!1)}},{children:"Cancel"})),C.jsx(j,Object.assign({type:"button",onClick:()=>{const I=kI.trim();SI(!1),QI(""),Vg(Y.AIEditorActionTypes.REPHRASE,!1,I)}},{children:"Improve"}))]})]}),kI.trim().length>0&&fI.length>0?C.jsx(e,{children:fI.map((I=>C.jsx(D,Object.assign({type:"button",selected:kI===I,onClick:()=>QI(I)},{children:I}),I)))}):null]}):null,C.jsx(Y.WhatsAppTextEditorHeader,{actions:f,ref:mI,onActionSelect:function(I){const g=K[I];if(g&&mI.current){const I=mI.current.selectionStart;if(I===mI.current.selectionEnd){const{text:C}=lg(g,I);Cg(I+1),$I(C)}else{const{text:I}=Ag(g);$I(I)}}},RightComponent:h,onEmojiClick:function(I){const{text:g}=cg(I);$I(g)},aiActions:Rg,disableAllActions:Gg||aI,instructionActive:nI,onAIInstructionsClick:()=>SI(!0),onAIToneChange:(I,g)=>{sI((C=>Object.assign(Object.assign({},C),{[I]:g}))),null==RI||RI(I,g),I===Y.AIEditorActionTypes.REPHRASE&&Vg(I,!1,void 0,g,Y.AIActionVariant.DEFAULT)},onAIActionClick:function(I){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Y.AIActionVariant.DEFAULT;if(!aI){if(Gg){if(jI===I)return;return Ig(),void Vg(I,!1,void 0,void 0,g)}Vg(I,!1,void 0,void 0,g)}}})]})),i&&i!==a?C.jsxs("div",Object.assign({style:{display:"flex",gap:6,alignItems:"center"}},{children:[C.jsx(Z.default,{width:16,height:16,color:R.COLORS.content.negative}),C.jsx(J.BodyCaption,Object.assign({color:R.COLORS.content.negative},{children:i}))]})):C.jsx(C.Fragment,{children:p?C.jsxs(J.BodyCaption,Object.assign({style:{color:i===a||xI.length>p?R.COLORS.content.negative:R.COLORS.content.secondary}},{children:[xI.length,"/",p]})):C.jsx(C.Fragment,{})})]})}));P.displayName="WhatsAppTextEditor",exports.WhatsAppTextEditor=P;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/_tslib.js"),t=require("react/jsx-runtime"),n=require("../../helpers/BaseWhatsappContentLang.helper.js"),r=require("react"),l=require("../../constants/Theme.js"),o=require("../TypographyStyle.js"),i=require("./CustomEditor.styled.js"),u=require("./WhatsAppTextEditorHeader.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=c(r);const a="Character limit reached",d=new n.BaseWhatsappContentLangHelper,v={[u.EditorActionTypes.BOLD]:"*",[u.EditorActionTypes.ITALIC]:"_",[u.EditorActionTypes.STRIKETHROUGH]:"~"},p=s.default.forwardRef(((n,c)=>{var s,p,{onChange:h,text:f,RightComponent:g,error:x,limit:j,onError:m,rows:C,actions:T}=n,E=e.__rest(n,["onChange","text","RightComponent","error","limit","onError","rows","actions"]);const y=r.useRef(null);function O(e){const t=null==y?void 0:y.current;null!=t&&(t.selectionStart?(t.focus(),t.setSelectionRange(e,e)):t.focus())}function S(e){var t,n;let r=null!==(n=null===(t=y.current)||void 0===t?void 0:t.value)&&void 0!==n?n:"";if(y.current&&e){const t=y.current.selectionStart,n=y.current.selectionEnd,l=e;if(t===n)return L(l);{r=d.wrappWildcard(t,n,l,r);const e=d.getHTML(r);return y.current.value=r,{text:r,html:e}}}return{text:r,html:r}}function L(e){var t,n;let r=null!==(n=null===(t=y.current)||void 0===t?void 0:t.value)&&void 0!==n?n:"";if(y.current&&e){const t=y.current.selectionStart;if(t===y.current.selectionEnd)return R(e,t)}return{text:r,html:r}}function R(e,t){var n,r;let l=null!==(r=null===(n=y.current)||void 0===n?void 0:n.value)&&void 0!==r?r:"";l=l.slice(0,t)+e+l.slice(t);const o=d.getHTML(l);return y.current.value=l,{text:l,html:o}}return r.useImperativeHandle(c,(()=>({addTextOrWrap:S,addText:L,get(){var e,t;return null!==(t=null===(e=y.current)||void 0===e?void 0:e.value)&&void 0!==t?t:""},setCaretPosition:O}))),r.useEffect((()=>{if((null==y?void 0:y.current)&&f){y.current.value=f;const e=d.getHTML(f);null==h||h(f,e)}}),[]),r.useEffect((()=>{var e,t;(null===(e=null==y?void 0:y.current)||void 0===e?void 0:e.value)&&j&&((null===(t=null==y?void 0:y.current)||void 0===t?void 0:t.value.length)>j?null==m||m(a):null==m||m(null!=x?x:""))}),[null===(s=null==y?void 0:y.current)||void 0===s?void 0:s.value.length]),t.jsxs(i.OuterContainer,{children:[t.jsxs(i.Container,Object.assign({isError:!!x},{children:[t.jsx(u.WhatsAppTextEditorHeader,{actions:T,ref:y,onActionSelect:function(e){if((null==v?void 0:v[e])&&y.current){const t=y.current.selectionStart;if(t===y.current.selectionEnd){R(null==v?void 0:v[e],t);const{text:n,html:r}=R(null==v?void 0:v[e],t);O(t+1),null==h||h(n,r)}else{const{text:t,html:n}=S(null==v?void 0:v[e]);null==h||h(t,n)}}},RightComponent:g,onEmojiClick:function(e){const{text:t,html:n}=L(e);null==h||h(t,n)}}),t.jsx(i.TextSpace,Object.assign({ref:y,onChange:function(e){const t=e.target.value,n=d.getHTML(t);null==h||h(t,n)}},E,{rows:C}))]})),x&&x!==a?t.jsx(o.BodyCaption,Object.assign({style:{color:l.COLORS.content.negative}},{children:x})):t.jsx(t.Fragment,{children:j&&(null==y?void 0:y.current)?t.jsxs(o.BodyCaption,Object.assign({style:{color:x===a||(null===(p=null==y?void 0:y.current)||void 0===p?void 0:p.value.length)>j?l.COLORS.content.negative:l.COLORS.content.secondary}},{children:[y.current.value.length,"/",j]})):t.jsx(t.Fragment,{})})]})}));p.displayName="WhatsAppTextEditor",exports.WhatsAppTextEditor=p;
|