{"version":3,"file":"index-Bw1viXCv.js","sources":["../../node_modules/react/cjs/react.production.min.js","../../node_modules/react/index.js","../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../node_modules/scheduler/cjs/scheduler.production.min.js","../../node_modules/scheduler/index.js","../../node_modules/react-dom/cjs/react-dom.production.min.js","../../node_modules/react-dom/index.js","../../node_modules/react-dom/client.js","../../node_modules/i18next/dist/esm/i18next.js","../../node_modules/react-i18next/dist/es/utils.js","../../node_modules/react-i18next/dist/es/unescape.js","../../node_modules/react-i18next/dist/es/defaults.js","../../node_modules/react-i18next/dist/es/i18nInstance.js","../../node_modules/react-i18next/dist/es/initReactI18next.js","../../node_modules/react-i18next/dist/es/context.js","../../node_modules/react-i18next/dist/es/useTranslation.js","../../node_modules/i18next-http-backend/esm/utils.js","../../node_modules/cross-fetch/dist/browser-ponyfill.js","../../node_modules/i18next-http-backend/esm/getFetch.cjs","../../node_modules/i18next-http-backend/esm/request.js","../../node_modules/i18next-http-backend/esm/index.js","../../src/environment.ts","../../src/i18n.ts","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/combine-components.js","../../node_modules/@logivity/frontend-commons/dist/format-Bnv9ssjn.js","../../node_modules/@logivity/frontend-commons/dist/getDefaultOptions-DrIJO_GH.js","../../node_modules/@logivity/frontend-commons/dist/index-Yki8YSfn.js","../../node_modules/@logivity/frontend-commons/dist/index-B2XMzYdM.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/timezones-europe.lov.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/countries.lov.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/currencies.lov.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/eu-countries.lov.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/corporate-languages.lov.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/eu-uk-currencies.lov.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/lov/high-riskthird-countries.context.js","../../node_modules/@logivity/frontend-commons/dist/contexts/navbar-title.context.js","../../node_modules/@logivity/frontend-commons/dist/models/app-user.model.js","../../node_modules/@logivity/frontend-commons/dist/models/utility.model.js","../../node_modules/@logivity/frontend-commons/dist/models/filter.model.js","../../node_modules/@logivity/frontend-commons/dist/_commonjsHelpers-BkfeUUK-.js","../../node_modules/@logivity/frontend-commons/dist/object-BoWdjekM.js","../../node_modules/@logivity/frontend-commons/dist/utils/regex-utils.js","../../node_modules/@logivity/frontend-commons/dist/models/organisations.model.js","../../node_modules/@logivity/frontend-commons/dist/components/onboarding/registration/registration-form-common.helper.js","../../node_modules/@logivity/frontend-commons/dist/components/superadmin/organisation-edit-component/organisation-edit.helper.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/registrations/registration.helper.js","../../node_modules/@logivity/frontend-commons/dist/utils/password-validations.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/setting.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/math.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/location.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/local-storage-utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/url.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/axios.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/organisations.utils.js","../../node_modules/@logivity/frontend-commons/dist/utils/common.utils.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/base-table.model.js","../../node_modules/@logivity/frontend-commons/dist/interceptors/axios.interceptors.js","../../node_modules/@logivity/frontend-commons/dist/redux-toolkit.modern-T6XJoxBf.js","../../node_modules/@logivity/frontend-commons/dist/reducers/filters/filters.reducer.js","../../node_modules/@logivity/frontend-commons/dist/reducers/filters/filters.selectors.js","../../node_modules/@logivity/frontend-commons/dist/hooks/use-rwd-mode.hook.js","../../node_modules/@logivity/frontend-commons/dist/hooks/use-label-url.hook.js","../../node_modules/@logivity/frontend-commons/dist/components/action-status/action-status.component.js","../../node_modules/deepmerge/dist/es.js","../../node_modules/lodash-es/_freeGlobal.js","../../node_modules/lodash-es/_root.js","../../node_modules/lodash-es/_Symbol.js","../../node_modules/lodash-es/_getRawTag.js","../../node_modules/lodash-es/_objectToString.js","../../node_modules/lodash-es/_baseGetTag.js","../../node_modules/lodash-es/_overArg.js","../../node_modules/lodash-es/_getPrototype.js","../../node_modules/lodash-es/isObjectLike.js","../../node_modules/lodash-es/isPlainObject.js","../../node_modules/lodash-es/_listCacheClear.js","../../node_modules/lodash-es/eq.js","../../node_modules/lodash-es/_assocIndexOf.js","../../node_modules/lodash-es/_listCacheDelete.js","../../node_modules/lodash-es/_listCacheGet.js","../../node_modules/lodash-es/_listCacheHas.js","../../node_modules/lodash-es/_listCacheSet.js","../../node_modules/lodash-es/_ListCache.js","../../node_modules/lodash-es/_stackClear.js","../../node_modules/lodash-es/_stackDelete.js","../../node_modules/lodash-es/_stackGet.js","../../node_modules/lodash-es/_stackHas.js","../../node_modules/lodash-es/isObject.js","../../node_modules/lodash-es/isFunction.js","../../node_modules/lodash-es/_coreJsData.js","../../node_modules/lodash-es/_isMasked.js","../../node_modules/lodash-es/_toSource.js","../../node_modules/lodash-es/_baseIsNative.js","../../node_modules/lodash-es/_getValue.js","../../node_modules/lodash-es/_getNative.js","../../node_modules/lodash-es/_Map.js","../../node_modules/lodash-es/_nativeCreate.js","../../node_modules/lodash-es/_hashClear.js","../../node_modules/lodash-es/_hashDelete.js","../../node_modules/lodash-es/_hashGet.js","../../node_modules/lodash-es/_hashHas.js","../../node_modules/lodash-es/_hashSet.js","../../node_modules/lodash-es/_Hash.js","../../node_modules/lodash-es/_mapCacheClear.js","../../node_modules/lodash-es/_isKeyable.js","../../node_modules/lodash-es/_getMapData.js","../../node_modules/lodash-es/_mapCacheDelete.js","../../node_modules/lodash-es/_mapCacheGet.js","../../node_modules/lodash-es/_mapCacheHas.js","../../node_modules/lodash-es/_mapCacheSet.js","../../node_modules/lodash-es/_MapCache.js","../../node_modules/lodash-es/_stackSet.js","../../node_modules/lodash-es/_Stack.js","../../node_modules/lodash-es/_arrayEach.js","../../node_modules/lodash-es/_defineProperty.js","../../node_modules/lodash-es/_baseAssignValue.js","../../node_modules/lodash-es/_assignValue.js","../../node_modules/lodash-es/_copyObject.js","../../node_modules/lodash-es/_baseTimes.js","../../node_modules/lodash-es/_baseIsArguments.js","../../node_modules/lodash-es/isArguments.js","../../node_modules/lodash-es/isArray.js","../../node_modules/lodash-es/stubFalse.js","../../node_modules/lodash-es/isBuffer.js","../../node_modules/lodash-es/_isIndex.js","../../node_modules/lodash-es/isLength.js","../../node_modules/lodash-es/_baseIsTypedArray.js","../../node_modules/lodash-es/_baseUnary.js","../../node_modules/lodash-es/_nodeUtil.js","../../node_modules/lodash-es/isTypedArray.js","../../node_modules/lodash-es/_arrayLikeKeys.js","../../node_modules/lodash-es/_isPrototype.js","../../node_modules/lodash-es/_nativeKeys.js","../../node_modules/lodash-es/_baseKeys.js","../../node_modules/lodash-es/isArrayLike.js","../../node_modules/lodash-es/keys.js","../../node_modules/lodash-es/_baseAssign.js","../../node_modules/lodash-es/_nativeKeysIn.js","../../node_modules/lodash-es/_baseKeysIn.js","../../node_modules/lodash-es/keysIn.js","../../node_modules/lodash-es/_baseAssignIn.js","../../node_modules/lodash-es/_cloneBuffer.js","../../node_modules/lodash-es/_copyArray.js","../../node_modules/lodash-es/_arrayFilter.js","../../node_modules/lodash-es/stubArray.js","../../node_modules/lodash-es/_getSymbols.js","../../node_modules/lodash-es/_copySymbols.js","../../node_modules/lodash-es/_arrayPush.js","../../node_modules/lodash-es/_getSymbolsIn.js","../../node_modules/lodash-es/_copySymbolsIn.js","../../node_modules/lodash-es/_baseGetAllKeys.js","../../node_modules/lodash-es/_getAllKeys.js","../../node_modules/lodash-es/_getAllKeysIn.js","../../node_modules/lodash-es/_DataView.js","../../node_modules/lodash-es/_Promise.js","../../node_modules/lodash-es/_Set.js","../../node_modules/lodash-es/_WeakMap.js","../../node_modules/lodash-es/_getTag.js","../../node_modules/lodash-es/_initCloneArray.js","../../node_modules/lodash-es/_Uint8Array.js","../../node_modules/lodash-es/_cloneArrayBuffer.js","../../node_modules/lodash-es/_cloneDataView.js","../../node_modules/lodash-es/_cloneRegExp.js","../../node_modules/lodash-es/_cloneSymbol.js","../../node_modules/lodash-es/_cloneTypedArray.js","../../node_modules/lodash-es/_initCloneByTag.js","../../node_modules/lodash-es/_baseCreate.js","../../node_modules/lodash-es/_initCloneObject.js","../../node_modules/lodash-es/_baseIsMap.js","../../node_modules/lodash-es/isMap.js","../../node_modules/lodash-es/_baseIsSet.js","../../node_modules/lodash-es/isSet.js","../../node_modules/lodash-es/_baseClone.js","../../node_modules/lodash-es/cloneDeep.js","../../node_modules/react-fast-compare/index.js","../../node_modules/lodash-es/clone.js","../../node_modules/lodash-es/_arrayMap.js","../../node_modules/lodash-es/isSymbol.js","../../node_modules/lodash-es/memoize.js","../../node_modules/lodash-es/_memoizeCapped.js","../../node_modules/lodash-es/_stringToPath.js","../../node_modules/lodash-es/_toKey.js","../../node_modules/lodash-es/_baseToString.js","../../node_modules/lodash-es/toString.js","../../node_modules/lodash-es/toPath.js","../../node_modules/react-is/cjs/react-is.production.min.js","../../node_modules/react-is/index.js","../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../node_modules/formik/dist/formik.esm.js","../../node_modules/@logivity/frontend-commons/dist/index-BK3It923.js","../../node_modules/@logivity/frontend-commons/dist/floating-ui.dom-yjUwoT1H.js","../../node_modules/@logivity/frontend-commons/dist/index-CtTzQ9n_.js","../../node_modules/@logivity/frontend-commons/dist/components/info-hover-icon/info-hover-icon.component.js","../../node_modules/@logivity/frontend-commons/dist/components/double-label/double-label.component.js","../../node_modules/@logivity/frontend-commons/dist/components/form-field-error/form-field-error.component.js","../../node_modules/@logivity/frontend-commons/dist/components/loader/loader.component.js","../../node_modules/@logivity/frontend-commons/dist/en-GB-oBVzU-Kn.js","../../node_modules/@logivity/frontend-commons/dist/components/custom-datepicker-field/custom-header-field.component.js","../../node_modules/@logivity/frontend-commons/dist/components/datepicker-field/datepicker-field.component.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../node_modules/prop-types/lib/ReactPropTypesSecret.js","../../node_modules/prop-types/factoryWithThrowingShims.js","../../node_modules/prop-types/index.js","../../node_modules/@babel/runtime/helpers/esm/extends.js","../../node_modules/resolve-pathname/esm/resolve-pathname.js","../../node_modules/value-equal/esm/value-equal.js","../../node_modules/tiny-invariant/dist/esm/tiny-invariant.js","../../node_modules/history/esm/history.js","../../node_modules/isarray/index.js","../../node_modules/path-to-regexp/index.js","../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../../node_modules/react-router/esm/react-router.js","../../node_modules/react-router-dom/esm/react-router-dom.js","../../node_modules/@logivity/frontend-commons/dist/contexts/main.layout.context.js","../../node_modules/@logivity/frontend-commons/dist/react-tagsinput-B0eRvLPE.js","../../node_modules/@logivity/frontend-commons/dist/reactjs-popup.esm-DT6P43ks.js","../../node_modules/@logivity/frontend-commons/dist/components/badge/badge.component.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/footer/bulk-select/bulk-select.footer.component.tsx.js","../../node_modules/@logivity/frontend-commons/dist/components/dropdown/dropdown.model.js","../../node_modules/@logivity/frontend-commons/dist/components/dropdown/dropdown.component.js","../../node_modules/@logivity/frontend-commons/dist/components/popup-wrapper/popup-wrapper.component.js","../../node_modules/@logivity/frontend-commons/dist/components/picker-scroll-mobile/picker-scroll-mobile.component.js","../../node_modules/@logivity/frontend-commons/dist/components/pagination-mobile/pagination-srollable-mobile.component.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/footer/base-table-footer.component.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/heading/base-table-heading.component.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/row/base-table-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/topbar/search/base-table-search.component.js","../../node_modules/@logivity/frontend-commons/dist/components/sort-item/sort-item.model.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/topbar/sort/base-table-sort.component.js","../../node_modules/@logivity/frontend-commons/dist/components/search-field/search-field.component.js","../../node_modules/@logivity/frontend-commons/dist/components/search-bar/search-bar.component.js","../../node_modules/@logivity/frontend-commons/dist/components/component.utils.js","../../node_modules/@logivity/frontend-commons/dist/components/dropdown-select/dropdown-select.component.js","../../node_modules/@logivity/frontend-commons/dist/components/FilterTemplatesComponent/index.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/topbar/base-table-topbar.component.js","../../node_modules/@logivity/frontend-commons/dist/components/base-table/base-table.component.js","../../node_modules/@logivity/frontend-commons/dist/components/confirm-popup/confirm-popup.component.js","../../node_modules/@logivity/frontend-commons/dist/components/consent-popup/consent-popup.component.js","../../node_modules/@logivity/frontend-commons/dist/components/copy/copy.component.js","../../node_modules/@logivity/frontend-commons/dist/components/double-copiable-label/double-copiable-label.component.js","../../node_modules/@logivity/frontend-commons/dist/components/double-info-label/double-info-label.component.js","../../node_modules/@logivity/frontend-commons/dist/react-redux-C7I9-1M6.js","../../node_modules/@logivity/frontend-commons/dist/components/download-files/download-files.helper.js","../../node_modules/@logivity/frontend-commons/dist/components/error-popup/error-popup.component.js","../../node_modules/@logivity/frontend-commons/dist/components/download-files/download-item/download-item.component.js","../../node_modules/@logivity/frontend-commons/dist/components/download-files/download-files.component.js","../../node_modules/@logivity/frontend-commons/dist/components/footer-action-panel/footer-action-panel.component.js","../../node_modules/@logivity/frontend-commons/dist/components/form-error-summary/form-error-summary.component.js","../../node_modules/@logivity/frontend-commons/dist/components/form-field/form-field.component.js","../../node_modules/@logivity/frontend-commons/dist/components/icon-state/icon-state.component.js","../../node_modules/@logivity/frontend-commons/dist/components/legal-privacy-cookie-policies/logivity-policies/privacy-cookie-policies/privacy-cookie-policies.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/main/navigation-bar/balance-widget/balance-widget.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/main/navigation-bar/side-bar/side-bar.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/main/navigation-bar/user-info/user-info.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/main/navigation-bar/navigation.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/footer/footer.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/main/main.layout.js","../../node_modules/@logivity/frontend-commons/dist/components/multi-value-input-field/multi-value-input-field.component.js","../../node_modules/@logivity/frontend-commons/dist/components/otp-component/otp-component.js","../../node_modules/@logivity/frontend-commons/dist/components/validation-display/validation-display.component.js","../../node_modules/@logivity/frontend-commons/dist/components/password-form/password-form-other-errors.js","../../node_modules/@logivity/frontend-commons/dist/components/password-form/password-form.js","../../node_modules/@logivity/frontend-commons/dist/components/personal-details-edit/components/personal-details-form-component.js","../../node_modules/@logivity/frontend-commons/dist/components/personal-details-edit/components/password-form-component.js","../../node_modules/@logivity/frontend-commons/dist/components/verify-email-component/verify-email-form-component.js","../../node_modules/@logivity/frontend-commons/dist/components/personal-details-edit/personal-details-edit.component.js","../../node_modules/@logivity/frontend-commons/dist/components/progress-bar/progress-bar.component.js","../../node_modules/@logivity/frontend-commons/dist/components/radio-select-field/radio-select-field.component.js","../../node_modules/@logivity/frontend-commons/dist/components/step-display/step-display.component.js","../../node_modules/@logivity/frontend-commons/dist/components/onboarding/new-registration-flow-3/organisation-details-registration-step.component.js","../../node_modules/@logivity/frontend-commons/dist/components/superadmin/organisation-edit-component/organisation-edit-component.js","../../node_modules/@logivity/frontend-commons/dist/components/tabs/tab/tab.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tabs/tabs.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tabs/tab-content/tab-content.component.js","../../node_modules/@logivity/frontend-commons/dist/components/terms-and-conditions/terms-and-conditions.component.js","../../node_modules/@logivity/frontend-commons/dist/components/toast/toast.component.js","../../node_modules/@logivity/frontend-commons/dist/components/undefined-state/undefined-state.component.js","../../node_modules/@logivity/frontend-commons/dist/components/update-organisation-form/formattedaddress/address.component.js","../../node_modules/@logivity/frontend-commons/dist/components/update-organisation-form/update-organisation.static.form.component.js","../../node_modules/@logivity/frontend-commons/dist/components/password-form/user-change-password-form.component.js","../../node_modules/@logivity/frontend-commons/dist/components/user-profile/user-profile.component.js","../../node_modules/@logivity/frontend-commons/dist/layouts/registration/registration.layout.js","../../node_modules/@logivity/frontend-commons/dist/components/download-files/download-item/download-item-by-ids.component.js","../../node_modules/@logivity/frontend-commons/dist/components/download-files/download-files-by-ids.component.js","../../node_modules/@logivity/frontend-commons/dist/components/onboarding/new-registration-flow-3/confirm-registration-step.component.js","../../node_modules/@logivity/frontend-commons/dist/components/onboarding/new-registration-flow-3/organistation-contact-details-registration-step.component.js","../../node_modules/@logivity/frontend-commons/dist/components/onboarding/new-registration-flow-3/verify-username-step-component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/organisations/organisation-desktop-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/organisations/organisation-mobile-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/common-components/base-table-custom-row/base-table-custom-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/common-components/org-tabs/attachments-tab/attachment-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/common-components/org-tabs/attachments-tab/attachments-tab.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/common-components/org-tabs/org-details-tab/org-details-tab.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/common-components/organisations-row-content/organisations-row-content.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/organisations/organisations-table.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/registrations/registration-mobile-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/registrations/registration-desktop-row.component.js","../../node_modules/@logivity/frontend-commons/dist/components/tables/super-admin/new/registrations/registrations-table.component.js","../../node_modules/@logivity/frontend-commons/dist/components/legal-privacy-cookie-policies/logivity-policies/legal-policies/legal-policies.component.js","../../src/contexts/app-context-provider.tsx","../../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js","../../node_modules/use-sync-external-store/with-selector.js","../../node_modules/react-redux/dist/react-redux.mjs","../../node_modules/redux/dist/redux.mjs","../../node_modules/immer/dist/immer.mjs","../../node_modules/redux-thunk/dist/redux-thunk.mjs","../../node_modules/@reduxjs/toolkit/dist/redux-toolkit.modern.mjs","../../node_modules/axios/lib/helpers/bind.js","../../node_modules/axios/lib/utils.js","../../node_modules/axios/lib/core/AxiosError.js","../../node_modules/axios/lib/helpers/null.js","../../node_modules/axios/lib/helpers/toFormData.js","../../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../node_modules/axios/lib/helpers/buildURL.js","../../node_modules/axios/lib/core/InterceptorManager.js","../../node_modules/axios/lib/defaults/transitional.js","../../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../node_modules/axios/lib/platform/browser/classes/FormData.js","../../node_modules/axios/lib/platform/browser/classes/Blob.js","../../node_modules/axios/lib/platform/browser/index.js","../../node_modules/axios/lib/platform/common/utils.js","../../node_modules/axios/lib/platform/index.js","../../node_modules/axios/lib/helpers/toURLEncodedForm.js","../../node_modules/axios/lib/helpers/formDataToJSON.js","../../node_modules/axios/lib/defaults/index.js","../../node_modules/axios/lib/helpers/parseHeaders.js","../../node_modules/axios/lib/core/AxiosHeaders.js","../../node_modules/axios/lib/core/transformData.js","../../node_modules/axios/lib/cancel/isCancel.js","../../node_modules/axios/lib/cancel/CanceledError.js","../../node_modules/axios/lib/core/settle.js","../../node_modules/axios/lib/helpers/parseProtocol.js","../../node_modules/axios/lib/helpers/speedometer.js","../../node_modules/axios/lib/helpers/throttle.js","../../node_modules/axios/lib/helpers/progressEventReducer.js","../../node_modules/axios/lib/helpers/isURLSameOrigin.js","../../node_modules/axios/lib/helpers/cookies.js","../../node_modules/axios/lib/helpers/isAbsoluteURL.js","../../node_modules/axios/lib/helpers/combineURLs.js","../../node_modules/axios/lib/core/buildFullPath.js","../../node_modules/axios/lib/core/mergeConfig.js","../../node_modules/axios/lib/helpers/resolveConfig.js","../../node_modules/axios/lib/adapters/xhr.js","../../node_modules/axios/lib/helpers/composeSignals.js","../../node_modules/axios/lib/helpers/trackStream.js","../../node_modules/axios/lib/adapters/fetch.js","../../node_modules/axios/lib/adapters/adapters.js","../../node_modules/axios/lib/core/dispatchRequest.js","../../node_modules/axios/lib/env/data.js","../../node_modules/axios/lib/helpers/validator.js","../../node_modules/axios/lib/core/Axios.js","../../node_modules/axios/lib/cancel/CancelToken.js","../../node_modules/axios/lib/helpers/spread.js","../../node_modules/axios/lib/helpers/isAxiosError.js","../../node_modules/axios/lib/helpers/HttpStatusCode.js","../../node_modules/axios/lib/axios.js","../../node_modules/axios/index.js","../../src/services/config.service.ts","../../src/utils/router.utils.ts","../../src/services/auth.service.ts","../../src/services/org-settings.service.ts","../../src/redux/app-user/app-user.reducer.ts","../../src/redux/wallet/wallet.selectors.ts","../../src/services/wallet.service.ts","../../src/redux/wallet/wallet.reducer.ts","../../src/services/org.service.ts","../../src/redux/org/org.reducer.ts","../../src/services/user.service.ts","../../src/redux/user/user.reducer.ts","../../src/services/top-up.service.ts","../../src/redux/top-up/top-up.reducer.ts","../../src/services/reg-org.service.ts","../../src/redux/reg-org/reg-org.reducer.ts","../../src/redux/base-table-state/base-table-state.reducer.ts","../../src/services/credential.service.ts","../../src/redux/credential/credential.reducer.ts","../../src/redux/root.reducer.ts","../../src/redux/app-user/app-user.selectors.ts","../../src/redux/store.ts","../../src/hooks/use-config-init.hook.tsx","../../src/components/initializer/initializer.component.tsx","../../src/router/protected-route.tsx","../../src/router/main-layout-route.tsx","../../src/router/registration-layout-route.tsx","../../node_modules/es-errors/type.js","../../__vite-browser-external","../../node_modules/object-inspect/index.js","../../node_modules/side-channel-list/index.js","../../node_modules/es-object-atoms/index.js","../../node_modules/es-errors/index.js","../../node_modules/es-errors/eval.js","../../node_modules/es-errors/range.js","../../node_modules/es-errors/ref.js","../../node_modules/es-errors/syntax.js","../../node_modules/es-errors/uri.js","../../node_modules/math-intrinsics/abs.js","../../node_modules/math-intrinsics/floor.js","../../node_modules/math-intrinsics/max.js","../../node_modules/math-intrinsics/min.js","../../node_modules/math-intrinsics/pow.js","../../node_modules/math-intrinsics/round.js","../../node_modules/math-intrinsics/isNaN.js","../../node_modules/math-intrinsics/sign.js","../../node_modules/gopd/gOPD.js","../../node_modules/gopd/index.js","../../node_modules/es-define-property/index.js","../../node_modules/has-symbols/shams.js","../../node_modules/has-symbols/index.js","../../node_modules/get-proto/Reflect.getPrototypeOf.js","../../node_modules/get-proto/Object.getPrototypeOf.js","../../node_modules/function-bind/implementation.js","../../node_modules/function-bind/index.js","../../node_modules/call-bind-apply-helpers/functionCall.js","../../node_modules/call-bind-apply-helpers/functionApply.js","../../node_modules/call-bind-apply-helpers/reflectApply.js","../../node_modules/call-bind-apply-helpers/actualApply.js","../../node_modules/call-bind-apply-helpers/index.js","../../node_modules/dunder-proto/get.js","../../node_modules/get-proto/index.js","../../node_modules/hasown/index.js","../../node_modules/get-intrinsic/index.js","../../node_modules/call-bound/index.js","../../node_modules/side-channel-map/index.js","../../node_modules/side-channel-weakmap/index.js","../../node_modules/side-channel/index.js","../../node_modules/qs/lib/formats.js","../../node_modules/qs/lib/utils.js","../../node_modules/qs/lib/stringify.js","../../node_modules/qs/lib/parse.js","../../node_modules/qs/lib/index.js","../../src/pages/services-list/services-list.page.tsx","../../src/pages/registration-info/registration-info.component.tsx","../../src/pages/registration-info/registration-info.model.ts","../../node_modules/moment/dist/moment.js","../../src/components/wallet-tabs/transaction-history/table/transaction-history/transaction-history-desktop-row.component.tsx","../../src/components/wallet-tabs/transaction-history/table/transaction-history/transaction-history-mobile-row.component.tsx","../../src/components/wallet-tabs/components/empty-states/serachbar-empty-state.component.tsx","../../src/redux/base-table-state/base-table-state.selectors.ts","../../node_modules/moment-timezone/moment-timezone.js","../../node_modules/moment-timezone/index.js","../../src/components/wallet-tabs/components/search-filter-form/serach-filter.helper.ts","../../src/models/wallet.model.ts","../../src/components/wallet-tabs/components/search-filter-form/search-filter-form.component.tsx","../../src/utils/download.utils.ts","../../src/components/wallet-tabs/components/bulk-update-form/bulk-update-form.component.tsx","../../src/components/wallet-tabs/transaction-history/table/transaction-history/transaction-history-table.component.tsx","../../src/pages/settings/settings-form.helper.ts","../../src/components/token-history-wrapper/token-history-wrapper.component.tsx","../../src/components/wallet-tabs/transaction-history/transaction-history.component.tsx","../../src/components/wallet-tabs/invoice-history/table/invoice-history-table-desktop-row.component.tsx","../../src/components/wallet-tabs/invoice-history/table/invoice-history-table-mobile-row.component.tsx","../../src/components/download-zip-files/download-zip-files.helper.ts","../../src/components/download-zip-files/download-zip-item/download-zip-item.component.tsx","../../src/components/download-zip-files/download-zip-files.component.tsx","../../src/components/download-zip-files/download-zip-item/download-item-by-ids.component.tsx","../../src/components/download-zip-files/download-files-by-ids.component.tsx","../../src/components/wallet-tabs/invoice-history/table/invoice-history-table.component.tsx","../../src/components/wallet-tabs/invoice-history/invoice-history.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/payment-section.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/vat-transaction-list.component .tsx","../../src/components/wallet-tabs/invoice-history/details/components/euro-token-transaction-list.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/invoice-transaction-list.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/header-section.componen.tsx","../../src/components/address/address.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/addresses-section.componen.tsx","../../src/components/wallet-tabs/invoice-history/details/components/invoice-details-section.componen.tsx","../../src/components/wallet-tabs/invoice-history/details/components/na-invoice.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/invoice-footer.component.tsx","../../src/components/wallet-tabs/invoice-history/details/components/title-invoice.component.tsx","../../src/components/wallet-tabs/invoice-history/details/invoice.component.tsx","../../src/components/wallet-tabs/transaction-history/details/receipt.component.tsx","../../src/pages/wallet/wallet.page.tsx","../../src/pages/handle-auth-code/handle-auth-code.page.tsx","../../src/pages/top-up-confirmation/top-up-confirmation.component.tsx","../../src/redux/org/org.selectors.ts","../../src/pages/administration/organisations/edit/edit-organisation-component.tsx","../../src/pages/administration/organisations/organisations-tab.component.tsx","../../src/redux/reg-org/reg-org.selectors.ts","../../src/pages/administration/registrations/registrations-tab.component.tsx","../../src/pages/administration/users/users.helper.ts","../../src/pages/administration/users/users-desktop-row.component.tsx","../../src/pages/administration/users/users-mobile-row.component.tsx","../../src/redux/user/user.selectors.ts","../../src/pages/administration/users/delete-confirmation/delete-confirmation.component.tsx","../../src/pages/administration/users/users.component.tsx","../../src/pages/administration/declined-requests/declined-requests-tab.component.tsx","../../src/pages/administration/administration.page.tsx","../../src/pages/terms-and-conditions-wrapper/terms-and-conditions-wrapper.component.tsx","../../src/pages/user-profile/user-profile.page.tsx","../../src/services/registration.service.ts","../../src/redux/registration/registration.reducer.ts","../../node_modules/nanoclone/src/index.js","../../node_modules/yup/es/util/printValue.js","../../node_modules/yup/es/locale.js","../../node_modules/lodash/_baseHas.js","../../node_modules/lodash/isArray.js","../../node_modules/lodash/_freeGlobal.js","../../node_modules/lodash/_root.js","../../node_modules/lodash/_Symbol.js","../../node_modules/lodash/_getRawTag.js","../../node_modules/lodash/_objectToString.js","../../node_modules/lodash/_baseGetTag.js","../../node_modules/lodash/isObjectLike.js","../../node_modules/lodash/isSymbol.js","../../node_modules/lodash/_isKey.js","../../node_modules/lodash/isObject.js","../../node_modules/lodash/isFunction.js","../../node_modules/lodash/_coreJsData.js","../../node_modules/lodash/_isMasked.js","../../node_modules/lodash/_toSource.js","../../node_modules/lodash/_baseIsNative.js","../../node_modules/lodash/_getValue.js","../../node_modules/lodash/_getNative.js","../../node_modules/lodash/_nativeCreate.js","../../node_modules/lodash/_hashClear.js","../../node_modules/lodash/_hashDelete.js","../../node_modules/lodash/_hashGet.js","../../node_modules/lodash/_hashHas.js","../../node_modules/lodash/_hashSet.js","../../node_modules/lodash/_Hash.js","../../node_modules/lodash/_listCacheClear.js","../../node_modules/lodash/eq.js","../../node_modules/lodash/_assocIndexOf.js","../../node_modules/lodash/_listCacheDelete.js","../../node_modules/lodash/_listCacheGet.js","../../node_modules/lodash/_listCacheHas.js","../../node_modules/lodash/_listCacheSet.js","../../node_modules/lodash/_ListCache.js","../../node_modules/lodash/_Map.js","../../node_modules/lodash/_mapCacheClear.js","../../node_modules/lodash/_isKeyable.js","../../node_modules/lodash/_getMapData.js","../../node_modules/lodash/_mapCacheDelete.js","../../node_modules/lodash/_mapCacheGet.js","../../node_modules/lodash/_mapCacheHas.js","../../node_modules/lodash/_mapCacheSet.js","../../node_modules/lodash/_MapCache.js","../../node_modules/lodash/memoize.js","../../node_modules/lodash/_memoizeCapped.js","../../node_modules/lodash/_stringToPath.js","../../node_modules/lodash/_arrayMap.js","../../node_modules/lodash/_baseToString.js","../../node_modules/lodash/toString.js","../../node_modules/lodash/_castPath.js","../../node_modules/lodash/_baseIsArguments.js","../../node_modules/lodash/isArguments.js","../../node_modules/lodash/_isIndex.js","../../node_modules/lodash/isLength.js","../../node_modules/lodash/_toKey.js","../../node_modules/lodash/_hasPath.js","../../node_modules/lodash/has.js","../../node_modules/yup/es/util/isSchema.js","../../node_modules/yup/es/Condition.js","../../node_modules/yup/es/util/toArray.js","../../node_modules/yup/es/ValidationError.js","../../node_modules/yup/es/util/runTests.js","../../node_modules/lodash/_defineProperty.js","../../node_modules/lodash/_baseAssignValue.js","../../node_modules/lodash/_createBaseFor.js","../../node_modules/lodash/_baseFor.js","../../node_modules/lodash/_baseTimes.js","../../node_modules/lodash/stubFalse.js","../../node_modules/lodash/isBuffer.js","../../node_modules/lodash/_baseIsTypedArray.js","../../node_modules/lodash/_baseUnary.js","../../node_modules/lodash/_nodeUtil.js","../../node_modules/lodash/isTypedArray.js","../../node_modules/lodash/_arrayLikeKeys.js","../../node_modules/lodash/_isPrototype.js","../../node_modules/lodash/_overArg.js","../../node_modules/lodash/_nativeKeys.js","../../node_modules/lodash/_baseKeys.js","../../node_modules/lodash/isArrayLike.js","../../node_modules/lodash/keys.js","../../node_modules/lodash/_baseForOwn.js","../../node_modules/lodash/_stackClear.js","../../node_modules/lodash/_stackDelete.js","../../node_modules/lodash/_stackGet.js","../../node_modules/lodash/_stackHas.js","../../node_modules/lodash/_stackSet.js","../../node_modules/lodash/_Stack.js","../../node_modules/lodash/_setCacheAdd.js","../../node_modules/lodash/_setCacheHas.js","../../node_modules/lodash/_SetCache.js","../../node_modules/lodash/_arraySome.js","../../node_modules/lodash/_cacheHas.js","../../node_modules/lodash/_equalArrays.js","../../node_modules/lodash/_Uint8Array.js","../../node_modules/lodash/_mapToArray.js","../../node_modules/lodash/_setToArray.js","../../node_modules/lodash/_equalByTag.js","../../node_modules/lodash/_arrayPush.js","../../node_modules/lodash/_baseGetAllKeys.js","../../node_modules/lodash/_arrayFilter.js","../../node_modules/lodash/stubArray.js","../../node_modules/lodash/_getSymbols.js","../../node_modules/lodash/_getAllKeys.js","../../node_modules/lodash/_equalObjects.js","../../node_modules/lodash/_DataView.js","../../node_modules/lodash/_Promise.js","../../node_modules/lodash/_Set.js","../../node_modules/lodash/_WeakMap.js","../../node_modules/lodash/_getTag.js","../../node_modules/lodash/_baseIsEqualDeep.js","../../node_modules/lodash/_baseIsEqual.js","../../node_modules/lodash/_baseIsMatch.js","../../node_modules/lodash/_isStrictComparable.js","../../node_modules/lodash/_getMatchData.js","../../node_modules/lodash/_matchesStrictComparable.js","../../node_modules/lodash/_baseMatches.js","../../node_modules/lodash/_baseGet.js","../../node_modules/lodash/get.js","../../node_modules/lodash/_baseHasIn.js","../../node_modules/lodash/hasIn.js","../../node_modules/lodash/_baseMatchesProperty.js","../../node_modules/lodash/identity.js","../../node_modules/lodash/_baseProperty.js","../../node_modules/lodash/_basePropertyDeep.js","../../node_modules/lodash/property.js","../../node_modules/lodash/_baseIteratee.js","../../node_modules/lodash/mapValues.js","../../node_modules/property-expr/index.js","../../node_modules/yup/es/Reference.js","../../node_modules/yup/es/util/createValidation.js","../../node_modules/yup/es/util/reach.js","../../node_modules/yup/es/util/ReferenceSet.js","../../node_modules/yup/es/schema.js","../../node_modules/yup/es/util/isAbsent.js","../../node_modules/yup/es/string.js","../../node_modules/yup/es/util/isodate.js","../../node_modules/yup/es/date.js","../../node_modules/lodash/_arrayReduce.js","../../node_modules/lodash/_basePropertyOf.js","../../node_modules/lodash/_deburrLetter.js","../../node_modules/lodash/deburr.js","../../node_modules/lodash/_asciiWords.js","../../node_modules/lodash/_hasUnicodeWord.js","../../node_modules/lodash/_unicodeWords.js","../../node_modules/lodash/words.js","../../node_modules/lodash/_createCompounder.js","../../node_modules/lodash/snakeCase.js","../../node_modules/lodash/_baseSlice.js","../../node_modules/lodash/_castSlice.js","../../node_modules/lodash/_hasUnicode.js","../../node_modules/lodash/_asciiToArray.js","../../node_modules/lodash/_unicodeToArray.js","../../node_modules/lodash/_stringToArray.js","../../node_modules/lodash/_createCaseFirst.js","../../node_modules/lodash/upperFirst.js","../../node_modules/lodash/capitalize.js","../../node_modules/lodash/camelCase.js","../../node_modules/lodash/mapKeys.js","../../node_modules/toposort/index.js","../../node_modules/yup/es/util/sortFields.js","../../node_modules/yup/es/util/sortByKeyOrder.js","../../node_modules/yup/es/object.js","../../src/pages/onboarding/registration.helper.ts","../../src/pages/onboarding/registration.component.tsx","../../src/components/org-static-info/org-static-info.component.tsx","../../src/pages/settings/organisation/organisation.component.tsx","../../src/pages/settings/settings.page.tsx","../../src/router/common-layout-route.tsx","../../src/pages/token-switch-wrapper/token-switch.component.tsx","../../src/pages/administration/users/user/create-edit-user-form/create-edit-user-form.helper.ts","../../src/pages/administration/users/user/create-edit-user-form/create-edit-user-form.component.tsx","../../src/components/response-wrapper/response-wrapper.component.tsx","../../src/pages/administration/users/user/user.page.tsx","../../src/pages/confirm-email-change/confirm-email-change.tsx","../../src/components/service-panel/service-panel.component.tsx","../../src/pages/credentials/node-params.component.tsx","../../src/pages/credentials/details-service.component.tsx","../../src/redux/credential/credential.selectors.ts","../../src/models/credential.model.ts","../../src/pages/credentials/add-service-form.component.tsx","../../src/pages/credentials/credentials.page.tsx","../../src/router/app-router.tsx","../../src/index.tsx"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3 typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return '' + object;\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.indexOf('###') > -1 ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last && last.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nvar _entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = function (obj, path) {\n let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].indexOf(typeof next) > -1 && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code && code.replace('_', '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.init(concreteLogger, options);\n }\n init(concreteLogger) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return this.forward(args, 'log', '', true);\n }\n warn() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, 'warn', '', true);\n }\n error() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, 'error', '');\n }\n deprecate() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(_ref => {\n let [observer, numTimesAdded] = _ref;\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(_ref2 => {\n let [observer, numTimesAdded] = _ref2;\n for (let i = 0; i < numTimesAdded; i++) {\n observer.apply(observer, [event, ...args]);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: ['translation'],\n defaultNS: 'translation'\n };\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.indexOf('.') > -1) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n addResource(lng, ns, key, value) {\n let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false,\n skipCopy: false\n };\n let path = [lng, ns];\n if (lng.indexOf('.') > -1) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === 'v1') return {\n ...{},\n ...this.getResource(lng, ns)\n };\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n constructor(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n const resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n extractFromKey(key, options) {\n let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let namespaces = options.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, options, lastKey) {\n if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof options === 'object') options = {\n ...options\n };\n if (!options) options = {};\n if (keys === undefined || keys === null) return '';\n if (!Array.isArray(keys)) keys = [String(keys)];\n const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], options);\n const namespace = namespaces[namespaces.length - 1];\n const lng = options.lng || this.language;\n const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(options)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, options);\n let res = resolved && resolved.res;\n const resUsedKey = resolved && resolved.usedKey || key;\n const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n const resType = Object.prototype.toString.apply(res);\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const handleAsObject = !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(isString(joinArrays) && Array.isArray(res))) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n ...options,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(res);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in res) {\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n copy[m] = this.translate(deepKey, {\n ...options,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const hasDefaultValue = Translator.hasDefaultValue(options);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const defaultValue = needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] || options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...options,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (this.backendConnector && this.backendConnector.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, options);\n if (needsZeroSuffixLookup && options[`defaultValue${this.options.pluralSeparator}zero`] && suffixes.indexOf(`${this.options.pluralSeparator}zero`) < 0) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== 'v1') {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(options);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, options, resolved, lastKey) {\n var _this = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...options\n }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init({\n ...options,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...options.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = options.replace && !isString(options.replace) ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, options.lng || this.language || resolved.usedLng, options);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = this.language || resolved.usedLng;\n if (options.nest !== false) res = this.interpolator.nest(res, function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return _this.translate(...args, key);\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n const postProcess = options.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(options)\n },\n ...options\n } : options, this);\n }\n return res;\n }\n resolve(keys) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, options);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = options.count !== undefined && !isString(options.count);\n const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n const needsContextHandling = options.context !== undefined && (isString(options.context) || typeof options.context === 'number') && options.context !== '';\n const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nconst capitalize = string => string.charAt(0).toUpperCase() + string.slice(1);\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || code.indexOf('-') < 0) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.indexOf('-') > -1) {\n if (typeof Intl !== 'undefined' && typeof Intl.getCanonicalLocales !== 'undefined') {\n try {\n let formattedCode = Intl.getCanonicalLocales(code)[0];\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n } catch (e) {}\n }\n const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n let p = code.split('-');\n if (this.options.lowerCaseLng) {\n p = p.map(part => part.toLowerCase());\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join('-');\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return supportedLng;\n if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n if (supportedLng.indexOf('-') > 0 && lngOnly.indexOf('-') < 0 && supportedLng.substring(0, supportedLng.indexOf('-')) === lngOnly) return supportedLng;\n if (supportedLng.indexOf(lngOnly) === 0 && lngOnly.length > 1) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nlet sets = [{\n lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n nr: [1, 2],\n fc: 1\n}, {\n lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n nr: [1, 2],\n fc: 2\n}, {\n lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n nr: [1],\n fc: 3\n}, {\n lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n nr: [1, 2, 5],\n fc: 4\n}, {\n lngs: ['ar'],\n nr: [0, 1, 2, 3, 11, 100],\n fc: 5\n}, {\n lngs: ['cs', 'sk'],\n nr: [1, 2, 5],\n fc: 6\n}, {\n lngs: ['csb', 'pl'],\n nr: [1, 2, 5],\n fc: 7\n}, {\n lngs: ['cy'],\n nr: [1, 2, 3, 8],\n fc: 8\n}, {\n lngs: ['fr'],\n nr: [1, 2],\n fc: 9\n}, {\n lngs: ['ga'],\n nr: [1, 2, 3, 7, 11],\n fc: 10\n}, {\n lngs: ['gd'],\n nr: [1, 2, 3, 20],\n fc: 11\n}, {\n lngs: ['is'],\n nr: [1, 2],\n fc: 12\n}, {\n lngs: ['jv'],\n nr: [0, 1],\n fc: 13\n}, {\n lngs: ['kw'],\n nr: [1, 2, 3, 4],\n fc: 14\n}, {\n lngs: ['lt'],\n nr: [1, 2, 10],\n fc: 15\n}, {\n lngs: ['lv'],\n nr: [1, 2, 0],\n fc: 16\n}, {\n lngs: ['mk'],\n nr: [1, 2],\n fc: 17\n}, {\n lngs: ['mnk'],\n nr: [0, 1, 2],\n fc: 18\n}, {\n lngs: ['mt'],\n nr: [1, 2, 11, 20],\n fc: 19\n}, {\n lngs: ['or'],\n nr: [2, 1],\n fc: 2\n}, {\n lngs: ['ro'],\n nr: [1, 2, 20],\n fc: 20\n}, {\n lngs: ['sl'],\n nr: [5, 1, 2, 3],\n fc: 21\n}, {\n lngs: ['he', 'iw'],\n nr: [1, 2, 20, 21],\n fc: 22\n}];\nlet _rulesPluralsTypes = {\n 1: n => Number(n > 1),\n 2: n => Number(n != 1),\n 3: n => 0,\n 4: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 5: n => Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5),\n 6: n => Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2),\n 7: n => Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 8: n => Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3),\n 9: n => Number(n >= 2),\n 10: n => Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4),\n 11: n => Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3),\n 12: n => Number(n % 10 != 1 || n % 100 == 11),\n 13: n => Number(n !== 0),\n 14: n => Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3),\n 15: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2),\n 16: n => Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2),\n 17: n => Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1),\n 18: n => Number(n == 0 ? 0 : n == 1 ? 1 : 2),\n 19: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3),\n 20: n => Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2),\n 21: n => Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0),\n 22: n => Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3)\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst createRules = () => {\n const rules = {};\n sets.forEach(set => {\n set.lngs.forEach(l => {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n};\nclass PluralResolver {\n constructor(languageUtils) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n this.options.compatibilityJSON = 'v3';\n this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n }\n this.rules = createRules();\n this.pluralRulesCache = {};\n }\n addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (!code.match(/-|_/)) return;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n needsPlural(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n getPluralFormsOfKey(code, key) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n return rule.numbers.map(number => this.getSuffix(code, number, options));\n }\n getSuffix(code, count) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return '';\n }\n getSuffixRetroCompatible(rule, count) {\n const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n let suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = 'plural';\n } else if (suffix === 1) {\n suffix = '';\n }\n }\n const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n if (this.options.compatibilityJSON === 'v1') {\n if (suffix === 1) return '';\n if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n return returnSuffix();\n } else if (this.options.compatibilityJSON === 'v2') {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n shouldUseIntlApi() {\n return !nonIntlVersions.includes(this.options.compatibilityJSON);\n }\n}\n\nconst deepFindWithDefaults = function (data, defaultData, key) {\n let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || (value => value);\n this.init(options);\n }\n init() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp && existingRegExp.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}(.+?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (key.indexOf(this.formatSeparator) < 0) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n const c = key.split(new RegExp(`${sep}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.indexOf(this.prefix) > -1) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n let doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (doReduce) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.indexOf('(') > -1) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (val, lng, options) => {\n let optForCache = options;\n if (options && options.interpolationkey && options.formatParams && options.formatParams[options.interpolationkey] && options[options.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [options.interpolationkey]: undefined\n };\n }\n const key = lng + JSON.stringify(optForCache);\n let formatter = cache[key];\n if (!formatter) {\n formatter = fn(getCleanedCode(lng), options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n};\nclass Formatter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.formats = {\n number: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: createCachedFormatter((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n this.init(options);\n }\n init(services) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && formats[0].indexOf(')') < 0 && formats.find(f => f.indexOf(')') > -1)) {\n const lastIndex = formats.findIndex(f => f.indexOf(')') > -1);\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services) {\n let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n if (this.backend && this.backend.init) {\n this.backend.init(services, options.backend, options);\n }\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName) {\n let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n let callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n let callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name) {\n let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend && this.backend.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initImmediate: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: value => value,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n }\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initImmediate) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init() {\n var _this = this;\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf('translation') < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n if (this.options.compatibilityAPI !== 'v1') {\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== 'undefined') {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', function (event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n _this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n _this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = function () {\n return _this.store[fcName](...arguments);\n };\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = function () {\n _this.store[fcName](...arguments);\n return _this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language) {\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(l => append(l));\n }\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].indexOf(l) > -1) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n changeLanguage(lng, callback) {\n var _this2 = this;\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function () {\n return _this2.t(...arguments);\n });\n if (callback) callback(err, function () {\n return _this2.t(...arguments);\n });\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const l = isString(lngs) ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n var _this3 = this;\n const fixedT = function (key, opts) {\n let options;\n if (typeof opts !== 'object') {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n options = {\n ...opts\n };\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n if (options.keyPrefix !== '') options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const keySeparator = _this3.options.keySeparator || '.';\n let resultKey;\n if (options.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n } else {\n resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n }\n return _this3.t(resultKey, options);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t() {\n return this.translator && this.translator.translate(...arguments);\n }\n exists() {\n return this.translator && this.translator.exists(...arguments);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0 && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n }\n cloneInstance() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n clone.store = new ResourceStore(this.store.data, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', function (event) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","export function warn() {\n if (console && console.warn) {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (isString(args[0])) args[0] = `react-i18next:: ${args[0]}`;\n console.warn(...args);\n }\n}\nconst alreadyWarned = {};\nexport function warnOnce() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (isString(args[0]) && alreadyWarned[args[0]]) return;\n if (isString(args[0])) alreadyWarned[args[0]] = new Date();\n warn(...args);\n}\nconst loadedClb = (i18n, cb) => () => {\n if (i18n.isInitialized) {\n cb();\n } else {\n const initialized = () => {\n setTimeout(() => {\n i18n.off('initialized', initialized);\n }, 0);\n cb();\n };\n i18n.on('initialized', initialized);\n }\n};\nexport const loadNamespaces = (i18n, ns, cb) => {\n i18n.loadNamespaces(ns, loadedClb(i18n, cb));\n};\nexport const loadLanguages = (i18n, lng, ns, cb) => {\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (i18n.options.ns.indexOf(n) < 0) i18n.options.ns.push(n);\n });\n i18n.loadLanguages(lng, loadedClb(i18n, cb));\n};\nconst oldI18nextHasLoadedNamespace = function (ns, i18n) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const lng = i18n.languages[0];\n const fallbackLng = i18n.options ? i18n.options.fallbackLng : false;\n const lastLng = i18n.languages[i18n.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = i18n.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 2;\n };\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false;\n if (i18n.hasResourceBundle(lng, ns)) return true;\n if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n};\nexport const hasLoadedNamespace = function (ns, i18n) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n if (!i18n.languages || !i18n.languages.length) {\n warnOnce('i18n.languages were undefined or empty', i18n.languages);\n return true;\n }\n const isNewerI18next = i18n.options.ignoreJSONStructure !== undefined;\n if (!isNewerI18next) {\n return oldI18nextHasLoadedNamespace(ns, i18n, options);\n }\n return i18n.hasLoadedNamespace(ns, {\n lng: options.lng,\n precheck: (i18nInstance, loadNotPending) => {\n if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false;\n }\n });\n};\nexport const getDisplayName = Component => Component.displayName || Component.name || (isString(Component) && Component.length > 0 ? Component : 'Unknown');\nexport const isString = obj => typeof obj === 'string';\nexport const isObject = obj => typeof obj === 'object' && obj !== null;","const matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g;\nconst htmlEntities = {\n '&': '&',\n '&': '&',\n '<': '<',\n '<': '<',\n '>': '>',\n '>': '>',\n ''': \"'\",\n ''': \"'\",\n '"': '\"',\n '"': '\"',\n ' ': ' ',\n ' ': ' ',\n '©': '©',\n '©': '©',\n '®': '®',\n '®': '®',\n '…': '…',\n '…': '…',\n '/': '/',\n '/': '/'\n};\nconst unescapeHtmlEntity = m => htmlEntities[m];\nexport const unescape = text => text.replace(matchHtmlEntity, unescapeHtmlEntity);","import { unescape } from './unescape.js';\nlet defaultOptions = {\n bindI18n: 'languageChanged',\n bindI18nStore: '',\n transEmptyNodeValue: '',\n transSupportBasicHtmlNodes: true,\n transWrapTextNodes: '',\n transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'],\n useSuspense: true,\n unescape\n};\nexport const setDefaults = function () {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n defaultOptions = {\n ...defaultOptions,\n ...options\n };\n};\nexport const getDefaults = () => defaultOptions;","let i18nInstance;\nexport const setI18n = instance => {\n i18nInstance = instance;\n};\nexport const getI18n = () => i18nInstance;","import { setDefaults } from './defaults.js';\nimport { setI18n } from './i18nInstance.js';\nexport const initReactI18next = {\n type: '3rdParty',\n init(instance) {\n setDefaults(instance.options.react);\n setI18n(instance);\n }\n};","import { createContext } from 'react';\nimport { getDefaults, setDefaults } from './defaults.js';\nimport { getI18n, setI18n } from './i18nInstance.js';\nimport { initReactI18next } from './initReactI18next.js';\nexport { getDefaults, setDefaults, getI18n, setI18n, initReactI18next };\nexport const I18nContext = createContext();\nexport class ReportNamespaces {\n constructor() {\n this.usedNamespaces = {};\n }\n addUsedNamespaces(namespaces) {\n namespaces.forEach(ns => {\n if (!this.usedNamespaces[ns]) this.usedNamespaces[ns] = true;\n });\n }\n getUsedNamespaces = () => Object.keys(this.usedNamespaces);\n}\nexport const composeInitialProps = ForComponent => async ctx => {\n const componentsInitialProps = ForComponent.getInitialProps ? await ForComponent.getInitialProps(ctx) : {};\n const i18nInitialProps = getInitialProps();\n return {\n ...componentsInitialProps,\n ...i18nInitialProps\n };\n};\nexport const getInitialProps = () => {\n const i18n = getI18n();\n const namespaces = i18n.reportNamespaces ? i18n.reportNamespaces.getUsedNamespaces() : [];\n const ret = {};\n const initialI18nStore = {};\n i18n.languages.forEach(l => {\n initialI18nStore[l] = {};\n namespaces.forEach(ns => {\n initialI18nStore[l][ns] = i18n.getResourceBundle(l, ns) || {};\n });\n });\n ret.initialI18nStore = initialI18nStore;\n ret.initialLanguage = i18n.language;\n return ret;\n};","import { useState, useEffect, useContext, useRef, useCallback } from 'react';\nimport { getI18n, getDefaults, ReportNamespaces, I18nContext } from './context.js';\nimport { warnOnce, loadNamespaces, loadLanguages, hasLoadedNamespace, isString, isObject } from './utils.js';\nconst usePrevious = (value, ignore) => {\n const ref = useRef();\n useEffect(() => {\n ref.current = ignore ? ref.current : value;\n }, [value, ignore]);\n return ref.current;\n};\nconst alwaysNewT = (i18n, language, namespace, keyPrefix) => i18n.getFixedT(language, namespace, keyPrefix);\nconst useMemoizedT = (i18n, language, namespace, keyPrefix) => useCallback(alwaysNewT(i18n, language, namespace, keyPrefix), [i18n, language, namespace, keyPrefix]);\nexport const useTranslation = function (ns) {\n let props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const {\n i18n: i18nFromProps\n } = props;\n const {\n i18n: i18nFromContext,\n defaultNS: defaultNSFromContext\n } = useContext(I18nContext) || {};\n const i18n = i18nFromProps || i18nFromContext || getI18n();\n if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces();\n if (!i18n) {\n warnOnce('You will need to pass in an i18next instance by using initReactI18next');\n const notReadyT = (k, optsOrDefaultValue) => {\n if (isString(optsOrDefaultValue)) return optsOrDefaultValue;\n if (isObject(optsOrDefaultValue) && isString(optsOrDefaultValue.defaultValue)) return optsOrDefaultValue.defaultValue;\n return Array.isArray(k) ? k[k.length - 1] : k;\n };\n const retNotReady = [notReadyT, {}, false];\n retNotReady.t = notReadyT;\n retNotReady.i18n = {};\n retNotReady.ready = false;\n return retNotReady;\n }\n if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.');\n const i18nOptions = {\n ...getDefaults(),\n ...i18n.options.react,\n ...props\n };\n const {\n useSuspense,\n keyPrefix\n } = i18nOptions;\n let namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS;\n namespaces = isString(namespaces) ? [namespaces] : namespaces || ['translation'];\n if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces);\n const ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(n => hasLoadedNamespace(n, i18n, i18nOptions));\n const memoGetT = useMemoizedT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const getT = () => memoGetT;\n const getNewT = () => alwaysNewT(i18n, props.lng || null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix);\n const [t, setT] = useState(getT);\n let joinedNS = namespaces.join();\n if (props.lng) joinedNS = `${props.lng}${joinedNS}`;\n const previousJoinedNS = usePrevious(joinedNS);\n const isMounted = useRef(true);\n useEffect(() => {\n const {\n bindI18n,\n bindI18nStore\n } = i18nOptions;\n isMounted.current = true;\n if (!ready && !useSuspense) {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n } else {\n loadNamespaces(i18n, namespaces, () => {\n if (isMounted.current) setT(getNewT);\n });\n }\n }\n if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) {\n setT(getNewT);\n }\n const boundReset = () => {\n if (isMounted.current) setT(getNewT);\n };\n if (bindI18n && i18n) i18n.on(bindI18n, boundReset);\n if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset);\n return () => {\n isMounted.current = false;\n if (bindI18n && i18n) bindI18n.split(' ').forEach(e => i18n.off(e, boundReset));\n if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(e => i18n.store.off(e, boundReset));\n };\n }, [i18n, joinedNS]);\n useEffect(() => {\n if (isMounted.current && ready) {\n setT(getT);\n }\n }, [i18n, keyPrefix, ready]);\n const ret = [t, i18n, ready];\n ret.t = t;\n ret.i18n = i18n;\n ret.ready = ready;\n if (ready) return ret;\n if (!ready && !useSuspense) return ret;\n throw new Promise(resolve => {\n if (props.lng) {\n loadLanguages(i18n, props.lng, namespaces, () => resolve());\n } else {\n loadNamespaces(i18n, namespaces, () => resolve());\n }\n });\n};","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar arr = [];\nvar each = arr.forEach;\nvar slice = arr.slice;\nexport function defaults(obj) {\n each.call(slice.call(arguments, 1), function (source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === undefined) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n}\nexport function hasXMLHttpRequest() {\n return typeof XMLHttpRequest === 'function' || (typeof XMLHttpRequest === \"undefined\" ? \"undefined\" : _typeof(XMLHttpRequest)) === 'object';\n}\nfunction isPromise(maybePromise) {\n return !!maybePromise && typeof maybePromise.then === 'function';\n}\nexport function makePromise(maybePromise) {\n if (isPromise(maybePromise)) {\n return maybePromise;\n }\n return Promise.resolve(maybePromise);\n}","// Save global object in a variable\nvar __global__ =\n(typeof globalThis !== 'undefined' && globalThis) ||\n(typeof self !== 'undefined' && self) ||\n(typeof global !== 'undefined' && global);\n// Create an object that extends from __global__ without the fetch function\nvar __globalThis__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = __global__.DOMException\n}\nF.prototype = __global__; // Needed for feature detection on whatwg-fetch's code\nreturn new F();\n})();\n// Wraps whatwg-fetch with a function scope to hijack the global object\n// \"globalThis\" that's going to be patched\n(function(globalThis) {\n\nvar irrelevant = (function (exports) {\n\n var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global);\n\n var support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed;\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this);\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/;\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/;\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();\n }\n }\n }\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText;\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = global.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n setTimeout(function() {\n resolve(new Response(body, options));\n }, 0);\n };\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'));\n }, 0);\n };\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n }, 0);\n };\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob';\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer';\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]));\n });\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!global.fetch) {\n global.fetch = fetch;\n global.Headers = Headers;\n global.Request = Request;\n global.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n return exports;\n\n})({});\n})(__globalThis__);\n// This is a ponyfill, so...\n__globalThis__.fetch.ponyfill = true;\ndelete __globalThis__.fetch.polyfill;\n// Choose between native implementation (__global__) or custom implementation (__globalThis__)\nvar ctx = __global__.fetch ? __global__ : __globalThis__;\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n","var fetchApi = typeof fetch === 'function' ? fetch : undefined\nif (typeof global !== 'undefined' && global.fetch) {\n fetchApi = global.fetch\n} else if (typeof window !== 'undefined' && window.fetch) {\n fetchApi = window.fetch\n}\n\nif (typeof require !== 'undefined' && typeof window === 'undefined') {\n var f = fetchApi || require('cross-fetch')\n if (f.default) f = f.default\n exports.default = f\n module.exports = exports.default\n}\n","function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nimport { hasXMLHttpRequest } from './utils.js';\nimport * as fetchNode from './getFetch.cjs';\nvar fetchApi = typeof fetch === 'function' ? fetch : undefined;\nif (typeof global !== 'undefined' && global.fetch) {\n fetchApi = global.fetch;\n} else if (typeof window !== 'undefined' && window.fetch) {\n fetchApi = window.fetch;\n}\nvar XmlHttpRequestApi;\nif (hasXMLHttpRequest()) {\n if (typeof global !== 'undefined' && global.XMLHttpRequest) {\n XmlHttpRequestApi = global.XMLHttpRequest;\n } else if (typeof window !== 'undefined' && window.XMLHttpRequest) {\n XmlHttpRequestApi = window.XMLHttpRequest;\n }\n}\nvar ActiveXObjectApi;\nif (typeof ActiveXObject === 'function') {\n if (typeof global !== 'undefined' && global.ActiveXObject) {\n ActiveXObjectApi = global.ActiveXObject;\n } else if (typeof window !== 'undefined' && window.ActiveXObject) {\n ActiveXObjectApi = window.ActiveXObject;\n }\n}\nif (!fetchApi && fetchNode && !XmlHttpRequestApi && !ActiveXObjectApi) fetchApi = fetchNode.default || fetchNode;\nif (typeof fetchApi !== 'function') fetchApi = undefined;\nvar addQueryString = function addQueryString(url, params) {\n if (params && _typeof(params) === 'object') {\n var queryString = '';\n for (var paramName in params) {\n queryString += '&' + encodeURIComponent(paramName) + '=' + encodeURIComponent(params[paramName]);\n }\n if (!queryString) return url;\n url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);\n }\n return url;\n};\nvar fetchIt = function fetchIt(url, fetchOptions, callback, altFetch) {\n var resolver = function resolver(response) {\n if (!response.ok) return callback(response.statusText || 'Error', {\n status: response.status\n });\n response.text().then(function (data) {\n callback(null, {\n status: response.status,\n data: data\n });\n }).catch(callback);\n };\n if (altFetch) {\n var altResponse = altFetch(url, fetchOptions);\n if (altResponse instanceof Promise) {\n altResponse.then(resolver).catch(callback);\n return;\n }\n }\n if (typeof fetch === 'function') {\n fetch(url, fetchOptions).then(resolver).catch(callback);\n } else {\n fetchApi(url, fetchOptions).then(resolver).catch(callback);\n }\n};\nvar omitFetchOptions = false;\nvar requestWithFetch = function requestWithFetch(options, url, payload, callback) {\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n var headers = _objectSpread({}, typeof options.customHeaders === 'function' ? options.customHeaders() : options.customHeaders);\n if (typeof window === 'undefined' && typeof global !== 'undefined' && typeof global.process !== 'undefined' && global.process.versions && global.process.versions.node) {\n headers['User-Agent'] = \"i18next-http-backend (node/\".concat(global.process.version, \"; \").concat(global.process.platform, \" \").concat(global.process.arch, \")\");\n }\n if (payload) headers['Content-Type'] = 'application/json';\n var reqOptions = typeof options.requestOptions === 'function' ? options.requestOptions(payload) : options.requestOptions;\n var fetchOptions = _objectSpread({\n method: payload ? 'POST' : 'GET',\n body: payload ? options.stringify(payload) : undefined,\n headers: headers\n }, omitFetchOptions ? {} : reqOptions);\n var altFetch = typeof options.alternateFetch === 'function' && options.alternateFetch.length >= 1 ? options.alternateFetch : undefined;\n try {\n fetchIt(url, fetchOptions, callback, altFetch);\n } catch (e) {\n if (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf('not implemented') < 0) {\n return callback(e);\n }\n try {\n Object.keys(reqOptions).forEach(function (opt) {\n delete fetchOptions[opt];\n });\n fetchIt(url, fetchOptions, callback, altFetch);\n omitFetchOptions = true;\n } catch (err) {\n callback(err);\n }\n }\n};\nvar requestWithXmlHttpRequest = function requestWithXmlHttpRequest(options, url, payload, callback) {\n if (payload && _typeof(payload) === 'object') {\n payload = addQueryString('', payload).slice(1);\n }\n if (options.queryStringParams) {\n url = addQueryString(url, options.queryStringParams);\n }\n try {\n var x;\n if (XmlHttpRequestApi) {\n x = new XmlHttpRequestApi();\n } else {\n x = new ActiveXObjectApi('MSXML2.XMLHTTP.3.0');\n }\n x.open(payload ? 'POST' : 'GET', url, 1);\n if (!options.crossDomain) {\n x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n x.withCredentials = !!options.withCredentials;\n if (payload) {\n x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n if (x.overrideMimeType) {\n x.overrideMimeType('application/json');\n }\n var h = options.customHeaders;\n h = typeof h === 'function' ? h() : h;\n if (h) {\n for (var i in h) {\n x.setRequestHeader(i, h[i]);\n }\n }\n x.onreadystatechange = function () {\n x.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, {\n status: x.status,\n data: x.responseText\n });\n };\n x.send(payload);\n } catch (e) {\n console && console.log(e);\n }\n};\nvar request = function request(options, url, payload, callback) {\n if (typeof payload === 'function') {\n callback = payload;\n payload = undefined;\n }\n callback = callback || function () {};\n if (fetchApi && url.indexOf('file:') !== 0) {\n return requestWithFetch(options, url, payload, callback);\n }\n if (hasXMLHttpRequest() || typeof ActiveXObject === 'function') {\n return requestWithXmlHttpRequest(options, url, payload, callback);\n }\n callback(new Error('No fetch and no xhr implementation found!'));\n};\nexport default request;","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { makePromise } from './utils.js';\nimport request from './request.js';\nvar getDefaults = function getDefaults() {\n return {\n loadPath: '/locales/{{lng}}/{{ns}}.json',\n addPath: '/locales/add/{{lng}}/{{ns}}',\n parse: function parse(data) {\n return JSON.parse(data);\n },\n stringify: JSON.stringify,\n parsePayload: function parsePayload(namespace, key, fallbackValue) {\n return _defineProperty({}, key, fallbackValue || '');\n },\n parseLoadPayload: function parseLoadPayload(languages, namespaces) {\n return undefined;\n },\n request: request,\n reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000,\n customHeaders: {},\n queryStringParams: {},\n crossDomain: false,\n withCredentials: false,\n overrideMimeType: false,\n requestOptions: {\n mode: 'cors',\n credentials: 'same-origin',\n cache: 'default'\n }\n };\n};\nvar Backend = function () {\n function Backend(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n _classCallCheck(this, Backend);\n this.services = services;\n this.options = options;\n this.allOptions = allOptions;\n this.type = 'backend';\n this.init(services, options, allOptions);\n }\n return _createClass(Backend, [{\n key: \"init\",\n value: function init(services) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n this.services = services;\n this.options = _objectSpread(_objectSpread(_objectSpread({}, getDefaults()), this.options || {}), options);\n this.allOptions = allOptions;\n if (this.services && this.options.reloadInterval) {\n var timer = setInterval(function () {\n return _this.reload();\n }, this.options.reloadInterval);\n if (_typeof(timer) === 'object' && typeof timer.unref === 'function') timer.unref();\n }\n }\n }, {\n key: \"readMulti\",\n value: function readMulti(languages, namespaces, callback) {\n this._readAny(languages, languages, namespaces, namespaces, callback);\n }\n }, {\n key: \"read\",\n value: function read(language, namespace, callback) {\n this._readAny([language], language, [namespace], namespace, callback);\n }\n }, {\n key: \"_readAny\",\n value: function _readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) {\n var _this2 = this;\n var loadPath = this.options.loadPath;\n if (typeof this.options.loadPath === 'function') {\n loadPath = this.options.loadPath(languages, namespaces);\n }\n loadPath = makePromise(loadPath);\n loadPath.then(function (resolvedLoadPath) {\n if (!resolvedLoadPath) return callback(null, {});\n var url = _this2.services.interpolator.interpolate(resolvedLoadPath, {\n lng: languages.join('+'),\n ns: namespaces.join('+')\n });\n _this2.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces);\n });\n }\n }, {\n key: \"loadUrl\",\n value: function loadUrl(url, callback, languages, namespaces) {\n var _this3 = this;\n var lng = typeof languages === 'string' ? [languages] : languages;\n var ns = typeof namespaces === 'string' ? [namespaces] : namespaces;\n var payload = this.options.parseLoadPayload(lng, ns);\n this.options.request(this.options, url, payload, function (err, res) {\n if (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback('failed loading ' + url + '; status code: ' + res.status, true);\n if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + url + '; status code: ' + res.status, false);\n if (!res && err && err.message) {\n var errorMessage = err.message.toLowerCase();\n var isNetworkError = ['failed', 'fetch', 'network', 'load'].find(function (term) {\n return errorMessage.indexOf(term) > -1;\n });\n if (isNetworkError) {\n return callback('failed loading ' + url + ': ' + err.message, true);\n }\n }\n if (err) return callback(err, false);\n var ret, parseErr;\n try {\n if (typeof res.data === 'string') {\n ret = _this3.options.parse(res.data, languages, namespaces);\n } else {\n ret = res.data;\n }\n } catch (e) {\n parseErr = 'failed parsing ' + url + ' to json';\n }\n if (parseErr) return callback(parseErr, false);\n callback(null, ret);\n });\n }\n }, {\n key: \"create\",\n value: function create(languages, namespace, key, fallbackValue, callback) {\n var _this4 = this;\n if (!this.options.addPath) return;\n if (typeof languages === 'string') languages = [languages];\n var payload = this.options.parsePayload(namespace, key, fallbackValue);\n var finished = 0;\n var dataArray = [];\n var resArray = [];\n languages.forEach(function (lng) {\n var addPath = _this4.options.addPath;\n if (typeof _this4.options.addPath === 'function') {\n addPath = _this4.options.addPath(lng, namespace);\n }\n var url = _this4.services.interpolator.interpolate(addPath, {\n lng: lng,\n ns: namespace\n });\n _this4.options.request(_this4.options, url, payload, function (data, res) {\n finished += 1;\n dataArray.push(data);\n resArray.push(res);\n if (finished === languages.length) {\n if (typeof callback === 'function') callback(dataArray, resArray);\n }\n });\n });\n }\n }, {\n key: \"reload\",\n value: function reload() {\n var _this5 = this;\n var _this$services = this.services,\n backendConnector = _this$services.backendConnector,\n languageUtils = _this$services.languageUtils,\n logger = _this$services.logger;\n var currentLanguage = backendConnector.language;\n if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return;\n var toLoad = [];\n var append = function append(lng) {\n var lngs = languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function (l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n append(currentLanguage);\n if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) {\n return append(l);\n });\n toLoad.forEach(function (lng) {\n _this5.allOptions.ns.forEach(function (ns) {\n backendConnector.read(lng, ns, 'read', null, null, function (err, data) {\n if (err) logger.warn(\"loading namespace \".concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) logger.log(\"loaded namespace \".concat(ns, \" for language \").concat(lng), data);\n backendConnector.loaded(\"\".concat(lng, \"|\").concat(ns), err, data);\n });\n });\n });\n }\n }]);\n}();\nBackend.type = 'backend';\nexport default Backend;","export const APP_PREFIX = import.meta.env.VITE_APP_PREFIX || \"/tma-portal\";","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport HttpApi, { HttpBackendOptions } from \"i18next-http-backend\";\nimport { APP_PREFIX } from './environment';\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .use(HttpApi)\n .init({\n load: \"currentOnly\",\n lng: \"en\",\n fallbackLng: \"en\",\n react: {\n // wait: true,\n },\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n backend: {\n loadPath: `${APP_PREFIX}/locales/{{lng}}/translation.json?cb=${new Date().getTime()}`,\n },\n });\n\nexport default i18n;\n","import { jsx as n, Fragment as f } from \"react/jsx-runtime\";\nfunction a(e) {\n let i = e;\n return Array.isArray(e) || (i = Object.keys(e).reduce((r, t) => (r.push(e[t]), r), [])), i.reduce(\n (r, t) => ({ children: u }) => /* @__PURE__ */ n(r, { children: /* @__PURE__ */ n(t, { children: u }) }),\n ({ children: r }) => /* @__PURE__ */ n(f, { children: r })\n );\n}\nexport {\n a as combineComponents\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZS1jb21wb25lbnRzLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29udGV4dHMvbG92L2NvbWJpbmUtY29tcG9uZW50cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRkMsIFByb3BzV2l0aENoaWxkcmVuIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lQ29tcG9uZW50cyhjb21wb25lbnRzOiBGQzxQcm9wc1dpdGhDaGlsZHJlbj5bXSk6IEZDIHtcbiAgbGV0IGFycmF5T2ZDb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBvbmVudHMpKSB7XG4gICAgYXJyYXlPZkNvbXBvbmVudHMgPSBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5yZWR1Y2UoKGFjY3VtdWxhdGVkLCBrZXkpID0+IHtcbiAgICAgIGFjY3VtdWxhdGVkLnB1c2goY29tcG9uZW50c1trZXldKTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZDtcbiAgICB9LCBbXSk7XG4gIH1cblxuICByZXR1cm4gYXJyYXlPZkNvbXBvbmVudHMucmVkdWNlKFxuICAgIChBY2N1bXVsYXRlZENvbXBvbmVudHMsIEN1cnJlbnRDb21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiAoeyBjaGlsZHJlbiB9KTogSlNYLkVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxBY2N1bXVsYXRlZENvbXBvbmVudHM+XG4gICAgICAgICAgICA8Q3VycmVudENvbXBvbmVudD57Y2hpbGRyZW59PC9DdXJyZW50Q29tcG9uZW50PlxuICAgICAgICAgIDwvQWNjdW11bGF0ZWRDb21wb25lbnRzPlxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9LFxuICAgICh7IGNoaWxkcmVuIH0pID0+IDw+e2NoaWxkcmVufTwvPixcbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJjb21iaW5lQ29tcG9uZW50cyIsImNvbXBvbmVudHMiLCJhcnJheU9mQ29tcG9uZW50cyIsImFjY3VtdWxhdGVkIiwia2V5IiwiQWNjdW11bGF0ZWRDb21wb25lbnRzIiwiQ3VycmVudENvbXBvbmVudCIsImNoaWxkcmVuIiwianN4Il0sIm1hcHBpbmdzIjoiO0FBRU8sU0FBU0EsRUFBa0JDLEdBQXlDO0FBQ3pFLE1BQUlDLElBQW9CRDtBQUN4QixTQUFLLE1BQU0sUUFBUUEsQ0FBVSxNQUMzQkMsSUFBb0IsT0FBTyxLQUFLRCxDQUFVLEVBQUUsT0FBTyxDQUFDRSxHQUFhQyxPQUNuREQsRUFBQSxLQUFLRixFQUFXRyxDQUFHLENBQUMsR0FDekJELElBQ04sRUFBRSxJQUdBRCxFQUFrQjtBQUFBLElBQ3ZCLENBQUNHLEdBQXVCQyxNQUNmLENBQUMsRUFBRSxVQUFBQyxRQUVMLGdCQUFBQyxFQUFBSCxHQUFBLEVBQ0MsVUFBQyxnQkFBQUcsRUFBQUYsR0FBQSxFQUFrQixVQUFBQyxFQUFTLENBQUEsR0FDOUI7QUFBQSxJQUlOLENBQUMsRUFBRSxVQUFBQSxFQUFTLDZCQUFTLFVBQUFBLEVBQVMsQ0FBQTtBQUFBLEVBQ2hDO0FBQ0Y7In0=\n","const B = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\"\n },\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\"\n },\n halfAMinute: \"half a minute\",\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\"\n },\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\"\n },\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\"\n },\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\"\n },\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\"\n },\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\"\n },\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\"\n },\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\"\n },\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\"\n },\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\"\n },\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\"\n },\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\"\n },\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\"\n }\n}, A = (t, n, e) => {\n let a;\n const r = B[t];\n return typeof r == \"string\" ? a = r : n === 1 ? a = r.one : a = r.other.replace(\"{{count}}\", n.toString()), e != null && e.addSuffix ? e.comparison && e.comparison > 0 ? \"in \" + a : a + \" ago\" : a;\n};\nfunction S(t) {\n return (n = {}) => {\n const e = n.width ? String(n.width) : t.defaultWidth;\n return t.formats[e] || t.formats[t.defaultWidth];\n };\n}\nconst V = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\"\n}, J = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\"\n}, $ = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\"\n}, U = {\n date: S({\n formats: V,\n defaultWidth: \"full\"\n }),\n time: S({\n formats: J,\n defaultWidth: \"full\"\n }),\n dateTime: S({\n formats: $,\n defaultWidth: \"full\"\n })\n}, z = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\"\n}, K = (t, n, e, a) => z[t];\nfunction k(t) {\n return (n, e) => {\n const a = e != null && e.context ? String(e.context) : \"standalone\";\n let r;\n if (a === \"formatting\" && t.formattingValues) {\n const o = t.defaultFormattingWidth || t.defaultWidth, c = e != null && e.width ? String(e.width) : o;\n r = t.formattingValues[c] || t.formattingValues[o];\n } else {\n const o = t.defaultWidth, c = e != null && e.width ? String(e.width) : t.defaultWidth;\n r = t.values[c] || t.values[o];\n }\n const s = t.argumentCallback ? t.argumentCallback(n) : n;\n return r[s];\n };\n}\nconst Z = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"]\n}, tt = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"]\n}, et = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n ],\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n ]\n}, nt = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\"\n ]\n}, at = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\"\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\"\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\"\n }\n}, rt = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\"\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\"\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\"\n }\n}, st = (t, n) => {\n const e = Number(t), a = e % 100;\n if (a > 20 || a < 10)\n switch (a % 10) {\n case 1:\n return e + \"st\";\n case 2:\n return e + \"nd\";\n case 3:\n return e + \"rd\";\n }\n return e + \"th\";\n}, it = {\n ordinalNumber: st,\n era: k({\n values: Z,\n defaultWidth: \"wide\"\n }),\n quarter: k({\n values: tt,\n defaultWidth: \"wide\",\n argumentCallback: (t) => t - 1\n }),\n month: k({\n values: et,\n defaultWidth: \"wide\"\n }),\n day: k({\n values: nt,\n defaultWidth: \"wide\"\n }),\n dayPeriod: k({\n values: at,\n defaultWidth: \"wide\",\n formattingValues: rt,\n defaultFormattingWidth: \"wide\"\n })\n};\nfunction D(t) {\n return (n, e = {}) => {\n const a = e.width, r = a && t.matchPatterns[a] || t.matchPatterns[t.defaultMatchWidth], s = n.match(r);\n if (!s)\n return null;\n const o = s[0], c = a && t.parsePatterns[a] || t.parsePatterns[t.defaultParseWidth], u = Array.isArray(c) ? ct(c, (g) => g.test(o)) : (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n ot(c, (g) => g.test(o))\n );\n let d;\n d = t.valueCallback ? t.valueCallback(u) : u, d = e.valueCallback ? (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- I challange you to fix the type\n e.valueCallback(d)\n ) : d;\n const h = n.slice(o.length);\n return { value: d, rest: h };\n };\n}\nfunction ot(t, n) {\n for (const e in t)\n if (Object.prototype.hasOwnProperty.call(t, e) && n(t[e]))\n return e;\n}\nfunction ct(t, n) {\n for (let e = 0; e < t.length; e++)\n if (n(t[e]))\n return e;\n}\nfunction ut(t) {\n return (n, e = {}) => {\n const a = n.match(t.matchPattern);\n if (!a) return null;\n const r = a[0], s = n.match(t.parsePattern);\n if (!s) return null;\n let o = t.valueCallback ? t.valueCallback(s[0]) : s[0];\n o = e.valueCallback ? e.valueCallback(o) : o;\n const c = n.slice(r.length);\n return { value: o, rest: c };\n };\n}\nconst dt = /^(\\d+)(th|st|nd|rd)?/i, ft = /\\d+/i, ht = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n}, mt = {\n any: [/^b/i, /^(a|c)/i]\n}, lt = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n}, gt = {\n any: [/1/i, /2/i, /3/i, /4/i]\n}, wt = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n}, yt = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i\n ],\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i\n ]\n}, bt = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n}, Mt = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n}, Pt = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n}, Ot = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n}, kt = {\n ordinalNumber: ut({\n matchPattern: dt,\n parsePattern: ft,\n valueCallback: (t) => parseInt(t, 10)\n }),\n era: D({\n matchPatterns: ht,\n defaultMatchWidth: \"wide\",\n parsePatterns: mt,\n defaultParseWidth: \"any\"\n }),\n quarter: D({\n matchPatterns: lt,\n defaultMatchWidth: \"wide\",\n parsePatterns: gt,\n defaultParseWidth: \"any\",\n valueCallback: (t) => t + 1\n }),\n month: D({\n matchPatterns: wt,\n defaultMatchWidth: \"wide\",\n parsePatterns: yt,\n defaultParseWidth: \"any\"\n }),\n day: D({\n matchPatterns: bt,\n defaultMatchWidth: \"wide\",\n parsePatterns: Mt,\n defaultParseWidth: \"any\"\n }),\n dayPeriod: D({\n matchPatterns: Pt,\n defaultMatchWidth: \"any\",\n parsePatterns: Ot,\n defaultParseWidth: \"any\"\n })\n}, Dt = {\n code: \"en-US\",\n formatDistance: A,\n formatLong: U,\n formatRelative: K,\n localize: it,\n match: kt,\n options: {\n weekStartsOn: 0,\n firstWeekContainsDate: 1\n }\n};\nlet X = {};\nfunction v() {\n return X;\n}\nfunction Zt(t) {\n X = t;\n}\nconst te = 7, Wt = 365.2425, j = 6048e5, xt = 864e5, ee = 6e4, ne = 36e5, ae = 1e3, re = 525600, se = 43200, ie = 1440, oe = 60, ce = 3, ue = 12, de = 4, vt = 3600, fe = 60, L = vt * 24, he = L * 7, Yt = L * Wt, St = Yt / 12, me = St * 3;\nfunction l(t) {\n const n = Object.prototype.toString.call(t);\n return t instanceof Date || typeof t == \"object\" && n === \"[object Date]\" ? new t.constructor(+t) : typeof t == \"number\" || n === \"[object Number]\" || typeof t == \"string\" || n === \"[object String]\" ? new Date(t) : /* @__PURE__ */ new Date(NaN);\n}\nfunction C(t) {\n const n = l(t);\n return n.setHours(0, 0, 0, 0), n;\n}\nfunction q(t) {\n const n = l(t), e = new Date(\n Date.UTC(\n n.getFullYear(),\n n.getMonth(),\n n.getDate(),\n n.getHours(),\n n.getMinutes(),\n n.getSeconds(),\n n.getMilliseconds()\n )\n );\n return e.setUTCFullYear(n.getFullYear()), +t - +e;\n}\nfunction Tt(t, n) {\n const e = C(t), a = C(n), r = +e - q(e), s = +a - q(a);\n return Math.round((r - s) / xt);\n}\nfunction b(t, n) {\n return t instanceof Date ? new t.constructor(n) : new Date(n);\n}\nfunction Et(t) {\n const n = l(t), e = b(t, 0);\n return e.setFullYear(n.getFullYear(), 0, 1), e.setHours(0, 0, 0, 0), e;\n}\nfunction Ft(t) {\n const n = l(t);\n return Tt(n, Et(n)) + 1;\n}\nfunction W(t, n) {\n var c, u, d, h;\n const e = v(), a = (n == null ? void 0 : n.weekStartsOn) ?? ((u = (c = n == null ? void 0 : n.locale) == null ? void 0 : c.options) == null ? void 0 : u.weekStartsOn) ?? e.weekStartsOn ?? ((h = (d = e.locale) == null ? void 0 : d.options) == null ? void 0 : h.weekStartsOn) ?? 0, r = l(t), s = r.getDay(), o = (s < a ? 7 : 0) + s - a;\n return r.setDate(r.getDate() - o), r.setHours(0, 0, 0, 0), r;\n}\nfunction x(t) {\n return W(t, { weekStartsOn: 1 });\n}\nfunction _(t) {\n const n = l(t), e = n.getFullYear(), a = b(t, 0);\n a.setFullYear(e + 1, 0, 4), a.setHours(0, 0, 0, 0);\n const r = x(a), s = b(t, 0);\n s.setFullYear(e, 0, 4), s.setHours(0, 0, 0, 0);\n const o = x(s);\n return n.getTime() >= r.getTime() ? e + 1 : n.getTime() >= o.getTime() ? e : e - 1;\n}\nfunction pt(t) {\n const n = _(t), e = b(t, 0);\n return e.setFullYear(n, 0, 4), e.setHours(0, 0, 0, 0), x(e);\n}\nfunction Ct(t) {\n const n = l(t), e = +x(n) - +pt(n);\n return Math.round(e / j) + 1;\n}\nfunction G(t, n) {\n var h, g, P, O;\n const e = l(t), a = e.getFullYear(), r = v(), s = (n == null ? void 0 : n.firstWeekContainsDate) ?? ((g = (h = n == null ? void 0 : n.locale) == null ? void 0 : h.options) == null ? void 0 : g.firstWeekContainsDate) ?? r.firstWeekContainsDate ?? ((O = (P = r.locale) == null ? void 0 : P.options) == null ? void 0 : O.firstWeekContainsDate) ?? 1, o = b(t, 0);\n o.setFullYear(a + 1, 0, s), o.setHours(0, 0, 0, 0);\n const c = W(o, n), u = b(t, 0);\n u.setFullYear(a, 0, s), u.setHours(0, 0, 0, 0);\n const d = W(u, n);\n return e.getTime() >= c.getTime() ? a + 1 : e.getTime() >= d.getTime() ? a : a - 1;\n}\nfunction qt(t, n) {\n var c, u, d, h;\n const e = v(), a = (n == null ? void 0 : n.firstWeekContainsDate) ?? ((u = (c = n == null ? void 0 : n.locale) == null ? void 0 : c.options) == null ? void 0 : u.firstWeekContainsDate) ?? e.firstWeekContainsDate ?? ((h = (d = e.locale) == null ? void 0 : d.options) == null ? void 0 : h.firstWeekContainsDate) ?? 1, r = G(t, n), s = b(t, 0);\n return s.setFullYear(r, 0, a), s.setHours(0, 0, 0, 0), W(s, n);\n}\nfunction Nt(t, n) {\n const e = l(t), a = +W(e, n) - +qt(e, n);\n return Math.round(a / j) + 1;\n}\nfunction i(t, n) {\n const e = t < 0 ? \"-\" : \"\", a = Math.abs(t).toString().padStart(n, \"0\");\n return e + a;\n}\nconst w = {\n // Year\n y(t, n) {\n const e = t.getFullYear(), a = e > 0 ? e : 1 - e;\n return i(n === \"yy\" ? a % 100 : a, n.length);\n },\n // Month\n M(t, n) {\n const e = t.getMonth();\n return n === \"M\" ? String(e + 1) : i(e + 1, 2);\n },\n // Day of the month\n d(t, n) {\n return i(t.getDate(), n.length);\n },\n // AM or PM\n a(t, n) {\n const e = t.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n switch (n) {\n case \"a\":\n case \"aa\":\n return e.toUpperCase();\n case \"aaa\":\n return e;\n case \"aaaaa\":\n return e[0];\n case \"aaaa\":\n default:\n return e === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n // Hour [1-12]\n h(t, n) {\n return i(t.getHours() % 12 || 12, n.length);\n },\n // Hour [0-23]\n H(t, n) {\n return i(t.getHours(), n.length);\n },\n // Minute\n m(t, n) {\n return i(t.getMinutes(), n.length);\n },\n // Second\n s(t, n) {\n return i(t.getSeconds(), n.length);\n },\n // Fraction of second\n S(t, n) {\n const e = n.length, a = t.getMilliseconds(), r = Math.trunc(\n a * Math.pow(10, e - 3)\n );\n return i(r, n.length);\n }\n}, M = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\"\n}, N = {\n // Era\n G: function(t, n, e) {\n const a = t.getFullYear() > 0 ? 1 : 0;\n switch (n) {\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return e.era(a, { width: \"abbreviated\" });\n case \"GGGGG\":\n return e.era(a, { width: \"narrow\" });\n case \"GGGG\":\n default:\n return e.era(a, { width: \"wide\" });\n }\n },\n // Year\n y: function(t, n, e) {\n if (n === \"yo\") {\n const a = t.getFullYear(), r = a > 0 ? a : 1 - a;\n return e.ordinalNumber(r, { unit: \"year\" });\n }\n return w.y(t, n);\n },\n // Local week-numbering year\n Y: function(t, n, e, a) {\n const r = G(t, a), s = r > 0 ? r : 1 - r;\n if (n === \"YY\") {\n const o = s % 100;\n return i(o, 2);\n }\n return n === \"Yo\" ? e.ordinalNumber(s, { unit: \"year\" }) : i(s, n.length);\n },\n // ISO week-numbering year\n R: function(t, n) {\n const e = _(t);\n return i(e, n.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function(t, n) {\n const e = t.getFullYear();\n return i(e, n.length);\n },\n // Quarter\n Q: function(t, n, e) {\n const a = Math.ceil((t.getMonth() + 1) / 3);\n switch (n) {\n case \"Q\":\n return String(a);\n case \"QQ\":\n return i(a, 2);\n case \"Qo\":\n return e.ordinalNumber(a, { unit: \"quarter\" });\n case \"QQQ\":\n return e.quarter(a, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"QQQQQ\":\n return e.quarter(a, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"QQQQ\":\n default:\n return e.quarter(a, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // Stand-alone quarter\n q: function(t, n, e) {\n const a = Math.ceil((t.getMonth() + 1) / 3);\n switch (n) {\n case \"q\":\n return String(a);\n case \"qq\":\n return i(a, 2);\n case \"qo\":\n return e.ordinalNumber(a, { unit: \"quarter\" });\n case \"qqq\":\n return e.quarter(a, {\n width: \"abbreviated\",\n context: \"standalone\"\n });\n case \"qqqqq\":\n return e.quarter(a, {\n width: \"narrow\",\n context: \"standalone\"\n });\n case \"qqqq\":\n default:\n return e.quarter(a, {\n width: \"wide\",\n context: \"standalone\"\n });\n }\n },\n // Month\n M: function(t, n, e) {\n const a = t.getMonth();\n switch (n) {\n case \"M\":\n case \"MM\":\n return w.M(t, n);\n case \"Mo\":\n return e.ordinalNumber(a + 1, { unit: \"month\" });\n case \"MMM\":\n return e.month(a, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"MMMMM\":\n return e.month(a, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"MMMM\":\n default:\n return e.month(a, { width: \"wide\", context: \"formatting\" });\n }\n },\n // Stand-alone month\n L: function(t, n, e) {\n const a = t.getMonth();\n switch (n) {\n case \"L\":\n return String(a + 1);\n case \"LL\":\n return i(a + 1, 2);\n case \"Lo\":\n return e.ordinalNumber(a + 1, { unit: \"month\" });\n case \"LLL\":\n return e.month(a, {\n width: \"abbreviated\",\n context: \"standalone\"\n });\n case \"LLLLL\":\n return e.month(a, {\n width: \"narrow\",\n context: \"standalone\"\n });\n case \"LLLL\":\n default:\n return e.month(a, { width: \"wide\", context: \"standalone\" });\n }\n },\n // Local week of year\n w: function(t, n, e, a) {\n const r = Nt(t, a);\n return n === \"wo\" ? e.ordinalNumber(r, { unit: \"week\" }) : i(r, n.length);\n },\n // ISO week of year\n I: function(t, n, e) {\n const a = Ct(t);\n return n === \"Io\" ? e.ordinalNumber(a, { unit: \"week\" }) : i(a, n.length);\n },\n // Day of the month\n d: function(t, n, e) {\n return n === \"do\" ? e.ordinalNumber(t.getDate(), { unit: \"date\" }) : w.d(t, n);\n },\n // Day of year\n D: function(t, n, e) {\n const a = Ft(t);\n return n === \"Do\" ? e.ordinalNumber(a, { unit: \"dayOfYear\" }) : i(a, n.length);\n },\n // Day of week\n E: function(t, n, e) {\n const a = t.getDay();\n switch (n) {\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return e.day(a, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"EEEEE\":\n return e.day(a, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"EEEEEE\":\n return e.day(a, {\n width: \"short\",\n context: \"formatting\"\n });\n case \"EEEE\":\n default:\n return e.day(a, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // Local day of week\n e: function(t, n, e, a) {\n const r = t.getDay(), s = (r - a.weekStartsOn + 8) % 7 || 7;\n switch (n) {\n case \"e\":\n return String(s);\n case \"ee\":\n return i(s, 2);\n case \"eo\":\n return e.ordinalNumber(s, { unit: \"day\" });\n case \"eee\":\n return e.day(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"eeeee\":\n return e.day(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"eeeeee\":\n return e.day(r, {\n width: \"short\",\n context: \"formatting\"\n });\n case \"eeee\":\n default:\n return e.day(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // Stand-alone local day of week\n c: function(t, n, e, a) {\n const r = t.getDay(), s = (r - a.weekStartsOn + 8) % 7 || 7;\n switch (n) {\n case \"c\":\n return String(s);\n case \"cc\":\n return i(s, n.length);\n case \"co\":\n return e.ordinalNumber(s, { unit: \"day\" });\n case \"ccc\":\n return e.day(r, {\n width: \"abbreviated\",\n context: \"standalone\"\n });\n case \"ccccc\":\n return e.day(r, {\n width: \"narrow\",\n context: \"standalone\"\n });\n case \"cccccc\":\n return e.day(r, {\n width: \"short\",\n context: \"standalone\"\n });\n case \"cccc\":\n default:\n return e.day(r, {\n width: \"wide\",\n context: \"standalone\"\n });\n }\n },\n // ISO day of week\n i: function(t, n, e) {\n const a = t.getDay(), r = a === 0 ? 7 : a;\n switch (n) {\n case \"i\":\n return String(r);\n case \"ii\":\n return i(r, n.length);\n case \"io\":\n return e.ordinalNumber(r, { unit: \"day\" });\n case \"iii\":\n return e.day(a, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"iiiii\":\n return e.day(a, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"iiiiii\":\n return e.day(a, {\n width: \"short\",\n context: \"formatting\"\n });\n case \"iiii\":\n default:\n return e.day(a, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // AM or PM\n a: function(t, n, e) {\n const r = t.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n switch (n) {\n case \"a\":\n case \"aa\":\n return e.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"aaa\":\n return e.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n }).toLowerCase();\n case \"aaaaa\":\n return e.dayPeriod(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"aaaa\":\n default:\n return e.dayPeriod(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // AM, PM, midnight, noon\n b: function(t, n, e) {\n const a = t.getHours();\n let r;\n switch (a === 12 ? r = M.noon : a === 0 ? r = M.midnight : r = a / 12 >= 1 ? \"pm\" : \"am\", n) {\n case \"b\":\n case \"bb\":\n return e.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"bbb\":\n return e.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n }).toLowerCase();\n case \"bbbbb\":\n return e.dayPeriod(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"bbbb\":\n default:\n return e.dayPeriod(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function(t, n, e) {\n const a = t.getHours();\n let r;\n switch (a >= 17 ? r = M.evening : a >= 12 ? r = M.afternoon : a >= 4 ? r = M.morning : r = M.night, n) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return e.dayPeriod(r, {\n width: \"abbreviated\",\n context: \"formatting\"\n });\n case \"BBBBB\":\n return e.dayPeriod(r, {\n width: \"narrow\",\n context: \"formatting\"\n });\n case \"BBBB\":\n default:\n return e.dayPeriod(r, {\n width: \"wide\",\n context: \"formatting\"\n });\n }\n },\n // Hour [1-12]\n h: function(t, n, e) {\n if (n === \"ho\") {\n let a = t.getHours() % 12;\n return a === 0 && (a = 12), e.ordinalNumber(a, { unit: \"hour\" });\n }\n return w.h(t, n);\n },\n // Hour [0-23]\n H: function(t, n, e) {\n return n === \"Ho\" ? e.ordinalNumber(t.getHours(), { unit: \"hour\" }) : w.H(t, n);\n },\n // Hour [0-11]\n K: function(t, n, e) {\n const a = t.getHours() % 12;\n return n === \"Ko\" ? e.ordinalNumber(a, { unit: \"hour\" }) : i(a, n.length);\n },\n // Hour [1-24]\n k: function(t, n, e) {\n let a = t.getHours();\n return a === 0 && (a = 24), n === \"ko\" ? e.ordinalNumber(a, { unit: \"hour\" }) : i(a, n.length);\n },\n // Minute\n m: function(t, n, e) {\n return n === \"mo\" ? e.ordinalNumber(t.getMinutes(), { unit: \"minute\" }) : w.m(t, n);\n },\n // Second\n s: function(t, n, e) {\n return n === \"so\" ? e.ordinalNumber(t.getSeconds(), { unit: \"second\" }) : w.s(t, n);\n },\n // Fraction of second\n S: function(t, n) {\n return w.S(t, n);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function(t, n, e) {\n const a = t.getTimezoneOffset();\n if (a === 0)\n return \"Z\";\n switch (n) {\n case \"X\":\n return H(a);\n case \"XXXX\":\n case \"XX\":\n return y(a);\n case \"XXXXX\":\n case \"XXX\":\n default:\n return y(a, \":\");\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function(t, n, e) {\n const a = t.getTimezoneOffset();\n switch (n) {\n case \"x\":\n return H(a);\n case \"xxxx\":\n case \"xx\":\n return y(a);\n case \"xxxxx\":\n case \"xxx\":\n default:\n return y(a, \":\");\n }\n },\n // Timezone (GMT)\n O: function(t, n, e) {\n const a = t.getTimezoneOffset();\n switch (n) {\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + I(a, \":\");\n case \"OOOO\":\n default:\n return \"GMT\" + y(a, \":\");\n }\n },\n // Timezone (specific non-location)\n z: function(t, n, e) {\n const a = t.getTimezoneOffset();\n switch (n) {\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + I(a, \":\");\n case \"zzzz\":\n default:\n return \"GMT\" + y(a, \":\");\n }\n },\n // Seconds timestamp\n t: function(t, n, e) {\n const a = Math.trunc(t.getTime() / 1e3);\n return i(a, n.length);\n },\n // Milliseconds timestamp\n T: function(t, n, e) {\n const a = t.getTime();\n return i(a, n.length);\n }\n};\nfunction I(t, n = \"\") {\n const e = t > 0 ? \"-\" : \"+\", a = Math.abs(t), r = Math.trunc(a / 60), s = a % 60;\n return s === 0 ? e + String(r) : e + String(r) + n + i(s, 2);\n}\nfunction H(t, n) {\n return t % 60 === 0 ? (t > 0 ? \"-\" : \"+\") + i(Math.abs(t) / 60, 2) : y(t, n);\n}\nfunction y(t, n = \"\") {\n const e = t > 0 ? \"-\" : \"+\", a = Math.abs(t), r = i(Math.trunc(a / 60), 2), s = i(a % 60, 2);\n return e + r + n + s;\n}\nconst Q = (t, n) => {\n switch (t) {\n case \"P\":\n return n.date({ width: \"short\" });\n case \"PP\":\n return n.date({ width: \"medium\" });\n case \"PPP\":\n return n.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return n.date({ width: \"full\" });\n }\n}, R = (t, n) => {\n switch (t) {\n case \"p\":\n return n.time({ width: \"short\" });\n case \"pp\":\n return n.time({ width: \"medium\" });\n case \"ppp\":\n return n.time({ width: \"long\" });\n case \"pppp\":\n default:\n return n.time({ width: \"full\" });\n }\n}, It = (t, n) => {\n const e = t.match(/(P+)(p+)?/) || [], a = e[1], r = e[2];\n if (!r)\n return Q(t, n);\n let s;\n switch (a) {\n case \"P\":\n s = n.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n s = n.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n s = n.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n s = n.dateTime({ width: \"full\" });\n break;\n }\n return s.replace(\"{{date}}\", Q(a, n)).replace(\"{{time}}\", R(r, n));\n}, Ht = {\n p: R,\n P: It\n}, Qt = /^D+$/, Xt = /^Y+$/, jt = [\"D\", \"DD\", \"YY\", \"YYYY\"];\nfunction Lt(t) {\n return Qt.test(t);\n}\nfunction _t(t) {\n return Xt.test(t);\n}\nfunction Gt(t, n, e) {\n const a = Rt(t, n, e);\n if (console.warn(a), jt.includes(t)) throw new RangeError(a);\n}\nfunction Rt(t, n, e) {\n const a = t[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${t.toLowerCase()}\\` instead of \\`${t}\\` (in \\`${n}\\`) for formatting ${a} to the input \\`${e}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\nfunction Bt(t) {\n return t instanceof Date || typeof t == \"object\" && Object.prototype.toString.call(t) === \"[object Date]\";\n}\nfunction At(t) {\n if (!Bt(t) && typeof t != \"number\")\n return !1;\n const n = l(t);\n return !isNaN(Number(n));\n}\nconst Vt = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g, Jt = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g, $t = /^'([^]*?)'?$/, Ut = /''/g, zt = /[a-zA-Z]/;\nfunction le(t, n, e) {\n var h, g, P, O, T, E, F, p;\n const a = v(), r = (e == null ? void 0 : e.locale) ?? a.locale ?? Dt, s = (e == null ? void 0 : e.firstWeekContainsDate) ?? ((g = (h = e == null ? void 0 : e.locale) == null ? void 0 : h.options) == null ? void 0 : g.firstWeekContainsDate) ?? a.firstWeekContainsDate ?? ((O = (P = a.locale) == null ? void 0 : P.options) == null ? void 0 : O.firstWeekContainsDate) ?? 1, o = (e == null ? void 0 : e.weekStartsOn) ?? ((E = (T = e == null ? void 0 : e.locale) == null ? void 0 : T.options) == null ? void 0 : E.weekStartsOn) ?? a.weekStartsOn ?? ((p = (F = a.locale) == null ? void 0 : F.options) == null ? void 0 : p.weekStartsOn) ?? 0, c = l(t);\n if (!At(c))\n throw new RangeError(\"Invalid time value\");\n let u = n.match(Jt).map((m) => {\n const f = m[0];\n if (f === \"p\" || f === \"P\") {\n const Y = Ht[f];\n return Y(m, r.formatLong);\n }\n return m;\n }).join(\"\").match(Vt).map((m) => {\n if (m === \"''\")\n return { isToken: !1, value: \"'\" };\n const f = m[0];\n if (f === \"'\")\n return { isToken: !1, value: Kt(m) };\n if (N[f])\n return { isToken: !0, value: m };\n if (f.match(zt))\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" + f + \"`\"\n );\n return { isToken: !1, value: m };\n });\n r.localize.preprocessor && (u = r.localize.preprocessor(c, u));\n const d = {\n firstWeekContainsDate: s,\n weekStartsOn: o,\n locale: r\n };\n return u.map((m) => {\n if (!m.isToken) return m.value;\n const f = m.value;\n (!(e != null && e.useAdditionalWeekYearTokens) && _t(f) || !(e != null && e.useAdditionalDayOfYearTokens) && Lt(f)) && Gt(f, n, String(t));\n const Y = N[f[0]];\n return Y(c, f, r.localize, d);\n }).join(\"\");\n}\nfunction Kt(t) {\n const n = t.match($t);\n return n ? n[1].replace(Ut, \"'\") : t;\n}\nexport {\n Ft as $,\n it as A,\n kt as B,\n pt as C,\n _ as D,\n te as E,\n j as F,\n ie as G,\n se as H,\n re as I,\n i as J,\n xt as K,\n oe as L,\n vt as M,\n fe as N,\n L as O,\n he as P,\n St as Q,\n me as R,\n Yt as S,\n w as T,\n Wt as U,\n ce as V,\n ue as W,\n de as X,\n Zt as Y,\n qt as Z,\n N as _,\n ee as a,\n ae as b,\n b as c,\n Tt as d,\n G as e,\n le as f,\n v as g,\n W as h,\n x as i,\n Nt as j,\n Ct as k,\n q as l,\n ne as m,\n Dt as n,\n Ht as o,\n _t as p,\n Lt as q,\n Bt as r,\n C as s,\n l as t,\n At as u,\n Et as v,\n Gt as w,\n S as x,\n A as y,\n K as z\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LUJudjlzc2puLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvZm9ybWF0RGlzdGFuY2UubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaEZuLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoUGF0dGVybkZuLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2RlZmF1bHRPcHRpb25zLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3RvRGF0ZS5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRheS5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2NvbnN0cnVjdEZyb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZWFyLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlPZlllYXIubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vlay5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla1llYXIubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZJU09XZWVrWWVhci5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla1llYXIubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrWWVhci5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9hZGRMZWFkaW5nWmVyb3MubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvZm9ybWF0dGVycy5tanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvcHJvdGVjdGVkVG9rZW5zLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0RhdGUubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVmFsaWQubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZm9ybWF0RGlzdGFuY2VMb2NhbGUgPSB7XG4gIGxlc3NUaGFuWFNlY29uZHM6IHtcbiAgICBvbmU6IFwibGVzcyB0aGFuIGEgc2Vjb25kXCIsXG4gICAgb3RoZXI6IFwibGVzcyB0aGFuIHt7Y291bnR9fSBzZWNvbmRzXCIsXG4gIH0sXG5cbiAgeFNlY29uZHM6IHtcbiAgICBvbmU6IFwiMSBzZWNvbmRcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gc2Vjb25kc1wiLFxuICB9LFxuXG4gIGhhbGZBTWludXRlOiBcImhhbGYgYSBtaW51dGVcIixcblxuICBsZXNzVGhhblhNaW51dGVzOiB7XG4gICAgb25lOiBcImxlc3MgdGhhbiBhIG1pbnV0ZVwiLFxuICAgIG90aGVyOiBcImxlc3MgdGhhbiB7e2NvdW50fX0gbWludXRlc1wiLFxuICB9LFxuXG4gIHhNaW51dGVzOiB7XG4gICAgb25lOiBcIjEgbWludXRlXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IG1pbnV0ZXNcIixcbiAgfSxcblxuICBhYm91dFhIb3Vyczoge1xuICAgIG9uZTogXCJhYm91dCAxIGhvdXJcIixcbiAgICBvdGhlcjogXCJhYm91dCB7e2NvdW50fX0gaG91cnNcIixcbiAgfSxcblxuICB4SG91cnM6IHtcbiAgICBvbmU6IFwiMSBob3VyXCIsXG4gICAgb3RoZXI6IFwie3tjb3VudH19IGhvdXJzXCIsXG4gIH0sXG5cbiAgeERheXM6IHtcbiAgICBvbmU6IFwiMSBkYXlcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gZGF5c1wiLFxuICB9LFxuXG4gIGFib3V0WFdlZWtzOiB7XG4gICAgb25lOiBcImFib3V0IDEgd2Vla1wiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSB3ZWVrc1wiLFxuICB9LFxuXG4gIHhXZWVrczoge1xuICAgIG9uZTogXCIxIHdlZWtcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gd2Vla3NcIixcbiAgfSxcblxuICBhYm91dFhNb250aHM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSBtb250aFwiLFxuICAgIG90aGVyOiBcImFib3V0IHt7Y291bnR9fSBtb250aHNcIixcbiAgfSxcblxuICB4TW9udGhzOiB7XG4gICAgb25lOiBcIjEgbW9udGhcIixcbiAgICBvdGhlcjogXCJ7e2NvdW50fX0gbW9udGhzXCIsXG4gIH0sXG5cbiAgYWJvdXRYWWVhcnM6IHtcbiAgICBvbmU6IFwiYWJvdXQgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwiYWJvdXQge3tjb3VudH19IHllYXJzXCIsXG4gIH0sXG5cbiAgeFllYXJzOiB7XG4gICAgb25lOiBcIjEgeWVhclwiLFxuICAgIG90aGVyOiBcInt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIG92ZXJYWWVhcnM6IHtcbiAgICBvbmU6IFwib3ZlciAxIHllYXJcIixcbiAgICBvdGhlcjogXCJvdmVyIHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxuXG4gIGFsbW9zdFhZZWFyczoge1xuICAgIG9uZTogXCJhbG1vc3QgMSB5ZWFyXCIsXG4gICAgb3RoZXI6IFwiYWxtb3N0IHt7Y291bnR9fSB5ZWFyc1wiLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERpc3RhbmNlID0gKHRva2VuLCBjb3VudCwgb3B0aW9ucykgPT4ge1xuICBsZXQgcmVzdWx0O1xuXG4gIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07XG4gIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJlc3VsdCA9IHRva2VuVmFsdWU7XG4gIH0gZWxzZSBpZiAoY291bnQgPT09IDEpIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm9uZTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB0b2tlblZhbHVlLm90aGVyLnJlcGxhY2UoXCJ7e2NvdW50fX1cIiwgY291bnQudG9TdHJpbmcoKSk7XG4gIH1cblxuICBpZiAob3B0aW9ucz8uYWRkU3VmZml4KSB7XG4gICAgaWYgKG9wdGlvbnMuY29tcGFyaXNvbiAmJiBvcHRpb25zLmNvbXBhcmlzb24gPiAwKSB7XG4gICAgICByZXR1cm4gXCJpbiBcIiArIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIFwiIGFnb1wiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRm9ybWF0TG9uZ0ZuKGFyZ3MpIHtcbiAgcmV0dXJuIChvcHRpb25zID0ge30pID0+IHtcbiAgICAvLyBUT0RPOiBSZW1vdmUgU3RyaW5nKClcbiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICBjb25zdCBmb3JtYXQgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfTtcbn1cbiIsImltcG9ydCB7IGJ1aWxkRm9ybWF0TG9uZ0ZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRGb3JtYXRMb25nRm4ubWpzXCI7XG5cbmNvbnN0IGRhdGVGb3JtYXRzID0ge1xuICBmdWxsOiBcIkVFRUUsIE1NTU0gZG8sIHlcIixcbiAgbG9uZzogXCJNTU1NIGRvLCB5XCIsXG4gIG1lZGl1bTogXCJNTU0gZCwgeVwiLFxuICBzaG9ydDogXCJNTS9kZC95eXl5XCIsXG59O1xuXG5jb25zdCB0aW1lRm9ybWF0cyA9IHtcbiAgZnVsbDogXCJoOm1tOnNzIGEgenp6elwiLFxuICBsb25nOiBcImg6bW06c3MgYSB6XCIsXG4gIG1lZGl1bTogXCJoOm1tOnNzIGFcIixcbiAgc2hvcnQ6IFwiaDptbSBhXCIsXG59O1xuXG5jb25zdCBkYXRlVGltZUZvcm1hdHMgPSB7XG4gIGZ1bGw6IFwie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fVwiLFxuICBsb25nOiBcInt7ZGF0ZX19ICdhdCcge3t0aW1lfX1cIixcbiAgbWVkaXVtOiBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiLFxuICBzaG9ydDogXCJ7e2RhdGV9fSwge3t0aW1lfX1cIixcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRMb25nID0ge1xuICBkYXRlOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZUZvcm1hdHMsXG4gICAgZGVmYXVsdFdpZHRoOiBcImZ1bGxcIixcbiAgfSksXG5cbiAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oe1xuICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxuXG4gIGRhdGVUaW1lOiBidWlsZEZvcm1hdExvbmdGbih7XG4gICAgZm9ybWF0czogZGF0ZVRpbWVGb3JtYXRzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJmdWxsXCIsXG4gIH0pLFxufTtcbiIsImNvbnN0IGZvcm1hdFJlbGF0aXZlTG9jYWxlID0ge1xuICBsYXN0V2VlazogXCInbGFzdCcgZWVlZSAnYXQnIHBcIixcbiAgeWVzdGVyZGF5OiBcIid5ZXN0ZXJkYXkgYXQnIHBcIixcbiAgdG9kYXk6IFwiJ3RvZGF5IGF0JyBwXCIsXG4gIHRvbW9ycm93OiBcIid0b21vcnJvdyBhdCcgcFwiLFxuICBuZXh0V2VlazogXCJlZWVlICdhdCcgcFwiLFxuICBvdGhlcjogXCJQXCIsXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0UmVsYXRpdmUgPSAodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSA9PlxuICBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFRoZSBsb2NhbGl6ZSBmdW5jdGlvbiBhcmd1bWVudCBjYWxsYmFjayB3aGljaCBhbGxvd3MgdG8gY29udmVydCByYXcgdmFsdWUgdG9cbiAqIHRoZSBhY3R1YWwgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY29udmVydFxuICpcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgdmFsdWVcbiAqL1xuXG4vKipcbiAqIFRoZSBtYXAgb2YgbG9jYWxpemVkIHZhbHVlcyBmb3IgZWFjaCB3aWR0aC5cbiAqL1xuXG4vKipcbiAqIFRoZSBpbmRleCB0eXBlIG9mIHRoZSBsb2NhbGUgdW5pdCB2YWx1ZS4gSXQgdHlwZXMgY29udmVyc2lvbiBvZiB1bml0cyBvZlxuICogdmFsdWVzIHRoYXQgZG9uJ3Qgc3RhcnQgYXQgMCAoaS5lLiBxdWFydGVycykuXG4gKi9cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgdW5pdCB2YWx1ZSB0byB0aGUgdHVwbGUgb2YgdmFsdWVzLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBlcmEgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEJDLFxuICogdGhlIHNlY29uZCBlbGVtZW50IHJlcHJlc2VudHMgQUQuXG4gKi9cblxuLyoqXG4gKiBUaGUgdHVwbGUgb2YgbG9jYWxpemVkIHF1YXJ0ZXIgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFExLlxuICovXG5cbi8qKlxuICogVGhlIHR1cGxlIG9mIGxvY2FsaXplZCBkYXkgdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIFN1bmRheS5cbiAqL1xuXG4vKipcbiAqIFRoZSB0dXBsZSBvZiBsb2NhbGl6ZWQgbW9udGggdmFsdWVzLiBUaGUgZmlyc3QgZWxlbWVudCByZXByZXNlbnRzIEphbnVhcnkuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogXCJzdGFuZGFsb25lXCI7XG5cbiAgICBsZXQgdmFsdWVzQXJyYXk7XG4gICAgaWYgKGNvbnRleHQgPT09IFwiZm9ybWF0dGluZ1wiICYmIGFyZ3MuZm9ybWF0dGluZ1ZhbHVlcykge1xuICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0Rm9ybWF0dGluZ1dpZHRoIHx8IGFyZ3MuZGVmYXVsdFdpZHRoO1xuICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPVxuICAgICAgICBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZWZhdWx0V2lkdGggPSBhcmdzLmRlZmF1bHRXaWR0aDtcbiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDtcblxuICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sgPyBhcmdzLmFyZ3VtZW50Q2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gRm9yIHNvbWUgcmVhc29uIFR5cGVTY3JpcHQganVzdCBkb24ndCB3YW50IHRvIG1hdGNoIGl0LCBubyBtYXR0ZXIgaG93IGhhcmQgd2UgdHJ5LiBJIGNoYWxsZW5nZSB5b3UgdG8gdHJ5IHRvIHJlbW92ZSBpdCFcbiAgICByZXR1cm4gdmFsdWVzQXJyYXlbaW5kZXhdO1xuICB9O1xufVxuIiwiaW1wb3J0IHsgYnVpbGRMb2NhbGl6ZUZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRMb2NhbGl6ZUZuLm1qc1wiO1xuXG5jb25zdCBlcmFWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiQlwiLCBcIkFcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJCQ1wiLCBcIkFEXCJdLFxuICB3aWRlOiBbXCJCZWZvcmUgQ2hyaXN0XCIsIFwiQW5ubyBEb21pbmlcIl0sXG59O1xuXG5jb25zdCBxdWFydGVyVmFsdWVzID0ge1xuICBuYXJyb3c6IFtcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXCJRMVwiLCBcIlEyXCIsIFwiUTNcIiwgXCJRNFwiXSxcbiAgd2lkZTogW1wiMXN0IHF1YXJ0ZXJcIiwgXCIybmQgcXVhcnRlclwiLCBcIjNyZCBxdWFydGVyXCIsIFwiNHRoIHF1YXJ0ZXJcIl0sXG59O1xuXG4vLyBOb3RlOiBpbiBFbmdsaXNoLCB0aGUgbmFtZXMgb2YgZGF5cyBvZiB0aGUgd2VlayBhbmQgbW9udGhzIGFyZSBjYXBpdGFsaXplZC5cbi8vIElmIHlvdSBhcmUgbWFraW5nIGEgbmV3IGxvY2FsZSBiYXNlZCBvbiB0aGlzIG9uZSwgY2hlY2sgaWYgdGhlIHNhbWUgaXMgdHJ1ZSBmb3IgdGhlIGxhbmd1YWdlIHlvdSdyZSB3b3JraW5nIG9uLlxuLy8gR2VuZXJhbGx5LCBmb3JtYXR0ZWQgZGF0ZXMgc2hvdWxkIGxvb2sgbGlrZSB0aGV5IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgc2VudGVuY2UsXG4vLyBlLmcuIGluIFNwYW5pc2ggbGFuZ3VhZ2UgdGhlIHdlZWtkYXlzIGFuZCBtb250aHMgc2hvdWxkIGJlIGluIHRoZSBsb3dlcmNhc2UuXG5jb25zdCBtb250aFZhbHVlcyA9IHtcbiAgbmFycm93OiBbXCJKXCIsIFwiRlwiLCBcIk1cIiwgXCJBXCIsIFwiTVwiLCBcIkpcIiwgXCJKXCIsIFwiQVwiLCBcIlNcIiwgXCJPXCIsIFwiTlwiLCBcIkRcIl0sXG4gIGFiYnJldmlhdGVkOiBbXG4gICAgXCJKYW5cIixcbiAgICBcIkZlYlwiLFxuICAgIFwiTWFyXCIsXG4gICAgXCJBcHJcIixcbiAgICBcIk1heVwiLFxuICAgIFwiSnVuXCIsXG4gICAgXCJKdWxcIixcbiAgICBcIkF1Z1wiLFxuICAgIFwiU2VwXCIsXG4gICAgXCJPY3RcIixcbiAgICBcIk5vdlwiLFxuICAgIFwiRGVjXCIsXG4gIF0sXG5cbiAgd2lkZTogW1xuICAgIFwiSmFudWFyeVwiLFxuICAgIFwiRmVicnVhcnlcIixcbiAgICBcIk1hcmNoXCIsXG4gICAgXCJBcHJpbFwiLFxuICAgIFwiTWF5XCIsXG4gICAgXCJKdW5lXCIsXG4gICAgXCJKdWx5XCIsXG4gICAgXCJBdWd1c3RcIixcbiAgICBcIlNlcHRlbWJlclwiLFxuICAgIFwiT2N0b2JlclwiLFxuICAgIFwiTm92ZW1iZXJcIixcbiAgICBcIkRlY2VtYmVyXCIsXG4gIF0sXG59O1xuXG5jb25zdCBkYXlWYWx1ZXMgPSB7XG4gIG5hcnJvdzogW1wiU1wiLCBcIk1cIiwgXCJUXCIsIFwiV1wiLCBcIlRcIiwgXCJGXCIsIFwiU1wiXSxcbiAgc2hvcnQ6IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCJdLFxuICBhYmJyZXZpYXRlZDogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICB3aWRlOiBbXG4gICAgXCJTdW5kYXlcIixcbiAgICBcIk1vbmRheVwiLFxuICAgIFwiVHVlc2RheVwiLFxuICAgIFwiV2VkbmVzZGF5XCIsXG4gICAgXCJUaHVyc2RheVwiLFxuICAgIFwiRnJpZGF5XCIsXG4gICAgXCJTYXR1cmRheVwiLFxuICBdLFxufTtcblxuY29uc3QgZGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJtb3JuaW5nXCIsXG4gICAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICAgIGV2ZW5pbmc6IFwiZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcIm5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0ge1xuICBuYXJyb3c6IHtcbiAgICBhbTogXCJhXCIsXG4gICAgcG06IFwicFwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pXCIsXG4gICAgbm9vbjogXCJuXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIGFiYnJldmlhdGVkOiB7XG4gICAgYW06IFwiQU1cIixcbiAgICBwbTogXCJQTVwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG4gIHdpZGU6IHtcbiAgICBhbTogXCJhLm0uXCIsXG4gICAgcG06IFwicC5tLlwiLFxuICAgIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gICAgbm9vbjogXCJub29uXCIsXG4gICAgbW9ybmluZzogXCJpbiB0aGUgbW9ybmluZ1wiLFxuICAgIGFmdGVybm9vbjogXCJpbiB0aGUgYWZ0ZXJub29uXCIsXG4gICAgZXZlbmluZzogXCJpbiB0aGUgZXZlbmluZ1wiLFxuICAgIG5pZ2h0OiBcImF0IG5pZ2h0XCIsXG4gIH0sXG59O1xuXG5jb25zdCBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4ge1xuICBjb25zdCBudW1iZXIgPSBOdW1iZXIoZGlydHlOdW1iZXIpO1xuXG4gIC8vIElmIG9yZGluYWwgbnVtYmVycyBkZXBlbmQgb24gY29udGV4dCwgZm9yIGV4YW1wbGUsXG4gIC8vIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmb3IgZGlmZmVyZW50IGdyYW1tYXRpY2FsIGdlbmRlcnMsXG4gIC8vIHVzZSBgb3B0aW9ucy51bml0YC5cbiAgLy9cbiAgLy8gYHVuaXRgIGNhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF0ZScsICdkYXlPZlllYXInLFxuICAvLyAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcuXG5cbiAgY29uc3QgcmVtMTAwID0gbnVtYmVyICUgMTAwO1xuICBpZiAocmVtMTAwID4gMjAgfHwgcmVtMTAwIDwgMTApIHtcbiAgICBzd2l0Y2ggKHJlbTEwMCAlIDEwKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInN0XCI7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcIm5kXCI7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBcInJkXCI7XG4gICAgfVxuICB9XG4gIHJldHVybiBudW1iZXIgKyBcInRoXCI7XG59O1xuXG5leHBvcnQgY29uc3QgbG9jYWxpemUgPSB7XG4gIG9yZGluYWxOdW1iZXIsXG5cbiAgZXJhOiBidWlsZExvY2FsaXplRm4oe1xuICAgIHZhbHVlczogZXJhVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBxdWFydGVyVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLFxuICAgIGRlZmF1bHRXaWR0aDogXCJ3aWRlXCIsXG4gIH0pLFxuXG4gIGRheTogYnVpbGRMb2NhbGl6ZUZuKHtcbiAgICB2YWx1ZXM6IGRheVZhbHVlcyxcbiAgICBkZWZhdWx0V2lkdGg6IFwid2lkZVwiLFxuICB9KSxcblxuICBkYXlQZXJpb2Q6IGJ1aWxkTG9jYWxpemVGbih7XG4gICAgdmFsdWVzOiBkYXlQZXJpb2RWYWx1ZXMsXG4gICAgZGVmYXVsdFdpZHRoOiBcIndpZGVcIixcbiAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLFxuICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6IFwid2lkZVwiLFxuICB9KSxcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHtcbiAgcmV0dXJuIChzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucy53aWR0aDtcblxuICAgIGNvbnN0IG1hdGNoUGF0dGVybiA9XG4gICAgICAod2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSkgfHxcbiAgICAgIGFyZ3MubWF0Y2hQYXR0ZXJuc1thcmdzLmRlZmF1bHRNYXRjaFdpZHRoXTtcbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZy5tYXRjaChtYXRjaFBhdHRlcm4pO1xuXG4gICAgaWYgKCFtYXRjaFJlc3VsdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcblxuICAgIGNvbnN0IHBhcnNlUGF0dGVybnMgPVxuICAgICAgKHdpZHRoICYmIGFyZ3MucGFyc2VQYXR0ZXJuc1t3aWR0aF0pIHx8XG4gICAgICBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07XG5cbiAgICBjb25zdCBrZXkgPSBBcnJheS5pc0FycmF5KHBhcnNlUGF0dGVybnMpXG4gICAgICA/IGZpbmRJbmRleChwYXJzZVBhdHRlcm5zLCAocGF0dGVybikgPT4gcGF0dGVybi50ZXN0KG1hdGNoZWRTdHJpbmcpKVxuICAgICAgOiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBJIGNoYWxsYW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgICAgIGZpbmRLZXkocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSk7XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICB2YWx1ZSA9IGFyZ3MudmFsdWVDYWxsYmFjayA/IGFyZ3MudmFsdWVDYWxsYmFjayhrZXkpIDoga2V5O1xuICAgIHZhbHVlID0gb3B0aW9ucy52YWx1ZUNhbGxiYWNrXG4gICAgICA/IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIEkgY2hhbGxhbmdlIHlvdSB0byBmaXggdGhlIHR5cGVcbiAgICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlKVxuICAgICAgOiB2YWx1ZTtcblxuICAgIGNvbnN0IHJlc3QgPSBzdHJpbmcuc2xpY2UobWF0Y2hlZFN0cmluZy5sZW5ndGgpO1xuXG4gICAgcmV0dXJuIHsgdmFsdWUsIHJlc3QgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmXG4gICAgICBwcmVkaWNhdGUob2JqZWN0W2tleV0pXG4gICAgKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSkge1xuICBmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhcnJheS5sZW5ndGg7IGtleSsrKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtrZXldKSkge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZE1hdGNoUGF0dGVybkZuKGFyZ3MpIHtcbiAgcmV0dXJuIChzdHJpbmcsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nLm1hdGNoKGFyZ3MubWF0Y2hQYXR0ZXJuKTtcbiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG5cbiAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHN0cmluZy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7XG4gICAgaWYgKCFwYXJzZVJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgbGV0IHZhbHVlID0gYXJncy52YWx1ZUNhbGxiYWNrXG4gICAgICA/IGFyZ3MudmFsdWVDYWxsYmFjayhwYXJzZVJlc3VsdFswXSlcbiAgICAgIDogcGFyc2VSZXN1bHRbMF07XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSBJIGNoYWxsYW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlXG4gICAgdmFsdWUgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUpIDogdmFsdWU7XG5cbiAgICBjb25zdCByZXN0ID0gc3RyaW5nLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTtcblxuICAgIHJldHVybiB7IHZhbHVlLCByZXN0IH07XG4gIH07XG59XG4iLCJpbXBvcnQgeyBidWlsZE1hdGNoRm4gfSBmcm9tIFwiLi4vLi4vX2xpYi9idWlsZE1hdGNoRm4ubWpzXCI7XG5pbXBvcnQgeyBidWlsZE1hdGNoUGF0dGVybkZuIH0gZnJvbSBcIi4uLy4uL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5tanNcIjtcblxuY29uc3QgbWF0Y2hPcmRpbmFsTnVtYmVyUGF0dGVybiA9IC9eKFxcZCspKHRofHN0fG5kfHJkKT8vaTtcbmNvbnN0IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gPSAvXFxkKy9pO1xuXG5jb25zdCBtYXRjaEVyYVBhdHRlcm5zID0ge1xuICBuYXJyb3c6IC9eKGJ8YSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGJcXC4/XFxzP2NcXC4/fGJcXC4/XFxzP2NcXC4/XFxzP2VcXC4/fGFcXC4/XFxzP2RcXC4/fGNcXC4/XFxzP2VcXC4/KS9pLFxuICB3aWRlOiAvXihiZWZvcmUgY2hyaXN0fGJlZm9yZSBjb21tb24gZXJhfGFubm8gZG9taW5pfGNvbW1vbiBlcmEpL2ksXG59O1xuY29uc3QgcGFyc2VFcmFQYXR0ZXJucyA9IHtcbiAgYW55OiBbL15iL2ksIC9eKGF8YykvaV0sXG59O1xuXG5jb25zdCBtYXRjaFF1YXJ0ZXJQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXlsxMjM0XS9pLFxuICBhYmJyZXZpYXRlZDogL15xWzEyMzRdL2ksXG4gIHdpZGU6IC9eWzEyMzRdKHRofHN0fG5kfHJkKT8gcXVhcnRlci9pLFxufTtcbmNvbnN0IHBhcnNlUXVhcnRlclBhdHRlcm5zID0ge1xuICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXSxcbn07XG5cbmNvbnN0IG1hdGNoTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXltqZm1hc29uZF0vaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLFxuICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxufTtcbmNvbnN0IHBhcnNlTW9udGhQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbXG4gICAgL15qL2ksXG4gICAgL15mL2ksXG4gICAgL15tL2ksXG4gICAgL15hL2ksXG4gICAgL15tL2ksXG4gICAgL15qL2ksXG4gICAgL15qL2ksXG4gICAgL15hL2ksXG4gICAgL15zL2ksXG4gICAgL15vL2ksXG4gICAgL15uL2ksXG4gICAgL15kL2ksXG4gIF0sXG5cbiAgYW55OiBbXG4gICAgL15qYS9pLFxuICAgIC9eZi9pLFxuICAgIC9ebWFyL2ksXG4gICAgL15hcC9pLFxuICAgIC9ebWF5L2ksXG4gICAgL15qdW4vaSxcbiAgICAvXmp1bC9pLFxuICAgIC9eYXUvaSxcbiAgICAvXnMvaSxcbiAgICAvXm8vaSxcbiAgICAvXm4vaSxcbiAgICAvXmQvaSxcbiAgXSxcbn07XG5cbmNvbnN0IG1hdGNoRGF5UGF0dGVybnMgPSB7XG4gIG5hcnJvdzogL15bc210d2ZdL2ksXG4gIHNob3J0OiAvXihzdXxtb3x0dXx3ZXx0aHxmcnxzYSkvaSxcbiAgYWJicmV2aWF0ZWQ6IC9eKHN1bnxtb258dHVlfHdlZHx0aHV8ZnJpfHNhdCkvaSxcbiAgd2lkZTogL14oc3VuZGF5fG1vbmRheXx0dWVzZGF5fHdlZG5lc2RheXx0aHVyc2RheXxmcmlkYXl8c2F0dXJkYXkpL2ksXG59O1xuY29uc3QgcGFyc2VEYXlQYXR0ZXJucyA9IHtcbiAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLFxuICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldLFxufTtcblxuY29uc3QgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG4gIGFueTogL14oW2FwXVxcLj9cXHM/bVxcLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksXG59O1xuY29uc3QgcGFyc2VEYXlQZXJpb2RQYXR0ZXJucyA9IHtcbiAgYW55OiB7XG4gICAgYW06IC9eYS9pLFxuICAgIHBtOiAvXnAvaSxcbiAgICBtaWRuaWdodDogL15taS9pLFxuICAgIG5vb246IC9ebm8vaSxcbiAgICBtb3JuaW5nOiAvbW9ybmluZy9pLFxuICAgIGFmdGVybm9vbjogL2FmdGVybm9vbi9pLFxuICAgIGV2ZW5pbmc6IC9ldmVuaW5nL2ksXG4gICAgbmlnaHQ6IC9uaWdodC9pLFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoID0ge1xuICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHtcbiAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLFxuICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSxcbiAgfSksXG5cbiAgZXJhOiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIHF1YXJ0ZXI6IGJ1aWxkTWF0Y2hGbih7XG4gICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hRdWFydGVyUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlUXVhcnRlclBhdHRlcm5zLFxuICAgIGRlZmF1bHRQYXJzZVdpZHRoOiBcImFueVwiLFxuICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleCkgPT4gaW5kZXggKyAxLFxuICB9KSxcblxuICBtb250aDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaE1vbnRoUGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucyxcbiAgICBkZWZhdWx0UGFyc2VXaWR0aDogXCJhbnlcIixcbiAgfSksXG5cbiAgZGF5OiBidWlsZE1hdGNoRm4oe1xuICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdE1hdGNoV2lkdGg6IFwid2lkZVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxuXG4gIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHtcbiAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLFxuICAgIGRlZmF1bHRNYXRjaFdpZHRoOiBcImFueVwiLFxuICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsXG4gICAgZGVmYXVsdFBhcnNlV2lkdGg6IFwiYW55XCIsXG4gIH0pLFxufTtcbiIsImltcG9ydCB7IGZvcm1hdERpc3RhbmNlIH0gZnJvbSBcIi4vZW4tVVMvX2xpYi9mb3JtYXREaXN0YW5jZS5tanNcIjtcbmltcG9ydCB7IGZvcm1hdExvbmcgfSBmcm9tIFwiLi9lbi1VUy9fbGliL2Zvcm1hdExvbmcubWpzXCI7XG5pbXBvcnQgeyBmb3JtYXRSZWxhdGl2ZSB9IGZyb20gXCIuL2VuLVVTL19saWIvZm9ybWF0UmVsYXRpdmUubWpzXCI7XG5pbXBvcnQgeyBsb2NhbGl6ZSB9IGZyb20gXCIuL2VuLVVTL19saWIvbG9jYWxpemUubWpzXCI7XG5pbXBvcnQgeyBtYXRjaCB9IGZyb20gXCIuL2VuLVVTL19saWIvbWF0Y2gubWpzXCI7XG5cbi8qKlxuICogQGNhdGVnb3J5IExvY2FsZXNcbiAqIEBzdW1tYXJ5IEVuZ2xpc2ggbG9jYWxlIChVbml0ZWQgU3RhdGVzKS5cbiAqIEBsYW5ndWFnZSBFbmdsaXNoXG4gKiBAaXNvLTYzOS0yIGVuZ1xuICogQGF1dGhvciBTYXNoYSBLb3NzIFtAa29zc25vY29ycF0oaHR0cHM6Ly9naXRodWIuY29tL2tvc3Nub2NvcnApXG4gKiBAYXV0aG9yIExlc2hhIEtvc3MgW0BsZXNoYWtvc3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9sZXNoYWtvc3MpXG4gKi9cbmV4cG9ydCBjb25zdCBlblVTID0ge1xuICBjb2RlOiBcImVuLVVTXCIsXG4gIGZvcm1hdERpc3RhbmNlOiBmb3JtYXREaXN0YW5jZSxcbiAgZm9ybWF0TG9uZzogZm9ybWF0TG9uZyxcbiAgZm9ybWF0UmVsYXRpdmU6IGZvcm1hdFJlbGF0aXZlLFxuICBsb2NhbGl6ZTogbG9jYWxpemUsXG4gIG1hdGNoOiBtYXRjaCxcbiAgb3B0aW9uczoge1xuICAgIHdlZWtTdGFydHNPbjogMCAvKiBTdW5kYXkgKi8sXG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiAxLFxuICB9LFxufTtcblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBlblVTO1xuIiwibGV0IGRlZmF1bHRPcHRpb25zID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykge1xuICBkZWZhdWx0T3B0aW9ucyA9IG5ld09wdGlvbnM7XG59XG4iLCIvKipcbiAqIEBtb2R1bGUgY29uc3RhbnRzXG4gKiBAc3VtbWFyeSBVc2VmdWwgY29uc3RhbnRzXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbGxlY3Rpb24gb2YgdXNlZnVsIGRhdGUgY29uc3RhbnRzLlxuICpcbiAqIFRoZSBjb25zdGFudHMgY291bGQgYmUgaW1wb3J0ZWQgZnJvbSBgZGF0ZS1mbnMvY29uc3RhbnRzYDpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWF4VGltZSwgbWluVGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBmdW5jdGlvbiBpc0FsbG93ZWRUaW1lKHRpbWUpIHtcbiAqICAgcmV0dXJuIHRpbWUgPD0gbWF4VGltZSAmJiB0aW1lID49IG1pblRpbWU7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgZGF5c0luV2Vla1xuICogQHN1bW1hcnkgRGF5cyBpbiAxIHdlZWsuXG4gKi9cbmV4cG9ydCBjb25zdCBkYXlzSW5XZWVrID0gNztcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIGRheXNJblllYXJcbiAqIEBzdW1tYXJ5IERheXMgaW4gMSB5ZWFyLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSG93IG1hbnkgZGF5cyBpbiBhIHllYXIuXG4gKlxuICogT25lIHllYXJzIGVxdWFscyAzNjUuMjQyNSBkYXlzIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYTpcbiAqXG4gKiA+IExlYXAgeWVhciBvY2N1cmVzIGV2ZXJ5IDQgeWVhcnMsIGV4Y2VwdCBmb3IgeWVhcnMgdGhhdCBhcmUgZGl2aXNhYmxlIGJ5IDEwMCBhbmQgbm90IGRpdmlzYWJsZSBieSA0MDAuXG4gKiA+IDEgbWVhbiB5ZWFyID0gKDM2NSsxLzQtMS8xMDArMS80MDApIGRheXMgPSAzNjUuMjQyNSBkYXlzXG4gKi9cbmV4cG9ydCBjb25zdCBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtYXhUaW1lXG4gKiBAc3VtbWFyeSBNYXhpbXVtIGFsbG93ZWQgdGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgbWF4VGltZSB9IGZyb20gXCIuL2NvbnN0YW50cy9kYXRlLWZucy9jb25zdGFudHNcIjtcbiAqXG4gKiBjb25zdCBpc1ZhbGlkID0gODY0MDAwMDAwMDAwMDAwMSA8PSBtYXhUaW1lO1xuICogLy89PiBmYWxzZVxuICpcbiAqIG5ldyBEYXRlKDg2NDAwMDAwMDAwMDAwMDEpO1xuICogLy89PiBJbnZhbGlkIERhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IG1heFRpbWUgPSBNYXRoLnBvdygxMCwgOCkgKiAyNCAqIDYwICogNjAgKiAxMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWluVGltZVxuICogQHN1bW1hcnkgTWluaW11bSBhbGxvd2VkIHRpbWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7IG1pblRpbWUgfSBmcm9tIFwiLi9jb25zdGFudHMvZGF0ZS1mbnMvY29uc3RhbnRzXCI7XG4gKlxuICogY29uc3QgaXNWYWxpZCA9IC04NjQwMDAwMDAwMDAwMDAxID49IG1pblRpbWU7XG4gKiAvLz0+IGZhbHNlXG4gKlxuICogbmV3IERhdGUoLTg2NDAwMDAwMDAwMDAwMDEpXG4gKiAvLz0+IEludmFsaWQgRGF0ZVxuICovXG5leHBvcnQgY29uc3QgbWluVGltZSA9IC1tYXhUaW1lO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5XZWVrXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSB3ZWVrLlxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0ODAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5EYXlcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIGRheS5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kc0luRGF5ID0gODY0MDAwMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaWxsaXNlY29uZHNJbk1pbnV0ZVxuICogQHN1bW1hcnkgTWlsbGlzZWNvbmRzIGluIDEgbWludXRlXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbk1pbnV0ZSA9IDYwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5Ib3VyXG4gKiBAc3VtbWFyeSBNaWxsaXNlY29uZHMgaW4gMSBob3VyXG4gKi9cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZHNJbkhvdXIgPSAzNjAwMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWlsbGlzZWNvbmRzSW5TZWNvbmRcbiAqIEBzdW1tYXJ5IE1pbGxpc2Vjb25kcyBpbiAxIHNlY29uZFxuICovXG5leHBvcnQgY29uc3QgbWlsbGlzZWNvbmRzSW5TZWNvbmQgPSAxMDAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luWWVhclxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5ZZWFyID0gNTI1NjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luTW9udGhcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBtb250aC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtaW51dGVzSW5EYXlcbiAqIEBzdW1tYXJ5IE1pbnV0ZXMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5EYXkgPSAxNDQwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbWludXRlc0luSG91clxuICogQHN1bW1hcnkgTWludXRlcyBpbiAxIGhvdXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtaW51dGVzSW5Ib3VyID0gNjA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBtb250aHNJblF1YXJ0ZXJcbiAqIEBzdW1tYXJ5IE1vbnRocyBpbiAxIHF1YXJ0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBtb250aHNJblF1YXJ0ZXIgPSAzO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgbW9udGhzSW5ZZWFyXG4gKiBAc3VtbWFyeSBNb250aHMgaW4gMSB5ZWFyLlxuICovXG5leHBvcnQgY29uc3QgbW9udGhzSW5ZZWFyID0gMTI7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBxdWFydGVyc0luWWVhclxuICogQHN1bW1hcnkgUXVhcnRlcnMgaW4gMSB5ZWFyXG4gKi9cbmV4cG9ydCBjb25zdCBxdWFydGVyc0luWWVhciA9IDQ7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5Ib3VyXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgaG91ci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbkhvdXIgPSAzNjAwO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luTWludXRlXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgbWludXRlLlxuICovXG5leHBvcnQgY29uc3Qgc2Vjb25kc0luTWludXRlID0gNjA7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5EYXlcbiAqIEBzdW1tYXJ5IFNlY29uZHMgaW4gMSBkYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5EYXkgPSBzZWNvbmRzSW5Ib3VyICogMjQ7XG5cbi8qKlxuICogQGNvbnN0YW50XG4gKiBAbmFtZSBzZWNvbmRzSW5XZWVrXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgd2Vlay5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3O1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luWWVhclxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHllYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5ZZWFyID0gc2Vjb25kc0luRGF5ICogZGF5c0luWWVhcjtcblxuLyoqXG4gKiBAY29uc3RhbnRcbiAqIEBuYW1lIHNlY29uZHNJbk1vbnRoXG4gKiBAc3VtbWFyeSBTZWNvbmRzIGluIDEgbW9udGhcbiAqL1xuZXhwb3J0IGNvbnN0IHNlY29uZHNJbk1vbnRoID0gc2Vjb25kc0luWWVhciAvIDEyO1xuXG4vKipcbiAqIEBjb25zdGFudFxuICogQG5hbWUgc2Vjb25kc0luUXVhcnRlclxuICogQHN1bW1hcnkgU2Vjb25kcyBpbiAxIHF1YXJ0ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZWNvbmRzSW5RdWFydGVyID0gc2Vjb25kc0luTW9udGggKiAzO1xuIiwiLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIG5vbmUgb2YgdGhlIGFib3ZlLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBJbnZhbGlkIERhdGUuXG4gKlxuICogKipOb3RlKio6ICphbGwqIERhdGUgYXJndW1lbnRzIHBhc3NlZCB0byBhbnkgKmRhdGUtZm5zKiBmdW5jdGlvbiBpcyBwcm9jZXNzZWQgYnkgYHRvRGF0ZWAuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50IC0gVGhlIHZhbHVlIHRvIGNvbnZlcnRcbiAqXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIGRhdGUgaW4gdGhlIGxvY2FsIHRpbWUgem9uZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDbG9uZSB0aGUgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZShuZXcgRGF0ZSgyMDE0LCAxLCAxMSwgMTEsIDMwLCAzMCkpXG4gKiAvLz0+IFR1ZSBGZWIgMTEgMjAxNCAxMTozMDozMFxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb252ZXJ0IHRoZSB0aW1lc3RhbXAgdG8gZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IHRvRGF0ZSgxMzkyMDk4NDMwMDAwKVxuICogLy89PiBUdWUgRmViIDExIDIwMTQgMTE6MzA6MzBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZShhcmd1bWVudCkge1xuICBjb25zdCBhcmdTdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuXG4gIC8vIENsb25lIHRoZSBkYXRlXG4gIGlmIChcbiAgICBhcmd1bWVudCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAodHlwZW9mIGFyZ3VtZW50ID09PSBcIm9iamVjdFwiICYmIGFyZ1N0ciA9PT0gXCJbb2JqZWN0IERhdGVdXCIpXG4gICkge1xuICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgIHJldHVybiBuZXcgYXJndW1lbnQuY29uc3RydWN0b3IoK2FyZ3VtZW50KTtcbiAgfSBlbHNlIGlmIChcbiAgICB0eXBlb2YgYXJndW1lbnQgPT09IFwibnVtYmVyXCIgfHxcbiAgICBhcmdTdHIgPT09IFwiW29iamVjdCBOdW1iZXJdXCIgfHxcbiAgICB0eXBlb2YgYXJndW1lbnQgPT09IFwic3RyaW5nXCIgfHxcbiAgICBhcmdTdHIgPT09IFwiW29iamVjdCBTdHJpbmddXCJcbiAgKSB7XG4gICAgLy8gVE9ETzogQ2FuIHdlIGdldCByaWQgb2YgYXM/XG4gICAgcmV0dXJuIG5ldyBEYXRlKGFyZ3VtZW50KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBDYW4gd2UgZ2V0IHJpZCBvZiBhcz9cbiAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHRvRGF0ZTtcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mRGF5XG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSBkYXkgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhIGRheSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSBkYXlcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgZGF5IGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZkRheShuZXcgRGF0ZSgyMDE0LCA4LCAyLCAxMSwgNTUsIDApKVxuICogLy89PiBUdWUgU2VwIDAyIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZEYXkoZGF0ZSkge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mRGF5O1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4uL3RvRGF0ZS5tanNcIjtcblxuLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUpO1xuICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoXG4gICAgRGF0ZS5VVEMoXG4gICAgICBfZGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgX2RhdGUuZ2V0TW9udGgoKSxcbiAgICAgIF9kYXRlLmdldERhdGUoKSxcbiAgICAgIF9kYXRlLmdldEhvdXJzKCksXG4gICAgICBfZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICBfZGF0ZS5nZXRTZWNvbmRzKCksXG4gICAgICBfZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSxcbiAgICApLFxuICApO1xuICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCkpO1xuICByZXR1cm4gK2RhdGUgLSArdXRjRGF0ZTtcbn1cbiIsImltcG9ydCB7IG1pbGxpc2Vjb25kc0luRGF5IH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZkRheSB9IGZyb20gXCIuL3N0YXJ0T2ZEYXkubWpzXCI7XG5pbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSBcIi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzLm1qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5c1xuICogQGNhdGVnb3J5IERheSBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIG51bWJlciBvZiBjYWxlbmRhciBkYXlzIGJldHdlZW4gdGhlIGdpdmVuIGRhdGVzLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5cyBiZXR3ZWVuIHRoZSBnaXZlbiBkYXRlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSB0aW1lcyBhcmUgcmVtb3ZlZFxuICogZnJvbSB0aGUgZGF0ZXMgYW5kIHRoZW4gdGhlIGRpZmZlcmVuY2UgaW4gZGF5cyBpcyBjYWxjdWxhdGVkLlxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlTGVmdCAtIFRoZSBsYXRlciBkYXRlXG4gKiBAcGFyYW0gZGF0ZVJpZ2h0IC0gVGhlIGVhcmxpZXIgZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgY2FsZW5kYXIgZGF5c1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzowMDowMCBhbmQgMiBKdWx5IDIwMTIgMDA6MDA6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTIsIDYsIDIsIDAsIDApLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgMClcbiAqIClcbiAqIC8vPT4gMzY2XG4gKiAvLyBIb3cgbWFueSBjYWxlbmRhciBkYXlzIGFyZSBiZXR3ZWVuXG4gKiAvLyAyIEp1bHkgMjAxMSAyMzo1OTowMCBhbmQgMyBKdWx5IDIwMTEgMDA6MDE6MDA/XG4gKiBjb25zdCByZXN1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoXG4gKiAgIG5ldyBEYXRlKDIwMTEsIDYsIDMsIDAsIDEpLFxuICogICBuZXcgRGF0ZSgyMDExLCA2LCAyLCAyMywgNTkpXG4gKiApXG4gKiAvLz0+IDFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7XG4gIGNvbnN0IHN0YXJ0T2ZEYXlMZWZ0ID0gc3RhcnRPZkRheShkYXRlTGVmdCk7XG4gIGNvbnN0IHN0YXJ0T2ZEYXlSaWdodCA9IHN0YXJ0T2ZEYXkoZGF0ZVJpZ2h0KTtcblxuICBjb25zdCB0aW1lc3RhbXBMZWZ0ID1cbiAgICArc3RhcnRPZkRheUxlZnQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXlMZWZ0KTtcbiAgY29uc3QgdGltZXN0YW1wUmlnaHQgPVxuICAgICtzdGFydE9mRGF5UmlnaHQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXlSaWdodCk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiBkYXlzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIGRheSBpcyBub3QgY29uc3RhbnQgKGUuZy4gaXQncyBkaWZmZXJlbnQgaW4gdGhlIHdlZWsgb2ZcbiAgLy8gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIGNsb2NrIHNoaWZ0KS5cbiAgcmV0dXJuIE1hdGgucm91bmQoKHRpbWVzdGFtcExlZnQgLSB0aW1lc3RhbXBSaWdodCkgLyBtaWxsaXNlY29uZHNJbkRheSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzO1xuIiwiLyoqXG4gKiBAbmFtZSBjb25zdHJ1Y3RGcm9tXG4gKiBAY2F0ZWdvcnkgR2VuZXJpYyBIZWxwZXJzXG4gKiBAc3VtbWFyeSBDb25zdHJ1Y3RzIGEgZGF0ZSB1c2luZyB0aGUgcmVmZXJlbmNlIGRhdGUgYW5kIHRoZSB2YWx1ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIGZ1bmN0aW9uIGNvbnN0cnVjdHMgYSBuZXcgZGF0ZSB1c2luZyB0aGUgY29uc3RydWN0b3IgZnJvbSB0aGUgcmVmZXJlbmNlXG4gKiBkYXRlIGFuZCB0aGUgZ2l2ZW4gdmFsdWUuIEl0IGhlbHBzIHRvIGJ1aWxkIGdlbmVyaWMgZnVuY3Rpb25zIHRoYXQgYWNjZXB0XG4gKiBkYXRlIGV4dGVuc2lvbnMuXG4gKlxuICogSXQgZGVmYXVsdHMgdG8gYERhdGVgIGlmIHRoZSBwYXNzZWQgcmVmZXJlbmNlIGRhdGUgaXMgYSBudW1iZXIgb3IgYSBzdHJpbmcuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgdG8gdGFrZSBjb25zdHJ1Y3RvciBmcm9tXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY3JlYXRlIHRoZSBkYXRlXG4gKlxuICogQHJldHVybnMgRGF0ZSBpbml0aWFsaXplZCB1c2luZyB0aGUgZ2l2ZW4gZGF0ZSBhbmQgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gJ2RhdGUtZm5zJ1xuICpcbiAqIC8vIEEgZnVuY3Rpb24gdGhhdCBjbG9uZXMgYSBkYXRlIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHR5cGVcbiAqIGZ1bmN0aW9uIGNsb25lRGF0ZTxEYXRlVHlwZSBleHRlbmRzIERhdGUoZGF0ZTogRGF0ZVR5cGUpOiBEYXRlVHlwZSB7XG4gKiAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKFxuICogICAgIGRhdGUsIC8vIFVzZSBjb250cnVzdG9yIGZyb20gdGhlIGdpdmVuIGRhdGVcbiAqICAgICBkYXRlLmdldFRpbWUoKSAvLyBVc2UgdGhlIGRhdGUgdmFsdWUgdG8gY3JlYXRlIGEgbmV3IGRhdGVcbiAqICAgKVxuICogfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZSkge1xuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gbmV3IGRhdGUuY29uc3RydWN0b3IodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH1cbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBjb25zdHJ1Y3RGcm9tO1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLm1qc1wiO1xuaW1wb3J0IHsgY29uc3RydWN0RnJvbSB9IGZyb20gXCIuL2NvbnN0cnVjdEZyb20ubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZlllYXJcbiAqIEBjYXRlZ29yeSBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBzdGFydCBvZiBhIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGEgeWVhciBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZZZWFyKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMDApKVxuICogLy89PiBXZWQgSmFuIDAxIDIwMTQgMDA6MDA6MDBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0T2ZZZWFyKGRhdGUpIHtcbiAgY29uc3QgY2xlYW5EYXRlID0gdG9EYXRlKGRhdGUpO1xuICBjb25zdCBfZGF0ZSA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7XG4gIF9kYXRlLnNldEZ1bGxZZWFyKGNsZWFuRGF0ZS5nZXRGdWxsWWVhcigpLCAwLCAxKTtcbiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mWWVhcjtcbiIsImltcG9ydCB7IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyB9IGZyb20gXCIuL2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cy5tanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZlllYXIubWpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgZ2V0RGF5T2ZZZWFyXG4gKiBAY2F0ZWdvcnkgRGF5IEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgZGF5IG9mIHRoZSB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBkYXkgb2YgdGhlIHllYXIgb2YgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBkYXkgb2YgeWVhclxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCBkYXkgb2YgdGhlIHllYXIgaXMgMiBKdWx5IDIwMTQ/XG4gKiBjb25zdCByZXN1bHQgPSBnZXREYXlPZlllYXIobmV3IERhdGUoMjAxNCwgNiwgMikpXG4gKiAvLz0+IDE4M1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoX2RhdGUsIHN0YXJ0T2ZZZWFyKF9kYXRlKSk7XG4gIGNvbnN0IGRheU9mWWVhciA9IGRpZmYgKyAxO1xuICByZXR1cm4gZGF5T2ZZZWFyO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldERheU9mWWVhcjtcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5tanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIHN0YXJ0T2ZXZWVrfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZldlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYSB3ZWVrIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBBbiBvYmplY3Qgd2l0aCBvcHRpb25zXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGEgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc3RhcnQgb2YgYSB3ZWVrIGZvciAyIFNlcHRlbWJlciAyMDE0IDExOjU1OjAwOlxuICogY29uc3QgcmVzdWx0ID0gc3RhcnRPZldlZWsobmV3IERhdGUoMjAxNCwgOCwgMiwgMTEsIDU1LCAwKSlcbiAqIC8vPT4gU3VuIEF1ZyAzMSAyMDE0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElmIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXksIHRoZSBzdGFydCBvZiB0aGUgd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCksIHsgd2Vla1N0YXJ0c09uOiAxIH0pXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZldlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpO1xuICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IDcgOiAwKSArIGRheSAtIHdlZWtTdGFydHNPbjtcblxuICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYpO1xuICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIF9kYXRlO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IHN0YXJ0T2ZXZWVrO1xuIiwiaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mSVNPV2Vla1xuICogQGNhdGVnb3J5IElTTyBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWsgZm9yIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBzdGFydCBvZiBhbiBJU08gd2VlayBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgcmVzdWx0IHdpbGwgYmUgaW4gdGhlIGxvY2FsIHRpbWV6b25lLlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBJU08gd2VlayBmb3IgMiBTZXB0ZW1iZXIgMjAxNCAxMTo1NTowMDpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZJU09XZWVrKG5ldyBEYXRlKDIwMTQsIDgsIDIsIDExLCA1NSwgMCkpXG4gKiAvLz0+IE1vbiBTZXAgMDEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGF0ZSkge1xuICByZXR1cm4gc3RhcnRPZldlZWsoZGF0ZSwgeyB3ZWVrU3RhcnRzT246IDEgfSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgc3RhcnRPZklTT1dlZWs7XG4iLCJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5tanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsubWpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgZ2V0SVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZSxcbiAqIHdoaWNoIGFsd2F5cyBzdGFydHMgMyBkYXlzIGJlZm9yZSB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5LlxuICpcbiAqIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKlxuICogQHJldHVybnMgVGhlIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIElTTy13ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1P1xuICogY29uc3QgcmVzdWx0ID0gZ2V0SVNPV2Vla1llYXIobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDIwMDRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKGRhdGUsIDApO1xuICBmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7XG5cbiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7XG4gIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIGNvbnN0IHN0YXJ0T2ZUaGlzWWVhciA9IHN0YXJ0T2ZJU09XZWVrKGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIpO1xuXG4gIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZk5leHRZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyICsgMTtcbiAgfSBlbHNlIGlmIChfZGF0ZS5nZXRUaW1lKCkgPj0gc3RhcnRPZlRoaXNZZWFyLmdldFRpbWUoKSkge1xuICAgIHJldHVybiB5ZWFyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB5ZWFyIC0gMTtcbiAgfVxufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGdldElTT1dlZWtZZWFyO1xuIiwiaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi9nZXRJU09XZWVrWWVhci5tanNcIjtcbmltcG9ydCB7IHN0YXJ0T2ZJU09XZWVrIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWsubWpzXCI7XG5pbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5tanNcIjtcblxuLyoqXG4gKiBAbmFtZSBzdGFydE9mSVNPV2Vla1llYXJcbiAqIEBjYXRlZ29yeSBJU08gV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsXG4gKiB3aGljaCBhbHdheXMgc3RhcnRzIDMgZGF5cyBiZWZvcmUgdGhlIHllYXIncyBmaXJzdCBUaHVyc2RheS5cbiAqIFRoZSByZXN1bHQgd2lsbCBiZSBpbiB0aGUgbG9jYWwgdGltZXpvbmUuXG4gKlxuICogSVNPIHdlZWstbnVtYmVyaW5nIHllYXI6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICpcbiAqIEB0eXBlUGFyYW0gRGF0ZVR5cGUgLSBUaGUgYERhdGVgIHR5cGUsIHRoZSBmdW5jdGlvbiBvcGVyYXRlcyBvbi4gR2V0cyBpbmZlcnJlZCBmcm9tIHBhc3NlZCBhcmd1bWVudHMuIEFsbG93cyB0byB1c2UgZXh0ZW5zaW9ucyBsaWtlIFtgVVRDRGF0ZWBdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy91dGMpLlxuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIG9yaWdpbmFsIGRhdGVcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYW4gSVNPIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gVGhlIHN0YXJ0IG9mIGFuIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyIGZvciAyIEp1bHkgMjAwNTpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZJU09XZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mSVNPV2Vla1llYXIoZGF0ZSkge1xuICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSk7XG4gIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7XG4gIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih5ZWFyLCAwLCA0KTtcbiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICByZXR1cm4gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5KTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mSVNPV2Vla1llYXI7XG4iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBzdGFydE9mSVNPV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZJU09XZWVrLm1qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZklTT1dlZWtZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZklTT1dlZWtZZWFyLm1qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLm1qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGdldElTT1dlZWtcbiAqIEBjYXRlZ29yeSBJU08gV2VlayBIZWxwZXJzXG4gKiBAc3VtbWFyeSBHZXQgdGhlIElTTyB3ZWVrIG9mIHRoZSBnaXZlbiBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogR2V0IHRoZSBJU08gd2VlayBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBJU08gd2Vlay1udW1iZXJpbmcgeWVhcjogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZ2l2ZW4gZGF0ZVxuICpcbiAqIEByZXR1cm5zIFRoZSBJU08gd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBJU08td2VlayBudW1iZXJpbmcgeWVhciBpcyAyIEphbnVhcnkgMjAwNT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldElTT1dlZWsobmV3IERhdGUoMjAwNSwgMCwgMikpXG4gKiAvLz0+IDUzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09XZWVrKGRhdGUpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7XG5cbiAgLy8gUm91bmQgdGhlIG51bWJlciBvZiB3ZWVrcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIGJlY2F1c2UgdGhlIG51bWJlciBvZlxuICAvLyBtaWxsaXNlY29uZHMgaW4gYSB3ZWVrIGlzIG5vdCBjb25zdGFudCAoZS5nLiBpdCdzIGRpZmZlcmVudCBpbiB0aGUgd2VlayBvZlxuICAvLyB0aGUgZGF5bGlnaHQgc2F2aW5nIHRpbWUgY2xvY2sgc2hpZnQpLlxuICByZXR1cm4gTWF0aC5yb3VuZChkaWZmIC8gbWlsbGlzZWNvbmRzSW5XZWVrKSArIDE7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0SVNPV2VlaztcbiIsImltcG9ydCB7IGNvbnN0cnVjdEZyb20gfSBmcm9tIFwiLi9jb25zdHJ1Y3RGcm9tLm1qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWsgfSBmcm9tIFwiLi9zdGFydE9mV2Vlay5tanNcIjtcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldERlZmF1bHRPcHRpb25zIH0gZnJvbSBcIi4vX2xpYi9kZWZhdWx0T3B0aW9ucy5tanNcIjtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGdldFdlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgZ2V0V2Vla1llYXJcbiAqIEBjYXRlZ29yeSBXZWVrLU51bWJlcmluZyBZZWFyIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHJldHVybnMgVGhlIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3M/XG4gKiBjb25zdCByZXN1bHQgPSBnZXRXZWVrWWVhcihuZXcgRGF0ZSgyMDA0LCAxMSwgMjYpKVxuICogLy89PiAyMDA1XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFdoaWNoIHdlZWsgbnVtYmVyaW5nIHllYXIgaXMgMjYgRGVjZW1iZXIgMjAwNCBpZiB3ZWVrIHN0YXJ0cyBvbiBTYXR1cmRheT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNiksIHsgd2Vla1N0YXJ0c09uOiA2IH0pXG4gKiAvLz0+IDIwMDRcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2hpY2ggd2VlayBudW1iZXJpbmcgeWVhciBpcyAyNiBEZWNlbWJlciAyMDA0IGlmIHRoZSBmaXJzdCB3ZWVrIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWtZZWFyKG5ldyBEYXRlKDIwMDQsIDExLCAyNiksIHsgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0IH0pXG4gKiAvLz0+IDIwMDRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHtcbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTtcbiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID1cbiAgICBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIGRlZmF1bHRPcHRpb25zLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgMTtcblxuICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShkYXRlLCAwKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRGdWxsWWVhcih5ZWFyICsgMSwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZOZXh0WWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7XG5cbiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7XG4gIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7XG5cbiAgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mTmV4dFllYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXIgKyAxO1xuICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHllYXIgLSAxO1xuICB9XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0V2Vla1llYXI7XG4iLCJpbXBvcnQgeyBjb25zdHJ1Y3RGcm9tIH0gZnJvbSBcIi4vY29uc3RydWN0RnJvbS5tanNcIjtcbmltcG9ydCB7IGdldFdlZWtZZWFyIH0gZnJvbSBcIi4vZ2V0V2Vla1llYXIubWpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRPcHRpb25zLm1qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgc3RhcnRPZldlZWtZZWFyfSBmdW5jdGlvbiBvcHRpb25zLlxuICovXG5cbi8qKlxuICogQG5hbWUgc3RhcnRPZldlZWtZZWFyXG4gKiBAY2F0ZWdvcnkgV2Vlay1OdW1iZXJpbmcgWWVhciBIZWxwZXJzXG4gKiBAc3VtbWFyeSBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm4gdGhlIHN0YXJ0IG9mIGEgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhci5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgc3RhcnQgb2YgYSB3ZWVrLW51bWJlcmluZyB5ZWFyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhbiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1IHdpdGggZGVmYXVsdCBzZXR0aW5nczpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSlcbiAqIC8vPT4gU3VuIERlYyAyNiAyMDA0IDAwOjAwOjAwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBzdGFydCBvZiBhIHdlZWstbnVtYmVyaW5nIHllYXIgZm9yIDIgSnVseSAyMDA1XG4gKiAvLyBpZiBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB3ZWVrXG4gKiAvLyBhbmQgNCBKYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhcjpcbiAqIGNvbnN0IHJlc3VsdCA9IHN0YXJ0T2ZXZWVrWWVhcihuZXcgRGF0ZSgyMDA1LCA2LCAyKSwge1xuICogICB3ZWVrU3RhcnRzT246IDEsXG4gKiAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNFxuICogfSlcbiAqIC8vPT4gTW9uIEphbiAwMyAyMDA1IDAwOjAwOjAwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9XG4gICAgb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIDE7XG5cbiAgY29uc3QgeWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpO1xuICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKGRhdGUsIDApO1xuICBmaXJzdFdlZWsuc2V0RnVsbFllYXIoeWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTtcbiAgZmlyc3RXZWVrLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7XG4gIHJldHVybiBfZGF0ZTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBzdGFydE9mV2Vla1llYXI7XG4iLCJpbXBvcnQgeyBtaWxsaXNlY29uZHNJbldlZWsgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBzdGFydE9mV2VlayB9IGZyb20gXCIuL3N0YXJ0T2ZXZWVrLm1qc1wiO1xuaW1wb3J0IHsgc3RhcnRPZldlZWtZZWFyIH0gZnJvbSBcIi4vc3RhcnRPZldlZWtZZWFyLm1qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLm1qc1wiO1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgZ2V0V2Vla30gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGdldFdlZWtcbiAqIEBjYXRlZ29yeSBXZWVrIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIEdldCB0aGUgbG9jYWwgd2VlayBpbmRleCBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBleGFjdCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgb2ZcbiAqIGBvcHRpb25zLndlZWtTdGFydHNPbmAgKHdoaWNoIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrKVxuICogYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKHdoaWNoIGlzIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXMgYWx3YXlzIGluXG4gKiB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgd2Vlay1udW1iZXJpbmcgeWVhcilcbiAqXG4gKiBXZWVrIG51bWJlcmluZzogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2VlayNUaGVfSVNPX3dlZWtfZGF0ZV9zeXN0ZW1cbiAqXG4gKiBAdHlwZVBhcmFtIERhdGVUeXBlIC0gVGhlIGBEYXRlYCB0eXBlLCB0aGUgZnVuY3Rpb24gb3BlcmF0ZXMgb24uIEdldHMgaW5mZXJyZWQgZnJvbSBwYXNzZWQgYXJndW1lbnRzLiBBbGxvd3MgdG8gdXNlIGV4dGVuc2lvbnMgbGlrZSBbYFVUQ0RhdGVgXShodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvdXRjKS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBnaXZlbiBkYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgd2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1IHdpdGggZGVmYXVsdCBvcHRpb25zP1xuICogY29uc3QgcmVzdWx0ID0gZ2V0V2VlayhuZXcgRGF0ZSgyMDA1LCAwLCAyKSlcbiAqIC8vPT4gMlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBXaGljaCB3ZWVrIG9mIHRoZSBsb2NhbCB3ZWVrIG51bWJlcmluZyB5ZWFyIGlzIDIgSmFudWFyeSAyMDA1LFxuICogLy8gaWYgTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWssXG4gKiAvLyBhbmQgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgYWx3YXlzIGNvbnRhaW5zIDQgSmFudWFyeT9cbiAqIGNvbnN0IHJlc3VsdCA9IGdldFdlZWsobmV3IERhdGUoMjAwNSwgMCwgMiksIHtcbiAqICAgd2Vla1N0YXJ0c09uOiAxLFxuICogICBmaXJzdFdlZWtDb250YWluc0RhdGU6IDRcbiAqIH0pXG4gKiAvLz0+IDUzXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWsoZGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgY29uc3QgZGlmZiA9ICtzdGFydE9mV2VlayhfZGF0ZSwgb3B0aW9ucykgLSArc3RhcnRPZldlZWtZZWFyKF9kYXRlLCBvcHRpb25zKTtcblxuICAvLyBSb3VuZCB0aGUgbnVtYmVyIG9mIHdlZWtzIHRvIHRoZSBuZWFyZXN0IGludGVnZXIgYmVjYXVzZSB0aGUgbnVtYmVyIG9mXG4gIC8vIG1pbGxpc2Vjb25kcyBpbiBhIHdlZWsgaXMgbm90IGNvbnN0YW50IChlLmcuIGl0J3MgZGlmZmVyZW50IGluIHRoZSB3ZWVrIG9mXG4gIC8vIHRoZSBkYXlsaWdodCBzYXZpbmcgdGltZSBjbG9jayBzaGlmdCkuXG4gIHJldHVybiBNYXRoLnJvdW5kKGRpZmYgLyBtaWxsaXNlY29uZHNJbldlZWspICsgMTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBnZXRXZWVrO1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIsIHRhcmdldExlbmd0aCkge1xuICBjb25zdCBzaWduID0gbnVtYmVyIDwgMCA/IFwiLVwiIDogXCJcIjtcbiAgY29uc3Qgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgXCIwXCIpO1xuICByZXR1cm4gc2lnbiArIG91dHB1dDtcbn1cbiIsImltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuLi9hZGRMZWFkaW5nWmVyb3MubWpzXCI7XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICovXG5cbmV4cG9ydCBjb25zdCBsaWdodEZvcm1hdHRlcnMgPSB7XG4gIC8vIFllYXJcbiAgeShkYXRlLCB0b2tlbikge1xuICAgIC8vIEZyb20gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS0zMS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9Gb3JtYXRfdG9rZW5zXG4gICAgLy8gfCBZZWFyICAgICB8ICAgICB5IHwgeXkgfCAgIHl5eSB8ICB5eXl5IHwgeXl5eXkgfFxuICAgIC8vIHwtLS0tLS0tLS0tfC0tLS0tLS18LS0tLXwtLS0tLS0tfC0tLS0tLS18LS0tLS0tLXxcbiAgICAvLyB8IEFEIDEgICAgIHwgICAgIDEgfCAwMSB8ICAgMDAxIHwgIDAwMDEgfCAwMDAwMSB8XG4gICAgLy8gfCBBRCAxMiAgICB8ICAgIDEyIHwgMTIgfCAgIDAxMiB8ICAwMDEyIHwgMDAwMTIgfFxuICAgIC8vIHwgQUQgMTIzICAgfCAgIDEyMyB8IDIzIHwgICAxMjMgfCAgMDEyMyB8IDAwMTIzIHxcbiAgICAvLyB8IEFEIDEyMzQgIHwgIDEyMzQgfCAzNCB8ICAxMjM0IHwgIDEyMzQgfCAwMTIzNCB8XG4gICAgLy8gfCBBRCAxMjM0NSB8IDEyMzQ1IHwgNDUgfCAxMjM0NSB8IDEyMzQ1IHwgMTIzNDUgfFxuXG4gICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRva2VuID09PSBcInl5XCIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNb250aFxuICBNKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gICAgcmV0dXJuIHRva2VuID09PSBcIk1cIiA/IFN0cmluZyhtb250aCArIDEpIDogYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBBTSBvciBQTVxuICBhKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF0ZS5nZXRIb3VycygpIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcblxuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICBjYXNlIFwiYWFcIjpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgY2FzZSBcImFhYVwiOlxuICAgICAgICByZXR1cm4gZGF5UGVyaW9kRW51bVZhbHVlO1xuICAgICAgY2FzZSBcImFhYWFhXCI6XG4gICAgICAgIHJldHVybiBkYXlQZXJpb2RFbnVtVmFsdWVbMF07XG4gICAgICBjYXNlIFwiYWFhYVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gXCJhbVwiID8gXCJhLm0uXCIgOiBcInAubS5cIjtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0xMl1cbiAgaChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0yM11cbiAgSChkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRIb3VycygpLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIE1pbnV0ZVxuICBtKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBTZWNvbmRcbiAgcyhkYXRlLCB0b2tlbikge1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoZGF0ZS5nZXRTZWNvbmRzKCksIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRnJhY3Rpb24gb2Ygc2Vjb25kXG4gIFMoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBudW1iZXJPZkRpZ2l0cyA9IHRva2VuLmxlbmd0aDtcbiAgICBjb25zdCBtaWxsaXNlY29uZHMgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYyhcbiAgICAgIG1pbGxpc2Vjb25kcyAqIE1hdGgucG93KDEwLCBudW1iZXJPZkRpZ2l0cyAtIDMpLFxuICAgICk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcbn07XG4iLCJpbXBvcnQgeyBnZXREYXlPZlllYXIgfSBmcm9tIFwiLi4vLi4vZ2V0RGF5T2ZZZWFyLm1qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2VlayB9IGZyb20gXCIuLi8uLi9nZXRJU09XZWVrLm1qc1wiO1xuaW1wb3J0IHsgZ2V0SVNPV2Vla1llYXIgfSBmcm9tIFwiLi4vLi4vZ2V0SVNPV2Vla1llYXIubWpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrIH0gZnJvbSBcIi4uLy4uL2dldFdlZWsubWpzXCI7XG5pbXBvcnQgeyBnZXRXZWVrWWVhciB9IGZyb20gXCIuLi8uLi9nZXRXZWVrWWVhci5tanNcIjtcbmltcG9ydCB7IGFkZExlYWRpbmdaZXJvcyB9IGZyb20gXCIuLi9hZGRMZWFkaW5nWmVyb3MubWpzXCI7XG5pbXBvcnQgeyBsaWdodEZvcm1hdHRlcnMgfSBmcm9tIFwiLi9saWdodEZvcm1hdHRlcnMubWpzXCI7XG5cbmNvbnN0IGRheVBlcmlvZEVudW0gPSB7XG4gIGFtOiBcImFtXCIsXG4gIHBtOiBcInBtXCIsXG4gIG1pZG5pZ2h0OiBcIm1pZG5pZ2h0XCIsXG4gIG5vb246IFwibm9vblwiLFxuICBtb3JuaW5nOiBcIm1vcm5pbmdcIixcbiAgYWZ0ZXJub29uOiBcImFmdGVybm9vblwiLFxuICBldmVuaW5nOiBcImV2ZW5pbmdcIixcbiAgbmlnaHQ6IFwibmlnaHRcIixcbn07XG5cbi8qXG4gKiB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8IFVuaXQgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8ICBhICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBBKiB8IE1pbGxpc2Vjb25kcyBpbiBkYXkgICAgICAgICAgICB8XG4gKiB8ICBiICB8IEFNLCBQTSwgbm9vbiwgbWlkbmlnaHQgICAgICAgICB8ICBCICB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICB8XG4gKiB8ICBjICB8IFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrICB8ICBDKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8XG4gKiB8ICBkICB8IERheSBvZiBtb250aCAgICAgICAgICAgICAgICAgICB8ICBEICB8IERheSBvZiB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBlICB8IExvY2FsIGRheSBvZiB3ZWVrICAgICAgICAgICAgICB8ICBFICB8IERheSBvZiB3ZWVrICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBmICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBGKiB8IERheSBvZiB3ZWVrIGluIG1vbnRoICAgICAgICAgICB8XG4gKiB8ICBnKiB8IE1vZGlmaWVkIEp1bGlhbiBkYXkgICAgICAgICAgICB8ICBHICB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBoICB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICB8ICBIICB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBpISB8IElTTyBkYXkgb2Ygd2VlayAgICAgICAgICAgICAgICB8ICBJISB8IElTTyB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgICB8XG4gKiB8ICBqKiB8IExvY2FsaXplZCBob3VyIHcvIGRheSBwZXJpb2QgICB8ICBKKiB8IExvY2FsaXplZCBob3VyIHcvbyBkYXkgcGVyaW9kICB8XG4gKiB8ICBrICB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICB8ICBLICB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBsKiB8IChkZXByZWNhdGVkKSAgICAgICAgICAgICAgICAgICB8ICBMICB8IFN0YW5kLWFsb25lIG1vbnRoICAgICAgICAgICAgICB8XG4gKiB8ICBtICB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICBNICB8IE1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBuICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBOICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICBvISB8IE9yZGluYWwgbnVtYmVyIG1vZGlmaWVyICAgICAgICB8ICBPICB8IFRpbWV6b25lIChHTVQpICAgICAgICAgICAgICAgICB8XG4gKiB8ICBwISB8IExvbmcgbG9jYWxpemVkIHRpbWUgICAgICAgICAgICB8ICBQISB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICB8XG4gKiB8ICBxICB8IFN0YW5kLWFsb25lIHF1YXJ0ZXIgICAgICAgICAgICB8ICBRICB8IFF1YXJ0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICByKiB8IFJlbGF0ZWQgR3JlZ29yaWFuIHllYXIgICAgICAgICB8ICBSISB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICB8XG4gKiB8ICBzICB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICB8ICBTICB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICB8XG4gKiB8ICB0ISB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICB8ICBUISB8IE1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICB8XG4gKiB8ICB1ICB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICB8ICBVKiB8IEN5Y2xpYyB5ZWFyICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICB2KiB8IFRpbWV6b25lIChnZW5lcmljIG5vbi1sb2NhdC4pICB8ICBWKiB8IFRpbWV6b25lIChsb2NhdGlvbikgICAgICAgICAgICB8XG4gKiB8ICB3ICB8IExvY2FsIHdlZWsgb2YgeWVhciAgICAgICAgICAgICB8ICBXKiB8IFdlZWsgb2YgbW9udGggICAgICAgICAgICAgICAgICB8XG4gKiB8ICB4ICB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICB8ICBYICB8IFRpbWV6b25lIChJU08tODYwMSkgICAgICAgICAgICB8XG4gKiB8ICB5ICB8IFllYXIgKGFicykgICAgICAgICAgICAgICAgICAgICB8ICBZICB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICB8XG4gKiB8ICB6ICB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSB8ICBaKiB8IFRpbWV6b25lIChhbGlhc2VzKSAgICAgICAgICAgICB8XG4gKlxuICogTGV0dGVycyBtYXJrZWQgYnkgKiBhcmUgbm90IGltcGxlbWVudGVkIGJ1dCByZXNlcnZlZCBieSBVbmljb2RlIHN0YW5kYXJkLlxuICpcbiAqIExldHRlcnMgbWFya2VkIGJ5ICEgYXJlIG5vbi1zdGFuZGFyZCwgYnV0IGltcGxlbWVudGVkIGJ5IGRhdGUtZm5zOlxuICogLSBgb2AgbW9kaWZpZXMgdGhlIHByZXZpb3VzIHRva2VuIHRvIHR1cm4gaXQgaW50byBhbiBvcmRpbmFsIChzZWUgYGZvcm1hdGAgZG9jcylcbiAqIC0gYGlgIGlzIElTTyBkYXkgb2Ygd2Vlay4gRm9yIGBpYCBhbmQgYGlpYCBpcyByZXR1cm5zIG51bWVyaWMgSVNPIHdlZWsgZGF5cyxcbiAqICAgaS5lLiA3IGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICogLSBgSWAgaXMgSVNPIHdlZWsgb2YgeWVhciwgYXMgb3Bwb3NlZCB0byBgd2Agd2hpY2ggaXMgbG9jYWwgd2VlayBvZiB5ZWFyLlxuICogLSBgUmAgaXMgSVNPIHdlZWstbnVtYmVyaW5nIHllYXIsIGFzIG9wcG9zZWQgdG8gYFlgIHdoaWNoIGlzIGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIuXG4gKiAgIGBSYCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYElgIGFuZCBgaWBcbiAqICAgZm9yIHVuaXZlcnNhbCBJU08gd2Vlay1udW1iZXJpbmcgZGF0ZSwgd2hlcmVhc1xuICogICBgWWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB3YCBhbmQgYGVgXG4gKiAgIGZvciB3ZWVrLW51bWJlcmluZyBkYXRlIHNwZWNpZmljIHRvIHRoZSBsb2NhbGUuXG4gKiAtIGBQYCBpcyBsb25nIGxvY2FsaXplZCBkYXRlIGZvcm1hdFxuICogLSBgcGAgaXMgbG9uZyBsb2NhbGl6ZWQgdGltZSBmb3JtYXRcbiAqL1xuXG5leHBvcnQgY29uc3QgZm9ybWF0dGVycyA9IHtcbiAgLy8gRXJhXG4gIEc6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBlcmEgPSBkYXRlLmdldEZ1bGxZZWFyKCkgPiAwID8gMSA6IDA7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gQUQsIEJDXG4gICAgICBjYXNlIFwiR1wiOlxuICAgICAgY2FzZSBcIkdHXCI6XG4gICAgICBjYXNlIFwiR0dHXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7IHdpZHRoOiBcImFiYnJldmlhdGVkXCIgfSk7XG4gICAgICAvLyBBLCBCXG4gICAgICBjYXNlIFwiR0dHR0dcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmVyYShlcmEsIHsgd2lkdGg6IFwibmFycm93XCIgfSk7XG4gICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdFxuICAgICAgY2FzZSBcIkdHR0dcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5lcmEoZXJhLCB7IHdpZHRoOiBcIndpZGVcIiB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gWWVhclxuICB5OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgLy8gT3JkaW5hbCBudW1iZXJcbiAgICBpZiAodG9rZW4gPT09IFwieW9cIikge1xuICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIC8vIFJldHVybnMgMSBmb3IgMSBCQyAod2hpY2ggaXMgeWVhciAwIGluIEphdmFTY3JpcHQpXG4gICAgICBjb25zdCB5ZWFyID0gc2lnbmVkWWVhciA+IDAgPyBzaWduZWRZZWFyIDogMSAtIHNpZ25lZFllYXI7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih5ZWFyLCB7IHVuaXQ6IFwieWVhclwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMueShkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhclxuICBZOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc2lnbmVkV2Vla1llYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTtcbiAgICAvLyBSZXR1cm5zIDEgZm9yIDEgQkMgKHdoaWNoIGlzIHllYXIgMCBpbiBKYXZhU2NyaXB0KVxuICAgIGNvbnN0IHdlZWtZZWFyID0gc2lnbmVkV2Vla1llYXIgPiAwID8gc2lnbmVkV2Vla1llYXIgOiAxIC0gc2lnbmVkV2Vla1llYXI7XG5cbiAgICAvLyBUd28gZGlnaXQgeWVhclxuICAgIGlmICh0b2tlbiA9PT0gXCJZWVwiKSB7XG4gICAgICBjb25zdCB0d29EaWdpdFllYXIgPSB3ZWVrWWVhciAlIDEwMDtcbiAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModHdvRGlnaXRZZWFyLCAyKTtcbiAgICB9XG5cbiAgICAvLyBPcmRpbmFsIG51bWJlclxuICAgIGlmICh0b2tlbiA9PT0gXCJZb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcih3ZWVrWWVhciwgeyB1bml0OiBcInllYXJcIiB9KTtcbiAgICB9XG5cbiAgICAvLyBQYWRkaW5nXG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICBSOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4pIHtcbiAgICBjb25zdCBpc29XZWVrWWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUpO1xuXG4gICAgLy8gUGFkZGluZ1xuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRXh0ZW5kZWQgeWVhci4gVGhpcyBpcyBhIHNpbmdsZSBudW1iZXIgZGVzaWduYXRpbmcgdGhlIHllYXIgb2YgdGhpcyBjYWxlbmRhciBzeXN0ZW0uXG4gIC8vIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBsb2NhbGl6ZXJzIGFyZSBCLkMuIHllYXJzOlxuICAvLyB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICAvLyB8LS0tLS0tfC0tLS0tfC0tLS0tfFxuICAvLyB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICAvLyB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICAvLyB8IEJDIDIgfCAgIDIgfCAgLTEgfFxuICAvLyBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gIC8vIHdoaWxlIGB1dWAgcGFkcyBzaW5nbGUgZGlnaXQgeWVhcnMgdG8gMiBjaGFyYWN0ZXJzIGFuZCByZXR1cm5zIG90aGVyIHllYXJzIHVuY2hhbmdlZC5cbiAgdTogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gUXVhcnRlclxuICBROiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAzLCA0XG4gICAgICBjYXNlIFwiUVwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHF1YXJ0ZXIpO1xuICAgICAgLy8gMDEsIDAyLCAwMywgMDRcbiAgICAgIGNhc2UgXCJRUVwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpO1xuICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoXG4gICAgICBjYXNlIFwiUW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIocXVhcnRlciwgeyB1bml0OiBcInF1YXJ0ZXJcIiB9KTtcbiAgICAgIC8vIFExLCBRMiwgUTMsIFE0XG4gICAgICBjYXNlIFwiUVFRXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKVxuICAgICAgY2FzZSBcIlFRUVFRXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJuYXJyb3dcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLlxuICAgICAgY2FzZSBcIlFRUVFcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5xdWFydGVyKHF1YXJ0ZXIsIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBTdGFuZC1hbG9uZSBxdWFydGVyXG4gIHE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChkYXRlLmdldE1vbnRoKCkgKyAxKSAvIDMpO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDEsIDIsIDMsIDRcbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7XG4gICAgICAvLyAwMSwgMDIsIDAzLCAwNFxuICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGhcbiAgICAgIGNhc2UgXCJxb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6IFwicXVhcnRlclwiIH0pO1xuICAgICAgLy8gUTEsIFEyLCBRMywgUTRcbiAgICAgIGNhc2UgXCJxcXFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpXG4gICAgICBjYXNlIFwicXFxcXFcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uXG4gICAgICBjYXNlIFwicXFxcVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLnF1YXJ0ZXIocXVhcnRlciwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIE1vbnRoXG4gIE06IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiTVwiOlxuICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlIFwiTW9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6IFwibW9udGhcIiB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSBcIk1NTU1NXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiBcIndpZGVcIiwgY29udGV4dDogXCJmb3JtYXR0aW5nXCIgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIG1vbnRoXG4gIEw6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyAxLCAyLCAuLi4sIDEyXG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7XG4gICAgICAvLyAwMSwgMDIsIC4uLiwgMTJcbiAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKG1vbnRoICsgMSwgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoXG4gICAgICBjYXNlIFwiTG9cIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6IFwibW9udGhcIiB9KTtcbiAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlY1xuICAgICAgY2FzZSBcIkxMTFwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUubW9udGgobW9udGgsIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEosIEYsIC4uLiwgRFxuICAgICAgY2FzZSBcIkxMTExMXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5tb250aChtb250aCwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyXG4gICAgICBjYXNlIFwiTExMTFwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiBcIndpZGVcIiwgY29udGV4dDogXCJzdGFuZGFsb25lXCIgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIExvY2FsIHdlZWsgb2YgeWVhclxuICB3OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgd2VlayA9IGdldFdlZWsoZGF0ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAodG9rZW4gPT09IFwid29cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIod2VlaywgeyB1bml0OiBcIndlZWtcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHdlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gSVNPIHdlZWsgb2YgeWVhclxuICBJOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaXNvV2VlayA9IGdldElTT1dlZWsoZGF0ZSk7XG5cbiAgICBpZiAodG9rZW4gPT09IFwiSW9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoaXNvV2VlaywgeyB1bml0OiBcIndlZWtcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGlzb1dlZWssIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHRoZSBtb250aFxuICBkOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcImRvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0RGF0ZSgpLCB7IHVuaXQ6IFwiZGF0ZVwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuZChkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gRGF5IG9mIHllYXJcbiAgRDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGRheU9mWWVhciA9IGdldERheU9mWWVhcihkYXRlKTtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJEb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXlPZlllYXIsIHsgdW5pdDogXCJkYXlPZlllYXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRheU9mWWVhciwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBEYXkgb2Ygd2Vla1xuICBFOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAvLyBUdWVcbiAgICAgIGNhc2UgXCJFXCI6XG4gICAgICBjYXNlIFwiRUVcIjpcbiAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFRcbiAgICAgIGNhc2UgXCJFRUVFRVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1XG4gICAgICBjYXNlIFwiRUVFRUVFXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwic2hvcnRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICAvLyBUdWVzZGF5XG4gICAgICBjYXNlIFwiRUVFRVwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJ3aWRlXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvLyBMb2NhbCBkYXkgb2Ygd2Vla1xuICBlOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBjb25zdCBsb2NhbERheU9mV2VlayA9IChkYXlPZldlZWsgLSBvcHRpb25zLndlZWtTdGFydHNPbiArIDgpICUgNyB8fCA3O1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIE51bWVyaWNhbCB2YWx1ZSAoTnRoIGRheSBvZiB3ZWVrIHdpdGggY3VycmVudCBsb2NhbGUgb3Igd2Vla1N0YXJ0c09uKVxuICAgICAgY2FzZSBcImVcIjpcbiAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7XG4gICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlXG4gICAgICBjYXNlIFwiZWVcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhsb2NhbERheU9mV2VlaywgMik7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgXCJlb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgY2FzZSBcImVlZVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImVlZWVlXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJlZWVlZWVcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJlZWVlXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFN0YW5kLWFsb25lIGxvY2FsIGRheSBvZiB3ZWVrXG4gIGM6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpO1xuICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChzYW1lIGFzIGluIGBlYClcbiAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspO1xuICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZVxuICAgICAgY2FzZSBcImNjXCI6XG4gICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAxc3QsIDJuZCwgLi4uLCA3dGhcbiAgICAgIGNhc2UgXCJjb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiBcImRheVwiIH0pO1xuICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJzdGFuZGFsb25lXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJjY2NjY2NcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwic3RhbmRhbG9uZVwiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIElTTyBkYXkgb2Ygd2Vla1xuICBpOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgZGF5T2ZXZWVrID0gZGF0ZS5nZXREYXkoKTtcbiAgICBjb25zdCBpc29EYXlPZldlZWsgPSBkYXlPZldlZWsgPT09IDAgPyA3IDogZGF5T2ZXZWVrO1xuICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgIC8vIDJcbiAgICAgIGNhc2UgXCJpXCI6XG4gICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTtcbiAgICAgIC8vIDAyXG4gICAgICBjYXNlIFwiaWlcIjpcbiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhpc29EYXlPZldlZWssIHRva2VuLmxlbmd0aCk7XG4gICAgICAvLyAybmRcbiAgICAgIGNhc2UgXCJpb1wiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHsgdW5pdDogXCJkYXlcIiB9KTtcbiAgICAgIC8vIFR1ZVxuICAgICAgY2FzZSBcImlpaVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVFxuICAgICAgY2FzZSBcImlpaWlpXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXkoZGF5T2ZXZWVrLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgLy8gVHVcbiAgICAgIGNhc2UgXCJpaWlpaWlcIjpcbiAgICAgICAgcmV0dXJuIGxvY2FsaXplLmRheShkYXlPZldlZWssIHtcbiAgICAgICAgICB3aWR0aDogXCJzaG9ydFwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFR1ZXNkYXlcbiAgICAgIGNhc2UgXCJpaWlpXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5KGRheU9mV2Vlaywge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEFNIG9yIFBNXG4gIGE6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBjb25zdCBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyBcInBtXCIgOiBcImFtXCI7XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiYVwiOlxuICAgICAgY2FzZSBcImFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYWFhXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZVxuICAgICAgICAgIC5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgXCJhYWFhYVwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJhYWFhXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEFNLCBQTSwgbWlkbmlnaHQsIG5vb25cbiAgYjogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID09PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5ub29uO1xuICAgIH0gZWxzZSBpZiAoaG91cnMgPT09IDApIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubWlkbmlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/IFwicG1cIiA6IFwiYW1cIjtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlIFwiYlwiOlxuICAgICAgY2FzZSBcImJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwiYWJicmV2aWF0ZWRcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgICBjYXNlIFwiYmJiXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZVxuICAgICAgICAgIC5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgICB3aWR0aDogXCJhYmJyZXZpYXRlZFwiLFxuICAgICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNhc2UgXCJiYmJiYlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIm5hcnJvd1wiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICAgIGNhc2UgXCJiYmJiXCI6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcIndpZGVcIixcbiAgICAgICAgICBjb250ZXh0OiBcImZvcm1hdHRpbmdcIixcbiAgICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHRcbiAgQjogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7XG4gICAgaWYgKGhvdXJzID49IDE3KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikge1xuICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247XG4gICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7XG4gICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIkJcIjpcbiAgICAgIGNhc2UgXCJCQlwiOlxuICAgICAgY2FzZSBcIkJCQlwiOlxuICAgICAgICByZXR1cm4gbG9jYWxpemUuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwge1xuICAgICAgICAgIHdpZHRoOiBcImFiYnJldmlhdGVkXCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIkJCQkJCXCI6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwibmFycm93XCIsXG4gICAgICAgICAgY29udGV4dDogXCJmb3JtYXR0aW5nXCIsXG4gICAgICAgIH0pO1xuICAgICAgY2FzZSBcIkJCQkJcIjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBsb2NhbGl6ZS5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7XG4gICAgICAgICAgd2lkdGg6IFwid2lkZVwiLFxuICAgICAgICAgIGNvbnRleHQ6IFwiZm9ybWF0dGluZ1wiLFxuICAgICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSG91ciBbMS0xMl1cbiAgaDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJob1wiKSB7XG4gICAgICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCkgJSAxMjtcbiAgICAgIGlmIChob3VycyA9PT0gMCkgaG91cnMgPSAxMjtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuaChkYXRlLCB0b2tlbik7XG4gIH0sXG5cbiAgLy8gSG91ciBbMC0yM11cbiAgSDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBsb2NhbGl6ZSkge1xuICAgIGlmICh0b2tlbiA9PT0gXCJIb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihkYXRlLmdldEhvdXJzKCksIHsgdW5pdDogXCJob3VyXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5IKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBIb3VyIFswLTExXVxuICBLOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCkgJSAxMjtcblxuICAgIGlmICh0b2tlbiA9PT0gXCJLb1wiKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemUub3JkaW5hbE51bWJlcihob3VycywgeyB1bml0OiBcImhvdXJcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpO1xuICB9LFxuXG4gIC8vIEhvdXIgWzEtMjRdXG4gIGs6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBsZXQgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDI0O1xuXG4gICAgaWYgKHRva2VuID09PSBcImtvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6IFwiaG91clwiIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaG91cnMsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG5cbiAgLy8gTWludXRlXG4gIG06IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgbG9jYWxpemUpIHtcbiAgICBpZiAodG9rZW4gPT09IFwibW9cIikge1xuICAgICAgcmV0dXJuIGxvY2FsaXplLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXRNaW51dGVzKCksIHsgdW5pdDogXCJtaW51dGVcIiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pO1xuICB9LFxuXG4gIC8vIFNlY29uZFxuICBzOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIGxvY2FsaXplKSB7XG4gICAgaWYgKHRva2VuID09PSBcInNvXCIpIHtcbiAgICAgIHJldHVybiBsb2NhbGl6ZS5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCB7IHVuaXQ6IFwic2Vjb25kXCIgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5zKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBGcmFjdGlvbiBvZiBzZWNvbmRcbiAgUzogZnVuY3Rpb24gKGRhdGUsIHRva2VuKSB7XG4gICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5TKGRhdGUsIHRva2VuKTtcbiAgfSxcblxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKVxuICBYOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7XG4gICAgICByZXR1cm4gXCJaXCI7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgIGNhc2UgXCJYWFhYXCI6XG4gICAgICBjYXNlIFwiWFhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGBcbiAgICAgIGNhc2UgXCJYWFhYWFwiOlxuICAgICAgY2FzZSBcIlhYWFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYCcrMDA6MDAnYCBvciBlcXVpdmFsZW50KVxuICB4OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgIGNhc2UgXCJ4XCI6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuXG4gICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWl0ZXJcbiAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGB4eGBcbiAgICAgIGNhc2UgXCJ4eHh4XCI6XG4gICAgICBjYXNlIFwieHhcIjogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1pdGVyXG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCk7XG5cbiAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlclxuICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgIGNhc2UgXCJ4eHh4eFwiOlxuICAgICAgY2FzZSBcInh4eFwiOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUaW1lem9uZSAoR01UKVxuICBPOiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgXCJPXCI6XG4gICAgICBjYXNlIFwiT09cIjpcbiAgICAgIGNhc2UgXCJPT09cIjpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlIFwiT09PT1wiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0aW9uKVxuICB6OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgLy8gU2hvcnRcbiAgICAgIGNhc2UgXCJ6XCI6XG4gICAgICBjYXNlIFwienpcIjpcbiAgICAgIGNhc2UgXCJ6enpcIjpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCBcIjpcIik7XG4gICAgICAvLyBMb25nXG4gICAgICBjYXNlIFwienp6elwiOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiR01UXCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgXCI6XCIpO1xuICAgIH1cbiAgfSxcblxuICAvLyBTZWNvbmRzIHRpbWVzdGFtcFxuICB0OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIF9sb2NhbGl6ZSkge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGgudHJ1bmMoZGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHRpbWVzdGFtcCwgdG9rZW4ubGVuZ3RoKTtcbiAgfSxcblxuICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wXG4gIFQ6IGZ1bmN0aW9uIChkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAsIHRva2VuLmxlbmd0aCk7XG4gIH0sXG59O1xuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGVsaW1pdGVyID0gXCJcIikge1xuICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/IFwiLVwiIDogXCIrXCI7XG4gIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7XG4gIGNvbnN0IGhvdXJzID0gTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCk7XG4gIGNvbnN0IG1pbnV0ZXMgPSBhYnNPZmZzZXQgJSA2MDtcbiAgaWYgKG1pbnV0ZXMgPT09IDApIHtcbiAgICByZXR1cm4gc2lnbiArIFN0cmluZyhob3Vycyk7XG4gIH1cbiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkZWxpbWl0ZXIpIHtcbiAgaWYgKG9mZnNldCAlIDYwID09PSAwKSB7XG4gICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyBcIi1cIiA6IFwiK1wiO1xuICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gIH1cbiAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIgPSBcIlwiKSB7XG4gIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gXCItXCIgOiBcIitcIjtcbiAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgY29uc3QgaG91cnMgPSBhZGRMZWFkaW5nWmVyb3MoTWF0aC50cnVuYyhhYnNPZmZzZXQgLyA2MCksIDIpO1xuICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTtcbiAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG4iLCJjb25zdCBkYXRlTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nKSA9PiB7XG4gIHN3aXRjaCAocGF0dGVybikge1xuICAgIGNhc2UgXCJQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICBjYXNlIFwiUFBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJtZWRpdW1cIiB9KTtcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICByZXR1cm4gZm9ybWF0TG9uZy5kYXRlKHsgd2lkdGg6IFwibG9uZ1wiIH0pO1xuICAgIGNhc2UgXCJQUFBQXCI6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLmRhdGUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gIH1cbn07XG5cbmNvbnN0IHRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgc3dpdGNoIChwYXR0ZXJuKSB7XG4gICAgY2FzZSBcInBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJzaG9ydFwiIH0pO1xuICAgIGNhc2UgXCJwcFwiOlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcIm1lZGl1bVwiIH0pO1xuICAgIGNhc2UgXCJwcHBcIjpcbiAgICAgIHJldHVybiBmb3JtYXRMb25nLnRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgY2FzZSBcInBwcHBcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdExvbmcudGltZSh7IHdpZHRoOiBcImZ1bGxcIiB9KTtcbiAgfVxufTtcblxuY29uc3QgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcpID0+IHtcbiAgY29uc3QgbWF0Y2hSZXN1bHQgPSBwYXR0ZXJuLm1hdGNoKC8oUCspKHArKT8vKSB8fCBbXTtcbiAgY29uc3QgZGF0ZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsxXTtcbiAgY29uc3QgdGltZVBhdHRlcm4gPSBtYXRjaFJlc3VsdFsyXTtcblxuICBpZiAoIXRpbWVQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIGRhdGVMb25nRm9ybWF0dGVyKHBhdHRlcm4sIGZvcm1hdExvbmcpO1xuICB9XG5cbiAgbGV0IGRhdGVUaW1lRm9ybWF0O1xuXG4gIHN3aXRjaCAoZGF0ZVBhdHRlcm4pIHtcbiAgICBjYXNlIFwiUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwic2hvcnRcIiB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJQUFwiOlxuICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nLmRhdGVUaW1lKHsgd2lkdGg6IFwibWVkaXVtXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQXCI6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJsb25nXCIgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiUFBQUFwiOlxuICAgIGRlZmF1bHQ6XG4gICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcuZGF0ZVRpbWUoeyB3aWR0aDogXCJmdWxsXCIgfSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBkYXRlVGltZUZvcm1hdFxuICAgIC5yZXBsYWNlKFwie3tkYXRlfX1cIiwgZGF0ZUxvbmdGb3JtYXR0ZXIoZGF0ZVBhdHRlcm4sIGZvcm1hdExvbmcpKVxuICAgIC5yZXBsYWNlKFwie3t0aW1lfX1cIiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBsb25nRm9ybWF0dGVycyA9IHtcbiAgcDogdGltZUxvbmdGb3JtYXR0ZXIsXG4gIFA6IGRhdGVUaW1lTG9uZ0Zvcm1hdHRlcixcbn07XG4iLCJjb25zdCBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvO1xuY29uc3Qgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvO1xuXG5jb25zdCB0aHJvd1Rva2VucyA9IFtcIkRcIiwgXCJERFwiLCBcIllZXCIsIFwiWVlZWVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIGRheU9mWWVhclRva2VuUkUudGVzdCh0b2tlbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pIHtcbiAgcmV0dXJuIHdlZWtZZWFyVG9rZW5SRS50ZXN0KHRva2VuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IodG9rZW4sIGZvcm1hdCwgaW5wdXQpIHtcbiAgY29uc3QgX21lc3NhZ2UgPSBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KTtcbiAgY29uc29sZS53YXJuKF9tZXNzYWdlKTtcbiAgaWYgKHRocm93VG9rZW5zLmluY2x1ZGVzKHRva2VuKSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoX21lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQsIGlucHV0KSB7XG4gIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gXCJZXCIgPyBcInllYXJzXCIgOiBcImRheXMgb2YgdGhlIG1vbnRoXCI7XG4gIHJldHVybiBgVXNlIFxcYCR7dG9rZW4udG9Mb3dlckNhc2UoKX1cXGAgaW5zdGVhZCBvZiBcXGAke3Rva2VufVxcYCAoaW4gXFxgJHtmb3JtYXR9XFxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcXGAke2lucHV0fVxcYDsgc2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kYDtcbn1cbiIsIi8qKlxuICogQG5hbWUgaXNEYXRlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBnaXZlbiB2YWx1ZSBhIGRhdGU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGFuIGluc3RhbmNlIG9mIERhdGUuIFRoZSBmdW5jdGlvbiB3b3JrcyBmb3IgZGF0ZXMgdHJhbnNmZXJyZWQgYWNyb3NzIGlmcmFtZXMuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciBhIHZhbGlkIGRhdGU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUobmV3IERhdGUoKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKG5ldyBEYXRlKE5hTikpXG4gKiAvLz0+IHRydWVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRm9yIHNvbWUgdmFsdWU6XG4gKiBjb25zdCByZXN1bHQgPSBpc0RhdGUoJzIwMTQtMDItMzEnKVxuICogLy89PiBmYWxzZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBGb3IgYW4gb2JqZWN0OlxuICogY29uc3QgcmVzdWx0ID0gaXNEYXRlKHt9KVxuICogLy89PiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IERhdGVdXCIpXG4gICk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNEYXRlO1xuIiwiaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSBcIi4vaXNEYXRlLm1qc1wiO1xuaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLm1qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzVmFsaWRcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGdpdmVuIGRhdGUgdmFsaWQ/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGZhbHNlIGlmIGFyZ3VtZW50IGlzIEludmFsaWQgRGF0ZSBhbmQgdHJ1ZSBvdGhlcndpc2UuXG4gKiBBcmd1bWVudCBpcyBjb252ZXJ0ZWQgdG8gRGF0ZSB1c2luZyBgdG9EYXRlYC4gU2VlIFt0b0RhdGVdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlKVxuICogSW52YWxpZCBEYXRlIGlzIGEgRGF0ZSwgd2hvc2UgdGltZSB2YWx1ZSBpcyBOYU4uXG4gKlxuICogVGltZSB2YWx1ZSBvZiBEYXRlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjkuMS4xXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIFRoZSBkYXRlIGlzIHZhbGlkXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsaWQgZGF0ZTpcbiAqIGNvbnN0IHJlc3VsdCA9IGlzVmFsaWQobmV3IERhdGUoMjAxNCwgMSwgMzEpKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgdmFsdWUsIGNvbnZlcnRhYmxlIGludG8gYSBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZCgxMzkzODA0ODAwMDAwKVxuICogLy89PiB0cnVlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEZvciB0aGUgaW52YWxpZCBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gaXNWYWxpZChuZXcgRGF0ZSgnJykpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkKGRhdGUpIHtcbiAgaWYgKCFpc0RhdGUoZGF0ZSkgJiYgdHlwZW9mIGRhdGUgIT09IFwibnVtYmVyXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7XG4gIHJldHVybiAhaXNOYU4oTnVtYmVyKF9kYXRlKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNWYWxpZDtcbiIsImltcG9ydCB7IGRlZmF1bHRMb2NhbGUgfSBmcm9tIFwiLi9fbGliL2RlZmF1bHRMb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBmb3JtYXR0ZXJzIH0gZnJvbSBcIi4vX2xpYi9mb3JtYXQvZm9ybWF0dGVycy5tanNcIjtcbmltcG9ydCB7IGxvbmdGb3JtYXR0ZXJzIH0gZnJvbSBcIi4vX2xpYi9mb3JtYXQvbG9uZ0Zvcm1hdHRlcnMubWpzXCI7XG5pbXBvcnQge1xuICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuLFxuICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4sXG4gIHdhcm5PclRocm93UHJvdGVjdGVkRXJyb3IsXG59IGZyb20gXCIuL19saWIvcHJvdGVjdGVkVG9rZW5zLm1qc1wiO1xuaW1wb3J0IHsgaXNWYWxpZCB9IGZyb20gXCIuL2lzVmFsaWQubWpzXCI7XG5pbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUubWpzXCI7XG5cbi8vIFJleHBvcnRzIG9mIGludGVybmFsIGZvciBsaWJyYXJpZXMgdG8gdXNlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvaXNzdWVzLzM2MzgjaXNzdWVjb21tZW50LTE4NzcwODI4NzRcbmV4cG9ydCB7IGZvcm1hdHRlcnMsIGxvbmdGb3JtYXR0ZXJzIH07XG5cbi8vIFRoaXMgUmVnRXhwIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzIHNlcGFyYXRlZCBieSBgfGA6XG4vLyAtIFt5WVFxTUx3SWREZWNpaEhLa21zXW8gbWF0Y2hlcyBhbnkgYXZhaWxhYmxlIG9yZGluYWwgbnVtYmVyIHRva2VuXG4vLyAgIChvbmUgb2YgdGhlIGNlcnRhaW4gbGV0dGVycyBmb2xsb3dlZCBieSBgb2ApXG4vLyAtIChcXHcpXFwxKiBtYXRjaGVzIGFueSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgbGV0dGVyXG4vLyAtICcnIG1hdGNoZXMgdHdvIHF1b3RlIGNoYXJhY3RlcnMgaW4gYSByb3dcbi8vIC0gJygnJ3xbXiddKSsoJ3wkKSBtYXRjaGVzIGFueXRoaW5nIHN1cnJvdW5kZWQgYnkgdHdvIHF1b3RlIGNoYXJhY3RlcnMgKCcpLFxuLy8gICBleGNlcHQgYSBzaW5nbGUgcXVvdGUgc3ltYm9sLCB3aGljaCBlbmRzIHRoZSBzZXF1ZW5jZS5cbi8vICAgVHdvIHF1b3RlIGNoYXJhY3RlcnMgZG8gbm90IGVuZCB0aGUgc2VxdWVuY2UuXG4vLyAgIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHNpbmdsZSBxdW90ZVxuLy8gICB0aGVuIHRoZSBzZXF1ZW5jZSB3aWxsIGNvbnRpbnVlIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbi8vIC0gLiBtYXRjaGVzIGFueSBzaW5nbGUgY2hhcmFjdGVyIHVubWF0Y2hlZCBieSBwcmV2aW91cyBwYXJ0cyBvZiB0aGUgUmVnRXhwc1xuY29uc3QgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCA9XG4gIC9beVlRcU1Md0lkRGVjaWhIS2ttc11vfChcXHcpXFwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuLy8gVGhpcyBSZWdFeHAgY2F0Y2hlcyBzeW1ib2xzIGVzY2FwZWQgYnkgcXVvdGVzLCBhbmQgYWxzb1xuLy8gc2VxdWVuY2VzIG9mIHN5bWJvbHMgUCwgcCwgYW5kIHRoZSBjb21iaW5hdGlvbnMgbGlrZSBgUFBQUFBQUHBwcHBwYFxuY29uc3QgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvUCtwK3xQK3xwK3wnJ3wnKCcnfFteJ10pKygnfCQpfC4vZztcblxuY29uc3QgZXNjYXBlZFN0cmluZ1JlZ0V4cCA9IC9eJyhbXl0qPyknPyQvO1xuY29uc3QgZG91YmxlUXVvdGVSZWdFeHAgPSAvJycvZztcbmNvbnN0IHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwID0gL1thLXpBLVpdLztcblxuZXhwb3J0IHsgZm9ybWF0IGFzIGZvcm1hdERhdGUgfTtcblxuLyoqXG4gKiBUaGUge0BsaW5rIGZvcm1hdH0gZnVuY3Rpb24gb3B0aW9ucy5cbiAqL1xuXG4vKipcbiAqIEBuYW1lIGZvcm1hdFxuICogQGFsaWFzIGZvcm1hdERhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgRm9ybWF0IHRoZSBkYXRlLlxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGZvcm1hdC4gVGhlIHJlc3VsdCBtYXkgdmFyeSBieSBsb2NhbGUuXG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqXG4gKiBUaGUgY2hhcmFjdGVycyB3cmFwcGVkIGJldHdlZW4gdHdvIHNpbmdsZSBxdW90ZXMgY2hhcmFjdGVycyAoJykgYXJlIGVzY2FwZWQuXG4gKiBUd28gc2luZ2xlIHF1b3RlcyBpbiBhIHJvdywgd2hldGhlciBpbnNpZGUgb3Igb3V0c2lkZSBhIHF1b3RlZCBzZXF1ZW5jZSwgcmVwcmVzZW50IGEgJ3JlYWwnIHNpbmdsZSBxdW90ZS5cbiAqIChzZWUgdGhlIGxhc3QgZXhhbXBsZSlcbiAqXG4gKiBGb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBiYXNlZCBvbiBVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZCAjMzU6XG4gKiBodHRwczovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzL3RyMzUvdHIzNS1kYXRlcy5odG1sI0RhdGVfRmllbGRfU3ltYm9sX1RhYmxlXG4gKiB3aXRoIGEgZmV3IGFkZGl0aW9ucyAoc2VlIG5vdGUgNyBiZWxvdyB0aGUgdGFibGUpLlxuICpcbiAqIEFjY2VwdGVkIHBhdHRlcm5zOlxuICogfCBVbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGF0dGVybiB8IFJlc3VsdCBleGFtcGxlcyAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18XG4gKiB8IEVyYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHLi5HR0cgIHwgQUQsIEJDICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0dHRyAgICB8IEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0dHICAgfCBBLCBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IENhbGVuZGFyIHllYXIgICAgICAgICAgICAgICAgICAgfCB5ICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeW8gICAgICB8IDQ0dGgsIDFzdCwgMHRoLCAxN3RoICAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5ICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5eSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXl5ICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IExvY2FsIHdlZWstbnVtYmVyaW5nIHllYXIgICAgICAgfCBZICAgICAgIHwgNDQsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWW8gICAgICB8IDQ0dGgsIDFzdCwgMTkwMHRoLCAyMDE3dGggICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZICAgICAgfCA0NCwgMDEsIDAwLCAxNyAgICAgICAgICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVkgICAgIHwgMDQ0LCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZWSAgICB8IDAwNDQsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICB8IDUsOCAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVlZICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUgICB8XG4gKiB8IElTTyB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgICAgfCBSICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlIgICAgICB8IC00MywgMDAsIDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUiAgICAgfCAtMDQzLCAwMDAsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlJSICAgIHwgLTAwNDMsIDAwMDAsIDAwMDEsIDE5MDAsIDIwMTcgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUlIgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSw3IHxcbiAqIHwgRXh0ZW5kZWQgeWVhciAgICAgICAgICAgICAgICAgICB8IHUgICAgICAgfCAtNDMsIDAsIDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dSAgICAgIHwgLTQzLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1ICAgICB8IC0wNDMsIDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dXUgICAgfCAtMDA0MywgMDAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1dSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBRdWFydGVyIChmb3JtYXR0aW5nKSAgICAgICAgICAgIHwgUSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUVEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRUSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBRdWFydGVyIChzdGFuZC1hbG9uZSkgICAgICAgICAgIHwgcSAgICAgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFvICAgICAgfCAxc3QsIDJuZCwgM3JkLCA0dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcSAgICAgIHwgMDEsIDAyLCAwMywgMDQgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxICAgICB8IFExLCBRMiwgUTMsIFE0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcXEgICAgfCAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLiAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxcSAgIHwgMSwgMiwgMywgNCAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgfFxuICogfCBNb250aCAoZm9ybWF0dGluZykgICAgICAgICAgICAgIHwgTSAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1vICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTSAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTU0gICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NTSAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBNb250aCAoc3RhbmQtYWxvbmUpICAgICAgICAgICAgIHwgTCAgICAgICB8IDEsIDIsIC4uLiwgMTIgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAxMnRoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTCAgICAgIHwgMDEsIDAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMICAgICB8IEphbiwgRmViLCAuLi4sIERlYyAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTEwgICAgfCBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlciAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMTCAgIHwgSiwgRiwgLi4uLCBEICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCB3ZWVrIG9mIHllYXIgICAgICAgICAgICAgIHwgdyAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3dyAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gd2VlayBvZiB5ZWFyICAgICAgICAgICAgICAgIHwgSSAgICAgICB8IDEsIDIsIC4uLiwgNTMgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA1M3RoICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJSSAgICAgIHwgMDEsIDAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCBEYXkgb2YgbW9udGggICAgICAgICAgICAgICAgICAgIHwgZCAgICAgICB8IDEsIDIsIC4uLiwgMzEgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzMXN0ICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkZCAgICAgIHwgMDEsIDAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBEYXkgb2YgeWVhciAgICAgICAgICAgICAgICAgICAgIHwgRCAgICAgICB8IDEsIDIsIC4uLiwgMzY1LCAzNjYgICAgICAgICAgICAgICB8IDkgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERvICAgICAgfCAxc3QsIDJuZCwgLi4uLCAzNjV0aCwgMzY2dGggICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERCAgICAgIHwgMDEsIDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgIHwgOSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREREICAgICB8IDAwMSwgMDAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEREREQgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IERheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICAgICAgfCBFLi5FRUUgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUVFICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRUUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBJU08gZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICAgIHwgaSAgICAgICB8IDEsIDIsIDMsIC4uLiwgNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlvICAgICAgfCAxc3QsIDJuZCwgLi4uLCA3dGggICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaSAgICAgIHwgMDEsIDAyLCAuLi4sIDA3ICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3VuICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWkgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyLDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpaSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWlpICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU2EsIFN1ICAgICAgICB8IDcgICAgIHxcbiAqIHwgTG9jYWwgZGF5IG9mIHdlZWsgKGZvcm1hdHRpbmcpICB8IGUgICAgICAgfCAyLCAzLCA0LCAuLi4sIDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbyAgICAgIHwgMm5kLCAzcmQsIC4uLiwgMXN0ICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWUgICAgICB8IDAyLCAwMywgLi4uLCAwMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1biAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZWUgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlZSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFNhLCBTdSAgICAgICAgfCAgICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChzdGFuZC1hbG9uZSkgfCBjICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY28gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2MgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdW4gICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjYyAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2NjICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjY2MgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTYSwgU3UgICAgICAgIHwgICAgICAgfFxuICogfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYS4uYWEgICB8IEFNLCBQTSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFhYSAgICAgfCBhbSwgcG0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiICAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmIgICAgIHwgYW0sIHBtLCBub29uLCBtaWRuaWdodCAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYiAgICB8IGEubS4sIHAubS4sIG5vb24sIG1pZG5pZ2h0ICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJiYmJiICAgfCBhLCBwLCBuLCBtaSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZsZXhpYmxlIGRheSBwZXJpb2QgICAgICAgICAgICAgfCBCLi5CQkIgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQiAgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJCQkJCICAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMTJdICAgICAgICAgICAgICAgICAgICAgfCBoICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaG8gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDEydGggICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhoICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDEyICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMjNdICAgICAgICAgICAgICAgICAgICAgfCBIICAgICAgIHwgMCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSG8gICAgICB8IDB0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhIICAgICAgfCAwMCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzAtMTFdICAgICAgICAgICAgICAgICAgICAgfCBLICAgICAgIHwgMSwgMiwgLi4uLCAxMSwgMCAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS28gICAgICB8IDFzdCwgMm5kLCAuLi4sIDExdGgsIDB0aCAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEtLICAgICAgfCAwMSwgMDIsIC4uLiwgMTEsIDAwICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEhvdXIgWzEtMjRdICAgICAgICAgICAgICAgICAgICAgfCBrICAgICAgIHwgMjQsIDEsIDIsIC4uLiwgMjMgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga28gICAgICB8IDI0dGgsIDFzdCwgMm5kLCAuLi4sIDIzcmQgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtrICAgICAgfCAyNCwgMDEsIDAyLCAuLi4sIDIzICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IE1pbnV0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW8gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1tICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IFNlY29uZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzICAgICAgIHwgMCwgMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc28gICAgICB8IDB0aCwgMXN0LCAuLi4sIDU5dGggICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNzICAgICAgfCAwMCwgMDEsIC4uLiwgNTkgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8IEZyYWN0aW9uIG9mIHNlY29uZCAgICAgICAgICAgICAgfCBTICAgICAgIHwgMCwgMSwgLi4uLCA5ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1MgICAgICB8IDAwLCAwMSwgLi4uLCA5OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTUyAgICAgfCAwMDAsIDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTU1NTICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBUaW1lem9uZSAoSVNPLTg2MDEgdy8gWikgICAgICAgIHwgWCAgICAgICB8IC0wOCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYICAgICAgfCAtMDgwMCwgKzA1MzAsIFogICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFggICAgIHwgLTA4OjAwLCArMDU6MzAsIFogICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWCAgICB8IC0wODAwLCArMDUzMCwgWiwgKzEyMzQ1NiAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWFhYICAgfCAtMDg6MDAsICswNTozMCwgWiwgKzEyOjM0OjU2ICAgICAgfCAgICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3L28gWikgICAgICAgfCB4ICAgICAgIHwgLTA4LCArMDUzMCwgKzAwICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHggICAgICB8IC0wODAwLCArMDUzMCwgKzAwMDAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eCAgICAgfCAtMDg6MDAsICswNTozMCwgKzAwOjAwICAgICAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4ICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCwgKzEyMzQ1NiAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4eHggICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAsICsxMjozNDo1NiB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKEdNVCkgICAgICAgICAgICAgICAgICB8IE8uLi5PT08gfCBHTVQtOCwgR01UKzU6MzAsIEdNVCswICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBPT09PICAgIHwgR01ULTA4OjAwLCBHTVQrMDU6MzAsIEdNVCswMDowMCAgIHwgMiAgICAgfFxuICogfCBUaW1lem9uZSAoc3BlY2lmaWMgbm9uLWxvY2F0LikgIHwgei4uLnp6eiB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8IDYgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHp6enogICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyLDYgICB8XG4gKiB8IFNlY29uZHMgdGltZXN0YW1wICAgICAgICAgICAgICAgfCB0ICAgICAgIHwgNTEyOTY5NTIwICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHQgICAgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNyAgIHxcbiAqIHwgTWlsbGlzZWNvbmRzIHRpbWVzdGFtcCAgICAgICAgICB8IFQgICAgICAgfCA1MTI5Njk1MjA5MDAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUVCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCBkYXRlICAgICAgICAgICAgIHwgUCAgICAgICB8IDA0LzI5LzE0NTMgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQICAgICAgfCBBcHIgMjksIDE0NTMgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFAgICAgIHwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQUCAgICB8IEZyaWRheSwgQXByaWwgMjl0aCwgMTQ1MyAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgTG9uZyBsb2NhbGl6ZWQgdGltZSAgICAgICAgICAgICB8IHAgICAgICAgfCAxMjowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcCAgICAgIHwgMTI6MDA6MDAgQU0gICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwICAgICB8IDEyOjAwOjAwIEFNIEdNVCsyICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwcHAgICAgfCAxMjowMDowMCBBTSBHTVQrMDI6MDAgICAgICAgICAgICAgfCAyLDcgICB8XG4gKiB8IENvbWJpbmF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgICAgfCBQcCAgICAgIHwgMDQvMjkvMTQ1MywgMTI6MDAgQU0gICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBwcCAgICB8IEFwciAyOSwgMTQ1MywgMTI6MDA6MDAgQU0gICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUHBwcCAgfCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQcHBwcHwgRnJpZGF5LCBBcHJpbCAyOXRoLCAxNDUzIGF0IC4uLiAgIHwgMiw3ICAgfFxuICogTm90ZXM6XG4gKiAxLiBcIkZvcm1hdHRpbmdcIiB1bml0cyAoZS5nLiBmb3JtYXR0aW5nIHF1YXJ0ZXIpIGluIHRoZSBkZWZhdWx0IGVuLVVTIGxvY2FsZVxuICogICAgYXJlIHRoZSBzYW1lIGFzIFwic3RhbmQtYWxvbmVcIiB1bml0cywgYnV0IGFyZSBkaWZmZXJlbnQgaW4gc29tZSBsYW5ndWFnZXMuXG4gKiAgICBcIkZvcm1hdHRpbmdcIiB1bml0cyBhcmUgZGVjbGluZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBvZiB0aGUgbGFuZ3VhZ2VcbiAqICAgIGluIHRoZSBjb250ZXh0IG9mIGEgZGF0ZS4gXCJTdGFuZC1hbG9uZVwiIHVuaXRzIGFyZSBhbHdheXMgbm9taW5hdGl2ZSBzaW5ndWxhcjpcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIExMTEwnLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ2RvIE1NTU0nLCB7bG9jYWxlOiBjc30pIC8vPT4gJzYuIGxpc3RvcGFkdSdgXG4gKlxuICogMi4gQW55IHNlcXVlbmNlIG9mIHRoZSBpZGVudGljYWwgbGV0dGVycyBpcyBhIHBhdHRlcm4sIHVubGVzcyBpdCBpcyBlc2NhcGVkIGJ5XG4gKiAgICB0aGUgc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKHNlZSBiZWxvdykuXG4gKiAgICBJZiB0aGUgc2VxdWVuY2UgaXMgbG9uZ2VyIHRoYW4gbGlzdGVkIGluIHRhYmxlIChlLmcuIGBFRUVFRUVFRUVFRWApXG4gKiAgICB0aGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgZGVmYXVsdCBwYXR0ZXJuIGZvciB0aGlzIHVuaXQsIHVzdWFsbHlcbiAqICAgIHRoZSBsb25nZXN0IG9uZSAoaW4gY2FzZSBvZiBJU08gd2Vla2RheXMsIGBFRUVFYCkuIERlZmF1bHQgcGF0dGVybnMgZm9yIHVuaXRzXG4gKiAgICBhcmUgbWFya2VkIHdpdGggXCIyXCIgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSB0YWJsZS5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTScpIC8vPT4gJ05vdidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU0nKSAvLz0+ICdOJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU1NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogMy4gU29tZSBwYXR0ZXJucyBjb3VsZCBiZSB1bmxpbWl0ZWQgbGVuZ3RoIChzdWNoIGFzIGB5eXl5eXl5eWApLlxuICogICAgVGhlIG91dHB1dCB3aWxsIGJlIHBhZGRlZCB3aXRoIHplcm9zIHRvIG1hdGNoIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICd5eXl5eXl5eScpIC8vPT4gJzAwMDAyMDE3J2BcbiAqXG4gKiA0LiBgUVFRUVFgIGFuZCBgcXFxcXFgIGNvdWxkIGJlIG5vdCBzdHJpY3RseSBudW1lcmljYWwgaW4gc29tZSBsb2NhbGVzLlxuICogICAgVGhlc2UgdG9rZW5zIHJlcHJlc2VudCB0aGUgc2hvcnRlc3QgZm9ybSBvZiB0aGUgcXVhcnRlci5cbiAqXG4gKiA1LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgcGF0dGVybnMgYXJlIEIuQy4geWVhcnM6XG4gKlxuICogICAgfCBZZWFyIHwgYHlgIHwgYHVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS18LS0tLS18XG4gKiAgICB8IEFDIDEgfCAgIDEgfCAgIDEgfFxuICogICAgfCBCQyAxIHwgICAxIHwgICAwIHxcbiAqICAgIHwgQkMgMiB8ICAgMiB8ICAtMSB8XG4gKlxuICogICAgQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLFxuICogICAgd2hpbGUgYHV1YCBwYWRzIHNpbmdsZSBkaWdpdCB5ZWFycyB0byAyIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgb3RoZXIgeWVhcnMgdW5jaGFuZ2VkOlxuICpcbiAqICAgIHwgWWVhciB8IGB5eWAgfCBgdXVgIHxcbiAqICAgIHwtLS0tLS18LS0tLS0tfC0tLS0tLXxcbiAqICAgIHwgMSAgICB8ICAgMDEgfCAgIDAxIHxcbiAqICAgIHwgMTQgICB8ICAgMTQgfCAgIDE0IHxcbiAqICAgIHwgMzc2ICB8ICAgNzYgfCAgMzc2IHxcbiAqICAgIHwgMTQ1MyB8ICAgNTMgfCAxNDUzIHxcbiAqXG4gKiAgICBUaGUgc2FtZSBkaWZmZXJlbmNlIGlzIHRydWUgZm9yIGxvY2FsIGFuZCBJU08gd2Vlay1udW1iZXJpbmcgeWVhcnMgKGBZYCBhbmQgYFJgKSxcbiAqICAgIGV4Y2VwdCBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFycyBhcmUgZGVwZW5kZW50IG9uIGBvcHRpb25zLndlZWtTdGFydHNPbmBcbiAqICAgIGFuZCBgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGVgIChjb21wYXJlIFtnZXRJU09XZWVrWWVhcl0oaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRJU09XZWVrWWVhcilcbiAqICAgIGFuZCBbZ2V0V2Vla1llYXJdKGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvZ2V0V2Vla1llYXIpKS5cbiAqXG4gKiA2LiBTcGVjaWZpYyBub24tbG9jYXRpb24gdGltZXpvbmVzIGFyZSBjdXJyZW50bHkgdW5hdmFpbGFibGUgaW4gYGRhdGUtZm5zYCxcbiAqICAgIHNvIHJpZ2h0IG5vdyB0aGVzZSB0b2tlbnMgZmFsbCBiYWNrIHRvIEdNVCB0aW1lem9uZXMuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBgWVlgIGFuZCBgWVlZWWAgdG9rZW5zIHJlcHJlc2VudCB3ZWVrLW51bWJlcmluZyB5ZWFycyBidXQgdGhleSBhcmUgb2Z0ZW4gY29uZnVzZWQgd2l0aCB5ZWFycy5cbiAqICAgIFlvdSBzaG91bGQgZW5hYmxlIGBvcHRpb25zLnVzZUFkZGl0aW9uYWxXZWVrWWVhclRva2Vuc2AgdG8gdXNlIHRoZW0uIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICpcbiAqIDkuIGBEYCBhbmQgYEREYCB0b2tlbnMgcmVwcmVzZW50IGRheXMgb2YgdGhlIHllYXIgYnV0IHRoZXkgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggZGF5cyBvZiB0aGUgbW9udGguXG4gKiAgICBZb3Ugc2hvdWxkIGVuYWJsZSBgb3B0aW9ucy51c2VBZGRpdGlvbmFsRGF5T2ZZZWFyVG9rZW5zYCB0byB1c2UgdGhlbS4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGF0ZS1mbnMvZGF0ZS1mbnMvYmxvYi9tYXN0ZXIvZG9jcy91bmljb2RlVG9rZW5zLm1kXG4gKlxuICogQHR5cGVQYXJhbSBEYXRlVHlwZSAtIFRoZSBgRGF0ZWAgdHlwZSwgdGhlIGZ1bmN0aW9uIG9wZXJhdGVzIG9uLiBHZXRzIGluZmVycmVkIGZyb20gcGFzc2VkIGFyZ3VtZW50cy4gQWxsb3dzIHRvIHVzZSBleHRlbnNpb25zIGxpa2UgW2BVVENEYXRlYF0oaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL3V0YykuXG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgb3JpZ2luYWwgZGF0ZVxuICogQHBhcmFtIGZvcm1hdCAtIFRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9iamVjdCB3aXRoIG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nXG4gKlxuICogQHRocm93cyBgZGF0ZWAgbXVzdCBub3QgYmUgSW52YWxpZCBEYXRlXG4gKiBAdGhyb3dzIGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3MgYG9wdGlvbnMubG9jYWxlYCBtdXN0IGNvbnRhaW4gYGZvcm1hdExvbmdgIHByb3BlcnR5XG4gKiBAdGhyb3dzIHVzZSBgeXl5eWAgaW5zdGVhZCBvZiBgWVlZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYHl5YCBpbnN0ZWFkIG9mIGBZWWAgZm9yIGZvcm1hdHRpbmcgeWVhcnMgdXNpbmcgW2Zvcm1hdCBwcm92aWRlZF0gdG8gdGhlIGlucHV0IFtpbnB1dCBwcm92aWRlZF07IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZFxuICogQHRocm93cyB1c2UgYGRgIGluc3RlYWQgb2YgYERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgdXNlIGBkZGAgaW5zdGVhZCBvZiBgRERgIGZvciBmb3JtYXR0aW5nIGRheXMgb2YgdGhlIG1vbnRoIHVzaW5nIFtmb3JtYXQgcHJvdmlkZWRdIHRvIHRoZSBpbnB1dCBbaW5wdXQgcHJvdmlkZWRdOyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VuaWNvZGVUb2tlbnMubWRcbiAqIEB0aHJvd3MgZm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAxMSBGZWJydWFyeSAyMDE0IGluIG1pZGRsZS1lbmRpYW4gZm9ybWF0OlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDEsIDExKSwgJ01NL2RkL3l5eXknKVxuICogLy89PiAnMDIvMTEvMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gUmVwcmVzZW50IDIgSnVseSAyMDE0IGluIEVzcGVyYW50bzpcbiAqIGltcG9ydCB7IGVvTG9jYWxlIH0gZnJvbSAnZGF0ZS1mbnMvbG9jYWxlL2VvJ1xuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIpLCBcImRvICdkZScgTU1NTSB5eXl5XCIsIHtcbiAqICAgbG9jYWxlOiBlb0xvY2FsZVxuICogfSlcbiAqIC8vPT4gJzItYSBkZSBqdWxpbyAyMDE0J1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBFc2NhcGUgc3RyaW5nIGJ5IHNpbmdsZSBxdW90ZSBjaGFyYWN0ZXJzOlxuICogY29uc3QgcmVzdWx0ID0gZm9ybWF0KG5ldyBEYXRlKDIwMTQsIDYsIDIsIDE1KSwgXCJoICdvJydjbG9jaydcIilcbiAqIC8vPT4gXCIzIG8nY2xvY2tcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0KGRhdGUsIGZvcm1hdFN0ciwgb3B0aW9ucykge1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IGdldERlZmF1bHRPcHRpb25zKCk7XG4gIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9ucy5sb2NhbGUgPz8gZGVmYXVsdExvY2FsZTtcblxuICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPVxuICAgIG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/P1xuICAgIG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/XG4gICAgZGVmYXVsdE9wdGlvbnMubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz9cbiAgICAxO1xuXG4gIGNvbnN0IHdlZWtTdGFydHNPbiA9XG4gICAgb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/XG4gICAgb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy53ZWVrU3RhcnRzT24gPz9cbiAgICBkZWZhdWx0T3B0aW9ucy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/P1xuICAgIDA7XG5cbiAgY29uc3Qgb3JpZ2luYWxEYXRlID0gdG9EYXRlKGRhdGUpO1xuXG4gIGlmICghaXNWYWxpZChvcmlnaW5hbERhdGUpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7XG4gIH1cblxuICBsZXQgcGFydHMgPSBmb3JtYXRTdHJcbiAgICAubWF0Y2gobG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHApXG4gICAgLm1hcCgoc3Vic3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCJwXCIgfHwgZmlyc3RDaGFyYWN0ZXIgPT09IFwiUFwiKSB7XG4gICAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07XG4gICAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1YnN0cmluZztcbiAgICB9KVxuICAgIC5qb2luKFwiXCIpXG4gICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnNSZWdFeHApXG4gICAgLm1hcCgoc3Vic3RyaW5nKSA9PiB7XG4gICAgICAvLyBSZXBsYWNlIHR3byBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyB3aXRoIG9uZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyXG4gICAgICBpZiAoc3Vic3RyaW5nID09PSBcIicnXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBcIidcIiB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTtcbiAgICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gXCInXCIpIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBjbGVhbkVzY2FwZWRTdHJpbmcoc3Vic3RyaW5nKSB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHtcbiAgICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHApKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgIFwiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGBcIiArXG4gICAgICAgICAgICBmaXJzdENoYXJhY3RlciArXG4gICAgICAgICAgICBcImBcIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgaXNUb2tlbjogZmFsc2UsIHZhbHVlOiBzdWJzdHJpbmcgfTtcbiAgICB9KTtcblxuICAvLyBpbnZva2UgbG9jYWxpemUgcHJlcHJvY2Vzc29yIChvbmx5IGZvciBmcmVuY2ggbG9jYWxlcyBhdCB0aGUgbW9tZW50KVxuICBpZiAobG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3Nvcikge1xuICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdHRlck9wdGlvbnMgPSB7XG4gICAgZmlyc3RXZWVrQ29udGFpbnNEYXRlLFxuICAgIHdlZWtTdGFydHNPbixcbiAgICBsb2NhbGUsXG4gIH07XG5cbiAgcmV0dXJuIHBhcnRzXG4gICAgLm1hcCgocGFydCkgPT4ge1xuICAgICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlO1xuXG4gICAgICBjb25zdCB0b2tlbiA9IHBhcnQudmFsdWU7XG5cbiAgICAgIGlmIChcbiAgICAgICAgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiZcbiAgICAgICAgICBpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4odG9rZW4pKSB8fFxuICAgICAgICAoIW9wdGlvbnM/LnVzZUFkZGl0aW9uYWxEYXlPZlllYXJUb2tlbnMgJiZcbiAgICAgICAgICBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSlcbiAgICAgICkge1xuICAgICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGZvcm1hdHRlcnNbdG9rZW5bMF1dO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlcihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkge1xuICBjb25zdCBtYXRjaGVkID0gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cCk7XG5cbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgXCInXCIpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdDtcbiJdLCJuYW1lcyI6WyJmb3JtYXREaXN0YW5jZUxvY2FsZSIsImZvcm1hdERpc3RhbmNlIiwidG9rZW4iLCJjb3VudCIsIm9wdGlvbnMiLCJyZXN1bHQiLCJ0b2tlblZhbHVlIiwiYnVpbGRGb3JtYXRMb25nRm4iLCJhcmdzIiwid2lkdGgiLCJkYXRlRm9ybWF0cyIsInRpbWVGb3JtYXRzIiwiZGF0ZVRpbWVGb3JtYXRzIiwiZm9ybWF0TG9uZyIsImZvcm1hdFJlbGF0aXZlTG9jYWxlIiwiZm9ybWF0UmVsYXRpdmUiLCJfZGF0ZSIsIl9iYXNlRGF0ZSIsIl9vcHRpb25zIiwiYnVpbGRMb2NhbGl6ZUZuIiwidmFsdWUiLCJjb250ZXh0IiwidmFsdWVzQXJyYXkiLCJkZWZhdWx0V2lkdGgiLCJpbmRleCIsImVyYVZhbHVlcyIsInF1YXJ0ZXJWYWx1ZXMiLCJtb250aFZhbHVlcyIsImRheVZhbHVlcyIsImRheVBlcmlvZFZhbHVlcyIsImZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMiLCJvcmRpbmFsTnVtYmVyIiwiZGlydHlOdW1iZXIiLCJudW1iZXIiLCJyZW0xMDAiLCJsb2NhbGl6ZSIsInF1YXJ0ZXIiLCJidWlsZE1hdGNoRm4iLCJzdHJpbmciLCJtYXRjaFBhdHRlcm4iLCJtYXRjaFJlc3VsdCIsIm1hdGNoZWRTdHJpbmciLCJwYXJzZVBhdHRlcm5zIiwia2V5IiwiZmluZEluZGV4IiwicGF0dGVybiIsImZpbmRLZXkiLCJyZXN0Iiwib2JqZWN0IiwicHJlZGljYXRlIiwiYXJyYXkiLCJidWlsZE1hdGNoUGF0dGVybkZuIiwicGFyc2VSZXN1bHQiLCJtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuIiwicGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiIsIm1hdGNoRXJhUGF0dGVybnMiLCJwYXJzZUVyYVBhdHRlcm5zIiwibWF0Y2hRdWFydGVyUGF0dGVybnMiLCJwYXJzZVF1YXJ0ZXJQYXR0ZXJucyIsIm1hdGNoTW9udGhQYXR0ZXJucyIsInBhcnNlTW9udGhQYXR0ZXJucyIsIm1hdGNoRGF5UGF0dGVybnMiLCJwYXJzZURheVBhdHRlcm5zIiwibWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyIsInBhcnNlRGF5UGVyaW9kUGF0dGVybnMiLCJtYXRjaCIsImVuVVMiLCJkZWZhdWx0T3B0aW9ucyIsImdldERlZmF1bHRPcHRpb25zIiwic2V0RGVmYXVsdE9wdGlvbnMiLCJuZXdPcHRpb25zIiwiZGF5c0luV2VlayIsImRheXNJblllYXIiLCJtaWxsaXNlY29uZHNJbldlZWsiLCJtaWxsaXNlY29uZHNJbkRheSIsIm1pbGxpc2Vjb25kc0luTWludXRlIiwibWlsbGlzZWNvbmRzSW5Ib3VyIiwibWlsbGlzZWNvbmRzSW5TZWNvbmQiLCJtaW51dGVzSW5ZZWFyIiwibWludXRlc0luTW9udGgiLCJtaW51dGVzSW5EYXkiLCJtaW51dGVzSW5Ib3VyIiwibW9udGhzSW5RdWFydGVyIiwibW9udGhzSW5ZZWFyIiwicXVhcnRlcnNJblllYXIiLCJzZWNvbmRzSW5Ib3VyIiwic2Vjb25kc0luTWludXRlIiwic2Vjb25kc0luRGF5Iiwic2Vjb25kc0luV2VlayIsInNlY29uZHNJblllYXIiLCJzZWNvbmRzSW5Nb250aCIsInNlY29uZHNJblF1YXJ0ZXIiLCJ0b0RhdGUiLCJhcmd1bWVudCIsImFyZ1N0ciIsInN0YXJ0T2ZEYXkiLCJkYXRlIiwiZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyIsInV0Y0RhdGUiLCJkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMiLCJkYXRlTGVmdCIsImRhdGVSaWdodCIsInN0YXJ0T2ZEYXlMZWZ0Iiwic3RhcnRPZkRheVJpZ2h0IiwidGltZXN0YW1wTGVmdCIsInRpbWVzdGFtcFJpZ2h0IiwiY29uc3RydWN0RnJvbSIsInN0YXJ0T2ZZZWFyIiwiY2xlYW5EYXRlIiwiZ2V0RGF5T2ZZZWFyIiwic3RhcnRPZldlZWsiLCJfYSIsIl9iIiwiX2MiLCJfZCIsIndlZWtTdGFydHNPbiIsImRheSIsImRpZmYiLCJzdGFydE9mSVNPV2VlayIsImdldElTT1dlZWtZZWFyIiwieWVhciIsImZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIiLCJzdGFydE9mTmV4dFllYXIiLCJmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyIiwic3RhcnRPZlRoaXNZZWFyIiwic3RhcnRPZklTT1dlZWtZZWFyIiwiZm91cnRoT2ZKYW51YXJ5IiwiZ2V0SVNPV2VlayIsImdldFdlZWtZZWFyIiwiZmlyc3RXZWVrQ29udGFpbnNEYXRlIiwiZmlyc3RXZWVrT2ZOZXh0WWVhciIsImZpcnN0V2Vla09mVGhpc1llYXIiLCJzdGFydE9mV2Vla1llYXIiLCJmaXJzdFdlZWsiLCJnZXRXZWVrIiwiYWRkTGVhZGluZ1plcm9zIiwidGFyZ2V0TGVuZ3RoIiwic2lnbiIsIm91dHB1dCIsImxpZ2h0Rm9ybWF0dGVycyIsInNpZ25lZFllYXIiLCJtb250aCIsImRheVBlcmlvZEVudW1WYWx1ZSIsIm51bWJlck9mRGlnaXRzIiwibWlsbGlzZWNvbmRzIiwiZnJhY3Rpb25hbFNlY29uZHMiLCJkYXlQZXJpb2RFbnVtIiwiZm9ybWF0dGVycyIsImVyYSIsInNpZ25lZFdlZWtZZWFyIiwid2Vla1llYXIiLCJ0d29EaWdpdFllYXIiLCJpc29XZWVrWWVhciIsIndlZWsiLCJpc29XZWVrIiwiZGF5T2ZZZWFyIiwiZGF5T2ZXZWVrIiwibG9jYWxEYXlPZldlZWsiLCJpc29EYXlPZldlZWsiLCJob3VycyIsIl9sb2NhbGl6ZSIsInRpbWV6b25lT2Zmc2V0IiwiZm9ybWF0VGltZXpvbmVXaXRoT3B0aW9uYWxNaW51dGVzIiwiZm9ybWF0VGltZXpvbmUiLCJmb3JtYXRUaW1lem9uZVNob3J0IiwidGltZXN0YW1wIiwib2Zmc2V0IiwiZGVsaW1pdGVyIiwiYWJzT2Zmc2V0IiwibWludXRlcyIsImRhdGVMb25nRm9ybWF0dGVyIiwidGltZUxvbmdGb3JtYXR0ZXIiLCJkYXRlVGltZUxvbmdGb3JtYXR0ZXIiLCJkYXRlUGF0dGVybiIsInRpbWVQYXR0ZXJuIiwiZGF0ZVRpbWVGb3JtYXQiLCJsb25nRm9ybWF0dGVycyIsImRheU9mWWVhclRva2VuUkUiLCJ3ZWVrWWVhclRva2VuUkUiLCJ0aHJvd1Rva2VucyIsImlzUHJvdGVjdGVkRGF5T2ZZZWFyVG9rZW4iLCJpc1Byb3RlY3RlZFdlZWtZZWFyVG9rZW4iLCJ3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yIiwiZm9ybWF0IiwiaW5wdXQiLCJfbWVzc2FnZSIsIm1lc3NhZ2UiLCJzdWJqZWN0IiwiaXNEYXRlIiwiaXNWYWxpZCIsImZvcm1hdHRpbmdUb2tlbnNSZWdFeHAiLCJsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCIsImVzY2FwZWRTdHJpbmdSZWdFeHAiLCJkb3VibGVRdW90ZVJlZ0V4cCIsInVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwIiwiZm9ybWF0U3RyIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwib3JpZ2luYWxEYXRlIiwicGFydHMiLCJzdWJzdHJpbmciLCJmaXJzdENoYXJhY3RlciIsImxvbmdGb3JtYXR0ZXIiLCJjbGVhbkVzY2FwZWRTdHJpbmciLCJmb3JtYXR0ZXJPcHRpb25zIiwicGFydCIsImZvcm1hdHRlciIsIm1hdGNoZWQiXSwibWFwcGluZ3MiOiJBQUFBLE1BQU1BLElBQXVCO0FBQUEsRUFDM0Isa0JBQWtCO0FBQUEsSUFDaEIsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNSO0FBQUEsRUFFRCxhQUFhO0FBQUEsRUFFYixrQkFBa0I7QUFBQSxJQUNoQixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUQsVUFBVTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVELGFBQWE7QUFBQSxJQUNYLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNSO0FBQUEsRUFFRCxRQUFRO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUQsT0FBTztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVELGFBQWE7QUFBQSxJQUNYLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNSO0FBQUEsRUFFRCxRQUFRO0FBQUEsSUFDTixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUQsY0FBYztBQUFBLElBQ1osS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVELFNBQVM7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNSO0FBQUEsRUFFRCxhQUFhO0FBQUEsSUFDWCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDUjtBQUFBLEVBRUQsUUFBUTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUVELFlBQVk7QUFBQSxJQUNWLEtBQUs7QUFBQSxJQUNMLE9BQU87QUFBQSxFQUNSO0FBQUEsRUFFRCxjQUFjO0FBQUEsSUFDWixLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsRUFDUjtBQUNILEdBRWFDLElBQWlCLENBQUNDLEdBQU9DLEdBQU9DLE1BQVk7QUFDdkQsTUFBSUM7QUFFSixRQUFNQyxJQUFhTixFQUFxQkUsQ0FBSztBQVM3QyxTQVJJLE9BQU9JLEtBQWUsV0FDeEJELElBQVNDLElBQ0FILE1BQVUsSUFDbkJFLElBQVNDLEVBQVcsTUFFcEJELElBQVNDLEVBQVcsTUFBTSxRQUFRLGFBQWFILEVBQU0sVUFBVSxHQUc3REMsS0FBQSxRQUFBQSxFQUFTLFlBQ1BBLEVBQVEsY0FBY0EsRUFBUSxhQUFhLElBQ3RDLFFBQVFDLElBRVJBLElBQVMsU0FJYkE7QUFDVDtBQ3BHTyxTQUFTRSxFQUFrQkMsR0FBTTtBQUN0QyxTQUFPLENBQUNKLElBQVUsT0FBTztBQUV2QixVQUFNSyxJQUFRTCxFQUFRLFFBQVEsT0FBT0EsRUFBUSxLQUFLLElBQUlJLEVBQUs7QUFFM0QsV0FEZUEsRUFBSyxRQUFRQyxDQUFLLEtBQUtELEVBQUssUUFBUUEsRUFBSyxZQUFZO0FBQUEsRUFFckU7QUFDSDtBQ0xBLE1BQU1FLElBQWM7QUFBQSxFQUNsQixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQ1QsR0FFTUMsSUFBYztBQUFBLEVBQ2xCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFDVCxHQUVNQyxJQUFrQjtBQUFBLEVBQ3RCLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFDVCxHQUVhQyxJQUFhO0FBQUEsRUFDeEIsTUFBTU4sRUFBa0I7QUFBQSxJQUN0QixTQUFTRztBQUFBLElBQ1QsY0FBYztBQUFBLEVBQ2xCLENBQUc7QUFBQSxFQUVELE1BQU1ILEVBQWtCO0FBQUEsSUFDdEIsU0FBU0k7QUFBQSxJQUNULGNBQWM7QUFBQSxFQUNsQixDQUFHO0FBQUEsRUFFRCxVQUFVSixFQUFrQjtBQUFBLElBQzFCLFNBQVNLO0FBQUEsSUFDVCxjQUFjO0FBQUEsRUFDbEIsQ0FBRztBQUNILEdDdENNRSxJQUF1QjtBQUFBLEVBQzNCLFVBQVU7QUFBQSxFQUNWLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLFVBQVU7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLE9BQU87QUFDVCxHQUVhQyxJQUFpQixDQUFDYixHQUFPYyxHQUFPQyxHQUFXQyxNQUN0REosRUFBcUJaLENBQUs7QUMrQnJCLFNBQVNpQixFQUFnQlgsR0FBTTtBQUNwQyxTQUFPLENBQUNZLEdBQU9oQixNQUFZO0FBQ3pCLFVBQU1pQixJQUFVakIsS0FBQSxRQUFBQSxFQUFTLFVBQVUsT0FBT0EsRUFBUSxPQUFPLElBQUk7QUFFN0QsUUFBSWtCO0FBQ0osUUFBSUQsTUFBWSxnQkFBZ0JiLEVBQUssa0JBQWtCO0FBQ3JELFlBQU1lLElBQWVmLEVBQUssMEJBQTBCQSxFQUFLLGNBQ25EQyxJQUFRTCxLQUFBLFFBQUFBLEVBQVMsUUFBUSxPQUFPQSxFQUFRLEtBQUssSUFBSW1CO0FBRXZELE1BQUFELElBQ0VkLEVBQUssaUJBQWlCQyxDQUFLLEtBQUtELEVBQUssaUJBQWlCZSxDQUFZO0FBQUEsSUFDMUUsT0FBVztBQUNMLFlBQU1BLElBQWVmLEVBQUssY0FDcEJDLElBQVFMLEtBQUEsUUFBQUEsRUFBUyxRQUFRLE9BQU9BLEVBQVEsS0FBSyxJQUFJSSxFQUFLO0FBRTVELE1BQUFjLElBQWNkLEVBQUssT0FBT0MsQ0FBSyxLQUFLRCxFQUFLLE9BQU9lLENBQVk7QUFBQSxJQUNsRTtBQUNJLFVBQU1DLElBQVFoQixFQUFLLG1CQUFtQkEsRUFBSyxpQkFBaUJZLENBQUssSUFBSUE7QUFHckUsV0FBT0UsRUFBWUUsQ0FBSztBQUFBLEVBQ3pCO0FBQ0g7QUM3REEsTUFBTUMsSUFBWTtBQUFBLEVBQ2hCLFFBQVEsQ0FBQyxLQUFLLEdBQUc7QUFBQSxFQUNqQixhQUFhLENBQUMsTUFBTSxJQUFJO0FBQUEsRUFDeEIsTUFBTSxDQUFDLGlCQUFpQixhQUFhO0FBQ3ZDLEdBRU1DLEtBQWdCO0FBQUEsRUFDcEIsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxFQUMzQixhQUFhLENBQUMsTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUFBLEVBQ3BDLE1BQU0sQ0FBQyxlQUFlLGVBQWUsZUFBZSxhQUFhO0FBQ25FLEdBTU1DLEtBQWM7QUFBQSxFQUNsQixRQUFRLENBQUMsS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxFQUNuRSxhQUFhO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRDtBQUFBLEVBRUQsTUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFDSCxHQUVNQyxLQUFZO0FBQUEsRUFDaEIsUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFBQSxFQUMxQyxPQUFPLENBQUMsTUFBTSxNQUFNLE1BQU0sTUFBTSxNQUFNLE1BQU0sSUFBSTtBQUFBLEVBQ2hELGFBQWEsQ0FBQyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLO0FBQUEsRUFDN0QsTUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNEO0FBQ0gsR0FFTUMsS0FBa0I7QUFBQSxFQUN0QixRQUFRO0FBQUEsSUFDTixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDUjtBQUFBLEVBQ0QsYUFBYTtBQUFBLElBQ1gsSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUNELE1BQU07QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxFQUNSO0FBQ0gsR0FFTUMsS0FBNEI7QUFBQSxFQUNoQyxRQUFRO0FBQUEsSUFDTixJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDUjtBQUFBLEVBQ0QsYUFBYTtBQUFBLElBQ1gsSUFBSTtBQUFBLElBQ0osSUFBSTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLEVBQ1I7QUFBQSxFQUNELE1BQU07QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLElBQUk7QUFBQSxJQUNKLFVBQVU7QUFBQSxJQUNWLE1BQU07QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFNBQVM7QUFBQSxJQUNULE9BQU87QUFBQSxFQUNSO0FBQ0gsR0FFTUMsS0FBZ0IsQ0FBQ0MsR0FBYWQsTUFBYTtBQUMvQyxRQUFNZSxJQUFTLE9BQU9ELENBQVcsR0FTM0JFLElBQVNELElBQVM7QUFDeEIsTUFBSUMsSUFBUyxNQUFNQSxJQUFTO0FBQzFCLFlBQVFBLElBQVMsSUFBRTtBQUFBLE1BQ2pCLEtBQUs7QUFDSCxlQUFPRCxJQUFTO0FBQUEsTUFDbEIsS0FBSztBQUNILGVBQU9BLElBQVM7QUFBQSxNQUNsQixLQUFLO0FBQ0gsZUFBT0EsSUFBUztBQUFBLElBQ3hCO0FBRUUsU0FBT0EsSUFBUztBQUNsQixHQUVhRSxLQUFXO0FBQUEsRUFDdEIsZUFBQUo7QUFBQSxFQUVBLEtBQUtaLEVBQWdCO0FBQUEsSUFDbkIsUUFBUU07QUFBQSxJQUNSLGNBQWM7QUFBQSxFQUNsQixDQUFHO0FBQUEsRUFFRCxTQUFTTixFQUFnQjtBQUFBLElBQ3ZCLFFBQVFPO0FBQUEsSUFDUixjQUFjO0FBQUEsSUFDZCxrQkFBa0IsQ0FBQ1UsTUFBWUEsSUFBVTtBQUFBLEVBQzdDLENBQUc7QUFBQSxFQUVELE9BQU9qQixFQUFnQjtBQUFBLElBQ3JCLFFBQVFRO0FBQUEsSUFDUixjQUFjO0FBQUEsRUFDbEIsQ0FBRztBQUFBLEVBRUQsS0FBS1IsRUFBZ0I7QUFBQSxJQUNuQixRQUFRUztBQUFBLElBQ1IsY0FBYztBQUFBLEVBQ2xCLENBQUc7QUFBQSxFQUVELFdBQVdULEVBQWdCO0FBQUEsSUFDekIsUUFBUVU7QUFBQSxJQUNSLGNBQWM7QUFBQSxJQUNkLGtCQUFrQkM7QUFBQSxJQUNsQix3QkFBd0I7QUFBQSxFQUM1QixDQUFHO0FBQ0g7QUMxTE8sU0FBU08sRUFBYTdCLEdBQU07QUFDakMsU0FBTyxDQUFDOEIsR0FBUWxDLElBQVUsT0FBTztBQUMvQixVQUFNSyxJQUFRTCxFQUFRLE9BRWhCbUMsSUFDSDlCLEtBQVNELEVBQUssY0FBY0MsQ0FBSyxLQUNsQ0QsRUFBSyxjQUFjQSxFQUFLLGlCQUFpQixHQUNyQ2dDLElBQWNGLEVBQU8sTUFBTUMsQ0FBWTtBQUU3QyxRQUFJLENBQUNDO0FBQ0gsYUFBTztBQUVULFVBQU1DLElBQWdCRCxFQUFZLENBQUMsR0FFN0JFLElBQ0hqQyxLQUFTRCxFQUFLLGNBQWNDLENBQUssS0FDbENELEVBQUssY0FBY0EsRUFBSyxpQkFBaUIsR0FFckNtQyxJQUFNLE1BQU0sUUFBUUQsQ0FBYSxJQUNuQ0UsR0FBVUYsR0FBZSxDQUFDRyxNQUFZQSxFQUFRLEtBQUtKLENBQWEsQ0FBQztBQUFBO0FBQUEsTUFFakVLLEdBQVFKLEdBQWUsQ0FBQ0csTUFBWUEsRUFBUSxLQUFLSixDQUFhLENBQUM7QUFBQTtBQUVuRSxRQUFJckI7QUFFSixJQUFBQSxJQUFRWixFQUFLLGdCQUFnQkEsRUFBSyxjQUFjbUMsQ0FBRyxJQUFJQSxHQUN2RHZCLElBQVFoQixFQUFRO0FBQUE7QUFBQSxNQUVaQSxFQUFRLGNBQWNnQixDQUFLO0FBQUEsUUFDM0JBO0FBRUosVUFBTTJCLElBQU9ULEVBQU8sTUFBTUcsRUFBYyxNQUFNO0FBRTlDLFdBQU8sRUFBRSxPQUFBckIsR0FBTyxNQUFBMkIsRUFBTTtBQUFBLEVBQ3ZCO0FBQ0g7QUFFQSxTQUFTRCxHQUFRRSxHQUFRQyxHQUFXO0FBQ2xDLGFBQVdOLEtBQU9LO0FBQ2hCLFFBQ0UsT0FBTyxVQUFVLGVBQWUsS0FBS0EsR0FBUUwsQ0FBRyxLQUNoRE0sRUFBVUQsRUFBT0wsQ0FBRyxDQUFDO0FBRXJCLGFBQU9BO0FBSWI7QUFFQSxTQUFTQyxHQUFVTSxHQUFPRCxHQUFXO0FBQ25DLFdBQVNOLElBQU0sR0FBR0EsSUFBTU8sRUFBTSxRQUFRUDtBQUNwQyxRQUFJTSxFQUFVQyxFQUFNUCxDQUFHLENBQUM7QUFDdEIsYUFBT0E7QUFJYjtBQ3hETyxTQUFTUSxHQUFvQjNDLEdBQU07QUFDeEMsU0FBTyxDQUFDOEIsR0FBUWxDLElBQVUsT0FBTztBQUMvQixVQUFNb0MsSUFBY0YsRUFBTyxNQUFNOUIsRUFBSyxZQUFZO0FBQ2xELFFBQUksQ0FBQ2dDLEVBQWEsUUFBTztBQUN6QixVQUFNQyxJQUFnQkQsRUFBWSxDQUFDLEdBRTdCWSxJQUFjZCxFQUFPLE1BQU05QixFQUFLLFlBQVk7QUFDbEQsUUFBSSxDQUFDNEMsRUFBYSxRQUFPO0FBQ3pCLFFBQUloQyxJQUFRWixFQUFLLGdCQUNiQSxFQUFLLGNBQWM0QyxFQUFZLENBQUMsQ0FBQyxJQUNqQ0EsRUFBWSxDQUFDO0FBR2pCLElBQUFoQyxJQUFRaEIsRUFBUSxnQkFBZ0JBLEVBQVEsY0FBY2dCLENBQUssSUFBSUE7QUFFL0QsVUFBTTJCLElBQU9ULEVBQU8sTUFBTUcsRUFBYyxNQUFNO0FBRTlDLFdBQU8sRUFBRSxPQUFBckIsR0FBTyxNQUFBMkIsRUFBTTtBQUFBLEVBQ3ZCO0FBQ0g7QUNoQkEsTUFBTU0sS0FBNEIseUJBQzVCQyxLQUE0QixRQUU1QkMsS0FBbUI7QUFBQSxFQUN2QixRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQ1IsR0FDTUMsS0FBbUI7QUFBQSxFQUN2QixLQUFLLENBQUMsT0FBTyxTQUFTO0FBQ3hCLEdBRU1DLEtBQXVCO0FBQUEsRUFDM0IsUUFBUTtBQUFBLEVBQ1IsYUFBYTtBQUFBLEVBQ2IsTUFBTTtBQUNSLEdBQ01DLEtBQXVCO0FBQUEsRUFDM0IsS0FBSyxDQUFDLE1BQU0sTUFBTSxNQUFNLElBQUk7QUFDOUIsR0FFTUMsS0FBcUI7QUFBQSxFQUN6QixRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixNQUFNO0FBQ1IsR0FDTUMsS0FBcUI7QUFBQSxFQUN6QixRQUFRO0FBQUEsSUFDTjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRDtBQUFBLEVBRUQsS0FBSztBQUFBLElBQ0g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFDSCxHQUVNQyxLQUFtQjtBQUFBLEVBQ3ZCLFFBQVE7QUFBQSxFQUNSLE9BQU87QUFBQSxFQUNQLGFBQWE7QUFBQSxFQUNiLE1BQU07QUFDUixHQUNNQyxLQUFtQjtBQUFBLEVBQ3ZCLFFBQVEsQ0FBQyxPQUFPLE9BQU8sT0FBTyxPQUFPLE9BQU8sT0FBTyxLQUFLO0FBQUEsRUFDeEQsS0FBSyxDQUFDLFFBQVEsT0FBTyxRQUFRLE9BQU8sUUFBUSxPQUFPLE1BQU07QUFDM0QsR0FFTUMsS0FBeUI7QUFBQSxFQUM3QixRQUFRO0FBQUEsRUFDUixLQUFLO0FBQ1AsR0FDTUMsS0FBeUI7QUFBQSxFQUM3QixLQUFLO0FBQUEsSUFDSCxJQUFJO0FBQUEsSUFDSixJQUFJO0FBQUEsSUFDSixVQUFVO0FBQUEsSUFDVixNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDUjtBQUNILEdBRWFDLEtBQVE7QUFBQSxFQUNuQixlQUFlZCxHQUFvQjtBQUFBLElBQ2pDLGNBQWNFO0FBQUEsSUFDZCxjQUFjQztBQUFBLElBQ2QsZUFBZSxDQUFDbEMsTUFBVSxTQUFTQSxHQUFPLEVBQUU7QUFBQSxFQUNoRCxDQUFHO0FBQUEsRUFFRCxLQUFLaUIsRUFBYTtBQUFBLElBQ2hCLGVBQWVrQjtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZUM7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLEVBQ3ZCLENBQUc7QUFBQSxFQUVELFNBQVNuQixFQUFhO0FBQUEsSUFDcEIsZUFBZW9CO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxJQUNuQixlQUFlQztBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZSxDQUFDbEMsTUFBVUEsSUFBUTtBQUFBLEVBQ3RDLENBQUc7QUFBQSxFQUVELE9BQU9hLEVBQWE7QUFBQSxJQUNsQixlQUFlc0I7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLElBQ25CLGVBQWVDO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxFQUN2QixDQUFHO0FBQUEsRUFFRCxLQUFLdkIsRUFBYTtBQUFBLElBQ2hCLGVBQWV3QjtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsZUFBZUM7QUFBQSxJQUNmLG1CQUFtQjtBQUFBLEVBQ3ZCLENBQUc7QUFBQSxFQUVELFdBQVd6QixFQUFhO0FBQUEsSUFDdEIsZUFBZTBCO0FBQUEsSUFDZixtQkFBbUI7QUFBQSxJQUNuQixlQUFlQztBQUFBLElBQ2YsbUJBQW1CO0FBQUEsRUFDdkIsQ0FBRztBQUNILEdDckhhRSxLQUFPO0FBQUEsRUFDbEIsTUFBTTtBQUFBLEVBQ04sZ0JBQWdCakU7QUFBQSxFQUNoQixZQUFZWTtBQUFBLEVBQ1osZ0JBQWdCRTtBQUFBLEVBQ2hCLFVBQVVvQjtBQUFBLEVBQ1YsT0FBTzhCO0FBQUEsRUFDUCxTQUFTO0FBQUEsSUFDUCxjQUFjO0FBQUEsSUFDZCx1QkFBdUI7QUFBQSxFQUN4QjtBQUNIO0FDekJBLElBQUlFLElBQWlCLENBQUU7QUFFaEIsU0FBU0MsSUFBb0I7QUFDbEMsU0FBT0Q7QUFDVDtBQUVPLFNBQVNFLEdBQWtCQyxHQUFZO0FBQzVDLEVBQUFILElBQWlCRztBQUNuQjtBQ2NZLE1BQUNDLEtBQWEsR0FlYkMsS0FBYSxVQXVDYkMsSUFBcUIsUUFPckJDLEtBQW9CLE9BT3BCQyxLQUF1QixLQU92QkMsS0FBcUIsTUFPckJDLEtBQXVCLEtBT3ZCQyxLQUFnQixRQU9oQkMsS0FBaUIsT0FPakJDLEtBQWUsTUFPZkMsS0FBZ0IsSUFPaEJDLEtBQWtCLEdBT2xCQyxLQUFlLElBT2ZDLEtBQWlCLEdBT2pCQyxLQUFnQixNQU9oQkMsS0FBa0IsSUFPbEJDLElBQWVGLEtBQWdCLElBTy9CRyxLQUFnQkQsSUFBZSxHQU8vQkUsS0FBZ0JGLElBQWVmLElBTy9Ca0IsS0FBaUJELEtBQWdCLElBT2pDRSxLQUFtQkQsS0FBaUI7QUMxSzFDLFNBQVNFLEVBQU9DLEdBQVU7QUFDL0IsUUFBTUMsSUFBUyxPQUFPLFVBQVUsU0FBUyxLQUFLRCxDQUFRO0FBR3RELFNBQ0VBLGFBQW9CLFFBQ25CLE9BQU9BLEtBQWEsWUFBWUMsTUFBVyxrQkFHckMsSUFBSUQsRUFBUyxZQUFZLENBQUNBLENBQVEsSUFFekMsT0FBT0EsS0FBYSxZQUNwQkMsTUFBVyxxQkFDWCxPQUFPRCxLQUFhLFlBQ3BCQyxNQUFXLG9CQUdKLElBQUksS0FBS0QsQ0FBUSxJQUdqQixvQkFBSSxLQUFLLEdBQUc7QUFFdkI7QUNoQ08sU0FBU0UsRUFBV0MsR0FBTTtBQUMvQixRQUFNaEYsSUFBUTRFLEVBQU9JLENBQUk7QUFDekIsU0FBQWhGLEVBQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQ2xCQTtBQUNUO0FDYk8sU0FBU2lGLEVBQWdDRCxHQUFNO0FBQ3BELFFBQU1oRixJQUFRNEUsRUFBT0ksQ0FBSSxHQUNuQkUsSUFBVSxJQUFJO0FBQUEsSUFDbEIsS0FBSztBQUFBLE1BQ0hsRixFQUFNLFlBQWE7QUFBQSxNQUNuQkEsRUFBTSxTQUFVO0FBQUEsTUFDaEJBLEVBQU0sUUFBUztBQUFBLE1BQ2ZBLEVBQU0sU0FBVTtBQUFBLE1BQ2hCQSxFQUFNLFdBQVk7QUFBQSxNQUNsQkEsRUFBTSxXQUFZO0FBQUEsTUFDbEJBLEVBQU0sZ0JBQWlCO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0QsU0FBQWtGLEVBQVEsZUFBZWxGLEVBQU0sYUFBYSxHQUNuQyxDQUFDZ0YsSUFBTyxDQUFDRTtBQUNsQjtBQ1FPLFNBQVNDLEdBQXlCQyxHQUFVQyxHQUFXO0FBQzVELFFBQU1DLElBQWlCUCxFQUFXSyxDQUFRLEdBQ3BDRyxJQUFrQlIsRUFBV00sQ0FBUyxHQUV0Q0csSUFDSixDQUFDRixJQUFpQkwsRUFBZ0NLLENBQWMsR0FDNURHLElBQ0osQ0FBQ0YsSUFBa0JOLEVBQWdDTSxDQUFlO0FBS3BFLFNBQU8sS0FBSyxPQUFPQyxJQUFnQkMsS0FBa0IvQixFQUFpQjtBQUN4RTtBQ25CTyxTQUFTZ0MsRUFBY1YsR0FBTTVFLEdBQU87QUFDekMsU0FBSTRFLGFBQWdCLE9BQ1gsSUFBSUEsRUFBSyxZQUFZNUUsQ0FBSyxJQUUxQixJQUFJLEtBQUtBLENBQUs7QUFFekI7QUNiTyxTQUFTdUYsR0FBWVgsR0FBTTtBQUNoQyxRQUFNWSxJQUFZaEIsRUFBT0ksQ0FBSSxHQUN2QmhGLElBQVEwRixFQUFjVixHQUFNLENBQUM7QUFDbkMsU0FBQWhGLEVBQU0sWUFBWTRGLEVBQVUsWUFBVyxHQUFJLEdBQUcsQ0FBQyxHQUMvQzVGLEVBQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQ2xCQTtBQUNUO0FDTk8sU0FBUzZGLEdBQWFiLEdBQU07QUFDakMsUUFBTWhGLElBQVE0RSxFQUFPSSxDQUFJO0FBR3pCLFNBRmFHLEdBQXlCbkYsR0FBTzJGLEdBQVkzRixDQUFLLENBQUMsSUFDdEM7QUFFM0I7QUNLTyxTQUFTOEYsRUFBWWQsR0FBTTVGLEdBQVM7QW5CakMzQyxNQUFBMkcsR0FBQUMsR0FBQUMsR0FBQUM7QW1Ca0NFLFFBQU0vQyxJQUFpQkMsRUFBbUIsR0FDcEMrQyxLQUNKL0csS0FBQSxnQkFBQUEsRUFBUyxtQkFDVDRHLEtBQUFELElBQUEzRyxLQUFBLGdCQUFBQSxFQUFTLFdBQVQsZ0JBQUEyRyxFQUFpQixZQUFqQixnQkFBQUMsRUFBMEIsaUJBQzFCN0MsRUFBZSxrQkFDZitDLEtBQUFELElBQUE5QyxFQUFlLFdBQWYsZ0JBQUE4QyxFQUF1QixZQUF2QixnQkFBQUMsRUFBZ0MsaUJBQ2hDLEdBRUlsRyxJQUFRNEUsRUFBT0ksQ0FBSSxHQUNuQm9CLElBQU1wRyxFQUFNLE9BQVEsR0FDcEJxRyxLQUFRRCxJQUFNRCxJQUFlLElBQUksS0FBS0MsSUFBTUQ7QUFFbEQsU0FBQW5HLEVBQU0sUUFBUUEsRUFBTSxRQUFPLElBQUtxRyxDQUFJLEdBQ3BDckcsRUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FDbEJBO0FBQ1Q7QUN6Qk8sU0FBU3NHLEVBQWV0QixHQUFNO0FBQ25DLFNBQU9jLEVBQVlkLEdBQU0sRUFBRSxjQUFjLEVBQUMsQ0FBRTtBQUM5QztBQ0FPLFNBQVN1QixFQUFldkIsR0FBTTtBQUNuQyxRQUFNaEYsSUFBUTRFLEVBQU9JLENBQUksR0FDbkJ3QixJQUFPeEcsRUFBTSxZQUFhLEdBRTFCeUcsSUFBNEJmLEVBQWNWLEdBQU0sQ0FBQztBQUN2RCxFQUFBeUIsRUFBMEIsWUFBWUQsSUFBTyxHQUFHLEdBQUcsQ0FBQyxHQUNwREMsRUFBMEIsU0FBUyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzdDLFFBQU1DLElBQWtCSixFQUFlRyxDQUF5QixHQUUxREUsSUFBNEJqQixFQUFjVixHQUFNLENBQUM7QUFDdkQsRUFBQTJCLEVBQTBCLFlBQVlILEdBQU0sR0FBRyxDQUFDLEdBQ2hERyxFQUEwQixTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsUUFBTUMsSUFBa0JOLEVBQWVLLENBQXlCO0FBRWhFLFNBQUkzRyxFQUFNLFFBQU8sS0FBTTBHLEVBQWdCLFFBQU8sSUFDckNGLElBQU8sSUFDTHhHLEVBQU0sUUFBUyxLQUFJNEcsRUFBZ0IsUUFBTyxJQUM1Q0osSUFFQUEsSUFBTztBQUVsQjtBQ3BCTyxTQUFTSyxHQUFtQjdCLEdBQU07QUFDdkMsUUFBTXdCLElBQU9ELEVBQWV2QixDQUFJLEdBQzFCOEIsSUFBa0JwQixFQUFjVixHQUFNLENBQUM7QUFDN0MsU0FBQThCLEVBQWdCLFlBQVlOLEdBQU0sR0FBRyxDQUFDLEdBQ3RDTSxFQUFnQixTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FDNUJSLEVBQWVRLENBQWU7QUFDdkM7QUNQTyxTQUFTQyxHQUFXL0IsR0FBTTtBQUMvQixRQUFNaEYsSUFBUTRFLEVBQU9JLENBQUksR0FDbkJxQixJQUFPLENBQUNDLEVBQWV0RyxDQUFLLElBQUksQ0FBQzZHLEdBQW1CN0csQ0FBSztBQUsvRCxTQUFPLEtBQUssTUFBTXFHLElBQU81QyxDQUFrQixJQUFJO0FBQ2pEO0FDV08sU0FBU3VELEVBQVloQyxHQUFNNUYsR0FBUztBeEI3QzNDLE1BQUEyRyxHQUFBQyxHQUFBQyxHQUFBQztBd0I4Q0UsUUFBTWxHLElBQVE0RSxFQUFPSSxDQUFJLEdBQ25Cd0IsSUFBT3hHLEVBQU0sWUFBYSxHQUUxQm1ELElBQWlCQyxFQUFtQixHQUNwQzZELEtBQ0o3SCxLQUFBLGdCQUFBQSxFQUFTLDRCQUNUNEcsS0FBQUQsSUFBQTNHLEtBQUEsZ0JBQUFBLEVBQVMsV0FBVCxnQkFBQTJHLEVBQWlCLFlBQWpCLGdCQUFBQyxFQUEwQiwwQkFDMUI3QyxFQUFlLDJCQUNmK0MsS0FBQUQsSUFBQTlDLEVBQWUsV0FBZixnQkFBQThDLEVBQXVCLFlBQXZCLGdCQUFBQyxFQUFnQywwQkFDaEMsR0FFSWdCLElBQXNCeEIsRUFBY1YsR0FBTSxDQUFDO0FBQ2pELEVBQUFrQyxFQUFvQixZQUFZVixJQUFPLEdBQUcsR0FBR1MsQ0FBcUIsR0FDbEVDLEVBQW9CLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN2QyxRQUFNUixJQUFrQlosRUFBWW9CLEdBQXFCOUgsQ0FBTyxHQUUxRCtILElBQXNCekIsRUFBY1YsR0FBTSxDQUFDO0FBQ2pELEVBQUFtQyxFQUFvQixZQUFZWCxHQUFNLEdBQUdTLENBQXFCLEdBQzlERSxFQUFvQixTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkMsUUFBTVAsSUFBa0JkLEVBQVlxQixHQUFxQi9ILENBQU87QUFFaEUsU0FBSVksRUFBTSxRQUFPLEtBQU0wRyxFQUFnQixRQUFPLElBQ3JDRixJQUFPLElBQ0x4RyxFQUFNLFFBQVMsS0FBSTRHLEVBQWdCLFFBQU8sSUFDNUNKLElBRUFBLElBQU87QUFFbEI7QUM3Qk8sU0FBU1ksR0FBZ0JwQyxHQUFNNUYsR0FBUztBekI3Qy9DLE1BQUEyRyxHQUFBQyxHQUFBQyxHQUFBQztBeUI4Q0UsUUFBTS9DLElBQWlCQyxFQUFtQixHQUNwQzZELEtBQ0o3SCxLQUFBLGdCQUFBQSxFQUFTLDRCQUNUNEcsS0FBQUQsSUFBQTNHLEtBQUEsZ0JBQUFBLEVBQVMsV0FBVCxnQkFBQTJHLEVBQWlCLFlBQWpCLGdCQUFBQyxFQUEwQiwwQkFDMUI3QyxFQUFlLDJCQUNmK0MsS0FBQUQsSUFBQTlDLEVBQWUsV0FBZixnQkFBQThDLEVBQXVCLFlBQXZCLGdCQUFBQyxFQUFnQywwQkFDaEMsR0FFSU0sSUFBT1EsRUFBWWhDLEdBQU01RixDQUFPLEdBQ2hDaUksSUFBWTNCLEVBQWNWLEdBQU0sQ0FBQztBQUN2QyxTQUFBcUMsRUFBVSxZQUFZYixHQUFNLEdBQUdTLENBQXFCLEdBQ3BESSxFQUFVLFNBQVMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUNmdkIsRUFBWXVCLEdBQVdqSSxDQUFPO0FBRTlDO0FDZE8sU0FBU2tJLEdBQVF0QyxHQUFNNUYsR0FBUztBQUNyQyxRQUFNWSxJQUFRNEUsRUFBT0ksQ0FBSSxHQUNuQnFCLElBQU8sQ0FBQ1AsRUFBWTlGLEdBQU9aLENBQU8sSUFBSSxDQUFDZ0ksR0FBZ0JwSCxHQUFPWixDQUFPO0FBSzNFLFNBQU8sS0FBSyxNQUFNaUgsSUFBTzVDLENBQWtCLElBQUk7QUFDakQ7QUN0RE8sU0FBUzhELEVBQWdCdEcsR0FBUXVHLEdBQWM7QUFDcEQsUUFBTUMsSUFBT3hHLElBQVMsSUFBSSxNQUFNLElBQzFCeUcsSUFBUyxLQUFLLElBQUl6RyxDQUFNLEVBQUUsV0FBVyxTQUFTdUcsR0FBYyxHQUFHO0FBQ3JFLFNBQU9DLElBQU9DO0FBQ2hCO0FDV1ksTUFBQ0MsSUFBa0I7QUFBQTtBQUFBLEVBRTdCLEVBQUUzQyxHQUFNOUYsR0FBTztBQVViLFVBQU0wSSxJQUFhNUMsRUFBSyxZQUFhLEdBRS9Cd0IsSUFBT29CLElBQWEsSUFBSUEsSUFBYSxJQUFJQTtBQUMvQyxXQUFPTCxFQUFnQnJJLE1BQVUsT0FBT3NILElBQU8sTUFBTUEsR0FBTXRILEVBQU0sTUFBTTtBQUFBLEVBQ3hFO0FBQUE7QUFBQSxFQUdELEVBQUU4RixHQUFNOUYsR0FBTztBQUNiLFVBQU0ySSxJQUFRN0MsRUFBSyxTQUFVO0FBQzdCLFdBQU85RixNQUFVLE1BQU0sT0FBTzJJLElBQVEsQ0FBQyxJQUFJTixFQUFnQk0sSUFBUSxHQUFHLENBQUM7QUFBQSxFQUN4RTtBQUFBO0FBQUEsRUFHRCxFQUFFN0MsR0FBTTlGLEdBQU87QUFDYixXQUFPcUksRUFBZ0J2QyxFQUFLLFFBQU8sR0FBSTlGLEVBQU0sTUFBTTtBQUFBLEVBQ3BEO0FBQUE7QUFBQSxFQUdELEVBQUU4RixHQUFNOUYsR0FBTztBQUNiLFVBQU00SSxJQUFxQjlDLEVBQUssU0FBUSxJQUFLLE1BQU0sSUFBSSxPQUFPO0FBRTlELFlBQVE5RixHQUFLO0FBQUEsTUFDWCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBTzRJLEVBQW1CLFlBQWE7QUFBQSxNQUN6QyxLQUFLO0FBQ0gsZUFBT0E7QUFBQSxNQUNULEtBQUs7QUFDSCxlQUFPQSxFQUFtQixDQUFDO0FBQUEsTUFDN0IsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPQSxNQUF1QixPQUFPLFNBQVM7QUFBQSxJQUN0RDtBQUFBLEVBQ0c7QUFBQTtBQUFBLEVBR0QsRUFBRTlDLEdBQU05RixHQUFPO0FBQ2IsV0FBT3FJLEVBQWdCdkMsRUFBSyxTQUFRLElBQUssTUFBTSxJQUFJOUYsRUFBTSxNQUFNO0FBQUEsRUFDaEU7QUFBQTtBQUFBLEVBR0QsRUFBRThGLEdBQU05RixHQUFPO0FBQ2IsV0FBT3FJLEVBQWdCdkMsRUFBSyxTQUFRLEdBQUk5RixFQUFNLE1BQU07QUFBQSxFQUNyRDtBQUFBO0FBQUEsRUFHRCxFQUFFOEYsR0FBTTlGLEdBQU87QUFDYixXQUFPcUksRUFBZ0J2QyxFQUFLLFdBQVUsR0FBSTlGLEVBQU0sTUFBTTtBQUFBLEVBQ3ZEO0FBQUE7QUFBQSxFQUdELEVBQUU4RixHQUFNOUYsR0FBTztBQUNiLFdBQU9xSSxFQUFnQnZDLEVBQUssV0FBVSxHQUFJOUYsRUFBTSxNQUFNO0FBQUEsRUFDdkQ7QUFBQTtBQUFBLEVBR0QsRUFBRThGLEdBQU05RixHQUFPO0FBQ2IsVUFBTTZJLElBQWlCN0ksRUFBTSxRQUN2QjhJLElBQWVoRCxFQUFLLGdCQUFpQixHQUNyQ2lELElBQW9CLEtBQUs7QUFBQSxNQUM3QkQsSUFBZSxLQUFLLElBQUksSUFBSUQsSUFBaUIsQ0FBQztBQUFBLElBQy9DO0FBQ0QsV0FBT1IsRUFBZ0JVLEdBQW1CL0ksRUFBTSxNQUFNO0FBQUEsRUFDdkQ7QUFDSCxHQ25GTWdKLElBQWdCO0FBQUEsRUFDcEIsSUFBSTtBQUFBLEVBQ0osSUFBSTtBQUFBLEVBQ0osVUFBVTtBQUFBLEVBQ1YsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ1gsU0FBUztBQUFBLEVBQ1QsT0FBTztBQUNULEdBZ0RhQyxJQUFhO0FBQUE7QUFBQSxFQUV4QixHQUFHLFNBQVVuRCxHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTWlILElBQU1wRCxFQUFLLFlBQWEsSUFBRyxJQUFJLElBQUk7QUFDekMsWUFBUTlGLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPaUMsRUFBUyxJQUFJaUgsR0FBSyxFQUFFLE9BQU8sY0FBYSxDQUFFO0FBQUEsTUFFbkQsS0FBSztBQUNILGVBQU9qSCxFQUFTLElBQUlpSCxHQUFLLEVBQUUsT0FBTyxTQUFRLENBQUU7QUFBQSxNQUU5QyxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9qSCxFQUFTLElBQUlpSCxHQUFLLEVBQUUsT0FBTyxPQUFNLENBQUU7QUFBQSxJQUNsRDtBQUFBLEVBQ0c7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVcEQsR0FBTTlGLEdBQU9pQyxHQUFVO0FBRWxDLFFBQUlqQyxNQUFVLE1BQU07QUFDbEIsWUFBTTBJLElBQWE1QyxFQUFLLFlBQWEsR0FFL0J3QixJQUFPb0IsSUFBYSxJQUFJQSxJQUFhLElBQUlBO0FBQy9DLGFBQU96RyxFQUFTLGNBQWNxRixHQUFNLEVBQUUsTUFBTSxPQUFNLENBQUU7QUFBQSxJQUMxRDtBQUVJLFdBQU9tQixFQUFnQixFQUFFM0MsR0FBTTlGLENBQUs7QUFBQSxFQUNyQztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU4RixHQUFNOUYsR0FBT2lDLEdBQVUvQixHQUFTO0FBQzNDLFVBQU1pSixJQUFpQnJCLEVBQVloQyxHQUFNNUYsQ0FBTyxHQUUxQ2tKLElBQVdELElBQWlCLElBQUlBLElBQWlCLElBQUlBO0FBRzNELFFBQUluSixNQUFVLE1BQU07QUFDbEIsWUFBTXFKLElBQWVELElBQVc7QUFDaEMsYUFBT2YsRUFBZ0JnQixHQUFjLENBQUM7QUFBQSxJQUM1QztBQUdJLFdBQUlySixNQUFVLE9BQ0xpQyxFQUFTLGNBQWNtSCxHQUFVLEVBQUUsTUFBTSxPQUFNLENBQUUsSUFJbkRmLEVBQWdCZSxHQUFVcEosRUFBTSxNQUFNO0FBQUEsRUFDOUM7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVOEYsR0FBTTlGLEdBQU87QUFDeEIsVUFBTXNKLElBQWNqQyxFQUFldkIsQ0FBSTtBQUd2QyxXQUFPdUMsRUFBZ0JpQixHQUFhdEosRUFBTSxNQUFNO0FBQUEsRUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdELEdBQUcsU0FBVThGLEdBQU05RixHQUFPO0FBQ3hCLFVBQU1zSCxJQUFPeEIsRUFBSyxZQUFhO0FBQy9CLFdBQU91QyxFQUFnQmYsR0FBTXRILEVBQU0sTUFBTTtBQUFBLEVBQzFDO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVThGLEdBQU05RixHQUFPaUMsR0FBVTtBQUNsQyxVQUFNQyxJQUFVLEtBQUssTUFBTTRELEVBQUssU0FBVSxJQUFHLEtBQUssQ0FBQztBQUNuRCxZQUFROUYsR0FBSztBQUFBLE1BRVgsS0FBSztBQUNILGVBQU8sT0FBT2tDLENBQU87QUFBQSxNQUV2QixLQUFLO0FBQ0gsZUFBT21HLEVBQWdCbkcsR0FBUyxDQUFDO0FBQUEsTUFFbkMsS0FBSztBQUNILGVBQU9ELEVBQVMsY0FBY0MsR0FBUyxFQUFFLE1BQU0sVUFBUyxDQUFFO0FBQUEsTUFFNUQsS0FBSztBQUNILGVBQU9ELEVBQVMsUUFBUUMsR0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT0QsRUFBUyxRQUFRQyxHQUFTO0FBQUEsVUFDL0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0QsRUFBUyxRQUFRQyxHQUFTO0FBQUEsVUFDL0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxJQUNUO0FBQUEsRUFDRztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU0RCxHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTUMsSUFBVSxLQUFLLE1BQU00RCxFQUFLLFNBQVUsSUFBRyxLQUFLLENBQUM7QUFDbkQsWUFBUTlGLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFDSCxlQUFPLE9BQU9rQyxDQUFPO0FBQUEsTUFFdkIsS0FBSztBQUNILGVBQU9tRyxFQUFnQm5HLEdBQVMsQ0FBQztBQUFBLE1BRW5DLEtBQUs7QUFDSCxlQUFPRCxFQUFTLGNBQWNDLEdBQVMsRUFBRSxNQUFNLFVBQVMsQ0FBRTtBQUFBLE1BRTVELEtBQUs7QUFDSCxlQUFPRCxFQUFTLFFBQVFDLEdBQVM7QUFBQSxVQUMvQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU9ELEVBQVMsUUFBUUMsR0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9ELEVBQVMsUUFBUUMsR0FBUztBQUFBLFVBQy9CLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsSUFDVDtBQUFBLEVBQ0c7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVNEQsR0FBTTlGLEdBQU9pQyxHQUFVO0FBQ2xDLFVBQU0wRyxJQUFRN0MsRUFBSyxTQUFVO0FBQzdCLFlBQVE5RixHQUFLO0FBQUEsTUFDWCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT3lJLEVBQWdCLEVBQUUzQyxHQUFNOUYsQ0FBSztBQUFBLE1BRXRDLEtBQUs7QUFDSCxlQUFPaUMsRUFBUyxjQUFjMEcsSUFBUSxHQUFHLEVBQUUsTUFBTSxTQUFTO0FBQUEsTUFFNUQsS0FBSztBQUNILGVBQU8xRyxFQUFTLE1BQU0wRyxHQUFPO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPMUcsRUFBUyxNQUFNMEcsR0FBTztBQUFBLFVBQzNCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU8xRyxFQUFTLE1BQU0wRyxHQUFPLEVBQUUsT0FBTyxRQUFRLFNBQVMsY0FBYztBQUFBLElBQzdFO0FBQUEsRUFDRztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU3QyxHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTTBHLElBQVE3QyxFQUFLLFNBQVU7QUFDN0IsWUFBUTlGLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFDSCxlQUFPLE9BQU8ySSxJQUFRLENBQUM7QUFBQSxNQUV6QixLQUFLO0FBQ0gsZUFBT04sRUFBZ0JNLElBQVEsR0FBRyxDQUFDO0FBQUEsTUFFckMsS0FBSztBQUNILGVBQU8xRyxFQUFTLGNBQWMwRyxJQUFRLEdBQUcsRUFBRSxNQUFNLFNBQVM7QUFBQSxNQUU1RCxLQUFLO0FBQ0gsZUFBTzFHLEVBQVMsTUFBTTBHLEdBQU87QUFBQSxVQUMzQixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU8xRyxFQUFTLE1BQU0wRyxHQUFPO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTzFHLEVBQVMsTUFBTTBHLEdBQU8sRUFBRSxPQUFPLFFBQVEsU0FBUyxjQUFjO0FBQUEsSUFDN0U7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVTdDLEdBQU05RixHQUFPaUMsR0FBVS9CLEdBQVM7QUFDM0MsVUFBTXFKLElBQU9uQixHQUFRdEMsR0FBTTVGLENBQU87QUFFbEMsV0FBSUYsTUFBVSxPQUNMaUMsRUFBUyxjQUFjc0gsR0FBTSxFQUFFLE1BQU0sT0FBTSxDQUFFLElBRy9DbEIsRUFBZ0JrQixHQUFNdkosRUFBTSxNQUFNO0FBQUEsRUFDMUM7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVOEYsR0FBTTlGLEdBQU9pQyxHQUFVO0FBQ2xDLFVBQU11SCxJQUFVM0IsR0FBVy9CLENBQUk7QUFFL0IsV0FBSTlGLE1BQVUsT0FDTGlDLEVBQVMsY0FBY3VILEdBQVMsRUFBRSxNQUFNLE9BQU0sQ0FBRSxJQUdsRG5CLEVBQWdCbUIsR0FBU3hKLEVBQU0sTUFBTTtBQUFBLEVBQzdDO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVThGLEdBQU05RixHQUFPaUMsR0FBVTtBQUNsQyxXQUFJakMsTUFBVSxPQUNMaUMsRUFBUyxjQUFjNkQsRUFBSyxRQUFPLEdBQUksRUFBRSxNQUFNLFFBQVEsSUFHekQyQyxFQUFnQixFQUFFM0MsR0FBTTlGLENBQUs7QUFBQSxFQUNyQztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU4RixHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTXdILElBQVk5QyxHQUFhYixDQUFJO0FBRW5DLFdBQUk5RixNQUFVLE9BQ0xpQyxFQUFTLGNBQWN3SCxHQUFXLEVBQUUsTUFBTSxZQUFXLENBQUUsSUFHekRwQixFQUFnQm9CLEdBQVd6SixFQUFNLE1BQU07QUFBQSxFQUMvQztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU4RixHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTXlILElBQVk1RCxFQUFLLE9BQVE7QUFDL0IsWUFBUTlGLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPaUMsRUFBUyxJQUFJeUgsR0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT3pILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU96SCxFQUFTLElBQUl5SCxHQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT3pILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLElBQ1Q7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVTVELEdBQU05RixHQUFPaUMsR0FBVS9CLEdBQVM7QUFDM0MsVUFBTXdKLElBQVk1RCxFQUFLLE9BQVEsR0FDekI2RCxLQUFrQkQsSUFBWXhKLEVBQVEsZUFBZSxLQUFLLEtBQUs7QUFDckUsWUFBUUYsR0FBSztBQUFBLE1BRVgsS0FBSztBQUNILGVBQU8sT0FBTzJKLENBQWM7QUFBQSxNQUU5QixLQUFLO0FBQ0gsZUFBT3RCLEVBQWdCc0IsR0FBZ0IsQ0FBQztBQUFBLE1BRTFDLEtBQUs7QUFDSCxlQUFPMUgsRUFBUyxjQUFjMEgsR0FBZ0IsRUFBRSxNQUFNLE1BQUssQ0FBRTtBQUFBLE1BQy9ELEtBQUs7QUFDSCxlQUFPMUgsRUFBUyxJQUFJeUgsR0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT3pILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU96SCxFQUFTLElBQUl5SCxHQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT3pILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLElBQ1Q7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVTVELEdBQU05RixHQUFPaUMsR0FBVS9CLEdBQVM7QUFDM0MsVUFBTXdKLElBQVk1RCxFQUFLLE9BQVEsR0FDekI2RCxLQUFrQkQsSUFBWXhKLEVBQVEsZUFBZSxLQUFLLEtBQUs7QUFDckUsWUFBUUYsR0FBSztBQUFBLE1BRVgsS0FBSztBQUNILGVBQU8sT0FBTzJKLENBQWM7QUFBQSxNQUU5QixLQUFLO0FBQ0gsZUFBT3RCLEVBQWdCc0IsR0FBZ0IzSixFQUFNLE1BQU07QUFBQSxNQUVyRCxLQUFLO0FBQ0gsZUFBT2lDLEVBQVMsY0FBYzBILEdBQWdCLEVBQUUsTUFBTSxNQUFLLENBQUU7QUFBQSxNQUMvRCxLQUFLO0FBQ0gsZUFBTzFILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU96SCxFQUFTLElBQUl5SCxHQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFDSCxlQUFPekgsRUFBUyxJQUFJeUgsR0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU96SCxFQUFTLElBQUl5SCxHQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxJQUNUO0FBQUEsRUFDRztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU1RCxHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTXlILElBQVk1RCxFQUFLLE9BQVEsR0FDekI4RCxJQUFlRixNQUFjLElBQUksSUFBSUE7QUFDM0MsWUFBUTFKLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFDSCxlQUFPLE9BQU80SixDQUFZO0FBQUEsTUFFNUIsS0FBSztBQUNILGVBQU92QixFQUFnQnVCLEdBQWM1SixFQUFNLE1BQU07QUFBQSxNQUVuRCxLQUFLO0FBQ0gsZUFBT2lDLEVBQVMsY0FBYzJILEdBQWMsRUFBRSxNQUFNLE1BQUssQ0FBRTtBQUFBLE1BRTdELEtBQUs7QUFDSCxlQUFPM0gsRUFBUyxJQUFJeUgsR0FBVztBQUFBLFVBQzdCLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFFSCxLQUFLO0FBQ0gsZUFBT3pILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BRUgsS0FBSztBQUNILGVBQU96SCxFQUFTLElBQUl5SCxHQUFXO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUVILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT3pILEVBQVMsSUFBSXlILEdBQVc7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLElBQ1Q7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVTVELEdBQU05RixHQUFPaUMsR0FBVTtBQUVsQyxVQUFNMkcsSUFEUTlDLEVBQUssU0FBVSxJQUNNLE1BQU0sSUFBSSxPQUFPO0FBRXBELFlBQVE5RixHQUFLO0FBQUEsTUFDWCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT2lDLEVBQVMsVUFBVTJHLEdBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUNILEtBQUs7QUFDSCxlQUFPM0csRUFDSixVQUFVMkcsR0FBb0I7QUFBQSxVQUM3QixPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDVixDQUFBLEVBQ0EsWUFBYTtBQUFBLE1BQ2xCLEtBQUs7QUFDSCxlQUFPM0csRUFBUyxVQUFVMkcsR0FBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPM0csRUFBUyxVQUFVMkcsR0FBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLElBQ1Q7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVTlDLEdBQU05RixHQUFPaUMsR0FBVTtBQUNsQyxVQUFNNEgsSUFBUS9ELEVBQUssU0FBVTtBQUM3QixRQUFJOEM7QUFTSixZQVJJaUIsTUFBVSxLQUNaakIsSUFBcUJJLEVBQWMsT0FDMUJhLE1BQVUsSUFDbkJqQixJQUFxQkksRUFBYyxXQUVuQ0osSUFBcUJpQixJQUFRLE1BQU0sSUFBSSxPQUFPLE1BR3hDN0osR0FBSztBQUFBLE1BQ1gsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU9pQyxFQUFTLFVBQVUyRyxHQUFvQjtBQUFBLFVBQzVDLE9BQU87QUFBQSxVQUNQLFNBQVM7QUFBQSxRQUNuQixDQUFTO0FBQUEsTUFDSCxLQUFLO0FBQ0gsZUFBTzNHLEVBQ0osVUFBVTJHLEdBQW9CO0FBQUEsVUFDN0IsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ1YsQ0FBQSxFQUNBLFlBQWE7QUFBQSxNQUNsQixLQUFLO0FBQ0gsZUFBTzNHLEVBQVMsVUFBVTJHLEdBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUNILEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTzNHLEVBQVMsVUFBVTJHLEdBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxJQUNUO0FBQUEsRUFDRztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU5QyxHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTTRILElBQVEvRCxFQUFLLFNBQVU7QUFDN0IsUUFBSThDO0FBV0osWUFWSWlCLEtBQVMsS0FDWGpCLElBQXFCSSxFQUFjLFVBQzFCYSxLQUFTLEtBQ2xCakIsSUFBcUJJLEVBQWMsWUFDMUJhLEtBQVMsSUFDbEJqQixJQUFxQkksRUFBYyxVQUVuQ0osSUFBcUJJLEVBQWMsT0FHN0JoSixHQUFLO0FBQUEsTUFDWCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT2lDLEVBQVMsVUFBVTJHLEdBQW9CO0FBQUEsVUFDNUMsT0FBTztBQUFBLFVBQ1AsU0FBUztBQUFBLFFBQ25CLENBQVM7QUFBQSxNQUNILEtBQUs7QUFDSCxlQUFPM0csRUFBUyxVQUFVMkcsR0FBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLE1BQ0gsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPM0csRUFBUyxVQUFVMkcsR0FBb0I7QUFBQSxVQUM1QyxPQUFPO0FBQUEsVUFDUCxTQUFTO0FBQUEsUUFDbkIsQ0FBUztBQUFBLElBQ1Q7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVTlDLEdBQU05RixHQUFPaUMsR0FBVTtBQUNsQyxRQUFJakMsTUFBVSxNQUFNO0FBQ2xCLFVBQUk2SixJQUFRL0QsRUFBSyxTQUFRLElBQUs7QUFDOUIsYUFBSStELE1BQVUsTUFBR0EsSUFBUSxLQUNsQjVILEVBQVMsY0FBYzRILEdBQU8sRUFBRSxNQUFNLE9BQU0sQ0FBRTtBQUFBLElBQzNEO0FBRUksV0FBT3BCLEVBQWdCLEVBQUUzQyxHQUFNOUYsQ0FBSztBQUFBLEVBQ3JDO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVThGLEdBQU05RixHQUFPaUMsR0FBVTtBQUNsQyxXQUFJakMsTUFBVSxPQUNMaUMsRUFBUyxjQUFjNkQsRUFBSyxTQUFRLEdBQUksRUFBRSxNQUFNLFFBQVEsSUFHMUQyQyxFQUFnQixFQUFFM0MsR0FBTTlGLENBQUs7QUFBQSxFQUNyQztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU4RixHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsVUFBTTRILElBQVEvRCxFQUFLLFNBQVEsSUFBSztBQUVoQyxXQUFJOUYsTUFBVSxPQUNMaUMsRUFBUyxjQUFjNEgsR0FBTyxFQUFFLE1BQU0sT0FBTSxDQUFFLElBR2hEeEIsRUFBZ0J3QixHQUFPN0osRUFBTSxNQUFNO0FBQUEsRUFDM0M7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVOEYsR0FBTTlGLEdBQU9pQyxHQUFVO0FBQ2xDLFFBQUk0SCxJQUFRL0QsRUFBSyxTQUFVO0FBRzNCLFdBRkkrRCxNQUFVLE1BQUdBLElBQVEsS0FFckI3SixNQUFVLE9BQ0xpQyxFQUFTLGNBQWM0SCxHQUFPLEVBQUUsTUFBTSxPQUFNLENBQUUsSUFHaER4QixFQUFnQndCLEdBQU83SixFQUFNLE1BQU07QUFBQSxFQUMzQztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU4RixHQUFNOUYsR0FBT2lDLEdBQVU7QUFDbEMsV0FBSWpDLE1BQVUsT0FDTGlDLEVBQVMsY0FBYzZELEVBQUssV0FBVSxHQUFJLEVBQUUsTUFBTSxVQUFVLElBRzlEMkMsRUFBZ0IsRUFBRTNDLEdBQU05RixDQUFLO0FBQUEsRUFDckM7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVOEYsR0FBTTlGLEdBQU9pQyxHQUFVO0FBQ2xDLFdBQUlqQyxNQUFVLE9BQ0xpQyxFQUFTLGNBQWM2RCxFQUFLLFdBQVUsR0FBSSxFQUFFLE1BQU0sVUFBVSxJQUc5RDJDLEVBQWdCLEVBQUUzQyxHQUFNOUYsQ0FBSztBQUFBLEVBQ3JDO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVThGLEdBQU05RixHQUFPO0FBQ3hCLFdBQU95SSxFQUFnQixFQUFFM0MsR0FBTTlGLENBQUs7QUFBQSxFQUNyQztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVU4RixHQUFNOUYsR0FBTzhKLEdBQVc7QUFDbkMsVUFBTUMsSUFBaUJqRSxFQUFLLGtCQUFtQjtBQUUvQyxRQUFJaUUsTUFBbUI7QUFDckIsYUFBTztBQUdULFlBQVEvSixHQUFLO0FBQUEsTUFFWCxLQUFLO0FBQ0gsZUFBT2dLLEVBQWtDRCxDQUFjO0FBQUEsTUFLekQsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU9FLEVBQWVGLENBQWM7QUFBQSxNQUt0QyxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQUEsTUFDTDtBQUNFLGVBQU9FLEVBQWVGLEdBQWdCLEdBQUc7QUFBQSxJQUNqRDtBQUFBLEVBQ0c7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVakUsR0FBTTlGLEdBQU84SixHQUFXO0FBQ25DLFVBQU1DLElBQWlCakUsRUFBSyxrQkFBbUI7QUFFL0MsWUFBUTlGLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFDSCxlQUFPZ0ssRUFBa0NELENBQWM7QUFBQSxNQUt6RCxLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZUFBT0UsRUFBZUYsQ0FBYztBQUFBLE1BS3RDLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBT0UsRUFBZUYsR0FBZ0IsR0FBRztBQUFBLElBQ2pEO0FBQUEsRUFDRztBQUFBO0FBQUEsRUFHRCxHQUFHLFNBQVVqRSxHQUFNOUYsR0FBTzhKLEdBQVc7QUFDbkMsVUFBTUMsSUFBaUJqRSxFQUFLLGtCQUFtQjtBQUUvQyxZQUFROUYsR0FBSztBQUFBLE1BRVgsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUNILGVBQU8sUUFBUWtLLEVBQW9CSCxHQUFnQixHQUFHO0FBQUEsTUFFeEQsS0FBSztBQUFBLE1BQ0w7QUFDRSxlQUFPLFFBQVFFLEVBQWVGLEdBQWdCLEdBQUc7QUFBQSxJQUN6RDtBQUFBLEVBQ0c7QUFBQTtBQUFBLEVBR0QsR0FBRyxTQUFVakUsR0FBTTlGLEdBQU84SixHQUFXO0FBQ25DLFVBQU1DLElBQWlCakUsRUFBSyxrQkFBbUI7QUFFL0MsWUFBUTlGLEdBQUs7QUFBQSxNQUVYLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFBQSxNQUNMLEtBQUs7QUFDSCxlQUFPLFFBQVFrSyxFQUFvQkgsR0FBZ0IsR0FBRztBQUFBLE1BRXhELEtBQUs7QUFBQSxNQUNMO0FBQ0UsZUFBTyxRQUFRRSxFQUFlRixHQUFnQixHQUFHO0FBQUEsSUFDekQ7QUFBQSxFQUNHO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVWpFLEdBQU05RixHQUFPOEosR0FBVztBQUNuQyxVQUFNSyxJQUFZLEtBQUssTUFBTXJFLEVBQUssUUFBUyxJQUFHLEdBQUk7QUFDbEQsV0FBT3VDLEVBQWdCOEIsR0FBV25LLEVBQU0sTUFBTTtBQUFBLEVBQy9DO0FBQUE7QUFBQSxFQUdELEdBQUcsU0FBVThGLEdBQU05RixHQUFPOEosR0FBVztBQUNuQyxVQUFNSyxJQUFZckUsRUFBSyxRQUFTO0FBQ2hDLFdBQU91QyxFQUFnQjhCLEdBQVduSyxFQUFNLE1BQU07QUFBQSxFQUMvQztBQUNIO0FBRUEsU0FBU2tLLEVBQW9CRSxHQUFRQyxJQUFZLElBQUk7QUFDbkQsUUFBTTlCLElBQU82QixJQUFTLElBQUksTUFBTSxLQUMxQkUsSUFBWSxLQUFLLElBQUlGLENBQU0sR0FDM0JQLElBQVEsS0FBSyxNQUFNUyxJQUFZLEVBQUUsR0FDakNDLElBQVVELElBQVk7QUFDNUIsU0FBSUMsTUFBWSxJQUNQaEMsSUFBTyxPQUFPc0IsQ0FBSyxJQUVyQnRCLElBQU8sT0FBT3NCLENBQUssSUFBSVEsSUFBWWhDLEVBQWdCa0MsR0FBUyxDQUFDO0FBQ3RFO0FBRUEsU0FBU1AsRUFBa0NJLEdBQVFDLEdBQVc7QUFDNUQsU0FBSUQsSUFBUyxPQUFPLEtBQ0xBLElBQVMsSUFBSSxNQUFNLE9BQ2xCL0IsRUFBZ0IsS0FBSyxJQUFJK0IsQ0FBTSxJQUFJLElBQUksQ0FBQyxJQUVqREgsRUFBZUcsR0FBUUMsQ0FBUztBQUN6QztBQUVBLFNBQVNKLEVBQWVHLEdBQVFDLElBQVksSUFBSTtBQUM5QyxRQUFNOUIsSUFBTzZCLElBQVMsSUFBSSxNQUFNLEtBQzFCRSxJQUFZLEtBQUssSUFBSUYsQ0FBTSxHQUMzQlAsSUFBUXhCLEVBQWdCLEtBQUssTUFBTWlDLElBQVksRUFBRSxHQUFHLENBQUMsR0FDckRDLElBQVVsQyxFQUFnQmlDLElBQVksSUFBSSxDQUFDO0FBQ2pELFNBQU8vQixJQUFPc0IsSUFBUVEsSUFBWUU7QUFDcEM7QUN2d0JBLE1BQU1DLElBQW9CLENBQUM3SCxHQUFTaEMsTUFBZTtBQUNqRCxVQUFRZ0MsR0FBTztBQUFBLElBQ2IsS0FBSztBQUNILGFBQU9oQyxFQUFXLEtBQUssRUFBRSxPQUFPLFFBQU8sQ0FBRTtBQUFBLElBQzNDLEtBQUs7QUFDSCxhQUFPQSxFQUFXLEtBQUssRUFBRSxPQUFPLFNBQVEsQ0FBRTtBQUFBLElBQzVDLEtBQUs7QUFDSCxhQUFPQSxFQUFXLEtBQUssRUFBRSxPQUFPLE9BQU0sQ0FBRTtBQUFBLElBQzFDLEtBQUs7QUFBQSxJQUNMO0FBQ0UsYUFBT0EsRUFBVyxLQUFLLEVBQUUsT0FBTyxPQUFNLENBQUU7QUFBQSxFQUM5QztBQUNBLEdBRU04SixJQUFvQixDQUFDOUgsR0FBU2hDLE1BQWU7QUFDakQsVUFBUWdDLEdBQU87QUFBQSxJQUNiLEtBQUs7QUFDSCxhQUFPaEMsRUFBVyxLQUFLLEVBQUUsT0FBTyxRQUFPLENBQUU7QUFBQSxJQUMzQyxLQUFLO0FBQ0gsYUFBT0EsRUFBVyxLQUFLLEVBQUUsT0FBTyxTQUFRLENBQUU7QUFBQSxJQUM1QyxLQUFLO0FBQ0gsYUFBT0EsRUFBVyxLQUFLLEVBQUUsT0FBTyxPQUFNLENBQUU7QUFBQSxJQUMxQyxLQUFLO0FBQUEsSUFDTDtBQUNFLGFBQU9BLEVBQVcsS0FBSyxFQUFFLE9BQU8sT0FBTSxDQUFFO0FBQUEsRUFDOUM7QUFDQSxHQUVNK0osS0FBd0IsQ0FBQy9ILEdBQVNoQyxNQUFlO0FBQ3JELFFBQU0yQixJQUFjSyxFQUFRLE1BQU0sV0FBVyxLQUFLLENBQUUsR0FDOUNnSSxJQUFjckksRUFBWSxDQUFDLEdBQzNCc0ksSUFBY3RJLEVBQVksQ0FBQztBQUVqQyxNQUFJLENBQUNzSTtBQUNILFdBQU9KLEVBQWtCN0gsR0FBU2hDLENBQVU7QUFHOUMsTUFBSWtLO0FBRUosVUFBUUYsR0FBVztBQUFBLElBQ2pCLEtBQUs7QUFDSCxNQUFBRSxJQUFpQmxLLEVBQVcsU0FBUyxFQUFFLE9BQU8sUUFBTyxDQUFFO0FBQ3ZEO0FBQUEsSUFDRixLQUFLO0FBQ0gsTUFBQWtLLElBQWlCbEssRUFBVyxTQUFTLEVBQUUsT0FBTyxTQUFRLENBQUU7QUFDeEQ7QUFBQSxJQUNGLEtBQUs7QUFDSCxNQUFBa0ssSUFBaUJsSyxFQUFXLFNBQVMsRUFBRSxPQUFPLE9BQU0sQ0FBRTtBQUN0RDtBQUFBLElBQ0YsS0FBSztBQUFBLElBQ0w7QUFDRSxNQUFBa0ssSUFBaUJsSyxFQUFXLFNBQVMsRUFBRSxPQUFPLE9BQU0sQ0FBRTtBQUN0RDtBQUFBLEVBQ047QUFFRSxTQUFPa0ssRUFDSixRQUFRLFlBQVlMLEVBQWtCRyxHQUFhaEssQ0FBVSxDQUFDLEVBQzlELFFBQVEsWUFBWThKLEVBQWtCRyxHQUFhakssQ0FBVSxDQUFDO0FBQ25FLEdBRWFtSyxLQUFpQjtBQUFBLEVBQzVCLEdBQUdMO0FBQUEsRUFDSCxHQUFHQztBQUNMLEdDL0RNSyxLQUFtQixRQUNuQkMsS0FBa0IsUUFFbEJDLEtBQWMsQ0FBQyxLQUFLLE1BQU0sTUFBTSxNQUFNO0FBRXJDLFNBQVNDLEdBQTBCbEwsR0FBTztBQUMvQyxTQUFPK0ssR0FBaUIsS0FBSy9LLENBQUs7QUFDcEM7QUFFTyxTQUFTbUwsR0FBeUJuTCxHQUFPO0FBQzlDLFNBQU9nTCxHQUFnQixLQUFLaEwsQ0FBSztBQUNuQztBQUVPLFNBQVNvTCxHQUEwQnBMLEdBQU9xTCxHQUFRQyxHQUFPO0FBQzlELFFBQU1DLElBQVdDLEdBQVF4TCxHQUFPcUwsR0FBUUMsQ0FBSztBQUU3QyxNQURBLFFBQVEsS0FBS0MsQ0FBUSxHQUNqQk4sR0FBWSxTQUFTakwsQ0FBSyxFQUFHLE9BQU0sSUFBSSxXQUFXdUwsQ0FBUTtBQUNoRTtBQUVBLFNBQVNDLEdBQVF4TCxHQUFPcUwsR0FBUUMsR0FBTztBQUNyQyxRQUFNRyxJQUFVekwsRUFBTSxDQUFDLE1BQU0sTUFBTSxVQUFVO0FBQzdDLFNBQU8sU0FBU0EsRUFBTSxZQUFhLENBQUEsbUJBQW1CQSxDQUFLLFlBQVlxTCxDQUFNLHNCQUFzQkksQ0FBTyxtQkFBbUJILENBQUs7QUFDcEk7QUNVTyxTQUFTSSxHQUFPeEssR0FBTztBQUM1QixTQUNFQSxhQUFpQixRQUNoQixPQUFPQSxLQUFVLFlBQ2hCLE9BQU8sVUFBVSxTQUFTLEtBQUtBLENBQUssTUFBTTtBQUVoRDtBQ0ZPLFNBQVN5SyxHQUFRN0YsR0FBTTtBQUM1QixNQUFJLENBQUM0RixHQUFPNUYsQ0FBSSxLQUFLLE9BQU9BLEtBQVM7QUFDbkMsV0FBTztBQUVULFFBQU1oRixJQUFRNEUsRUFBT0ksQ0FBSTtBQUN6QixTQUFPLENBQUMsTUFBTSxPQUFPaEYsQ0FBSyxDQUFDO0FBQzdCO0FDZkEsTUFBTThLLEtBQ0oseURBSUlDLEtBQTZCLHFDQUU3QkMsS0FBc0IsZ0JBQ3RCQyxLQUFvQixPQUNwQkMsS0FBZ0M7QUFzUy9CLFNBQVNYLEdBQU92RixHQUFNbUcsR0FBVy9MLEdBQVM7QWxDMVVqRCxNQUFBMkcsR0FBQUMsR0FBQUMsR0FBQUMsR0FBQWtGLEdBQUFDLEdBQUFDLEdBQUFDO0FrQzJVRSxRQUFNcEksSUFBaUJDLEVBQW1CLEdBQ3BDb0ksS0FBU3BNLEtBQUEsZ0JBQUFBLEVBQVMsV0FBVStELEVBQWUsVUFBVXNJLElBRXJEeEUsS0FDSjdILEtBQUEsZ0JBQUFBLEVBQVMsNEJBQ1Q0RyxLQUFBRCxJQUFBM0csS0FBQSxnQkFBQUEsRUFBUyxXQUFULGdCQUFBMkcsRUFBaUIsWUFBakIsZ0JBQUFDLEVBQTBCLDBCQUMxQjdDLEVBQWUsMkJBQ2YrQyxLQUFBRCxJQUFBOUMsRUFBZSxXQUFmLGdCQUFBOEMsRUFBdUIsWUFBdkIsZ0JBQUFDLEVBQWdDLDBCQUNoQyxHQUVJQyxLQUNKL0csS0FBQSxnQkFBQUEsRUFBUyxtQkFDVGlNLEtBQUFELElBQUFoTSxLQUFBLGdCQUFBQSxFQUFTLFdBQVQsZ0JBQUFnTSxFQUFpQixZQUFqQixnQkFBQUMsRUFBMEIsaUJBQzFCbEksRUFBZSxrQkFDZm9JLEtBQUFELElBQUFuSSxFQUFlLFdBQWYsZ0JBQUFtSSxFQUF1QixZQUF2QixnQkFBQUMsRUFBZ0MsaUJBQ2hDLEdBRUlHLElBQWU5RyxFQUFPSSxDQUFJO0FBRWhDLE1BQUksQ0FBQzZGLEdBQVFhLENBQVk7QUFDdkIsVUFBTSxJQUFJLFdBQVcsb0JBQW9CO0FBRzNDLE1BQUlDLElBQVFSLEVBQ1QsTUFBTUosRUFBMEIsRUFDaEMsSUFBSSxDQUFDYSxNQUFjO0FBQ2xCLFVBQU1DLElBQWlCRCxFQUFVLENBQUM7QUFDbEMsUUFBSUMsTUFBbUIsT0FBT0EsTUFBbUIsS0FBSztBQUNwRCxZQUFNQyxJQUFnQjlCLEdBQWU2QixDQUFjO0FBQ25ELGFBQU9DLEVBQWNGLEdBQVdKLEVBQU8sVUFBVTtBQUFBLElBQ3pEO0FBQ00sV0FBT0k7QUFBQSxFQUNSLENBQUEsRUFDQSxLQUFLLEVBQUUsRUFDUCxNQUFNZCxFQUFzQixFQUM1QixJQUFJLENBQUNjLE1BQWM7QUFFbEIsUUFBSUEsTUFBYztBQUNoQixhQUFPLEVBQUUsU0FBUyxJQUFPLE9BQU8sSUFBSztBQUd2QyxVQUFNQyxJQUFpQkQsRUFBVSxDQUFDO0FBQ2xDLFFBQUlDLE1BQW1CO0FBQ3JCLGFBQU8sRUFBRSxTQUFTLElBQU8sT0FBT0UsR0FBbUJILENBQVMsRUFBRztBQUdqRSxRQUFJekQsRUFBVzBELENBQWM7QUFDM0IsYUFBTyxFQUFFLFNBQVMsSUFBTSxPQUFPRCxFQUFXO0FBRzVDLFFBQUlDLEVBQWUsTUFBTVgsRUFBNkI7QUFDcEQsWUFBTSxJQUFJO0FBQUEsUUFDUixtRUFDRVcsSUFDQTtBQUFBLE1BQ0g7QUFHSCxXQUFPLEVBQUUsU0FBUyxJQUFPLE9BQU9ELEVBQVc7QUFBQSxFQUNqRCxDQUFLO0FBR0gsRUFBSUosRUFBTyxTQUFTLGlCQUNsQkcsSUFBUUgsRUFBTyxTQUFTLGFBQWFFLEdBQWNDLENBQUs7QUFHMUQsUUFBTUssSUFBbUI7QUFBQSxJQUN2Qix1QkFBQS9FO0FBQUEsSUFDQSxjQUFBZDtBQUFBLElBQ0EsUUFBQXFGO0FBQUEsRUFDRDtBQUVELFNBQU9HLEVBQ0osSUFBSSxDQUFDTSxNQUFTO0FBQ2IsUUFBSSxDQUFDQSxFQUFLLFFBQVMsUUFBT0EsRUFBSztBQUUvQixVQUFNL00sSUFBUStNLEVBQUs7QUFFbkIsS0FDRyxFQUFDN00sS0FBQSxRQUFBQSxFQUFTLGdDQUNUaUwsR0FBeUJuTCxDQUFLLEtBQy9CLEVBQUNFLEtBQUEsUUFBQUEsRUFBUyxpQ0FDVGdMLEdBQTBCbEwsQ0FBSyxNQUVqQ29MLEdBQTBCcEwsR0FBT2lNLEdBQVcsT0FBT25HLENBQUksQ0FBQztBQUcxRCxVQUFNa0gsSUFBWS9ELEVBQVdqSixFQUFNLENBQUMsQ0FBQztBQUNyQyxXQUFPZ04sRUFBVVIsR0FBY3hNLEdBQU9zTSxFQUFPLFVBQVVRLENBQWdCO0FBQUEsRUFDeEUsQ0FBQSxFQUNBLEtBQUssRUFBRTtBQUNaO0FBRUEsU0FBU0QsR0FBbUJ2QixHQUFPO0FBQ2pDLFFBQU0yQixJQUFVM0IsRUFBTSxNQUFNUSxFQUFtQjtBQUUvQyxTQUFLbUIsSUFJRUEsRUFBUSxDQUFDLEVBQUUsUUFBUWxCLElBQW1CLEdBQUcsSUFIdkNUO0FBSVg7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzRdfQ==\n","import { g as t } from \"./format-Bnv9ssjn.js\";\nfunction n() {\n return Object.assign({}, t());\n}\nexport {\n n as g\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0RGVmYXVsdE9wdGlvbnMtRHJJSk9fR0guanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREZWZhdWx0T3B0aW9ucy5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RGVmYXVsdE9wdGlvbnMgYXMgZ2V0SW50ZXJuYWxEZWZhdWx0T3B0aW9ucyB9IGZyb20gXCIuL19saWIvZGVmYXVsdE9wdGlvbnMubWpzXCI7XG5cbi8qKlxuICogQG5hbWUgZ2V0RGVmYXVsdE9wdGlvbnNcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgR2V0IGRlZmF1bHQgb3B0aW9ucy5cbiAqIEBwdXJlIGZhbHNlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRlZmF1bHRzIGZvclxuICogYG9wdGlvbnMubG9jYWxlYCwgYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBhbmQgYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYFxuICogYXJndW1lbnRzIGZvciBhbGwgZnVuY3Rpb25zLlxuICpcbiAqIFlvdSBjYW4gY2hhbmdlIHRoZXNlIHdpdGggW3NldERlZmF1bHRPcHRpb25zXShodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL3NldERlZmF1bHRPcHRpb25zKS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBvcHRpb25zXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHJlc3VsdCA9IGdldERlZmF1bHRPcHRpb25zKClcbiAqIC8vPT4ge31cbiAqXG4gKiBAZXhhbXBsZVxuICogc2V0RGVmYXVsdE9wdGlvbnMoeyB3ZWVrU3RhcnNPbjogMSwgZmlyc3RXZWVrQ29udGFpbnNEYXRlOiA0IH0pXG4gKiBjb25zdCByZXN1bHQgPSBnZXREZWZhdWx0T3B0aW9ucygpXG4gKiAvLz0+IHsgd2Vla1N0YXJzT246IDEsIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogNCB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEludGVybmFsRGVmYXVsdE9wdGlvbnMoKSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgZ2V0RGVmYXVsdE9wdGlvbnM7XG4iXSwibmFtZXMiOlsiZ2V0RGVmYXVsdE9wdGlvbnMiLCJnZXRJbnRlcm5hbERlZmF1bHRPcHRpb25zIl0sIm1hcHBpbmdzIjoiO0FBMEJPLFNBQVNBLElBQW9CO0FBQ2xDLFNBQU8sT0FBTyxPQUFPLENBQUUsR0FBRUMsRUFBeUIsQ0FBRTtBQUN0RDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19\n","import { f as y } from \"./format-Bnv9ssjn.js\";\nimport { g as F } from \"./getDefaultOptions-DrIJO_GH.js\";\nfunction h(e, t, n) {\n const r = F(), a = E(e, n.timeZone, n.locale ?? r.locale);\n return \"formatToParts\" in a ? _(a, t) : S(a, t);\n}\nfunction _(e, t) {\n const n = e.formatToParts(t);\n for (let r = n.length - 1; r >= 0; --r)\n if (n[r].type === \"timeZoneName\")\n return n[r].value;\n}\nfunction S(e, t) {\n const n = e.format(t).replace(/\\u200E/g, \"\"), r = / [\\w-+ ]+$/.exec(n);\n return r ? r[0].substr(1) : \"\";\n}\nfunction E(e, t, n) {\n return new Intl.DateTimeFormat(n ? [n.code, \"en-US\"] : void 0, {\n timeZone: t,\n timeZoneName: e\n });\n}\nfunction L(e, t) {\n const n = v(t);\n return \"formatToParts\" in n ? A(n, e) : P(n, e);\n}\nconst X = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\nfunction A(e, t) {\n try {\n const n = e.formatToParts(t), r = [];\n for (let a = 0; a < n.length; a++) {\n const s = X[n[a].type];\n s !== void 0 && (r[s] = parseInt(n[a].value, 10));\n }\n return r;\n } catch (n) {\n if (n instanceof RangeError)\n return [NaN];\n throw n;\n }\n}\nfunction P(e, t) {\n const n = e.format(t), r = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(n);\n return [\n parseInt(r[3], 10),\n parseInt(r[1], 10),\n parseInt(r[2], 10),\n parseInt(r[4], 10),\n parseInt(r[5], 10),\n parseInt(r[6], 10)\n ];\n}\nconst d = {}, w = new Intl.DateTimeFormat(\"en-US\", {\n hourCycle: \"h23\",\n timeZone: \"America/New_York\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n}).format(/* @__PURE__ */ new Date(\"2014-06-25T04:00:00.123Z\")), W = w === \"06/25/2014, 00:00:00\" || w === \"‎06‎/‎25‎/‎2014‎ ‎00‎:‎00‎:‎00\";\nfunction v(e) {\n return d[e] || (d[e] = W ? new Intl.DateTimeFormat(\"en-US\", {\n hourCycle: \"h23\",\n timeZone: e,\n year: \"numeric\",\n month: \"numeric\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n }) : new Intl.DateTimeFormat(\"en-US\", {\n hour12: !1,\n timeZone: e,\n year: \"numeric\",\n month: \"numeric\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n })), d[e];\n}\nfunction U(e, t, n, r, a, s, i) {\n const o = /* @__PURE__ */ new Date(0);\n return o.setUTCFullYear(e, t, n), o.setUTCHours(r, a, s, i), o;\n}\nconst Y = 36e5, k = 6e4, D = {\n timezone: /([Z+-].*)$/,\n timezoneZ: /^(Z)$/,\n timezoneHH: /^([+-]\\d{2})$/,\n timezoneHHMM: /^([+-])(\\d{2}):?(\\d{2})$/\n};\nfunction $(e, t, n) {\n if (!e)\n return 0;\n let r = D.timezoneZ.exec(e);\n if (r)\n return 0;\n let a, s;\n if (r = D.timezoneHH.exec(e), r)\n return a = parseInt(r[1], 10), g(a) ? -(a * Y) : NaN;\n if (r = D.timezoneHHMM.exec(e), r) {\n a = parseInt(r[2], 10);\n const i = parseInt(r[3], 10);\n return g(a, i) ? (s = Math.abs(a) * Y + i * k, r[1] === \"+\" ? -s : s) : NaN;\n }\n if (G(e)) {\n t = new Date(t || Date.now());\n const i = n ? t : j(t), o = I(i, e);\n return -(n ? o : R(t, o, e));\n }\n return NaN;\n}\nfunction j(e) {\n return U(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds());\n}\nfunction I(e, t) {\n const n = L(e, t), r = U(n[0], n[1] - 1, n[2], n[3] % 24, n[4], n[5], 0).getTime();\n let a = e.getTime();\n const s = a % 1e3;\n return a -= s >= 0 ? s : 1e3 + s, r - a;\n}\nfunction R(e, t, n) {\n let a = e.getTime() - t;\n const s = I(new Date(a), n);\n if (t === s)\n return t;\n a -= s - t;\n const i = I(new Date(a), n);\n return s === i ? s : Math.max(s, i);\n}\nfunction g(e, t) {\n return -23 <= e && e <= 23 && (t == null || 0 <= t && t <= 59);\n}\nconst M = {};\nfunction G(e) {\n if (M[e])\n return !0;\n try {\n return new Intl.DateTimeFormat(void 0, { timeZone: e }), M[e] = !0, !0;\n } catch {\n return !1;\n }\n}\nconst q = 60 * 1e3, B = {\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function(e, t, n) {\n const r = N(n.timeZone, e);\n if (r === 0)\n return \"Z\";\n switch (t) {\n case \"X\":\n return O(r);\n case \"XXXX\":\n case \"XX\":\n return l(r);\n case \"XXXXX\":\n case \"XXX\":\n default:\n return l(r, \":\");\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function(e, t, n) {\n const r = N(n.timeZone, e);\n switch (t) {\n case \"x\":\n return O(r);\n case \"xxxx\":\n case \"xx\":\n return l(r);\n case \"xxxxx\":\n case \"xxx\":\n default:\n return l(r, \":\");\n }\n },\n // Timezone (GMT)\n O: function(e, t, n) {\n const r = N(n.timeZone, e);\n switch (t) {\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + J(r, \":\");\n case \"OOOO\":\n default:\n return \"GMT\" + l(r, \":\");\n }\n },\n // Timezone (specific non-location)\n z: function(e, t, n) {\n switch (t) {\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return h(\"short\", e, n);\n case \"zzzz\":\n default:\n return h(\"long\", e, n);\n }\n }\n};\nfunction N(e, t) {\n const n = e ? $(e, t, !0) / q : (t == null ? void 0 : t.getTimezoneOffset()) ?? 0;\n if (Number.isNaN(n))\n throw new RangeError(\"Invalid time zone specified: \" + e);\n return n;\n}\nfunction m(e, t) {\n const n = e < 0 ? \"-\" : \"\";\n let r = Math.abs(e).toString();\n for (; r.length < t; )\n r = \"0\" + r;\n return n + r;\n}\nfunction l(e, t = \"\") {\n const n = e > 0 ? \"-\" : \"+\", r = Math.abs(e), a = m(Math.floor(r / 60), 2), s = m(Math.floor(r % 60), 2);\n return n + a + t + s;\n}\nfunction O(e, t) {\n return e % 60 === 0 ? (e > 0 ? \"-\" : \"+\") + m(Math.abs(e) / 60, 2) : l(e, t);\n}\nfunction J(e, t = \"\") {\n const n = e > 0 ? \"-\" : \"+\", r = Math.abs(e), a = Math.floor(r / 60), s = r % 60;\n return s === 0 ? n + String(a) : n + String(a) + t + m(s, 2);\n}\nfunction x(e) {\n const t = new Date(Date.UTC(e.getFullYear(), e.getMonth(), e.getDate(), e.getHours(), e.getMinutes(), e.getSeconds(), e.getMilliseconds()));\n return t.setUTCFullYear(e.getFullYear()), +e - +t;\n}\nconst Q = /(Z|[+-]\\d{2}(?::?\\d{2})?| UTC| [a-zA-Z]+\\/[a-zA-Z_]+(?:\\/[a-zA-Z_]+)?)$/, T = 36e5, z = 6e4, V = 2, c = {\n dateTimePattern: /^([0-9W+-]+)(T| )(.*)/,\n datePattern: /^([0-9W+-]+)(.*)/,\n plainTime: /:/,\n // year tokens\n YY: /^(\\d{2})$/,\n YYY: [\n /^([+-]\\d{2})$/,\n // 0 additional digits\n /^([+-]\\d{3})$/,\n // 1 additional digit\n /^([+-]\\d{4})$/\n // 2 additional digits\n ],\n YYYY: /^(\\d{4})/,\n YYYYY: [\n /^([+-]\\d{4})/,\n // 0 additional digits\n /^([+-]\\d{5})/,\n // 1 additional digit\n /^([+-]\\d{6})/\n // 2 additional digits\n ],\n // date tokens\n MM: /^-(\\d{2})$/,\n DDD: /^-?(\\d{3})$/,\n MMDD: /^-?(\\d{2})-?(\\d{2})$/,\n Www: /^-?W(\\d{2})$/,\n WwwD: /^-?W(\\d{2})-?(\\d{1})$/,\n HH: /^(\\d{2}([.,]\\d*)?)$/,\n HHMM: /^(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n HHMMSS: /^(\\d{2}):?(\\d{2}):?(\\d{2}([.,]\\d*)?)$/,\n // time zone tokens (to identify the presence of a tz)\n timeZone: Q\n};\nfunction K(e, t = {}) {\n if (arguments.length < 1)\n throw new TypeError(\"1 argument required, but only \" + arguments.length + \" present\");\n if (e === null)\n return /* @__PURE__ */ new Date(NaN);\n const n = t.additionalDigits == null ? V : Number(t.additionalDigits);\n if (n !== 2 && n !== 1 && n !== 0)\n throw new RangeError(\"additionalDigits must be 0, 1 or 2\");\n if (e instanceof Date || typeof e == \"object\" && Object.prototype.toString.call(e) === \"[object Date]\")\n return new Date(e.getTime());\n if (typeof e == \"number\" || Object.prototype.toString.call(e) === \"[object Number]\")\n return new Date(e);\n if (Object.prototype.toString.call(e) !== \"[object String]\")\n return /* @__PURE__ */ new Date(NaN);\n const r = ee(e), { year: a, restDateString: s } = te(r.date, n), i = ne(s, a);\n if (i === null || isNaN(i.getTime()))\n return /* @__PURE__ */ new Date(NaN);\n if (i) {\n const o = i.getTime();\n let u = 0, f;\n if (r.time && (u = re(r.time), u === null || isNaN(u)))\n return /* @__PURE__ */ new Date(NaN);\n if (r.timeZone || t.timeZone) {\n if (f = $(r.timeZone || t.timeZone, new Date(o + u)), isNaN(f))\n return /* @__PURE__ */ new Date(NaN);\n } else\n f = x(new Date(o + u)), f = x(new Date(o + u + f));\n return new Date(o + u + f);\n } else\n return /* @__PURE__ */ new Date(NaN);\n}\nfunction ee(e) {\n const t = {};\n let n = c.dateTimePattern.exec(e), r;\n if (n ? (t.date = n[1], r = n[3]) : (n = c.datePattern.exec(e), n ? (t.date = n[1], r = n[2]) : (t.date = null, r = e)), r) {\n const a = c.timeZone.exec(r);\n a ? (t.time = r.replace(a[1], \"\"), t.timeZone = a[1].trim()) : t.time = r;\n }\n return t;\n}\nfunction te(e, t) {\n if (e) {\n const n = c.YYY[t], r = c.YYYYY[t];\n let a = c.YYYY.exec(e) || r.exec(e);\n if (a) {\n const s = a[1];\n return {\n year: parseInt(s, 10),\n restDateString: e.slice(s.length)\n };\n }\n if (a = c.YY.exec(e) || n.exec(e), a) {\n const s = a[1];\n return {\n year: parseInt(s, 10) * 100,\n restDateString: e.slice(s.length)\n };\n }\n }\n return {\n year: null\n };\n}\nfunction ne(e, t) {\n if (t === null)\n return null;\n let n, r, a;\n if (!e || !e.length)\n return n = /* @__PURE__ */ new Date(0), n.setUTCFullYear(t), n;\n let s = c.MM.exec(e);\n if (s)\n return n = /* @__PURE__ */ new Date(0), r = parseInt(s[1], 10) - 1, Z(t, r) ? (n.setUTCFullYear(t, r), n) : /* @__PURE__ */ new Date(NaN);\n if (s = c.DDD.exec(e), s) {\n n = /* @__PURE__ */ new Date(0);\n const i = parseInt(s[1], 10);\n return ie(t, i) ? (n.setUTCFullYear(t, 0, i), n) : /* @__PURE__ */ new Date(NaN);\n }\n if (s = c.MMDD.exec(e), s) {\n n = /* @__PURE__ */ new Date(0), r = parseInt(s[1], 10) - 1;\n const i = parseInt(s[2], 10);\n return Z(t, r, i) ? (n.setUTCFullYear(t, r, i), n) : /* @__PURE__ */ new Date(NaN);\n }\n if (s = c.Www.exec(e), s)\n return a = parseInt(s[1], 10) - 1, C(a) ? H(t, a) : /* @__PURE__ */ new Date(NaN);\n if (s = c.WwwD.exec(e), s) {\n a = parseInt(s[1], 10) - 1;\n const i = parseInt(s[2], 10) - 1;\n return C(a, i) ? H(t, a, i) : /* @__PURE__ */ new Date(NaN);\n }\n return null;\n}\nfunction re(e) {\n let t, n, r = c.HH.exec(e);\n if (r)\n return t = parseFloat(r[1].replace(\",\", \".\")), p(t) ? t % 24 * T : NaN;\n if (r = c.HHMM.exec(e), r)\n return t = parseInt(r[1], 10), n = parseFloat(r[2].replace(\",\", \".\")), p(t, n) ? t % 24 * T + n * z : NaN;\n if (r = c.HHMMSS.exec(e), r) {\n t = parseInt(r[1], 10), n = parseInt(r[2], 10);\n const a = parseFloat(r[3].replace(\",\", \".\"));\n return p(t, n, a) ? t % 24 * T + n * z + a * 1e3 : NaN;\n }\n return null;\n}\nfunction H(e, t, n) {\n t = t || 0, n = n || 0;\n const r = /* @__PURE__ */ new Date(0);\n r.setUTCFullYear(e, 0, 4);\n const a = r.getUTCDay() || 7, s = t * 7 + n + 1 - a;\n return r.setUTCDate(r.getUTCDate() + s), r;\n}\nconst ae = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], se = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nfunction b(e) {\n return e % 400 === 0 || e % 4 === 0 && e % 100 !== 0;\n}\nfunction Z(e, t, n) {\n if (t < 0 || t > 11)\n return !1;\n if (n != null) {\n if (n < 1)\n return !1;\n const r = b(e);\n if (r && n > se[t] || !r && n > ae[t])\n return !1;\n }\n return !0;\n}\nfunction ie(e, t) {\n if (t < 1)\n return !1;\n const n = b(e);\n return !(n && t > 366 || !n && t > 365);\n}\nfunction C(e, t) {\n return !(e < 0 || e > 52 || t != null && (t < 0 || t > 6));\n}\nfunction p(e, t, n) {\n return !(e < 0 || e >= 25 || t != null && (t < 0 || t >= 60) || n != null && (n < 0 || n >= 60));\n}\nconst oe = /([xXOz]+)|''|'(''|[^'])+('|$)/g;\nfunction fe(e, t, n = {}) {\n t = String(t);\n const r = t.match(oe);\n if (r) {\n const a = K(n.originalDate || e, n);\n t = r.reduce(function(s, i) {\n if (i[0] === \"'\")\n return s;\n const o = s.indexOf(i), u = s[o - 1] === \"'\", f = s.replace(i, \"'\" + B[i[0]](a, i, n) + \"'\");\n return u ? f.substring(0, o - 1) + f.substring(o + 1) : f;\n }, t);\n }\n return y(e, t, n);\n}\nexport {\n K as a,\n fe as f,\n $ as t\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtWWtpOFlTZm4uanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS9fbGliL3R6SW50bFRpbWVab25lTmFtZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS9fbGliL3R6VG9rZW5pemVEYXRlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2Rpc3QvZXNtL19saWIvbmV3RGF0ZVVUQy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS9fbGliL3R6UGFyc2VUaW1lem9uZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS9mb3JtYXQvZm9ybWF0dGVycy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZGlzdC9lc20vX2xpYi90elBhdHRlcm4vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMtdHovZGlzdC9lc20vdG9EYXRlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zLXR6L2Rpc3QvZXNtL2Zvcm1hdC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gJ2RhdGUtZm5zJztcbi8qKlxuICogUmV0dXJucyB0aGUgZm9ybWF0dGVkIHRpbWUgem9uZSBuYW1lIG9mIHRoZSBwcm92aWRlZCBgdGltZVpvbmVgIG9yIHRoZSBjdXJyZW50XG4gKiBzeXN0ZW0gdGltZSB6b25lIGlmIG9taXR0ZWQsIGFjY291bnRpbmcgZm9yIERTVCBhY2NvcmRpbmcgdG8gdGhlIFVUQyB2YWx1ZSBvZlxuICogdGhlIGRhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ekludGxUaW1lWm9uZU5hbWUobGVuZ3RoLCBkYXRlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBnZXREZWZhdWx0T3B0aW9ucygpO1xuICAgIGNvbnN0IGR0ZiA9IGdldERURihsZW5ndGgsIG9wdGlvbnMudGltZVpvbmUsIG9wdGlvbnMubG9jYWxlID8/IGRlZmF1bHRPcHRpb25zLmxvY2FsZSk7XG4gICAgcmV0dXJuICdmb3JtYXRUb1BhcnRzJyBpbiBkdGYgPyBwYXJ0c1RpbWVab25lKGR0ZiwgZGF0ZSkgOiBoYWNreVRpbWVab25lKGR0ZiwgZGF0ZSk7XG59XG5mdW5jdGlvbiBwYXJ0c1RpbWVab25lKGR0ZiwgZGF0ZSkge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpO1xuICAgIGZvciAobGV0IGkgPSBmb3JtYXR0ZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgaWYgKGZvcm1hdHRlZFtpXS50eXBlID09PSAndGltZVpvbmVOYW1lJykge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFtpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gaGFja3lUaW1lWm9uZShkdGYsIGRhdGUpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1xcdTIwMEUvZywgJycpO1xuICAgIGNvbnN0IHR6TmFtZU1hdGNoID0gLyBbXFx3LSsgXSskLy5leGVjKGZvcm1hdHRlZCk7XG4gICAgcmV0dXJuIHR6TmFtZU1hdGNoID8gdHpOYW1lTWF0Y2hbMF0uc3Vic3RyKDEpIDogJyc7XG59XG4vLyBJZiBhIGxvY2FsZSBoYXMgYmVlbiBwcm92aWRlZCBgZW4tVVNgIGlzIHVzZWQgYXMgYSBmYWxsYmFjayBpbiBjYXNlIGl0IGlzIGFuXG4vLyBpbnZhbGlkIGxvY2FsZSwgb3RoZXJ3aXNlIHRoZSBsb2NhbGUgaXMgbGVmdCB1bmRlZmluZWQgdG8gdXNlIHRoZSBzeXN0ZW0gbG9jYWxlLlxuZnVuY3Rpb24gZ2V0RFRGKGxlbmd0aCwgdGltZVpvbmUsIGxvY2FsZSkge1xuICAgIHJldHVybiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUgPyBbbG9jYWxlLmNvZGUsICdlbi1VUyddIDogdW5kZWZpbmVkLCB7XG4gICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgdGltZVpvbmVOYW1lOiBsZW5ndGgsXG4gICAgfSk7XG59XG4iLCIvKipcbiAqIFJldHVybnMgdGhlIFt5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZHNdIHRva2VucyBvZiB0aGUgcHJvdmlkZWRcbiAqIGBkYXRlYCBhcyBpdCB3aWxsIGJlIHJlbmRlcmVkIGluIHRoZSBgdGltZVpvbmVgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZVpvbmUpIHtcbiAgICBjb25zdCBkdGYgPSBnZXREYXRlVGltZUZvcm1hdCh0aW1lWm9uZSk7XG4gICAgcmV0dXJuICdmb3JtYXRUb1BhcnRzJyBpbiBkdGYgPyBwYXJ0c09mZnNldChkdGYsIGRhdGUpIDogaGFja3lPZmZzZXQoZHRmLCBkYXRlKTtcbn1cbmNvbnN0IHR5cGVUb1BvcyA9IHtcbiAgICB5ZWFyOiAwLFxuICAgIG1vbnRoOiAxLFxuICAgIGRheTogMixcbiAgICBob3VyOiAzLFxuICAgIG1pbnV0ZTogNCxcbiAgICBzZWNvbmQ6IDUsXG59O1xuZnVuY3Rpb24gcGFydHNPZmZzZXQoZHRmLCBkYXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZHRmLmZvcm1hdFRvUGFydHMoZGF0ZSk7XG4gICAgICAgIGNvbnN0IGZpbGxlZCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gdHlwZVRvUG9zW2Zvcm1hdHRlZFtpXS50eXBlXTtcbiAgICAgICAgICAgIGlmIChwb3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQoZm9ybWF0dGVkW2ldLnZhbHVlLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGxlZDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJhbmdlRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBbTmFOXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG5mdW5jdGlvbiBoYWNreU9mZnNldChkdGYsIGRhdGUpIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgY29uc3QgcGFyc2VkID0gLyhcXGQrKVxcLyhcXGQrKVxcLyhcXGQrKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZCk7XG4gICAgLy8gY29uc3QgWywgZk1vbnRoLCBmRGF5LCBmWWVhciwgZkhvdXIsIGZNaW51dGUsIGZTZWNvbmRdID0gcGFyc2VkXG4gICAgLy8gcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF1cbiAgICByZXR1cm4gW1xuICAgICAgICBwYXJzZUludChwYXJzZWRbM10sIDEwKSxcbiAgICAgICAgcGFyc2VJbnQocGFyc2VkWzFdLCAxMCksXG4gICAgICAgIHBhcnNlSW50KHBhcnNlZFsyXSwgMTApLFxuICAgICAgICBwYXJzZUludChwYXJzZWRbNF0sIDEwKSxcbiAgICAgICAgcGFyc2VJbnQocGFyc2VkWzVdLCAxMCksXG4gICAgICAgIHBhcnNlSW50KHBhcnNlZFs2XSwgMTApLFxuICAgIF07XG59XG4vLyBHZXQgYSBjYWNoZWQgSW50bC5EYXRlVGltZUZvcm1hdCBpbnN0YW5jZSBmb3IgdGhlIElBTkEgYHRpbWVab25lYC4gVGhpcyBjYW4gYmUgdXNlZFxuLy8gdG8gZ2V0IGRldGVybWluaXN0aWMgbG9jYWwgZGF0ZS90aW1lIG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIGBlbi1VU2AgbG9jYWxlIHdoaWNoXG4vLyBjYW4gYmUgdXNlZCB0byBleHRyYWN0IGxvY2FsIHRpbWUgcGFydHMgYXMgbmVjZXNzYXJ5LlxuY29uc3QgZHRmQ2FjaGUgPSB7fTtcbi8vIE5ldyBicm93c2VycyB1c2UgYGhvdXJDeWNsZWAsIElFIGFuZCBDaHJvbWUgPDczIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHVzZXMgYGhvdXIxMmBcbmNvbnN0IHRlc3REYXRlRm9ybWF0dGVkID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoJ2VuLVVTJywge1xuICAgIGhvdXJDeWNsZTogJ2gyMycsXG4gICAgdGltZVpvbmU6ICdBbWVyaWNhL05ld19Zb3JrJyxcbiAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgc2Vjb25kOiAnMi1kaWdpdCcsXG59KS5mb3JtYXQobmV3IERhdGUoJzIwMTQtMDYtMjVUMDQ6MDA6MDAuMTIzWicpKTtcbmNvbnN0IGhvdXJDeWNsZVN1cHBvcnRlZCA9IHRlc3REYXRlRm9ybWF0dGVkID09PSAnMDYvMjUvMjAxNCwgMDA6MDA6MDAnIHx8XG4gICAgdGVzdERhdGVGb3JtYXR0ZWQgPT09ICfigI4wNuKAji/igI4yNeKAji/igI4yMDE04oCOIOKAjjAw4oCOOuKAjjAw4oCOOuKAjjAwJztcbmZ1bmN0aW9uIGdldERhdGVUaW1lRm9ybWF0KHRpbWVab25lKSB7XG4gICAgaWYgKCFkdGZDYWNoZVt0aW1lWm9uZV0pIHtcbiAgICAgICAgZHRmQ2FjaGVbdGltZVpvbmVdID0gaG91ckN5Y2xlU3VwcG9ydGVkXG4gICAgICAgICAgICA/IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgICAgICAgICBob3VyQ3ljbGU6ICdoMjMnLFxuICAgICAgICAgICAgICAgIHRpbWVab25lOiB0aW1lWm9uZSxcbiAgICAgICAgICAgICAgICB5ZWFyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbW9udGg6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgc2Vjb25kOiAnMi1kaWdpdCcsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjEyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUsXG4gICAgICAgICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1vbnRoOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIHNlY29uZDogJzItZGlnaXQnLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkdGZDYWNoZVt0aW1lWm9uZV07XG59XG4iLCIvKipcbiAqIFVzZSBpbnN0ZWFkIG9mIGBuZXcgRGF0ZShEYXRlLlVUQyguLi4pKWAgdG8gc3VwcG9ydCB5ZWFycyBiZWxvdyAxMDAgd2hpY2ggZG9lc24ndCB3b3JrXG4gKiBvdGhlcndpc2UgZHVlIHRvIHRoZSBuYXR1cmUgb2YgdGhlXG4gKiBbYERhdGVgIGNvbnN0cnVjdG9yXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlI2ludGVycHJldGF0aW9uX29mX3R3by1kaWdpdF95ZWFycy5cbiAqXG4gKiBGb3IgYERhdGUuVVRDKC4uLilgLCB1c2UgYG5ld0RhdGVVVEMoLi4uKS5nZXRUaW1lKClgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3RGF0ZVVUQyhmdWxsWWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kKSB7XG4gICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoZnVsbFllYXIsIG1vbnRoLCBkYXkpO1xuICAgIHV0Y0RhdGUuc2V0VVRDSG91cnMoaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kKTtcbiAgICByZXR1cm4gdXRjRGF0ZTtcbn1cbiIsImltcG9ydCB7IHR6VG9rZW5pemVEYXRlIH0gZnJvbSAnLi4vdHpUb2tlbml6ZURhdGUvaW5kZXguanMnO1xuaW1wb3J0IHsgbmV3RGF0ZVVUQyB9IGZyb20gJy4uL25ld0RhdGVVVEMvaW5kZXguanMnO1xuY29uc3QgTUlMTElTRUNPTkRTX0lOX0hPVVIgPSAzNjAwMDAwO1xuY29uc3QgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwMDAwO1xuY29uc3QgcGF0dGVybnMgPSB7XG4gICAgdGltZXpvbmU6IC8oW1orLV0uKikkLyxcbiAgICB0aW1lem9uZVo6IC9eKFopJC8sXG4gICAgdGltZXpvbmVISDogL14oWystXVxcZHsyfSkkLyxcbiAgICB0aW1lem9uZUhITU06IC9eKFsrLV0pKFxcZHsyfSk6PyhcXGR7Mn0pJC8sXG59O1xuLy8gUGFyc2UgY29uc3Rpb3VzIHRpbWUgem9uZSBvZmZzZXQgZm9ybWF0cyB0byBhbiBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG5leHBvcnQgZnVuY3Rpb24gdHpQYXJzZVRpbWV6b25lKHRpbWV6b25lU3RyaW5nLCBkYXRlLCBpc1V0Y0RhdGUpIHtcbiAgICAvLyBFbXB0eSBzdHJpbmdcbiAgICBpZiAoIXRpbWV6b25lU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvLyBaXG4gICAgbGV0IHRva2VuID0gcGF0dGVybnMudGltZXpvbmVaLmV4ZWModGltZXpvbmVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgbGV0IGhvdXJzO1xuICAgIGxldCBhYnNvbHV0ZU9mZnNldDtcbiAgICAvLyDCsWhoXG4gICAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhILmV4ZWModGltZXpvbmVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgICBob3VycyA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCk7XG4gICAgICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycykpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0oaG91cnMgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUik7XG4gICAgfVxuICAgIC8vIMKxaGg6bW0gb3IgwrFoaG1tXG4gICAgdG9rZW4gPSBwYXR0ZXJucy50aW1lem9uZUhITU0uZXhlYyh0aW1lem9uZVN0cmluZyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGhvdXJzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKTtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IHBhcnNlSW50KHRva2VuWzNdLCAxMCk7XG4gICAgICAgIGlmICghdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyhob3VycykgKiBNSUxMSVNFQ09ORFNfSU5fSE9VUiArIG1pbnV0ZXMgKiBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFO1xuICAgICAgICByZXR1cm4gdG9rZW5bMV0gPT09ICcrJyA/IC1hYnNvbHV0ZU9mZnNldCA6IGFic29sdXRlT2Zmc2V0O1xuICAgIH1cbiAgICAvLyBJQU5BIHRpbWUgem9uZVxuICAgIGlmIChpc1ZhbGlkVGltZXpvbmVJQU5BU3RyaW5nKHRpbWV6b25lU3RyaW5nKSkge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSB8fCBEYXRlLm5vdygpKTtcbiAgICAgICAgY29uc3QgdXRjRGF0ZSA9IGlzVXRjRGF0ZSA/IGRhdGUgOiB0b1V0Y0RhdGUoZGF0ZSk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNhbGNPZmZzZXQodXRjRGF0ZSwgdGltZXpvbmVTdHJpbmcpO1xuICAgICAgICBjb25zdCBmaXhlZE9mZnNldCA9IGlzVXRjRGF0ZSA/IG9mZnNldCA6IGZpeE9mZnNldChkYXRlLCBvZmZzZXQsIHRpbWV6b25lU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIC1maXhlZE9mZnNldDtcbiAgICB9XG4gICAgcmV0dXJuIE5hTjtcbn1cbmZ1bmN0aW9uIHRvVXRjRGF0ZShkYXRlKSB7XG4gICAgcmV0dXJuIG5ld0RhdGVVVEMoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG59XG5mdW5jdGlvbiBjYWxjT2Zmc2V0KGRhdGUsIHRpbWV6b25lU3RyaW5nKSB7XG4gICAgY29uc3QgdG9rZW5zID0gdHpUb2tlbml6ZURhdGUoZGF0ZSwgdGltZXpvbmVTdHJpbmcpO1xuICAgIC8vIG1zIGRyb3BwZWQgYmVjYXVzZSBpdCdzIG5vdCBwcm92aWRlZCBieSB0elRva2VuaXplRGF0ZVxuICAgIGNvbnN0IGFzVVRDID0gbmV3RGF0ZVVUQyh0b2tlbnNbMF0sIHRva2Vuc1sxXSAtIDEsIHRva2Vuc1syXSwgdG9rZW5zWzNdICUgMjQsIHRva2Vuc1s0XSwgdG9rZW5zWzVdLCAwKS5nZXRUaW1lKCk7XG4gICAgbGV0IGFzVFMgPSBkYXRlLmdldFRpbWUoKTtcbiAgICBjb25zdCBvdmVyID0gYXNUUyAlIDEwMDA7XG4gICAgYXNUUyAtPSBvdmVyID49IDAgPyBvdmVyIDogMTAwMCArIG92ZXI7XG4gICAgcmV0dXJuIGFzVVRDIC0gYXNUUztcbn1cbmZ1bmN0aW9uIGZpeE9mZnNldChkYXRlLCBvZmZzZXQsIHRpbWV6b25lU3RyaW5nKSB7XG4gICAgY29uc3QgbG9jYWxUUyA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIC8vIE91ciBVVEMgdGltZSBpcyBqdXN0IGEgZ3Vlc3MgYmVjYXVzZSBvdXIgb2Zmc2V0IGlzIGp1c3QgYSBndWVzc1xuICAgIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvZmZzZXQ7XG4gICAgLy8gVGVzdCB3aGV0aGVyIHRoZSB6b25lIG1hdGNoZXMgdGhlIG9mZnNldCBmb3IgdGhpcyB0c1xuICAgIGNvbnN0IG8yID0gY2FsY09mZnNldChuZXcgRGF0ZSh1dGNHdWVzcyksIHRpbWV6b25lU3RyaW5nKTtcbiAgICAvLyBJZiBzbywgb2Zmc2V0IGRpZG4ndCBjaGFuZ2UsIGFuZCB3ZSdyZSBkb25lXG4gICAgaWYgKG9mZnNldCA9PT0gbzIpIHtcbiAgICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gICAgLy8gSWYgbm90LCBjaGFuZ2UgdGhlIHRzIGJ5IHRoZSBkaWZmZXJlbmNlIGluIHRoZSBvZmZzZXRcbiAgICB1dGNHdWVzcyAtPSBvMiAtIG9mZnNldDtcbiAgICAvLyBJZiB0aGF0IGdpdmVzIHVzIHRoZSBsb2NhbCB0aW1lIHdlIHdhbnQsIHdlJ3JlIGRvbmVcbiAgICBjb25zdCBvMyA9IGNhbGNPZmZzZXQobmV3IERhdGUodXRjR3Vlc3MpLCB0aW1lem9uZVN0cmluZyk7XG4gICAgaWYgKG8yID09PSBvMykge1xuICAgICAgICByZXR1cm4gbzI7XG4gICAgfVxuICAgIC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHdlIGRvbid0IGFkanVzdCB0aGUgdGltZVxuICAgIHJldHVybiBNYXRoLm1heChvMiwgbzMpO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShob3VycywgbWludXRlcykge1xuICAgIHJldHVybiAtMjMgPD0gaG91cnMgJiYgaG91cnMgPD0gMjMgJiYgKG1pbnV0ZXMgPT0gbnVsbCB8fCAoMCA8PSBtaW51dGVzICYmIG1pbnV0ZXMgPD0gNTkpKTtcbn1cbmNvbnN0IHZhbGlkSUFOQVRpbWV6b25lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzVmFsaWRUaW1lem9uZUlBTkFTdHJpbmcodGltZVpvbmVTdHJpbmcpIHtcbiAgICBpZiAodmFsaWRJQU5BVGltZXpvbmVDYWNoZVt0aW1lWm9uZVN0cmluZ10pXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAgIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHVuZGVmaW5lZCwgeyB0aW1lWm9uZTogdGltZVpvbmVTdHJpbmcgfSk7XG4gICAgICAgIHZhbGlkSUFOQVRpbWV6b25lQ2FjaGVbdGltZVpvbmVTdHJpbmddID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgdHpJbnRsVGltZVpvbmVOYW1lIH0gZnJvbSAnLi4vLi4vX2xpYi90ekludGxUaW1lWm9uZU5hbWUvaW5kZXguanMnO1xuaW1wb3J0IHsgdHpQYXJzZVRpbWV6b25lIH0gZnJvbSAnLi4vLi4vX2xpYi90elBhcnNlVGltZXpvbmUvaW5kZXguanMnO1xuY29uc3QgTUlMTElTRUNPTkRTX0lOX01JTlVURSA9IDYwICogMTAwMDtcbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICAgIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBhbHdheXMgYCdaJ2ApXG4gICAgWDogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZVpvbmVPZmZzZXQob3B0aW9ucy50aW1lWm9uZSwgZGF0ZSk7XG4gICAgICAgIGlmICh0aW1lem9uZU9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdaJztcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlc1xuICAgICAgICAgICAgY2FzZSAnWCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyh0aW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICAvLyBIb3VycywgbWludXRlcyBhbmQgb3B0aW9uYWwgc2Vjb25kcyB3aXRob3V0IGA6YCBkZWxpbWV0ZXJcbiAgICAgICAgICAgIC8vIE5vdGU6IG5laXRoZXIgSVNPLTg2MDEgbm9yIEphdmFTY3JpcHQgc3VwcG9ydHMgc2Vjb25kcyBpbiB0aW1lem9uZSBvZmZzZXRzXG4gICAgICAgICAgICAvLyBzbyB0aGlzIHRva2VuIGFsd2F5cyBoYXMgdGhlIHNhbWUgb3V0cHV0IGFzIGBYWGBcbiAgICAgICAgICAgIGNhc2UgJ1hYWFgnOlxuICAgICAgICAgICAgY2FzZSAnWFgnOiAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRob3V0IGA6YCBkZWxpbWV0ZXJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aCBgOmAgZGVsaW1ldGVyXG4gICAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhYYFxuICAgICAgICAgICAgY2FzZSAnWFhYWFgnOlxuICAgICAgICAgICAgY2FzZSAnWFhYJzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aCBgOmAgZGVsaW1ldGVyXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8gVGltZXpvbmUgKElTTy04NjAxLiBJZiBvZmZzZXQgaXMgMCwgb3V0cHV0IGlzIGAnKzAwOjAwJ2Agb3IgZXF1aXZhbGVudClcbiAgICB4OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lWm9uZU9mZnNldChvcHRpb25zLnRpbWVab25lLCBkYXRlKTtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgICAgLy8gSG91cnMgYW5kIG9wdGlvbmFsIG1pbnV0ZXNcbiAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1ldGVyXG4gICAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0c1xuICAgICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgXG4gICAgICAgICAgICBjYXNlICd4eHh4JzpcbiAgICAgICAgICAgIGNhc2UgJ3h4JzogLy8gSG91cnMgYW5kIG1pbnV0ZXMgd2l0aG91dCBgOmAgZGVsaW1ldGVyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltZXRlclxuICAgICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHNcbiAgICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGBcbiAgICAgICAgICAgIGNhc2UgJ3h4eHh4JzpcbiAgICAgICAgICAgIGNhc2UgJ3h4eCc6IC8vIEhvdXJzIGFuZCBtaW51dGVzIHdpdGggYDpgIGRlbGltZXRlclxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0VGltZXpvbmUodGltZXpvbmVPZmZzZXQsICc6Jyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIC8vIFRpbWV6b25lIChHTVQpXG4gICAgTzogZnVuY3Rpb24gKGRhdGUsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lT2Zmc2V0ID0gZ2V0VGltZVpvbmVPZmZzZXQob3B0aW9ucy50aW1lWm9uZSwgZGF0ZSk7XG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICAgIC8vIFNob3J0XG4gICAgICAgICAgICBjYXNlICdPJzpcbiAgICAgICAgICAgIGNhc2UgJ09PJzpcbiAgICAgICAgICAgIGNhc2UgJ09PTyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdHTVQnICsgZm9ybWF0VGltZXpvbmVTaG9ydCh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgICAgICAgIC8vIExvbmdcbiAgICAgICAgICAgIGNhc2UgJ09PT08nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0dNVCcgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgJzonKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy8gVGltZXpvbmUgKHNwZWNpZmljIG5vbi1sb2NhdGlvbilcbiAgICB6OiBmdW5jdGlvbiAoZGF0ZSwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgICAgICAgLy8gU2hvcnRcbiAgICAgICAgICAgIGNhc2UgJ3onOlxuICAgICAgICAgICAgY2FzZSAnenonOlxuICAgICAgICAgICAgY2FzZSAnenp6JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdHpJbnRsVGltZVpvbmVOYW1lKCdzaG9ydCcsIGRhdGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgLy8gTG9uZ1xuICAgICAgICAgICAgY2FzZSAnenp6eic6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0ekludGxUaW1lWm9uZU5hbWUoJ2xvbmcnLCBkYXRlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0VGltZVpvbmVPZmZzZXQodGltZVpvbmUsIG9yaWdpbmFsRGF0ZSkge1xuICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gdGltZVpvbmVcbiAgICAgICAgPyB0elBhcnNlVGltZXpvbmUodGltZVpvbmUsIG9yaWdpbmFsRGF0ZSwgdHJ1ZSkgLyBNSUxMSVNFQ09ORFNfSU5fTUlOVVRFXG4gICAgICAgIDogb3JpZ2luYWxEYXRlPy5nZXRUaW1lem9uZU9mZnNldCgpID8/IDA7XG4gICAgaWYgKE51bWJlci5pc05hTih0aW1lWm9uZU9mZnNldCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB6b25lIHNwZWNpZmllZDogJyArIHRpbWVab25lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbWVab25lT2Zmc2V0O1xufVxuZnVuY3Rpb24gYWRkTGVhZGluZ1plcm9zKG51bWJlciwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgY29uc3Qgc2lnbiA9IG51bWJlciA8IDAgPyAnLScgOiAnJztcbiAgICBsZXQgb3V0cHV0ID0gTWF0aC5hYnMobnVtYmVyKS50b1N0cmluZygpO1xuICAgIHdoaWxlIChvdXRwdXQubGVuZ3RoIDwgdGFyZ2V0TGVuZ3RoKSB7XG4gICAgICAgIG91dHB1dCA9ICcwJyArIG91dHB1dDtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ24gKyBvdXRwdXQ7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlciA9ICcnKSB7XG4gICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnMob2Zmc2V0KTtcbiAgICBjb25zdCBob3VycyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAvIDYwKSwgMik7XG4gICAgY29uc3QgbWludXRlcyA9IGFkZExlYWRpbmdaZXJvcyhNYXRoLmZsb29yKGFic09mZnNldCAlIDYwKSwgMik7XG4gICAgcmV0dXJuIHNpZ24gKyBob3VycyArIGRlbGltaXRlciArIG1pbnV0ZXM7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMob2Zmc2V0LCBkZWxpbWl0ZXIpIHtcbiAgICBpZiAob2Zmc2V0ICUgNjAgPT09IDApIHtcbiAgICAgICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAnLScgOiAnKyc7XG4gICAgICAgIHJldHVybiBzaWduICsgYWRkTGVhZGluZ1plcm9zKE1hdGguYWJzKG9mZnNldCkgLyA2MCwgMik7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXRUaW1lem9uZShvZmZzZXQsIGRlbGltaXRlcik7XG59XG5mdW5jdGlvbiBmb3JtYXRUaW1lem9uZVNob3J0KG9mZnNldCwgZGVsaW1pdGVyID0gJycpIHtcbiAgICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/ICctJyA6ICcrJztcbiAgICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihhYnNPZmZzZXQgLyA2MCk7XG4gICAgY29uc3QgbWludXRlcyA9IGFic09mZnNldCAlIDYwO1xuICAgIGlmIChtaW51dGVzID09PSAwKSB7XG4gICAgICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpO1xufVxuIiwiLyoqXG4gKiBHb29nbGUgQ2hyb21lIGFzIG9mIDY3LjAuMzM5Ni44NyBpbnRyb2R1Y2VkIHRpbWV6b25lcyB3aXRoIG9mZnNldCB0aGF0IGluY2x1ZGVzIHNlY29uZHMuXG4gKiBUaGV5IHVzdWFsbHkgYXBwZWFyIGZvciBkYXRlcyB0aGF0IGRlbm90ZSB0aW1lIGJlZm9yZSB0aGUgdGltZXpvbmVzIHdlcmUgaW50cm9kdWNlZFxuICogKGUuZy4gZm9yICdFdXJvcGUvUHJhZ3VlJyB0aW1lem9uZSB0aGUgb2Zmc2V0IGlzIEdNVCswMDo1Nzo0NCBiZWZvcmUgMSBPY3RvYmVyIDE4OTFcbiAqIGFuZCBHTVQrMDE6MDA6MDAgYWZ0ZXIgdGhhdCBkYXRlKVxuICpcbiAqIERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgYW5kIHdvdWxkIHJldHVybiA1NyBmb3IgdGhlIGV4YW1wbGUgYWJvdmUsXG4gKiB3aGljaCB3b3VsZCBsZWFkIHRvIGluY29ycmVjdCBjYWxjdWxhdGlvbnMuXG4gKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGFrZXMgc2Vjb25kcyBpbiBhY2NvdW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCksIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpKTtcbiAgICB1dGNEYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7XG59XG4iLCIvKiogUmVnZXggdG8gaWRlbnRpZnkgdGhlIHByZXNlbmNlIG9mIGEgdGltZSB6b25lIHNwZWNpZmllciBpbiBhIGRhdGUgc3RyaW5nICovXG5leHBvcnQgY29uc3QgdHpQYXR0ZXJuID0gLyhafFsrLV1cXGR7Mn0oPzo6P1xcZHsyfSk/fCBVVEN8IFthLXpBLVpdK1xcL1thLXpBLVpfXSsoPzpcXC9bYS16QS1aX10rKT8pJC87XG4iLCJpbXBvcnQgeyBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIH0gZnJvbSAnLi4vX2xpYi9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzL2luZGV4LmpzJztcbmltcG9ydCB7IHR6UGFyc2VUaW1lem9uZSB9IGZyb20gJy4uL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzJztcbmltcG9ydCB7IHR6UGF0dGVybiB9IGZyb20gJy4uL19saWIvdHpQYXR0ZXJuL2luZGV4LmpzJztcbmNvbnN0IE1JTExJU0VDT05EU19JTl9IT1VSID0gMzYwMDAwMDtcbmNvbnN0IE1JTExJU0VDT05EU19JTl9NSU5VVEUgPSA2MDAwMDtcbmNvbnN0IERFRkFVTFRfQURESVRJT05BTF9ESUdJVFMgPSAyO1xuY29uc3QgcGF0dGVybnMgPSB7XG4gICAgZGF0ZVRpbWVQYXR0ZXJuOiAvXihbMC05VystXSspKFR8ICkoLiopLyxcbiAgICBkYXRlUGF0dGVybjogL14oWzAtOVcrLV0rKSguKikvLFxuICAgIHBsYWluVGltZTogLzovLFxuICAgIC8vIHllYXIgdG9rZW5zXG4gICAgWVk6IC9eKFxcZHsyfSkkLyxcbiAgICBZWVk6IFtcbiAgICAgICAgL14oWystXVxcZHsyfSkkLywgLy8gMCBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgICAgICAvXihbKy1dXFxkezN9KSQvLCAvLyAxIGFkZGl0aW9uYWwgZGlnaXRcbiAgICAgICAgL14oWystXVxcZHs0fSkkLywgLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIF0sXG4gICAgWVlZWTogL14oXFxkezR9KS8sXG4gICAgWVlZWVk6IFtcbiAgICAgICAgL14oWystXVxcZHs0fSkvLCAvLyAwIGFkZGl0aW9uYWwgZGlnaXRzXG4gICAgICAgIC9eKFsrLV1cXGR7NX0pLywgLy8gMSBhZGRpdGlvbmFsIGRpZ2l0XG4gICAgICAgIC9eKFsrLV1cXGR7Nn0pLywgLy8gMiBhZGRpdGlvbmFsIGRpZ2l0c1xuICAgIF0sXG4gICAgLy8gZGF0ZSB0b2tlbnNcbiAgICBNTTogL14tKFxcZHsyfSkkLyxcbiAgICBEREQ6IC9eLT8oXFxkezN9KSQvLFxuICAgIE1NREQ6IC9eLT8oXFxkezJ9KS0/KFxcZHsyfSkkLyxcbiAgICBXd3c6IC9eLT9XKFxcZHsyfSkkLyxcbiAgICBXd3dEOiAvXi0/VyhcXGR7Mn0pLT8oXFxkezF9KSQvLFxuICAgIEhIOiAvXihcXGR7Mn0oWy4sXVxcZCopPykkLyxcbiAgICBISE1NOiAvXihcXGR7Mn0pOj8oXFxkezJ9KFsuLF1cXGQqKT8pJC8sXG4gICAgSEhNTVNTOiAvXihcXGR7Mn0pOj8oXFxkezJ9KTo/KFxcZHsyfShbLixdXFxkKik/KSQvLFxuICAgIC8vIHRpbWUgem9uZSB0b2tlbnMgKHRvIGlkZW50aWZ5IHRoZSBwcmVzZW5jZSBvZiBhIHR6KVxuICAgIHRpbWVab25lOiB0elBhdHRlcm4sXG59O1xuLyoqXG4gKiBAbmFtZSB0b0RhdGVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgQ29udmVydCB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4gaW5zdGFuY2Ugb2YgRGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIENvbnZlcnQgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuIGluc3RhbmNlIG9mIERhdGUuXG4gKlxuICogSWYgdGhlIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIERhdGUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGl0cyBjbG9uZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgYSBudW1iZXIsIGl0IGlzIHRyZWF0ZWQgYXMgYSB0aW1lc3RhbXAuXG4gKlxuICogSWYgYW4gYXJndW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBmdW5jdGlvbiB0cmllcyB0byBwYXJzZSBpdC5cbiAqIEZ1bmN0aW9uIGFjY2VwdHMgY29tcGxldGUgSVNPIDg2MDEgZm9ybWF0cyBhcyB3ZWxsIGFzIHBhcnRpYWwgaW1wbGVtZW50YXRpb25zLlxuICogSVNPIDg2MDE6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDFcbiAqIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgcGFyc2UgdGhlIHN0cmluZyBvciB0aGUgdmFsdWVzIGFyZSBpbnZhbGlkLCBpdCByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiBJZiB0aGUgYXJndW1lbnQgaXMgbm9uZSBvZiB0aGUgYWJvdmUsIHRoZSBmdW5jdGlvbiByZXR1cm5zIEludmFsaWQgRGF0ZS5cbiAqXG4gKiAqKk5vdGUqKjogKmFsbCogRGF0ZSBhcmd1bWVudHMgcGFzc2VkIHRvIGFueSAqZGF0ZS1mbnMqIGZ1bmN0aW9uIGlzIHByb2Nlc3NlZCBieSBgdG9EYXRlYC5cbiAqIEFsbCAqZGF0ZS1mbnMqIGZ1bmN0aW9ucyB3aWxsIHRocm93IGBSYW5nZUVycm9yYCBpZiBgb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzYCBpcyBub3QgMCwgMSwgMiBvciB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIGFyZ3VtZW50IHRoZSB2YWx1ZSB0byBjb252ZXJ0XG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gdGhlIGFkZGl0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgZXh0ZW5kZWQgeWVhciBmb3JtYXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50aW1lWm9uZT0nJ10gLSB1c2VkIHRvIHNwZWNpZnkgdGhlIElBTkEgdGltZSB6b25lIG9mZnNldCBvZiBhIGRhdGUgU3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHRoZSBwYXJzZWQgZGF0ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IDEgYXJndW1lbnQgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcyMDE0LTAyLTExVDExOjMwOjMwJyB0byBkYXRlOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKCcyMDE0LTAyLTExVDExOjMwOjMwJylcbiAqIC8vPT4gVHVlIEZlYiAxMSAyMDE0IDExOjMwOjMwXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbnZlcnQgc3RyaW5nICcrMDIwMTQxMDEnIHRvIGRhdGUsXG4gKiAvLyBpZiB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBleHRlbmRlZCB5ZWFyIGZvcm1hdCBpcyAxOlxuICogY29uc3QgcmVzdWx0ID0gdG9EYXRlKCcrMDIwMTQxMDEnLCB7YWRkaXRpb25hbERpZ2l0czogMX0pXG4gKiAvLz0+IEZyaSBBcHIgMTEgMjAxNCAwMDowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgJyArIGFyZ3VtZW50cy5sZW5ndGggKyAnIHByZXNlbnQnKTtcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgIH1cbiAgICBjb25zdCBhZGRpdGlvbmFsRGlnaXRzID0gb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzID09IG51bGwgPyBERUZBVUxUX0FERElUSU9OQUxfRElHSVRTIDogTnVtYmVyKG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0cyk7XG4gICAgaWYgKGFkZGl0aW9uYWxEaWdpdHMgIT09IDIgJiYgYWRkaXRpb25hbERpZ2l0cyAhPT0gMSAmJiBhZGRpdGlvbmFsRGlnaXRzICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhZGRpdGlvbmFsRGlnaXRzIG11c3QgYmUgMCwgMSBvciAyJyk7XG4gICAgfVxuICAgIC8vIENsb25lIHRoZSBkYXRlXG4gICAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBEYXRlXScpKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdGhlIGRhdGUgdG8gbG9zZSB0aGUgbWlsbGlzZWNvbmRzIHdoZW4gcGFzc2VkIHRvIG5ldyBEYXRlKCkgaW4gSUUxMFxuICAgICAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQuZ2V0VGltZSgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpID09PSAnW29iamVjdCBOdW1iZXJdJykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoYXJndW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmICghKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCkgPT09ICdbb2JqZWN0IFN0cmluZ10nKSkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpO1xuICAgIGNvbnN0IHsgeWVhciwgcmVzdERhdGVTdHJpbmcgfSA9IHBhcnNlWWVhcihkYXRlU3RyaW5ncy5kYXRlLCBhZGRpdGlvbmFsRGlnaXRzKTtcbiAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHJlc3REYXRlU3RyaW5nLCB5ZWFyKTtcbiAgICBpZiAoZGF0ZSA9PT0gbnVsbCB8fCBpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxuICAgIGlmIChkYXRlKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuICAgICAgICBsZXQgdGltZSA9IDA7XG4gICAgICAgIGxldCBvZmZzZXQ7XG4gICAgICAgIGlmIChkYXRlU3RyaW5ncy50aW1lKSB7XG4gICAgICAgICAgICB0aW1lID0gcGFyc2VUaW1lKGRhdGVTdHJpbmdzLnRpbWUpO1xuICAgICAgICAgICAgaWYgKHRpbWUgPT09IG51bGwgfHwgaXNOYU4odGltZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZVN0cmluZ3MudGltZVpvbmUgfHwgb3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgICAgICAgb2Zmc2V0ID0gdHpQYXJzZVRpbWV6b25lKGRhdGVTdHJpbmdzLnRpbWVab25lIHx8IG9wdGlvbnMudGltZVpvbmUsIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUpKTtcbiAgICAgICAgICAgIGlmIChpc05hTihvZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBnZXQgb2Zmc2V0IGFjY3VyYXRlIHRvIGhvdXIgaW4gdGltZSB6b25lcyB0aGF0IGNoYW5nZSBvZmZzZXRcbiAgICAgICAgICAgIG9mZnNldCA9IGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobmV3IERhdGUodGltZXN0YW1wICsgdGltZSkpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhuZXcgRGF0ZSh0aW1lc3RhbXAgKyB0aW1lICsgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCArIHRpbWUgKyBvZmZzZXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgfVxufVxuZnVuY3Rpb24gc3BsaXREYXRlU3RyaW5nKGRhdGVTdHJpbmcpIHtcbiAgICBjb25zdCBkYXRlU3RyaW5ncyA9IHt9O1xuICAgIGxldCBwYXJ0cyA9IHBhdHRlcm5zLmRhdGVUaW1lUGF0dGVybi5leGVjKGRhdGVTdHJpbmcpO1xuICAgIGxldCB0aW1lU3RyaW5nO1xuICAgIGlmICghcGFydHMpIHtcbiAgICAgICAgcGFydHMgPSBwYXR0ZXJucy5kYXRlUGF0dGVybi5leGVjKGRhdGVTdHJpbmcpO1xuICAgICAgICBpZiAocGFydHMpIHtcbiAgICAgICAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBwYXJ0c1sxXTtcbiAgICAgICAgICAgIHRpbWVTdHJpbmcgPSBwYXJ0c1syXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBudWxsO1xuICAgICAgICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBwYXJ0c1sxXTtcbiAgICAgICAgdGltZVN0cmluZyA9IHBhcnRzWzNdO1xuICAgIH1cbiAgICBpZiAodGltZVN0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWVab25lLmV4ZWModGltZVN0cmluZyk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgJycpO1xuICAgICAgICAgICAgZGF0ZVN0cmluZ3MudGltZVpvbmUgPSB0b2tlblsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlU3RyaW5ncy50aW1lID0gdGltZVN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0ZVN0cmluZ3M7XG59XG5mdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykge1xuICAgIGlmIChkYXRlU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5ZWVkgPSBwYXR0ZXJucy5ZWVlbYWRkaXRpb25hbERpZ2l0c107XG4gICAgICAgIGNvbnN0IHBhdHRlcm5ZWVlZWSA9IHBhdHRlcm5zLllZWVlZW2FkZGl0aW9uYWxEaWdpdHNdO1xuICAgICAgICAvLyBZWVlZIG9yIMKxWVlZWVlcbiAgICAgICAgbGV0IHRva2VuID0gcGF0dGVybnMuWVlZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVlZWS5leGVjKGRhdGVTdHJpbmcpO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJTdHJpbmcgPSB0b2tlblsxXTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeWVhcjogcGFyc2VJbnQoeWVhclN0cmluZywgMTApLFxuICAgICAgICAgICAgICAgIHJlc3REYXRlU3RyaW5nOiBkYXRlU3RyaW5nLnNsaWNlKHllYXJTdHJpbmcubGVuZ3RoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gWVkgb3IgwrFZWVlcbiAgICAgICAgdG9rZW4gPSBwYXR0ZXJucy5ZWS5leGVjKGRhdGVTdHJpbmcpIHx8IHBhdHRlcm5ZWVkuZXhlYyhkYXRlU3RyaW5nKTtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBjZW50dXJ5U3RyaW5nID0gdG9rZW5bMV07XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHllYXI6IHBhcnNlSW50KGNlbnR1cnlTdHJpbmcsIDEwKSAqIDEwMCxcbiAgICAgICAgICAgICAgICByZXN0RGF0ZVN0cmluZzogZGF0ZVN0cmluZy5zbGljZShjZW50dXJ5U3RyaW5nLmxlbmd0aCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCB5ZWFyXG4gICAgcmV0dXJuIHtcbiAgICAgICAgeWVhcjogbnVsbCxcbiAgICB9O1xufVxuZnVuY3Rpb24gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIHllYXIpIHtcbiAgICAvLyBJbnZhbGlkIElTTy1mb3JtYXR0ZWQgeWVhclxuICAgIGlmICh5ZWFyID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgZGF0ZTtcbiAgICBsZXQgbW9udGg7XG4gICAgbGV0IHdlZWs7XG4gICAgLy8gWVlZWVxuICAgIGlmICghZGF0ZVN0cmluZyB8fCAhZGF0ZVN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIpO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gICAgLy8gWVlZWS1NTVxuICAgIGxldCB0b2tlbiA9IHBhdHRlcm5zLk1NLmV4ZWMoZGF0ZVN0cmluZyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgwKTtcbiAgICAgICAgbW9udGggPSBwYXJzZUludCh0b2tlblsxXSwgMTApIC0gMTtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZURhdGUoeWVhciwgbW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIC8vIFlZWVktREREIG9yIFlZWVlERERcbiAgICB0b2tlbiA9IHBhdHRlcm5zLkRERC5leGVjKGRhdGVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoMCk7XG4gICAgICAgIGNvbnN0IGRheU9mWWVhciA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCk7XG4gICAgICAgIGlmICghdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeWVhciwgMCwgZGF5T2ZZZWFyKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIC8vIHl5eXktTU0tZGQgb3IgWVlZWU1NRERcbiAgICB0b2tlbiA9IHBhdHRlcm5zLk1NREQuZXhlYyhkYXRlU3RyaW5nKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgICAgICBtb250aCA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludCh0b2tlblsyXSwgMTApO1xuICAgICAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIC8vIFlZWVktV3d3IG9yIFlZWVlXd3dcbiAgICB0b2tlbiA9IHBhdHRlcm5zLld3dy5leGVjKGRhdGVTdHJpbmcpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgICB3ZWVrID0gcGFyc2VJbnQodG9rZW5bMV0sIDEwKSAtIDE7XG4gICAgICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh3ZWVrKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRheU9mSVNPV2Vla1llYXIoeWVhciwgd2Vlayk7XG4gICAgfVxuICAgIC8vIFlZWVktV3d3LUQgb3IgWVlZWVd3d0RcbiAgICB0b2tlbiA9IHBhdHRlcm5zLld3d0QuZXhlYyhkYXRlU3RyaW5nKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgd2VlayA9IHBhcnNlSW50KHRva2VuWzFdLCAxMCkgLSAxO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZUludCh0b2tlblsyXSwgMTApIC0gMTtcbiAgICAgICAgaWYgKCF2YWxpZGF0ZVdlZWtEYXRlKHdlZWssIGRheU9mV2VlaykpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7XG4gICAgfVxuICAgIC8vIEludmFsaWQgSVNPLWZvcm1hdHRlZCBkYXRlXG4gICAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykge1xuICAgIGxldCBob3VycztcbiAgICBsZXQgbWludXRlcztcbiAgICAvLyBoaFxuICAgIGxldCB0b2tlbiA9IHBhdHRlcm5zLkhILmV4ZWModGltZVN0cmluZyk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGhvdXJzID0gcGFyc2VGbG9hdCh0b2tlblsxXS5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVI7XG4gICAgfVxuICAgIC8vIGhoOm1tIG9yIGhobW1cbiAgICB0b2tlbiA9IHBhdHRlcm5zLkhITU0uZXhlYyh0aW1lU3RyaW5nKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApO1xuICAgICAgICBtaW51dGVzID0gcGFyc2VGbG9hdCh0b2tlblsyXS5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGhvdXJzICUgMjQpICogTUlMTElTRUNPTkRTX0lOX0hPVVIgKyBtaW51dGVzICogTUlMTElTRUNPTkRTX0lOX01JTlVURTtcbiAgICB9XG4gICAgLy8gaGg6bW06c3Mgb3IgaGhtbXNzXG4gICAgdG9rZW4gPSBwYXR0ZXJucy5ISE1NU1MuZXhlYyh0aW1lU3RyaW5nKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgaG91cnMgPSBwYXJzZUludCh0b2tlblsxXSwgMTApO1xuICAgICAgICBtaW51dGVzID0gcGFyc2VJbnQodG9rZW5bMl0sIDEwKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlRmxvYXQodG9rZW5bM10ucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICBpZiAoIXZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChob3VycyAlIDI0KSAqIE1JTExJU0VDT05EU19JTl9IT1VSICsgbWludXRlcyAqIE1JTExJU0VDT05EU19JTl9NSU5VVEUgKyBzZWNvbmRzICogMTAwMDtcbiAgICB9XG4gICAgLy8gSW52YWxpZCBJU08tZm9ybWF0dGVkIHRpbWVcbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGRheU9mSVNPV2Vla1llYXIoaXNvV2Vla1llYXIsIHdlZWssIGRheSkge1xuICAgIHdlZWsgPSB3ZWVrIHx8IDA7XG4gICAgZGF5ID0gZGF5IHx8IDA7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDApO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoaXNvV2Vla1llYXIsIDAsIDQpO1xuICAgIGNvbnN0IGZvdXJ0aE9mSmFudWFyeURheSA9IGRhdGUuZ2V0VVRDRGF5KCkgfHwgNztcbiAgICBjb25zdCBkaWZmID0gd2VlayAqIDcgKyBkYXkgKyAxIC0gZm91cnRoT2ZKYW51YXJ5RGF5O1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIGRpZmYpO1xuICAgIHJldHVybiBkYXRlO1xufVxuLy8gVmFsaWRhdGlvbiBmdW5jdGlvbnNcbmNvbnN0IERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07XG5jb25zdCBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFszMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcbmZ1bmN0aW9uIGlzTGVhcFllYXJJbmRleCh5ZWFyKSB7XG4gICAgcmV0dXJuIHllYXIgJSA0MDAgPT09IDAgfHwgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXRlKSB7XG4gICAgaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRhdGUgIT0gbnVsbCkge1xuICAgICAgICBpZiAoZGF0ZSA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0xlYXBZZWFyID0gaXNMZWFwWWVhckluZGV4KHllYXIpO1xuICAgICAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXRlID4gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0xlYXBZZWFyICYmIGRhdGUgPiBEQVlTX0lOX01PTlRIW21vbnRoXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikge1xuICAgIGlmIChkYXlPZlllYXIgPCAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXNMZWFwWWVhciA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTtcbiAgICBpZiAoaXNMZWFwWWVhciAmJiBkYXlPZlllYXIgPiAzNjYpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWlzTGVhcFllYXIgJiYgZGF5T2ZZZWFyID4gMzY1KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKHdlZWssIGRheSkge1xuICAgIGlmICh3ZWVrIDwgMCB8fCB3ZWVrID4gNTIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGF5ICE9IG51bGwgJiYgKGRheSA8IDAgfHwgZGF5ID4gNikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHZhbGlkYXRlVGltZShob3VycywgbWludXRlcywgc2Vjb25kcykge1xuICAgIGlmIChob3VycyA8IDAgfHwgaG91cnMgPj0gMjUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobWludXRlcyAhPSBudWxsICYmIChtaW51dGVzIDwgMCB8fCBtaW51dGVzID49IDYwKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzZWNvbmRzICE9IG51bGwgJiYgKHNlY29uZHMgPCAwIHx8IHNlY29uZHMgPj0gNjApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgeyBmb3JtYXQgYXMgZGF0ZUZuc0Zvcm1hdCB9IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCc7XG5pbXBvcnQgeyBmb3JtYXR0ZXJzIH0gZnJvbSAnLi9mb3JtYXR0ZXJzL2luZGV4LmpzJztcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gJy4uL3RvRGF0ZS9pbmRleC5qcyc7XG5jb25zdCB0ekZvcm1hdHRpbmdUb2tlbnNSZWdFeHAgPSAvKFt4WE96XSspfCcnfCcoJyd8W14nXSkrKCd8JCkvZztcbi8qKlxuICogQG5hbWUgZm9ybWF0XG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEZvcm1hdCB0aGUgZGF0ZS5cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFJldHVybiB0aGUgZm9ybWF0dGVkIGRhdGUgc3RyaW5nIGluIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSByZXN1bHQgbWF5IGNvbnN0eSBieSBsb2NhbGUuXG4gKlxuICogPiDimqDvuI8gUGxlYXNlIG5vdGUgdGhhdCB0aGUgYGZvcm1hdGAgdG9rZW5zIGRpZmZlciBmcm9tIE1vbWVudC5qcyBhbmQgb3RoZXIgbGlicmFyaWVzLlxuICogPiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKlxuICogVGhlIGNoYXJhY3RlcnMgd3JhcHBlZCBiZXR3ZWVuIHR3byBzaW5nbGUgcXVvdGVzIGNoYXJhY3RlcnMgKCcpIGFyZSBlc2NhcGVkLlxuICogVHdvIHNpbmdsZSBxdW90ZXMgaW4gYSByb3csIHdoZXRoZXIgaW5zaWRlIG9yIG91dHNpZGUgYSBxdW90ZWQgc2VxdWVuY2UsIHJlcHJlc2VudCBhICdyZWFsJyBzaW5nbGUgcXVvdGUuXG4gKiAoc2VlIHRoZSBsYXN0IGV4YW1wbGUpXG4gKlxuICogRm9ybWF0IG9mIHRoZSBzdHJpbmcgaXMgYmFzZWQgb24gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogaHR0cHM6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjM1L3RyMzUtZGF0ZXMuaHRtbCNEYXRlX0ZpZWxkX1N5bWJvbF9UYWJsZVxuICogd2l0aCBhIGZldyBhZGRpdGlvbnMgKHNlZSBub3RlIDcgYmVsb3cgdGhlIHRhYmxlKS5cbiAqXG4gKiBBY2NlcHRlZCBwYXR0ZXJuczpcbiAqIHwgVW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhdHRlcm4gfCBSZXN1bHQgZXhhbXBsZXMgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tfFxuICogfCBFcmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRy4uR0dHICB8IEFELCBCQyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdHR0cgICAgfCBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdCAgICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHR0dHRyAgIHwgQSwgQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCBDYWxlbmRhciB5ZWFyICAgICAgICAgICAgICAgICAgIHwgeSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHlvICAgICAgfCA0NHRoLCAxc3QsIDB0aCwgMTd0aCAgICAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeXl5ICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHl5eXkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5eXl5eSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBMb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyICAgICAgIHwgWSAgICAgICB8IDQ0LCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlvICAgICAgfCA0NHRoLCAxc3QsIDE5MDB0aCwgMjAxN3RoICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWSAgICAgIHwgNDQsIDAxLCAwMCwgMTcgICAgICAgICAgICAgICAgICAgIHwgNSw4ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWVlZICAgICB8IDA0NCwgMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFlZWVkgICAgfCAwMDQ0LCAwMDAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgfCA1LDggICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBZWVlZWSAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw1ICAgfFxuICogfCBJU08gd2Vlay1udW1iZXJpbmcgeWVhciAgICAgICAgIHwgUiAgICAgICB8IC00MywgMCwgMSwgMTkwMCwgMjAxNyAgICAgICAgICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSICAgICAgfCAtNDMsIDAwLCAwMSwgMTkwMCwgMjAxNyAgICAgICAgICAgfCA1LDcgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSUlIgICAgIHwgLTA0MywgMDAwLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgIHwgNSw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUlJSUiAgICB8IC0wMDQzLCAwMDAwLCAwMDAxLCAxOTAwLCAyMDE3ICAgICB8IDUsNyAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJSUlJSICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDUsNyB8XG4gKiB8IEV4dGVuZGVkIHllYXIgICAgICAgICAgICAgICAgICAgfCB1ICAgICAgIHwgLTQzLCAwLCAxLCAxOTAwLCAyMDE3ICAgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXUgICAgICB8IC00MywgMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgICB8IDUgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1dSAgICAgfCAtMDQzLCAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgICAgfCA1ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1dXV1ICAgIHwgLTAwNDMsIDAwMDEsIDE5MDAsIDIwMTcgICAgICAgICAgIHwgNSAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXV1dXUgICB8IC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNSAgIHxcbiAqIHwgUXVhcnRlciAoZm9ybWF0dGluZykgICAgICAgICAgICB8IFEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFFRUSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRUVFRICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVFRUVEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgUXVhcnRlciAoc3RhbmQtYWxvbmUpICAgICAgICAgICB8IHEgICAgICAgfCAxLCAyLCAzLCA0ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxbyAgICAgIHwgMXN0LCAybmQsIDNyZCwgNHRoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXEgICAgICB8IDAxLCAwMiwgMDMsIDA0ICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHFxcSAgICAgfCBRMSwgUTIsIFEzLCBRNCAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxcXFxICAgIHwgMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcXFxcXEgICB8IDEsIDIsIDMsIDQgICAgICAgICAgICAgICAgICAgICAgICB8IDQgICAgIHxcbiAqIHwgTW9udGggKGZvcm1hdHRpbmcpICAgICAgICAgICAgICB8IE0gICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU0gICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1NTSAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNTU1NICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTU1NTU0gICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTW9udGggKHN0YW5kLWFsb25lKSAgICAgICAgICAgICB8IEwgICAgICAgfCAxLCAyLCAuLi4sIDEyICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTJ0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTEwgICAgICB8IDAxLCAwMiwgLi4uLCAxMiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExMTCAgICAgfCBKYW4sIEZlYiwgLi4uLCBEZWMgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMTExMICAgIHwgSmFudWFyeSwgRmVicnVhcnksIC4uLiwgRGVjZW1iZXIgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTExMTEwgICB8IEosIEYsIC4uLiwgRCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTG9jYWwgd2VlayBvZiB5ZWFyICAgICAgICAgICAgICB8IHcgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3byAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd3cgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIHdlZWsgb2YgeWVhciAgICAgICAgICAgICAgICB8IEkgICAgICAgfCAxLCAyLCAuLi4sIDUzICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgNTN0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSUkgICAgICB8IDAxLCAwMiwgLi4uLCA1MyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgRGF5IG9mIG1vbnRoICAgICAgICAgICAgICAgICAgICB8IGQgICAgICAgfCAxLCAyLCAuLi4sIDMxICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzFzdCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGQgICAgICB8IDAxLCAwMiwgLi4uLCAzMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRGF5IG9mIHllYXIgICAgICAgICAgICAgICAgICAgICB8IEQgICAgICAgfCAxLCAyLCAuLi4sIDM2NSwgMzY2ICAgICAgICAgICAgICAgfCA4ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMzY1dGgsIDM2NnRoICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgREQgICAgICB8IDAxLCAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgICB8IDggICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERERCAgICAgfCAwMDEsIDAwMiwgLi4uLCAzNjUsIDM2NiAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEREREICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyAgICAgfFxuICogfCBEYXkgb2Ygd2VlayAoZm9ybWF0dGluZykgICAgICAgIHwgRS4uRUVFICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3UgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVFRUUgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFRUVFRSAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRUVFRUVFICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU3UsIFNhICAgICAgICB8ICAgICAgIHxcbiAqIHwgSVNPIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgICB8IGkgICAgICAgfCAxLCAyLCAzLCAuLi4sIDcgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgN3RoICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWkgICAgICB8IDAxLCAwMiwgLi4uLCAwNyAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaSAgICAgfCBNb24sIFR1ZSwgV2VkLCAuLi4sIFN1ICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpaWlpICAgIHwgTW9uZGF5LCBUdWVzZGF5LCAuLi4sIFN1bmRheSAgICAgIHwgMiw3ICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaWlpaWkgICB8IE0sIFQsIFcsIFQsIEYsIFMsIFMgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlpaWlpaSAgfCBNbywgVHUsIFdlLCBUaCwgRnIsIFN1LCBTYSAgICAgICAgfCA3ICAgICB8XG4gKiB8IExvY2FsIGRheSBvZiB3ZWVrIChmb3JtYXR0aW5nKSAgfCBlICAgICAgIHwgMiwgMywgNCwgLi4uLCAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW8gICAgICB8IDJuZCwgM3JkLCAuLi4sIDFzdCAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlICAgICAgfCAwMiwgMDMsIC4uLiwgMDEgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWUgICAgIHwgTW9uLCBUdWUsIFdlZCwgLi4uLCBTdSAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWVlZSAgICB8IE1vbmRheSwgVHVlc2RheSwgLi4uLCBTdW5kYXkgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVlZWVlICAgfCBNLCBULCBXLCBULCBGLCBTLCBTICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlZWVlZWUgIHwgTW8sIFR1LCBXZSwgVGgsIEZyLCBTdSwgU2EgICAgICAgIHwgICAgICAgfFxuICogfCBMb2NhbCBkYXkgb2Ygd2VlayAoc3RhbmQtYWxvbmUpIHwgYyAgICAgICB8IDIsIDMsIDQsIC4uLiwgMSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvICAgICAgfCAybmQsIDNyZCwgLi4uLCAxc3QgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYyAgICAgIHwgMDIsIDAzLCAuLi4sIDAxICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjICAgICB8IE1vbiwgVHVlLCBXZWQsIC4uLiwgU3UgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjY2MgICAgfCBNb25kYXksIFR1ZXNkYXksIC4uLiwgU3VuZGF5ICAgICAgfCAyICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY2NjYyAgIHwgTSwgVCwgVywgVCwgRiwgUywgUyAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NjY2NjICB8IE1vLCBUdSwgV2UsIFRoLCBGciwgU3UsIFNhICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEuLmFhYSAgfCBBTSwgUE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhYWFhICAgIHwgYS5tLiwgcC5tLiAgICAgICAgICAgICAgICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWFhYWEgICB8IGEsIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgQU0sIFBNLCBub29uLCBtaWRuaWdodCAgICAgICAgICB8IGIuLmJiYiAgfCBBTSwgUE0sIG5vb24sIG1pZG5pZ2h0ICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYmJiICAgIHwgYS5tLiwgcC5tLiwgbm9vbiwgbWlkbmlnaHQgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmJiYmIgICB8IGEsIHAsIG4sIG1pICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRmxleGlibGUgZGF5IHBlcmlvZCAgICAgICAgICAgICB8IEIuLkJCQiAgfCBhdCBuaWdodCwgaW4gdGhlIG1vcm5pbmcsIC4uLiAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCQkJCICAgIHwgYXQgbmlnaHQsIGluIHRoZSBtb3JuaW5nLCAuLi4gICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQkJCQkIgICB8IGF0IG5pZ2h0LCBpbiB0aGUgbW9ybmluZywgLi4uICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0xMl0gICAgICAgICAgICAgICAgICAgICB8IGggICAgICAgfCAxLCAyLCAuLi4sIDExLCAxMiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBobyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMTJ0aCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGggICAgICB8IDAxLCAwMiwgLi4uLCAxMSwgMTIgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0yM10gICAgICAgICAgICAgICAgICAgICB8IEggICAgICAgfCAwLCAxLCAyLCAuLi4sIDIzICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIbyAgICAgIHwgMHRoLCAxc3QsIDJuZCwgLi4uLCAyM3JkICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEggICAgICB8IDAwLCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMC0xMV0gICAgICAgICAgICAgICAgICAgICB8IEsgICAgICAgfCAxLCAyLCAuLi4sIDExLCAwICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBLbyAgICAgIHwgMXN0LCAybmQsIC4uLiwgMTF0aCwgMHRoICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgS0sgICAgICB8IDEsIDIsIC4uLiwgMTEsIDAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgSG91ciBbMS0yNF0gICAgICAgICAgICAgICAgICAgICB8IGsgICAgICAgfCAyNCwgMSwgMiwgLi4uLCAyMyAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrbyAgICAgIHwgMjR0aCwgMXN0LCAybmQsIC4uLiwgMjNyZCAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2sgICAgICB8IDI0LCAwMSwgMDIsIC4uLiwgMjMgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgTWludXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IG0gICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW0gICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgU2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgfCAwLCAxLCAuLi4sIDU5ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbyAgICAgIHwgMHRoLCAxc3QsIC4uLiwgNTl0aCAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3MgICAgICB8IDAwLCAwMSwgLi4uLCA1OSAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgRnJhY3Rpb24gb2Ygc2Vjb25kICAgICAgICAgICAgICB8IFMgICAgICAgfCAwLCAxLCAuLi4sIDkgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTUyAgICAgIHwgMDAsIDAxLCAuLi4sIDk5ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1NTICAgICB8IDAwMCwgMDAwMSwgLi4uLCA5OTkgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNTU1MgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzICAgICB8XG4gKiB8IFRpbWV6b25lIChJU08tODYwMSB3LyBaKSAgICAgICAgfCBYICAgICAgIHwgLTA4LCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFggICAgICB8IC0wODAwLCArMDUzMCwgWiAgICAgICAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFhYWCAgICAgfCAtMDg6MDAsICswNTozMCwgWiAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBYWFhYICAgIHwgLTA4MDAsICswNTMwLCBaLCArMTIzNDU2ICAgICAgICAgIHwgMiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWFhYWFggICB8IC0wODowMCwgKzA1OjMwLCBaLCArMTI6MzQ6NTYgICAgICB8ICAgICAgIHxcbiAqIHwgVGltZXpvbmUgKElTTy04NjAxIHcvbyBaKSAgICAgICB8IHggICAgICAgfCAtMDgsICswNTMwLCArMDAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eCAgICAgIHwgLTA4MDAsICswNTMwLCArMDAwMCAgICAgICAgICAgICAgIHwgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeHh4ICAgICB8IC0wODowMCwgKzA1OjMwLCArMDA6MDAgICAgICAgICAgICB8IDIgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHh4eHggICAgfCAtMDgwMCwgKzA1MzAsICswMDAwLCArMTIzNDU2ICAgICAgfCAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4eHh4eCAgIHwgLTA4OjAwLCArMDU6MzAsICswMDowMCwgKzEyOjM0OjU2IHwgICAgICAgfFxuICogfCBUaW1lem9uZSAoR01UKSAgICAgICAgICAgICAgICAgIHwgTy4uLk9PTyB8IEdNVC04LCBHTVQrNTozMCwgR01UKzAgICAgICAgICAgICB8ICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE9PT08gICAgfCBHTVQtMDg6MDAsIEdNVCswNTozMCwgR01UKzAwOjAwICAgfCAyICAgICB8XG4gKiB8IFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXQuKSAgfCB6Li4uenp6IHwgUERULCBFU1QsIENFU1QgICAgICAgICAgICAgICAgICAgIHwgNiAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgenp6eiAgICB8IFBhY2lmaWMgRGF5bGlnaHQgVGltZSAgICAgICAgICAgICB8IDIsNiAgIHxcbiAqIHwgU2Vjb25kcyB0aW1lc3RhbXAgICAgICAgICAgICAgICB8IHQgICAgICAgfCA1MTI5Njk1MjAgICAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0dCAgICAgIHwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMyw3ICAgfFxuICogfCBNaWxsaXNlY29uZHMgdGltZXN0YW1wICAgICAgICAgIHwgVCAgICAgICB8IDUxMjk2OTUyMDkwMCAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRUICAgICAgfCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzLDcgICB8XG4gKiB8IExvbmcgbG9jYWxpemVkIGRhdGUgICAgICAgICAgICAgfCBQICAgICAgIHwgMDUvMjkvMTQ1MyAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFAgICAgICB8IE1heSAyOSwgMTQ1MyAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUCAgICAgfCBNYXkgMjl0aCwgMTQ1MyAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUFBQICAgIHwgU3VuZGF5LCBNYXkgMjl0aCwgMTQ1MyAgICAgICAgICAgIHwgMiw3ICAgfFxuICogfCBMb25nIGxvY2FsaXplZCB0aW1lICAgICAgICAgICAgIHwgcCAgICAgICB8IDEyOjAwIEFNICAgICAgICAgICAgICAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBwICAgICAgfCAxMjowMDowMCBBTSAgICAgICAgICAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcHAgICAgIHwgMTI6MDA6MDAgQU0gR01UKzIgICAgICAgICAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHBwcCAgICB8IDEyOjAwOjAwIEFNIEdNVCswMjowMCAgICAgICAgICAgICB8IDIsNyAgIHxcbiAqIHwgQ29tYmluYXRpb24gb2YgZGF0ZSBhbmQgdGltZSAgICB8IFBwICAgICAgfCAwNS8yOS8xNDUzLCAxMjowMCBBTSAgICAgICAgICAgICAgfCA3ICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQUHBwICAgIHwgTWF5IDI5LCAxNDUzLCAxMjowMDowMCBBTSAgICAgICAgIHwgNyAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUFBQcHBwICB8IE1heSAyOXRoLCAxNDUzIGF0IC4uLiAgICAgICAgICAgICB8IDcgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBQUFBwcHBwfCBTdW5kYXksIE1heSAyOXRoLCAxNDUzIGF0IC4uLiAgICAgfCAyLDcgICB8XG4gKiBOb3RlczpcbiAqIDEuIFwiRm9ybWF0dGluZ1wiIHVuaXRzIChlLmcuIGZvcm1hdHRpbmcgcXVhcnRlcikgaW4gdGhlIGRlZmF1bHQgZW4tVVMgbG9jYWxlXG4gKiAgICBhcmUgdGhlIHNhbWUgYXMgXCJzdGFuZC1hbG9uZVwiIHVuaXRzLCBidXQgYXJlIGRpZmZlcmVudCBpbiBzb21lIGxhbmd1YWdlcy5cbiAqICAgIFwiRm9ybWF0dGluZ1wiIHVuaXRzIGFyZSBkZWNsaW5lZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsYW5ndWFnZVxuICogICAgaW4gdGhlIGNvbnRleHQgb2YgYSBkYXRlLiBcIlN0YW5kLWFsb25lXCIgdW5pdHMgYXJlIGFsd2F5cyBub21pbmF0aXZlIHNpbmd1bGFyOlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTExMTCcsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWQnYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnZG8gTU1NTScsIHtsb2NhbGU6IGNzfSkgLy89PiAnNi4gbGlzdG9wYWR1J2BcbiAqXG4gKiAyLiBBbnkgc2VxdWVuY2Ugb2YgdGhlIGlkZW50aWNhbCBsZXR0ZXJzIGlzIGEgcGF0dGVybiwgdW5sZXNzIGl0IGlzIGVzY2FwZWQgYnlcbiAqICAgIHRoZSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycyAoc2VlIGJlbG93KS5cbiAqICAgIElmIHRoZSBzZXF1ZW5jZSBpcyBsb25nZXIgdGhhbiBsaXN0ZWQgaW4gdGFibGUgKGUuZy4gYEVFRUVFRUVFRUVFYClcbiAqICAgIHRoZSBvdXRwdXQgd2lsbCBiZSB0aGUgc2FtZSBhcyBkZWZhdWx0IHBhdHRlcm4gZm9yIHRoaXMgdW5pdCwgdXN1YWxseVxuICogICAgdGhlIGxvbmdlc3Qgb25lIChpbiBjYXNlIG9mIElTTyB3ZWVrZGF5cywgYEVFRUVgKS4gRGVmYXVsdCBwYXR0ZXJucyBmb3IgdW5pdHNcbiAqICAgIGFyZSBtYXJrZWQgd2l0aCBcIjJcIiBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIHRhYmxlLlxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NJykgLy89PiAnTm92J2BcbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ01NTU0nKSAvLz0+ICdOb3ZlbWJlcidgXG4gKlxuICogICAgYGZvcm1hdChuZXcgRGF0ZSgyMDE3LCAxMCwgNiksICdNTU1NTScpIC8vPT4gJ04nYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NJykgLy89PiAnTm92ZW1iZXInYFxuICpcbiAqICAgIGBmb3JtYXQobmV3IERhdGUoMjAxNywgMTAsIDYpLCAnTU1NTU1NTScpIC8vPT4gJ05vdmVtYmVyJ2BcbiAqXG4gKiAzLiBTb21lIHBhdHRlcm5zIGNvdWxkIGJlIHVubGltaXRlZCBsZW5ndGggKHN1Y2ggYXMgYHl5eXl5eXl5YCkuXG4gKiAgICBUaGUgb3V0cHV0IHdpbGwgYmUgcGFkZGVkIHdpdGggemVyb3MgdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi5cbiAqXG4gKiAgICBgZm9ybWF0KG5ldyBEYXRlKDIwMTcsIDEwLCA2KSwgJ3l5eXl5eXl5JykgLy89PiAnMDAwMDIwMTcnYFxuICpcbiAqIDQuIGBRUVFRUWAgYW5kIGBxcXFxcWAgY291bGQgYmUgbm90IHN0cmljdGx5IG51bWVyaWNhbCBpbiBzb21lIGxvY2FsZXMuXG4gKiAgICBUaGVzZSB0b2tlbnMgcmVwcmVzZW50IHRoZSBzaG9ydGVzdCBmb3JtIG9mIHRoZSBxdWFydGVyLlxuICpcbiAqIDUuIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBgeWAgYW5kIGB1YCBwYXR0ZXJucyBhcmUgQi5DLiB5ZWFyczpcbiAqXG4gKiAgICB8IFllYXIgfCBgeWAgfCBgdWAgfFxuICogICAgfC0tLS0tLXwtLS0tLXwtLS0tLXxcbiAqICAgIHwgQUMgMSB8ICAgMSB8ICAgMSB8XG4gKiAgICB8IEJDIDEgfCAgIDEgfCAgIDAgfFxuICogICAgfCBCQyAyIHwgICAyIHwgIC0xIHxcbiAqXG4gKiAgICBBbHNvIGB5eWAgYWx3YXlzIHJldHVybnMgdGhlIGxhc3QgdHdvIGRpZ2l0cyBvZiBhIHllYXIsXG4gKiAgICB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQ6XG4gKlxuICogICAgfCBZZWFyIHwgYHl5YCB8IGB1dWAgfFxuICogICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tfFxuICogICAgfCAxICAgIHwgICAwMSB8ICAgMDEgfFxuICogICAgfCAxNCAgIHwgICAxNCB8ICAgMTQgfFxuICogICAgfCAzNzYgIHwgICA3NiB8ICAzNzYgfFxuICogICAgfCAxNDUzIHwgICA1MyB8IDE0NTMgfFxuICpcbiAqICAgIFRoZSBzYW1lIGRpZmZlcmVuY2UgaXMgdHJ1ZSBmb3IgbG9jYWwgYW5kIElTTyB3ZWVrLW51bWJlcmluZyB5ZWFycyAoYFlgIGFuZCBgUmApLFxuICogICAgZXhjZXB0IGxvY2FsIHdlZWstbnVtYmVyaW5nIHllYXJzIGFyZSBkZXBlbmRlbnQgb24gYG9wdGlvbnMud2Vla1N0YXJ0c09uYFxuICogICAgYW5kIGBvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZWAgKGNvbXBhcmUgW2dldElTT1dlZWtZZWFyXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL2dldElTT1dlZWtZZWFyfVxuICogICAgYW5kIFtnZXRXZWVrWWVhcl17QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9nZXRXZWVrWWVhcn0pLlxuICpcbiAqIDYuIFNwZWNpZmljIG5vbi1sb2NhdGlvbiB0aW1lem9uZXMgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIEludGwgYnJvd3NlciBBUEkuIFRoZSBvdXRwdXQgaXMgZGV0ZXJtaW5lZCBieSB0aGVcbiAqICAgIHByZWZlcnJlZCBzdGFuZGFyZCBvZiB0aGUgY3VycmVudCBsb2NhbGUgKGVuLVVTIGJ5IGRlZmF1bHQpIHdoaWNoIG1heSBub3QgYWx3YXlzIGdpdmUgdGhlIGV4cGVjdGVkIHJlc3VsdC5cbiAqICAgIEZvciB0aGlzIHJlYXNvbiBpdCBpcyByZWNvbW1lbmRlZCB0byBzdXBwbHkgYSBgbG9jYWxlYCBpbiB0aGUgZm9ybWF0IG9wdGlvbnMgd2hlbiBmb3JtYXR0aW5nIGEgdGltZSB6b25lIG5hbWUuXG4gKlxuICogNy4gVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBpbiB0aGUgVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM1OlxuICogICAgLSBgaWA6IElTTyBkYXkgb2Ygd2Vla1xuICogICAgLSBgSWA6IElTTyB3ZWVrIG9mIHllYXJcbiAqICAgIC0gYFJgOiBJU08gd2Vlay1udW1iZXJpbmcgeWVhclxuICogICAgLSBgdGA6IHNlY29uZHMgdGltZXN0YW1wXG4gKiAgICAtIGBUYDogbWlsbGlzZWNvbmRzIHRpbWVzdGFtcFxuICogICAgLSBgb2A6IG9yZGluYWwgbnVtYmVyIG1vZGlmaWVyXG4gKiAgICAtIGBQYDogbG9uZyBsb2NhbGl6ZWQgZGF0ZVxuICogICAgLSBgcGA6IGxvbmcgbG9jYWxpemVkIHRpbWVcbiAqXG4gKiA4LiBUaGVzZSB0b2tlbnMgYXJlIG9mdGVuIGNvbmZ1c2VkIHdpdGggb3RoZXJzLiBTZWU6IGh0dHBzOi8vZ2l0LmlvL2Z4Q3lyXG4gKlxuICpcbiAqICMjIyB2Mi4wLjAgYnJlYWtpbmcgY2hhbmdlczpcbiAqXG4gKiAtIFtDaGFuZ2VzIHRoYXQgYXJlIGNvbW1vbiBmb3IgdGhlIHdob2xlXG4gKiAgIGxpYnJhcnldKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRlLWZucy9kYXRlLWZucy9ibG9iL21hc3Rlci9kb2NzL3VwZ3JhZGVHdWlkZS5tZCNDb21tb24tQ2hhbmdlcykuXG4gKlxuICogLSBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdyByZXF1aXJlZCBmb3IgdGhlIHNha2Ugb2YgZXhwbGljaXRuZXNzLlxuICpcbiAqICAgYGBgamF2YXNjcmlwdFxuICogICAvLyBCZWZvcmUgdjIuMC4wXG4gKiAgIGZvcm1hdChuZXcgRGF0ZSgyMDE2LCAwLCAxKSlcbiAqXG4gKiAgIC8vIHYyLjAuMCBvbndhcmRcbiAqICAgZm9ybWF0KG5ldyBEYXRlKDIwMTYsIDAsIDEpLCBcInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1N4eHhcIilcbiAqICAgYGBgXG4gKlxuICogLSBOZXcgZm9ybWF0IHN0cmluZyBBUEkgZm9yIGBmb3JtYXRgIGZ1bmN0aW9uXG4gKiAgIHdoaWNoIGlzIGJhc2VkIG9uIFtVbmljb2RlIFRlY2huaWNhbCBTdGFuZGFyZFxuICogICAjMzVdKGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNS90cjM1LWRhdGVzLmh0bWwjRGF0ZV9GaWVsZF9TeW1ib2xfVGFibGUpLiBTZWUgW3RoaXNcbiAqICAgcG9zdF0oaHR0cHM6Ly9ibG9nLmRhdGUtZm5zLm9yZy9wb3N0L3VuaWNvZGUtdG9rZW5zLWluLWRhdGUtZm5zLXYyLXNyZWF0eWtpOTFqZykgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiAtIENoYXJhY3RlcnMgYXJlIG5vdyBlc2NhcGVkIHVzaW5nIHNpbmdsZSBxdW90ZSBzeW1ib2xzIChgJ2ApIGluc3RlYWQgb2Ygc3F1YXJlIGJyYWNrZXRzLlxuICpcbiAqIEBwYXJhbSBkYXRlIHRoZSBvcmlnaW5hbCBkYXRlXG4gKiBAcGFyYW0gZm9ybWF0U3RyIHRoZSBzdHJpbmcgb2YgdG9rZW5zXG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgb2JqZWN0IHdpdGggb3B0aW9ucy4gU2VlIFtPcHRpb25zXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL09wdGlvbnN9XG4gKiBAcGFyYW0gezB8MXwyfSBbb3B0aW9ucy5hZGRpdGlvbmFsRGlnaXRzPTJdIC0gcGFzc2VkIHRvIGB0b0RhdGVgLiBTZWUgW3RvRGF0ZV17QGxpbmtcbiAqICAgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy90b0RhdGV9XG4gKiBAcGFyYW0gezB8MXwyfDN8NHw1fDZ9IFtvcHRpb25zLndlZWtTdGFydHNPbj0wXSAtIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrICgwIC0gU3VuZGF5KVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZT0xXSAtIHRoZSBkYXkgb2YgSmFudWFyeSwgd2hpY2ggaXNcbiAqIEBwYXJhbSB7TG9jYWxlfSBbb3B0aW9ucy5sb2NhbGU9ZGVmYXVsdExvY2FsZV0gLSB0aGUgbG9jYWxlIG9iamVjdC4gU2VlXG4gKiAgIFtMb2NhbGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvTG9jYWxlfVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5hd2FyZU9mVW5pY29kZVRva2Vucz1mYWxzZV0gLSBpZiB0cnVlLCBhbGxvd3MgdXNhZ2Ugb2YgVW5pY29kZSB0b2tlbnMgY2F1c2VzIGNvbmZ1c2lvbjpcbiAqICAgLSBTb21lIG9mIHRoZSBkYXkgb2YgeWVhciB0b2tlbnMgKGBEYCwgYEREYCkgdGhhdCBhcmUgY29uZnVzZWQgd2l0aCB0aGUgZGF5IG9mIG1vbnRoIHRva2VucyAoYGRgLCBgZGRgKS5cbiAqICAgLSBTb21lIG9mIHRoZSBsb2NhbCB3ZWVrLW51bWJlcmluZyB5ZWFyIHRva2VucyAoYFlZYCwgYFlZWVlgKSB0aGF0IGFyZSBjb25mdXNlZCB3aXRoIHRoZSBjYWxlbmRhciB5ZWFyIHRva2Vuc1xuICogICAoYHl5YCwgYHl5eXlgKS4gU2VlOiBodHRwczovL2dpdC5pby9meEN5clxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRpbWVab25lPScnXSAtIHVzZWQgdG8gc3BlY2lmeSB0aGUgSUFOQSB0aW1lIHpvbmUgb2Zmc2V0IG9mIGEgZGF0ZSBTdHJpbmcuXG4gKiBAcGFyYW0ge0RhdGV8TnVtYmVyfSBbb3B0aW9ucy5vcmlnaW5hbERhdGVdIC0gY2FuIGJlIHVzZWQgdG8gcGFzcyB0aGUgb3JpZ2luYWwgdW5tb2RpZmllZCBkYXRlIHRvIGBmb3JtYXRgIHRvXG4gKiAgIGltcHJvdmUgY29ycmVjdG5lc3Mgb2YgdGhlIHJlcGxhY2VkIHRpbWV6b25lIHRva2VuIGNsb3NlIHRvIHRoZSBEU1QgdGhyZXNob2xkLlxuICogQHRocm93cyB7VHlwZUVycm9yfSAyIGFyZ3VtZW50cyByZXF1aXJlZFxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYWRkaXRpb25hbERpZ2l0c2AgbXVzdCBiZSAwLCAxIG9yIDJcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBsb2NhbGl6ZWAgcHJvcGVydHlcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmxvY2FsZWAgbXVzdCBjb250YWluIGBmb3JtYXRMb25nYCBwcm9wZXJ0eVxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMud2Vla1N0YXJ0c09uYCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNlxuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlYCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgN1xuICogQHRocm93cyB7UmFuZ2VFcnJvcn0gYG9wdGlvbnMuYXdhcmVPZlVuaWNvZGVUb2tlbnNgIG11c3QgYmUgc2V0IHRvIGB0cnVlYCB0byB1c2UgYFhYYCB0b2tlbjsgc2VlOlxuICogICBodHRwczovL2dpdC5pby9meEN5clxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZXByZXNlbnQgMTEgRmVicnVhcnkgMjAxNCBpbiBtaWRkbGUtZW5kaWFuIGZvcm1hdDpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCAxLCAxMSksICdNTS9kZC95eXl5JylcbiAqIC8vPT4gJzAyLzExLzIwMTQnXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlcHJlc2VudCAyIEp1bHkgMjAxNCBpbiBFc3BlcmFudG86XG4gKiBpbXBvcnQgeyBlb0xvY2FsZSB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZS9lbydcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyKSwgXCJkbyAnZGUnIE1NTU0geXl5eVwiLCB7XG4gKiAgIGxvY2FsZTogZW9Mb2NhbGVcbiAqIH0pXG4gKiAvLz0+ICcyLWEgZGUganVsaW8gMjAxNCdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gRXNjYXBlIHN0cmluZyBieSBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyczpcbiAqIGNvbnN0IHJlc3VsdCA9IGZvcm1hdChuZXcgRGF0ZSgyMDE0LCA2LCAyLCAxNSksIFwiaCAnbycnY2xvY2snXCIpXG4gKiAvLz0+IFwiMyBvJ2Nsb2NrXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdChkYXRlLCBmb3JtYXRTdHIsIG9wdGlvbnMgPSB7fSkge1xuICAgIGZvcm1hdFN0ciA9IFN0cmluZyhmb3JtYXRTdHIpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBmb3JtYXRTdHIubWF0Y2godHpGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKTtcbiAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICBjb25zdCBkID0gdG9EYXRlKG9wdGlvbnMub3JpZ2luYWxEYXRlIHx8IGRhdGUsIG9wdGlvbnMpO1xuICAgICAgICAvLyBXb3JrIHRocm91Z2ggZWFjaCBtYXRjaCBhbmQgcmVwbGFjZSB0aGUgdHogdG9rZW4gaW4gdGhlIGZvcm1hdCBzdHJpbmcgd2l0aCB0aGUgcXVvdGVkXG4gICAgICAgIC8vIGZvcm1hdHRlZCB0aW1lIHpvbmUgc28gdGhlIHJlbWFpbmluZyB0b2tlbnMgY2FuIGJlIGZpbGxlZCBpbiBieSBkYXRlLWZucyNmb3JtYXQuXG4gICAgICAgIGZvcm1hdFN0ciA9IG1hdGNoZXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIHRva2VuKSB7XG4gICAgICAgICAgICBpZiAodG9rZW5bMF0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsgLy8gVGhpcyBpcyBhIHF1b3RlZCBwb3J0aW9uLCBtYXRjaGVkIG9ubHkgdG8gZW5zdXJlIHdlIGRvbid0IG1hdGNoIGluc2lkZSBpdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcG9zID0gcmVzdWx0LmluZGV4T2YodG9rZW4pO1xuICAgICAgICAgICAgY29uc3QgcHJlY2VkZWRCeVF1b3RlZFNlY3Rpb24gPSByZXN1bHRbcG9zIC0gMV0gPT09IFwiJ1wiO1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWQgPSByZXN1bHQucmVwbGFjZSh0b2tlbiwgXCInXCIgKyBmb3JtYXR0ZXJzW3Rva2VuWzBdXShkLCB0b2tlbiwgb3B0aW9ucykgKyBcIidcIik7XG4gICAgICAgICAgICAvLyBJZiB0aGUgcmVwbGFjZW1lbnQgcmVzdWx0cyBpbiB0d28gYWRqb2luaW5nIHF1b3RlZCBzdHJpbmdzLCB0aGUgYmFjayB0byBiYWNrIHF1b3Rlc1xuICAgICAgICAgICAgLy8gYXJlIHJlbW92ZWQsIHNvIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGFuIGVzY2FwZWQgcXVvdGUuXG4gICAgICAgICAgICByZXR1cm4gcHJlY2VkZWRCeVF1b3RlZFNlY3Rpb25cbiAgICAgICAgICAgICAgICA/IHJlcGxhY2VkLnN1YnN0cmluZygwLCBwb3MgLSAxKSArIHJlcGxhY2VkLnN1YnN0cmluZyhwb3MgKyAxKVxuICAgICAgICAgICAgICAgIDogcmVwbGFjZWQ7XG4gICAgICAgIH0sIGZvcm1hdFN0cik7XG4gICAgfVxuICAgIHJldHVybiBkYXRlRm5zRm9ybWF0KGRhdGUsIGZvcm1hdFN0ciwgb3B0aW9ucyk7XG59XG4iXSwibmFtZXMiOlsidHpJbnRsVGltZVpvbmVOYW1lIiwibGVuZ3RoIiwiZGF0ZSIsIm9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImdldERlZmF1bHRPcHRpb25zIiwiZHRmIiwiZ2V0RFRGIiwicGFydHNUaW1lWm9uZSIsImhhY2t5VGltZVpvbmUiLCJmb3JtYXR0ZWQiLCJpIiwidHpOYW1lTWF0Y2giLCJ0aW1lWm9uZSIsImxvY2FsZSIsInR6VG9rZW5pemVEYXRlIiwiZ2V0RGF0ZVRpbWVGb3JtYXQiLCJwYXJ0c09mZnNldCIsImhhY2t5T2Zmc2V0IiwidHlwZVRvUG9zIiwiZmlsbGVkIiwicG9zIiwiZXJyb3IiLCJwYXJzZWQiLCJkdGZDYWNoZSIsInRlc3REYXRlRm9ybWF0dGVkIiwiaG91ckN5Y2xlU3VwcG9ydGVkIiwibmV3RGF0ZVVUQyIsImZ1bGxZZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJ1dGNEYXRlIiwiTUlMTElTRUNPTkRTX0lOX0hPVVIiLCJNSUxMSVNFQ09ORFNfSU5fTUlOVVRFIiwicGF0dGVybnMiLCJ0elBhcnNlVGltZXpvbmUiLCJ0aW1lem9uZVN0cmluZyIsImlzVXRjRGF0ZSIsInRva2VuIiwiaG91cnMiLCJhYnNvbHV0ZU9mZnNldCIsInZhbGlkYXRlVGltZXpvbmUiLCJtaW51dGVzIiwiaXNWYWxpZFRpbWV6b25lSUFOQVN0cmluZyIsInRvVXRjRGF0ZSIsIm9mZnNldCIsImNhbGNPZmZzZXQiLCJmaXhPZmZzZXQiLCJ0b2tlbnMiLCJhc1VUQyIsImFzVFMiLCJvdmVyIiwidXRjR3Vlc3MiLCJvMiIsIm8zIiwidmFsaWRJQU5BVGltZXpvbmVDYWNoZSIsInRpbWVab25lU3RyaW5nIiwiZm9ybWF0dGVycyIsInRpbWV6b25lT2Zmc2V0IiwiZ2V0VGltZVpvbmVPZmZzZXQiLCJmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXMiLCJmb3JtYXRUaW1lem9uZSIsImZvcm1hdFRpbWV6b25lU2hvcnQiLCJvcmlnaW5hbERhdGUiLCJ0aW1lWm9uZU9mZnNldCIsImFkZExlYWRpbmdaZXJvcyIsIm51bWJlciIsInRhcmdldExlbmd0aCIsInNpZ24iLCJvdXRwdXQiLCJkZWxpbWl0ZXIiLCJhYnNPZmZzZXQiLCJnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIiwidHpQYXR0ZXJuIiwiREVGQVVMVF9BRERJVElPTkFMX0RJR0lUUyIsInRvRGF0ZSIsImFyZ3VtZW50IiwiYWRkaXRpb25hbERpZ2l0cyIsImRhdGVTdHJpbmdzIiwic3BsaXREYXRlU3RyaW5nIiwieWVhciIsInJlc3REYXRlU3RyaW5nIiwicGFyc2VZZWFyIiwicGFyc2VEYXRlIiwidGltZXN0YW1wIiwidGltZSIsInBhcnNlVGltZSIsImRhdGVTdHJpbmciLCJwYXJ0cyIsInRpbWVTdHJpbmciLCJwYXR0ZXJuWVlZIiwicGF0dGVybllZWVlZIiwieWVhclN0cmluZyIsImNlbnR1cnlTdHJpbmciLCJ3ZWVrIiwidmFsaWRhdGVEYXRlIiwiZGF5T2ZZZWFyIiwidmFsaWRhdGVEYXlPZlllYXJEYXRlIiwidmFsaWRhdGVXZWVrRGF0ZSIsImRheU9mSVNPV2Vla1llYXIiLCJkYXlPZldlZWsiLCJ2YWxpZGF0ZVRpbWUiLCJzZWNvbmRzIiwiaXNvV2Vla1llYXIiLCJmb3VydGhPZkphbnVhcnlEYXkiLCJkaWZmIiwiREFZU19JTl9NT05USCIsIkRBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSIiwiaXNMZWFwWWVhckluZGV4IiwiaXNMZWFwWWVhciIsInR6Rm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCIsImZvcm1hdCIsImZvcm1hdFN0ciIsIm1hdGNoZXMiLCJkIiwicmVzdWx0IiwicHJlY2VkZWRCeVF1b3RlZFNlY3Rpb24iLCJyZXBsYWNlZCIsImRhdGVGbnNGb3JtYXQiXSwibWFwcGluZ3MiOiI7O0FBTU8sU0FBU0EsRUFBbUJDLEdBQVFDLEdBQU1DLEdBQVM7QUFDdEQsUUFBTUMsSUFBaUJDLEVBQW1CLEdBQ3BDQyxJQUFNQyxFQUFPTixHQUFRRSxFQUFRLFVBQVVBLEVBQVEsVUFBVUMsRUFBZSxNQUFNO0FBQ3BGLFNBQU8sbUJBQW1CRSxJQUFNRSxFQUFjRixHQUFLSixDQUFJLElBQUlPLEVBQWNILEdBQUtKLENBQUk7QUFDdEY7QUFDQSxTQUFTTSxFQUFjRixHQUFLSixHQUFNO0FBQzlCLFFBQU1RLElBQVlKLEVBQUksY0FBY0osQ0FBSTtBQUN4QyxXQUFTUyxJQUFJRCxFQUFVLFNBQVMsR0FBR0MsS0FBSyxHQUFHLEVBQUVBO0FBQ3pDLFFBQUlELEVBQVVDLENBQUMsRUFBRSxTQUFTO0FBQ3RCLGFBQU9ELEVBQVVDLENBQUMsRUFBRTtBQUloQztBQUNBLFNBQVNGLEVBQWNILEdBQUtKLEdBQU07QUFDOUIsUUFBTVEsSUFBWUosRUFBSSxPQUFPSixDQUFJLEVBQUUsUUFBUSxXQUFXLEVBQUUsR0FDbERVLElBQWMsYUFBYSxLQUFLRixDQUFTO0FBQy9DLFNBQU9FLElBQWNBLEVBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJO0FBQ3BEO0FBR0EsU0FBU0wsRUFBT04sR0FBUVksR0FBVUMsR0FBUTtBQUN0QyxTQUFPLElBQUksS0FBSyxlQUFlQSxJQUFTLENBQUNBLEVBQU8sTUFBTSxPQUFPLElBQUksUUFBVztBQUFB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QU0rRyxJQUFhRCxFQUFnQjVCLENBQUk7QUFJdkMsUUFISTZCLEtBQWMvRyxJQUFPNkcsR0FBd0JsRixDQUFLLEtBR2xELENBQUNvRixLQUFjL0csSUFBTzRHLEdBQWNqRixDQUFLO0FBQ3pDLGFBQU87QUFBQSxFQUVuQjtBQUNJLFNBQU87QUFDWDtBQUNBLFNBQVN3RSxHQUFzQmpCLEdBQU1nQixHQUFXO0FBQzVDLE1BQUlBLElBQVk7QUFDWixXQUFPO0FBRVgsUUFBTWEsSUFBYUQsRUFBZ0I1QixDQUFJO0FBSXZDLFNBSEksRUFBQTZCLEtBQWNiLElBQVksT0FHMUIsQ0FBQ2EsS0FBY2IsSUFBWTtBQUluQztBQUNBLFNBQVNFLEVBQWlCSixHQUFNcEUsR0FBSztBQUlqQyxTQUhJLEVBQUFvRSxJQUFPLEtBQUtBLElBQU8sTUFHbkJwRSxLQUFPLFNBQVNBLElBQU0sS0FBS0EsSUFBTTtBQUl6QztBQUNBLFNBQVMyRSxFQUFhOUQsR0FBT0csR0FBUzRELEdBQVM7QUFPM0MsU0FOSSxFQUFBL0QsSUFBUSxLQUFLQSxLQUFTLE1BR3RCRyxLQUFXLFNBQVNBLElBQVUsS0FBS0EsS0FBVyxPQUc5QzRELEtBQVcsU0FBU0EsSUFBVSxLQUFLQSxLQUFXO0FBSXREO0FDM1dBLE1BQU1RLEtBQTJCO0FBd1QxQixTQUFTQyxHQUFPakgsR0FBTWtILEdBQVdqSCxJQUFVLENBQUEsR0FBSTtBQUNsRCxFQUFBaUgsSUFBWSxPQUFPQSxDQUFTO0FBQzVCLFFBQU1DLElBQVVELEVBQVUsTUFBTUYsRUFBd0I7QUFDeEQsTUFBSUcsR0FBUztBQUNULFVBQU1DLElBQUl2QyxFQUFPNUUsRUFBUSxnQkFBZ0JELEdBQU1DLENBQU87QUFHdEQsSUFBQWlILElBQVlDLEVBQVEsT0FBTyxTQUFVRSxHQUFRN0UsR0FBTztBQUNoRCxVQUFJQSxFQUFNLENBQUMsTUFBTTtBQUNiLGVBQU82RTtBQUVYLFlBQU1sRyxJQUFNa0csRUFBTyxRQUFRN0UsQ0FBSyxHQUMxQjhFLElBQTBCRCxFQUFPbEcsSUFBTSxDQUFDLE1BQU0sS0FDOUNvRyxJQUFXRixFQUFPLFFBQVE3RSxHQUFPLE1BQU1tQixFQUFXbkIsRUFBTSxDQUFDLENBQUMsRUFBRTRFLEdBQUc1RSxHQUFPdkMsQ0FBTyxJQUFJLEdBQUc7QUFHMUYsYUFBT3FILElBQ0RDLEVBQVMsVUFBVSxHQUFHcEcsSUFBTSxDQUFDLElBQUlvRyxFQUFTLFVBQVVwRyxJQUFNLENBQUMsSUFDM0RvRztBQUFBLElBQ1QsR0FBRUwsQ0FBUztBQUFBLEVBQ3BCO0FBQ0ksU0FBT00sRUFBY3hILEdBQU1rSCxHQUFXakgsQ0FBTztBQUNqRDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDhdfQ==\n","import { a, t as i, f as u } from \"./index-Yki8YSfn.js\";\nfunction T(e, o, r) {\n e = a(e, r);\n const n = i(o, e, !0), t = new Date(e.getTime() - n), s = /* @__PURE__ */ new Date(0);\n return s.setFullYear(t.getUTCFullYear(), t.getUTCMonth(), t.getUTCDate()), s.setHours(t.getUTCHours(), t.getUTCMinutes(), t.getUTCSeconds(), t.getUTCMilliseconds()), s;\n}\nfunction f(e, o, r, n) {\n return n = {\n ...n,\n timeZone: o,\n originalDate: e\n }, u(T(e, o, { timeZone: n.timeZone }), r, n);\n}\nexport {\n f\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtQjJYTXpZZE0uanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS90b1pvbmVkVGltZS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy10ei9kaXN0L2VzbS9mb3JtYXRJblRpbWVab25lL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR6UGFyc2VUaW1lem9uZSB9IGZyb20gJy4uL19saWIvdHpQYXJzZVRpbWV6b25lL2luZGV4LmpzJztcbmltcG9ydCB7IHRvRGF0ZSB9IGZyb20gJy4uL3RvRGF0ZS9pbmRleC5qcyc7XG4vKipcbiAqIEBuYW1lIHRvWm9uZWRUaW1lXG4gKiBAY2F0ZWdvcnkgVGltZSBab25lIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldCBhIGRhdGUvdGltZSByZXByZXNlbnRpbmcgbG9jYWwgdGltZSBpbiBhIGdpdmVuIHRpbWUgem9uZSBmcm9tIHRoZSBVVEMgZGF0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUmV0dXJucyBhIGRhdGUgaW5zdGFuY2Ugd2l0aCB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCB0aW1lIGluIHRoZSB0aW1lIHpvbmVcbiAqIHNwZWNpZmllZCBvZiB0aGUgVVRDIHRpbWUgZnJvbSB0aGUgZGF0ZSBwcm92aWRlZC4gSW4gb3RoZXIgd29yZHMsIHdoZW4gdGhlIG5ldyBkYXRlXG4gKiBpcyBmb3JtYXR0ZWQgaXQgd2lsbCBzaG93IHRoZSBlcXVpdmFsZW50IGhvdXJzIGluIHRoZSB0YXJnZXQgdGltZSB6b25lIHJlZ2FyZGxlc3NcbiAqIG9mIHRoZSBjdXJyZW50IHN5c3RlbSB0aW1lIHpvbmUuXG4gKlxuICogQHBhcmFtIGRhdGUgdGhlIGRhdGUgd2l0aCB0aGUgcmVsZXZhbnQgVVRDIHRpbWVcbiAqIEBwYXJhbSB0aW1lWm9uZSB0aGUgdGltZSB6b25lIHRvIGdldCBsb2NhbCB0aW1lIGZvciwgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHBhc3NlZCB0byBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICpcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gMiBhcmd1bWVudHMgcmVxdWlyZWRcbiAqIEB0aHJvd3Mge1JhbmdlRXJyb3J9IGBvcHRpb25zLmFkZGl0aW9uYWxEaWdpdHNgIG11c3QgYmUgMCwgMSBvciAyXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEluIEp1bmUgMTBhbSBVVEMgaXMgNmFtIGluIE5ldyBZb3JrICgtMDQ6MDApXG4gKiBjb25zdCByZXN1bHQgPSB0b1pvbmVkVGltZSgnMjAxNC0wNi0yNVQxMDowMDowMC4wMDBaJywgJ0FtZXJpY2EvTmV3X1lvcmsnKVxuICogLy89PiBKdW4gMjUgMjAxNCAwNjowMDowMFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9ab25lZFRpbWUoZGF0ZSwgdGltZVpvbmUsIG9wdGlvbnMpIHtcbiAgICBkYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IG9mZnNldE1pbGxpc2Vjb25kcyA9IHR6UGFyc2VUaW1lem9uZSh0aW1lWm9uZSwgZGF0ZSwgdHJ1ZSk7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gb2Zmc2V0TWlsbGlzZWNvbmRzKTtcbiAgICBjb25zdCByZXN1bHREYXRlID0gbmV3IERhdGUoMCk7XG4gICAgcmVzdWx0RGF0ZS5zZXRGdWxsWWVhcihkLmdldFVUQ0Z1bGxZZWFyKCksIGQuZ2V0VVRDTW9udGgoKSwgZC5nZXRVVENEYXRlKCkpO1xuICAgIHJlc3VsdERhdGUuc2V0SG91cnMoZC5nZXRVVENIb3VycygpLCBkLmdldFVUQ01pbnV0ZXMoKSwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO1xuICAgIHJldHVybiByZXN1bHREYXRlO1xufVxuIiwiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnLi4vZm9ybWF0L2luZGV4LmpzJztcbmltcG9ydCB7IHRvWm9uZWRUaW1lIH0gZnJvbSAnLi4vdG9ab25lZFRpbWUvaW5kZXguanMnO1xuLyoqXG4gKiBAbmFtZSBmb3JtYXRJblRpbWVab25lXG4gKiBAY2F0ZWdvcnkgVGltZSBab25lIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IEdldHMgdGhlIG9mZnNldCBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiB0aGUgdGltZSB6b25lIGFuZCBVbml2ZXJzYWwgQ29vcmRpbmF0ZWQgVGltZSAoVVRDKVxuICpcbiAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgdGltZSAvIHJlYWwgVVRDIHRpbWVcbiAqIEBwYXJhbSB0aW1lWm9uZSB0aGUgdGltZSB6b25lIHRoaXMgZGF0ZSBzaG91bGQgYmUgZm9ybWF0dGVkIGZvcjsgY2FuIGJlIGFuIG9mZnNldCBvciBJQU5BIHRpbWUgem9uZVxuICogQHBhcmFtIGZvcm1hdFN0ciB0aGUgc3RyaW5nIG9mIHRva2Vuc1xuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9iamVjdCB3aXRoIG9wdGlvbnMuIFNlZSBbT3B0aW9uc117QGxpbmsgaHR0cHM6Ly9kYXRlLWZucy5vcmcvZG9jcy9PcHRpb25zfVxuICogQHBhcmFtIHswfDF8Mn0gW29wdGlvbnMuYWRkaXRpb25hbERpZ2l0cz0yXSAtIHBhc3NlZCB0byBgdG9EYXRlYC4gU2VlIFt0b0RhdGVde0BsaW5rXG4gKiAgIGh0dHBzOi8vZGF0ZS1mbnMub3JnL2RvY3MvdG9EYXRlfVxuICogQHBhcmFtIHswfDF8MnwzfDR8NXw2fSBbb3B0aW9ucy53ZWVrU3RhcnRzT249MF0gLSB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCAtIFN1bmRheSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGU9MV0gLSB0aGUgZGF5IG9mIEphbnVhcnksIHdoaWNoIGlzXG4gKiBAcGFyYW0ge0xvY2FsZX0gW29wdGlvbnMubG9jYWxlPWRlZmF1bHRMb2NhbGVdIC0gdGhlIGxvY2FsZSBvYmplY3QuIFNlZVxuICogICBbTG9jYWxlXXtAbGluayBodHRwczovL2RhdGUtZm5zLm9yZy9kb2NzL0xvY2FsZX1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuYXdhcmVPZlVuaWNvZGVUb2tlbnM9ZmFsc2VdIC0gaWYgdHJ1ZSwgYWxsb3dzIHVzYWdlIG9mIFVuaWNvZGUgdG9rZW5zIGNhdXNlcyBjb25mdXNpb246XG4gKiAgIC0gU29tZSBvZiB0aGUgZGF5IG9mIHllYXIgdG9rZW5zIChgRGAsIGBERGApIHRoYXQgYXJlIGNvbmZ1c2VkIHdpdGggdGhlIGRheSBvZiBtb250aCB0b2tlbnMgKGBkYCwgYGRkYCkuXG4gKiAgIC0gU29tZSBvZiB0aGUgbG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhciB0b2tlbnMgKGBZWWAsIGBZWVlZYCkgdGhhdCBhcmUgY29uZnVzZWQgd2l0aCB0aGUgY2FsZW5kYXIgeWVhciB0b2tlbnNcbiAqICAgKGB5eWAsIGB5eXl5YCkuIFNlZTogaHR0cHM6Ly9naXQuaW8vZnhDeXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy50aW1lWm9uZT0nJ10gLSB1c2VkIHRvIHNwZWNpZnkgdGhlIElBTkEgdGltZSB6b25lIG9mZnNldCBvZiBhIGRhdGUgU3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0SW5UaW1lWm9uZShkYXRlLCB0aW1lWm9uZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgdGltZVpvbmUsXG4gICAgICAgIG9yaWdpbmFsRGF0ZTogZGF0ZSxcbiAgICB9O1xuICAgIHJldHVybiBmb3JtYXQodG9ab25lZFRpbWUoZGF0ZSwgdGltZVpvbmUsIHsgdGltZVpvbmU6IG9wdGlvbnMudGltZVpvbmUgfSksIGZvcm1hdFN0ciwgb3B0aW9ucyk7XG59XG4iXSwibmFtZXMiOlsidG9ab25lZFRpbWUiLCJkYXRlIiwidGltZVpvbmUiLCJvcHRpb25zIiwidG9EYXRlIiwib2Zmc2V0TWlsbGlzZWNvbmRzIiwidHpQYXJzZVRpbWV6b25lIiwiZCIsInJlc3VsdERhdGUiLCJmb3JtYXRJblRpbWVab25lIiwiZm9ybWF0U3RyIiwiZm9ybWF0Il0sIm1hcHBpbmdzIjoiO0FBMEJPLFNBQVNBLEVBQVlDLEdBQU1DLEdBQVVDLEdBQVM7QUFDakQsRUFBQUYsSUFBT0csRUFBT0gsR0FBTUUsQ0FBTztBQUMzQixRQUFNRSxJQUFxQkMsRUFBZ0JKLEdBQVVELEdBQU0sRUFBSSxHQUN6RE0sSUFBSSxJQUFJLEtBQUtOLEVBQUssUUFBTyxJQUFLSSxDQUFrQixHQUNoREcsSUFBYSxvQkFBSSxLQUFLLENBQUM7QUFDN0IsU0FBQUEsRUFBVyxZQUFZRCxFQUFFLGVBQWdCLEdBQUVBLEVBQUUsWUFBYSxHQUFFQSxFQUFFLFlBQVksR0FDMUVDLEVBQVcsU0FBU0QsRUFBRSxZQUFhLEdBQUVBLEVBQUUsY0FBZSxHQUFFQSxFQUFFLGNBQWEsR0FBSUEsRUFBRSxtQkFBa0IsQ0FBRSxHQUMxRkM7QUFDWDtBQ1hPLFNBQVNDLEVBQWlCUixHQUFNQyxHQUFVUSxHQUFXUCxHQUFTO0FBQ2pFLFNBQUFBLElBQVU7QUFBQSxJQUNOLEdBQUdBO0FBQUEsSUFDSCxVQUFBRDtBQUFBLElBQ0EsY0FBY0Q7QUFBQSxFQUNqQixHQUNNVSxFQUFPWCxFQUFZQyxHQUFNQyxHQUFVLEVBQUUsVUFBVUMsRUFBUSxTQUFRLENBQUUsR0FBR08sR0FBV1AsQ0FBTztBQUNqRzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxXX0=\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { createContext as u, useContext as a } from \"react\";\nimport { f as r } from \"../../index-B2XMzYdM.js\";\nconst l = [\n {\n value: \"Europe/Isle_of_Man\",\n offset: \"+00:00\",\n dstOffset: \"+01:00\"\n },\n {\n value: \"Europe/Guernsey\",\n offset: \"+00:00\",\n dstOffset: \"+01:00\"\n },\n {\n value: \"Europe/Jersey\",\n offset: \"+00:00\",\n dstOffset: \"+01:00\"\n },\n {\n value: \"Europe/London\",\n offset: \"+00:00\",\n dstOffset: \"+01:00\"\n },\n {\n value: \"Europe/Dublin\",\n offset: \"+00:00\",\n dstOffset: \"+01:00\"\n },\n {\n value: \"Europe/Lisbon\",\n offset: \"+00:00\",\n dstOffset: \"+01:00\"\n },\n {\n value: \"Europe/Amsterdam\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Andorra\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Berlin\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Busingen\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Gibraltar\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Luxembourg\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Malta\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Monaco\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Oslo\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Rome\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/San_Marino\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Stockholm\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Vaduz\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Vatican\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Vienna\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Zurich\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Belgrade\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Bratislava\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Budapest\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Ljubljana\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Podgorica\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Prague\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Tirane\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Brussels\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Copenhagen\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Madrid\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Paris\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Sarajevo\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Skopje\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Warsaw\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Zagreb\",\n offset: \"+01:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Athens\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Bucharest\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Chisinau\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Helsinki\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Kiev\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Mariehamn\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Nicosia\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Riga\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Sofia\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Tallinn\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Uzhgorod\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Vilnius\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Zaporozhye\",\n offset: \"+02:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Istanbul\",\n offset: \"+03:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Kaliningrad\",\n offset: \"+02:00\",\n dstOffset: \"+02:00\"\n },\n {\n value: \"Europe/Kirov\",\n offset: \"+03:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Moscow\",\n offset: \"+03:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Simferopol\",\n offset: \"+03:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Volgograd\",\n offset: \"+03:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Minsk\",\n offset: \"+03:00\",\n dstOffset: \"+03:00\"\n },\n {\n value: \"Europe/Astrakhan\",\n offset: \"+04:00\",\n dstOffset: \"+04:00\"\n },\n {\n value: \"Europe/Samara\",\n offset: \"+04:00\",\n dstOffset: \"+04:00\"\n },\n {\n value: \"Europe/Ulyanovsk\",\n offset: \"+04:00\",\n dstOffset: \"+04:00\"\n }\n], f = u([]), O = () => a(f), E = ({\n children: s\n}) => {\n const t = l.map((e) => ({\n text: e.value,\n value: e.value,\n offset: r(/* @__PURE__ */ new Date(), e.value, \"xxx\")\n }));\n return /* @__PURE__ */ o(f.Provider, { value: t, children: s });\n};\nexport {\n f as TimezonesEuropeLOVContext,\n E as TimezonesEuropeLOVProvider,\n O as useTimezonesEuropeLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXpvbmVzLWV1cm9wZS5sb3YuY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbnRleHRzL2xvdi90aW1lem9uZXMtZXVyb3BlLmxvdi5jb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgZGF0YSBmcm9tIFwiQGxvdi90aW1lem9uZXNfZXVyb3BlLmpzb25cIjtcbmltcG9ydCB7Zm9ybWF0SW5UaW1lWm9uZX0gZnJvbSBcImRhdGUtZm5zLXR6XCI7XG5cbmV4cG9ydCBjb25zdCBUaW1lem9uZXNFdXJvcGVMT1ZDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxhbnkgfCB1bmRlZmluZWQ+KFtdKTtcblxuZXhwb3J0IGNvbnN0IHVzZVRpbWV6b25lc0V1cm9wZUxPViA9ICgpID0+XG4gIHVzZUNvbnRleHQoVGltZXpvbmVzRXVyb3BlTE9WQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBUaW1lem9uZXNFdXJvcGVMT1ZQcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxufToge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGRhdGEubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgdGV4dDogaXRlbS52YWx1ZSxcbiAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICBvZmZzZXQ6IGZvcm1hdEluVGltZVpvbmUobmV3IERhdGUoKSwgaXRlbS52YWx1ZSwgJ3h4eCcpXG4gIH0pKTtcbiAgcmV0dXJuIChcbiAgICA8VGltZXpvbmVzRXVyb3BlTE9WQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvVGltZXpvbmVzRXVyb3BlTE9WQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiVGltZXpvbmVzRXVyb3BlTE9WQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VUaW1lem9uZXNFdXJvcGVMT1YiLCJ1c2VDb250ZXh0IiwiVGltZXpvbmVzRXVyb3BlTE9WUHJvdmlkZXIiLCJjaGlsZHJlbiIsInZhbHVlIiwiZGF0YSIsIml0ZW0iLCJmb3JtYXRJblRpbWVab25lIiwianN4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBSWFBLElBQTRCQyxFQUErQixDQUFFLENBQUEsR0FFN0RDLElBQXdCLE1BQ25DQyxFQUFXSCxDQUF5QixHQUV6QkksSUFBNkIsQ0FBQztBQUFBLEVBQ3pDLFVBQUFDO0FBQ0YsTUFFTTtBQUNKLFFBQU1DLElBQVFDLEVBQUssSUFBSSxDQUFDQyxPQUFlO0FBQUEsSUFDckMsTUFBTUEsRUFBSztBQUFBLElBQ1gsT0FBT0EsRUFBSztBQUFBLElBQ1osUUFBUUMsRUFBaUIsb0JBQUksS0FBUSxHQUFBRCxFQUFLLE9BQU8sS0FBSztBQUFBLEVBQUEsRUFDdEQ7QUFDRixTQUNHLGdCQUFBRSxFQUFBVixFQUEwQixVQUExQixFQUFtQyxPQUFBTSxHQUNqQyxVQUFBRCxFQUNILENBQUE7QUFFSjsifQ==\n","import { jsx as n } from \"react/jsx-runtime\";\nimport { createContext as o, useContext as d } from \"react\";\nconst c = [\n {\n name: \"Afghanistan\",\n code: \"AFG\"\n },\n {\n name: \"Aland Islands\",\n code: \"ALA\"\n },\n {\n name: \"Albania\",\n code: \"ALB\"\n },\n {\n name: \"Algeria\",\n code: \"DZA\"\n },\n {\n name: \"American Samoa\",\n code: \"ASM\"\n },\n {\n name: \"Andorra\",\n code: \"AND\"\n },\n {\n name: \"Angola\",\n code: \"AGO\"\n },\n {\n name: \"Anguilla\",\n code: \"AIA\"\n },\n {\n name: \"Antarctica\",\n code: \"ATA\"\n },\n {\n name: \"Antigua and Barbuda\",\n code: \"ATG\"\n },\n {\n name: \"Argentina\",\n code: \"ARG\"\n },\n {\n name: \"Armenia\",\n code: \"ARM\"\n },\n {\n name: \"Aruba\",\n code: \"ABW\"\n },\n {\n name: \"Australia\",\n code: \"AUS\"\n },\n {\n name: \"Austria\",\n code: \"AUT\"\n },\n {\n name: \"Azerbaijan\",\n code: \"AZE\"\n },\n {\n name: \"Bahamas\",\n code: \"BHS\"\n },\n {\n name: \"Bahrain\",\n code: \"BHR\"\n },\n {\n name: \"Bangladesh\",\n code: \"BGD\"\n },\n {\n name: \"Barbados\",\n code: \"BRB\"\n },\n {\n name: \"Belarus\",\n code: \"BLR\"\n },\n {\n name: \"Belgium\",\n code: \"BEL\"\n },\n {\n name: \"Belize\",\n code: \"BLZ\"\n },\n {\n name: \"Benin\",\n code: \"BEN\"\n },\n {\n name: \"Bermuda\",\n code: \"BMU\"\n },\n {\n name: \"Bhutan\",\n code: \"BTN\"\n },\n {\n name: \"Bolivia\",\n code: \"BOL\"\n },\n {\n name: \"Bonaire, Sint Eustatius and Saba\",\n code: \"BES\"\n },\n {\n name: \"Bosnia and Herzegovina\",\n code: \"BIH\"\n },\n {\n name: \"Botswana\",\n code: \"BWA\"\n },\n {\n name: \"Bouvet Island\",\n code: \"BVT\"\n },\n {\n name: \"Brazil\",\n code: \"BRA\"\n },\n {\n name: \"British Indian Ocean Territory\",\n code: \"IOT\"\n },\n {\n name: \"Brunei Darussalam\",\n code: \"BRN\"\n },\n {\n name: \"Bulgaria\",\n code: \"BGR\"\n },\n {\n name: \"Burkina Faso\",\n code: \"BFA\"\n },\n {\n name: \"Burundi\",\n code: \"BDI\"\n },\n {\n name: \"Cabo Verde\",\n code: \"CPV\"\n },\n {\n name: \"Cambodia\",\n code: \"KHM\"\n },\n {\n name: \"Cameroon\",\n code: \"CMR\"\n },\n {\n name: \"Canada\",\n code: \"CAN\"\n },\n {\n name: \"Cayman Islands\",\n code: \"CYM\"\n },\n {\n name: \"Central African Republic\",\n code: \"CAF\"\n },\n {\n name: \"Chad\",\n code: \"TCD\"\n },\n {\n name: \"Chile\",\n code: \"CHL\"\n },\n {\n name: \"China\",\n code: \"CHN\"\n },\n {\n name: \"Christmas Island\",\n code: \"CXR\"\n },\n {\n name: \"Cocos (Keeling) Islands\",\n code: \"CCK\"\n },\n {\n name: \"Colombia\",\n code: \"COL\"\n },\n {\n name: \"Comoros\",\n code: \"COM\"\n },\n {\n name: \"Democratic Republic of Congo\",\n code: \"COD\"\n },\n {\n name: \"Congo\",\n code: \"COG\"\n },\n {\n name: \"Cook Islands\",\n code: \"COK\"\n },\n {\n name: \"Costa Rica\",\n code: \"CRI\"\n },\n {\n name: \"Croatia\",\n code: \"HRV\"\n },\n {\n name: \"Cuba\",\n code: \"CUB\"\n },\n {\n name: \"Curaçao\",\n code: \"CUW\"\n },\n {\n name: \"Cyprus\",\n code: \"CYP\"\n },\n {\n name: \"Czechia\",\n code: \"CZE\"\n },\n {\n name: \"Côte d'Ivoire\",\n code: \"CIV\"\n },\n {\n name: \"Denmark\",\n code: \"DNK\"\n },\n {\n name: \"Djibouti\",\n code: \"DJI\"\n },\n {\n name: \"Dominica\",\n code: \"DMA\"\n },\n {\n name: \"Dominican Republic\",\n code: \"DOM\"\n },\n {\n name: \"Ecuador\",\n code: \"ECU\"\n },\n {\n name: \"Egypt\",\n code: \"EGY\"\n },\n {\n name: \"El Salvador\",\n code: \"SLV\"\n },\n {\n name: \"Equatorial Guinea\",\n code: \"GNQ\"\n },\n {\n name: \"Eritrea\",\n code: \"ERI\"\n },\n {\n name: \"Estonia\",\n code: \"EST\"\n },\n {\n name: \"Eswatini\",\n code: \"SWZ\"\n },\n {\n name: \"Ethiopia\",\n code: \"ETH\"\n },\n {\n name: \"Falkland Islands [Malvinas]\",\n code: \"FLK\"\n },\n {\n name: \"Faroe Islands\",\n code: \"FRO\"\n },\n {\n name: \"Fiji\",\n code: \"FJI\"\n },\n {\n name: \"Finland\",\n code: \"FIN\"\n },\n {\n name: \"France\",\n code: \"FRA\"\n },\n {\n name: \"French Guiana\",\n code: \"GUF\"\n },\n {\n name: \"French Polynesia\",\n code: \"PYF\"\n },\n {\n name: \"French Southern Territories\",\n code: \"ATF\"\n },\n {\n name: \"Gabon\",\n code: \"GAB\"\n },\n {\n name: \"Gambia\",\n code: \"GMB\"\n },\n {\n name: \"Georgia\",\n code: \"GEO\"\n },\n {\n name: \"Germany\",\n code: \"DEU\"\n },\n {\n name: \"Ghana\",\n code: \"GHA\"\n },\n {\n name: \"Gibraltar\",\n code: \"GIB\"\n },\n {\n name: \"Greece\",\n code: \"GRC\"\n },\n {\n name: \"Greenland\",\n code: \"GRL\"\n },\n {\n name: \"Grenada\",\n code: \"GRD\"\n },\n {\n name: \"Guadeloupe\",\n code: \"GLP\"\n },\n {\n name: \"Guam\",\n code: \"GUM\"\n },\n {\n name: \"Guatemala\",\n code: \"GTM\"\n },\n {\n name: \"Guernsey\",\n code: \"GGY\"\n },\n {\n name: \"Guinea\",\n code: \"GIN\"\n },\n {\n name: \"Guinea-Bissau\",\n code: \"GNB\"\n },\n {\n name: \"Guyana\",\n code: \"GUY\"\n },\n {\n name: \"Haiti\",\n code: \"HTI\"\n },\n {\n name: \"Heard Island and McDonald Islands\",\n code: \"HMD\"\n },\n {\n name: \"Holy See\",\n code: \"VAT\"\n },\n {\n name: \"Honduras\",\n code: \"HND\"\n },\n {\n name: \"Hong Kong\",\n code: \"HKG\"\n },\n {\n name: \"Hungary\",\n code: \"HUN\"\n },\n {\n name: \"Iceland\",\n code: \"ISL\"\n },\n {\n name: \"India\",\n code: \"IND\"\n },\n {\n name: \"Indonesia\",\n code: \"IDN\"\n },\n {\n name: \"Iran\",\n code: \"IRN\"\n },\n {\n name: \"Iraq\",\n code: \"IRQ\"\n },\n {\n name: \"Ireland\",\n code: \"IRL\"\n },\n {\n name: \"Isle of Man\",\n code: \"IMN\"\n },\n {\n name: \"Israel\",\n code: \"ISR\"\n },\n {\n name: \"Italy\",\n code: \"ITA\"\n },\n {\n name: \"Jamaica\",\n code: \"JAM\"\n },\n {\n name: \"Japan\",\n code: \"JPN\"\n },\n {\n name: \"Jersey\",\n code: \"JEY\"\n },\n {\n name: \"Jordan\",\n code: \"JOR\"\n },\n {\n name: \"Kazakhstan\",\n code: \"KAZ\"\n },\n {\n name: \"Kenya\",\n code: \"KEN\"\n },\n {\n name: \"Kiribati\",\n code: \"KIR\"\n },\n {\n name: \"North Korea\",\n code: \"PRK\"\n },\n {\n name: \"South Korea\",\n code: \"KOR\"\n },\n {\n name: \"Kuwait\",\n code: \"KWT\"\n },\n {\n name: \"Kyrgyzstan\",\n code: \"KGZ\"\n },\n {\n name: \"Lao People's Democratic Republic\",\n code: \"LAO\"\n },\n {\n name: \"Latvia\",\n code: \"LVA\"\n },\n {\n name: \"Lebanon\",\n code: \"LBN\"\n },\n {\n name: \"Lesotho\",\n code: \"LSO\"\n },\n {\n name: \"Liberia\",\n code: \"LBR\"\n },\n {\n name: \"Libya\",\n code: \"LBY\"\n },\n {\n name: \"Liechtenstein\",\n code: \"LIE\"\n },\n {\n name: \"Lithuania\",\n code: \"LTU\"\n },\n {\n name: \"Luxembourg\",\n code: \"LUX\"\n },\n {\n name: \"Macao\",\n code: \"MAC\"\n },\n {\n name: \"Madagascar\",\n code: \"MDG\"\n },\n {\n name: \"Malawi\",\n code: \"MWI\"\n },\n {\n name: \"Malaysia\",\n code: \"MYS\"\n },\n {\n name: \"Maldives\",\n code: \"MDV\"\n },\n {\n name: \"Mali\",\n code: \"MLI\"\n },\n {\n name: \"Malta\",\n code: \"MLT\"\n },\n {\n name: \"Marshall Islands\",\n code: \"MHL\"\n },\n {\n name: \"Martinique\",\n code: \"MTQ\"\n },\n {\n name: \"Mauritania\",\n code: \"MRT\"\n },\n {\n name: \"Mauritius\",\n code: \"MUS\"\n },\n {\n name: \"Mayotte\",\n code: \"MYT\"\n },\n {\n name: \"Mexico\",\n code: \"MEX\"\n },\n {\n name: \"Micronesia\",\n code: \"FSM\"\n },\n {\n name: \"Moldova\",\n code: \"MDA\"\n },\n {\n name: \"Monaco\",\n code: \"MCO\"\n },\n {\n name: \"Mongolia\",\n code: \"MNG\"\n },\n {\n name: \"Montenegro\",\n code: \"MNE\"\n },\n {\n name: \"Montserrat\",\n code: \"MSR\"\n },\n {\n name: \"Morocco\",\n code: \"MAR\"\n },\n {\n name: \"Mozambique\",\n code: \"MOZ\"\n },\n {\n name: \"Myanmar\",\n code: \"MMR\"\n },\n {\n name: \"Namibia\",\n code: \"NAM\"\n },\n {\n name: \"Nauru\",\n code: \"NRU\"\n },\n {\n name: \"Nepal\",\n code: \"NPL\"\n },\n {\n name: \"Netherlands\",\n code: \"NLD\"\n },\n {\n name: \"New Caledonia\",\n code: \"NCL\"\n },\n {\n name: \"New Zealand\",\n code: \"NZL\"\n },\n {\n name: \"Nicaragua\",\n code: \"NIC\"\n },\n {\n name: \"Niger\",\n code: \"NER\"\n },\n {\n name: \"Nigeria\",\n code: \"NGA\"\n },\n {\n name: \"Niue\",\n code: \"NIU\"\n },\n {\n name: \"Norfolk Island\",\n code: \"NFK\"\n },\n {\n name: \"North Macedonia\",\n code: \"MKD\"\n },\n {\n name: \"Northern Mariana Islands\",\n code: \"MNP\"\n },\n {\n name: \"Norway\",\n code: \"NOR\"\n },\n {\n name: \"Oman\",\n code: \"OMN\"\n },\n {\n name: \"Pakistan\",\n code: \"PAK\"\n },\n {\n name: \"Palau\",\n code: \"PLW\"\n },\n {\n name: \"Palestine, State of\",\n code: \"PSE\"\n },\n {\n name: \"Panama\",\n code: \"PAN\"\n },\n {\n name: \"Papua New Guinea\",\n code: \"PNG\"\n },\n {\n name: \"Paraguay\",\n code: \"PRY\"\n },\n {\n name: \"Peru\",\n code: \"PER\"\n },\n {\n name: \"Philippines\",\n code: \"PHL\"\n },\n {\n name: \"Pitcairn\",\n code: \"PCN\"\n },\n {\n name: \"Poland\",\n code: \"POL\"\n },\n {\n name: \"Portugal\",\n code: \"PRT\"\n },\n {\n name: \"Puerto Rico\",\n code: \"PRI\"\n },\n {\n name: \"Qatar\",\n code: \"QAT\"\n },\n {\n name: \"Romania\",\n code: \"ROU\"\n },\n {\n name: \"Russian Federation\",\n code: \"RUS\"\n },\n {\n name: \"Rwanda\",\n code: \"RWA\"\n },\n {\n name: \"Réunion\",\n code: \"REU\"\n },\n {\n name: \"Saint Barthélemy\",\n code: \"BLM\"\n },\n {\n name: \"Saint Helena, Ascension and Tristan da Cunha\",\n code: \"SHN\"\n },\n {\n name: \"Saint Kitts and Nevis\",\n code: \"KNA\"\n },\n {\n name: \"Saint Lucia\",\n code: \"LCA\"\n },\n {\n name: \"Saint Martin (French part)\",\n code: \"MAF\"\n },\n {\n name: \"Saint Pierre and Miquelon\",\n code: \"SPM\"\n },\n {\n name: \"Saint Vincent and the Grenadines\",\n code: \"VCT\"\n },\n {\n name: \"Samoa\",\n code: \"WSM\"\n },\n {\n name: \"San Marino\",\n code: \"SMR\"\n },\n {\n name: \"Sao Tome and Principe\",\n code: \"STP\"\n },\n {\n name: \"Saudi Arabia\",\n code: \"SAU\"\n },\n {\n name: \"Senegal\",\n code: \"SEN\"\n },\n {\n name: \"Serbia\",\n code: \"SRB\"\n },\n {\n name: \"Seychelles\",\n code: \"SYC\"\n },\n {\n name: \"Sierra Leone\",\n code: \"SLE\"\n },\n {\n name: \"Singapore\",\n code: \"SGP\"\n },\n {\n name: \"Sint Maarten (Dutch part)\",\n code: \"SXM\"\n },\n {\n name: \"Slovakia\",\n code: \"SVK\"\n },\n {\n name: \"Slovenia\",\n code: \"SVN\"\n },\n {\n name: \"Solomon Islands\",\n code: \"SLB\"\n },\n {\n name: \"Somalia\",\n code: \"SOM\"\n },\n {\n name: \"South Africa\",\n code: \"ZAF\"\n },\n {\n name: \"South Georgia and the South Sandwich Islands\",\n code: \"SGS\"\n },\n {\n name: \"South Sudan\",\n code: \"SSD\"\n },\n {\n name: \"Spain\",\n code: \"ESP\"\n },\n {\n name: \"Sri Lanka\",\n code: \"LKA\"\n },\n {\n name: \"Sudan\",\n code: \"SDN\"\n },\n {\n name: \"Suriname\",\n code: \"SUR\"\n },\n {\n name: \"Svalbard and Jan Mayen\",\n code: \"SJM\"\n },\n {\n name: \"Sweden\",\n code: \"SWE\"\n },\n {\n name: \"Switzerland\",\n code: \"CHE\"\n },\n {\n name: \"Syrian Arab Republic\",\n code: \"SYR\"\n },\n {\n name: \"Taiwan\",\n code: \"TWN\"\n },\n {\n name: \"Tajikistan\",\n code: \"TJK\"\n },\n {\n name: \"Tanzania\",\n code: \"TZA\"\n },\n {\n name: \"Thailand\",\n code: \"THA\"\n },\n {\n name: \"Timor-Leste\",\n code: \"TLS\"\n },\n {\n name: \"Togo\",\n code: \"TGO\"\n },\n {\n name: \"Tokelau\",\n code: \"TKL\"\n },\n {\n name: \"Tonga\",\n code: \"TON\"\n },\n {\n name: \"Trinidad and Tobago\",\n code: \"TTO\"\n },\n {\n name: \"Tunisia\",\n code: \"TUN\"\n },\n {\n name: \"Türkiye\",\n code: \"TUR\"\n },\n {\n name: \"Turkmenistan\",\n code: \"TKM\"\n },\n {\n name: \"Turks and Caicos Islands\",\n code: \"TCA\"\n },\n {\n name: \"Tuvalu\",\n code: \"TUV\"\n },\n {\n name: \"Uganda\",\n code: \"UGA\"\n },\n {\n name: \"Ukraine\",\n code: \"UKR\"\n },\n {\n name: \"United Arab Emirates\",\n code: \"ARE\"\n },\n {\n name: \"United Kingdom\",\n code: \"GBR\"\n },\n {\n name: \"United States Minor Outlying Islands\",\n code: \"UMI\"\n },\n {\n name: \"United States of America\",\n code: \"USA\"\n },\n {\n name: \"Uruguay\",\n code: \"URY\"\n },\n {\n name: \"Uzbekistan\",\n code: \"UZB\"\n },\n {\n name: \"Vanuatu\",\n code: \"VUT\"\n },\n {\n name: \"Venezuela\",\n code: \"VEN\"\n },\n {\n name: \"Viet Nam\",\n code: \"VNM\"\n },\n {\n name: \"Virgin Islands (British)\",\n code: \"VGB\"\n },\n {\n name: \"Virgin Islands (U.S.)\",\n code: \"VIR\"\n },\n {\n name: \"Wallis and Futuna\",\n code: \"WLF\"\n },\n {\n name: \"Western Sahara\",\n code: \"ESH\"\n },\n {\n name: \"Yemen\",\n code: \"YEM\"\n },\n {\n name: \"Zambia\",\n code: \"ZMB\"\n },\n {\n name: \"Zimbabwe\",\n code: \"ZWE\"\n }\n], e = o([]), r = () => d(e), t = ({ children: a }) => /* @__PURE__ */ n(e.Provider, { value: c, children: a });\nexport {\n e as CountriesLOVContext,\n t as CountriesLOVProvider,\n r as useCountriesLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyaWVzLmxvdi5jb250ZXh0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29udGV4dHMvbG92L2NvdW50cmllcy5sb3YuY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgUmVhY3ROb2RlLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgZGF0YSBmcm9tIFwiLi4vLi4vbG92L2NvdW50cmllcy5qc29uXCI7XG5cbmV4cG9ydCBjb25zdCBDb3VudHJpZXNMT1ZDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxhbnkgfCB1bmRlZmluZWQ+KFtdKTtcblxuZXhwb3J0IGNvbnN0IHVzZUNvdW50cmllc0xPViA9ICgpID0+IHVzZUNvbnRleHQoQ291bnRyaWVzTE9WQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBDb3VudHJpZXNMT1ZQcm92aWRlciA9ICh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENvdW50cmllc0xPVkNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2RhdGF9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ291bnRyaWVzTE9WQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiQ291bnRyaWVzTE9WQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb3VudHJpZXNMT1YiLCJ1c2VDb250ZXh0IiwiQ291bnRyaWVzTE9WUHJvdmlkZXIiLCJjaGlsZHJlbiIsImRhdGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQUdhQSxJQUFzQkMsRUFBK0IsQ0FBRSxDQUFBLEdBRXZEQyxJQUFrQixNQUFNQyxFQUFXSCxDQUFtQixHQUV0REksSUFBdUIsQ0FBQyxFQUFFLFVBQUFDLDBCQUVsQ0wsRUFBb0IsVUFBcEIsRUFBNkIsT0FBT00sR0FDbEMsVUFBQUQsR0FDSDsifQ==\n","import { jsx as n } from \"react/jsx-runtime\";\nimport { createContext as o, useContext as d } from \"react\";\nconst c = [\n {\n code: \"AFN\",\n name: \"Afghani\"\n },\n {\n code: \"EUR\",\n name: \"Euro\"\n },\n {\n code: \"ALL\",\n name: \"Lek\"\n },\n {\n code: \"DZD\",\n name: \"Algerian Dinar\"\n },\n {\n code: \"USD\",\n name: \"US Dollar\"\n },\n {\n code: \"AOA\",\n name: \"Kwanza\"\n },\n {\n code: \"XCD\",\n name: \"East Caribbean Dollar\"\n },\n {\n code: null,\n name: \"No universal name\"\n },\n {\n code: \"ARS\",\n name: \"Argentine Peso\"\n },\n {\n code: \"AMD\",\n name: \"Armenian Dram\"\n },\n {\n code: \"AWG\",\n name: \"Aruban Florin\"\n },\n {\n code: \"AUD\",\n name: \"Australian Dollar\"\n },\n {\n code: \"AZN\",\n name: \"Azerbaijan Manat\"\n },\n {\n code: \"BSD\",\n name: \"Bahamian Dollar\"\n },\n {\n code: \"BHD\",\n name: \"Bahraini Dinar\"\n },\n {\n code: \"BDT\",\n name: \"Taka\"\n },\n {\n code: \"BBD\",\n name: \"Barbados Dollar\"\n },\n {\n code: \"BYN\",\n name: \"Belarusian Ruble\"\n },\n {\n code: \"BZD\",\n name: \"Belize Dollar\"\n },\n {\n code: \"XOF\",\n name: \"CFA Franc BCEAO\"\n },\n {\n code: \"BMD\",\n name: \"Bermudian Dollar\"\n },\n {\n code: \"INR\",\n name: \"Indian Rupee\"\n },\n {\n code: \"BTN\",\n name: \"Ngultrum\"\n },\n {\n code: \"BOB\",\n name: \"Boliviano\"\n },\n {\n code: \"BOV\",\n name: \"Mvdol\"\n },\n {\n code: \"BAM\",\n name: \"Convertible Mark\"\n },\n {\n code: \"BWP\",\n name: \"Pula\"\n },\n {\n code: \"NOK\",\n name: \"Norwegian Krone\"\n },\n {\n code: \"BRL\",\n name: \"Brazilian Real\"\n },\n {\n code: \"BND\",\n name: \"Brunei Dollar\"\n },\n {\n code: \"BGN\",\n name: \"Bulgarian Lev\"\n },\n {\n code: \"BIF\",\n name: \"Burundi Franc\"\n },\n {\n code: \"CVE\",\n name: \"Cabo Verde Escudo\"\n },\n {\n code: \"KHR\",\n name: \"Riel\"\n },\n {\n code: \"XAF\",\n name: \"CFA Franc BEAC\"\n },\n {\n code: \"CAD\",\n name: \"Canadian Dollar\"\n },\n {\n code: \"KYD\",\n name: \"Cayman Islands Dollar\"\n },\n {\n code: \"CLP\",\n name: \"Chilean Peso\"\n },\n {\n code: \"CLF\",\n name: \"Unidad de Fomento\"\n },\n {\n code: \"CNY\",\n name: \"Yuan Renminbi\"\n },\n {\n code: \"COP\",\n name: \"Colombian Peso\"\n },\n {\n code: \"COU\",\n name: \"Unidad de Valor Real\"\n },\n {\n code: \"KMF\",\n name: \"Comorian Franc\"\n },\n {\n code: \"CDF\",\n name: \"Congolese Franc\"\n },\n {\n code: \"NZD\",\n name: \"New Zealand Dollar\"\n },\n {\n code: \"CRC\",\n name: \"Costa Rican Colon\"\n },\n {\n code: \"HRK\",\n name: \"Croatian Kuna\"\n },\n {\n code: \"CUP\",\n name: \"Cuban Peso\"\n },\n {\n code: \"CUC\",\n name: \"Peso Convertible\"\n },\n {\n code: \"ANG\",\n name: \"Netherlands Antillean Guilder\"\n },\n {\n code: \"CZK\",\n name: \"Czech Koruna\"\n },\n {\n code: \"DKK\",\n name: \"Danish Krone\"\n },\n {\n code: \"DJF\",\n name: \"Djibouti Franc\"\n },\n {\n code: \"DOP\",\n name: \"Dominican Peso\"\n },\n {\n code: \"EGP\",\n name: \"Egyptian Pound\"\n },\n {\n code: \"SVC\",\n name: \"El Salvador Colon\"\n },\n {\n code: \"ERN\",\n name: \"Nakfa\"\n },\n {\n code: \"SZL\",\n name: \"Lilangeni\"\n },\n {\n code: \"ETB\",\n name: \"Ethiopian Birr\"\n },\n {\n code: \"FKP\",\n name: \"Falkland Islands Pound\"\n },\n {\n code: \"FJD\",\n name: \"Fiji Dollar\"\n },\n {\n code: \"XPF\",\n name: \"CFP Franc\"\n },\n {\n code: \"GMD\",\n name: \"Dalasi\"\n },\n {\n code: \"GEL\",\n name: \"Lari\"\n },\n {\n code: \"GHS\",\n name: \"Ghana Cedi\"\n },\n {\n code: \"GIP\",\n name: \"Gibraltar Pound\"\n },\n {\n code: \"GTQ\",\n name: \"Quetzal\"\n },\n {\n code: \"GBP\",\n name: \"Pound Sterling\"\n },\n {\n code: \"GNF\",\n name: \"Guinean Franc\"\n },\n {\n code: \"GYD\",\n name: \"Guyana Dollar\"\n },\n {\n code: \"HTG\",\n name: \"Gourde\"\n },\n {\n code: \"HNL\",\n name: \"Lempira\"\n },\n {\n code: \"HKD\",\n name: \"Hong Kong Dollar\"\n },\n {\n code: \"HUF\",\n name: \"Forint\"\n },\n {\n code: \"ISK\",\n name: \"Iceland Krona\"\n },\n {\n code: \"IDR\",\n name: \"Rupiah\"\n },\n {\n code: \"XDR\",\n name: \"SDR (Special Drawing Right)\"\n },\n {\n code: \"IRR\",\n name: \"Iranian Rial\"\n },\n {\n code: \"IQD\",\n name: \"Iraqi Dinar\"\n },\n {\n code: \"ILS\",\n name: \"New Israeli Sheqel\"\n },\n {\n code: \"JMD\",\n name: \"Jamaican Dollar\"\n },\n {\n code: \"JPY\",\n name: \"Yen\"\n },\n {\n code: \"JOD\",\n name: \"Jordanian Dinar\"\n },\n {\n code: \"KZT\",\n name: \"Tenge\"\n },\n {\n code: \"KES\",\n name: \"Kenyan Shilling\"\n },\n {\n code: \"KPW\",\n name: \"North Korean Won\"\n },\n {\n code: \"KRW\",\n name: \"Won\"\n },\n {\n code: \"KWD\",\n name: \"Kuwaiti Dinar\"\n },\n {\n code: \"KGS\",\n name: \"Som\"\n },\n {\n code: \"LAK\",\n name: \"Lao Kip\"\n },\n {\n code: \"LBP\",\n name: \"Lebanese Pound\"\n },\n {\n code: \"LSL\",\n name: \"Loti\"\n },\n {\n code: \"ZAR\",\n name: \"Rand\"\n },\n {\n code: \"LRD\",\n name: \"Liberian Dollar\"\n },\n {\n code: \"LYD\",\n name: \"Libyan Dinar\"\n },\n {\n code: \"CHF\",\n name: \"Swiss Franc\"\n },\n {\n code: \"MOP\",\n name: \"Pataca\"\n },\n {\n code: \"MKD\",\n name: \"Denar\"\n },\n {\n code: \"MGA\",\n name: \"Malagasy Ariary\"\n },\n {\n code: \"MWK\",\n name: \"Malawi Kwacha\"\n },\n {\n code: \"MYR\",\n name: \"Malaysian Ringgit\"\n },\n {\n code: \"MVR\",\n name: \"Rufiyaa\"\n },\n {\n code: \"MRU\",\n name: \"Ouguiya\"\n },\n {\n code: \"MUR\",\n name: \"Mauritius Rupee\"\n },\n {\n code: \"XUA\",\n name: \"ADB Unit of Account\"\n },\n {\n code: \"MXN\",\n name: \"Mexican Peso\"\n },\n {\n code: \"MXV\",\n name: \"Mexican Unidad de Inversion (UDI)\"\n },\n {\n code: \"MDL\",\n name: \"Moldovan Leu\"\n },\n {\n code: \"MNT\",\n name: \"Tugrik\"\n },\n {\n code: \"MAD\",\n name: \"Moroccan Dirham\"\n },\n {\n code: \"MZN\",\n name: \"Mozambique Metical\"\n },\n {\n code: \"MMK\",\n name: \"Kyat\"\n },\n {\n code: \"NAD\",\n name: \"Namibia Dollar\"\n },\n {\n code: \"NPR\",\n name: \"Nepalese Rupee\"\n },\n {\n code: \"NIO\",\n name: \"Cordoba Oro\"\n },\n {\n code: \"NGN\",\n name: \"Naira\"\n },\n {\n code: \"OMR\",\n name: \"Rial Omani\"\n },\n {\n code: \"PKR\",\n name: \"Pakistan Rupee\"\n },\n {\n code: \"PAB\",\n name: \"Balboa\"\n },\n {\n code: \"PGK\",\n name: \"Kina\"\n },\n {\n code: \"PYG\",\n name: \"Guarani\"\n },\n {\n code: \"PEN\",\n name: \"Sol\"\n },\n {\n code: \"PHP\",\n name: \"Philippine Peso\"\n },\n {\n code: \"PLN\",\n name: \"Zloty\"\n },\n {\n code: \"QAR\",\n name: \"Qatari Rial\"\n },\n {\n code: \"RON\",\n name: \"Romanian Leu\"\n },\n {\n code: \"RUB\",\n name: \"Russian Ruble\"\n },\n {\n code: \"RWF\",\n name: \"Rwanda Franc\"\n },\n {\n code: \"SHP\",\n name: \"Saint Helena Pound\"\n },\n {\n code: \"WST\",\n name: \"Tala\"\n },\n {\n code: \"STN\",\n name: \"Dobra\"\n },\n {\n code: \"SAR\",\n name: \"Saudi Riyal\"\n },\n {\n code: \"RSD\",\n name: \"Serbian Dinar\"\n },\n {\n code: \"SCR\",\n name: \"Seychelles Rupee\"\n },\n {\n code: \"SLL\",\n name: \"Leone\"\n },\n {\n code: \"SGD\",\n name: \"Singapore Dollar\"\n },\n {\n code: \"XSU\",\n name: \"Sucre\"\n },\n {\n code: \"SBD\",\n name: \"Solomon Islands Dollar\"\n },\n {\n code: \"SOS\",\n name: \"Somali Shilling\"\n },\n {\n code: \"SSP\",\n name: \"South Sudanese Pound\"\n },\n {\n code: \"LKR\",\n name: \"Sri Lanka Rupee\"\n },\n {\n code: \"SDG\",\n name: \"Sudanese Pound\"\n },\n {\n code: \"SRD\",\n name: \"Surinam Dollar\"\n },\n {\n code: \"SEK\",\n name: \"Swedish Krona\"\n },\n {\n code: \"CHE\",\n name: \"WIR Euro\"\n },\n {\n code: \"CHW\",\n name: \"WIR Franc\"\n },\n {\n code: \"SYP\",\n name: \"Syrian Pound\"\n },\n {\n code: \"TWD\",\n name: \"New Taiwan Dollar\"\n },\n {\n code: \"TJS\",\n name: \"Somoni\"\n },\n {\n code: \"TZS\",\n name: \"Tanzanian Shilling\"\n },\n {\n code: \"THB\",\n name: \"Baht\"\n },\n {\n code: \"TOP\",\n name: \"Pa'anga\"\n },\n {\n code: \"TTD\",\n name: \"Trinidad and Tobago Dollar\"\n },\n {\n code: \"TND\",\n name: \"Tunisian Dinar\"\n },\n {\n code: \"TRY\",\n name: \"Turkish Lira\"\n },\n {\n code: \"TMT\",\n name: \"Turkmenistan New Manat\"\n },\n {\n code: \"UGX\",\n name: \"Uganda Shilling\"\n },\n {\n code: \"UAH\",\n name: \"Hryvnia\"\n },\n {\n code: \"AED\",\n name: \"UAE Dirham\"\n },\n {\n code: \"USN\",\n name: \"US Dollar (Next day)\"\n },\n {\n code: \"UYU\",\n name: \"Peso Uruguayo\"\n },\n {\n code: \"UYI\",\n name: \"Uruguay Peso en Unidades Indexadas (UI)\"\n },\n {\n code: \"UYW\",\n name: \"Unidad Previsional\"\n },\n {\n code: \"UZS\",\n name: \"Uzbekistan Sum\"\n },\n {\n code: \"VUV\",\n name: \"Vatu\"\n },\n {\n code: \"VES\",\n name: \"Bolívar Soberano\"\n },\n {\n code: \"VND\",\n name: \"Dong\"\n },\n {\n code: \"YER\",\n name: \"Yemeni Rial\"\n },\n {\n code: \"ZMW\",\n name: \"Zambian Kwacha\"\n },\n {\n code: \"ZWL\",\n name: \"Zimbabwe Dollar\"\n },\n {\n code: \"XBA\",\n name: \"Bond Markets Unit European Composite Unit (EURCO)\"\n },\n {\n code: \"XBB\",\n name: \"Bond Markets Unit European Monetary Unit (E.M.U.-6)\"\n },\n {\n code: \"XBC\",\n name: \"Bond Markets Unit European Unit of Account 9 (E.U.A.-9)\"\n },\n {\n code: \"XBD\",\n name: \"Bond Markets Unit European Unit of Account 17 (E.U.A.-17)\"\n },\n {\n code: \"XTS\",\n name: \"Codes specifically reserved for testing purposes\"\n },\n {\n code: \"XXX\",\n name: \"The codes assigned for transactions where no name is involved\"\n },\n {\n code: \"XAU\",\n name: \"Gold\"\n },\n {\n code: \"XPD\",\n name: \"Palladium\"\n },\n {\n code: \"XPT\",\n name: \"Platinum\"\n },\n {\n code: \"XAG\",\n name: \"Silver\"\n },\n {\n code: \"AFA\",\n name: \"Afghani\"\n },\n {\n code: \"FIM\",\n name: \"Markka\"\n },\n {\n code: \"ALK\",\n name: \"Old Lek\"\n },\n {\n code: \"ADP\",\n name: \"Andorran Peseta\"\n },\n {\n code: \"ESP\",\n name: \"Spanish Peseta\"\n },\n {\n code: \"FRF\",\n name: \"French Franc\"\n },\n {\n code: \"AOK\",\n name: \"Kwanza\"\n },\n {\n code: \"AON\",\n name: \"New Kwanza\"\n },\n {\n code: \"AOR\",\n name: \"Kwanza Reajustado\"\n },\n {\n code: \"ARA\",\n name: \"Austral\"\n },\n {\n code: \"ARP\",\n name: \"Peso Argentino\"\n },\n {\n code: \"ARY\",\n name: \"Peso\"\n },\n {\n code: \"RUR\",\n name: \"Russian Ruble\"\n },\n {\n code: \"ATS\",\n name: \"Schilling\"\n },\n {\n code: \"AYM\",\n name: \"Azerbaijan Manat\"\n },\n {\n code: \"AZM\",\n name: \"Azerbaijanian Manat\"\n },\n {\n code: \"BYB\",\n name: \"Belarusian Ruble\"\n },\n {\n code: \"BYR\",\n name: \"Belarusian Ruble\"\n },\n {\n code: \"BEC\",\n name: \"Convertible Franc\"\n },\n {\n code: \"BEF\",\n name: \"Belgian Franc\"\n },\n {\n code: \"BEL\",\n name: \"Financial Franc\"\n },\n {\n code: \"BOP\",\n name: \"Peso boliviano\"\n },\n {\n code: \"BAD\",\n name: \"Dinar\"\n },\n {\n code: \"BRB\",\n name: \"Cruzeiro\"\n },\n {\n code: \"BRC\",\n name: \"Cruzado\"\n },\n {\n code: \"BRE\",\n name: \"Cruzeiro\"\n },\n {\n code: \"BRN\",\n name: \"New Cruzado\"\n },\n {\n code: \"BRR\",\n name: \"Cruzeiro Real\"\n },\n {\n code: \"BGJ\",\n name: \"Lev A/52\"\n },\n {\n code: \"BGK\",\n name: \"Lev A/62\"\n },\n {\n code: \"BGL\",\n name: \"Lev\"\n },\n {\n code: \"BUK\",\n name: \"Kyat\"\n },\n {\n code: \"HRD\",\n name: \"Croatian Dinar\"\n },\n {\n code: \"CYP\",\n name: \"Cyprus Pound\"\n },\n {\n code: \"CSJ\",\n name: \"Krona A/53\"\n },\n {\n code: \"CSK\",\n name: \"Koruna\"\n },\n {\n code: \"ECS\",\n name: \"Sucre\"\n },\n {\n code: \"ECV\",\n name: \"Unidad de Valor Constante (UVC)\"\n },\n {\n code: \"GQE\",\n name: \"Ekwele\"\n },\n {\n code: \"EEK\",\n name: \"Kroon\"\n },\n {\n code: \"XEU\",\n name: \"European name Unit (E.C.U)\"\n },\n {\n code: \"GEK\",\n name: \"Georgian Coupon\"\n },\n {\n code: \"DDM\",\n name: \"Mark der DDR\"\n },\n {\n code: \"DEM\",\n name: \"Deutsche Mark\"\n },\n {\n code: \"GHC\",\n name: \"Cedi\"\n },\n {\n code: \"GHP\",\n name: \"Ghana Cedi\"\n },\n {\n code: \"GRD\",\n name: \"Drachma\"\n },\n {\n code: \"GNE\",\n name: \"Syli\"\n },\n {\n code: \"GNS\",\n name: \"Syli\"\n },\n {\n code: \"GWE\",\n name: \"Guinea Escudo\"\n },\n {\n code: \"GWP\",\n name: \"Guinea-Bissau Peso\"\n },\n {\n code: \"ITL\",\n name: \"Italian Lira\"\n },\n {\n code: \"ISJ\",\n name: \"Old Krona\"\n },\n {\n code: \"IEP\",\n name: \"Irish Pound\"\n },\n {\n code: \"ILP\",\n name: \"Pound\"\n },\n {\n code: \"ILR\",\n name: \"Old Shekel\"\n },\n {\n code: \"LAJ\",\n name: \"Pathet Lao Kip\"\n },\n {\n code: \"LVL\",\n name: \"Latvian Lats\"\n },\n {\n code: \"LVR\",\n name: \"Latvian Ruble\"\n },\n {\n code: \"LSM\",\n name: \"Loti\"\n },\n {\n code: \"ZAL\",\n name: \"Financial Rand\"\n },\n {\n code: \"LTL\",\n name: \"Lithuanian Litas\"\n },\n {\n code: \"LTT\",\n name: \"Talonas\"\n },\n {\n code: \"LUC\",\n name: \"Luxembourg Convertible Franc\"\n },\n {\n code: \"LUF\",\n name: \"Luxembourg Franc\"\n },\n {\n code: \"LUL\",\n name: \"Luxembourg Financial Franc\"\n },\n {\n code: \"MGF\",\n name: \"Malagasy Franc\"\n },\n {\n code: \"MVQ\",\n name: \"Maldive Rupee\"\n },\n {\n code: \"MLF\",\n name: \"Mali Franc\"\n },\n {\n code: \"MTL\",\n name: \"Maltese Lira\"\n },\n {\n code: \"MTP\",\n name: \"Maltese Pound\"\n },\n {\n code: \"MRO\",\n name: \"Ouguiya\"\n },\n {\n code: \"MXP\",\n name: \"Mexican Peso\"\n },\n {\n code: \"MZE\",\n name: \"Mozambique Escudo\"\n },\n {\n code: \"MZM\",\n name: \"Mozambique Metical\"\n },\n {\n code: \"NLG\",\n name: \"Netherlands Guilder\"\n },\n {\n code: \"NIC\",\n name: \"Cordoba\"\n },\n {\n code: \"PEH\",\n name: \"Sol\"\n },\n {\n code: \"PEI\",\n name: \"Inti\"\n },\n {\n code: \"PEN\",\n name: \"Nuevo Sol\"\n },\n {\n code: \"PES\",\n name: \"Sol\"\n },\n {\n code: \"PLZ\",\n name: \"Zloty\"\n },\n {\n code: \"PTE\",\n name: \"Portuguese Escudo\"\n },\n {\n code: \"ROK\",\n name: \"Leu A/52\"\n },\n {\n code: \"ROL\",\n name: \"Old Leu\"\n },\n {\n code: \"STD\",\n name: \"Dobra\"\n },\n {\n code: \"CSD\",\n name: \"Serbian Dinar\"\n },\n {\n code: \"SKK\",\n name: \"Slovak Koruna\"\n },\n {\n code: \"SIT\",\n name: \"Tolar\"\n },\n {\n code: \"RHD\",\n name: \"Rhodesian Dollar\"\n },\n {\n code: \"ESA\",\n name: \"Spanish Peseta\"\n },\n {\n code: \"ESB\",\n name: '\"A\" Account (convertible Peseta Account)'\n },\n {\n code: \"SDD\",\n name: \"Sudanese Dinar\"\n },\n {\n code: \"SDP\",\n name: \"Sudanese Pound\"\n },\n {\n code: \"SRG\",\n name: \"Surinam Guilder\"\n },\n {\n code: \"CHC\",\n name: \"WIR Franc (for electronic)\"\n },\n {\n code: \"TJR\",\n name: \"Tajik Ruble\"\n },\n {\n code: \"TPE\",\n name: \"Timor Escudo\"\n },\n {\n code: \"TRL\",\n name: \"Old Turkish Lira\"\n },\n {\n code: \"TMM\",\n name: \"Turkmenistan Manat\"\n },\n {\n code: \"UGS\",\n name: \"Uganda Shilling\"\n },\n {\n code: \"UGW\",\n name: \"Old Shilling\"\n },\n {\n code: \"UAK\",\n name: \"Karbovanet\"\n },\n {\n code: \"SUR\",\n name: \"Rouble\"\n },\n {\n code: \"USS\",\n name: \"US Dollar (Same day)\"\n },\n {\n code: \"UYN\",\n name: \"Old Uruguay Peso\"\n },\n {\n code: \"UYP\",\n name: \"Uruguayan Peso\"\n },\n {\n code: \"VEB\",\n name: \"Bolivar\"\n },\n {\n code: \"VEF\",\n name: \"Bolivar\"\n },\n {\n code: \"VNC\",\n name: \"Old Dong\"\n },\n {\n code: \"YDD\",\n name: \"Yemeni Dinar\"\n },\n {\n code: \"YUD\",\n name: \"New Yugoslavian Dinar\"\n },\n {\n code: \"YUM\",\n name: \"New Dinar\"\n },\n {\n code: \"YUN\",\n name: \"Yugoslavian Dinar\"\n },\n {\n code: \"ZRN\",\n name: \"New Zaire\"\n },\n {\n code: \"ZRZ\",\n name: \"Zaire\"\n },\n {\n code: \"ZMK\",\n name: \"Zambian Kwacha\"\n },\n {\n code: \"ZWC\",\n name: \"Rhodesian Dollar\"\n },\n {\n code: \"ZWD\",\n name: \"Zimbabwe Dollar\"\n },\n {\n code: \"ZWN\",\n name: \"Zimbabwe Dollar (new)\"\n },\n {\n code: \"ZWR\",\n name: \"Zimbabwe Dollar\"\n },\n {\n code: \"XFO\",\n name: \"Gold-Franc\"\n },\n {\n code: \"XRE\",\n name: \"RINET Funds Code\"\n },\n {\n code: \"XFU\",\n name: \"UIC-Franc\"\n }\n], e = o([]), r = () => d(e), l = ({\n children: a\n}) => /* @__PURE__ */ n(e.Provider, { value: c, children: a });\nexport {\n e as CurrenciesLOVContext,\n l as CurrenciesLOVProvider,\n r as useCurrenciesLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY2llcy5sb3YuY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbnRleHRzL2xvdi9jdXJyZW5jaWVzLmxvdi5jb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBSZWFjdE5vZGUsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBkYXRhIGZyb20gXCJAbG92L2N1cnJlbmNpZXMuanNvblwiO1xuXG5leHBvcnQgY29uc3QgQ3VycmVuY2llc0xPVkNvbnRleHQgPSBjcmVhdGVDb250ZXh0PGFueSB8IHVuZGVmaW5lZD4oW10pO1xuXG5leHBvcnQgY29uc3QgdXNlQ3VycmVuY2llc0xPViA9ICgpID0+IHVzZUNvbnRleHQoQ3VycmVuY2llc0xPVkNvbnRleHQpO1xuXG5leHBvcnQgY29uc3QgQ3VycmVuY2llc0xPVlByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEN1cnJlbmNpZXNMT1ZDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtkYXRhfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0N1cnJlbmNpZXNMT1ZDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcbiJdLCJuYW1lcyI6WyJDdXJyZW5jaWVzTE9WQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDdXJyZW5jaWVzTE9WIiwidXNlQ29udGV4dCIsIkN1cnJlbmNpZXNMT1ZQcm92aWRlciIsImNoaWxkcmVuIiwiZGF0YSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQUdhQSxJQUF1QkMsRUFBK0IsQ0FBRSxDQUFBLEdBRXhEQyxJQUFtQixNQUFNQyxFQUFXSCxDQUFvQixHQUV4REksSUFBd0IsQ0FBQztBQUFBLEVBQ3BDLFVBQUFDO0FBQ0Ysd0JBSUtMLEVBQXFCLFVBQXJCLEVBQThCLE9BQU9NLEdBQ25DLFVBQUFELEdBQ0g7In0=\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { createContext as c, useContext as d } from \"react\";\nconst t = [\n {\n name: \"Austria\",\n code: \"AUT\",\n vatcode: \"AT\"\n },\n {\n name: \"Belgium\",\n code: \"BEL\",\n vatcode: \"BE\"\n },\n {\n name: \"Bulgaria\",\n code: \"BGR\",\n vatcode: \"BG\"\n },\n {\n name: \"Croatia\",\n code: \"HRV\",\n vatcode: \"HR\"\n },\n {\n name: \"Cyprus\",\n code: \"CYP\",\n vatcode: \"CY\"\n },\n {\n name: \"Czech Republic\",\n code: \"CZE\",\n vatcode: \"CZ\"\n },\n {\n name: \"Denmark\",\n code: \"DNK\",\n vatcode: \"DK\"\n },\n {\n name: \"Estonia\",\n code: \"EST\",\n vatcode: \"EE\"\n },\n {\n name: \"Finland\",\n code: \"FIN\",\n vatcode: \"FI\"\n },\n {\n name: \"France\",\n code: \"FRA\",\n vatcode: \"FR\"\n },\n {\n name: \"Germany\",\n code: \"DEU\",\n vatcode: \"DE\"\n },\n {\n name: \"Greece\",\n code: \"GRC\",\n vatcode: \"EL\"\n },\n {\n name: \"Hungary\",\n code: \"HUN\",\n vatcode: \"HU\"\n },\n {\n name: \"Ireland\",\n code: \"IRL\",\n vatcode: \"IE\"\n },\n {\n name: \"Italy\",\n code: \"ITA\",\n vatcode: \"IT\"\n },\n {\n name: \"Latvia\",\n code: \"LVA\",\n vatcode: \"LV\"\n },\n {\n name: \"Lithuania\",\n code: \"LTU\",\n vatcode: \"LT\"\n },\n {\n name: \"Luxembourg\",\n code: \"LUX\",\n vatcode: \"LU\"\n },\n {\n name: \"Malta\",\n code: \"MLT\",\n vatcode: \"MT\"\n },\n {\n name: \"Netherlands\",\n code: \"NLD\",\n vatcode: \"NL\"\n },\n {\n name: \"Poland\",\n code: \"POL\",\n vatcode: \"PL\"\n },\n {\n name: \"Portugal\",\n code: \"PRT\",\n vatcode: \"PT\"\n },\n {\n name: \"Romania\",\n code: \"ROU\",\n vatcode: \"RO\"\n },\n {\n name: \"Slovakia\",\n code: \"SVK\",\n vatcode: \"SK\"\n },\n {\n name: \"Slovenia\",\n code: \"SVN\",\n vatcode: \"SI\"\n },\n {\n name: \"Spain\",\n code: \"ESP\",\n vatcode: \"ES\"\n },\n {\n name: \"Sweden\",\n code: \"SWE\",\n vatcode: \"SE\"\n }\n], e = c([]), v = () => d(e), r = ({\n children: a\n}) => /* @__PURE__ */ o(e.Provider, { value: t, children: a });\nexport {\n e as EUCountriesLOVContext,\n r as EuCountriesLOVProvider,\n v as useEUCountriesLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXUtY291bnRyaWVzLmxvdi5jb250ZXh0LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvY29udGV4dHMvbG92L2V1LWNvdW50cmllcy5sb3YuY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgUmVhY3ROb2RlLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgZGF0YSBmcm9tIFwiLi4vLi4vbG92L2V1LWNvdW50cmllcy5qc29uXCI7XG5cbmV4cG9ydCBjb25zdCBFVUNvdW50cmllc0xPVkNvbnRleHQgPSBjcmVhdGVDb250ZXh0PGFueSB8IHVuZGVmaW5lZD4oW10pO1xuXG5leHBvcnQgY29uc3QgdXNlRVVDb3VudHJpZXNMT1YgPSAoKSA9PiB1c2VDb250ZXh0KEVVQ291bnRyaWVzTE9WQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBFdUNvdW50cmllc0xPVlByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEVVQ291bnRyaWVzTE9WQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZGF0YX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FVUNvdW50cmllc0xPVkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIkVVQ291bnRyaWVzTE9WQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VFVUNvdW50cmllc0xPViIsInVzZUNvbnRleHQiLCJFdUNvdW50cmllc0xPVlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJkYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FHYUEsSUFBd0JDLEVBQStCLENBQUUsQ0FBQSxHQUV6REMsSUFBb0IsTUFBTUMsRUFBV0gsQ0FBcUIsR0FFMURJLElBQXlCLENBQUM7QUFBQSxFQUNyQyxVQUFBQztBQUNGLHdCQUlLTCxFQUFzQixVQUF0QixFQUErQixPQUFPTSxHQUNwQyxVQUFBRCxHQUNIOyJ9\n","import { jsx as n } from \"react/jsx-runtime\";\nimport { createContext as o, useContext as m } from \"react\";\nconst c = [\n {\n name: \"Abkhazian\",\n code: \"ab\"\n },\n {\n name: \"Afar\",\n code: \"aa\"\n },\n {\n name: \"Afrikaans\",\n code: \"af\"\n },\n {\n name: \"Akan\",\n code: \"ak\"\n },\n {\n name: \"Albanian\",\n code: \"sq\"\n },\n {\n name: \"Amharic\",\n code: \"am\"\n },\n {\n name: \"Arabic\",\n code: \"ar\"\n },\n {\n name: \"Aragonese\",\n code: \"an\"\n },\n {\n name: \"Armenian\",\n code: \"hy\"\n },\n {\n name: \"Assamese\",\n code: \"as\"\n },\n {\n name: \"Avaric\",\n code: \"av\"\n },\n {\n name: \"Avestan\",\n code: \"ae\"\n },\n {\n name: \"Aymara\",\n code: \"ay\"\n },\n {\n name: \"Azerbaijani\",\n code: \"az\"\n },\n {\n name: \"Bambara\",\n code: \"bm\"\n },\n {\n name: \"Bashkir\",\n code: \"ba\"\n },\n {\n name: \"Basque\",\n code: \"eu\"\n },\n {\n name: \"Belarusian\",\n code: \"be\"\n },\n {\n name: \"Bengali\",\n code: \"bn\"\n },\n {\n name: \"Bislama\",\n code: \"bi\"\n },\n {\n name: \"Bosnian\",\n code: \"bs\"\n },\n {\n name: \"Breton\",\n code: \"br\"\n },\n {\n name: \"Bulgarian\",\n code: \"bg\"\n },\n {\n name: \"Burmese\",\n code: \"my\"\n },\n {\n name: \"Catalan\",\n code: \"ca\"\n },\n {\n name: \"Chamorro\",\n code: \"ch\"\n },\n {\n name: \"Chechen\",\n code: \"ce\"\n },\n {\n name: \"Chichewa\",\n code: \"ny\"\n },\n {\n name: \"Chinese\",\n code: \"zh\"\n },\n {\n name: \"Chuvash\",\n code: \"cv\"\n },\n {\n name: \"Cornish\",\n code: \"kw\"\n },\n {\n name: \"Corsican\",\n code: \"co\"\n },\n {\n name: \"Cree\",\n code: \"cr\"\n },\n {\n name: \"Croatian\",\n code: \"hr\"\n },\n {\n name: \"Czech\",\n code: \"cs\"\n },\n {\n name: \"Danish\",\n code: \"da\"\n },\n {\n name: \"Divehi\",\n code: \"dv\"\n },\n {\n name: \"Dutch\",\n code: \"nl\"\n },\n {\n name: \"Dzongkha\",\n code: \"dz\"\n },\n {\n name: \"English\",\n code: \"en\"\n },\n {\n name: \"Esperanto\",\n code: \"eo\"\n },\n {\n name: \"Estonian\",\n code: \"et\"\n },\n {\n name: \"Ewe\",\n code: \"ee\"\n },\n {\n name: \"Faroese\",\n code: \"fo\"\n },\n {\n name: \"Fijian\",\n code: \"fj\"\n },\n {\n name: \"Finnish\",\n code: \"fi\"\n },\n {\n name: \"French\",\n code: \"fr\"\n },\n {\n name: \"Fulah\",\n code: \"ff\"\n },\n {\n name: \"Galician\",\n code: \"gl\"\n },\n {\n name: \"Georgian\",\n code: \"ka\"\n },\n {\n name: \"German\",\n code: \"de\"\n },\n {\n name: \"Greek\",\n code: \"el\"\n },\n {\n name: \"Guarani\",\n code: \"gn\"\n },\n {\n name: \"Gujarati\",\n code: \"gu\"\n },\n {\n name: \"Haitian\",\n code: \"ht\"\n },\n {\n name: \"Hausa\",\n code: \"ha\"\n },\n {\n name: \"Hebrew\",\n code: \"he\"\n },\n {\n name: \"Herero\",\n code: \"hz\"\n },\n {\n name: \"Hindi\",\n code: \"hi\"\n },\n {\n name: \"Hiri Motu\",\n code: \"ho\"\n },\n {\n name: \"Hungarian\",\n code: \"hu\"\n },\n {\n name: \"Interlingua\",\n code: \"ia\"\n },\n {\n name: \"Indonesian\",\n code: \"id\"\n },\n {\n name: \"Interlingue\",\n code: \"ie\"\n },\n {\n name: \"Irish\",\n code: \"ga\"\n },\n {\n name: \"Igbo\",\n code: \"ig\"\n },\n {\n name: \"Inupiaq\",\n code: \"ik\"\n },\n {\n name: \"Ido\",\n code: \"io\"\n },\n {\n name: \"Icelandic\",\n code: \"is\"\n },\n {\n name: \"Italian\",\n code: \"it\"\n },\n {\n name: \"Inuktitut\",\n code: \"iu\"\n },\n {\n name: \"Japanese\",\n code: \"ja\"\n },\n {\n name: \"Javanese\",\n code: \"jv\"\n },\n {\n name: \"Kalaallisut\",\n code: \"kl\"\n },\n {\n name: \"Kannada\",\n code: \"kn\"\n },\n {\n name: \"Kanuri\",\n code: \"kr\"\n },\n {\n name: \"Kashmiri\",\n code: \"ks\"\n },\n {\n name: \"Kazakh\",\n code: \"kk\"\n },\n {\n name: \"Central Khmer\",\n code: \"km\"\n },\n {\n name: \"Kikuyu\",\n code: \"ki\"\n },\n {\n name: \"Kinyarwanda\",\n code: \"rw\"\n },\n {\n name: \"Kirghiz\",\n code: \"ky\"\n },\n {\n name: \"Komi\",\n code: \"kv\"\n },\n {\n name: \"Kongo\",\n code: \"kg\"\n },\n {\n name: \"Korean\",\n code: \"ko\"\n },\n {\n name: \"Kurdish\",\n code: \"ku\"\n },\n {\n name: \"Kuanyama\",\n code: \"kj\"\n },\n {\n name: \"Latin\",\n code: \"la\"\n },\n {\n name: \"Luxembourgish\",\n code: \"lb\"\n },\n {\n name: \"Ganda\",\n code: \"lg\"\n },\n {\n name: \"Limburgan\",\n code: \"li\"\n },\n {\n name: \"Lingala\",\n code: \"ln\"\n },\n {\n name: \"Lao\",\n code: \"lo\"\n },\n {\n name: \"Lithuanian\",\n code: \"lt\"\n },\n {\n name: \"Luba-Katanga\",\n code: \"lu\"\n },\n {\n name: \"Latvian\",\n code: \"lv\"\n },\n {\n name: \"Manx\",\n code: \"gv\"\n },\n {\n name: \"Macedonian\",\n code: \"mk\"\n },\n {\n name: \"Malagasy\",\n code: \"mg\"\n },\n {\n name: \"Malay\",\n code: \"ms\"\n },\n {\n name: \"Malayalam\",\n code: \"ml\"\n },\n {\n name: \"Maltese\",\n code: \"mt\"\n },\n {\n name: \"Maori\",\n code: \"mi\"\n },\n {\n name: \"Marathi\",\n code: \"mr\"\n },\n {\n name: \"Marshallese\",\n code: \"mh\"\n },\n {\n name: \"Mongolian\",\n code: \"mn\"\n },\n {\n name: \"Nauru\",\n code: \"na\"\n },\n {\n name: \"Navajo\",\n code: \"nv\"\n },\n {\n name: \"North Ndebele\",\n code: \"nd\"\n },\n {\n name: \"Nepali\",\n code: \"ne\"\n },\n {\n name: \"Ndonga\",\n code: \"ng\"\n },\n {\n name: \"Norwegian Bokmål\",\n code: \"nb\"\n },\n {\n name: \"Norwegian Nynorsk\",\n code: \"nn\"\n },\n {\n name: \"Norwegian\",\n code: \"no\"\n },\n {\n name: \"Sichuan Yi\",\n code: \"ii\"\n },\n {\n name: \"South Ndebele\",\n code: \"nr\"\n },\n {\n name: \"Occitan\",\n code: \"oc\"\n },\n {\n name: \"Ojibwa\",\n code: \"oj\"\n },\n {\n name: \"Church Slavic\",\n code: \"cu\"\n },\n {\n name: \"Oromo\",\n code: \"om\"\n },\n {\n name: \"Oriya\",\n code: \"or\"\n },\n {\n name: \"Ossetian\",\n code: \"os\"\n },\n {\n name: \"Punjabi\",\n code: \"pa\"\n },\n {\n name: \"Pali\",\n code: \"pi\"\n },\n {\n name: \"Persian\",\n code: \"fa\"\n },\n {\n name: \"Polish\",\n code: \"pl\"\n },\n {\n name: \"Pashto\",\n code: \"ps\"\n },\n {\n name: \"Portuguese\",\n code: \"pt\"\n },\n {\n name: \"Quechua\",\n code: \"qu\"\n },\n {\n name: \"Romansh\",\n code: \"rm\"\n },\n {\n name: \"Rundi\",\n code: \"rn\"\n },\n {\n name: \"Romanian\",\n code: \"ro\"\n },\n {\n name: \"Russian\",\n code: \"ru\"\n },\n {\n name: \"Sanskrit\",\n code: \"sa\"\n },\n {\n name: \"Sardinian\",\n code: \"sc\"\n },\n {\n name: \"Sindhi\",\n code: \"sd\"\n },\n {\n name: \"Northern Sami\",\n code: \"se\"\n },\n {\n name: \"Samoan\",\n code: \"sm\"\n },\n {\n name: \"Sango\",\n code: \"sg\"\n },\n {\n name: \"Serbian\",\n code: \"sr\"\n },\n {\n name: \"Gaelic\",\n code: \"gd\"\n },\n {\n name: \"Shona\",\n code: \"sn\"\n },\n {\n name: \"Sinhala\",\n code: \"si\"\n },\n {\n name: \"Slovak\",\n code: \"sk\"\n },\n {\n name: \"Slovenian\",\n code: \"sl\"\n },\n {\n name: \"Somali\",\n code: \"so\"\n },\n {\n name: \"Southern Sotho\",\n code: \"st\"\n },\n {\n name: \"Spanish\",\n code: \"es\"\n },\n {\n name: \"Sundanese\",\n code: \"su\"\n },\n {\n name: \"Swahili\",\n code: \"sw\"\n },\n {\n name: \"Swati\",\n code: \"ss\"\n },\n {\n name: \"Swedish\",\n code: \"sv\"\n },\n {\n name: \"Tamil\",\n code: \"ta\"\n },\n {\n name: \"Telugu\",\n code: \"te\"\n },\n {\n name: \"Tajik\",\n code: \"tg\"\n },\n {\n name: \"Thai\",\n code: \"th\"\n },\n {\n name: \"Tigrinya\",\n code: \"ti\"\n },\n {\n name: \"Tibetan\",\n code: \"bo\"\n },\n {\n name: \"Turkmen\",\n code: \"tk\"\n },\n {\n name: \"Tagalog\",\n code: \"tl\"\n },\n {\n name: \"Tswana\",\n code: \"tn\"\n },\n {\n name: \"Tonga\",\n code: \"to\"\n },\n {\n name: \"Turkish\",\n code: \"tr\"\n },\n {\n name: \"Tsonga\",\n code: \"ts\"\n },\n {\n name: \"Tatar\",\n code: \"tt\"\n },\n {\n name: \"Twi\",\n code: \"tw\"\n },\n {\n name: \"Tahitian\",\n code: \"ty\"\n },\n {\n name: \"Uighur\",\n code: \"ug\"\n },\n {\n name: \"Ukrainian\",\n code: \"uk\"\n },\n {\n name: \"Urdu\",\n code: \"ur\"\n },\n {\n name: \"Uzbek\",\n code: \"uz\"\n },\n {\n name: \"Venda\",\n code: \"ve\"\n },\n {\n name: \"Vietnamese\",\n code: \"vi\"\n },\n {\n name: \"Volapük\",\n code: \"vo\"\n },\n {\n name: \"Walloon\",\n code: \"wa\"\n },\n {\n name: \"Welsh\",\n code: \"cy\"\n },\n {\n name: \"Wolof\",\n code: \"wo\"\n },\n {\n name: \"Western Frisian\",\n code: \"fy\"\n },\n {\n name: \"Xhosa\",\n code: \"xh\"\n },\n {\n name: \"Yiddish\",\n code: \"yi\"\n },\n {\n name: \"Yoruba\",\n code: \"yo\"\n },\n {\n name: \"Zhuang\",\n code: \"za\"\n },\n {\n name: \"Zulu\",\n code: \"zu\"\n }\n], e = o([]), r = () => m(e), s = ({\n children: a\n}) => /* @__PURE__ */ n(e.Provider, { value: c, children: a });\nexport {\n e as CorporateLanguagesLOVContext,\n s as CorporateLanguagesLOVProvider,\n r as useCorporateLanguagesLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycG9yYXRlLWxhbmd1YWdlcy5sb3YuY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbnRleHRzL2xvdi9jb3Jwb3JhdGUtbGFuZ3VhZ2VzLmxvdi5jb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBSZWFjdE5vZGUsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBkYXRhIGZyb20gXCIuLi8uLi9sb3YvY29ycG9yYXRlLWxhbmd1YWdlcy5qc29uXCI7XG5cbmV4cG9ydCBjb25zdCBDb3Jwb3JhdGVMYW5ndWFnZXNMT1ZDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxhbnkgfCB1bmRlZmluZWQ+KFtdKTtcblxuZXhwb3J0IGNvbnN0IHVzZUNvcnBvcmF0ZUxhbmd1YWdlc0xPViA9ICgpID0+XG4gIHVzZUNvbnRleHQoQ29ycG9yYXRlTGFuZ3VhZ2VzTE9WQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBDb3Jwb3JhdGVMYW5ndWFnZXNMT1ZQcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDb3Jwb3JhdGVMYW5ndWFnZXNMT1ZDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtkYXRhfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvcnBvcmF0ZUxhbmd1YWdlc0xPVkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIkNvcnBvcmF0ZUxhbmd1YWdlc0xPVkNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwidXNlQ29ycG9yYXRlTGFuZ3VhZ2VzTE9WIiwidXNlQ29udGV4dCIsIkNvcnBvcmF0ZUxhbmd1YWdlc0xPVlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJkYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FHYUEsSUFBK0JDLEVBQStCLENBQUUsQ0FBQSxHQUVoRUMsSUFBMkIsTUFDdENDLEVBQVdILENBQTRCLEdBRTVCSSxJQUFnQyxDQUFDO0FBQUEsRUFDNUMsVUFBQUM7QUFDRix3QkFJS0wsRUFBNkIsVUFBN0IsRUFBc0MsT0FBT00sR0FDM0MsVUFBQUQsR0FDSDsifQ==\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { createContext as a, useContext as r } from \"react\";\nconst c = [\n {\n code: \"EUR\",\n name: \"Euro\"\n },\n {\n code: \"GBP\",\n name: \"Pound Sterling\"\n },\n {\n code: \"BGN\",\n name: \"Bulgarian lev\"\n },\n {\n code: \"HRK\",\n name: \"Croatian kuna\"\n },\n {\n code: \"CZK\",\n name: \"Czech koruna\"\n },\n {\n code: \"DKK\",\n name: \"Danish krone\"\n },\n {\n code: \"HUF\",\n name: \"Hungarian forint\"\n },\n {\n code: \"PLN\",\n name: \"Polish złoty\"\n },\n {\n code: \"RON\",\n name: \"Romanian leu\"\n },\n {\n code: \"SEK\",\n name: \"Swedish krona\"\n },\n {\n code: \"CHF\",\n name: \"Swiss franc\"\n },\n {\n code: \"TRY\",\n name: \"Turkish lira\"\n }\n], e = a([]), d = () => r(e), m = ({\n children: n\n}) => /* @__PURE__ */ o(e.Provider, { value: c, children: n });\nexport {\n e as EUUKCurrenciesLOVContext,\n m as EUUKCurrenciesLOVProvider,\n d as useEUUKCurrenciesLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXUtdWstY3VycmVuY2llcy5sb3YuY29udGV4dC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbnRleHRzL2xvdi9ldS11ay1jdXJyZW5jaWVzLmxvdi5jb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCBSZWFjdE5vZGUsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBkYXRhIGZyb20gXCIuLi8uLi9sb3YvZXVfdWtfY3VycmVuY2llcy5qc29uXCI7XG5cbmV4cG9ydCBjb25zdCBFVVVLQ3VycmVuY2llc0xPVkNvbnRleHQgPSBjcmVhdGVDb250ZXh0PGFueSB8IHVuZGVmaW5lZD4oW10pO1xuXG5leHBvcnQgY29uc3QgdXNlRVVVS0N1cnJlbmNpZXNMT1YgPSAoKSA9PiB1c2VDb250ZXh0KEVVVUtDdXJyZW5jaWVzTE9WQ29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBFVVVLQ3VycmVuY2llc0xPVlByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPEVVVUtDdXJyZW5jaWVzTE9WQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZGF0YX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9FVVVLQ3VycmVuY2llc0xPVkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIkVVVUtDdXJyZW5jaWVzTE9WQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VFVVVLQ3VycmVuY2llc0xPViIsInVzZUNvbnRleHQiLCJFVVVLQ3VycmVuY2llc0xPVlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJkYXRhIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FHYUEsSUFBMkJDLEVBQStCLENBQUUsQ0FBQSxHQUU1REMsSUFBdUIsTUFBTUMsRUFBV0gsQ0FBd0IsR0FFaEVJLElBQTRCLENBQUM7QUFBQSxFQUN4QyxVQUFBQztBQUNGLHdCQUlLTCxFQUF5QixVQUF6QixFQUFrQyxPQUFPTSxHQUN2QyxVQUFBRCxHQUNIOyJ9\n","import { jsx as o } from \"react/jsx-runtime\";\nimport { createContext as n, useContext as d } from \"react\";\nconst c = [\n {\n name: \"Afghanistan\",\n code: \"AFG\"\n },\n {\n name: \"Barbados\",\n code: \"BRB\"\n },\n {\n name: \"Burkina Faso\",\n code: \"BFA\"\n },\n {\n name: \"Cambodia\",\n code: \"KHM\"\n },\n {\n name: \"Cayman Islands\",\n code: \"CYM\"\n },\n {\n name: \"Democratic People's Republic of Korea (DPRK)\",\n code: \"PRK\"\n },\n {\n name: \"Haiti\",\n code: \"HTI\"\n },\n {\n name: \"Iran\",\n code: \"IRN\"\n },\n {\n name: \"Jamaica\",\n code: \"JAM\"\n },\n {\n name: \"Jordan\",\n code: \"JOR\"\n },\n {\n name: \"Mali\",\n code: \"MLI\"\n },\n {\n name: \"Morocco\",\n code: \"MAR\"\n },\n {\n name: \"Myanmar\",\n code: \"MMR\"\n },\n {\n name: \"Nicaragua\",\n code: \"NIC\"\n },\n {\n name: \"Pakistan\",\n code: \"PAK\"\n },\n {\n name: \"Panama\",\n code: \"PAN\"\n },\n {\n name: \"Philippines\",\n code: \"PHL\"\n },\n {\n name: \"Senegal\",\n code: \"SEN\"\n },\n {\n name: \"South Sudan\",\n code: \"SSD\"\n },\n {\n name: \"Syrian Arab Republic\",\n code: \"SYR\"\n },\n {\n name: \"Trinidad and Tobago\",\n code: \"TTO\"\n },\n {\n name: \"Uganda\",\n code: \"UGA\"\n },\n {\n name: \"Vanuatu\",\n code: \"VUT\"\n },\n {\n name: \"Yemen\",\n code: \"YEM\"\n },\n {\n name: \"Zimbabwe\",\n code: \"ZWE\"\n }\n], e = n(\n []\n), r = () => d(e), t = ({\n children: a\n}) => /* @__PURE__ */ o(e.Provider, { value: c, children: a });\nexport {\n e as HighRiskthirdCountriesLOVContext,\n t as HighRiskthirdCountriesLOVProvider,\n r as useHighRiskthirdCountriesLOV\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaC1yaXNrdGhpcmQtY291bnRyaWVzLmNvbnRleHQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb250ZXh0cy9sb3YvaGlnaC1yaXNrdGhpcmQtY291bnRyaWVzLmNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGRhdGEgZnJvbSBcIi4uLy4uL2xvdi9oaWdoLXJpc2t0aGlyZC1jb3VudHJpZXMuanNvblwiO1xuXG5leHBvcnQgY29uc3QgSGlnaFJpc2t0aGlyZENvdW50cmllc0xPVkNvbnRleHQgPSBjcmVhdGVDb250ZXh0PGFueSB8IHVuZGVmaW5lZD4oXG4gIFtdLFxuKTtcblxuZXhwb3J0IGNvbnN0IHVzZUhpZ2hSaXNrdGhpcmRDb3VudHJpZXNMT1YgPSAoKSA9PlxuICB1c2VDb250ZXh0KEhpZ2hSaXNrdGhpcmRDb3VudHJpZXNMT1ZDb250ZXh0KTtcblxuZXhwb3J0IGNvbnN0IEhpZ2hSaXNrdGhpcmRDb3VudHJpZXNMT1ZQcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxIaWdoUmlza3RoaXJkQ291bnRyaWVzTE9WQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17ZGF0YX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9IaWdoUmlza3RoaXJkQ291bnRyaWVzTE9WQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsiSGlnaFJpc2t0aGlyZENvdW50cmllc0xPVkNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwidXNlSGlnaFJpc2t0aGlyZENvdW50cmllc0xPViIsInVzZUNvbnRleHQiLCJIaWdoUmlza3RoaXJkQ291bnRyaWVzTE9WUHJvdmlkZXIiLCJjaGlsZHJlbiIsImRhdGEiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FHYUEsSUFBbUNDO0FBQUEsRUFDOUMsQ0FBQTtBQUNGLEdBRWFDLElBQStCLE1BQzFDQyxFQUFXSCxDQUFnQyxHQUVoQ0ksSUFBb0MsQ0FBQztBQUFBLEVBQ2hELFVBQUFDO0FBQ0Ysd0JBSUtMLEVBQWlDLFVBQWpDLEVBQTBDLE9BQU9NLEdBQy9DLFVBQUFELEdBQ0g7In0=\n","import { jsx as a } from \"react/jsx-runtime\";\nimport { createContext as o, useState as i } from \"react\";\nconst n = o(\n void 0\n);\nfunction c(t) {\n const [e, r] = i(\"\");\n return /* @__PURE__ */ a(\n n.Provider,\n {\n value: {\n navbarTitle: e,\n setNavbarTitle: r\n },\n children: t.children\n }\n );\n}\nexport {\n n as NavbarTitleContext,\n c as default\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2YmFyLXRpdGxlLmNvbnRleHQuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb250ZXh0cy9uYXZiYXItdGl0bGUuY29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgRGlzcGF0Y2gsXG4gIFByb3BzV2l0aENoaWxkcmVuLFxuICBTZXRTdGF0ZUFjdGlvbixcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuXG5pbnRlcmZhY2UgTmF2YmFyVGl0bGVDb250ZXh0VHlwZSB7XG4gIG5hdmJhclRpdGxlOiBzdHJpbmc7XG4gIHNldE5hdmJhclRpdGxlOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjxzdHJpbmc+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IE5hdmJhclRpdGxlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8TmF2YmFyVGl0bGVDb250ZXh0VHlwZT4oXG4gIHVuZGVmaW5lZCEsXG4pO1xuXG5mdW5jdGlvbiBOYXZiYXJUaXRsZVByb3ZpZGVyKHByb3BzOiBQcm9wc1dpdGhDaGlsZHJlbikge1xuICBjb25zdCBbbmF2YmFyVGl0bGUsIHNldE5hdmJhclRpdGxlXSA9IHVzZVN0YXRlKFwiXCIpO1xuICByZXR1cm4gKFxuICAgIDxOYXZiYXJUaXRsZUNvbnRleHQuUHJvdmlkZXJcbiAgICAgIHZhbHVlPXt7XG4gICAgICAgIG5hdmJhclRpdGxlLFxuICAgICAgICBzZXROYXZiYXJUaXRsZSxcbiAgICAgIH19XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvTmF2YmFyVGl0bGVDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZiYXJUaXRsZVByb3ZpZGVyO1xuIl0sIm5hbWVzIjpbIk5hdmJhclRpdGxlQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJOYXZiYXJUaXRsZVByb3ZpZGVyIiwicHJvcHMiLCJuYXZiYXJUaXRsZSIsInNldE5hdmJhclRpdGxlIiwidXNlU3RhdGUiLCJqc3giXSwibWFwcGluZ3MiOiI7O0FBYU8sTUFBTUEsSUFBcUJDO0FBQUEsRUFDaEM7QUFDRjtBQUVBLFNBQVNDLEVBQW9CQyxHQUEwQjtBQUNyRCxRQUFNLENBQUNDLEdBQWFDLENBQWMsSUFBSUMsRUFBUyxFQUFFO0FBRS9DLFNBQUEsZ0JBQUFDO0FBQUEsSUFBQ1AsRUFBbUI7QUFBQSxJQUFuQjtBQUFBLE1BQ0MsT0FBTztBQUFBLFFBQ0wsYUFBQUk7QUFBQSxRQUNBLGdCQUFBQztBQUFBLE1BQ0Y7QUFBQSxNQUVDLFVBQU1GLEVBQUE7QUFBQSxJQUFBO0FBQUEsRUFDVDtBQUVKOyJ9\n","var E = /* @__PURE__ */ ((R) => (R.SERVICE_USER = \"CarrierConnect_Users\", R.SERVICE_ADMIN = \"CarrierConnect_Administrators\", R.SERVICE_SUB_ADMIN = \"CarrierConnect_Sub_Administrators\", R.CARRIERCONNECT_PURCHASER = \"CarrierConnect_Purchaser\", R.CARRIERCONNECT_FINANCE = \"CarrierConnect_Finance\", R))(E || {}), A = /* @__PURE__ */ ((R) => (R.USER = \"USER\", R.ADMINISTRATOR = \"ADMINISTRATOR\", R.SUPER_ADMINISTRATOR = \"SUPER_ADMINISTRATOR\", R.OWNER = \"OWNER\", R.SUB_ADMINISTRATOR = \"SUB_ADMINISTRATOR\", R.EXTERNAL_PARTNERS = \"EXTERNAL_PARTNERS\", R.FINANCE = \"FINANCE\", R.PURCHASER = \"PURCHASER\", R))(A || {});\nconst C = [10, 25, 50, 75, 100].map((R) => ({ label: R.toString(), id: R }));\nexport {\n E as UserGroup,\n A as UserRoles,\n C as paginationOptions\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXVzZXIubW9kZWwuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tb2RlbHMvYXBwLXVzZXIubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnYW5pc2F0aW9uQWRkcmVzcyB9IGZyb20gXCIuL29yZ2FuaXNhdGlvbnMubW9kZWwudHNcIjtcbmltcG9ydCB7XG4gIEN1cnJlbmNpZXMsXG4gIFNlcGFyYXRvcixcbiAgVW5pdE9mTWVhc3VyZSxcbiAgVXNlclNldHRpbmdJdGVtS2V5LFxufSBmcm9tIFwiLi9zZXR0aW5nLm1vZGVsLnRzXCI7XG5cbmV4cG9ydCBlbnVtIFVzZXJHcm91cCB7XG4gIFNFUlZJQ0VfVVNFUiA9IFwiQ2FycmllckNvbm5lY3RfVXNlcnNcIixcbiAgU0VSVklDRV9BRE1JTiA9IFwiQ2FycmllckNvbm5lY3RfQWRtaW5pc3RyYXRvcnNcIixcbiAgU0VSVklDRV9TVUJfQURNSU4gPSBcIkNhcnJpZXJDb25uZWN0X1N1Yl9BZG1pbmlzdHJhdG9yc1wiLFxuICBDQVJSSUVSQ09OTkVDVF9QVVJDSEFTRVIgPSBcIkNhcnJpZXJDb25uZWN0X1B1cmNoYXNlclwiLFxuICBDQVJSSUVSQ09OTkVDVF9GSU5BTkNFID0gXCJDYXJyaWVyQ29ubmVjdF9GaW5hbmNlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFVzZXJSb2xlcyB7XG4gIFVTRVIgPSBcIlVTRVJcIixcbiAgQURNSU5JU1RSQVRPUiA9IFwiQURNSU5JU1RSQVRPUlwiLFxuICBTVVBFUl9BRE1JTklTVFJBVE9SID0gXCJTVVBFUl9BRE1JTklTVFJBVE9SXCIsXG4gIE9XTkVSID0gXCJPV05FUlwiLFxuICBTVUJfQURNSU5JU1RSQVRPUiA9IFwiU1VCX0FETUlOSVNUUkFUT1JcIixcbiAgRVhURVJOQUxfUEFSVE5FUlMgPSBcIkVYVEVSTkFMX1BBUlRORVJTXCIsXG4gIEZJTkFOQ0UgPSBcIkZJTkFOQ0VcIixcbiAgUFVSQ0hBU0VSID0gXCJQVVJDSEFTRVJcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyUHJvZmlsZSB7XG4gIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nOyAvLyBpZGNzSWQ/XG4gIHRtYUlkOiBzdHJpbmc7XG4gIG9yZ2FuaXNhdGlvbjogc3RyaW5nO1xuICB0ZXJtc0FuZENvbmRpdGlvbnM6IGJvb2xlYW47XG4gIGdyb3VwczogVXNlckdyb3VwW107XG4gIGFwcFJvbGVzOiBVc2VyUm9sZXNbXTtcbiAgZW1haWw6IHN0cmluZztcbiAgZmFtaWx5TmFtZTogc3RyaW5nO1xuICBnaXZlbk5hbWU6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgdXNlUG9saWN5QWNjZXB0ZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNldHRpbmdzIHtcbiAgZGF0ZUZvcm1hdDogc3RyaW5nO1xuICB0aW1lRm9ybWF0OiBzdHJpbmc7XG4gIHVuaXRPZk1lYXN1cmU6IFVuaXRPZk1lYXN1cmU7XG4gIGRlY2ltYWxTZXBhcmF0b3I6IFNlcGFyYXRvcjtcbiAgdGhvdXNhbmRTZXBhcmF0b3I6IFNlcGFyYXRvcjtcbiAgcGFnaW5nOiBzdHJpbmc7XG4gIGJpZFZhbGlkaXR5RGF5czogc3RyaW5nO1xuICBiaWRWYWxpZGl0eUhvdXJzOiBzdHJpbmc7XG4gIGJpZFZhbGlkaXR5TWludXRlczogc3RyaW5nO1xuICBiaWRDdXJyZW5jeTogQ3VycmVuY2llcztcbiAgdmlzaWJpbGl0eVNlcnZpY2U6IHN0cmluZztcbiAgaXNWaXNpYmlsaXR5U2VydmljZVJlcXVpcmVkOiBib29sZWFuO1xuICBpc1Zpc2liaWxpdHlTZXJ2aWNlT25UbWE6IGJvb2xlYW47XG4gIGlzRW5hYmxlRW1haWxOb3RpZmljYXRpb25zOiBib29sZWFuO1xuICBlbWFpbElkczogc3RyaW5nO1xuICBjbzJlbWlzc2lvbmVuYWJsZWQ6IGJvb2xlYW47XG4gIGNvMmVtaXNzaW9uZmFjdG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNldHRpbmdJdGVtIHtcbiAga2V5OiBVc2VyU2V0dGluZ0l0ZW1LZXk7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclNldHRpbmdzUGF5bG9hZCB7XG4gIHNldHRpbmdzOiBVc2VyU2V0dGluZ0l0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdSZWZlcmVuY2Uge1xuICByZWZlcmVuY2U6IHN0cmluZztcbiAgdG1hSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VyT3JnIHtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGFkZHJlc3NlczogT3JnYW5pc2F0aW9uQWRkcmVzc1tdO1xuICBjYXJyaWVyUm9sZTogYm9vbGVhbjtcbiAgZW1haWw6IHN0cmluZztcbiAgb3JnSWQ6IG51bWJlcjtcbiAgb3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nO1xuICBvcmdhbmlzYXRpb25OdW1iZXI6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgc2hpcHBlclJvbGU6IGJvb2xlYW47XG4gIHRtYUlkOiBzdHJpbmc7XG4gIHVzZXJzOiBPcmdVc2VyW107XG4gIG1zcGlkOiBzdHJpbmc7XG4gIHJlZmVyZW5jZXM6IE9yZ1JlZmVyZW5jZVtdO1xuICB3ZWJBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnVXNlciB7XG4gIGlkY3NJZDogc3RyaW5nO1xuICBvcmdJZDogbnVtYmVyO1xuICB1c2VySWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzEwLCAyNSwgNTAsIDc1LCAxMDBdLm1hcCgoaXRlbTogbnVtYmVyKSA9PiB7XG4gIHJldHVybiB7IGxhYmVsOiBpdGVtLnRvU3RyaW5nKCksIGlkOiBpdGVtIH07XG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hbERldGFpbHNQYXlsb2FkIHtcbiAgZ2l2ZW5OYW1lOiBzdHJpbmc7XG4gIGZhbWlseU5hbWU6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgY3VycmVudFBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUVtYWlsUGF5bG9hZCB7XG4gIHJlcXVlc3RJZDogc3RyaW5nO1xuICBwYXNzY29kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVVzZXJQcm9maWxlUmVzcG9uc2Uge1xuICBjb25maXJtYXRpb25SZXF1aXJlZDogYm9vbGVhbjtcbiAgcmVxdWVzdElkPzogc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbIlVzZXJHcm91cCIsIlVzZXJSb2xlcyIsInBhZ2luYXRpb25PcHRpb25zIiwiaXRlbSJdLCJtYXBwaW5ncyI6IkFBUVksSUFBQUEsc0JBQUFBLE9BQ1ZBLEVBQUEsZUFBZSx3QkFDZkEsRUFBQSxnQkFBZ0IsaUNBQ2hCQSxFQUFBLG9CQUFvQixxQ0FDcEJBLEVBQUEsMkJBQTJCLDRCQUMzQkEsRUFBQSx5QkFBeUIsMEJBTGZBLElBQUFBLEtBQUEsQ0FBQSxDQUFBLEdBUUFDLHNCQUFBQSxPQUNWQSxFQUFBLE9BQU8sUUFDUEEsRUFBQSxnQkFBZ0IsaUJBQ2hCQSxFQUFBLHNCQUFzQix1QkFDdEJBLEVBQUEsUUFBUSxTQUNSQSxFQUFBLG9CQUFvQixxQkFDcEJBLEVBQUEsb0JBQW9CLHFCQUNwQkEsRUFBQSxVQUFVLFdBQ1ZBLEVBQUEsWUFBWSxhQVJGQSxJQUFBQSxLQUFBLENBQUEsQ0FBQTtBQW9GQyxNQUFBQyxJQUFvQixDQUFDLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQ0MsT0FDbkQsRUFBRSxPQUFPQSxFQUFLLFNBQVMsR0FBRyxJQUFJQSxFQUFLLEVBQzNDOyJ9\n","var r = /* @__PURE__ */ ((E) => (E.WARNING = \"warning\", E.INFO = \"info\", E))(r || {}), O = /* @__PURE__ */ ((E) => (E.YES = \"YES\", E.NO = \"NO\", E))(O || {}), S = /* @__PURE__ */ ((E) => (E.UPPERCASE = \"UPPERCASE\", E.LOWERCASE = \"LOWERCASE\", E))(S || {}), A = /* @__PURE__ */ ((E) => (E.MOBILE = \"MOBILE\", E.TABLET = \"TABLET\", E.DESKTOP = \"DESKTOP\", E))(A || {});\nexport {\n r as BadgeType,\n O as BinaryChoice,\n A as RWDMode,\n S as TextCaseChoice\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5tb2RlbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbGliL21vZGVscy91dGlsaXR5Lm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgS2V5VmFsdWVQYWlyPEssIFY+IHtcbiAga2V5OiBLO1xuICB2YWx1ZTogVjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEb3VibGVMYWJlbCB7XG4gIHByaW1hcnk6IHN0cmluZztcbiAgc2Vjb25kYXJ5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvdW50cnlPcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJyZW5jeU9wdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvcnBvcmF0ZUxhbmd1YWdlT3B0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25PcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBCYWRnZVR5cGUge1xuICBXQVJOSU5HID0gXCJ3YXJuaW5nXCIsXG4gIElORk8gPSBcImluZm9cIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1vZGVsIHtcbiAgaWQ6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFN0cmluZ0tleXMge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdHVzQ29uZmlnIHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgc3RhdHVzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZ3Jlc3NCYXJjb25maWcge1xuICBzdGF0dXNDb25maWc6IFN0YXR1c0NvbmZpZ1tdO1xuICBtYXhWYWx1ZTogbnVtYmVyO1xuICBtaW5WYWx1ZT86IG51bWJlcjtcbiAgc2hvd1ZhbHVlSW5Qcm9ncmVzc0Jhcj86IGJvb2xlYW47XG4gIGN1c3RvbWxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBCaW5hcnlDaG9pY2Uge1xuICBZRVMgPSBcIllFU1wiLFxuICBOTyA9IFwiTk9cIixcbn1cblxuZXhwb3J0IGVudW0gVGV4dENhc2VDaG9pY2Uge1xuICBVUFBFUkNBU0UgPSBcIlVQUEVSQ0FTRVwiLFxuICBMT1dFUkNBU0UgPSBcIkxPV0VSQ0FTRVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvYXN0ZXJDb25maWcge1xuICBpZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVVQ291bnRyeU9wdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICB2YXRjb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFJXRE1vZGUge1xuICBNT0JJTEUgPSBcIk1PQklMRVwiLFxuICBUQUJMRVQgPSBcIlRBQkxFVFwiLFxuICBERVNLVE9QID0gXCJERVNLVE9QXCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9saWNpZXNDb25maWdQcm9wcyB7XG4gIE9TU0NvbmZpZ3M/OiB7XG4gICAgYmxvY2tjaGFpbmNvbmZpZ3VybDogc3RyaW5nO1xuICAgIGZyb250ZW5kY29uZmlndXJsOiBzdHJpbmc7XG4gIH07XG4gIExlZ2FsUG9saWNpZXNDb25maWdzPzoge1xuICAgIHBsYXRmb3JtcHJpdmFjeW5vdGljZTogc3RyaW5nO1xuICAgIGFjY2Vzc3ByaXZhY3lub3RpY2U6IHN0cmluZztcbiAgICBjb25uZWN0cHJpdmFjeW5vdGljZTogc3RyaW5nO1xuICAgIGNvbnRyb2xwcml2YWN5bm90aWNlOiBzdHJpbmc7XG4gICAgbG9hZGJvYXJkcHJpdmFjeW5vdGljZTogc3RyaW5nO1xuICAgIGFjY2VwdGFibGV1c2Vwb2xpY3k/OiBzdHJpbmc7XG4gIH07XG4gIFByaXZhY3lBbmRDb29raWVzPzoge1xuICAgIHByaXZhY3lub3RpY2U6IHN0cmluZztcbiAgICBjb29raWVwb2xpY3k6IHN0cmluZztcbiAgfTtcbn1cbiJdLCJuYW1lcyI6WyJCYWRnZVR5cGUiLCJCaW5hcnlDaG9pY2UiLCJUZXh0Q2FzZUNob2ljZSIsIlJXRE1vZGUiXSwibWFwcGluZ3MiOiJBQThCWSxJQUFBQSxzQkFBQUEsT0FDVkEsRUFBQSxVQUFVLFdBQ1ZBLEVBQUEsT0FBTyxRQUZHQSxJQUFBQSxLQUFBLENBQUEsQ0FBQSxHQTJCQUMsc0JBQUFBLE9BQ1ZBLEVBQUEsTUFBTSxPQUNOQSxFQUFBLEtBQUssTUFGS0EsSUFBQUEsS0FBQSxDQUFBLENBQUEsR0FLQUMsc0JBQUFBLE9BQ1ZBLEVBQUEsWUFBWSxhQUNaQSxFQUFBLFlBQVksYUFGRkEsSUFBQUEsS0FBQSxDQUFBLENBQUEsR0FrQkFDLHNCQUFBQSxPQUNWQSxFQUFBLFNBQVMsVUFDVEEsRUFBQSxTQUFTLFVBQ1RBLEVBQUEsVUFBVSxXQUhBQSxJQUFBQSxLQUFBLENBQUEsQ0FBQTsifQ==\n","var E = Object.defineProperty;\nvar h = (t, s, i) => s in t ? E(t, s, { enumerable: !0, configurable: !0, writable: !0, value: i }) : t[s] = i;\nvar n = (t, s, i) => h(t, typeof s != \"symbol\" ? s + \"\" : s, i);\nvar g = /* @__PURE__ */ ((t) => (t.EQ = \"=\", t.NEQ = \"!=\", t.GT = \">\", t.GTE = \">=\", t.LT = \"<\", t.LTE = \"<=\", t.LIKE = \"LIKE\", t.NOTIN = \"NIN\", t.IN = \"IN\", t))(g || {}), T = /* @__PURE__ */ ((t) => (t.EQ = \"EQ\", t.NEQ = \"NEQ\", t.GT = \"GT\", t.GTE = \"GTE\", t.LT = \"LT\", t.LTE = \"LTE\", t.LIKE = \"LIKE\", t))(T || {}), a = /* @__PURE__ */ ((t) => (t.ASC = \"ASC\", t.DESC = \"DESC\", t))(a || {}), S = /* @__PURE__ */ ((t) => (t.FILTERS = \"filters\", t.QUICK = \"quick\", t.SORTING = \"sorting\", t))(S || {});\nconst I = (t, s) => t === s ? !0 : !(t.field === s.field && t.operator === s.operator && t.value === s.value), L = (t, s) => t === s ? !0 : t.filters.length !== s.filters.length ? !1 : !t.filters.find((i, l) => I(i, s.filters[l]) ? i : null);\nclass c {\n constructor(s, i, l, f, u) {\n n(this, \"limit\");\n n(this, \"offset\");\n n(this, \"filters\");\n n(this, \"sortBy\");\n n(this, \"sortDir\");\n n(this, \"params\");\n this.limit = s.limit, this.offset = s.offset, u && u.forEach((r) => {\n this[r.key] = r.value;\n });\n let e = \"\";\n l.length > 0 && (e = this.getAndFilterString(l)), i.length === 0 ? this.filters = e : this.filters = i.map((r) => (e ? e + \";\" : \"\") + this.getAndFilterString(r.filters)).join(\"::\"), f && (this.sortBy = f.sortBy, this.sortDir = f.sortDir);\n }\n getFitersParamsOnly() {\n const s = {};\n return this.filters && (s.filters = this.filters), this.alertsOnly && (s.alertsOnly = this.alertsOnly), s;\n }\n getFilterString(s) {\n return s.field + s.operator + s.value;\n }\n getAndFilterString(s) {\n return s.map(this.getFilterString).join(\";\");\n }\n}\nexport {\n c as ApiFilteringParams,\n g as FilterOperator,\n T as ProFilterOperator,\n a as SortDirection,\n S as URLQueryKeys,\n I as filterEquals,\n L as orFilterEquals\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLm1vZGVsLmpzIiwic291cmNlcyI6WyIuLi8uLi9saWIvbW9kZWxzL2ZpbHRlci5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBGaWx0ZXJPcGVyYXRvciB7XG4gIEVRID0gXCI9XCIsXG4gIE5FUSA9IFwiIT1cIixcbiAgR1QgPSBcIj5cIixcbiAgR1RFID0gXCI+PVwiLFxuICBMVCA9IFwiPFwiLFxuICBMVEUgPSBcIjw9XCIsXG4gIExJS0UgPSBcIkxJS0VcIixcbiAgTk9USU4gPSBcIk5JTlwiLFxuICBJTiA9IFwiSU5cIixcbn1cblxuZXhwb3J0IGVudW0gUHJvRmlsdGVyT3BlcmF0b3Ige1xuICBFUSA9IFwiRVFcIixcbiAgTkVRID0gXCJORVFcIixcbiAgR1QgPSBcIkdUXCIsXG4gIEdURSA9IFwiR1RFXCIsXG4gIExUID0gXCJMVFwiLFxuICBMVEUgPSBcIkxURVwiLFxuICBMSUtFID0gXCJMSUtFXCIsXG59XG5cbmV4cG9ydCBlbnVtIFNvcnREaXJlY3Rpb24ge1xuICBBU0MgPSBcIkFTQ1wiLFxuICBERVNDID0gXCJERVNDXCIsXG59XG5cbmV4cG9ydCBlbnVtIFVSTFF1ZXJ5S2V5cyB7XG4gIEZJTFRFUlMgPSBcImZpbHRlcnNcIixcbiAgUVVJQ0sgPSBcInF1aWNrXCIsXG4gIFNPUlRJTkcgPSBcInNvcnRpbmdcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXIge1xuICBmaWVsZDogc3RyaW5nO1xuICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3I7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGRpc3BsYXllZFZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyRXF1YWxzID0gKGZpbHRlcjE6IEZpbHRlciwgZmlsdGVyMjogRmlsdGVyKTogYm9vbGVhbiA9PiB7XG4gIGlmIChmaWx0ZXIxID09PSBmaWx0ZXIyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuICEoXG4gICAgZmlsdGVyMS5maWVsZCA9PT0gZmlsdGVyMi5maWVsZCAmJlxuICAgIGZpbHRlcjEub3BlcmF0b3IgPT09IGZpbHRlcjIub3BlcmF0b3IgJiZcbiAgICBmaWx0ZXIxLnZhbHVlID09PSBmaWx0ZXIyLnZhbHVlXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgb3JGaWx0ZXJFcXVhbHMgPSAoXG4gIGZpbHRlcjE6IE9yRmlsdGVyLFxuICBmaWx0ZXIyOiBPckZpbHRlcixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoZmlsdGVyMSA9PT0gZmlsdGVyMikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGZpbHRlcjEuZmlsdGVycy5sZW5ndGggIT09IGZpbHRlcjIuZmlsdGVycy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gIWZpbHRlcjEuZmlsdGVycy5maW5kKCh2YWx1ZTogRmlsdGVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGZpbHRlckVxdWFscyh2YWx1ZSwgZmlsdGVyMi5maWx0ZXJzW2luZGV4XSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBPckZpbHRlciB7XG4gIGZpbHRlcnM6IEZpbHRlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRhYmxlIHtcbiAgc29ydEJ5OiBzdHJpbmc7XG4gIHNvcnREaXI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlYWJsZSB7XG4gIGxpbWl0OiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVBhcmFtZXRlciB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhZ0ZpbHRlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgb3JGaWx0ZXJzOiBPckZpbHRlcltdO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXTtcbiAgc29ydDogU29ydGFibGU7XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlcnNDb250ZXh0ID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlZmF1bHRPckZpbHRlcnM6IE9yRmlsdGVyW107IC8vIFt7IGZpbHRlcnM6IFtzdGF0dXMgPSBjcmVhdGVkXX0gb3IgeyBmaWx0ZXJzOiBbc3RhdHVzID0gYWNjZXB0ZWQgQU5EIGJvb2tpbmdzdGF0dXM9c3RhcnRlZF19IG9yIHsgZmlsdGVyczogW3N0YXR1cyA9IGFjY2VwdGVkIEFORCBib29raW5nc3RhdHVzPW5vdCBzdGFydGVkXX1dXG4gIGRlZmF1bHRGaWx0ZXJzOiBGaWx0ZXJbXTsgLy9waWNrdXBkYXRlXG4gIGRlZmF1bHRQYWdlOiBQYWdlYWJsZTtcbiAgZGVmYXVsdFNvcnQ6IFNvcnRhYmxlIHwgdW5kZWZpbmVkO1xuICBkZWZhdWx0VGFnRmlsdGVyPzogc3RyaW5nO1xuICBkZWZhdWx0Q3VzdG9tUGFyYW1ldGVyczogQ3VzdG9tUGFyYW1ldGVyW107XG4gIGRlZmF1bHRRdWVyeVBhcmFtcz86IGFueVtdO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXRGaWx0ZXJzUGF5bG9hZCB7XG4gIGZpbHRlcnM6IEZpbHRlcltdO1xuICBvckZpbHRlcnM6IE9yRmlsdGVyW107XG4gIGN1c3RvbVBhcmFtZXRlcnM6IEN1c3RvbVBhcmFtZXRlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlcnNQYXJhbXMge1xuICBmaWx0ZXJzPzogc3RyaW5nO1xuXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGNsYXNzIEFwaUZpbHRlcmluZ1BhcmFtcyB7XG4gIGxpbWl0OiBudW1iZXI7XG4gIG9mZnNldDogbnVtYmVyO1xuICBmaWx0ZXJzPzogc3RyaW5nO1xuICBzb3J0Qnk/OiBzdHJpbmc7XG4gIHNvcnREaXI/OiBzdHJpbmc7XG4gIHBhcmFtcz86IHN0cmluZztcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGFnZTogUGFnZWFibGUsXG4gICAgb3JGaWx0ZXJzOiBPckZpbHRlcltdLFxuICAgIGZpbHRlcnM6IEZpbHRlcltdLFxuICAgIHNvcnQ/OiBTb3J0YWJsZSxcbiAgICBwYXJhbWV0ZXJzPzogQ3VzdG9tUGFyYW1ldGVyW10sXG4gICkge1xuICAgIHRoaXMubGltaXQgPSBwYWdlLmxpbWl0O1xuICAgIHRoaXMub2Zmc2V0ID0gcGFnZS5vZmZzZXQ7XG5cbiAgICBpZiAocGFyYW1ldGVycykge1xuICAgICAgcGFyYW1ldGVycy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICB0aGlzW3BhcmFtLmtleV0gPSBwYXJhbS52YWx1ZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBhbmRGaWx0ZXJzID0gXCJcIjtcbiAgICBpZiAoZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBhbmRGaWx0ZXJzID0gdGhpcy5nZXRBbmRGaWx0ZXJTdHJpbmcoZmlsdGVycyk7XG4gICAgfVxuXG4gICAgaWYgKG9yRmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmlsdGVycyA9IGFuZEZpbHRlcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVycyA9IG9yRmlsdGVyc1xuICAgICAgICAubWFwKChvckZpbHRlcikgPT4ge1xuICAgICAgICAgIGxldCBhbmRGaWx0ZXJTdHJpbmcgPSBhbmRGaWx0ZXJzID8gYW5kRmlsdGVycyArIFwiO1wiIDogXCJcIjtcbiAgICAgICAgICByZXR1cm4gYW5kRmlsdGVyU3RyaW5nICsgdGhpcy5nZXRBbmRGaWx0ZXJTdHJpbmcob3JGaWx0ZXIuZmlsdGVycyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKFwiOjpcIik7XG4gICAgfVxuXG4gICAgaWYgKHNvcnQpIHtcbiAgICAgIHRoaXMuc29ydEJ5ID0gc29ydC5zb3J0Qnk7XG4gICAgICB0aGlzLnNvcnREaXIgPSBzb3J0LnNvcnREaXI7XG4gICAgfVxuICB9XG5cbiAgZ2V0Rml0ZXJzUGFyYW1zT25seSgpOiBGaWx0ZXJzUGFyYW1zIHtcbiAgICBjb25zdCBmaWx0ZXJzUGFyYW1zOiBGaWx0ZXJzUGFyYW1zID0ge307XG4gICAgaWYgKHRoaXMuZmlsdGVycykge1xuICAgICAgZmlsdGVyc1BhcmFtcy5maWx0ZXJzID0gdGhpcy5maWx0ZXJzO1xuICAgIH1cbiAgICBpZiAodGhpcy5hbGVydHNPbmx5KSB7XG4gICAgICBmaWx0ZXJzUGFyYW1zLmFsZXJ0c09ubHkgPSB0aGlzLmFsZXJ0c09ubHk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJTdHJpbmcoZmlsdGVyOiBGaWx0ZXIpIHtcbiAgICByZXR1cm4gZmlsdGVyLmZpZWxkICsgZmlsdGVyLm9wZXJhdG9yICsgZmlsdGVyLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbmRGaWx0ZXJTdHJpbmcoZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICByZXR1cm4gZmlsdGVycy5tYXAodGhpcy5nZXRGaWx0ZXJTdHJpbmcpLmpvaW4oXCI7XCIpO1xuICB9XG59XG4iXSwibmFtZXMiOlsiRmlsdGVyT3BlcmF0b3IiLCJQcm9GaWx0ZXJPcGVyYXRvciIsIlNvcnREaXJlY3Rpb24iLCJVUkxRdWVyeUtleXMiLCJmaWx0ZXJFcXVhbHMiLCJmaWx0ZXIxIiwiZmlsdGVyMiIsIm9yRmlsdGVyRXF1YWxzIiwidmFsdWUiLCJpbmRleCIsIkFwaUZpbHRlcmluZ1BhcmFtcyIsInBhZ2UiLCJvckZpbHRlcnMiLCJmaWx0ZXJzIiwic29ydCIsInBhcmFtZXRlcnMiLCJfX3B1YmxpY0ZpZWxkIiwicGFyYW0iLCJhbmRGaWx0ZXJzIiwib3JGaWx0ZXIiLCJmaWx0ZXJzUGFyYW1zIiwiZmlsdGVyIl0sIm1hcHBpbmdzIjoiOzs7QUFBWSxJQUFBQSxzQkFBQUEsT0FDVkEsRUFBQSxLQUFLLEtBQ0xBLEVBQUEsTUFBTSxNQUNOQSxFQUFBLEtBQUss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\n","var u = typeof globalThis < \"u\" ? globalThis : typeof window < \"u\" ? window : typeof global < \"u\" ? global : typeof self < \"u\" ? self : {};\nfunction f(e) {\n return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, \"default\") ? e.default : e;\n}\nfunction l(e) {\n if (e.__esModule) return e;\n var r = e.default;\n if (typeof r == \"function\") {\n var t = function o() {\n return this instanceof o ? Reflect.construct(r, arguments, this.constructor) : r.apply(this, arguments);\n };\n t.prototype = r.prototype;\n } else t = {};\n return Object.defineProperty(t, \"__esModule\", { value: !0 }), Object.keys(e).forEach(function(o) {\n var n = Object.getOwnPropertyDescriptor(e, o);\n Object.defineProperty(t, o, n.get ? n : {\n enumerable: !0,\n get: function() {\n return e[o];\n }\n });\n }), t;\n}\nexport {\n l as a,\n u as c,\n f as g\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2NvbW1vbmpzSGVscGVycy1Ca2ZlVVVLLS5qcyIsInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9\n","import { c as Z, g as N } from \"./_commonjsHelpers-BkfeUUK-.js\";\nvar ye;\ntry {\n ye = Map;\n} catch {\n}\nvar _e;\ntry {\n _e = Set;\n} catch {\n}\nfunction Pt(t, e, r) {\n if (!t || typeof t != \"object\" || typeof t == \"function\")\n return t;\n if (t.nodeType && \"cloneNode\" in t)\n return t.cloneNode(!0);\n if (t instanceof Date)\n return new Date(t.getTime());\n if (t instanceof RegExp)\n return new RegExp(t);\n if (Array.isArray(t))\n return t.map($e);\n if (ye && t instanceof ye)\n return new Map(Array.from(t.entries()));\n if (_e && t instanceof _e)\n return new Set(Array.from(t.values()));\n if (t instanceof Object) {\n e.push(t);\n var n = Object.create(t);\n r.push(n);\n for (var a in t) {\n var s = e.findIndex(function(i) {\n return i === t[a];\n });\n n[a] = s > -1 ? r[s] : Pt(t[a], e, r);\n }\n return n;\n }\n return t;\n}\nfunction $e(t) {\n return Pt(t, [], []);\n}\nconst jr = Object.prototype.toString, Lr = Error.prototype.toString, Nr = RegExp.prototype.toString, Ur = typeof Symbol < \"u\" ? Symbol.prototype.toString : () => \"\", zr = /^Symbol\\((.*)\\)(.*)$/;\nfunction Gr(t) {\n return t != +t ? \"NaN\" : t === 0 && 1 / t < 0 ? \"-0\" : \"\" + t;\n}\nfunction qe(t, e = !1) {\n if (t == null || t === !0 || t === !1) return \"\" + t;\n const r = typeof t;\n if (r === \"number\") return Gr(t);\n if (r === \"string\") return e ? `\"${t}\"` : t;\n if (r === \"function\") return \"[Function \" + (t.name || \"anonymous\") + \"]\";\n if (r === \"symbol\") return Ur.call(t).replace(zr, \"Symbol($1)\");\n const n = jr.call(t).slice(8, -1);\n return n === \"Date\" ? isNaN(t.getTime()) ? \"\" + t : t.toISOString(t) : n === \"Error\" || t instanceof Error ? \"[\" + Lr.call(t) + \"]\" : n === \"RegExp\" ? Nr.call(t) : null;\n}\nfunction q(t, e) {\n let r = qe(t, e);\n return r !== null ? r : JSON.stringify(t, function(n, a) {\n let s = qe(this[n], e);\n return s !== null ? s : a;\n }, 2);\n}\nlet P = {\n default: \"${path} is invalid\",\n required: \"${path} is a required field\",\n oneOf: \"${path} must be one of the following values: ${values}\",\n notOneOf: \"${path} must not be one of the following values: ${values}\",\n notType: ({\n path: t,\n type: e,\n value: r,\n originalValue: n\n }) => {\n let a = n != null && n !== r, s = `${t} must be a \\`${e}\\` type, but the final value was: \\`${q(r, !0)}\\`` + (a ? ` (cast from the value \\`${q(n, !0)}\\`).` : \".\");\n return r === null && (s += '\\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`'), s;\n },\n defined: \"${path} must be defined\"\n}, A = {\n length: \"${path} must be exactly ${length} characters\",\n min: \"${path} must be at least ${min} characters\",\n max: \"${path} must be at most ${max} characters\",\n matches: '${path} must match the following: \"${regex}\"',\n email: \"${path} must be a valid email\",\n url: \"${path} must be a valid URL\",\n uuid: \"${path} must be a valid UUID\",\n trim: \"${path} must be a trimmed string\",\n lowercase: \"${path} must be a lowercase string\",\n uppercase: \"${path} must be a upper case string\"\n}, kr = {\n min: \"${path} must be greater than or equal to ${min}\",\n max: \"${path} must be less than or equal to ${max}\",\n lessThan: \"${path} must be less than ${less}\",\n moreThan: \"${path} must be greater than ${more}\",\n positive: \"${path} must be a positive number\",\n negative: \"${path} must be a negative number\",\n integer: \"${path} must be an integer\"\n}, me = {\n min: \"${path} field must be later than ${min}\",\n max: \"${path} field must be at earlier than ${max}\"\n}, be = {\n isValue: \"${path} field must be ${value}\"\n}, xe = {\n noUnknown: \"${path} field has unspecified keys: ${unknown}\"\n}, Hr = {\n min: \"${path} field must have at least ${min} items\",\n max: \"${path} field must have less than or equal to ${max} items\",\n length: \"${path} must have ${length} items\"\n};\nObject.assign(/* @__PURE__ */ Object.create(null), {\n mixed: P,\n string: A,\n number: kr,\n date: me,\n object: xe,\n array: Hr,\n boolean: be\n});\nvar Kr = Object.prototype, qr = Kr.hasOwnProperty;\nfunction Vr(t, e) {\n return t != null && qr.call(t, e);\n}\nvar Br = Vr, Wr = Array.isArray, T = Wr, Zr = typeof Z == \"object\" && Z && Z.Object === Object && Z, It = Zr, Jr = It, Yr = typeof self == \"object\" && self && self.Object === Object && self, Xr = Jr || Yr || Function(\"return this\")(), O = Xr, Qr = O, en = Qr.Symbol, se = en, Ve = se, Rt = Object.prototype, tn = Rt.hasOwnProperty, rn = Rt.toString, K = Ve ? Ve.toStringTag : void 0;\nfunction nn(t) {\n var e = tn.call(t, K), r = t[K];\n try {\n t[K] = void 0;\n var n = !0;\n } catch {\n }\n var a = rn.call(t);\n return n && (e ? t[K] = r : delete t[K]), a;\n}\nvar an = nn, sn = Object.prototype, un = sn.toString;\nfunction on(t) {\n return un.call(t);\n}\nvar fn = on, Be = se, ln = an, cn = fn, hn = \"[object Null]\", dn = \"[object Undefined]\", We = Be ? Be.toStringTag : void 0;\nfunction pn(t) {\n return t == null ? t === void 0 ? dn : hn : We && We in Object(t) ? ln(t) : cn(t);\n}\nvar V = pn;\nfunction vn(t) {\n return t != null && typeof t == \"object\";\n}\nvar B = vn, gn = V, yn = B, _n = \"[object Symbol]\";\nfunction $n(t) {\n return typeof t == \"symbol\" || yn(t) && gn(t) == _n;\n}\nvar Ie = $n, mn = T, bn = Ie, xn = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/, Fn = /^\\w*$/;\nfunction En(t, e) {\n if (mn(t))\n return !1;\n var r = typeof t;\n return r == \"number\" || r == \"symbol\" || r == \"boolean\" || t == null || bn(t) ? !0 : Fn.test(t) || !xn.test(t) || e != null && t in Object(e);\n}\nvar Re = En;\nfunction wn(t) {\n var e = typeof t;\n return t != null && (e == \"object\" || e == \"function\");\n}\nvar Me = wn, An = V, On = Me, Sn = \"[object AsyncFunction]\", Cn = \"[object Function]\", Tn = \"[object GeneratorFunction]\", Dn = \"[object Proxy]\";\nfunction Pn(t) {\n if (!On(t))\n return !1;\n var e = An(t);\n return e == Cn || e == Tn || e == Sn || e == Dn;\n}\nvar Mt = Pn, In = O, Rn = In[\"__core-js_shared__\"], Mn = Rn, de = Mn, Ze = function() {\n var t = /[^.]+$/.exec(de && de.keys && de.keys.IE_PROTO || \"\");\n return t ? \"Symbol(src)_1.\" + t : \"\";\n}();\nfunction jn(t) {\n return !!Ze && Ze in t;\n}\nvar Ln = jn, Nn = Function.prototype, Un = Nn.toString;\nfunction zn(t) {\n if (t != null) {\n try {\n return Un.call(t);\n } catch {\n }\n try {\n return t + \"\";\n } catch {\n }\n }\n return \"\";\n}\nvar jt = zn, Gn = Mt, kn = Ln, Hn = Me, Kn = jt, qn = /[\\\\^$.*+?()[\\]{}|]/g, Vn = /^\\[object .+?Constructor\\]$/, Bn = Function.prototype, Wn = Object.prototype, Zn = Bn.toString, Jn = Wn.hasOwnProperty, Yn = RegExp(\n \"^\" + Zn.call(Jn).replace(qn, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction Xn(t) {\n if (!Hn(t) || kn(t))\n return !1;\n var e = Gn(t) ? Yn : Vn;\n return e.test(Kn(t));\n}\nvar Qn = Xn;\nfunction ea(t, e) {\n return t == null ? void 0 : t[e];\n}\nvar ta = ea, ra = Qn, na = ta;\nfunction aa(t, e) {\n var r = na(t, e);\n return ra(r) ? r : void 0;\n}\nvar R = aa, sa = R, ia = sa(Object, \"create\"), ie = ia, Je = ie;\nfunction ua() {\n this.__data__ = Je ? Je(null) : {}, this.size = 0;\n}\nvar oa = ua;\nfunction fa(t) {\n var e = this.has(t) && delete this.__data__[t];\n return this.size -= e ? 1 : 0, e;\n}\nvar la = fa, ca = ie, ha = \"__lodash_hash_undefined__\", da = Object.prototype, pa = da.hasOwnProperty;\nfunction va(t) {\n var e = this.__data__;\n if (ca) {\n var r = e[t];\n return r === ha ? void 0 : r;\n }\n return pa.call(e, t) ? e[t] : void 0;\n}\nvar ga = va, ya = ie, _a = Object.prototype, $a = _a.hasOwnProperty;\nfunction ma(t) {\n var e = this.__data__;\n return ya ? e[t] !== void 0 : $a.call(e, t);\n}\nvar ba = ma, xa = ie, Fa = \"__lodash_hash_undefined__\";\nfunction Ea(t, e) {\n var r = this.__data__;\n return this.size += this.has(t) ? 0 : 1, r[t] = xa && e === void 0 ? Fa : e, this;\n}\nvar wa = Ea, Aa = oa, Oa = la, Sa = ga, Ca = ba, Ta = wa;\nfunction U(t) {\n var e = -1, r = t == null ? 0 : t.length;\n for (this.clear(); ++e < r; ) {\n var n = t[e];\n this.set(n[0], n[1]);\n }\n}\nU.prototype.clear = Aa;\nU.prototype.delete = Oa;\nU.prototype.get = Sa;\nU.prototype.has = Ca;\nU.prototype.set = Ta;\nvar Da = U;\nfunction Pa() {\n this.__data__ = [], this.size = 0;\n}\nvar Ia = Pa;\nfunction Ra(t, e) {\n return t === e || t !== t && e !== e;\n}\nvar Lt = Ra, Ma = Lt;\nfunction ja(t, e) {\n for (var r = t.length; r--; )\n if (Ma(t[r][0], e))\n return r;\n return -1;\n}\nvar ue = ja, La = ue, Na = Array.prototype, Ua = Na.splice;\nfunction za(t) {\n var e = this.__data__, r = La(e, t);\n if (r < 0)\n return !1;\n var n = e.length - 1;\n return r == n ? e.pop() : Ua.call(e, r, 1), --this.size, !0;\n}\nvar Ga = za, ka = ue;\nfunction Ha(t) {\n var e = this.__data__, r = ka(e, t);\n return r < 0 ? void 0 : e[r][1];\n}\nvar Ka = Ha, qa = ue;\nfunction Va(t) {\n return qa(this.__data__, t) > -1;\n}\nvar Ba = Va, Wa = ue;\nfunction Za(t, e) {\n var r = this.__data__, n = Wa(r, t);\n return n < 0 ? (++this.size, r.push([t, e])) : r[n][1] = e, this;\n}\nvar Ja = Za, Ya = Ia, Xa = Ga, Qa = Ka, es = Ba, ts = Ja;\nfunction z(t) {\n var e = -1, r = t == null ? 0 : t.length;\n for (this.clear(); ++e < r; ) {\n var n = t[e];\n this.set(n[0], n[1]);\n }\n}\nz.prototype.clear = Ya;\nz.prototype.delete = Xa;\nz.prototype.get = Qa;\nz.prototype.has = es;\nz.prototype.set = ts;\nvar oe = z, rs = R, ns = O, as = rs(ns, \"Map\"), je = as, Ye = Da, ss = oe, is = je;\nfunction us() {\n this.size = 0, this.__data__ = {\n hash: new Ye(),\n map: new (is || ss)(),\n string: new Ye()\n };\n}\nvar os = us;\nfunction fs(t) {\n var e = typeof t;\n return e == \"string\" || e == \"number\" || e == \"symbol\" || e == \"boolean\" ? t !== \"__proto__\" : t === null;\n}\nvar ls = fs, cs = ls;\nfunction hs(t, e) {\n var r = t.__data__;\n return cs(e) ? r[typeof e == \"string\" ? \"string\" : \"hash\"] : r.map;\n}\nvar fe = hs, ds = fe;\nfunction ps(t) {\n var e = ds(this, t).delete(t);\n return this.size -= e ? 1 : 0, e;\n}\nvar vs = ps, gs = fe;\nfunction ys(t) {\n return gs(this, t).get(t);\n}\nvar _s = ys, $s = fe;\nfunction ms(t) {\n return $s(this, t).has(t);\n}\nvar bs = ms, xs = fe;\nfunction Fs(t, e) {\n var r = xs(this, t), n = r.size;\n return r.set(t, e), this.size += r.size == n ? 0 : 1, this;\n}\nvar Es = Fs, ws = os, As = vs, Os = _s, Ss = bs, Cs = Es;\nfunction G(t) {\n var e = -1, r = t == null ? 0 : t.length;\n for (this.clear(); ++e < r; ) {\n var n = t[e];\n this.set(n[0], n[1]);\n }\n}\nG.prototype.clear = ws;\nG.prototype.delete = As;\nG.prototype.get = Os;\nG.prototype.has = Ss;\nG.prototype.set = Cs;\nvar Le = G, Nt = Le, Ts = \"Expected a function\";\nfunction Ne(t, e) {\n if (typeof t != \"function\" || e != null && typeof e != \"function\")\n throw new TypeError(Ts);\n var r = function() {\n var n = arguments, a = e ? e.apply(this, n) : n[0], s = r.cache;\n if (s.has(a))\n return s.get(a);\n var i = t.apply(this, n);\n return r.cache = s.set(a, i) || s, i;\n };\n return r.cache = new (Ne.Cache || Nt)(), r;\n}\nNe.Cache = Nt;\nvar Ds = Ne, Ps = Ds, Is = 500;\nfunction Rs(t) {\n var e = Ps(t, function(n) {\n return r.size === Is && r.clear(), n;\n }), r = e.cache;\n return e;\n}\nvar Ms = Rs, js = Ms, Ls = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g, Ns = /\\\\(\\\\)?/g, Us = js(function(t) {\n var e = [];\n return t.charCodeAt(0) === 46 && e.push(\"\"), t.replace(Ls, function(r, n, a, s) {\n e.push(a ? s.replace(Ns, \"$1\") : n || r);\n }), e;\n}), zs = Us;\nfunction Gs(t, e) {\n for (var r = -1, n = t == null ? 0 : t.length, a = Array(n); ++r < n; )\n a[r] = e(t[r], r, t);\n return a;\n}\nvar ks = Gs, Xe = se, Hs = ks, Ks = T, qs = Ie, Vs = 1 / 0, Qe = Xe ? Xe.prototype : void 0, et = Qe ? Qe.toString : void 0;\nfunction Ut(t) {\n if (typeof t == \"string\")\n return t;\n if (Ks(t))\n return Hs(t, Ut) + \"\";\n if (qs(t))\n return et ? et.call(t) : \"\";\n var e = t + \"\";\n return e == \"0\" && 1 / t == -Vs ? \"-0\" : e;\n}\nvar Bs = Ut, Ws = Bs;\nfunction Zs(t) {\n return t == null ? \"\" : Ws(t);\n}\nvar W = Zs, Js = T, Ys = Re, Xs = zs, Qs = W;\nfunction ei(t, e) {\n return Js(t) ? t : Ys(t, e) ? [t] : Xs(Qs(t));\n}\nvar zt = ei, ti = V, ri = B, ni = \"[object Arguments]\";\nfunction ai(t) {\n return ri(t) && ti(t) == ni;\n}\nvar si = ai, tt = si, ii = B, Gt = Object.prototype, ui = Gt.hasOwnProperty, oi = Gt.propertyIsEnumerable, fi = tt(/* @__PURE__ */ function() {\n return arguments;\n}()) ? tt : function(t) {\n return ii(t) && ui.call(t, \"callee\") && !oi.call(t, \"callee\");\n}, kt = fi, li = 9007199254740991, ci = /^(?:0|[1-9]\\d*)$/;\nfunction hi(t, e) {\n var r = typeof t;\n return e = e ?? li, !!e && (r == \"number\" || r != \"symbol\" && ci.test(t)) && t > -1 && t % 1 == 0 && t < e;\n}\nvar Ht = hi, di = 9007199254740991;\nfunction pi(t) {\n return typeof t == \"number\" && t > -1 && t % 1 == 0 && t <= di;\n}\nvar Ue = pi, vi = Ie, gi = 1 / 0;\nfunction yi(t) {\n if (typeof t == \"string\" || vi(t))\n return t;\n var e = t + \"\";\n return e == \"0\" && 1 / t == -gi ? \"-0\" : e;\n}\nvar le = yi, _i = zt, $i = kt, mi = T, bi = Ht, xi = Ue, Fi = le;\nfunction Ei(t, e, r) {\n e = _i(e, t);\n for (var n = -1, a = e.length, s = !1; ++n < a; ) {\n var i = Fi(e[n]);\n if (!(s = t != null && r(t, i)))\n break;\n t = t[i];\n }\n return s || ++n != a ? s : (a = t == null ? 0 : t.length, !!a && xi(a) && bi(i, a) && (mi(t) || $i(t)));\n}\nvar Kt = Ei, wi = Br, Ai = Kt;\nfunction Oi(t, e) {\n return t != null && Ai(t, e, wi);\n}\nvar Si = Oi;\nconst Q = /* @__PURE__ */ N(Si), qt = (t) => t && t.__isYupSchema__;\nclass Ci {\n constructor(e, r) {\n if (this.fn = void 0, this.refs = e, this.refs = e, typeof r == \"function\") {\n this.fn = r;\n return;\n }\n if (!Q(r, \"is\")) throw new TypeError(\"`is:` is required for `when()` conditions\");\n if (!r.then && !r.otherwise) throw new TypeError(\"either `then:` or `otherwise:` is required for `when()` conditions\");\n let {\n is: n,\n then: a,\n otherwise: s\n } = r, i = typeof n == \"function\" ? n : (...u) => u.every((o) => o === n);\n this.fn = function(...u) {\n let o = u.pop(), f = u.pop(), c = i(...u) ? a : s;\n if (c)\n return typeof c == \"function\" ? c(f) : f.concat(c.resolve(o));\n };\n }\n resolve(e, r) {\n let n = this.refs.map((s) => s.getValue(r == null ? void 0 : r.value, r == null ? void 0 : r.parent, r == null ? void 0 : r.context)), a = this.fn.apply(e, n.concat(e, r));\n if (a === void 0 || a === e) return e;\n if (!qt(a)) throw new TypeError(\"conditions must return a schema object\");\n return a.resolve(r);\n }\n}\nfunction Vt(t) {\n return t == null ? [] : [].concat(t);\n}\nfunction Fe() {\n return Fe = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var r = arguments[e];\n for (var n in r)\n Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n }\n return t;\n }, Fe.apply(this, arguments);\n}\nlet Ti = /\\$\\{\\s*(\\w+)\\s*\\}/g;\nclass x extends Error {\n static formatError(e, r) {\n const n = r.label || r.path || \"this\";\n return n !== r.path && (r = Fe({}, r, {\n path: n\n })), typeof e == \"string\" ? e.replace(Ti, (a, s) => q(r[s])) : typeof e == \"function\" ? e(r) : e;\n }\n static isError(e) {\n return e && e.name === \"ValidationError\";\n }\n constructor(e, r, n, a) {\n super(), this.value = void 0, this.path = void 0, this.type = void 0, this.errors = void 0, this.params = void 0, this.inner = void 0, this.name = \"ValidationError\", this.value = r, this.path = n, this.type = a, this.errors = [], this.inner = [], Vt(e).forEach((s) => {\n x.isError(s) ? (this.errors.push(...s.errors), this.inner = this.inner.concat(s.inner.length ? s.inner : s)) : this.errors.push(s);\n }), this.message = this.errors.length > 1 ? `${this.errors.length} errors occurred` : this.errors[0], Error.captureStackTrace && Error.captureStackTrace(this, x);\n }\n}\nconst Di = (t) => {\n let e = !1;\n return (...r) => {\n e || (e = !0, t(...r));\n };\n};\nfunction Ee(t, e) {\n let {\n endEarly: r,\n tests: n,\n args: a,\n value: s,\n errors: i,\n sort: u,\n path: o\n } = t, f = Di(e), c = n.length;\n const l = [];\n if (i = i || [], !c) return i.length ? f(new x(i, s, o)) : f(null, s);\n for (let h = 0; h < n.length; h++) {\n const d = n[h];\n d(a, function(p) {\n if (p) {\n if (!x.isError(p))\n return f(p, s);\n if (r)\n return p.value = s, f(p, s);\n l.push(p);\n }\n if (--c <= 0) {\n if (l.length && (u && l.sort(u), i.length && l.push(...i), i = l), i.length) {\n f(new x(i, s, o), s);\n return;\n }\n f(null, s);\n }\n });\n }\n}\nvar Pi = R, Ii = function() {\n try {\n var t = Pi(Object, \"defineProperty\");\n return t({}, \"\", {}), t;\n } catch {\n }\n}(), Ri = Ii, rt = Ri;\nfunction Mi(t, e, r) {\n e == \"__proto__\" && rt ? rt(t, e, {\n configurable: !0,\n enumerable: !0,\n value: r,\n writable: !0\n }) : t[e] = r;\n}\nvar Bt = Mi;\nfunction ji(t) {\n return function(e, r, n) {\n for (var a = -1, s = Object(e), i = n(e), u = i.length; u--; ) {\n var o = i[t ? u : ++a];\n if (r(s[o], o, s) === !1)\n break;\n }\n return e;\n };\n}\nvar Li = ji, Ni = Li, Ui = Ni(), zi = Ui;\nfunction Gi(t, e) {\n for (var r = -1, n = Array(t); ++r < t; )\n n[r] = e(r);\n return n;\n}\nvar ki = Gi, ee = { exports: {} };\nfunction Hi() {\n return !1;\n}\nvar Ki = Hi;\nee.exports;\n(function(t, e) {\n var r = O, n = Ki, a = e && !e.nodeType && e, s = a && !0 && t && !t.nodeType && t, i = s && s.exports === a, u = i ? r.Buffer : void 0, o = u ? u.isBuffer : void 0, f = o || n;\n t.exports = f;\n})(ee, ee.exports);\nvar Wt = ee.exports, qi = V, Vi = Ue, Bi = B, Wi = \"[object Arguments]\", Zi = \"[object Array]\", Ji = \"[object Boolean]\", Yi = \"[object Date]\", Xi = \"[object Error]\", Qi = \"[object Function]\", eu = \"[object Map]\", tu = \"[object Number]\", ru = \"[object Object]\", nu = \"[object RegExp]\", au = \"[object Set]\", su = \"[object String]\", iu = \"[object WeakMap]\", uu = \"[object ArrayBuffer]\", ou = \"[object DataView]\", fu = \"[object Float32Array]\", lu = \"[object Float64Array]\", cu = \"[object Int8Array]\", hu = \"[object Int16Array]\", du = \"[object Int32Array]\", pu = \"[object Uint8Array]\", vu = \"[object Uint8ClampedArray]\", gu = \"[object Uint16Array]\", yu = \"[object Uint32Array]\", g = {};\ng[fu] = g[lu] = g[cu] = g[hu] = g[du] = g[pu] = g[vu] = g[gu] = g[yu] = !0;\ng[Wi] = g[Zi] = g[uu] = g[Ji] = g[ou] = g[Yi] = g[Xi] = g[Qi] = g[eu] = g[tu] = g[ru] = g[nu] = g[au] = g[su] = g[iu] = !1;\nfunction _u(t) {\n return Bi(t) && Vi(t.length) && !!g[qi(t)];\n}\nvar $u = _u;\nfunction mu(t) {\n return function(e) {\n return t(e);\n };\n}\nvar bu = mu, te = { exports: {} };\nte.exports;\n(function(t, e) {\n var r = It, n = e && !e.nodeType && e, a = n && !0 && t && !t.nodeType && t, s = a && a.exports === n, i = s && r.process, u = function() {\n try {\n var o = a && a.require && a.require(\"util\").types;\n return o || i && i.binding && i.binding(\"util\");\n } catch {\n }\n }();\n t.exports = u;\n})(te, te.exports);\nvar xu = te.exports, Fu = $u, Eu = bu, nt = xu, at = nt && nt.isTypedArray, wu = at ? Eu(at) : Fu, Zt = wu, Au = ki, Ou = kt, Su = T, Cu = Wt, Tu = Ht, Du = Zt, Pu = Object.prototype, Iu = Pu.hasOwnProperty;\nfunction Ru(t, e) {\n var r = Su(t), n = !r && Ou(t), a = !r && !n && Cu(t), s = !r && !n && !a && Du(t), i = r || n || a || s, u = i ? Au(t.length, String) : [], o = u.length;\n for (var f in t)\n (e || Iu.call(t, f)) && !(i && // Safari 9 has enumerable `arguments.length` in strict mode.\n (f == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n a && (f == \"offset\" || f == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n s && (f == \"buffer\" || f == \"byteLength\" || f == \"byteOffset\") || // Skip index properties.\n Tu(f, o))) && u.push(f);\n return u;\n}\nvar Mu = Ru, ju = Object.prototype;\nfunction Lu(t) {\n var e = t && t.constructor, r = typeof e == \"function\" && e.prototype || ju;\n return t === r;\n}\nvar Nu = Lu;\nfunction Uu(t, e) {\n return function(r) {\n return t(e(r));\n };\n}\nvar zu = Uu, Gu = zu, ku = Gu(Object.keys, Object), Hu = ku, Ku = Nu, qu = Hu, Vu = Object.prototype, Bu = Vu.hasOwnProperty;\nfunction Wu(t) {\n if (!Ku(t))\n return qu(t);\n var e = [];\n for (var r in Object(t))\n Bu.call(t, r) && r != \"constructor\" && e.push(r);\n return e;\n}\nvar Zu = Wu, Ju = Mt, Yu = Ue;\nfunction Xu(t) {\n return t != null && Yu(t.length) && !Ju(t);\n}\nvar Qu = Xu, eo = Mu, to = Zu, ro = Qu;\nfunction no(t) {\n return ro(t) ? eo(t) : to(t);\n}\nvar ze = no, ao = zi, so = ze;\nfunction io(t, e) {\n return t && ao(t, e, so);\n}\nvar Jt = io, uo = oe;\nfunction oo() {\n this.__data__ = new uo(), this.size = 0;\n}\nvar fo = oo;\nfunction lo(t) {\n var e = this.__data__, r = e.delete(t);\n return this.size = e.size, r;\n}\nvar co = lo;\nfunction ho(t) {\n return this.__data__.get(t);\n}\nvar po = ho;\nfunction vo(t) {\n return this.__data__.has(t);\n}\nvar go = vo, yo = oe, _o = je, $o = Le, mo = 200;\nfunction bo(t, e) {\n var r = this.__data__;\n if (r instanceof yo) {\n var n = r.__data__;\n if (!_o || n.length < mo - 1)\n return n.push([t, e]), this.size = ++r.size, this;\n r = this.__data__ = new $o(n);\n }\n return r.set(t, e), this.size = r.size, this;\n}\nvar xo = bo, Fo = oe, Eo = fo, wo = co, Ao = po, Oo = go, So = xo;\nfunction k(t) {\n var e = this.__data__ = new Fo(t);\n this.size = e.size;\n}\nk.prototype.clear = Eo;\nk.prototype.delete = wo;\nk.prototype.get = Ao;\nk.prototype.has = Oo;\nk.prototype.set = So;\nvar Yt = k, Co = \"__lodash_hash_undefined__\";\nfunction To(t) {\n return this.__data__.set(t, Co), this;\n}\nvar Do = To;\nfunction Po(t) {\n return this.__data__.has(t);\n}\nvar Io = Po, Ro = Le, Mo = Do, jo = Io;\nfunction re(t) {\n var e = -1, r = t == null ? 0 : t.length;\n for (this.__data__ = new Ro(); ++e < r; )\n this.add(t[e]);\n}\nre.prototype.add = re.prototype.push = Mo;\nre.prototype.has = jo;\nvar Lo = re;\nfunction No(t, e) {\n for (var r = -1, n = t == null ? 0 : t.length; ++r < n; )\n if (e(t[r], r, t))\n return !0;\n return !1;\n}\nvar Uo = No;\nfunction zo(t, e) {\n return t.has(e);\n}\nvar Go = zo, ko = Lo, Ho = Uo, Ko = Go, qo = 1, Vo = 2;\nfunction Bo(t, e, r, n, a, s) {\n var i = r & qo, u = t.length, o = e.length;\n if (u != o && !(i && o > u))\n return !1;\n var f = s.get(t), c = s.get(e);\n if (f && c)\n return f == e && c == t;\n var l = -1, h = !0, d = r & Vo ? new ko() : void 0;\n for (s.set(t, e), s.set(e, t); ++l < u; ) {\n var v = t[l], p = e[l];\n if (n)\n var y = i ? n(p, v, l, e, t, s) : n(v, p, l, t, e, s);\n if (y !== void 0) {\n if (y)\n continue;\n h = !1;\n break;\n }\n if (d) {\n if (!Ho(e, function($, E) {\n if (!Ko(d, E) && (v === $ || a(v, $, r, n, s)))\n return d.push(E);\n })) {\n h = !1;\n break;\n }\n } else if (!(v === p || a(v, p, r, n, s))) {\n h = !1;\n break;\n }\n }\n return s.delete(t), s.delete(e), h;\n}\nvar Xt = Bo, Wo = O, Zo = Wo.Uint8Array, Jo = Zo;\nfunction Yo(t) {\n var e = -1, r = Array(t.size);\n return t.forEach(function(n, a) {\n r[++e] = [a, n];\n }), r;\n}\nvar Xo = Yo;\nfunction Qo(t) {\n var e = -1, r = Array(t.size);\n return t.forEach(function(n) {\n r[++e] = n;\n }), r;\n}\nvar ef = Qo, st = se, it = Jo, tf = Lt, rf = Xt, nf = Xo, af = ef, sf = 1, uf = 2, of = \"[object Boolean]\", ff = \"[object Date]\", lf = \"[object Error]\", cf = \"[object Map]\", hf = \"[object Number]\", df = \"[object RegExp]\", pf = \"[object Set]\", vf = \"[object String]\", gf = \"[object Symbol]\", yf = \"[object ArrayBuffer]\", _f = \"[object DataView]\", ut = st ? st.prototype : void 0, pe = ut ? ut.valueOf : void 0;\nfunction $f(t, e, r, n, a, s, i) {\n switch (r) {\n case _f:\n if (t.byteLength != e.byteLength || t.byteOffset != e.byteOffset)\n return !1;\n t = t.buffer, e = e.buffer;\n case yf:\n return !(t.byteLength != e.byteLength || !s(new it(t), new it(e)));\n case of:\n case ff:\n case hf:\n return tf(+t, +e);\n case lf:\n return t.name == e.name && t.message == e.message;\n case df:\n case vf:\n return t == e + \"\";\n case cf:\n var u = nf;\n case pf:\n var o = n & sf;\n if (u || (u = af), t.size != e.size && !o)\n return !1;\n var f = i.get(t);\n if (f)\n return f == e;\n n |= uf, i.set(t, e);\n var c = rf(u(t), u(e), n, a, s, i);\n return i.delete(t), c;\n case gf:\n if (pe)\n return pe.call(t) == pe.call(e);\n }\n return !1;\n}\nvar mf = $f;\nfunction bf(t, e) {\n for (var r = -1, n = e.length, a = t.length; ++r < n; )\n t[a + r] = e[r];\n return t;\n}\nvar xf = bf, Ff = xf, Ef = T;\nfunction wf(t, e, r) {\n var n = e(t);\n return Ef(t) ? n : Ff(n, r(t));\n}\nvar Af = wf;\nfunction Of(t, e) {\n for (var r = -1, n = t == null ? 0 : t.length, a = 0, s = []; ++r < n; ) {\n var i = t[r];\n e(i, r, t) && (s[a++] = i);\n }\n return s;\n}\nvar Sf = Of;\nfunction Cf() {\n return [];\n}\nvar Tf = Cf, Df = Sf, Pf = Tf, If = Object.prototype, Rf = If.propertyIsEnumerable, ot = Object.getOwnPropertySymbols, Mf = ot ? function(t) {\n return t == null ? [] : (t = Object(t), Df(ot(t), function(e) {\n return Rf.call(t, e);\n }));\n} : Pf, jf = Mf, Lf = Af, Nf = jf, Uf = ze;\nfunction zf(t) {\n return Lf(t, Uf, Nf);\n}\nvar Gf = zf, ft = Gf, kf = 1, Hf = Object.prototype, Kf = Hf.hasOwnProperty;\nfunction qf(t, e, r, n, a, s) {\n var i = r & kf, u = ft(t), o = u.length, f = ft(e), c = f.length;\n if (o != c && !i)\n return !1;\n for (var l = o; l--; ) {\n var h = u[l];\n if (!(i ? h in e : Kf.call(e, h)))\n return !1;\n }\n var d = s.get(t), v = s.get(e);\n if (d && v)\n return d == e && v == t;\n var p = !0;\n s.set(t, e), s.set(e, t);\n for (var y = i; ++l < o; ) {\n h = u[l];\n var $ = t[h], E = e[h];\n if (n)\n var S = i ? n(E, $, h, e, t, s) : n($, E, h, t, e, s);\n if (!(S === void 0 ? $ === E || a($, E, r, n, s) : S)) {\n p = !1;\n break;\n }\n y || (y = h == \"constructor\");\n }\n if (p && !y) {\n var w = t.constructor, D = e.constructor;\n w != D && \"constructor\" in t && \"constructor\" in e && !(typeof w == \"function\" && w instanceof w && typeof D == \"function\" && D instanceof D) && (p = !1);\n }\n return s.delete(t), s.delete(e), p;\n}\nvar Vf = qf, Bf = R, Wf = O, Zf = Bf(Wf, \"DataView\"), Jf = Zf, Yf = R, Xf = O, Qf = Yf(Xf, \"Promise\"), el = Qf, tl = R, rl = O, nl = tl(rl, \"Set\"), al = nl, sl = R, il = O, ul = sl(il, \"WeakMap\"), ol = ul, we = Jf, Ae = je, Oe = el, Se = al, Ce = ol, Qt = V, H = jt, lt = \"[object Map]\", fl = \"[object Object]\", ct = \"[object Promise]\", ht = \"[object Set]\", dt = \"[object WeakMap]\", pt = \"[object DataView]\", ll = H(we), cl = H(Ae), hl = H(Oe), dl = H(Se), pl = H(Ce), I = Qt;\n(we && I(new we(new ArrayBuffer(1))) != pt || Ae && I(new Ae()) != lt || Oe && I(Oe.resolve()) != ct || Se && I(new Se()) != ht || Ce && I(new Ce()) != dt) && (I = function(t) {\n var e = Qt(t), r = e == fl ? t.constructor : void 0, n = r ? H(r) : \"\";\n if (n)\n switch (n) {\n case ll:\n return pt;\n case cl:\n return lt;\n case hl:\n return ct;\n case dl:\n return ht;\n case pl:\n return dt;\n }\n return e;\n});\nvar vl = I, ve = Yt, gl = Xt, yl = mf, _l = Vf, vt = vl, gt = T, yt = Wt, $l = Zt, ml = 1, _t = \"[object Arguments]\", $t = \"[object Array]\", J = \"[object Object]\", bl = Object.prototype, mt = bl.hasOwnProperty;\nfunction xl(t, e, r, n, a, s) {\n var i = gt(t), u = gt(e), o = i ? $t : vt(t), f = u ? $t : vt(e);\n o = o == _t ? J : o, f = f == _t ? J : f;\n var c = o == J, l = f == J, h = o == f;\n if (h && yt(t)) {\n if (!yt(e))\n return !1;\n i = !0, c = !1;\n }\n if (h && !c)\n return s || (s = new ve()), i || $l(t) ? gl(t, e, r, n, a, s) : yl(t, e, o, r, n, a, s);\n if (!(r & ml)) {\n var d = c && mt.call(t, \"__wrapped__\"), v = l && mt.call(e, \"__wrapped__\");\n if (d || v) {\n var p = d ? t.value() : t, y = v ? e.value() : e;\n return s || (s = new ve()), a(p, y, r, n, s);\n }\n }\n return h ? (s || (s = new ve()), _l(t, e, r, n, a, s)) : !1;\n}\nvar Fl = xl, El = Fl, bt = B;\nfunction er(t, e, r, n, a) {\n return t === e ? !0 : t == null || e == null || !bt(t) && !bt(e) ? t !== t && e !== e : El(t, e, r, n, er, a);\n}\nvar tr = er, wl = Yt, Al = tr, Ol = 1, Sl = 2;\nfunction Cl(t, e, r, n) {\n var a = r.length, s = a, i = !n;\n if (t == null)\n return !s;\n for (t = Object(t); a--; ) {\n var u = r[a];\n if (i && u[2] ? u[1] !== t[u[0]] : !(u[0] in t))\n return !1;\n }\n for (; ++a < s; ) {\n u = r[a];\n var o = u[0], f = t[o], c = u[1];\n if (i && u[2]) {\n if (f === void 0 && !(o in t))\n return !1;\n } else {\n var l = new wl();\n if (n)\n var h = n(f, c, o, t, e, l);\n if (!(h === void 0 ? Al(c, f, Ol | Sl, n, l) : h))\n return !1;\n }\n }\n return !0;\n}\nvar Tl = Cl, Dl = Me;\nfunction Pl(t) {\n return t === t && !Dl(t);\n}\nvar rr = Pl, Il = rr, Rl = ze;\nfunction Ml(t) {\n for (var e = Rl(t), r = e.length; r--; ) {\n var n = e[r], a = t[n];\n e[r] = [n, a, Il(a)];\n }\n return e;\n}\nvar jl = Ml;\nfunction Ll(t, e) {\n return function(r) {\n return r == null ? !1 : r[t] === e && (e !== void 0 || t in Object(r));\n };\n}\nvar nr = Ll, Nl = Tl, Ul = jl, zl = nr;\nfunction Gl(t) {\n var e = Ul(t);\n return e.length == 1 && e[0][2] ? zl(e[0][0], e[0][1]) : function(r) {\n return r === t || Nl(r, t, e);\n };\n}\nvar kl = Gl, Hl = zt, Kl = le;\nfunction ql(t, e) {\n e = Hl(e, t);\n for (var r = 0, n = e.length; t != null && r < n; )\n t = t[Kl(e[r++])];\n return r && r == n ? t : void 0;\n}\nvar ar = ql, Vl = ar;\nfunction Bl(t, e, r) {\n var n = t == null ? void 0 : Vl(t, e);\n return n === void 0 ? r : n;\n}\nvar Wl = Bl;\nfunction Zl(t, e) {\n return t != null && e in Object(t);\n}\nvar Jl = Zl, Yl = Jl, Xl = Kt;\nfunction Ql(t, e) {\n return t != null && Xl(t, e, Yl);\n}\nvar ec = Ql, tc = tr, rc = Wl, nc = ec, ac = Re, sc = rr, ic = nr, uc = le, oc = 1, fc = 2;\nfunction lc(t, e) {\n return ac(t) && sc(e) ? ic(uc(t), e) : function(r) {\n var n = rc(r, t);\n return n === void 0 && n === e ? nc(r, t) : tc(e, n, oc | fc);\n };\n}\nvar cc = lc;\nfunction hc(t) {\n return t;\n}\nvar dc = hc;\nfunction pc(t) {\n return function(e) {\n return e == null ? void 0 : e[t];\n };\n}\nvar vc = pc, gc = ar;\nfunction yc(t) {\n return function(e) {\n return gc(e, t);\n };\n}\nvar _c = yc, $c = vc, mc = _c, bc = Re, xc = le;\nfunction Fc(t) {\n return bc(t) ? $c(xc(t)) : mc(t);\n}\nvar Ec = Fc, wc = kl, Ac = cc, Oc = dc, Sc = T, Cc = Ec;\nfunction Tc(t) {\n return typeof t == \"function\" ? t : t == null ? Oc : typeof t == \"object\" ? Sc(t) ? Ac(t[0], t[1]) : wc(t) : Cc(t);\n}\nvar sr = Tc, Dc = Bt, Pc = Jt, Ic = sr;\nfunction Rc(t, e) {\n var r = {};\n return e = Ic(e), Pc(t, function(n, a, s) {\n Dc(r, a, e(n, a, s));\n }), r;\n}\nvar Mc = Rc;\nconst ir = /* @__PURE__ */ N(Mc);\nfunction M(t) {\n this._maxSize = t, this.clear();\n}\nM.prototype.clear = function() {\n this._size = 0, this._values = /* @__PURE__ */ Object.create(null);\n};\nM.prototype.get = function(t) {\n return this._values[t];\n};\nM.prototype.set = function(t, e) {\n return this._size >= this._maxSize && this.clear(), t in this._values || this._size++, this._values[t] = e;\n};\nvar jc = /[^.^\\]^[]+|(?=\\[\\]|\\.\\.)/g, ur = /^\\d+$/, Lc = /^\\d/, Nc = /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g, Uc = /^\\s*(['\"]?)(.*?)(\\1)\\s*$/, Ge = 512, xt = new M(Ge), Ft = new M(Ge), Et = new M(Ge), ce = {\n Cache: M,\n split: Te,\n normalizePath: ge,\n setter: function(t) {\n var e = ge(t);\n return Ft.get(t) || Ft.set(t, function(n, a) {\n for (var s = 0, i = e.length, u = n; s < i - 1; ) {\n var o = e[s];\n if (o === \"__proto__\" || o === \"constructor\" || o === \"prototype\")\n return n;\n u = u[e[s++]];\n }\n u[e[s]] = a;\n });\n },\n getter: function(t, e) {\n var r = ge(t);\n return Et.get(t) || Et.set(t, function(a) {\n for (var s = 0, i = r.length; s < i; )\n if (a != null || !e) a = a[r[s++]];\n else return;\n return a;\n });\n },\n join: function(t) {\n return t.reduce(function(e, r) {\n return e + (ke(r) || ur.test(r) ? \"[\" + r + \"]\" : (e ? \".\" : \"\") + r);\n }, \"\");\n },\n forEach: function(t, e, r) {\n zc(Array.isArray(t) ? t : Te(t), e, r);\n }\n};\nfunction ge(t) {\n return xt.get(t) || xt.set(\n t,\n Te(t).map(function(e) {\n return e.replace(Uc, \"$2\");\n })\n );\n}\nfunction Te(t) {\n return t.match(jc) || [\"\"];\n}\nfunction zc(t, e, r) {\n var n = t.length, a, s, i, u;\n for (s = 0; s < n; s++)\n a = t[s], a && (Hc(a) && (a = '\"' + a + '\"'), u = ke(a), i = !u && /^\\d+$/.test(a), e.call(r, a, u, i, s, t));\n}\nfunction ke(t) {\n return typeof t == \"string\" && t && [\"'\", '\"'].indexOf(t.charAt(0)) !== -1;\n}\nfunction Gc(t) {\n return t.match(Lc) && !t.match(ur);\n}\nfunction kc(t) {\n return Nc.test(t);\n}\nfunction Hc(t) {\n return !ke(t) && (Gc(t) || kc(t));\n}\nconst Y = {\n context: \"$\",\n value: \".\"\n};\nclass C {\n constructor(e, r = {}) {\n if (this.key = void 0, this.isContext = void 0, this.isValue = void 0, this.isSibling = void 0, this.path = void 0, this.getter = void 0, this.map = void 0, typeof e != \"string\") throw new TypeError(\"ref must be a string, got: \" + e);\n if (this.key = e.trim(), e === \"\") throw new TypeError(\"ref must be a non-empty string\");\n this.isContext = this.key[0] === Y.context, this.isValue = this.key[0] === Y.value, this.isSibling = !this.isContext && !this.isValue;\n let n = this.isContext ? Y.context : this.isValue ? Y.value : \"\";\n this.path = this.key.slice(n.length), this.getter = this.path && ce.getter(this.path, !0), this.map = r.map;\n }\n getValue(e, r, n) {\n let a = this.isContext ? n : this.isValue ? e : r;\n return this.getter && (a = this.getter(a || {})), this.map && (a = this.map(a)), a;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {Object=} options.context\n * @param {Object=} options.parent\n */\n cast(e, r) {\n return this.getValue(e, r == null ? void 0 : r.parent, r == null ? void 0 : r.context);\n }\n resolve() {\n return this;\n }\n describe() {\n return {\n type: \"ref\",\n key: this.key\n };\n }\n toString() {\n return `Ref(${this.key})`;\n }\n static isRef(e) {\n return e && e.__isYupRef;\n }\n}\nC.prototype.__isYupRef = !0;\nfunction ne() {\n return ne = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var r = arguments[e];\n for (var n in r)\n Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n }\n return t;\n }, ne.apply(this, arguments);\n}\nfunction Kc(t, e) {\n if (t == null) return {};\n var r = {}, n = Object.keys(t), a, s;\n for (s = 0; s < n.length; s++)\n a = n[s], !(e.indexOf(a) >= 0) && (r[a] = t[a]);\n return r;\n}\nfunction X(t) {\n function e(r, n) {\n let {\n value: a,\n path: s = \"\",\n label: i,\n options: u,\n originalValue: o,\n sync: f\n } = r, c = Kc(r, [\"value\", \"path\", \"label\", \"options\", \"originalValue\", \"sync\"]);\n const {\n name: l,\n test: h,\n params: d,\n message: v\n } = t;\n let {\n parent: p,\n context: y\n } = u;\n function $(_) {\n return C.isRef(_) ? _.getValue(a, p, y) : _;\n }\n function E(_ = {}) {\n const he = ir(ne({\n value: a,\n originalValue: o,\n label: i,\n path: _.path || s\n }, d, _.params), $), Ke = new x(x.formatError(_.message || v, he), a, he.path, _.type || l);\n return Ke.params = he, Ke;\n }\n let S = ne({\n path: s,\n parent: p,\n type: l,\n createError: E,\n resolve: $,\n options: u,\n originalValue: o\n }, c);\n if (!f) {\n try {\n Promise.resolve(h.call(S, a, S)).then((_) => {\n x.isError(_) ? n(_) : _ ? n(null, _) : n(E());\n }).catch(n);\n } catch (_) {\n n(_);\n }\n return;\n }\n let w;\n try {\n var D;\n if (w = h.call(S, a, S), typeof ((D = w) == null ? void 0 : D.then) == \"function\")\n throw new Error(`Validation test of type: \"${S.type}\" returned a Promise during a synchronous validate. This test will finish after the validate call has returned`);\n } catch (_) {\n n(_);\n return;\n }\n x.isError(w) ? n(w) : w ? n(null, w) : n(E());\n }\n return e.OPTIONS = t, e;\n}\nlet qc = (t) => t.substr(0, t.length - 1).substr(1);\nfunction Vc(t, e, r, n = r) {\n let a, s, i;\n return e ? (ce.forEach(e, (u, o, f) => {\n let c = o ? qc(u) : u;\n if (t = t.resolve({\n context: n,\n parent: a,\n value: r\n }), t.innerType) {\n let l = f ? parseInt(c, 10) : 0;\n if (r && l >= r.length)\n throw new Error(`Yup.reach cannot resolve an array item at index: ${u}, in the path: ${e}. because there is no value at that index. `);\n a = r, r = r && r[l], t = t.innerType;\n }\n if (!f) {\n if (!t.fields || !t.fields[c]) throw new Error(`The schema does not contain the path: ${e}. (failed at: ${i} which is a type: \"${t._type}\")`);\n a = r, r = r && r[c], t = t.fields[c];\n }\n s = c, i = o ? \"[\" + u + \"]\" : \".\" + u;\n }), {\n schema: t,\n parent: a,\n parentPath: s\n }) : {\n parent: a,\n parentPath: e,\n schema: t\n };\n}\nclass ae {\n constructor() {\n this.list = void 0, this.refs = void 0, this.list = /* @__PURE__ */ new Set(), this.refs = /* @__PURE__ */ new Map();\n }\n get size() {\n return this.list.size + this.refs.size;\n }\n describe() {\n const e = [];\n for (const r of this.list) e.push(r);\n for (const [, r] of this.refs) e.push(r.describe());\n return e;\n }\n toArray() {\n return Array.from(this.list).concat(Array.from(this.refs.values()));\n }\n resolveAll(e) {\n return this.toArray().reduce((r, n) => r.concat(C.isRef(n) ? e(n) : n), []);\n }\n add(e) {\n C.isRef(e) ? this.refs.set(e.key, e) : this.list.add(e);\n }\n delete(e) {\n C.isRef(e) ? this.refs.delete(e.key) : this.list.delete(e);\n }\n clone() {\n const e = new ae();\n return e.list = new Set(this.list), e.refs = new Map(this.refs), e;\n }\n merge(e, r) {\n const n = this.clone();\n return e.list.forEach((a) => n.add(a)), e.refs.forEach((a) => n.add(a)), r.list.forEach((a) => n.delete(a)), r.refs.forEach((a) => n.delete(a)), n;\n }\n}\nfunction F() {\n return F = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var r = arguments[e];\n for (var n in r)\n Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n }\n return t;\n }, F.apply(this, arguments);\n}\nclass m {\n constructor(e) {\n this.deps = [], this.tests = void 0, this.transforms = void 0, this.conditions = [], this._mutate = void 0, this._typeError = void 0, this._whitelist = new ae(), this._blacklist = new ae(), this.exclusiveTests = /* @__PURE__ */ Object.create(null), this.spec = void 0, this.tests = [], this.transforms = [], this.withMutation(() => {\n this.typeError(P.notType);\n }), this.type = (e == null ? void 0 : e.type) || \"mixed\", this.spec = F({\n strip: !1,\n strict: !1,\n abortEarly: !0,\n recursive: !0,\n nullable: !1,\n presence: \"optional\"\n }, e == null ? void 0 : e.spec);\n }\n // TODO: remove\n get _type() {\n return this.type;\n }\n _typeCheck(e) {\n return !0;\n }\n clone(e) {\n if (this._mutate)\n return e && Object.assign(this.spec, e), this;\n const r = Object.create(Object.getPrototypeOf(this));\n return r.type = this.type, r._typeError = this._typeError, r._whitelistError = this._whitelistError, r._blacklistError = this._blacklistError, r._whitelist = this._whitelist.clone(), r._blacklist = this._blacklist.clone(), r.exclusiveTests = F({}, this.exclusiveTests), r.deps = [...this.deps], r.conditions = [...this.conditions], r.tests = [...this.tests], r.transforms = [...this.transforms], r.spec = $e(F({}, this.spec, e)), r;\n }\n label(e) {\n let r = this.clone();\n return r.spec.label = e, r;\n }\n meta(...e) {\n if (e.length === 0) return this.spec.meta;\n let r = this.clone();\n return r.spec.meta = Object.assign(r.spec.meta || {}, e[0]), r;\n }\n // withContext(): BaseSchema<\n // TCast,\n // TContext,\n // TOutput\n // > {\n // return this as any;\n // }\n withMutation(e) {\n let r = this._mutate;\n this._mutate = !0;\n let n = e(this);\n return this._mutate = r, n;\n }\n concat(e) {\n if (!e || e === this) return this;\n if (e.type !== this.type && this.type !== \"mixed\") throw new TypeError(`You cannot \\`concat()\\` schema's of different types: ${this.type} and ${e.type}`);\n let r = this, n = e.clone();\n const a = F({}, r.spec, n.spec);\n return n.spec = a, n._typeError || (n._typeError = r._typeError), n._whitelistError || (n._whitelistError = r._whitelistError), n._blacklistError || (n._blacklistError = r._blacklistError), n._whitelist = r._whitelist.merge(e._whitelist, e._blacklist), n._blacklist = r._blacklist.merge(e._blacklist, e._whitelist), n.tests = r.tests, n.exclusiveTests = r.exclusiveTests, n.withMutation((s) => {\n e.tests.forEach((i) => {\n s.test(i.OPTIONS);\n });\n }), n.transforms = [...r.transforms, ...n.transforms], n;\n }\n isType(e) {\n return this.spec.nullable && e === null ? !0 : this._typeCheck(e);\n }\n resolve(e) {\n let r = this;\n if (r.conditions.length) {\n let n = r.conditions;\n r = r.clone(), r.conditions = [], r = n.reduce((a, s) => s.resolve(a, e), r), r = r.resolve(e);\n }\n return r;\n }\n /**\n *\n * @param {*} value\n * @param {Object} options\n * @param {*=} options.parent\n * @param {*=} options.context\n */\n cast(e, r = {}) {\n let n = this.resolve(F({\n value: e\n }, r)), a = n._cast(e, r);\n if (e !== void 0 && r.assert !== !1 && n.isType(a) !== !0) {\n let s = q(e), i = q(a);\n throw new TypeError(`The value of ${r.path || \"field\"} could not be cast to a value that satisfies the schema type: \"${n._type}\". \n\nattempted value: ${s} \n` + (i !== s ? `result of cast: ${i}` : \"\"));\n }\n return a;\n }\n _cast(e, r) {\n let n = e === void 0 ? e : this.transforms.reduce((a, s) => s.call(this, a, e, this), e);\n return n === void 0 && (n = this.getDefault()), n;\n }\n _validate(e, r = {}, n) {\n let {\n sync: a,\n path: s,\n from: i = [],\n originalValue: u = e,\n strict: o = this.spec.strict,\n abortEarly: f = this.spec.abortEarly\n } = r, c = e;\n o || (c = this._cast(c, F({\n assert: !1\n }, r)));\n let l = {\n value: c,\n path: s,\n options: r,\n originalValue: u,\n schema: this,\n label: this.spec.label,\n sync: a,\n from: i\n }, h = [];\n this._typeError && h.push(this._typeError);\n let d = [];\n this._whitelistError && d.push(this._whitelistError), this._blacklistError && d.push(this._blacklistError), Ee({\n args: l,\n value: c,\n path: s,\n sync: a,\n tests: h,\n endEarly: f\n }, (v) => {\n if (v) return void n(v, c);\n Ee({\n tests: this.tests.concat(d),\n args: l,\n path: s,\n sync: a,\n value: c,\n endEarly: f\n }, n);\n });\n }\n validate(e, r, n) {\n let a = this.resolve(F({}, r, {\n value: e\n }));\n return typeof n == \"function\" ? a._validate(e, r, n) : new Promise((s, i) => a._validate(e, r, (u, o) => {\n u ? i(u) : s(o);\n }));\n }\n validateSync(e, r) {\n let n = this.resolve(F({}, r, {\n value: e\n })), a;\n return n._validate(e, F({}, r, {\n sync: !0\n }), (s, i) => {\n if (s) throw s;\n a = i;\n }), a;\n }\n isValid(e, r) {\n return this.validate(e, r).then(() => !0, (n) => {\n if (x.isError(n)) return !1;\n throw n;\n });\n }\n isValidSync(e, r) {\n try {\n return this.validateSync(e, r), !0;\n } catch (n) {\n if (x.isError(n)) return !1;\n throw n;\n }\n }\n _getDefault() {\n let e = this.spec.default;\n return e == null ? e : typeof e == \"function\" ? e.call(this) : $e(e);\n }\n getDefault(e) {\n return this.resolve(e || {})._getDefault();\n }\n default(e) {\n return arguments.length === 0 ? this._getDefault() : this.clone({\n default: e\n });\n }\n strict(e = !0) {\n let r = this.clone();\n return r.spec.strict = e, r;\n }\n _isPresent(e) {\n return e != null;\n }\n defined(e = P.defined) {\n return this.test({\n message: e,\n name: \"defined\",\n exclusive: !0,\n test(r) {\n return r !== void 0;\n }\n });\n }\n required(e = P.required) {\n return this.clone({\n presence: \"required\"\n }).withMutation((r) => r.test({\n message: e,\n name: \"required\",\n exclusive: !0,\n test(n) {\n return this.schema._isPresent(n);\n }\n }));\n }\n notRequired() {\n let e = this.clone({\n presence: \"optional\"\n });\n return e.tests = e.tests.filter((r) => r.OPTIONS.name !== \"required\"), e;\n }\n nullable(e = !0) {\n return this.clone({\n nullable: e !== !1\n });\n }\n transform(e) {\n let r = this.clone();\n return r.transforms.push(e), r;\n }\n /**\n * Adds a test function to the schema's queue of tests.\n * tests can be exclusive or non-exclusive.\n *\n * - exclusive tests, will replace any existing tests of the same name.\n * - non-exclusive: can be stacked\n *\n * If a non-exclusive test is added to a schema with an exclusive test of the same name\n * the exclusive test is removed and further tests of the same name will be stacked.\n *\n * If an exclusive test is added to a schema with non-exclusive tests of the same name\n * the previous tests are removed and further tests of the same name will replace each other.\n */\n test(...e) {\n let r;\n if (e.length === 1 ? typeof e[0] == \"function\" ? r = {\n test: e[0]\n } : r = e[0] : e.length === 2 ? r = {\n name: e[0],\n test: e[1]\n } : r = {\n name: e[0],\n message: e[1],\n test: e[2]\n }, r.message === void 0 && (r.message = P.default), typeof r.test != \"function\") throw new TypeError(\"`test` is a required parameters\");\n let n = this.clone(), a = X(r), s = r.exclusive || r.name && n.exclusiveTests[r.name] === !0;\n if (r.exclusive && !r.name)\n throw new TypeError(\"Exclusive tests must provide a unique `name` identifying the test\");\n return r.name && (n.exclusiveTests[r.name] = !!r.exclusive), n.tests = n.tests.filter((i) => !(i.OPTIONS.name === r.name && (s || i.OPTIONS.test === a.OPTIONS.test))), n.tests.push(a), n;\n }\n when(e, r) {\n !Array.isArray(e) && typeof e != \"string\" && (r = e, e = \".\");\n let n = this.clone(), a = Vt(e).map((s) => new C(s));\n return a.forEach((s) => {\n s.isSibling && n.deps.push(s.key);\n }), n.conditions.push(new Ci(a, r)), n;\n }\n typeError(e) {\n let r = this.clone();\n return r._typeError = X({\n message: e,\n name: \"typeError\",\n test(n) {\n return n !== void 0 && !this.schema.isType(n) ? this.createError({\n params: {\n type: this.schema._type\n }\n }) : !0;\n }\n }), r;\n }\n oneOf(e, r = P.oneOf) {\n let n = this.clone();\n return e.forEach((a) => {\n n._whitelist.add(a), n._blacklist.delete(a);\n }), n._whitelistError = X({\n message: r,\n name: \"oneOf\",\n test(a) {\n if (a === void 0) return !0;\n let s = this.schema._whitelist, i = s.resolveAll(this.resolve);\n return i.includes(a) ? !0 : this.createError({\n params: {\n values: s.toArray().join(\", \"),\n resolved: i\n }\n });\n }\n }), n;\n }\n notOneOf(e, r = P.notOneOf) {\n let n = this.clone();\n return e.forEach((a) => {\n n._blacklist.add(a), n._whitelist.delete(a);\n }), n._blacklistError = X({\n message: r,\n name: \"notOneOf\",\n test(a) {\n let s = this.schema._blacklist, i = s.resolveAll(this.resolve);\n return i.includes(a) ? this.createError({\n params: {\n values: s.toArray().join(\", \"),\n resolved: i\n }\n }) : !0;\n }\n }), n;\n }\n strip(e = !0) {\n let r = this.clone();\n return r.spec.strip = e, r;\n }\n describe() {\n const e = this.clone(), {\n label: r,\n meta: n\n } = e.spec;\n return {\n meta: n,\n label: r,\n type: e.type,\n oneOf: e._whitelist.describe(),\n notOneOf: e._blacklist.describe(),\n tests: e.tests.map((s) => ({\n name: s.OPTIONS.name,\n params: s.OPTIONS.params\n })).filter((s, i, u) => u.findIndex((o) => o.name === s.name) === i)\n };\n }\n}\nm.prototype.__isYupSchema__ = !0;\nfor (const t of [\"validate\", \"validateSync\"]) m.prototype[`${t}At`] = function(e, r, n = {}) {\n const {\n parent: a,\n parentPath: s,\n schema: i\n } = Vc(this, e, r, n.context);\n return i[t](a && a[s], F({}, n, {\n parent: a,\n path: e\n }));\n};\nfor (const t of [\"equals\", \"is\"]) m.prototype[t] = m.prototype.oneOf;\nfor (const t of [\"not\", \"nope\"]) m.prototype[t] = m.prototype.notOneOf;\nm.prototype.optional = m.prototype.notRequired;\nconst Bc = m;\nBc.prototype;\nconst b = (t) => t == null;\nfunction Wc() {\n return new or();\n}\nclass or extends m {\n constructor() {\n super({\n type: \"boolean\"\n }), this.withMutation(() => {\n this.transform(function(e) {\n if (!this.isType(e)) {\n if (/^(true|1)$/i.test(String(e))) return !0;\n if (/^(false|0)$/i.test(String(e))) return !1;\n }\n return e;\n });\n });\n }\n _typeCheck(e) {\n return e instanceof Boolean && (e = e.valueOf()), typeof e == \"boolean\";\n }\n isTrue(e = be.isValue) {\n return this.test({\n message: e,\n name: \"is-value\",\n exclusive: !0,\n params: {\n value: \"true\"\n },\n test(r) {\n return b(r) || r === !0;\n }\n });\n }\n isFalse(e = be.isValue) {\n return this.test({\n message: e,\n name: \"is-value\",\n exclusive: !0,\n params: {\n value: \"false\"\n },\n test(r) {\n return b(r) || r === !1;\n }\n });\n }\n}\nWc.prototype = or.prototype;\nlet Zc = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i, Jc = /^((https?|ftp):)?\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, Yc = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i, Xc = (t) => b(t) || t === t.trim(), Qc = {}.toString();\nfunction eh() {\n return new fr();\n}\nclass fr extends m {\n constructor() {\n super({\n type: \"string\"\n }), this.withMutation(() => {\n this.transform(function(e) {\n if (this.isType(e) || Array.isArray(e)) return e;\n const r = e != null && e.toString ? e.toString() : e;\n return r === Qc ? e : r;\n });\n });\n }\n _typeCheck(e) {\n return e instanceof String && (e = e.valueOf()), typeof e == \"string\";\n }\n _isPresent(e) {\n return super._isPresent(e) && !!e.length;\n }\n length(e, r = A.length) {\n return this.test({\n message: r,\n name: \"length\",\n exclusive: !0,\n params: {\n length: e\n },\n test(n) {\n return b(n) || n.length === this.resolve(e);\n }\n });\n }\n min(e, r = A.min) {\n return this.test({\n message: r,\n name: \"min\",\n exclusive: !0,\n params: {\n min: e\n },\n test(n) {\n return b(n) || n.length >= this.resolve(e);\n }\n });\n }\n max(e, r = A.max) {\n return this.test({\n name: \"max\",\n exclusive: !0,\n message: r,\n params: {\n max: e\n },\n test(n) {\n return b(n) || n.length <= this.resolve(e);\n }\n });\n }\n matches(e, r) {\n let n = !1, a, s;\n return r && (typeof r == \"object\" ? {\n excludeEmptyString: n = !1,\n message: a,\n name: s\n } = r : a = r), this.test({\n name: s || \"matches\",\n message: a || A.matches,\n params: {\n regex: e\n },\n test: (i) => b(i) || i === \"\" && n || i.search(e) !== -1\n });\n }\n email(e = A.email) {\n return this.matches(Zc, {\n name: \"email\",\n message: e,\n excludeEmptyString: !0\n });\n }\n url(e = A.url) {\n return this.matches(Jc, {\n name: \"url\",\n message: e,\n excludeEmptyString: !0\n });\n }\n uuid(e = A.uuid) {\n return this.matches(Yc, {\n name: \"uuid\",\n message: e,\n excludeEmptyString: !1\n });\n }\n //-- transforms --\n ensure() {\n return this.default(\"\").transform((e) => e === null ? \"\" : e);\n }\n trim(e = A.trim) {\n return this.transform((r) => r != null ? r.trim() : r).test({\n message: e,\n name: \"trim\",\n test: Xc\n });\n }\n lowercase(e = A.lowercase) {\n return this.transform((r) => b(r) ? r : r.toLowerCase()).test({\n message: e,\n name: \"string_case\",\n exclusive: !0,\n test: (r) => b(r) || r === r.toLowerCase()\n });\n }\n uppercase(e = A.uppercase) {\n return this.transform((r) => b(r) ? r : r.toUpperCase()).test({\n message: e,\n name: \"string_case\",\n exclusive: !0,\n test: (r) => b(r) || r === r.toUpperCase()\n });\n }\n}\neh.prototype = fr.prototype;\nvar th = /^(\\d{4}|[+\\-]\\d{6})(?:-?(\\d{2})(?:-?(\\d{2}))?)?(?:[ T]?(\\d{2}):?(\\d{2})(?::?(\\d{2})(?:[,\\.](\\d{1,}))?)?(?:(Z)|([+\\-])(\\d{2})(?::?(\\d{2}))?)?)?$/;\nfunction rh(t) {\n var e = [1, 4, 5, 6, 7, 10, 11], r = 0, n, a;\n if (a = th.exec(t)) {\n for (var s = 0, i; i = e[s]; ++s) a[i] = +a[i] || 0;\n a[2] = (+a[2] || 1) - 1, a[3] = +a[3] || 1, a[7] = a[7] ? String(a[7]).substr(0, 3) : 0, (a[8] === void 0 || a[8] === \"\") && (a[9] === void 0 || a[9] === \"\") ? n = +new Date(a[1], a[2], a[3], a[4], a[5], a[6], a[7]) : (a[8] !== \"Z\" && a[9] !== void 0 && (r = a[10] * 60 + a[11], a[9] === \"+\" && (r = 0 - r)), n = Date.UTC(a[1], a[2], a[3], a[4], a[5] + r, a[6], a[7]));\n } else n = Date.parse ? Date.parse(t) : NaN;\n return n;\n}\nlet lr = /* @__PURE__ */ new Date(\"\"), nh = (t) => Object.prototype.toString.call(t) === \"[object Date]\";\nclass cr extends m {\n constructor() {\n super({\n type: \"date\"\n }), this.withMutation(() => {\n this.transform(function(e) {\n return this.isType(e) ? e : (e = rh(e), isNaN(e) ? lr : new Date(e));\n });\n });\n }\n _typeCheck(e) {\n return nh(e) && !isNaN(e.getTime());\n }\n prepareParam(e, r) {\n let n;\n if (C.isRef(e))\n n = e;\n else {\n let a = this.cast(e);\n if (!this._typeCheck(a)) throw new TypeError(`\\`${r}\\` must be a Date or a value that can be \\`cast()\\` to a Date`);\n n = a;\n }\n return n;\n }\n min(e, r = me.min) {\n let n = this.prepareParam(e, \"min\");\n return this.test({\n message: r,\n name: \"min\",\n exclusive: !0,\n params: {\n min: e\n },\n test(a) {\n return b(a) || a >= this.resolve(n);\n }\n });\n }\n max(e, r = me.max) {\n let n = this.prepareParam(e, \"max\");\n return this.test({\n message: r,\n name: \"max\",\n exclusive: !0,\n params: {\n max: e\n },\n test(a) {\n return b(a) || a <= this.resolve(n);\n }\n });\n }\n}\ncr.INVALID_DATE = lr;\ncr.prototype;\nfunction ah(t, e, r, n) {\n var a = -1, s = t == null ? 0 : t.length;\n for (n && s && (r = t[++a]); ++a < s; )\n r = e(r, t[a], a, t);\n return r;\n}\nvar sh = ah;\nfunction ih(t) {\n return function(e) {\n return t == null ? void 0 : t[e];\n };\n}\nvar uh = ih, oh = uh, fh = {\n // Latin-1 Supplement block.\n À: \"A\",\n Á: \"A\",\n Â: \"A\",\n Ã: \"A\",\n Ä: \"A\",\n Å: \"A\",\n à: \"a\",\n á: \"a\",\n â: \"a\",\n ã: \"a\",\n ä: \"a\",\n å: \"a\",\n Ç: \"C\",\n ç: \"c\",\n Ð: \"D\",\n ð: \"d\",\n È: \"E\",\n É: \"E\",\n Ê: \"E\",\n Ë: \"E\",\n è: \"e\",\n é: \"e\",\n ê: \"e\",\n ë: \"e\",\n Ì: \"I\",\n Í: \"I\",\n Î: \"I\",\n Ï: \"I\",\n ì: \"i\",\n í: \"i\",\n î: \"i\",\n ï: \"i\",\n Ñ: \"N\",\n ñ: \"n\",\n Ò: \"O\",\n Ó: \"O\",\n Ô: \"O\",\n Õ: \"O\",\n Ö: \"O\",\n Ø: \"O\",\n ò: \"o\",\n ó: \"o\",\n ô: \"o\",\n õ: \"o\",\n ö: \"o\",\n ø: \"o\",\n Ù: \"U\",\n Ú: \"U\",\n Û: \"U\",\n Ü: \"U\",\n ù: \"u\",\n ú: \"u\",\n û: \"u\",\n ü: \"u\",\n Ý: \"Y\",\n ý: \"y\",\n ÿ: \"y\",\n Æ: \"Ae\",\n æ: \"ae\",\n Þ: \"Th\",\n þ: \"th\",\n ß: \"ss\",\n // Latin Extended-A block.\n Ā: \"A\",\n Ă: \"A\",\n Ą: \"A\",\n ā: \"a\",\n ă: \"a\",\n ą: \"a\",\n Ć: \"C\",\n Ĉ: \"C\",\n Ċ: \"C\",\n Č: \"C\",\n ć: \"c\",\n ĉ: \"c\",\n ċ: \"c\",\n č: \"c\",\n Ď: \"D\",\n Đ: \"D\",\n ď: \"d\",\n đ: \"d\",\n Ē: \"E\",\n Ĕ: \"E\",\n Ė: \"E\",\n Ę: \"E\",\n Ě: \"E\",\n ē: \"e\",\n ĕ: \"e\",\n ė: \"e\",\n ę: \"e\",\n ě: \"e\",\n Ĝ: \"G\",\n Ğ: \"G\",\n Ġ: \"G\",\n Ģ: \"G\",\n ĝ: \"g\",\n ğ: \"g\",\n ġ: \"g\",\n ģ: \"g\",\n Ĥ: \"H\",\n Ħ: \"H\",\n ĥ: \"h\",\n ħ: \"h\",\n Ĩ: \"I\",\n Ī: \"I\",\n Ĭ: \"I\",\n Į: \"I\",\n İ: \"I\",\n ĩ: \"i\",\n ī: \"i\",\n ĭ: \"i\",\n į: \"i\",\n ı: \"i\",\n Ĵ: \"J\",\n ĵ: \"j\",\n Ķ: \"K\",\n ķ: \"k\",\n ĸ: \"k\",\n Ĺ: \"L\",\n Ļ: \"L\",\n Ľ: \"L\",\n Ŀ: \"L\",\n Ł: \"L\",\n ĺ: \"l\",\n ļ: \"l\",\n ľ: \"l\",\n ŀ: \"l\",\n ł: \"l\",\n Ń: \"N\",\n Ņ: \"N\",\n Ň: \"N\",\n Ŋ: \"N\",\n ń: \"n\",\n ņ: \"n\",\n ň: \"n\",\n ŋ: \"n\",\n Ō: \"O\",\n Ŏ: \"O\",\n Ő: \"O\",\n ō: \"o\",\n ŏ: \"o\",\n ő: \"o\",\n Ŕ: \"R\",\n Ŗ: \"R\",\n Ř: \"R\",\n ŕ: \"r\",\n ŗ: \"r\",\n ř: \"r\",\n Ś: \"S\",\n Ŝ: \"S\",\n Ş: \"S\",\n Š: \"S\",\n ś: \"s\",\n ŝ: \"s\",\n ş: \"s\",\n š: \"s\",\n Ţ: \"T\",\n Ť: \"T\",\n Ŧ: \"T\",\n ţ: \"t\",\n ť: \"t\",\n ŧ: \"t\",\n Ũ: \"U\",\n Ū: \"U\",\n Ŭ: \"U\",\n Ů: \"U\",\n Ű: \"U\",\n Ų: \"U\",\n ũ: \"u\",\n ū: \"u\",\n ŭ: \"u\",\n ů: \"u\",\n ű: \"u\",\n ų: \"u\",\n Ŵ: \"W\",\n ŵ: \"w\",\n Ŷ: \"Y\",\n ŷ: \"y\",\n Ÿ: \"Y\",\n Ź: \"Z\",\n Ż: \"Z\",\n Ž: \"Z\",\n ź: \"z\",\n ż: \"z\",\n ž: \"z\",\n IJ: \"IJ\",\n ij: \"ij\",\n Œ: \"Oe\",\n œ: \"oe\",\n ʼn: \"'n\",\n ſ: \"s\"\n}, lh = oh(fh), ch = lh, hh = ch, dh = W, ph = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g, vh = \"\\\\u0300-\\\\u036f\", gh = \"\\\\ufe20-\\\\ufe2f\", yh = \"\\\\u20d0-\\\\u20ff\", _h = vh + gh + yh, $h = \"[\" + _h + \"]\", mh = RegExp($h, \"g\");\nfunction bh(t) {\n return t = dh(t), t && t.replace(ph, hh).replace(mh, \"\");\n}\nvar xh = bh, Fh = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\nfunction Eh(t) {\n return t.match(Fh) || [];\n}\nvar wh = Eh, Ah = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\nfunction Oh(t) {\n return Ah.test(t);\n}\nvar Sh = Oh, hr = \"\\\\ud800-\\\\udfff\", Ch = \"\\\\u0300-\\\\u036f\", Th = \"\\\\ufe20-\\\\ufe2f\", Dh = \"\\\\u20d0-\\\\u20ff\", Ph = Ch + Th + Dh, dr = \"\\\\u2700-\\\\u27bf\", pr = \"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\", Ih = \"\\\\xac\\\\xb1\\\\xd7\\\\xf7\", Rh = \"\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\", Mh = \"\\\\u2000-\\\\u206f\", jh = \" \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\", vr = \"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\", Lh = \"\\\\ufe0e\\\\ufe0f\", gr = Ih + Rh + Mh + jh, yr = \"['’]\", wt = \"[\" + gr + \"]\", Nh = \"[\" + Ph + \"]\", _r = \"\\\\d+\", Uh = \"[\" + dr + \"]\", $r = \"[\" + pr + \"]\", mr = \"[^\" + hr + gr + _r + dr + pr + vr + \"]\", zh = \"\\\\ud83c[\\\\udffb-\\\\udfff]\", Gh = \"(?:\" + Nh + \"|\" + zh + \")\", kh = \"[^\" + hr + \"]\", br = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\", xr = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\", j = \"[\" + vr + \"]\", Hh = \"\\\\u200d\", At = \"(?:\" + $r + \"|\" + mr + \")\", Kh = \"(?:\" + j + \"|\" + mr + \")\", Ot = \"(?:\" + yr + \"(?:d|ll|m|re|s|t|ve))?\", St = \"(?:\" + yr + \"(?:D|LL|M|RE|S|T|VE))?\", Fr = Gh + \"?\", Er = \"[\" + Lh + \"]?\", qh = \"(?:\" + Hh + \"(?:\" + [kh, br, xr].join(\"|\") + \")\" + Er + Fr + \")*\", Vh = \"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\", Bh = \"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\", Wh = Er + Fr + qh, Zh = \"(?:\" + [Uh, br, xr].join(\"|\") + \")\" + Wh, Jh = RegExp([\n j + \"?\" + $r + \"+\" + Ot + \"(?=\" + [wt, j, \"$\"].join(\"|\") + \")\",\n Kh + \"+\" + St + \"(?=\" + [wt, j + At, \"$\"].join(\"|\") + \")\",\n j + \"?\" + At + \"+\" + Ot,\n j + \"+\" + St,\n Bh,\n Vh,\n _r,\n Zh\n].join(\"|\"), \"g\");\nfunction Yh(t) {\n return t.match(Jh) || [];\n}\nvar Xh = Yh, Qh = wh, ed = Sh, td = W, rd = Xh;\nfunction nd(t, e, r) {\n return t = td(t), e = r ? void 0 : e, e === void 0 ? ed(t) ? rd(t) : Qh(t) : t.match(e) || [];\n}\nvar ad = nd, sd = sh, id = xh, ud = ad, od = \"['’]\", fd = RegExp(od, \"g\");\nfunction ld(t) {\n return function(e) {\n return sd(ud(id(e).replace(fd, \"\")), t, \"\");\n };\n}\nvar wr = ld, cd = wr, hd = cd(function(t, e, r) {\n return t + (r ? \"_\" : \"\") + e.toLowerCase();\n}), dd = hd;\nconst Ct = /* @__PURE__ */ N(dd);\nfunction pd(t, e, r) {\n var n = -1, a = t.length;\n e < 0 && (e = -e > a ? 0 : a + e), r = r > a ? a : r, r < 0 && (r += a), a = e > r ? 0 : r - e >>> 0, e >>>= 0;\n for (var s = Array(a); ++n < a; )\n s[n] = t[n + e];\n return s;\n}\nvar vd = pd, gd = vd;\nfunction yd(t, e, r) {\n var n = t.length;\n return r = r === void 0 ? n : r, !e && r >= n ? t : gd(t, e, r);\n}\nvar _d = yd, $d = \"\\\\ud800-\\\\udfff\", md = \"\\\\u0300-\\\\u036f\", bd = \"\\\\ufe20-\\\\ufe2f\", xd = \"\\\\u20d0-\\\\u20ff\", Fd = md + bd + xd, Ed = \"\\\\ufe0e\\\\ufe0f\", wd = \"\\\\u200d\", Ad = RegExp(\"[\" + wd + $d + Fd + Ed + \"]\");\nfunction Od(t) {\n return Ad.test(t);\n}\nvar Ar = Od;\nfunction Sd(t) {\n return t.split(\"\");\n}\nvar Cd = Sd, Or = \"\\\\ud800-\\\\udfff\", Td = \"\\\\u0300-\\\\u036f\", Dd = \"\\\\ufe20-\\\\ufe2f\", Pd = \"\\\\u20d0-\\\\u20ff\", Id = Td + Dd + Pd, Rd = \"\\\\ufe0e\\\\ufe0f\", Md = \"[\" + Or + \"]\", De = \"[\" + Id + \"]\", Pe = \"\\\\ud83c[\\\\udffb-\\\\udfff]\", jd = \"(?:\" + De + \"|\" + Pe + \")\", Sr = \"[^\" + Or + \"]\", Cr = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\", Tr = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\", Ld = \"\\\\u200d\", Dr = jd + \"?\", Pr = \"[\" + Rd + \"]?\", Nd = \"(?:\" + Ld + \"(?:\" + [Sr, Cr, Tr].join(\"|\") + \")\" + Pr + Dr + \")*\", Ud = Pr + Dr + Nd, zd = \"(?:\" + [Sr + De + \"?\", De, Cr, Tr, Md].join(\"|\") + \")\", Gd = RegExp(Pe + \"(?=\" + Pe + \")|\" + zd + Ud, \"g\");\nfunction kd(t) {\n return t.match(Gd) || [];\n}\nvar Hd = kd, Kd = Cd, qd = Ar, Vd = Hd;\nfunction Bd(t) {\n return qd(t) ? Vd(t) : Kd(t);\n}\nvar Wd = Bd, Zd = _d, Jd = Ar, Yd = Wd, Xd = W;\nfunction Qd(t) {\n return function(e) {\n e = Xd(e);\n var r = Jd(e) ? Yd(e) : void 0, n = r ? r[0] : e.charAt(0), a = r ? Zd(r, 1).join(\"\") : e.slice(1);\n return n[t]() + a;\n };\n}\nvar ep = Qd, tp = ep, rp = tp(\"toUpperCase\"), np = rp, ap = W, sp = np;\nfunction ip(t) {\n return sp(ap(t).toLowerCase());\n}\nvar up = ip, op = up, fp = wr, lp = fp(function(t, e, r) {\n return e = e.toLowerCase(), t + (r ? op(e) : e);\n}), cp = lp;\nconst hp = /* @__PURE__ */ N(cp);\nvar dp = Bt, pp = Jt, vp = sr;\nfunction gp(t, e) {\n var r = {};\n return e = vp(e), pp(t, function(n, a, s) {\n dp(r, e(n, a, s), n);\n }), r;\n}\nvar yp = gp;\nconst _p = /* @__PURE__ */ N(yp);\nvar He = { exports: {} };\nHe.exports = function(t) {\n return Ir($p(t), t);\n};\nHe.exports.array = Ir;\nfunction Ir(t, e) {\n var r = t.length, n = new Array(r), a = {}, s = r, i = mp(e), u = bp(t);\n for (e.forEach(function(f) {\n if (!u.has(f[0]) || !u.has(f[1]))\n throw new Error(\"Unknown node. There is an unknown node in the supplied edges.\");\n }); s--; )\n a[s] || o(t[s], s, /* @__PURE__ */ new Set());\n return n;\n function o(f, c, l) {\n if (l.has(f)) {\n var h;\n try {\n h = \", node was:\" + JSON.stringify(f);\n } catch {\n h = \"\";\n }\n throw new Error(\"Cyclic dependency\" + h);\n }\n if (!u.has(f))\n throw new Error(\"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" + JSON.stringify(f));\n if (!a[c]) {\n a[c] = !0;\n var d = i.get(f) || /* @__PURE__ */ new Set();\n if (d = Array.from(d), c = d.length) {\n l.add(f);\n do {\n var v = d[--c];\n o(v, u.get(v), l);\n } while (c);\n l.delete(f);\n }\n n[--r] = f;\n }\n }\n}\nfunction $p(t) {\n for (var e = /* @__PURE__ */ new Set(), r = 0, n = t.length; r < n; r++) {\n var a = t[r];\n e.add(a[0]), e.add(a[1]);\n }\n return Array.from(e);\n}\nfunction mp(t) {\n for (var e = /* @__PURE__ */ new Map(), r = 0, n = t.length; r < n; r++) {\n var a = t[r];\n e.has(a[0]) || e.set(a[0], /* @__PURE__ */ new Set()), e.has(a[1]) || e.set(a[1], /* @__PURE__ */ new Set()), e.get(a[0]).add(a[1]);\n }\n return e;\n}\nfunction bp(t) {\n for (var e = /* @__PURE__ */ new Map(), r = 0, n = t.length; r < n; r++)\n e.set(t[r], r);\n return e;\n}\nvar xp = He.exports;\nconst Fp = /* @__PURE__ */ N(xp);\nfunction Ep(t, e = []) {\n let r = [], n = /* @__PURE__ */ new Set(), a = new Set(e.map(([i, u]) => `${i}-${u}`));\n function s(i, u) {\n let o = ce.split(i)[0];\n n.add(o), a.has(`${u}-${o}`) || r.push([u, o]);\n }\n for (const i in t) if (Q(t, i)) {\n let u = t[i];\n n.add(i), C.isRef(u) && u.isSibling ? s(u.path, i) : qt(u) && \"deps\" in u && u.deps.forEach((o) => s(o, i));\n }\n return Fp.array(Array.from(n), r).reverse();\n}\nfunction Tt(t, e) {\n let r = 1 / 0;\n return t.some((n, a) => {\n var s;\n if (((s = e.path) == null ? void 0 : s.indexOf(n)) !== -1)\n return r = a, !0;\n }), r;\n}\nfunction Rr(t) {\n return (e, r) => Tt(t, e) - Tt(t, r);\n}\nfunction L() {\n return L = Object.assign || function(t) {\n for (var e = 1; e < arguments.length; e++) {\n var r = arguments[e];\n for (var n in r)\n Object.prototype.hasOwnProperty.call(r, n) && (t[n] = r[n]);\n }\n return t;\n }, L.apply(this, arguments);\n}\nlet Dt = (t) => Object.prototype.toString.call(t) === \"[object Object]\";\nfunction wp(t, e) {\n let r = Object.keys(t.fields);\n return Object.keys(e).filter((n) => r.indexOf(n) === -1);\n}\nconst Ap = Rr([]);\nclass Mr extends m {\n constructor(e) {\n super({\n type: \"object\"\n }), this.fields = /* @__PURE__ */ Object.create(null), this._sortErrors = Ap, this._nodes = [], this._excludedEdges = [], this.withMutation(() => {\n this.transform(function(n) {\n if (typeof n == \"string\")\n try {\n n = JSON.parse(n);\n } catch {\n n = null;\n }\n return this.isType(n) ? n : null;\n }), e && this.shape(e);\n });\n }\n _typeCheck(e) {\n return Dt(e) || typeof e == \"function\";\n }\n _cast(e, r = {}) {\n var n;\n let a = super._cast(e, r);\n if (a === void 0) return this.getDefault();\n if (!this._typeCheck(a)) return a;\n let s = this.fields, i = (n = r.stripUnknown) != null ? n : this.spec.noUnknown, u = this._nodes.concat(Object.keys(a).filter((l) => this._nodes.indexOf(l) === -1)), o = {}, f = L({}, r, {\n parent: o,\n __validating: r.__validating || !1\n }), c = !1;\n for (const l of u) {\n let h = s[l], d = Q(a, l);\n if (h) {\n let v, p = a[l];\n f.path = (r.path ? `${r.path}.` : \"\") + l, h = h.resolve({\n value: p,\n context: r.context,\n parent: o\n });\n let y = \"spec\" in h ? h.spec : void 0, $ = y == null ? void 0 : y.strict;\n if (y != null && y.strip) {\n c = c || l in a;\n continue;\n }\n v = !r.__validating || !$ ? (\n // TODO: use _cast, this is double resolving\n h.cast(a[l], f)\n ) : a[l], v !== void 0 && (o[l] = v);\n } else d && !i && (o[l] = a[l]);\n o[l] !== a[l] && (c = !0);\n }\n return c ? o : a;\n }\n _validate(e, r = {}, n) {\n let a = [], {\n sync: s,\n from: i = [],\n originalValue: u = e,\n abortEarly: o = this.spec.abortEarly,\n recursive: f = this.spec.recursive\n } = r;\n i = [{\n schema: this,\n value: u\n }, ...i], r.__validating = !0, r.originalValue = u, r.from = i, super._validate(e, r, (c, l) => {\n if (c) {\n if (!x.isError(c) || o)\n return void n(c, l);\n a.push(c);\n }\n if (!f || !Dt(l)) {\n n(a[0] || null, l);\n return;\n }\n u = u || l;\n let h = this._nodes.map((d) => (v, p) => {\n let y = d.indexOf(\".\") === -1 ? (r.path ? `${r.path}.` : \"\") + d : `${r.path || \"\"}[\"${d}\"]`, $ = this.fields[d];\n if ($ && \"validate\" in $) {\n $.validate(l[d], L({}, r, {\n // @ts-ignore\n path: y,\n from: i,\n // inner fields are always strict:\n // 1. this isn't strict so the casting will also have cast inner values\n // 2. this is strict in which case the nested values weren't cast either\n strict: !0,\n parent: l,\n originalValue: u[d]\n }), p);\n return;\n }\n p(null);\n });\n Ee({\n sync: s,\n tests: h,\n value: l,\n errors: a,\n endEarly: o,\n sort: this._sortErrors,\n path: r.path\n }, n);\n });\n }\n clone(e) {\n const r = super.clone(e);\n return r.fields = L({}, this.fields), r._nodes = this._nodes, r._excludedEdges = this._excludedEdges, r._sortErrors = this._sortErrors, r;\n }\n concat(e) {\n let r = super.concat(e), n = r.fields;\n for (let [a, s] of Object.entries(this.fields)) {\n const i = n[a];\n i === void 0 ? n[a] = s : i instanceof m && s instanceof m && (n[a] = s.concat(i));\n }\n return r.withMutation(() => r.shape(n, this._excludedEdges));\n }\n getDefaultFromShape() {\n let e = {};\n return this._nodes.forEach((r) => {\n const n = this.fields[r];\n e[r] = \"default\" in n ? n.getDefault() : void 0;\n }), e;\n }\n _getDefault() {\n if (\"default\" in this.spec)\n return super._getDefault();\n if (this._nodes.length)\n return this.getDefaultFromShape();\n }\n shape(e, r = []) {\n let n = this.clone(), a = Object.assign(n.fields, e);\n return n.fields = a, n._sortErrors = Rr(Object.keys(a)), r.length && (Array.isArray(r[0]) || (r = [r]), n._excludedEdges = [...n._excludedEdges, ...r]), n._nodes = Ep(a, n._excludedEdges), n;\n }\n pick(e) {\n const r = {};\n for (const n of e)\n this.fields[n] && (r[n] = this.fields[n]);\n return this.clone().withMutation((n) => (n.fields = {}, n.shape(r)));\n }\n omit(e) {\n const r = this.clone(), n = r.fields;\n r.fields = {};\n for (const a of e)\n delete n[a];\n return r.withMutation(() => r.shape(n));\n }\n from(e, r, n) {\n let a = ce.getter(e, !0);\n return this.transform((s) => {\n if (s == null) return s;\n let i = s;\n return Q(s, e) && (i = L({}, s), n || delete i[e], i[r] = a(s)), i;\n });\n }\n noUnknown(e = !0, r = xe.noUnknown) {\n typeof e == \"string\" && (r = e, e = !0);\n let n = this.test({\n name: \"noUnknown\",\n exclusive: !0,\n message: r,\n test(a) {\n if (a == null) return !0;\n const s = wp(this.schema, a);\n return !e || s.length === 0 || this.createError({\n params: {\n unknown: s.join(\", \")\n }\n });\n }\n });\n return n.spec.noUnknown = e, n;\n }\n unknown(e = !0, r = xe.noUnknown) {\n return this.noUnknown(!e, r);\n }\n transformKeys(e) {\n return this.transform((r) => r && _p(r, (n, a) => e(a)));\n }\n camelCase() {\n return this.transformKeys(hp);\n }\n snakeCase() {\n return this.transformKeys(Ct);\n }\n constantCase() {\n return this.transformKeys((e) => Ct(e).toUpperCase());\n }\n describe() {\n let e = super.describe();\n return e.fields = ir(this.fields, (r) => r.describe()), e;\n }\n}\nfunction Op(t) {\n return new Mr(t);\n}\nOp.prototype = Mr.prototype;\nexport {\n eh as a,\n Wc as b,\n Op as c\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LUJvV2RqZWtNLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvbmFub2Nsb25lL3NyYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvdXRpbC9wcmludFZhbHVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy9sb2NhbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSGFzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVIYXMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9QYXRoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJndW1lbnRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1BhdGguanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2hhcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvdXRpbC9pc1NjaGVtYS5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvQ29uZGl0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy91dGlsL3RvQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMveXVwL2VzL1ZhbGlkYXRpb25FcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvdXRpbC9ydW5UZXN0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvck93bi5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNTdHJpY3RDb21wYXJhYmxlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXNJbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eURlZXAuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL3Byb3BlcnR5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUl0ZXJhdGVlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tYXBWYWx1ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvcGVydHktZXhwci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvUmVmZXJlbmNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy91dGlsL2NyZWF0ZVZhbGlkYXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMveXVwL2VzL3V0aWwvcmVhY2guanMiLCIuLi9ub2RlX21vZHVsZXMveXVwL2VzL3V0aWwvUmVmZXJlbmNlU2V0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy9zY2hlbWEuanMiLCIuLi9ub2RlX21vZHVsZXMveXVwL2VzL21peGVkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy91dGlsL2lzQWJzZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy9ib29sZWFuLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3l1cC9lcy9zdHJpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMveXVwL2VzL3V0aWwvaXNvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UmVkdWNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVByb3BlcnR5T2YuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWJ1cnJMZXR0ZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL2RlYnVyci5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FzY2lpV29yZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlV29yZC5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVXb3Jkcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvd29yZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDb21wb3VuZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zbmFrZUNhc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0U2xpY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVRvQXJyYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ2FzZUZpcnN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91cHBlckZpcnN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jYXBpdGFsaXplLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jYW1lbENhc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvbG9kYXNoL21hcEtleXMuanMiLCIuLi9ub2RlX21vZHVsZXMvdG9wb3NvcnQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMveXVwL2VzL3V0aWwvc29ydEZpZWxkcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvdXRpbC9zb3J0QnlLZXlPcmRlci5qcyIsIi4uL25vZGVfbW9kdWxlcy95dXAvZXMvb2JqZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEVTNiBNYXBcbnZhciBtYXBcbnRyeSB7XG4gIG1hcCA9IE1hcFxufSBjYXRjaCAoXykgeyB9XG52YXIgc2V0XG5cbi8vIEVTNiBTZXRcbnRyeSB7XG4gIHNldCA9IFNldFxufSBjYXRjaCAoXykgeyB9XG5cbmZ1bmN0aW9uIGJhc2VDbG9uZSAoc3JjLCBjaXJjdWxhcnMsIGNsb25lcykge1xuICAvLyBOdWxsL3VuZGVmaW5lZC9mdW5jdGlvbnMvZXRjXG4gIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBzcmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc3JjXG4gIH1cblxuICAvLyBET00gTm9kZVxuICBpZiAoc3JjLm5vZGVUeXBlICYmICdjbG9uZU5vZGUnIGluIHNyYykge1xuICAgIHJldHVybiBzcmMuY2xvbmVOb2RlKHRydWUpXG4gIH1cblxuICAvLyBEYXRlXG4gIGlmIChzcmMgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpXG4gIH1cblxuICAvLyBSZWdFeHBcbiAgaWYgKHNyYyBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKHNyYylcbiAgfVxuXG4gIC8vIEFycmF5c1xuICBpZiAoQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgcmV0dXJuIHNyYy5tYXAoY2xvbmUpXG4gIH1cblxuICAvLyBFUzYgTWFwc1xuICBpZiAobWFwICYmIHNyYyBpbnN0YW5jZW9mIG1hcCkge1xuICAgIHJldHVybiBuZXcgTWFwKEFycmF5LmZyb20oc3JjLmVudHJpZXMoKSkpXG4gIH1cblxuICAvLyBFUzYgU2V0c1xuICBpZiAoc2V0ICYmIHNyYyBpbnN0YW5jZW9mIHNldCkge1xuICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20oc3JjLnZhbHVlcygpKSlcbiAgfVxuXG4gIC8vIE9iamVjdFxuICBpZiAoc3JjIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgY2lyY3VsYXJzLnB1c2goc3JjKVxuICAgIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKHNyYylcbiAgICBjbG9uZXMucHVzaChvYmopXG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgdmFyIGlkeCA9IGNpcmN1bGFycy5maW5kSW5kZXgoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGkgPT09IHNyY1trZXldXG4gICAgICB9KVxuICAgICAgb2JqW2tleV0gPSBpZHggPiAtMSA/IGNsb25lc1tpZHhdIDogYmFzZUNsb25lKHNyY1trZXldLCBjaXJjdWxhcnMsIGNsb25lcylcbiAgICB9XG4gICAgcmV0dXJuIG9ialxuICB9XG5cbiAgLy8gPz8/XG4gIHJldHVybiBzcmNcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xvbmUgKHNyYykge1xuICByZXR1cm4gYmFzZUNsb25lKHNyYywgW10sIFtdKVxufVxuIiwiY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuY29uc3QgZXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHJlZ0V4cFRvU3RyaW5nID0gUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IHN5bWJvbFRvU3RyaW5nID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nIDogKCkgPT4gJyc7XG5jb25zdCBTWU1CT0xfUkVHRVhQID0gL15TeW1ib2xcXCgoLiopXFwpKC4qKSQvO1xuXG5mdW5jdGlvbiBwcmludE51bWJlcih2YWwpIHtcbiAgaWYgKHZhbCAhPSArdmFsKSByZXR1cm4gJ05hTic7XG4gIGNvbnN0IGlzTmVnYXRpdmVaZXJvID0gdmFsID09PSAwICYmIDEgLyB2YWwgPCAwO1xuICByZXR1cm4gaXNOZWdhdGl2ZVplcm8gPyAnLTAnIDogJycgKyB2YWw7XG59XG5cbmZ1bmN0aW9uIHByaW50U2ltcGxlVmFsdWUodmFsLCBxdW90ZVN0cmluZ3MgPSBmYWxzZSkge1xuICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gZmFsc2UpIHJldHVybiAnJyArIHZhbDtcbiAgY29uc3QgdHlwZU9mID0gdHlwZW9mIHZhbDtcbiAgaWYgKHR5cGVPZiA9PT0gJ251bWJlcicpIHJldHVybiBwcmludE51bWJlcih2YWwpO1xuICBpZiAodHlwZU9mID09PSAnc3RyaW5nJykgcmV0dXJuIHF1b3RlU3RyaW5ncyA/IGBcIiR7dmFsfVwiYCA6IHZhbDtcbiAgaWYgKHR5cGVPZiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuICdbRnVuY3Rpb24gJyArICh2YWwubmFtZSB8fCAnYW5vbnltb3VzJykgKyAnXSc7XG4gIGlmICh0eXBlT2YgPT09ICdzeW1ib2wnKSByZXR1cm4gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWwpLnJlcGxhY2UoU1lNQk9MX1JFR0VYUCwgJ1N5bWJvbCgkMSknKTtcbiAgY29uc3QgdGFnID0gdG9TdHJpbmcuY2FsbCh2YWwpLnNsaWNlKDgsIC0xKTtcbiAgaWYgKHRhZyA9PT0gJ0RhdGUnKSByZXR1cm4gaXNOYU4odmFsLmdldFRpbWUoKSkgPyAnJyArIHZhbCA6IHZhbC50b0lTT1N0cmluZyh2YWwpO1xuICBpZiAodGFnID09PSAnRXJyb3InIHx8IHZhbCBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gJ1snICsgZXJyb3JUb1N0cmluZy5jYWxsKHZhbCkgKyAnXSc7XG4gIGlmICh0YWcgPT09ICdSZWdFeHAnKSByZXR1cm4gcmVnRXhwVG9TdHJpbmcuY2FsbCh2YWwpO1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJpbnRWYWx1ZSh2YWx1ZSwgcXVvdGVTdHJpbmdzKSB7XG4gIGxldCByZXN1bHQgPSBwcmludFNpbXBsZVZhbHVlKHZhbHVlLCBxdW90ZVN0cmluZ3MpO1xuICBpZiAocmVzdWx0ICE9PSBudWxsKSByZXR1cm4gcmVzdWx0O1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgbGV0IHJlc3VsdCA9IHByaW50U2ltcGxlVmFsdWUodGhpc1trZXldLCBxdW90ZVN0cmluZ3MpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LCAyKTtcbn0iLCJpbXBvcnQgcHJpbnRWYWx1ZSBmcm9tICcuL3V0aWwvcHJpbnRWYWx1ZSc7XG5leHBvcnQgbGV0IG1peGVkID0ge1xuICBkZWZhdWx0OiAnJHtwYXRofSBpcyBpbnZhbGlkJyxcbiAgcmVxdWlyZWQ6ICcke3BhdGh9IGlzIGEgcmVxdWlyZWQgZmllbGQnLFxuICBvbmVPZjogJyR7cGF0aH0gbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICR7dmFsdWVzfScsXG4gIG5vdE9uZU9mOiAnJHtwYXRofSBtdXN0IG5vdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICR7dmFsdWVzfScsXG4gIG5vdFR5cGU6ICh7XG4gICAgcGF0aCxcbiAgICB0eXBlLFxuICAgIHZhbHVlLFxuICAgIG9yaWdpbmFsVmFsdWVcbiAgfSkgPT4ge1xuICAgIGxldCBpc0Nhc3QgPSBvcmlnaW5hbFZhbHVlICE9IG51bGwgJiYgb3JpZ2luYWxWYWx1ZSAhPT0gdmFsdWU7XG4gICAgbGV0IG1zZyA9IGAke3BhdGh9IG11c3QgYmUgYSBcXGAke3R5cGV9XFxgIHR5cGUsIGAgKyBgYnV0IHRoZSBmaW5hbCB2YWx1ZSB3YXM6IFxcYCR7cHJpbnRWYWx1ZSh2YWx1ZSwgdHJ1ZSl9XFxgYCArIChpc0Nhc3QgPyBgIChjYXN0IGZyb20gdGhlIHZhbHVlIFxcYCR7cHJpbnRWYWx1ZShvcmlnaW5hbFZhbHVlLCB0cnVlKX1cXGApLmAgOiAnLicpO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBtc2cgKz0gYFxcbiBJZiBcIm51bGxcIiBpcyBpbnRlbmRlZCBhcyBhbiBlbXB0eSB2YWx1ZSBiZSBzdXJlIHRvIG1hcmsgdGhlIHNjaGVtYSBhcyBcXGAubnVsbGFibGUoKVxcYGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1zZztcbiAgfSxcbiAgZGVmaW5lZDogJyR7cGF0aH0gbXVzdCBiZSBkZWZpbmVkJ1xufTtcbmV4cG9ydCBsZXQgc3RyaW5nID0ge1xuICBsZW5ndGg6ICcke3BhdGh9IG11c3QgYmUgZXhhY3RseSAke2xlbmd0aH0gY2hhcmFjdGVycycsXG4gIG1pbjogJyR7cGF0aH0gbXVzdCBiZSBhdCBsZWFzdCAke21pbn0gY2hhcmFjdGVycycsXG4gIG1heDogJyR7cGF0aH0gbXVzdCBiZSBhdCBtb3N0ICR7bWF4fSBjaGFyYWN0ZXJzJyxcbiAgbWF0Y2hlczogJyR7cGF0aH0gbXVzdCBtYXRjaCB0aGUgZm9sbG93aW5nOiBcIiR7cmVnZXh9XCInLFxuICBlbWFpbDogJyR7cGF0aH0gbXVzdCBiZSBhIHZhbGlkIGVtYWlsJyxcbiAgdXJsOiAnJHtwYXRofSBtdXN0IGJlIGEgdmFsaWQgVVJMJyxcbiAgdXVpZDogJyR7cGF0aH0gbXVzdCBiZSBhIHZhbGlkIFVVSUQnLFxuICB0cmltOiAnJHtwYXRofSBtdXN0IGJlIGEgdHJpbW1lZCBzdHJpbmcnLFxuICBsb3dlcmNhc2U6ICcke3BhdGh9IG11c3QgYmUgYSBsb3dlcmNhc2Ugc3RyaW5nJyxcbiAgdXBwZXJjYXNlOiAnJHtwYXRofSBtdXN0IGJlIGEgdXBwZXIgY2FzZSBzdHJpbmcnXG59O1xuZXhwb3J0IGxldCBudW1iZXIgPSB7XG4gIG1pbjogJyR7cGF0aH0gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHttaW59JyxcbiAgbWF4OiAnJHtwYXRofSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke21heH0nLFxuICBsZXNzVGhhbjogJyR7cGF0aH0gbXVzdCBiZSBsZXNzIHRoYW4gJHtsZXNzfScsXG4gIG1vcmVUaGFuOiAnJHtwYXRofSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAke21vcmV9JyxcbiAgcG9zaXRpdmU6ICcke3BhdGh9IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInLFxuICBuZWdhdGl2ZTogJyR7cGF0aH0gbXVzdCBiZSBhIG5lZ2F0aXZlIG51bWJlcicsXG4gIGludGVnZXI6ICcke3BhdGh9IG11c3QgYmUgYW4gaW50ZWdlcidcbn07XG5leHBvcnQgbGV0IGRhdGUgPSB7XG4gIG1pbjogJyR7cGF0aH0gZmllbGQgbXVzdCBiZSBsYXRlciB0aGFuICR7bWlufScsXG4gIG1heDogJyR7cGF0aH0gZmllbGQgbXVzdCBiZSBhdCBlYXJsaWVyIHRoYW4gJHttYXh9J1xufTtcbmV4cG9ydCBsZXQgYm9vbGVhbiA9IHtcbiAgaXNWYWx1ZTogJyR7cGF0aH0gZmllbGQgbXVzdCBiZSAke3ZhbHVlfSdcbn07XG5leHBvcnQgbGV0IG9iamVjdCA9IHtcbiAgbm9Vbmtub3duOiAnJHtwYXRofSBmaWVsZCBoYXMgdW5zcGVjaWZpZWQga2V5czogJHt1bmtub3dufSdcbn07XG5leHBvcnQgbGV0IGFycmF5ID0ge1xuICBtaW46ICcke3BhdGh9IGZpZWxkIG11c3QgaGF2ZSBhdCBsZWFzdCAke21pbn0gaXRlbXMnLFxuICBtYXg6ICcke3BhdGh9IGZpZWxkIG11c3QgaGF2ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHttYXh9IGl0ZW1zJyxcbiAgbGVuZ3RoOiAnJHtwYXRofSBtdXN0IGhhdmUgJHtsZW5ndGh9IGl0ZW1zJ1xufTtcbmV4cG9ydCBkZWZhdWx0IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwge1xuICBtaXhlZCxcbiAgc3RyaW5nLFxuICBudW1iZXIsXG4gIGRhdGUsXG4gIG9iamVjdCxcbiAgYXJyYXksXG4gIGJvb2xlYW5cbn0pOyIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxuICogW2xhbmd1YWdlIHR5cGVdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWxhbmd1YWdlLXR5cGVzKVxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0KHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChfLm5vb3ApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVDcmVhdGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlRGVsZXRlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIG1lbW9pemVDYXBwZWQgPSByZXF1aXJlKCcuL19tZW1vaXplQ2FwcGVkJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZVByb3BOYW1lID0gL1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG52YXIgc3RyaW5nVG9QYXRoID0gbWVtb2l6ZUNhcHBlZChmdW5jdGlvbihzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICByZXN1bHQucHVzaCgnJyk7XG4gIH1cbiAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb1BhdGg7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9TdHJpbmcobnVsbCk7XG4gKiAvLyA9PiAnJ1xuICpcbiAqIF8udG9TdHJpbmcoLTApO1xuICogLy8gPT4gJy0wJ1xuICpcbiAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAqIC8vID0+ICcxLDIsMydcbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9TdHJpbmc7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1BhdGg7XG4iLCJ2YXIgYmFzZUhhcyA9IHJlcXVpcmUoJy4vX2Jhc2VIYXMnKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IHsgJ2InOiAyIH0gfTtcbiAqIHZhciBvdGhlciA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhcyhvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXMob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXMob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhcyhvdGhlciwgJ2EnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXM7XG4iLCJjb25zdCBpc1NjaGVtYSA9IG9iaiA9PiBvYmogJiYgb2JqLl9faXNZdXBTY2hlbWFfXztcblxuZXhwb3J0IGRlZmF1bHQgaXNTY2hlbWE7IiwiaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJztcbmltcG9ydCBpc1NjaGVtYSBmcm9tICcuL3V0aWwvaXNTY2hlbWEnO1xuXG5jbGFzcyBDb25kaXRpb24ge1xuICBjb25zdHJ1Y3RvcihyZWZzLCBvcHRpb25zKSB7XG4gICAgdGhpcy5mbiA9IHZvaWQgMDtcbiAgICB0aGlzLnJlZnMgPSByZWZzO1xuICAgIHRoaXMucmVmcyA9IHJlZnM7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuZm4gPSBvcHRpb25zO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghaGFzKG9wdGlvbnMsICdpcycpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdgaXM6YCBpcyByZXF1aXJlZCBmb3IgYHdoZW4oKWAgY29uZGl0aW9ucycpO1xuICAgIGlmICghb3B0aW9ucy50aGVuICYmICFvcHRpb25zLm90aGVyd2lzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignZWl0aGVyIGB0aGVuOmAgb3IgYG90aGVyd2lzZTpgIGlzIHJlcXVpcmVkIGZvciBgd2hlbigpYCBjb25kaXRpb25zJyk7XG4gICAgbGV0IHtcbiAgICAgIGlzLFxuICAgICAgdGhlbixcbiAgICAgIG90aGVyd2lzZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGxldCBjaGVjayA9IHR5cGVvZiBpcyA9PT0gJ2Z1bmN0aW9uJyA/IGlzIDogKC4uLnZhbHVlcykgPT4gdmFsdWVzLmV2ZXJ5KHZhbHVlID0+IHZhbHVlID09PSBpcyk7XG5cbiAgICB0aGlzLmZuID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIGxldCBvcHRpb25zID0gYXJncy5wb3AoKTtcbiAgICAgIGxldCBzY2hlbWEgPSBhcmdzLnBvcCgpO1xuICAgICAgbGV0IGJyYW5jaCA9IGNoZWNrKC4uLmFyZ3MpID8gdGhlbiA6IG90aGVyd2lzZTtcbiAgICAgIGlmICghYnJhbmNoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKHR5cGVvZiBicmFuY2ggPT09ICdmdW5jdGlvbicpIHJldHVybiBicmFuY2goc2NoZW1hKTtcbiAgICAgIHJldHVybiBzY2hlbWEuY29uY2F0KGJyYW5jaC5yZXNvbHZlKG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgcmVzb2x2ZShiYXNlLCBvcHRpb25zKSB7XG4gICAgbGV0IHZhbHVlcyA9IHRoaXMucmVmcy5tYXAocmVmID0+IHJlZi5nZXRWYWx1ZShvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnZhbHVlLCBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmVudCwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5jb250ZXh0KSk7XG4gICAgbGV0IHNjaGVtYSA9IHRoaXMuZm4uYXBwbHkoYmFzZSwgdmFsdWVzLmNvbmNhdChiYXNlLCBvcHRpb25zKSk7XG4gICAgaWYgKHNjaGVtYSA9PT0gdW5kZWZpbmVkIHx8IHNjaGVtYSA9PT0gYmFzZSkgcmV0dXJuIGJhc2U7XG4gICAgaWYgKCFpc1NjaGVtYShzY2hlbWEpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb25kaXRpb25zIG11c3QgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCcpO1xuICAgIHJldHVybiBzY2hlbWEucmVzb2x2ZShvcHRpb25zKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbmRpdGlvbjsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gW10gOiBbXS5jb25jYXQodmFsdWUpO1xufSIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCBwcmludFZhbHVlIGZyb20gJy4vdXRpbC9wcmludFZhbHVlJztcbmltcG9ydCB0b0FycmF5IGZyb20gJy4vdXRpbC90b0FycmF5JztcbmxldCBzdHJSZWcgPSAvXFwkXFx7XFxzKihcXHcrKVxccypcXH0vZztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgc3RhdGljIGZvcm1hdEVycm9yKG1lc3NhZ2UsIHBhcmFtcykge1xuICAgIGNvbnN0IHBhdGggPSBwYXJhbXMubGFiZWwgfHwgcGFyYW1zLnBhdGggfHwgJ3RoaXMnO1xuICAgIGlmIChwYXRoICE9PSBwYXJhbXMucGF0aCkgcGFyYW1zID0gX2V4dGVuZHMoe30sIHBhcmFtcywge1xuICAgICAgcGF0aFxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHJldHVybiBtZXNzYWdlLnJlcGxhY2Uoc3RyUmVnLCAoXywga2V5KSA9PiBwcmludFZhbHVlKHBhcmFtc1trZXldKSk7XG4gICAgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbWVzc2FnZShwYXJhbXMpO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9XG5cbiAgc3RhdGljIGlzRXJyb3IoZXJyKSB7XG4gICAgcmV0dXJuIGVyciAmJiBlcnIubmFtZSA9PT0gJ1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihlcnJvck9yRXJyb3JzLCB2YWx1ZSwgZmllbGQsIHR5cGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudmFsdWUgPSB2b2lkIDA7XG4gICAgdGhpcy5wYXRoID0gdm9pZCAwO1xuICAgIHRoaXMudHlwZSA9IHZvaWQgMDtcbiAgICB0aGlzLmVycm9ycyA9IHZvaWQgMDtcbiAgICB0aGlzLnBhcmFtcyA9IHZvaWQgMDtcbiAgICB0aGlzLmlubmVyID0gdm9pZCAwO1xuICAgIHRoaXMubmFtZSA9ICdWYWxpZGF0aW9uRXJyb3InO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnBhdGggPSBmaWVsZDtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgdGhpcy5pbm5lciA9IFtdO1xuICAgIHRvQXJyYXkoZXJyb3JPckVycm9ycykuZm9yRWFjaChlcnIgPT4ge1xuICAgICAgaWYgKFZhbGlkYXRpb25FcnJvci5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaCguLi5lcnIuZXJyb3JzKTtcbiAgICAgICAgdGhpcy5pbm5lciA9IHRoaXMuaW5uZXIuY29uY2F0KGVyci5pbm5lci5sZW5ndGggPyBlcnIuaW5uZXIgOiBlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubWVzc2FnZSA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDEgPyBgJHt0aGlzLmVycm9ycy5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZGAgOiB0aGlzLmVycm9yc1swXTtcbiAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFZhbGlkYXRpb25FcnJvcik7XG4gIH1cblxufSIsImltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vVmFsaWRhdGlvbkVycm9yJztcblxuY29uc3Qgb25jZSA9IGNiID0+IHtcbiAgbGV0IGZpcmVkID0gZmFsc2U7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIGlmIChmaXJlZCkgcmV0dXJuO1xuICAgIGZpcmVkID0gdHJ1ZTtcbiAgICBjYiguLi5hcmdzKTtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJ1blRlc3RzKG9wdGlvbnMsIGNiKSB7XG4gIGxldCB7XG4gICAgZW5kRWFybHksXG4gICAgdGVzdHMsXG4gICAgYXJncyxcbiAgICB2YWx1ZSxcbiAgICBlcnJvcnMsXG4gICAgc29ydCxcbiAgICBwYXRoXG4gIH0gPSBvcHRpb25zO1xuICBsZXQgY2FsbGJhY2sgPSBvbmNlKGNiKTtcbiAgbGV0IGNvdW50ID0gdGVzdHMubGVuZ3RoO1xuICBjb25zdCBuZXN0ZWRFcnJvcnMgPSBbXTtcbiAgZXJyb3JzID0gZXJyb3JzID8gZXJyb3JzIDogW107XG4gIGlmICghY291bnQpIHJldHVybiBlcnJvcnMubGVuZ3RoID8gY2FsbGJhY2sobmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMsIHZhbHVlLCBwYXRoKSkgOiBjYWxsYmFjayhudWxsLCB2YWx1ZSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRlc3QgPSB0ZXN0c1tpXTtcbiAgICB0ZXN0KGFyZ3MsIGZ1bmN0aW9uIGZpbmlzaFRlc3RSdW4oZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIC8vIGFsd2F5cyByZXR1cm4gZWFybHkgZm9yIG5vbiB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICBpZiAoIVZhbGlkYXRpb25FcnJvci5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kRWFybHkpIHtcbiAgICAgICAgICBlcnIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXN0ZWRFcnJvcnMucHVzaChlcnIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoLS1jb3VudCA8PSAwKSB7XG4gICAgICAgIGlmIChuZXN0ZWRFcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHNvcnQpIG5lc3RlZEVycm9ycy5zb3J0KHNvcnQpOyAvL3Nob3cgcGFyZW50IGVycm9ycyBhZnRlciB0aGUgbmVzdGVkIG9uZXM6IG5hbWUuZmlyc3QsIG5hbWVcblxuICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSBuZXN0ZWRFcnJvcnMucHVzaCguLi5lcnJvcnMpO1xuICAgICAgICAgIGVycm9ycyA9IG5lc3RlZEVycm9ycztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMsIHZhbHVlLCBwYXRoKSwgdmFsdWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgY3JlYXRlQmFzZUZvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VGb3InKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3I7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlckFyZztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gIHJldHVybiBvYmplY3QgJiYgYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRm9yT3duO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsIi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBhZGRcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQGFsaWFzIHB1c2hcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlQWRkO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldENhY2hlSGFzO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcbiAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRBbGxLZXlzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwidmFyIGJhc2VHZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUdldEFsbEtleXMnKSxcbiAgICBnZXRTeW1ib2xzID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9scycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzLCBnZXRTeW1ib2xzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzO1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBTZXQgPSBnZXROYXRpdmUocm9vdCwgJ1NldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgYmFzZUlzTWF0Y2ggPSByZXF1aXJlKCcuL19iYXNlSXNNYXRjaCcpLFxuICAgIGdldE1hdGNoRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hdGNoRGF0YScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXM7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgYmFzZUhhc0luID0gcmVxdWlyZSgnLi9fYmFzZUhhc0luJyksXG4gICAgaGFzUGF0aCA9IHJlcXVpcmUoJy4vX2hhc1BhdGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc0luO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKSxcbiAgICBnZXQgPSByZXF1aXJlKCcuL2dldCcpLFxuICAgIGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgaWYgKGlzS2V5KHBhdGgpICYmIGlzU3RyaWN0Q29tcGFyYWJsZShzcmNWYWx1ZSkpIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcbiAgICAgID8gaGFzSW4ob2JqZWN0LCBwYXRoKVxuICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXNQcm9wZXJ0eTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYXMgYG9iamVjdGAgYW5kIHZhbHVlcyBnZW5lcmF0ZWRcbiAqIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydVxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XG4gKiAodmFsdWUsIGtleSwgb2JqZWN0KS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cbiAqIEBzZWUgXy5tYXBLZXlzXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IHtcbiAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XG4gKiB9O1xuICpcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLm1hcFZhbHVlcyh1c2VycywgJ2FnZScpO1xuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBtYXBWYWx1ZXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTtcblxuICBiYXNlRm9yT3duKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVmFsdWVzO1xuIiwiLyoqXG4gKiBCYXNlZCBvbiBLZW5kbyBVSSBDb3JlIGV4cHJlc3Npb24gY29kZSA8aHR0cHM6Ly9naXRodWIuY29tL3RlbGVyaWsva2VuZG8tdWktY29yZSNsaWNlbnNlLWluZm9ybWF0aW9uPlxuICovXG4ndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gQ2FjaGUobWF4U2l6ZSkge1xuICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZVxuICB0aGlzLmNsZWFyKClcbn1cbkNhY2hlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fc2l6ZSA9IDBcbiAgdGhpcy5fdmFsdWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKVxufVxuQ2FjaGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX3ZhbHVlc1trZXldXG59XG5DYWNoZS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdGhpcy5fc2l6ZSA+PSB0aGlzLl9tYXhTaXplICYmIHRoaXMuY2xlYXIoKVxuICBpZiAoIShrZXkgaW4gdGhpcy5fdmFsdWVzKSkgdGhpcy5fc2l6ZSsrXG5cbiAgcmV0dXJuICh0aGlzLl92YWx1ZXNba2V5XSA9IHZhbHVlKVxufVxuXG52YXIgU1BMSVRfUkVHRVggPSAvW14uXlxcXV5bXSt8KD89XFxbXFxdfFxcLlxcLikvZyxcbiAgRElHSVRfUkVHRVggPSAvXlxcZCskLyxcbiAgTEVBRF9ESUdJVF9SRUdFWCA9IC9eXFxkLyxcbiAgU1BFQ19DSEFSX1JFR0VYID0gL1t+YCEjJCVcXF4mKis9XFwtXFxbXFxdXFxcXCc7LC97fXxcXFxcXCI6PD5cXD9dL2csXG4gIENMRUFOX1FVT1RFU19SRUdFWCA9IC9eXFxzKihbJ1wiXT8pKC4qPykoXFwxKVxccyokLyxcbiAgTUFYX0NBQ0hFX1NJWkUgPSA1MTJcblxudmFyIHBhdGhDYWNoZSA9IG5ldyBDYWNoZShNQVhfQ0FDSEVfU0laRSksXG4gIHNldENhY2hlID0gbmV3IENhY2hlKE1BWF9DQUNIRV9TSVpFKSxcbiAgZ2V0Q2FjaGUgPSBuZXcgQ2FjaGUoTUFYX0NBQ0hFX1NJWkUpXG5cbnZhciBjb25maWdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlOiBDYWNoZSxcblxuICBzcGxpdDogc3BsaXQsXG5cbiAgbm9ybWFsaXplUGF0aDogbm9ybWFsaXplUGF0aCxcblxuICBzZXR0ZXI6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgdmFyIHBhcnRzID0gbm9ybWFsaXplUGF0aChwYXRoKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIHNldENhY2hlLmdldChwYXRoKSB8fFxuICAgICAgc2V0Q2FjaGUuc2V0KHBhdGgsIGZ1bmN0aW9uIHNldHRlcihvYmosIHZhbHVlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDBcbiAgICAgICAgdmFyIGxlbiA9IHBhcnRzLmxlbmd0aFxuICAgICAgICB2YXIgZGF0YSA9IG9ialxuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbiAtIDEpIHtcbiAgICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2luZGV4XVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcnQgPT09ICdfX3Byb3RvX18nIHx8XG4gICAgICAgICAgICBwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8XG4gICAgICAgICAgICBwYXJ0ID09PSAncHJvdG90eXBlJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEgPSBkYXRhW3BhcnRzW2luZGV4KytdXVxuICAgICAgICB9XG4gICAgICAgIGRhdGFbcGFydHNbaW5kZXhdXSA9IHZhbHVlXG4gICAgICB9KVxuICAgIClcbiAgfSxcblxuICBnZXR0ZXI6IGZ1bmN0aW9uIChwYXRoLCBzYWZlKSB7XG4gICAgdmFyIHBhcnRzID0gbm9ybWFsaXplUGF0aChwYXRoKVxuICAgIHJldHVybiAoXG4gICAgICBnZXRDYWNoZS5nZXQocGF0aCkgfHxcbiAgICAgIGdldENhY2hlLnNldChwYXRoLCBmdW5jdGlvbiBnZXR0ZXIoZGF0YSkge1xuICAgICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aFxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHtcbiAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsIHx8ICFzYWZlKSBkYXRhID0gZGF0YVtwYXJ0c1tpbmRleCsrXV1cbiAgICAgICAgICBlbHNlIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9KVxuICAgIClcbiAgfSxcblxuICBqb2luOiBmdW5jdGlvbiAoc2VnbWVudHMpIHtcbiAgICByZXR1cm4gc2VnbWVudHMucmVkdWNlKGZ1bmN0aW9uIChwYXRoLCBwYXJ0KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoICtcbiAgICAgICAgKGlzUXVvdGVkKHBhcnQpIHx8IERJR0lUX1JFR0VYLnRlc3QocGFydClcbiAgICAgICAgICA/ICdbJyArIHBhcnQgKyAnXSdcbiAgICAgICAgICA6IChwYXRoID8gJy4nIDogJycpICsgcGFydClcbiAgICAgIClcbiAgICB9LCAnJylcbiAgfSxcblxuICBmb3JFYWNoOiBmdW5jdGlvbiAocGF0aCwgY2IsIHRoaXNBcmcpIHtcbiAgICBmb3JFYWNoKEFycmF5LmlzQXJyYXkocGF0aCkgPyBwYXRoIDogc3BsaXQocGF0aCksIGNiLCB0aGlzQXJnKVxuICB9LFxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGgpIHtcbiAgcmV0dXJuIChcbiAgICBwYXRoQ2FjaGUuZ2V0KHBhdGgpIHx8XG4gICAgcGF0aENhY2hlLnNldChcbiAgICAgIHBhdGgsXG4gICAgICBzcGxpdChwYXRoKS5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnQucmVwbGFjZShDTEVBTl9RVU9URVNfUkVHRVgsICckMicpXG4gICAgICB9KVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBzcGxpdChwYXRoKSB7XG4gIHJldHVybiBwYXRoLm1hdGNoKFNQTElUX1JFR0VYKSB8fCBbJyddXG59XG5cbmZ1bmN0aW9uIGZvckVhY2gocGFydHMsIGl0ZXIsIHRoaXNBcmcpIHtcbiAgdmFyIGxlbiA9IHBhcnRzLmxlbmd0aCxcbiAgICBwYXJ0LFxuICAgIGlkeCxcbiAgICBpc0FycmF5LFxuICAgIGlzQnJhY2tldFxuXG4gIGZvciAoaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgIHBhcnQgPSBwYXJ0c1tpZHhdXG5cbiAgICBpZiAocGFydCkge1xuICAgICAgaWYgKHNob3VsZEJlUXVvdGVkKHBhcnQpKSB7XG4gICAgICAgIHBhcnQgPSAnXCInICsgcGFydCArICdcIidcbiAgICAgIH1cblxuICAgICAgaXNCcmFja2V0ID0gaXNRdW90ZWQocGFydClcbiAgICAgIGlzQXJyYXkgPSAhaXNCcmFja2V0ICYmIC9eXFxkKyQvLnRlc3QocGFydClcblxuICAgICAgaXRlci5jYWxsKHRoaXNBcmcsIHBhcnQsIGlzQnJhY2tldCwgaXNBcnJheSwgaWR4LCBwYXJ0cylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNRdW90ZWQoc3RyKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyICYmIFtcIidcIiwgJ1wiJ10uaW5kZXhPZihzdHIuY2hhckF0KDApKSAhPT0gLTFcbiAgKVxufVxuXG5mdW5jdGlvbiBoYXNMZWFkaW5nTnVtYmVyKHBhcnQpIHtcbiAgcmV0dXJuIHBhcnQubWF0Y2goTEVBRF9ESUdJVF9SRUdFWCkgJiYgIXBhcnQubWF0Y2goRElHSVRfUkVHRVgpXG59XG5cbmZ1bmN0aW9uIGhhc1NwZWNpYWxDaGFycyhwYXJ0KSB7XG4gIHJldHVybiBTUEVDX0NIQVJfUkVHRVgudGVzdChwYXJ0KVxufVxuXG5mdW5jdGlvbiBzaG91bGRCZVF1b3RlZChwYXJ0KSB7XG4gIHJldHVybiAhaXNRdW90ZWQocGFydCkgJiYgKGhhc0xlYWRpbmdOdW1iZXIocGFydCkgfHwgaGFzU3BlY2lhbENoYXJzKHBhcnQpKVxufVxuIiwiaW1wb3J0IHsgZ2V0dGVyIH0gZnJvbSAncHJvcGVydHktZXhwcic7XG5jb25zdCBwcmVmaXhlcyA9IHtcbiAgY29udGV4dDogJyQnLFxuICB2YWx1ZTogJy4nXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShrZXksIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWZlcmVuY2Uoa2V5LCBvcHRpb25zKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZSB7XG4gIGNvbnN0cnVjdG9yKGtleSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5rZXkgPSB2b2lkIDA7XG4gICAgdGhpcy5pc0NvbnRleHQgPSB2b2lkIDA7XG4gICAgdGhpcy5pc1ZhbHVlID0gdm9pZCAwO1xuICAgIHRoaXMuaXNTaWJsaW5nID0gdm9pZCAwO1xuICAgIHRoaXMucGF0aCA9IHZvaWQgMDtcbiAgICB0aGlzLmdldHRlciA9IHZvaWQgMDtcbiAgICB0aGlzLm1hcCA9IHZvaWQgMDtcbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZiBtdXN0IGJlIGEgc3RyaW5nLCBnb3Q6ICcgKyBrZXkpO1xuICAgIHRoaXMua2V5ID0ga2V5LnRyaW0oKTtcbiAgICBpZiAoa2V5ID09PSAnJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVmIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgdGhpcy5pc0NvbnRleHQgPSB0aGlzLmtleVswXSA9PT0gcHJlZml4ZXMuY29udGV4dDtcbiAgICB0aGlzLmlzVmFsdWUgPSB0aGlzLmtleVswXSA9PT0gcHJlZml4ZXMudmFsdWU7XG4gICAgdGhpcy5pc1NpYmxpbmcgPSAhdGhpcy5pc0NvbnRleHQgJiYgIXRoaXMuaXNWYWx1ZTtcbiAgICBsZXQgcHJlZml4ID0gdGhpcy5pc0NvbnRleHQgPyBwcmVmaXhlcy5jb250ZXh0IDogdGhpcy5pc1ZhbHVlID8gcHJlZml4ZXMudmFsdWUgOiAnJztcbiAgICB0aGlzLnBhdGggPSB0aGlzLmtleS5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgICB0aGlzLmdldHRlciA9IHRoaXMucGF0aCAmJiBnZXR0ZXIodGhpcy5wYXRoLCB0cnVlKTtcbiAgICB0aGlzLm1hcCA9IG9wdGlvbnMubWFwO1xuICB9XG5cbiAgZ2V0VmFsdWUodmFsdWUsIHBhcmVudCwgY29udGV4dCkge1xuICAgIGxldCByZXN1bHQgPSB0aGlzLmlzQ29udGV4dCA/IGNvbnRleHQgOiB0aGlzLmlzVmFsdWUgPyB2YWx1ZSA6IHBhcmVudDtcbiAgICBpZiAodGhpcy5nZXR0ZXIpIHJlc3VsdCA9IHRoaXMuZ2V0dGVyKHJlc3VsdCB8fCB7fSk7XG4gICAgaWYgKHRoaXMubWFwKSByZXN1bHQgPSB0aGlzLm1hcChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLmNvbnRleHRcbiAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zLnBhcmVudFxuICAgKi9cblxuXG4gIGNhc3QodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5wYXJlbnQsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuY29udGV4dCk7XG4gIH1cblxuICByZXNvbHZlKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZGVzY3JpYmUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdyZWYnLFxuICAgICAga2V5OiB0aGlzLmtleVxuICAgIH07XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYFJlZigke3RoaXMua2V5fSlgO1xuICB9XG5cbiAgc3RhdGljIGlzUmVmKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlLl9faXNZdXBSZWY7XG4gIH1cblxufSAvLyBAdHMtaWdub3JlXG5cblJlZmVyZW5jZS5wcm90b3R5cGUuX19pc1l1cFJlZiA9IHRydWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgbWFwVmFsdWVzIGZyb20gJ2xvZGFzaC9tYXBWYWx1ZXMnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9WYWxpZGF0aW9uRXJyb3InO1xuaW1wb3J0IFJlZiBmcm9tICcuLi9SZWZlcmVuY2UnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVmFsaWRhdGlvbihjb25maWcpIHtcbiAgZnVuY3Rpb24gdmFsaWRhdGUoX3JlZiwgY2IpIHtcbiAgICBsZXQge1xuICAgICAgdmFsdWUsXG4gICAgICBwYXRoID0gJycsXG4gICAgICBsYWJlbCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgc3luY1xuICAgIH0gPSBfcmVmLFxuICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3JlZiwgW1widmFsdWVcIiwgXCJwYXRoXCIsIFwibGFiZWxcIiwgXCJvcHRpb25zXCIsIFwib3JpZ2luYWxWYWx1ZVwiLCBcInN5bmNcIl0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHRlc3QsXG4gICAgICBwYXJhbXMsXG4gICAgICBtZXNzYWdlXG4gICAgfSA9IGNvbmZpZztcbiAgICBsZXQge1xuICAgICAgcGFyZW50LFxuICAgICAgY29udGV4dFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZShpdGVtKSB7XG4gICAgICByZXR1cm4gUmVmLmlzUmVmKGl0ZW0pID8gaXRlbS5nZXRWYWx1ZSh2YWx1ZSwgcGFyZW50LCBjb250ZXh0KSA6IGl0ZW07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3Iob3ZlcnJpZGVzID0ge30pIHtcbiAgICAgIGNvbnN0IG5leHRQYXJhbXMgPSBtYXBWYWx1ZXMoX2V4dGVuZHMoe1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHBhdGg6IG92ZXJyaWRlcy5wYXRoIHx8IHBhdGhcbiAgICAgIH0sIHBhcmFtcywgb3ZlcnJpZGVzLnBhcmFtcyksIHJlc29sdmUpO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVmFsaWRhdGlvbkVycm9yKFZhbGlkYXRpb25FcnJvci5mb3JtYXRFcnJvcihvdmVycmlkZXMubWVzc2FnZSB8fCBtZXNzYWdlLCBuZXh0UGFyYW1zKSwgdmFsdWUsIG5leHRQYXJhbXMucGF0aCwgb3ZlcnJpZGVzLnR5cGUgfHwgbmFtZSk7XG4gICAgICBlcnJvci5wYXJhbXMgPSBuZXh0UGFyYW1zO1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIGxldCBjdHggPSBfZXh0ZW5kcyh7XG4gICAgICBwYXRoLFxuICAgICAgcGFyZW50LFxuICAgICAgdHlwZTogbmFtZSxcbiAgICAgIGNyZWF0ZUVycm9yLFxuICAgICAgcmVzb2x2ZSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBvcmlnaW5hbFZhbHVlXG4gICAgfSwgcmVzdCk7XG5cbiAgICBpZiAoIXN5bmMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSh0ZXN0LmNhbGwoY3R4LCB2YWx1ZSwgY3R4KSkudGhlbih2YWxpZE9yRXJyb3IgPT4ge1xuICAgICAgICAgIGlmIChWYWxpZGF0aW9uRXJyb3IuaXNFcnJvcih2YWxpZE9yRXJyb3IpKSBjYih2YWxpZE9yRXJyb3IpO2Vsc2UgaWYgKCF2YWxpZE9yRXJyb3IpIGNiKGNyZWF0ZUVycm9yKCkpO2Vsc2UgY2IobnVsbCwgdmFsaWRPckVycm9yKTtcbiAgICAgICAgfSkuY2F0Y2goY2IpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNiKGVycik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBfcmVmMjtcblxuICAgICAgcmVzdWx0ID0gdGVzdC5jYWxsKGN0eCwgdmFsdWUsIGN0eCk7XG5cbiAgICAgIGlmICh0eXBlb2YgKChfcmVmMiA9IHJlc3VsdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYyLnRoZW4pID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiB0ZXN0IG9mIHR5cGU6IFwiJHtjdHgudHlwZX1cIiByZXR1cm5lZCBhIFByb21pc2UgZHVyaW5nIGEgc3luY2hyb25vdXMgdmFsaWRhdGUuIGAgKyBgVGhpcyB0ZXN0IHdpbGwgZmluaXNoIGFmdGVyIHRoZSB2YWxpZGF0ZSBjYWxsIGhhcyByZXR1cm5lZGApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2IoZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoVmFsaWRhdGlvbkVycm9yLmlzRXJyb3IocmVzdWx0KSkgY2IocmVzdWx0KTtlbHNlIGlmICghcmVzdWx0KSBjYihjcmVhdGVFcnJvcigpKTtlbHNlIGNiKG51bGwsIHJlc3VsdCk7XG4gIH1cblxuICB2YWxpZGF0ZS5PUFRJT05TID0gY29uZmlnO1xuICByZXR1cm4gdmFsaWRhdGU7XG59IiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJ3Byb3BlcnR5LWV4cHInO1xuXG5sZXQgdHJpbSA9IHBhcnQgPT4gcGFydC5zdWJzdHIoMCwgcGFydC5sZW5ndGggLSAxKS5zdWJzdHIoMSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbihzY2hlbWEsIHBhdGgsIHZhbHVlLCBjb250ZXh0ID0gdmFsdWUpIHtcbiAgbGV0IHBhcmVudCwgbGFzdFBhcnQsIGxhc3RQYXJ0RGVidWc7IC8vIHJvb3QgcGF0aDogJydcblxuICBpZiAoIXBhdGgpIHJldHVybiB7XG4gICAgcGFyZW50LFxuICAgIHBhcmVudFBhdGg6IHBhdGgsXG4gICAgc2NoZW1hXG4gIH07XG4gIGZvckVhY2gocGF0aCwgKF9wYXJ0LCBpc0JyYWNrZXQsIGlzQXJyYXkpID0+IHtcbiAgICBsZXQgcGFydCA9IGlzQnJhY2tldCA/IHRyaW0oX3BhcnQpIDogX3BhcnQ7XG4gICAgc2NoZW1hID0gc2NoZW1hLnJlc29sdmUoe1xuICAgICAgY29udGV4dCxcbiAgICAgIHBhcmVudCxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG5cbiAgICBpZiAoc2NoZW1hLmlubmVyVHlwZSkge1xuICAgICAgbGV0IGlkeCA9IGlzQXJyYXkgPyBwYXJzZUludChwYXJ0LCAxMCkgOiAwO1xuXG4gICAgICBpZiAodmFsdWUgJiYgaWR4ID49IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFl1cC5yZWFjaCBjYW5ub3QgcmVzb2x2ZSBhbiBhcnJheSBpdGVtIGF0IGluZGV4OiAke19wYXJ0fSwgaW4gdGhlIHBhdGg6ICR7cGF0aH0uIGAgKyBgYmVjYXVzZSB0aGVyZSBpcyBubyB2YWx1ZSBhdCB0aGF0IGluZGV4LiBgKTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gdmFsdWU7XG4gICAgICB2YWx1ZSA9IHZhbHVlICYmIHZhbHVlW2lkeF07XG4gICAgICBzY2hlbWEgPSBzY2hlbWEuaW5uZXJUeXBlO1xuICAgIH0gLy8gc29tZXRpbWVzIHRoZSBhcnJheSBpbmRleCBwYXJ0IG9mIGEgcGF0aCBkb2Vzbid0IGV4aXN0OiBcIm5lc3RlZC5hcnIuY2hpbGRcIlxuICAgIC8vIGluIHRoZXNlIGNhc2VzIHRoZSBjdXJyZW50IHBhcnQgaXMgdGhlIG5leHQgc2NoZW1hIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkXG4gICAgLy8gaW4gdGhpcyBpdGVyYXRpb24uIEZvciBjYXNlcyB3aGVyZSB0aGUgaW5kZXggc2lnbmF0dXJlIGlzIGluY2x1ZGVkIHRoaXNcbiAgICAvLyBjaGVjayB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSB0aGUgYGNoaWxkYCBwYXJ0IG9uIHRoZSBuZXh0IGl0ZXJhdGlvbiBsaWtlIG5vcm1hbFxuXG5cbiAgICBpZiAoIWlzQXJyYXkpIHtcbiAgICAgIGlmICghc2NoZW1hLmZpZWxkcyB8fCAhc2NoZW1hLmZpZWxkc1twYXJ0XSkgdGhyb3cgbmV3IEVycm9yKGBUaGUgc2NoZW1hIGRvZXMgbm90IGNvbnRhaW4gdGhlIHBhdGg6ICR7cGF0aH0uIGAgKyBgKGZhaWxlZCBhdDogJHtsYXN0UGFydERlYnVnfSB3aGljaCBpcyBhIHR5cGU6IFwiJHtzY2hlbWEuX3R5cGV9XCIpYCk7XG4gICAgICBwYXJlbnQgPSB2YWx1ZTtcbiAgICAgIHZhbHVlID0gdmFsdWUgJiYgdmFsdWVbcGFydF07XG4gICAgICBzY2hlbWEgPSBzY2hlbWEuZmllbGRzW3BhcnRdO1xuICAgIH1cblxuICAgIGxhc3RQYXJ0ID0gcGFydDtcbiAgICBsYXN0UGFydERlYnVnID0gaXNCcmFja2V0ID8gJ1snICsgX3BhcnQgKyAnXScgOiAnLicgKyBfcGFydDtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc2NoZW1hLFxuICAgIHBhcmVudCxcbiAgICBwYXJlbnRQYXRoOiBsYXN0UGFydFxuICB9O1xufVxuXG5jb25zdCByZWFjaCA9IChvYmosIHBhdGgsIHZhbHVlLCBjb250ZXh0KSA9PiBnZXRJbihvYmosIHBhdGgsIHZhbHVlLCBjb250ZXh0KS5zY2hlbWE7XG5cbmV4cG9ydCBkZWZhdWx0IHJlYWNoOyIsImltcG9ydCBSZWZlcmVuY2UgZnJvbSAnLi4vUmVmZXJlbmNlJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZmVyZW5jZVNldCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubGlzdCA9IHZvaWQgMDtcbiAgICB0aGlzLnJlZnMgPSB2b2lkIDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IFNldCgpO1xuICAgIHRoaXMucmVmcyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3Quc2l6ZSArIHRoaXMucmVmcy5zaXplO1xuICB9XG5cbiAgZGVzY3JpYmUoKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBbXTtcblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmxpc3QpIGRlc2NyaXB0aW9uLnB1c2goaXRlbSk7XG5cbiAgICBmb3IgKGNvbnN0IFssIHJlZl0gb2YgdGhpcy5yZWZzKSBkZXNjcmlwdGlvbi5wdXNoKHJlZi5kZXNjcmliZSgpKTtcblxuICAgIHJldHVybiBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5saXN0KS5jb25jYXQoQXJyYXkuZnJvbSh0aGlzLnJlZnMudmFsdWVzKCkpKTtcbiAgfVxuXG4gIHJlc29sdmVBbGwocmVzb2x2ZSkge1xuICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKS5yZWR1Y2UoKGFjYywgZSkgPT4gYWNjLmNvbmNhdChSZWZlcmVuY2UuaXNSZWYoZSkgPyByZXNvbHZlKGUpIDogZSksIFtdKTtcbiAgfVxuXG4gIGFkZCh2YWx1ZSkge1xuICAgIFJlZmVyZW5jZS5pc1JlZih2YWx1ZSkgPyB0aGlzLnJlZnMuc2V0KHZhbHVlLmtleSwgdmFsdWUpIDogdGhpcy5saXN0LmFkZCh2YWx1ZSk7XG4gIH1cblxuICBkZWxldGUodmFsdWUpIHtcbiAgICBSZWZlcmVuY2UuaXNSZWYodmFsdWUpID8gdGhpcy5yZWZzLmRlbGV0ZSh2YWx1ZS5rZXkpIDogdGhpcy5saXN0LmRlbGV0ZSh2YWx1ZSk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBuZXh0ID0gbmV3IFJlZmVyZW5jZVNldCgpO1xuICAgIG5leHQubGlzdCA9IG5ldyBTZXQodGhpcy5saXN0KTtcbiAgICBuZXh0LnJlZnMgPSBuZXcgTWFwKHRoaXMucmVmcyk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBtZXJnZShuZXdJdGVtcywgcmVtb3ZlSXRlbXMpIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5jbG9uZSgpO1xuICAgIG5ld0l0ZW1zLmxpc3QuZm9yRWFjaCh2YWx1ZSA9PiBuZXh0LmFkZCh2YWx1ZSkpO1xuICAgIG5ld0l0ZW1zLnJlZnMuZm9yRWFjaCh2YWx1ZSA9PiBuZXh0LmFkZCh2YWx1ZSkpO1xuICAgIHJlbW92ZUl0ZW1zLmxpc3QuZm9yRWFjaCh2YWx1ZSA9PiBuZXh0LmRlbGV0ZSh2YWx1ZSkpO1xuICAgIHJlbW92ZUl0ZW1zLnJlZnMuZm9yRWFjaCh2YWx1ZSA9PiBuZXh0LmRlbGV0ZSh2YWx1ZSkpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbn0iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ25hbm9jbG9uZSc7XG5pbXBvcnQgeyBtaXhlZCBhcyBsb2NhbGUgfSBmcm9tICcuL2xvY2FsZSc7XG5pbXBvcnQgQ29uZGl0aW9uIGZyb20gJy4vQ29uZGl0aW9uJztcbmltcG9ydCBydW5UZXN0cyBmcm9tICcuL3V0aWwvcnVuVGVzdHMnO1xuaW1wb3J0IGNyZWF0ZVZhbGlkYXRpb24gZnJvbSAnLi91dGlsL2NyZWF0ZVZhbGlkYXRpb24nO1xuaW1wb3J0IHByaW50VmFsdWUgZnJvbSAnLi91dGlsL3ByaW50VmFsdWUnO1xuaW1wb3J0IFJlZiBmcm9tICcuL1JlZmVyZW5jZSc7XG5pbXBvcnQgeyBnZXRJbiB9IGZyb20gJy4vdXRpbC9yZWFjaCc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4vVmFsaWRhdGlvbkVycm9yJztcbmltcG9ydCBSZWZlcmVuY2VTZXQgZnJvbSAnLi91dGlsL1JlZmVyZW5jZVNldCc7XG5pbXBvcnQgdG9BcnJheSBmcm9tICcuL3V0aWwvdG9BcnJheSc7IC8vIGNvbnN0IFVOU0VUID0gJ3Vuc2V0JyBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmFzZVNjaGVtYSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlcHMgPSBbXTtcbiAgICB0aGlzLnRlc3RzID0gdm9pZCAwO1xuICAgIHRoaXMudHJhbnNmb3JtcyA9IHZvaWQgMDtcbiAgICB0aGlzLmNvbmRpdGlvbnMgPSBbXTtcbiAgICB0aGlzLl9tdXRhdGUgPSB2b2lkIDA7XG4gICAgdGhpcy5fdHlwZUVycm9yID0gdm9pZCAwO1xuICAgIHRoaXMuX3doaXRlbGlzdCA9IG5ldyBSZWZlcmVuY2VTZXQoKTtcbiAgICB0aGlzLl9ibGFja2xpc3QgPSBuZXcgUmVmZXJlbmNlU2V0KCk7XG4gICAgdGhpcy5leGNsdXNpdmVUZXN0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5zcGVjID0gdm9pZCAwO1xuICAgIHRoaXMudGVzdHMgPSBbXTtcbiAgICB0aGlzLnRyYW5zZm9ybXMgPSBbXTtcbiAgICB0aGlzLndpdGhNdXRhdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnR5cGVFcnJvcihsb2NhbGUubm90VHlwZSk7XG4gICAgfSk7XG4gICAgdGhpcy50eXBlID0gKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMudHlwZSkgfHwgJ21peGVkJztcbiAgICB0aGlzLnNwZWMgPSBfZXh0ZW5kcyh7XG4gICAgICBzdHJpcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgYWJvcnRFYXJseTogdHJ1ZSxcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgIHByZXNlbmNlOiAnb3B0aW9uYWwnXG4gICAgfSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5zcGVjKTtcbiAgfSAvLyBUT0RPOiByZW1vdmVcblxuXG4gIGdldCBfdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgX3R5cGVDaGVjayhfdmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNsb25lKHNwZWMpIHtcbiAgICBpZiAodGhpcy5fbXV0YXRlKSB7XG4gICAgICBpZiAoc3BlYykgT2JqZWN0LmFzc2lnbih0aGlzLnNwZWMsIHNwZWMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSAvLyBpZiB0aGUgbmVzdGVkIHZhbHVlIGlzIGEgc2NoZW1hIHdlIGNhbiBza2lwIGNsb25pbmcsIHNpbmNlXG4gICAgLy8gdGhleSBhcmUgYWxyZWFkeSBpbW11dGFibGVcblxuXG4gICAgY29uc3QgbmV4dCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpKTsgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIHJlYWRvbmx5XG5cbiAgICBuZXh0LnR5cGUgPSB0aGlzLnR5cGU7XG4gICAgbmV4dC5fdHlwZUVycm9yID0gdGhpcy5fdHlwZUVycm9yO1xuICAgIG5leHQuX3doaXRlbGlzdEVycm9yID0gdGhpcy5fd2hpdGVsaXN0RXJyb3I7XG4gICAgbmV4dC5fYmxhY2tsaXN0RXJyb3IgPSB0aGlzLl9ibGFja2xpc3RFcnJvcjtcbiAgICBuZXh0Ll93aGl0ZWxpc3QgPSB0aGlzLl93aGl0ZWxpc3QuY2xvbmUoKTtcbiAgICBuZXh0Ll9ibGFja2xpc3QgPSB0aGlzLl9ibGFja2xpc3QuY2xvbmUoKTtcbiAgICBuZXh0LmV4Y2x1c2l2ZVRlc3RzID0gX2V4dGVuZHMoe30sIHRoaXMuZXhjbHVzaXZlVGVzdHMpOyAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgcmVhZG9ubHlcblxuICAgIG5leHQuZGVwcyA9IFsuLi50aGlzLmRlcHNdO1xuICAgIG5leHQuY29uZGl0aW9ucyA9IFsuLi50aGlzLmNvbmRpdGlvbnNdO1xuICAgIG5leHQudGVzdHMgPSBbLi4udGhpcy50ZXN0c107XG4gICAgbmV4dC50cmFuc2Zvcm1zID0gWy4uLnRoaXMudHJhbnNmb3Jtc107XG4gICAgbmV4dC5zcGVjID0gY2xvbmVEZWVwKF9leHRlbmRzKHt9LCB0aGlzLnNwZWMsIHNwZWMpKTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIGxhYmVsKGxhYmVsKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbmV4dC5zcGVjLmxhYmVsID0gbGFiZWw7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBtZXRhKC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnNwZWMubWV0YTtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LnNwZWMubWV0YSA9IE9iamVjdC5hc3NpZ24obmV4dC5zcGVjLm1ldGEgfHwge30sIGFyZ3NbMF0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9IC8vIHdpdGhDb250ZXh0PFRDb250ZXh0IGV4dGVuZHMgQW55T2JqZWN0PigpOiBCYXNlU2NoZW1hPFxuICAvLyAgIFRDYXN0LFxuICAvLyAgIFRDb250ZXh0LFxuICAvLyAgIFRPdXRwdXRcbiAgLy8gPiB7XG4gIC8vICAgcmV0dXJuIHRoaXMgYXMgYW55O1xuICAvLyB9XG5cblxuICB3aXRoTXV0YXRpb24oZm4pIHtcbiAgICBsZXQgYmVmb3JlID0gdGhpcy5fbXV0YXRlO1xuICAgIHRoaXMuX211dGF0ZSA9IHRydWU7XG4gICAgbGV0IHJlc3VsdCA9IGZuKHRoaXMpO1xuICAgIHRoaXMuX211dGF0ZSA9IGJlZm9yZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgY29uY2F0KHNjaGVtYSkge1xuICAgIGlmICghc2NoZW1hIHx8IHNjaGVtYSA9PT0gdGhpcykgcmV0dXJuIHRoaXM7XG4gICAgaWYgKHNjaGVtYS50eXBlICE9PSB0aGlzLnR5cGUgJiYgdGhpcy50eXBlICE9PSAnbWl4ZWQnKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBZb3UgY2Fubm90IFxcYGNvbmNhdCgpXFxgIHNjaGVtYSdzIG9mIGRpZmZlcmVudCB0eXBlczogJHt0aGlzLnR5cGV9IGFuZCAke3NjaGVtYS50eXBlfWApO1xuICAgIGxldCBiYXNlID0gdGhpcztcbiAgICBsZXQgY29tYmluZWQgPSBzY2hlbWEuY2xvbmUoKTtcblxuICAgIGNvbnN0IG1lcmdlZFNwZWMgPSBfZXh0ZW5kcyh7fSwgYmFzZS5zcGVjLCBjb21iaW5lZC5zcGVjKTsgLy8gaWYgKGNvbWJpbmVkLnNwZWMubnVsbGFibGUgPT09IFVOU0VUKVxuICAgIC8vICAgbWVyZ2VkU3BlYy5udWxsYWJsZSA9IGJhc2Uuc3BlYy5udWxsYWJsZTtcbiAgICAvLyBpZiAoY29tYmluZWQuc3BlYy5wcmVzZW5jZSA9PT0gVU5TRVQpXG4gICAgLy8gICBtZXJnZWRTcGVjLnByZXNlbmNlID0gYmFzZS5zcGVjLnByZXNlbmNlO1xuXG5cbiAgICBjb21iaW5lZC5zcGVjID0gbWVyZ2VkU3BlYztcbiAgICBjb21iaW5lZC5fdHlwZUVycm9yIHx8IChjb21iaW5lZC5fdHlwZUVycm9yID0gYmFzZS5fdHlwZUVycm9yKTtcbiAgICBjb21iaW5lZC5fd2hpdGVsaXN0RXJyb3IgfHwgKGNvbWJpbmVkLl93aGl0ZWxpc3RFcnJvciA9IGJhc2UuX3doaXRlbGlzdEVycm9yKTtcbiAgICBjb21iaW5lZC5fYmxhY2tsaXN0RXJyb3IgfHwgKGNvbWJpbmVkLl9ibGFja2xpc3RFcnJvciA9IGJhc2UuX2JsYWNrbGlzdEVycm9yKTsgLy8gbWFudWFsbHkgbWVyZ2UgdGhlIGJsYWNrbGlzdC93aGl0ZWxpc3QgKHRoZSBvdGhlciBgc2NoZW1hYCB0YWtlc1xuICAgIC8vIHByZWNlZGVuY2UgaW4gY2FzZSBvZiBjb25mbGljdHMpXG5cbiAgICBjb21iaW5lZC5fd2hpdGVsaXN0ID0gYmFzZS5fd2hpdGVsaXN0Lm1lcmdlKHNjaGVtYS5fd2hpdGVsaXN0LCBzY2hlbWEuX2JsYWNrbGlzdCk7XG4gICAgY29tYmluZWQuX2JsYWNrbGlzdCA9IGJhc2UuX2JsYWNrbGlzdC5tZXJnZShzY2hlbWEuX2JsYWNrbGlzdCwgc2NoZW1hLl93aGl0ZWxpc3QpOyAvLyBzdGFydCB3aXRoIHRoZSBjdXJyZW50IHRlc3RzXG5cbiAgICBjb21iaW5lZC50ZXN0cyA9IGJhc2UudGVzdHM7XG4gICAgY29tYmluZWQuZXhjbHVzaXZlVGVzdHMgPSBiYXNlLmV4Y2x1c2l2ZVRlc3RzOyAvLyBtYW51YWxseSBhZGQgdGhlIG5ldyB0ZXN0cyB0byBlbnN1cmVcbiAgICAvLyB0aGUgZGVkdXBpbmcgbG9naWMgaXMgY29uc2lzdGVudFxuXG4gICAgY29tYmluZWQud2l0aE11dGF0aW9uKG5leHQgPT4ge1xuICAgICAgc2NoZW1hLnRlc3RzLmZvckVhY2goZm4gPT4ge1xuICAgICAgICBuZXh0LnRlc3QoZm4uT1BUSU9OUyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb21iaW5lZC50cmFuc2Zvcm1zID0gWy4uLmJhc2UudHJhbnNmb3JtcywgLi4uY29tYmluZWQudHJhbnNmb3Jtc107XG4gICAgcmV0dXJuIGNvbWJpbmVkO1xuICB9XG5cbiAgaXNUeXBlKHYpIHtcbiAgICBpZiAodGhpcy5zcGVjLm51bGxhYmxlICYmIHYgPT09IG51bGwpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiB0aGlzLl90eXBlQ2hlY2sodik7XG4gIH1cblxuICByZXNvbHZlKG9wdGlvbnMpIHtcbiAgICBsZXQgc2NoZW1hID0gdGhpcztcblxuICAgIGlmIChzY2hlbWEuY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGxldCBjb25kaXRpb25zID0gc2NoZW1hLmNvbmRpdGlvbnM7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEuY2xvbmUoKTtcbiAgICAgIHNjaGVtYS5jb25kaXRpb25zID0gW107XG4gICAgICBzY2hlbWEgPSBjb25kaXRpb25zLnJlZHVjZSgoc2NoZW1hLCBjb25kaXRpb24pID0+IGNvbmRpdGlvbi5yZXNvbHZlKHNjaGVtYSwgb3B0aW9ucyksIHNjaGVtYSk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEucmVzb2x2ZShvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Kj19IG9wdGlvbnMucGFyZW50XG4gICAqIEBwYXJhbSB7Kj19IG9wdGlvbnMuY29udGV4dFxuICAgKi9cblxuXG4gIGNhc3QodmFsdWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCByZXNvbHZlZFNjaGVtYSA9IHRoaXMucmVzb2x2ZShfZXh0ZW5kcyh7XG4gICAgICB2YWx1ZVxuICAgIH0sIG9wdGlvbnMpKTtcblxuICAgIGxldCByZXN1bHQgPSByZXNvbHZlZFNjaGVtYS5fY2FzdCh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmFzc2VydCAhPT0gZmFsc2UgJiYgcmVzb2x2ZWRTY2hlbWEuaXNUeXBlKHJlc3VsdCkgIT09IHRydWUpIHtcbiAgICAgIGxldCBmb3JtYXR0ZWRWYWx1ZSA9IHByaW50VmFsdWUodmFsdWUpO1xuICAgICAgbGV0IGZvcm1hdHRlZFJlc3VsdCA9IHByaW50VmFsdWUocmVzdWx0KTtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFRoZSB2YWx1ZSBvZiAke29wdGlvbnMucGF0aCB8fCAnZmllbGQnfSBjb3VsZCBub3QgYmUgY2FzdCB0byBhIHZhbHVlIGAgKyBgdGhhdCBzYXRpc2ZpZXMgdGhlIHNjaGVtYSB0eXBlOiBcIiR7cmVzb2x2ZWRTY2hlbWEuX3R5cGV9XCIuIFxcblxcbmAgKyBgYXR0ZW1wdGVkIHZhbHVlOiAke2Zvcm1hdHRlZFZhbHVlfSBcXG5gICsgKGZvcm1hdHRlZFJlc3VsdCAhPT0gZm9ybWF0dGVkVmFsdWUgPyBgcmVzdWx0IG9mIGNhc3Q6ICR7Zm9ybWF0dGVkUmVzdWx0fWAgOiAnJykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBfY2FzdChyYXdWYWx1ZSwgX29wdGlvbnMpIHtcbiAgICBsZXQgdmFsdWUgPSByYXdWYWx1ZSA9PT0gdW5kZWZpbmVkID8gcmF3VmFsdWUgOiB0aGlzLnRyYW5zZm9ybXMucmVkdWNlKCh2YWx1ZSwgZm4pID0+IGZuLmNhbGwodGhpcywgdmFsdWUsIHJhd1ZhbHVlLCB0aGlzKSwgcmF3VmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5nZXREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgX3ZhbGlkYXRlKF92YWx1ZSwgb3B0aW9ucyA9IHt9LCBjYikge1xuICAgIGxldCB7XG4gICAgICBzeW5jLFxuICAgICAgcGF0aCxcbiAgICAgIGZyb20gPSBbXSxcbiAgICAgIG9yaWdpbmFsVmFsdWUgPSBfdmFsdWUsXG4gICAgICBzdHJpY3QgPSB0aGlzLnNwZWMuc3RyaWN0LFxuICAgICAgYWJvcnRFYXJseSA9IHRoaXMuc3BlYy5hYm9ydEVhcmx5XG4gICAgfSA9IG9wdGlvbnM7XG4gICAgbGV0IHZhbHVlID0gX3ZhbHVlO1xuXG4gICAgaWYgKCFzdHJpY3QpIHtcbiAgICAgIC8vIHRoaXMuX3ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgdmFsdWUgPSB0aGlzLl9jYXN0KHZhbHVlLCBfZXh0ZW5kcyh7XG4gICAgICAgIGFzc2VydDogZmFsc2VcbiAgICAgIH0sIG9wdGlvbnMpKTsgLy8gdGhpcy5fdmFsaWRhdGluZyA9IGZhbHNlO1xuICAgIH0gLy8gdmFsdWUgaXMgY2FzdCwgd2UgY2FuIGNoZWNrIGlmIGl0IG1lZXRzIHR5cGUgcmVxdWlyZW1lbnRzXG5cblxuICAgIGxldCBhcmdzID0ge1xuICAgICAgdmFsdWUsXG4gICAgICBwYXRoLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICBsYWJlbDogdGhpcy5zcGVjLmxhYmVsLFxuICAgICAgc3luYyxcbiAgICAgIGZyb21cbiAgICB9O1xuICAgIGxldCBpbml0aWFsVGVzdHMgPSBbXTtcbiAgICBpZiAodGhpcy5fdHlwZUVycm9yKSBpbml0aWFsVGVzdHMucHVzaCh0aGlzLl90eXBlRXJyb3IpO1xuICAgIGxldCBmaW5hbFRlc3RzID0gW107XG4gICAgaWYgKHRoaXMuX3doaXRlbGlzdEVycm9yKSBmaW5hbFRlc3RzLnB1c2godGhpcy5fd2hpdGVsaXN0RXJyb3IpO1xuICAgIGlmICh0aGlzLl9ibGFja2xpc3RFcnJvcikgZmluYWxUZXN0cy5wdXNoKHRoaXMuX2JsYWNrbGlzdEVycm9yKTtcbiAgICBydW5UZXN0cyh7XG4gICAgICBhcmdzLFxuICAgICAgdmFsdWUsXG4gICAgICBwYXRoLFxuICAgICAgc3luYyxcbiAgICAgIHRlc3RzOiBpbml0aWFsVGVzdHMsXG4gICAgICBlbmRFYXJseTogYWJvcnRFYXJseVxuICAgIH0sIGVyciA9PiB7XG4gICAgICBpZiAoZXJyKSByZXR1cm4gdm9pZCBjYihlcnIsIHZhbHVlKTtcbiAgICAgIHJ1blRlc3RzKHtcbiAgICAgICAgdGVzdHM6IHRoaXMudGVzdHMuY29uY2F0KGZpbmFsVGVzdHMpLFxuICAgICAgICBhcmdzLFxuICAgICAgICBwYXRoLFxuICAgICAgICBzeW5jLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZW5kRWFybHk6IGFib3J0RWFybHlcbiAgICAgIH0sIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlKHZhbHVlLCBvcHRpb25zLCBtYXliZUNiKSB7XG4gICAgbGV0IHNjaGVtYSA9IHRoaXMucmVzb2x2ZShfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgICAgdmFsdWVcbiAgICB9KSk7IC8vIGNhbGxiYWNrIGNhc2UgaXMgZm9yIG5lc3RlZCB2YWxpZGF0aW9uc1xuXG4gICAgcmV0dXJuIHR5cGVvZiBtYXliZUNiID09PSAnZnVuY3Rpb24nID8gc2NoZW1hLl92YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucywgbWF5YmVDYikgOiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBzY2hlbWEuX3ZhbGlkYXRlKHZhbHVlLCBvcHRpb25zLCAoZXJyLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7ZWxzZSByZXNvbHZlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICB2YWxpZGF0ZVN5bmModmFsdWUsIG9wdGlvbnMpIHtcbiAgICBsZXQgc2NoZW1hID0gdGhpcy5yZXNvbHZlKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICB2YWx1ZVxuICAgIH0pKTtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgc2NoZW1hLl92YWxpZGF0ZSh2YWx1ZSwgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgIHN5bmM6IHRydWVcbiAgICB9KSwgKGVyciwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChlcnIpIHRocm93IGVycjtcbiAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzVmFsaWQodmFsdWUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucykudGhlbigoKSA9PiB0cnVlLCBlcnIgPT4ge1xuICAgICAgaWYgKFZhbGlkYXRpb25FcnJvci5pc0Vycm9yKGVycikpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuXG4gIGlzVmFsaWRTeW5jKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVTeW5jKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKFZhbGlkYXRpb25FcnJvci5pc0Vycm9yKGVycikpIHJldHVybiBmYWxzZTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfZ2V0RGVmYXVsdCgpIHtcbiAgICBsZXQgZGVmYXVsdFZhbHVlID0gdGhpcy5zcGVjLmRlZmF1bHQ7XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09ICdmdW5jdGlvbicgPyBkZWZhdWx0VmFsdWUuY2FsbCh0aGlzKSA6IGNsb25lRGVlcChkZWZhdWx0VmFsdWUpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdChvcHRpb25zKSB7XG4gICAgbGV0IHNjaGVtYSA9IHRoaXMucmVzb2x2ZShvcHRpb25zIHx8IHt9KTtcbiAgICByZXR1cm4gc2NoZW1hLl9nZXREZWZhdWx0KCk7XG4gIH1cblxuICBkZWZhdWx0KGRlZikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGxldCBuZXh0ID0gdGhpcy5jbG9uZSh7XG4gICAgICBkZWZhdWx0OiBkZWZcbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIHN0cmljdChpc1N0cmljdCA9IHRydWUpIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBuZXh0LnNwZWMuc3RyaWN0ID0gaXNTdHJpY3Q7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBfaXNQcmVzZW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGw7XG4gIH1cblxuICBkZWZpbmVkKG1lc3NhZ2UgPSBsb2NhbGUuZGVmaW5lZCkge1xuICAgIHJldHVybiB0aGlzLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICdkZWZpbmVkJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcblxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbiAgcmVxdWlyZWQobWVzc2FnZSA9IGxvY2FsZS5yZXF1aXJlZCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHtcbiAgICAgIHByZXNlbmNlOiAncmVxdWlyZWQnXG4gICAgfSkud2l0aE11dGF0aW9uKHMgPT4gcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAncmVxdWlyZWQnLFxuICAgICAgZXhjbHVzaXZlOiB0cnVlLFxuXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5faXNQcmVzZW50KHZhbHVlKTtcbiAgICAgIH1cblxuICAgIH0pKTtcbiAgfVxuXG4gIG5vdFJlcXVpcmVkKCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5jbG9uZSh7XG4gICAgICBwcmVzZW5jZTogJ29wdGlvbmFsJ1xuICAgIH0pO1xuICAgIG5leHQudGVzdHMgPSBuZXh0LnRlc3RzLmZpbHRlcih0ZXN0ID0+IHRlc3QuT1BUSU9OUy5uYW1lICE9PSAncmVxdWlyZWQnKTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIG51bGxhYmxlKGlzTnVsbGFibGUgPSB0cnVlKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKHtcbiAgICAgIG51bGxhYmxlOiBpc051bGxhYmxlICE9PSBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgdHJhbnNmb3JtKGZuKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbmV4dC50cmFuc2Zvcm1zLnB1c2goZm4pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG4gIC8qKlxuICAgKiBBZGRzIGEgdGVzdCBmdW5jdGlvbiB0byB0aGUgc2NoZW1hJ3MgcXVldWUgb2YgdGVzdHMuXG4gICAqIHRlc3RzIGNhbiBiZSBleGNsdXNpdmUgb3Igbm9uLWV4Y2x1c2l2ZS5cbiAgICpcbiAgICogLSBleGNsdXNpdmUgdGVzdHMsIHdpbGwgcmVwbGFjZSBhbnkgZXhpc3RpbmcgdGVzdHMgb2YgdGhlIHNhbWUgbmFtZS5cbiAgICogLSBub24tZXhjbHVzaXZlOiBjYW4gYmUgc3RhY2tlZFxuICAgKlxuICAgKiBJZiBhIG5vbi1leGNsdXNpdmUgdGVzdCBpcyBhZGRlZCB0byBhIHNjaGVtYSB3aXRoIGFuIGV4Y2x1c2l2ZSB0ZXN0IG9mIHRoZSBzYW1lIG5hbWVcbiAgICogdGhlIGV4Y2x1c2l2ZSB0ZXN0IGlzIHJlbW92ZWQgYW5kIGZ1cnRoZXIgdGVzdHMgb2YgdGhlIHNhbWUgbmFtZSB3aWxsIGJlIHN0YWNrZWQuXG4gICAqXG4gICAqIElmIGFuIGV4Y2x1c2l2ZSB0ZXN0IGlzIGFkZGVkIHRvIGEgc2NoZW1hIHdpdGggbm9uLWV4Y2x1c2l2ZSB0ZXN0cyBvZiB0aGUgc2FtZSBuYW1lXG4gICAqIHRoZSBwcmV2aW91cyB0ZXN0cyBhcmUgcmVtb3ZlZCBhbmQgZnVydGhlciB0ZXN0cyBvZiB0aGUgc2FtZSBuYW1lIHdpbGwgcmVwbGFjZSBlYWNoIG90aGVyLlxuICAgKi9cblxuXG4gIHRlc3QoLi4uYXJncykge1xuICAgIGxldCBvcHRzO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3B0cyA9IHtcbiAgICAgICAgICB0ZXN0OiBhcmdzWzBdXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcHRzID0gYXJnc1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICBvcHRzID0ge1xuICAgICAgICBuYW1lOiBhcmdzWzBdLFxuICAgICAgICB0ZXN0OiBhcmdzWzFdXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzID0ge1xuICAgICAgICBuYW1lOiBhcmdzWzBdLFxuICAgICAgICBtZXNzYWdlOiBhcmdzWzFdLFxuICAgICAgICB0ZXN0OiBhcmdzWzJdXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLm1lc3NhZ2UgPT09IHVuZGVmaW5lZCkgb3B0cy5tZXNzYWdlID0gbG9jYWxlLmRlZmF1bHQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLnRlc3QgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2B0ZXN0YCBpcyBhIHJlcXVpcmVkIHBhcmFtZXRlcnMnKTtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgdmFsaWRhdGUgPSBjcmVhdGVWYWxpZGF0aW9uKG9wdHMpO1xuICAgIGxldCBpc0V4Y2x1c2l2ZSA9IG9wdHMuZXhjbHVzaXZlIHx8IG9wdHMubmFtZSAmJiBuZXh0LmV4Y2x1c2l2ZVRlc3RzW29wdHMubmFtZV0gPT09IHRydWU7XG5cbiAgICBpZiAob3B0cy5leGNsdXNpdmUpIHtcbiAgICAgIGlmICghb3B0cy5uYW1lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeGNsdXNpdmUgdGVzdHMgbXVzdCBwcm92aWRlIGEgdW5pcXVlIGBuYW1lYCBpZGVudGlmeWluZyB0aGUgdGVzdCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm5hbWUpIG5leHQuZXhjbHVzaXZlVGVzdHNbb3B0cy5uYW1lXSA9ICEhb3B0cy5leGNsdXNpdmU7XG4gICAgbmV4dC50ZXN0cyA9IG5leHQudGVzdHMuZmlsdGVyKGZuID0+IHtcbiAgICAgIGlmIChmbi5PUFRJT05TLm5hbWUgPT09IG9wdHMubmFtZSkge1xuICAgICAgICBpZiAoaXNFeGNsdXNpdmUpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGZuLk9QVElPTlMudGVzdCA9PT0gdmFsaWRhdGUuT1BUSU9OUy50ZXN0KSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIG5leHQudGVzdHMucHVzaCh2YWxpZGF0ZSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICB3aGVuKGtleXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2V5cykgJiYgdHlwZW9mIGtleXMgIT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRpb25zID0ga2V5cztcbiAgICAgIGtleXMgPSAnLic7XG4gICAgfVxuXG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbGV0IGRlcHMgPSB0b0FycmF5KGtleXMpLm1hcChrZXkgPT4gbmV3IFJlZihrZXkpKTtcbiAgICBkZXBzLmZvckVhY2goZGVwID0+IHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmIChkZXAuaXNTaWJsaW5nKSBuZXh0LmRlcHMucHVzaChkZXAua2V5KTtcbiAgICB9KTtcbiAgICBuZXh0LmNvbmRpdGlvbnMucHVzaChuZXcgQ29uZGl0aW9uKGRlcHMsIG9wdGlvbnMpKTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIHR5cGVFcnJvcihtZXNzYWdlKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbmV4dC5fdHlwZUVycm9yID0gY3JlYXRlVmFsaWRhdGlvbih7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ3R5cGVFcnJvcicsXG5cbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIXRoaXMuc2NoZW1hLmlzVHlwZSh2YWx1ZSkpIHJldHVybiB0aGlzLmNyZWF0ZUVycm9yKHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuc2NoZW1hLl90eXBlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIG9uZU9mKGVudW1zLCBtZXNzYWdlID0gbG9jYWxlLm9uZU9mKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgZW51bXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgbmV4dC5fd2hpdGVsaXN0LmFkZCh2YWwpO1xuXG4gICAgICBuZXh0Ll9ibGFja2xpc3QuZGVsZXRlKHZhbCk7XG4gICAgfSk7XG4gICAgbmV4dC5fd2hpdGVsaXN0RXJyb3IgPSBjcmVhdGVWYWxpZGF0aW9uKHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnb25lT2YnLFxuXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IHZhbGlkcyA9IHRoaXMuc2NoZW1hLl93aGl0ZWxpc3Q7XG4gICAgICAgIGxldCByZXNvbHZlZCA9IHZhbGlkcy5yZXNvbHZlQWxsKHRoaXMucmVzb2x2ZSk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZC5pbmNsdWRlcyh2YWx1ZSkgPyB0cnVlIDogdGhpcy5jcmVhdGVFcnJvcih7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IHZhbGlkcy50b0FycmF5KCkuam9pbignLCAnKSxcbiAgICAgICAgICAgIHJlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgbm90T25lT2YoZW51bXMsIG1lc3NhZ2UgPSBsb2NhbGUubm90T25lT2YpIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBlbnVtcy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICBuZXh0Ll9ibGFja2xpc3QuYWRkKHZhbCk7XG5cbiAgICAgIG5leHQuX3doaXRlbGlzdC5kZWxldGUodmFsKTtcbiAgICB9KTtcbiAgICBuZXh0Ll9ibGFja2xpc3RFcnJvciA9IGNyZWF0ZVZhbGlkYXRpb24oe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICdub3RPbmVPZicsXG5cbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgbGV0IGludmFsaWRzID0gdGhpcy5zY2hlbWEuX2JsYWNrbGlzdDtcbiAgICAgICAgbGV0IHJlc29sdmVkID0gaW52YWxpZHMucmVzb2x2ZUFsbCh0aGlzLnJlc29sdmUpO1xuICAgICAgICBpZiAocmVzb2x2ZWQuaW5jbHVkZXModmFsdWUpKSByZXR1cm4gdGhpcy5jcmVhdGVFcnJvcih7XG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICB2YWx1ZXM6IGludmFsaWRzLnRvQXJyYXkoKS5qb2luKCcsICcpLFxuICAgICAgICAgICAgcmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgc3RyaXAoc3RyaXAgPSB0cnVlKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgbmV4dC5zcGVjLnN0cmlwID0gc3RyaXA7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBkZXNjcmliZSgpIHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5jbG9uZSgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGxhYmVsLFxuICAgICAgbWV0YVxuICAgIH0gPSBuZXh0LnNwZWM7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB7XG4gICAgICBtZXRhLFxuICAgICAgbGFiZWwsXG4gICAgICB0eXBlOiBuZXh0LnR5cGUsXG4gICAgICBvbmVPZjogbmV4dC5fd2hpdGVsaXN0LmRlc2NyaWJlKCksXG4gICAgICBub3RPbmVPZjogbmV4dC5fYmxhY2tsaXN0LmRlc2NyaWJlKCksXG4gICAgICB0ZXN0czogbmV4dC50ZXN0cy5tYXAoZm4gPT4gKHtcbiAgICAgICAgbmFtZTogZm4uT1BUSU9OUy5uYW1lLFxuICAgICAgICBwYXJhbXM6IGZuLk9QVElPTlMucGFyYW1zXG4gICAgICB9KSkuZmlsdGVyKChuLCBpZHgsIGxpc3QpID0+IGxpc3QuZmluZEluZGV4KGMgPT4gYy5uYW1lID09PSBuLm5hbWUpID09PSBpZHgpXG4gICAgfTtcbiAgICByZXR1cm4gZGVzY3JpcHRpb247XG4gIH1cblxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cbi8vIEB0cy1leHBlY3QtZXJyb3JcbkJhc2VTY2hlbWEucHJvdG90eXBlLl9faXNZdXBTY2hlbWFfXyA9IHRydWU7XG5cbmZvciAoY29uc3QgbWV0aG9kIG9mIFsndmFsaWRhdGUnLCAndmFsaWRhdGVTeW5jJ10pIEJhc2VTY2hlbWEucHJvdG90eXBlW2Ake21ldGhvZH1BdGBdID0gZnVuY3Rpb24gKHBhdGgsIHZhbHVlLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHBhcmVudCxcbiAgICBwYXJlbnRQYXRoLFxuICAgIHNjaGVtYVxuICB9ID0gZ2V0SW4odGhpcywgcGF0aCwgdmFsdWUsIG9wdGlvbnMuY29udGV4dCk7XG4gIHJldHVybiBzY2hlbWFbbWV0aG9kXShwYXJlbnQgJiYgcGFyZW50W3BhcmVudFBhdGhdLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywge1xuICAgIHBhcmVudCxcbiAgICBwYXRoXG4gIH0pKTtcbn07XG5cbmZvciAoY29uc3QgYWxpYXMgb2YgWydlcXVhbHMnLCAnaXMnXSkgQmFzZVNjaGVtYS5wcm90b3R5cGVbYWxpYXNdID0gQmFzZVNjaGVtYS5wcm90b3R5cGUub25lT2Y7XG5cbmZvciAoY29uc3QgYWxpYXMgb2YgWydub3QnLCAnbm9wZSddKSBCYXNlU2NoZW1hLnByb3RvdHlwZVthbGlhc10gPSBCYXNlU2NoZW1hLnByb3RvdHlwZS5ub3RPbmVPZjtcblxuQmFzZVNjaGVtYS5wcm90b3R5cGUub3B0aW9uYWwgPSBCYXNlU2NoZW1hLnByb3RvdHlwZS5ub3RSZXF1aXJlZDsiLCJpbXBvcnQgQmFzZVNjaGVtYSBmcm9tICcuL3NjaGVtYSc7XG5jb25zdCBNaXhlZCA9IEJhc2VTY2hlbWE7XG5leHBvcnQgZGVmYXVsdCBNaXhlZDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHJldHVybiBuZXcgTWl4ZWQoKTtcbn0gLy8gWFhYOiB0aGlzIGlzIHVzaW5nIHRoZSBCYXNlIHNjaGVtYSBzbyB0aGF0IGBhZGRNZXRob2QobWl4ZWQpYCB3b3JrcyBhcyBhIGJhc2UgY2xhc3NcblxuY3JlYXRlLnByb3RvdHlwZSA9IE1peGVkLnByb3RvdHlwZTsiLCJjb25zdCBpc0Fic2VudCA9IHZhbHVlID0+IHZhbHVlID09IG51bGw7XG5cbmV4cG9ydCBkZWZhdWx0IGlzQWJzZW50OyIsImltcG9ydCBCYXNlU2NoZW1hIGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IGJvb2xlYW4gYXMgbG9jYWxlIH0gZnJvbSAnLi9sb2NhbGUnO1xuaW1wb3J0IGlzQWJzZW50IGZyb20gJy4vdXRpbC9pc0Fic2VudCc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICByZXR1cm4gbmV3IEJvb2xlYW5TY2hlbWEoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2xlYW5TY2hlbWEgZXh0ZW5kcyBCYXNlU2NoZW1hIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgfSk7XG4gICAgdGhpcy53aXRoTXV0YXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy50cmFuc2Zvcm0oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1R5cGUodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKC9eKHRydWV8MSkkL2kudGVzdChTdHJpbmcodmFsdWUpKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgaWYgKC9eKGZhbHNlfDApJC9pLnRlc3QoU3RyaW5nKHZhbHVlKSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3R5cGVDaGVjayh2KSB7XG4gICAgaWYgKHYgaW5zdGFuY2VvZiBCb29sZWFuKSB2ID0gdi52YWx1ZU9mKCk7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG4gIH1cblxuICBpc1RydWUobWVzc2FnZSA9IGxvY2FsZS5pc1ZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ2lzLXZhbHVlJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB2YWx1ZTogJ3RydWUnXG4gICAgICB9LFxuXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUgPT09IHRydWU7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIGlzRmFsc2UobWVzc2FnZSA9IGxvY2FsZS5pc1ZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ2lzLXZhbHVlJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB2YWx1ZTogJ2ZhbHNlJ1xuICAgICAgfSxcblxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNBYnNlbnQodmFsdWUpIHx8IHZhbHVlID09PSBmYWxzZTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cbmNyZWF0ZS5wcm90b3R5cGUgPSBCb29sZWFuU2NoZW1hLnByb3RvdHlwZTsiLCJpbXBvcnQgeyBzdHJpbmcgYXMgbG9jYWxlIH0gZnJvbSAnLi9sb2NhbGUnO1xuaW1wb3J0IGlzQWJzZW50IGZyb20gJy4vdXRpbC9pc0Fic2VudCc7XG5pbXBvcnQgQmFzZVNjaGVtYSBmcm9tICcuL3NjaGVtYSc7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG5sZXQgckVtYWlsID0gL14oKChbYS16XXxcXGR8WyEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkrKFxcLihbYS16XXxcXGR8WyEjXFwkJSYnXFwqXFwrXFwtXFwvPVxcP1xcXl9ge1xcfH1+XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkrKSopfCgoXFx4MjIpKCgoKFxceDIwfFxceDA5KSooXFx4MGRcXHgwYSkpPyhcXHgyMHxcXHgwOSkrKT8oKFtcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDdmXXxcXHgyMXxbXFx4MjMtXFx4NWJdfFtcXHg1ZC1cXHg3ZV18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfChcXFxcKFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZC1cXHg3Zl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSkpKigoKFxceDIwfFxceDA5KSooXFx4MGRcXHgwYSkpPyhcXHgyMHxcXHgwOSkrKT8oXFx4MjIpKSlAKCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpJC9pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxubGV0IHJVcmwgPSAvXigoaHR0cHM/fGZ0cCk6KT9cXC9cXC8oKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OikqQCk/KCgoXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pKXwoKChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuKSsoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKShbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSooW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4/KSg6XFxkKik/KShcXC8oKChbYS16XXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKyhcXC8oKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCkqKSopPyk/KFxcPygoKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8W1xcdUUwMDAtXFx1RjhGRl18XFwvfFxcPykqKT8oXFwjKCgoW2Etel18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKXxcXC98XFw/KSopPyQvaTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbmxldCByVVVJRCA9IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcblxubGV0IGlzVHJpbW1lZCA9IHZhbHVlID0+IGlzQWJzZW50KHZhbHVlKSB8fCB2YWx1ZSA9PT0gdmFsdWUudHJpbSgpO1xuXG5sZXQgb2JqU3RyaW5nVGFnID0ge30udG9TdHJpbmcoKTtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHJldHVybiBuZXcgU3RyaW5nU2NoZW1hKCk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdTY2hlbWEgZXh0ZW5kcyBCYXNlU2NoZW1hIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ3N0cmluZydcbiAgICB9KTtcbiAgICB0aGlzLndpdGhNdXRhdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zZm9ybShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUeXBlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnRvU3RyaW5nID8gdmFsdWUudG9TdHJpbmcoKSA6IHZhbHVlO1xuICAgICAgICBpZiAoc3RyVmFsdWUgPT09IG9ialN0cmluZ1RhZykgcmV0dXJuIHZhbHVlO1xuICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF90eXBlQ2hlY2sodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHZhbHVlID0gdmFsdWUudmFsdWVPZigpO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgX2lzUHJlc2VudCh2YWx1ZSkge1xuICAgIHJldHVybiBzdXBlci5faXNQcmVzZW50KHZhbHVlKSAmJiAhIXZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIGxlbmd0aChsZW5ndGgsIG1lc3NhZ2UgPSBsb2NhbGUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ2xlbmd0aCcsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbGVuZ3RoXG4gICAgICB9LFxuXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09PSB0aGlzLnJlc29sdmUobGVuZ3RoKTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbiAgbWluKG1pbiwgbWVzc2FnZSA9IGxvY2FsZS5taW4pIHtcbiAgICByZXR1cm4gdGhpcy50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnbWluJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBtaW5cbiAgICAgIH0sXG5cbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlzQWJzZW50KHZhbHVlKSB8fCB2YWx1ZS5sZW5ndGggPj0gdGhpcy5yZXNvbHZlKG1pbik7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIG1heChtYXgsIG1lc3NhZ2UgPSBsb2NhbGUubWF4KSB7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBuYW1lOiAnbWF4JyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbWF4XG4gICAgICB9LFxuXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoIDw9IHRoaXMucmVzb2x2ZShtYXgpO1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxuICBtYXRjaGVzKHJlZ2V4LCBvcHRpb25zKSB7XG4gICAgbGV0IGV4Y2x1ZGVFbXB0eVN0cmluZyA9IGZhbHNlO1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGxldCBuYW1lO1xuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgKHtcbiAgICAgICAgICBleGNsdWRlRW1wdHlTdHJpbmcgPSBmYWxzZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfSA9IG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVzc2FnZSA9IG9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBuYW1lOiBuYW1lIHx8ICdtYXRjaGVzJyxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgbG9jYWxlLm1hdGNoZXMsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgcmVnZXhcbiAgICAgIH0sXG4gICAgICB0ZXN0OiB2YWx1ZSA9PiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnICYmIGV4Y2x1ZGVFbXB0eVN0cmluZyB8fCB2YWx1ZS5zZWFyY2gocmVnZXgpICE9PSAtMVxuICAgIH0pO1xuICB9XG5cbiAgZW1haWwobWVzc2FnZSA9IGxvY2FsZS5lbWFpbCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMockVtYWlsLCB7XG4gICAgICBuYW1lOiAnZW1haWwnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGV4Y2x1ZGVFbXB0eVN0cmluZzogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgdXJsKG1lc3NhZ2UgPSBsb2NhbGUudXJsKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhyVXJsLCB7XG4gICAgICBuYW1lOiAndXJsJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBleGNsdWRlRW1wdHlTdHJpbmc6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHV1aWQobWVzc2FnZSA9IGxvY2FsZS51dWlkKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhyVVVJRCwge1xuICAgICAgbmFtZTogJ3V1aWQnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGV4Y2x1ZGVFbXB0eVN0cmluZzogZmFsc2VcbiAgICB9KTtcbiAgfSAvLy0tIHRyYW5zZm9ybXMgLS1cblxuXG4gIGVuc3VyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0KCcnKS50cmFuc2Zvcm0odmFsID0+IHZhbCA9PT0gbnVsbCA/ICcnIDogdmFsKTtcbiAgfVxuXG4gIHRyaW0obWVzc2FnZSA9IGxvY2FsZS50cmltKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKHZhbCA9PiB2YWwgIT0gbnVsbCA/IHZhbC50cmltKCkgOiB2YWwpLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICd0cmltJyxcbiAgICAgIHRlc3Q6IGlzVHJpbW1lZFxuICAgIH0pO1xuICB9XG5cbiAgbG93ZXJjYXNlKG1lc3NhZ2UgPSBsb2NhbGUubG93ZXJjYXNlKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKHZhbHVlID0+ICFpc0Fic2VudCh2YWx1ZSkgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWUpLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICdzdHJpbmdfY2FzZScsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICB0ZXN0OiB2YWx1ZSA9PiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUgPT09IHZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICB9KTtcbiAgfVxuXG4gIHVwcGVyY2FzZShtZXNzYWdlID0gbG9jYWxlLnVwcGVyY2FzZSkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybSh2YWx1ZSA9PiAhaXNBYnNlbnQodmFsdWUpID8gdmFsdWUudG9VcHBlckNhc2UoKSA6IHZhbHVlKS50ZXN0KHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBuYW1lOiAnc3RyaW5nX2Nhc2UnLFxuICAgICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgICAgdGVzdDogdmFsdWUgPT4gaXNBYnNlbnQodmFsdWUpIHx8IHZhbHVlID09PSB2YWx1ZS50b1VwcGVyQ2FzZSgpXG4gICAgfSk7XG4gIH1cblxufVxuY3JlYXRlLnByb3RvdHlwZSA9IFN0cmluZ1NjaGVtYS5wcm90b3R5cGU7IC8vXG4vLyBTdHJpbmcgSW50ZXJmYWNlc1xuLy8iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4vKipcbiAqXG4gKiBEYXRlLnBhcnNlIHdpdGggcHJvZ3Jlc3NpdmUgZW5oYW5jZW1lbnQgZm9yIElTTyA4NjAxIDxodHRwczovL2dpdGh1Yi5jb20vY3Nub3Zlci9qcy1pc284NjAxPlxuICogTk9OLUNPTkZPUk1BTlQgRURJVElPTi5cbiAqIMKpIDIwMTEgQ29saW4gU25vdmVyIDxodHRwOi8vemV0YWZsZWV0LmNvbT5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICovXG4vLyAgICAgICAgICAgICAgMSBZWVlZICAgICAgICAgICAgICAgICAyIE1NICAgICAgICAzIEREICAgICAgICAgICAgICA0IEhIICAgICA1IG1tICAgICAgICA2IHNzICAgICAgICAgICAgNyBtc2VjICAgICAgICAgOCBaIDkgwrEgICAgMTAgdHpISCAgICAxMSB0em1tXG52YXIgaXNvUmVnID0gL14oXFxkezR9fFsrXFwtXVxcZHs2fSkoPzotPyhcXGR7Mn0pKD86LT8oXFxkezJ9KSk/KT8oPzpbIFRdPyhcXGR7Mn0pOj8oXFxkezJ9KSg/Ojo/KFxcZHsyfSkoPzpbLFxcLl0oXFxkezEsfSkpPyk/KD86KFopfChbK1xcLV0pKFxcZHsyfSkoPzo6PyhcXGR7Mn0pKT8pPyk/JC87XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZUlzb0RhdGUoZGF0ZSkge1xuICB2YXIgbnVtZXJpY0tleXMgPSBbMSwgNCwgNSwgNiwgNywgMTAsIDExXSxcbiAgICAgIG1pbnV0ZXNPZmZzZXQgPSAwLFxuICAgICAgdGltZXN0YW1wLFxuICAgICAgc3RydWN0O1xuXG4gIGlmIChzdHJ1Y3QgPSBpc29SZWcuZXhlYyhkYXRlKSkge1xuICAgIC8vIGF2b2lkIE5hTiB0aW1lc3RhbXBzIGNhdXNlZCBieSDigJx1bmRlZmluZWTigJ0gdmFsdWVzIGJlaW5nIHBhc3NlZCB0byBEYXRlLlVUQ1xuICAgIGZvciAodmFyIGkgPSAwLCBrOyBrID0gbnVtZXJpY0tleXNbaV07ICsraSkgc3RydWN0W2tdID0gK3N0cnVjdFtrXSB8fCAwOyAvLyBhbGxvdyB1bmRlZmluZWQgZGF5cyBhbmQgbW9udGhzXG5cblxuICAgIHN0cnVjdFsyXSA9ICgrc3RydWN0WzJdIHx8IDEpIC0gMTtcbiAgICBzdHJ1Y3RbM10gPSArc3RydWN0WzNdIHx8IDE7IC8vIGFsbG93IGFyYml0cmFyeSBzdWItc2Vjb25kIHByZWNpc2lvbiBiZXlvbmQgbWlsbGlzZWNvbmRzXG5cbiAgICBzdHJ1Y3RbN10gPSBzdHJ1Y3RbN10gPyBTdHJpbmcoc3RydWN0WzddKS5zdWJzdHIoMCwgMykgOiAwOyAvLyB0aW1lc3RhbXBzIHdpdGhvdXQgdGltZXpvbmUgaWRlbnRpZmllcnMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgbG9jYWwgdGltZVxuXG4gICAgaWYgKChzdHJ1Y3RbOF0gPT09IHVuZGVmaW5lZCB8fCBzdHJ1Y3RbOF0gPT09ICcnKSAmJiAoc3RydWN0WzldID09PSB1bmRlZmluZWQgfHwgc3RydWN0WzldID09PSAnJykpIHRpbWVzdGFtcCA9ICtuZXcgRGF0ZShzdHJ1Y3RbMV0sIHN0cnVjdFsyXSwgc3RydWN0WzNdLCBzdHJ1Y3RbNF0sIHN0cnVjdFs1XSwgc3RydWN0WzZdLCBzdHJ1Y3RbN10pO2Vsc2Uge1xuICAgICAgaWYgKHN0cnVjdFs4XSAhPT0gJ1onICYmIHN0cnVjdFs5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1pbnV0ZXNPZmZzZXQgPSBzdHJ1Y3RbMTBdICogNjAgKyBzdHJ1Y3RbMTFdO1xuICAgICAgICBpZiAoc3RydWN0WzldID09PSAnKycpIG1pbnV0ZXNPZmZzZXQgPSAwIC0gbWludXRlc09mZnNldDtcbiAgICAgIH1cblxuICAgICAgdGltZXN0YW1wID0gRGF0ZS5VVEMoc3RydWN0WzFdLCBzdHJ1Y3RbMl0sIHN0cnVjdFszXSwgc3RydWN0WzRdLCBzdHJ1Y3RbNV0gKyBtaW51dGVzT2Zmc2V0LCBzdHJ1Y3RbNl0sIHN0cnVjdFs3XSk7XG4gICAgfVxuICB9IGVsc2UgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSA/IERhdGUucGFyc2UoZGF0ZSkgOiBOYU47XG5cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn0iLCIvLyBAdHMtaWdub3JlXG5pbXBvcnQgaXNvUGFyc2UgZnJvbSAnLi91dGlsL2lzb2RhdGUnO1xuaW1wb3J0IHsgZGF0ZSBhcyBsb2NhbGUgfSBmcm9tICcuL2xvY2FsZSc7XG5pbXBvcnQgaXNBYnNlbnQgZnJvbSAnLi91dGlsL2lzQWJzZW50JztcbmltcG9ydCBSZWYgZnJvbSAnLi9SZWZlcmVuY2UnO1xuaW1wb3J0IEJhc2VTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xubGV0IGludmFsaWREYXRlID0gbmV3IERhdGUoJycpO1xuXG5sZXQgaXNEYXRlID0gb2JqID0+IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBEYXRlXSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHJldHVybiBuZXcgRGF0ZVNjaGVtYSgpO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0ZVNjaGVtYSBleHRlbmRzIEJhc2VTY2hlbWEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7XG4gICAgICB0eXBlOiAnZGF0ZSdcbiAgICB9KTtcbiAgICB0aGlzLndpdGhNdXRhdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zZm9ybShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUeXBlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IGlzb1BhcnNlKHZhbHVlKTsgLy8gMCBpcyBhIHZhbGlkIHRpbWVzdGFtcCBlcXVpdmFsZW50IHRvIDE5NzAtMDEtMDFUMDA6MDA6MDBaKHVuaXggZXBvY2gpIG9yIGJlZm9yZS5cblxuICAgICAgICByZXR1cm4gIWlzTmFOKHZhbHVlKSA/IG5ldyBEYXRlKHZhbHVlKSA6IGludmFsaWREYXRlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBfdHlwZUNoZWNrKHYpIHtcbiAgICByZXR1cm4gaXNEYXRlKHYpICYmICFpc05hTih2LmdldFRpbWUoKSk7XG4gIH1cblxuICBwcmVwYXJlUGFyYW0ocmVmLCBuYW1lKSB7XG4gICAgbGV0IHBhcmFtO1xuXG4gICAgaWYgKCFSZWYuaXNSZWYocmVmKSkge1xuICAgICAgbGV0IGNhc3QgPSB0aGlzLmNhc3QocmVmKTtcbiAgICAgIGlmICghdGhpcy5fdHlwZUNoZWNrKGNhc3QpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGBcXGAke25hbWV9XFxgIG11c3QgYmUgYSBEYXRlIG9yIGEgdmFsdWUgdGhhdCBjYW4gYmUgXFxgY2FzdCgpXFxgIHRvIGEgRGF0ZWApO1xuICAgICAgcGFyYW0gPSBjYXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbSA9IHJlZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW07XG4gIH1cblxuICBtaW4obWluLCBtZXNzYWdlID0gbG9jYWxlLm1pbikge1xuICAgIGxldCBsaW1pdCA9IHRoaXMucHJlcGFyZVBhcmFtKG1pbiwgJ21pbicpO1xuICAgIHJldHVybiB0aGlzLnRlc3Qoe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIG5hbWU6ICdtaW4nLFxuICAgICAgZXhjbHVzaXZlOiB0cnVlLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIG1pblxuICAgICAgfSxcblxuICAgICAgdGVzdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaXNBYnNlbnQodmFsdWUpIHx8IHZhbHVlID49IHRoaXMucmVzb2x2ZShsaW1pdCk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIG1heChtYXgsIG1lc3NhZ2UgPSBsb2NhbGUubWF4KSB7XG4gICAgbGV0IGxpbWl0ID0gdGhpcy5wcmVwYXJlUGFyYW0obWF4LCAnbWF4Jyk7XG4gICAgcmV0dXJuIHRoaXMudGVzdCh7XG4gICAgICBtZXNzYWdlLFxuICAgICAgbmFtZTogJ21heCcsXG4gICAgICBleGNsdXNpdmU6IHRydWUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgbWF4XG4gICAgICB9LFxuXG4gICAgICB0ZXN0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpc0Fic2VudCh2YWx1ZSkgfHwgdmFsdWUgPD0gdGhpcy5yZXNvbHZlKGxpbWl0KTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cbkRhdGVTY2hlbWEuSU5WQUxJRF9EQVRFID0gaW52YWxpZERhdGU7XG5jcmVhdGUucHJvdG90eXBlID0gRGF0ZVNjaGVtYS5wcm90b3R5cGU7XG5jcmVhdGUuSU5WQUxJRF9EQVRFID0gaW52YWxpZERhdGU7IiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbKytpbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UmVkdWNlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eU9mO1xuIiwidmFyIGJhc2VQcm9wZXJ0eU9mID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5T2YnKTtcblxuLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xudmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICdcXHhjNyc6ICdDJywgICdcXHhlNyc6ICdjJyxcbiAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAnXFx4ZTgnOiAnZScsICAnXFx4ZTknOiAnZScsICdcXHhlYSc6ICdlJywgJ1xceGViJzogJ2UnLFxuICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAnXFx4ZDEnOiAnTicsICAnXFx4ZjEnOiAnbicsXG4gICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgJ1xceGQ5JzogJ1UnLCAgJ1xceGRhJzogJ1UnLCAnXFx4ZGInOiAnVScsICdcXHhkYyc6ICdVJyxcbiAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICdcXHhjNic6ICdBZScsICdcXHhlNic6ICdhZScsXG4gICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICdcXHhkZic6ICdzcycsXG4gIC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG4gICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgJ1xcdTAxMDYnOiAnQycsICAnXFx1MDEwOCc6ICdDJywgJ1xcdTAxMGEnOiAnQycsICdcXHUwMTBjJzogJ0MnLFxuICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgJ1xcdTAxMTInOiAnRScsICAnXFx1MDExNCc6ICdFJywgJ1xcdTAxMTYnOiAnRScsICdcXHUwMTE4JzogJ0UnLCAnXFx1MDExYSc6ICdFJyxcbiAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAnXFx1MDExZCc6ICdnJywgICdcXHUwMTFmJzogJ2cnLCAnXFx1MDEyMSc6ICdnJywgJ1xcdTAxMjMnOiAnZycsXG4gICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgJ1xcdTAxMjknOiAnaScsICAnXFx1MDEyYic6ICdpJywgJ1xcdTAxMmQnOiAnaScsICdcXHUwMTJmJzogJ2knLCAnXFx1MDEzMSc6ICdpJyxcbiAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICdcXHUwMTM5JzogJ0wnLCAgJ1xcdTAxM2InOiAnTCcsICdcXHUwMTNkJzogJ0wnLCAnXFx1MDEzZic6ICdMJywgJ1xcdTAxNDEnOiAnTCcsXG4gICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgJ1xcdTAxNDQnOiAnbicsICAnXFx1MDE0Nic6ICduJywgJ1xcdTAxNDgnOiAnbicsICdcXHUwMTRiJzogJ24nLFxuICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICdcXHUwMTU0JzogJ1InLCAgJ1xcdTAxNTYnOiAnUicsICdcXHUwMTU4JzogJ1InLFxuICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAnXFx1MDE1Yic6ICdzJywgICdcXHUwMTVkJzogJ3MnLCAnXFx1MDE1Zic6ICdzJywgJ1xcdTAxNjEnOiAncycsXG4gICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgJ1xcdTAxNjgnOiAnVScsICAnXFx1MDE2YSc6ICdVJywgJ1xcdTAxNmMnOiAnVScsICdcXHUwMTZlJzogJ1UnLCAnXFx1MDE3MCc6ICdVJywgJ1xcdTAxNzInOiAnVScsXG4gICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAnXFx1MDE3Nic6ICdZJywgICdcXHUwMTc3JzogJ3knLCAnXFx1MDE3OCc6ICdZJyxcbiAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAnXFx1MDEzMic6ICdJSicsICdcXHUwMTMzJzogJ2lqJyxcbiAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUFcbiAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgbGV0dGVyLlxuICovXG52YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1cnJMZXR0ZXI7XG4iLCJ2YXIgZGVidXJyTGV0dGVyID0gcmVxdWlyZSgnLi9fZGVidXJyTGV0dGVyJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIExhdGluIFVuaWNvZGUgbGV0dGVycyAoZXhjbHVkaW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRvcnMpLiAqL1xudmFyIHJlTGF0aW4gPSAvW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXSc7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3MpIGFuZFxuICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcyBmb3Igc3ltYm9sc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzX2Zvcl9TeW1ib2xzKS5cbiAqL1xudmFyIHJlQ29tYm9NYXJrID0gUmVnRXhwKHJzQ29tYm8sICdnJyk7XG5cbi8qKlxuICogRGVidXJycyBgc3RyaW5nYCBieSBjb252ZXJ0aW5nXG4gKiBbTGF0aW4tMSBTdXBwbGVtZW50XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbi0xX1N1cHBsZW1lbnRfKFVuaWNvZGVfYmxvY2spI0NoYXJhY3Rlcl90YWJsZSlcbiAqIGFuZCBbTGF0aW4gRXh0ZW5kZWQtQV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fRXh0ZW5kZWQtQSlcbiAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycyBhbmQgcmVtb3ZpbmdcbiAqIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZGVidXJyLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmRlYnVycignZMOpasOgIHZ1Jyk7XG4gKiAvLyA9PiAnZGVqYSB2dSdcbiAqL1xuZnVuY3Rpb24gZGVidXJyKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4sIGRlYnVyckxldHRlcikucmVwbGFjZShyZUNvbWJvTWFyaywgJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRlYnVycjtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdvcmRzIGNvbXBvc2VkIG9mIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAqL1xudmFyIHJlQXNjaWlXb3JkID0gL1teXFx4MDAtXFx4MmZcXHgzYS1cXHg0MFxceDViLVxceDYwXFx4N2ItXFx4N2ZdKy9nO1xuXG4vKipcbiAqIFNwbGl0cyBhbiBBU0NJSSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKi9cbmZ1bmN0aW9uIGFzY2lpV29yZHMoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVBc2NpaVdvcmQpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzY2lpV29yZHM7XG4iLCIvKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB0aGF0IG5lZWQgYSBtb3JlIHJvYnVzdCByZWdleHAgdG8gbWF0Y2ggd29yZHMuICovXG52YXIgcmVIYXNVbmljb2RlV29yZCA9IC9bYS16XVtBLVpdfFtBLVpdezJ9W2Etel18WzAtOV1bYS16QS1aXXxbYS16QS1aXVswLTldfFteYS16QS1aMC05IF0vO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBhIHdvcmQgY29tcG9zZWQgb2YgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNVbmljb2RlV29yZDtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc0RpbmdiYXRSYW5nZSA9ICdcXFxcdTI3MDAtXFxcXHUyN2JmJyxcbiAgICByc0xvd2VyUmFuZ2UgPSAnYS16XFxcXHhkZi1cXFxceGY2XFxcXHhmOC1cXFxceGZmJyxcbiAgICByc01hdGhPcFJhbmdlID0gJ1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjcnLFxuICAgIHJzTm9uQ2hhclJhbmdlID0gJ1xcXFx4MDAtXFxcXHgyZlxcXFx4M2EtXFxcXHg0MFxcXFx4NWItXFxcXHg2MFxcXFx4N2ItXFxcXHhiZicsXG4gICAgcnNQdW5jdHVhdGlvblJhbmdlID0gJ1xcXFx1MjAwMC1cXFxcdTIwNmYnLFxuICAgIHJzU3BhY2VSYW5nZSA9ICcgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMCcsXG4gICAgcnNVcHBlclJhbmdlID0gJ0EtWlxcXFx4YzAtXFxcXHhkNlxcXFx4ZDgtXFxcXHhkZScsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnLFxuICAgIHJzQnJlYWtSYW5nZSA9IHJzTWF0aE9wUmFuZ2UgKyByc05vbkNoYXJSYW5nZSArIHJzUHVuY3R1YXRpb25SYW5nZSArIHJzU3BhY2VSYW5nZTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzQXBvcyA9IFwiWydcXHUyMDE5XVwiLFxuICAgIHJzQnJlYWsgPSAnWycgKyByc0JyZWFrUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0RpZ2l0cyA9ICdcXFxcZCsnLFxuICAgIHJzRGluZ2JhdCA9ICdbJyArIHJzRGluZ2JhdFJhbmdlICsgJ10nLFxuICAgIHJzTG93ZXIgPSAnWycgKyByc0xvd2VyUmFuZ2UgKyAnXScsXG4gICAgcnNNaXNjID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyByc0JyZWFrUmFuZ2UgKyByc0RpZ2l0cyArIHJzRGluZ2JhdFJhbmdlICsgcnNMb3dlclJhbmdlICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICByc1VwcGVyID0gJ1snICsgcnNVcHBlclJhbmdlICsgJ10nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJzTWlzY0xvd2VyID0gJyg/OicgKyByc0xvd2VyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgIHJzTWlzY1VwcGVyID0gJyg/OicgKyByc1VwcGVyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgIHJzT3B0Q29udHJMb3dlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OmR8bGx8bXxyZXxzfHR8dmUpKT8nLFxuICAgIHJzT3B0Q29udHJVcHBlciA9ICcoPzonICsgcnNBcG9zICsgJyg/OkR8TEx8TXxSRXxTfFR8VkUpKT8nLFxuICAgIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNPcmRMb3dlciA9ICdcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSknLFxuICAgIHJzT3JkVXBwZXIgPSAnXFxcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxcXGRUSCkoPz1cXFxcYnxbYS16X10pJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNFbW9qaSA9ICcoPzonICsgW3JzRGluZ2JhdCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNTZXE7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGNvbXBsZXggb3IgY29tcG91bmQgd29yZHMuICovXG52YXIgcmVVbmljb2RlV29yZCA9IFJlZ0V4cChbXG4gIHJzVXBwZXIgKyAnPycgKyByc0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gIHJzTWlzY1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyICsgJyg/PScgKyBbcnNCcmVhaywgcnNVcHBlciArIHJzTWlzY0xvd2VyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgcnNVcHBlciArICc/JyArIHJzTWlzY0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyLFxuICByc1VwcGVyICsgJysnICsgcnNPcHRDb250clVwcGVyLFxuICByc09yZFVwcGVyLFxuICByc09yZExvd2VyLFxuICByc0RpZ2l0cyxcbiAgcnNFbW9qaVxuXS5qb2luKCd8JyksICdnJyk7XG5cbi8qKlxuICogU3BsaXRzIGEgVW5pY29kZSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKi9cbmZ1bmN0aW9uIHVuaWNvZGVXb3JkcyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGVXb3JkKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlV29yZHM7XG4iLCJ2YXIgYXNjaWlXb3JkcyA9IHJlcXVpcmUoJy4vX2FzY2lpV29yZHMnKSxcbiAgICBoYXNVbmljb2RlV29yZCA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGVXb3JkJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyksXG4gICAgdW5pY29kZVdvcmRzID0gcmVxdWlyZSgnLi9fdW5pY29kZVdvcmRzJyk7XG5cbi8qKlxuICogU3BsaXRzIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IFtwYXR0ZXJuXSBUaGUgcGF0dGVybiB0byBtYXRjaCB3b3Jkcy5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICdwZWJibGVzJ11cbiAqXG4gKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycsIC9bXiwgXSsvZyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJyYnLCAncGViYmxlcyddXG4gKi9cbmZ1bmN0aW9uIHdvcmRzKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpIHtcbiAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgcGF0dGVybiA9IGd1YXJkID8gdW5kZWZpbmVkIDogcGF0dGVybjtcblxuICBpZiAocGF0dGVybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhhc1VuaWNvZGVXb3JkKHN0cmluZykgPyB1bmljb2RlV29yZHMoc3RyaW5nKSA6IGFzY2lpV29yZHMoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gc3RyaW5nLm1hdGNoKHBhdHRlcm4pIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdvcmRzO1xuIiwidmFyIGFycmF5UmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXlSZWR1Y2UnKSxcbiAgICBkZWJ1cnIgPSByZXF1aXJlKCcuL2RlYnVycicpLFxuICAgIHdvcmRzID0gcmVxdWlyZSgnLi93b3JkcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCI7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGFwb3N0cm9waGVzLiAqL1xudmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uY2FtZWxDYXNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmUgZWFjaCB3b3JkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY29tcG91bmRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ29tcG91bmRlcihjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNvbXBvdW5kZXI7XG4iLCJ2YXIgY3JlYXRlQ29tcG91bmRlciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUNvbXBvdW5kZXInKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICogW3NuYWtlIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NuYWtlX2Nhc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzbmFrZSBjYXNlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uc25ha2VDYXNlKCdGb28gQmFyJyk7XG4gKiAvLyA9PiAnZm9vX2JhcidcbiAqXG4gKiBfLnNuYWtlQ2FzZSgnZm9vQmFyJyk7XG4gKiAvLyA9PiAnZm9vX2JhcidcbiAqXG4gKiBfLnNuYWtlQ2FzZSgnLS1GT08tQkFSLS0nKTtcbiAqIC8vID0+ICdmb29fYmFyJ1xuICovXG52YXIgc25ha2VDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnXycgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzbmFrZUNhc2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIENhc3RzIGBhcnJheWAgdG8gYSBzbGljZSBpZiBpdCdzIG5lZWRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHNsaWNlLlxuICovXG5mdW5jdGlvbiBjYXN0U2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQ7XG4gIHJldHVybiAoIXN0YXJ0ICYmIGVuZCA+PSBsZW5ndGgpID8gYXJyYXkgOiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RTbGljZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgc3RyaW5ncyB3aXRoIFt6ZXJvLXdpZHRoIGpvaW5lcnMgb3IgY29kZSBwb2ludHMgZnJvbSB0aGUgYXN0cmFsIHBsYW5lc10oaHR0cDovL2Vldi5lZS9ibG9nLzIwMTUvMDkvMTIvZGFyay1jb3JuZXJzLW9mLXVuaWNvZGUvKS4gKi9cbnZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgc3RyaW5nYCBjb250YWlucyBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgc3ltYm9sIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1VuaWNvZGUoc3RyaW5nKSB7XG4gIHJldHVybiByZUhhc1VuaWNvZGUudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGU7XG4iLCIvKipcbiAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzY2lpVG9BcnJheTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBjcmVhdGVDYXNlRmlyc3QgPSByZXF1aXJlKCcuL19jcmVhdGVDYXNlRmlyc3QnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udXBwZXJGaXJzdCgnZnJlZCcpO1xuICogLy8gPT4gJ0ZyZWQnXG4gKlxuICogXy51cHBlckZpcnN0KCdGUkVEJyk7XG4gKiAvLyA9PiAnRlJFRCdcbiAqL1xudmFyIHVwcGVyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvVXBwZXJDYXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdXBwZXJGaXJzdDtcbiIsInZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKSxcbiAgICB1cHBlckZpcnN0ID0gcmVxdWlyZSgnLi91cHBlckZpcnN0Jyk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlIGFuZCB0aGUgcmVtYWluaW5nXG4gKiB0byBsb3dlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNhcGl0YWxpemUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYXBpdGFsaXplZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uY2FwaXRhbGl6ZSgnRlJFRCcpO1xuICogLy8gPT4gJ0ZyZWQnXG4gKi9cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiB1cHBlckZpcnN0KHRvU3RyaW5nKHN0cmluZykudG9Mb3dlckNhc2UoKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FwaXRhbGl6ZTtcbiIsInZhciBjYXBpdGFsaXplID0gcmVxdWlyZSgnLi9jYXBpdGFsaXplJyksXG4gICAgY3JlYXRlQ29tcG91bmRlciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUNvbXBvdW5kZXInKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBbY2FtZWwgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FtZWxDYXNlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FtZWwgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmNhbWVsQ2FzZSgnRm9vIEJhcicpO1xuICogLy8gPT4gJ2Zvb0JhcidcbiAqXG4gKiBfLmNhbWVsQ2FzZSgnLS1mb28tYmFyLS0nKTtcbiAqIC8vID0+ICdmb29CYXInXG4gKlxuICogXy5jYW1lbENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gKiAvLyA9PiAnZm9vQmFyJ1xuICovXG52YXIgY2FtZWxDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gIHdvcmQgPSB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyBjYXBpdGFsaXplKHdvcmQpIDogd29yZCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbENhc2U7XG4iLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKTtcblxuLyoqXG4gKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWFwVmFsdWVzYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGVcbiAqIHNhbWUgdmFsdWVzIGFzIGBvYmplY3RgIGFuZCBrZXlzIGdlbmVyYXRlZCBieSBydW5uaW5nIGVhY2ggb3duIGVudW1lcmFibGVcbiAqIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjguMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gKiBAc2VlIF8ubWFwVmFsdWVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ubWFwS2V5cyh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAqICAgcmV0dXJuIGtleSArIHZhbHVlO1xuICogfSk7XG4gKiAvLyA9PiB7ICdhMSc6IDEsICdiMic6IDIgfVxuICovXG5mdW5jdGlvbiBtYXBLZXlzKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBpdGVyYXRlZSA9IGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCksIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwS2V5cztcbiIsIlxuLyoqXG4gKiBUb3BvbG9naWNhbCBzb3J0aW5nIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZWRnZXNcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGVkZ2VzKSB7XG4gIHJldHVybiB0b3Bvc29ydCh1bmlxdWVOb2RlcyhlZGdlcyksIGVkZ2VzKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5hcnJheSA9IHRvcG9zb3J0XG5cbmZ1bmN0aW9uIHRvcG9zb3J0KG5vZGVzLCBlZGdlcykge1xuICB2YXIgY3Vyc29yID0gbm9kZXMubGVuZ3RoXG4gICAgLCBzb3J0ZWQgPSBuZXcgQXJyYXkoY3Vyc29yKVxuICAgICwgdmlzaXRlZCA9IHt9XG4gICAgLCBpID0gY3Vyc29yXG4gICAgLy8gQmV0dGVyIGRhdGEgc3RydWN0dXJlcyBtYWtlIGFsZ29yaXRobSBtdWNoIGZhc3Rlci5cbiAgICAsIG91dGdvaW5nRWRnZXMgPSBtYWtlT3V0Z29pbmdFZGdlcyhlZGdlcylcbiAgICAsIG5vZGVzSGFzaCA9IG1ha2VOb2Rlc0hhc2gobm9kZXMpXG5cbiAgLy8gY2hlY2sgZm9yIHVua25vd24gbm9kZXNcbiAgZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKSB7XG4gICAgaWYgKCFub2Rlc0hhc2guaGFzKGVkZ2VbMF0pIHx8ICFub2Rlc0hhc2guaGFzKGVkZ2VbMV0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9kZS4gVGhlcmUgaXMgYW4gdW5rbm93biBub2RlIGluIHRoZSBzdXBwbGllZCBlZGdlcy4nKVxuICAgIH1cbiAgfSlcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgaWYgKCF2aXNpdGVkW2ldKSB2aXNpdChub2Rlc1tpXSwgaSwgbmV3IFNldCgpKVxuICB9XG5cbiAgcmV0dXJuIHNvcnRlZFxuXG4gIGZ1bmN0aW9uIHZpc2l0KG5vZGUsIGksIHByZWRlY2Vzc29ycykge1xuICAgIGlmKHByZWRlY2Vzc29ycy5oYXMobm9kZSkpIHtcbiAgICAgIHZhciBub2RlUmVwXG4gICAgICB0cnkge1xuICAgICAgICBub2RlUmVwID0gXCIsIG5vZGUgd2FzOlwiICsgSlNPTi5zdHJpbmdpZnkobm9kZSlcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBub2RlUmVwID0gXCJcIlxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDeWNsaWMgZGVwZW5kZW5jeScgKyBub2RlUmVwKVxuICAgIH1cblxuICAgIGlmICghbm9kZXNIYXNoLmhhcyhub2RlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3VuZCB1bmtub3duIG5vZGUuIE1ha2Ugc3VyZSB0byBwcm92aWRlZCBhbGwgaW52b2x2ZWQgbm9kZXMuIFVua25vd24gbm9kZTogJytKU09OLnN0cmluZ2lmeShub2RlKSlcbiAgICB9XG5cbiAgICBpZiAodmlzaXRlZFtpXSkgcmV0dXJuO1xuICAgIHZpc2l0ZWRbaV0gPSB0cnVlXG5cbiAgICB2YXIgb3V0Z29pbmcgPSBvdXRnb2luZ0VkZ2VzLmdldChub2RlKSB8fCBuZXcgU2V0KClcbiAgICBvdXRnb2luZyA9IEFycmF5LmZyb20ob3V0Z29pbmcpXG5cbiAgICBpZiAoaSA9IG91dGdvaW5nLmxlbmd0aCkge1xuICAgICAgcHJlZGVjZXNzb3JzLmFkZChub2RlKVxuICAgICAgZG8ge1xuICAgICAgICB2YXIgY2hpbGQgPSBvdXRnb2luZ1stLWldXG4gICAgICAgIHZpc2l0KGNoaWxkLCBub2Rlc0hhc2guZ2V0KGNoaWxkKSwgcHJlZGVjZXNzb3JzKVxuICAgICAgfSB3aGlsZSAoaSlcbiAgICAgIHByZWRlY2Vzc29ycy5kZWxldGUobm9kZSlcbiAgICB9XG5cbiAgICBzb3J0ZWRbLS1jdXJzb3JdID0gbm9kZVxuICB9XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZU5vZGVzKGFycil7XG4gIHZhciByZXMgPSBuZXcgU2V0KClcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBlZGdlID0gYXJyW2ldXG4gICAgcmVzLmFkZChlZGdlWzBdKVxuICAgIHJlcy5hZGQoZWRnZVsxXSlcbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZXMpXG59XG5cbmZ1bmN0aW9uIG1ha2VPdXRnb2luZ0VkZ2VzKGFycil7XG4gIHZhciBlZGdlcyA9IG5ldyBNYXAoKVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGVkZ2UgPSBhcnJbaV1cbiAgICBpZiAoIWVkZ2VzLmhhcyhlZGdlWzBdKSkgZWRnZXMuc2V0KGVkZ2VbMF0sIG5ldyBTZXQoKSlcbiAgICBpZiAoIWVkZ2VzLmhhcyhlZGdlWzFdKSkgZWRnZXMuc2V0KGVkZ2VbMV0sIG5ldyBTZXQoKSlcbiAgICBlZGdlcy5nZXQoZWRnZVswXSkuYWRkKGVkZ2VbMV0pXG4gIH1cbiAgcmV0dXJuIGVkZ2VzXG59XG5cbmZ1bmN0aW9uIG1ha2VOb2Rlc0hhc2goYXJyKXtcbiAgdmFyIHJlcyA9IG5ldyBNYXAoKVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgcmVzLnNldChhcnJbaV0sIGkpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuIiwiaW1wb3J0IGhhcyBmcm9tICdsb2Rhc2gvaGFzJzsgLy8gQHRzLWV4cGVjdC1lcnJvclxuXG5pbXBvcnQgdG9wb3NvcnQgZnJvbSAndG9wb3NvcnQnO1xuaW1wb3J0IHsgc3BsaXQgfSBmcm9tICdwcm9wZXJ0eS1leHByJztcbmltcG9ydCBSZWYgZnJvbSAnLi4vUmVmZXJlbmNlJztcbmltcG9ydCBpc1NjaGVtYSBmcm9tICcuL2lzU2NoZW1hJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNvcnRGaWVsZHMoZmllbGRzLCBleGNsdWRlZEVkZ2VzID0gW10pIHtcbiAgbGV0IGVkZ2VzID0gW107XG4gIGxldCBub2RlcyA9IG5ldyBTZXQoKTtcbiAgbGV0IGV4Y2x1ZGVzID0gbmV3IFNldChleGNsdWRlZEVkZ2VzLm1hcCgoW2EsIGJdKSA9PiBgJHthfS0ke2J9YCkpO1xuXG4gIGZ1bmN0aW9uIGFkZE5vZGUoZGVwUGF0aCwga2V5KSB7XG4gICAgbGV0IG5vZGUgPSBzcGxpdChkZXBQYXRoKVswXTtcbiAgICBub2Rlcy5hZGQobm9kZSk7XG4gICAgaWYgKCFleGNsdWRlcy5oYXMoYCR7a2V5fS0ke25vZGV9YCkpIGVkZ2VzLnB1c2goW2tleSwgbm9kZV0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzKSBpZiAoaGFzKGZpZWxkcywga2V5KSkge1xuICAgIGxldCB2YWx1ZSA9IGZpZWxkc1trZXldO1xuICAgIG5vZGVzLmFkZChrZXkpO1xuICAgIGlmIChSZWYuaXNSZWYodmFsdWUpICYmIHZhbHVlLmlzU2libGluZykgYWRkTm9kZSh2YWx1ZS5wYXRoLCBrZXkpO2Vsc2UgaWYgKGlzU2NoZW1hKHZhbHVlKSAmJiAnZGVwcycgaW4gdmFsdWUpIHZhbHVlLmRlcHMuZm9yRWFjaChwYXRoID0+IGFkZE5vZGUocGF0aCwga2V5KSk7XG4gIH1cblxuICByZXR1cm4gdG9wb3NvcnQuYXJyYXkoQXJyYXkuZnJvbShub2RlcyksIGVkZ2VzKS5yZXZlcnNlKCk7XG59IiwiZnVuY3Rpb24gZmluZEluZGV4KGFyciwgZXJyKSB7XG4gIGxldCBpZHggPSBJbmZpbml0eTtcbiAgYXJyLnNvbWUoKGtleSwgaWkpID0+IHtcbiAgICB2YXIgX2VyciRwYXRoO1xuXG4gICAgaWYgKCgoX2VyciRwYXRoID0gZXJyLnBhdGgpID09IG51bGwgPyB2b2lkIDAgOiBfZXJyJHBhdGguaW5kZXhPZihrZXkpKSAhPT0gLTEpIHtcbiAgICAgIGlkeCA9IGlpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkeDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydEJ5S2V5T3JkZXIoa2V5cykge1xuICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICByZXR1cm4gZmluZEluZGV4KGtleXMsIGEpIC0gZmluZEluZGV4KGtleXMsIGIpO1xuICB9O1xufSIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCBoYXMgZnJvbSAnbG9kYXNoL2hhcyc7XG5pbXBvcnQgc25ha2VDYXNlIGZyb20gJ2xvZGFzaC9zbmFrZUNhc2UnO1xuaW1wb3J0IGNhbWVsQ2FzZSBmcm9tICdsb2Rhc2gvY2FtZWxDYXNlJztcbmltcG9ydCBtYXBLZXlzIGZyb20gJ2xvZGFzaC9tYXBLZXlzJztcbmltcG9ydCBtYXBWYWx1ZXMgZnJvbSAnbG9kYXNoL21hcFZhbHVlcyc7XG5pbXBvcnQgeyBnZXR0ZXIgfSBmcm9tICdwcm9wZXJ0eS1leHByJztcbmltcG9ydCB7IG9iamVjdCBhcyBsb2NhbGUgfSBmcm9tICcuL2xvY2FsZSc7XG5pbXBvcnQgc29ydEZpZWxkcyBmcm9tICcuL3V0aWwvc29ydEZpZWxkcyc7XG5pbXBvcnQgc29ydEJ5S2V5T3JkZXIgZnJvbSAnLi91dGlsL3NvcnRCeUtleU9yZGVyJztcbmltcG9ydCBydW5UZXN0cyBmcm9tICcuL3V0aWwvcnVuVGVzdHMnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuL1ZhbGlkYXRpb25FcnJvcic7XG5pbXBvcnQgQmFzZVNjaGVtYSBmcm9tICcuL3NjaGVtYSc7XG5cbmxldCBpc09iamVjdCA9IG9iaiA9PiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmZ1bmN0aW9uIHVua25vd24oY3R4LCB2YWx1ZSkge1xuICBsZXQga25vd24gPSBPYmplY3Qua2V5cyhjdHguZmllbGRzKTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5maWx0ZXIoa2V5ID0+IGtub3duLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xufVxuXG5jb25zdCBkZWZhdWx0U29ydCA9IHNvcnRCeUtleU9yZGVyKFtdKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9iamVjdFNjaGVtYSBleHRlbmRzIEJhc2VTY2hlbWEge1xuICBjb25zdHJ1Y3RvcihzcGVjKSB7XG4gICAgc3VwZXIoe1xuICAgICAgdHlwZTogJ29iamVjdCdcbiAgICB9KTtcbiAgICB0aGlzLmZpZWxkcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fc29ydEVycm9ycyA9IGRlZmF1bHRTb3J0O1xuICAgIHRoaXMuX25vZGVzID0gW107XG4gICAgdGhpcy5fZXhjbHVkZWRFZGdlcyA9IFtdO1xuICAgIHRoaXMud2l0aE11dGF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMudHJhbnNmb3JtKGZ1bmN0aW9uIGNvZXJjZSh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzVHlwZSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNwZWMpIHtcbiAgICAgICAgdGhpcy5zaGFwZShzcGVjKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF90eXBlQ2hlY2sodmFsdWUpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIF9jYXN0KF92YWx1ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgdmFyIF9vcHRpb25zJHN0cmlwVW5rbm93bjtcblxuICAgIGxldCB2YWx1ZSA9IHN1cGVyLl9jYXN0KF92YWx1ZSwgb3B0aW9ucyk7IC8vc2hvdWxkIGlnbm9yZSBudWxscyBoZXJlXG5cblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5nZXREZWZhdWx0KCk7XG4gICAgaWYgKCF0aGlzLl90eXBlQ2hlY2sodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgbGV0IGZpZWxkcyA9IHRoaXMuZmllbGRzO1xuICAgIGxldCBzdHJpcCA9IChfb3B0aW9ucyRzdHJpcFVua25vd24gPSBvcHRpb25zLnN0cmlwVW5rbm93bikgIT0gbnVsbCA/IF9vcHRpb25zJHN0cmlwVW5rbm93biA6IHRoaXMuc3BlYy5ub1Vua25vd247XG5cbiAgICBsZXQgcHJvcHMgPSB0aGlzLl9ub2Rlcy5jb25jYXQoT2JqZWN0LmtleXModmFsdWUpLmZpbHRlcih2ID0+IHRoaXMuX25vZGVzLmluZGV4T2YodikgPT09IC0xKSk7XG5cbiAgICBsZXQgaW50ZXJtZWRpYXRlVmFsdWUgPSB7fTsgLy8gaXMgZmlsbGVkIGR1cmluZyB0aGUgdHJhbnNmb3JtIGJlbG93XG5cbiAgICBsZXQgaW5uZXJPcHRpb25zID0gX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICAgIHBhcmVudDogaW50ZXJtZWRpYXRlVmFsdWUsXG4gICAgICBfX3ZhbGlkYXRpbmc6IG9wdGlvbnMuX192YWxpZGF0aW5nIHx8IGZhbHNlXG4gICAgfSk7XG5cbiAgICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgIGxldCBmaWVsZCA9IGZpZWxkc1twcm9wXTtcbiAgICAgIGxldCBleGlzdHMgPSBoYXModmFsdWUsIHByb3ApO1xuXG4gICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgbGV0IGZpZWxkVmFsdWU7XG4gICAgICAgIGxldCBpbnB1dFZhbHVlID0gdmFsdWVbcHJvcF07IC8vIHNhZmUgdG8gbXV0YXRlIHNpbmNlIHRoaXMgaXMgZmlyZWQgaW4gc2VxdWVuY2VcblxuICAgICAgICBpbm5lck9wdGlvbnMucGF0aCA9IChvcHRpb25zLnBhdGggPyBgJHtvcHRpb25zLnBhdGh9LmAgOiAnJykgKyBwcm9wOyAvLyBpbm5lck9wdGlvbnMudmFsdWUgPSB2YWx1ZVtwcm9wXTtcblxuICAgICAgICBmaWVsZCA9IGZpZWxkLnJlc29sdmUoe1xuICAgICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgICAgIGNvbnRleHQ6IG9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICBwYXJlbnQ6IGludGVybWVkaWF0ZVZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZmllbGRTcGVjID0gJ3NwZWMnIGluIGZpZWxkID8gZmllbGQuc3BlYyA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHN0cmljdCA9IGZpZWxkU3BlYyA9PSBudWxsID8gdm9pZCAwIDogZmllbGRTcGVjLnN0cmljdDtcblxuICAgICAgICBpZiAoZmllbGRTcGVjID09IG51bGwgPyB2b2lkIDAgOiBmaWVsZFNwZWMuc3RyaXApIHtcbiAgICAgICAgICBpc0NoYW5nZWQgPSBpc0NoYW5nZWQgfHwgcHJvcCBpbiB2YWx1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkVmFsdWUgPSAhb3B0aW9ucy5fX3ZhbGlkYXRpbmcgfHwgIXN0cmljdCA/IC8vIFRPRE86IHVzZSBfY2FzdCwgdGhpcyBpcyBkb3VibGUgcmVzb2x2aW5nXG4gICAgICAgIGZpZWxkLmNhc3QodmFsdWVbcHJvcF0sIGlubmVyT3B0aW9ucykgOiB2YWx1ZVtwcm9wXTtcblxuICAgICAgICBpZiAoZmllbGRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW50ZXJtZWRpYXRlVmFsdWVbcHJvcF0gPSBmaWVsZFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV4aXN0cyAmJiAhc3RyaXApIHtcbiAgICAgICAgaW50ZXJtZWRpYXRlVmFsdWVbcHJvcF0gPSB2YWx1ZVtwcm9wXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGludGVybWVkaWF0ZVZhbHVlW3Byb3BdICE9PSB2YWx1ZVtwcm9wXSkge1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpc0NoYW5nZWQgPyBpbnRlcm1lZGlhdGVWYWx1ZSA6IHZhbHVlO1xuICB9XG5cbiAgX3ZhbGlkYXRlKF92YWx1ZSwgb3B0cyA9IHt9LCBjYWxsYmFjaykge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICBsZXQge1xuICAgICAgc3luYyxcbiAgICAgIGZyb20gPSBbXSxcbiAgICAgIG9yaWdpbmFsVmFsdWUgPSBfdmFsdWUsXG4gICAgICBhYm9ydEVhcmx5ID0gdGhpcy5zcGVjLmFib3J0RWFybHksXG4gICAgICByZWN1cnNpdmUgPSB0aGlzLnNwZWMucmVjdXJzaXZlXG4gICAgfSA9IG9wdHM7XG4gICAgZnJvbSA9IFt7XG4gICAgICBzY2hlbWE6IHRoaXMsXG4gICAgICB2YWx1ZTogb3JpZ2luYWxWYWx1ZVxuICAgIH0sIC4uLmZyb21dOyAvLyB0aGlzIGZsYWcgaXMgbmVlZGVkIGZvciBoYW5kbGluZyBgc3RyaWN0YCBjb3JyZWN0bHkgaW4gdGhlIGNvbnRleHQgb2ZcbiAgICAvLyB2YWxpZGF0aW9uIHZzIGp1c3QgY2FzdGluZy4gZS5nIHN0cmljdCgpIG9uIGEgZmllbGQgaXMgb25seSB1c2VkIHdoZW4gdmFsaWRhdGluZ1xuXG4gICAgb3B0cy5fX3ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgIG9wdHMub3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWU7XG4gICAgb3B0cy5mcm9tID0gZnJvbTtcblxuICAgIHN1cGVyLl92YWxpZGF0ZShfdmFsdWUsIG9wdHMsIChlcnIsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmICghVmFsaWRhdGlvbkVycm9yLmlzRXJyb3IoZXJyKSB8fCBhYm9ydEVhcmx5KSB7XG4gICAgICAgICAgcmV0dXJuIHZvaWQgY2FsbGJhY2soZXJyLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlY3Vyc2l2ZSB8fCAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yc1swXSB8fCBudWxsLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxWYWx1ZSA9IG9yaWdpbmFsVmFsdWUgfHwgdmFsdWU7XG5cbiAgICAgIGxldCB0ZXN0cyA9IHRoaXMuX25vZGVzLm1hcChrZXkgPT4gKF8sIGNiKSA9PiB7XG4gICAgICAgIGxldCBwYXRoID0ga2V5LmluZGV4T2YoJy4nKSA9PT0gLTEgPyAob3B0cy5wYXRoID8gYCR7b3B0cy5wYXRofS5gIDogJycpICsga2V5IDogYCR7b3B0cy5wYXRoIHx8ICcnfVtcIiR7a2V5fVwiXWA7XG4gICAgICAgIGxldCBmaWVsZCA9IHRoaXMuZmllbGRzW2tleV07XG5cbiAgICAgICAgaWYgKGZpZWxkICYmICd2YWxpZGF0ZScgaW4gZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC52YWxpZGF0ZSh2YWx1ZVtrZXldLCBfZXh0ZW5kcyh7fSwgb3B0cywge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIGZyb20sXG4gICAgICAgICAgICAvLyBpbm5lciBmaWVsZHMgYXJlIGFsd2F5cyBzdHJpY3Q6XG4gICAgICAgICAgICAvLyAxLiB0aGlzIGlzbid0IHN0cmljdCBzbyB0aGUgY2FzdGluZyB3aWxsIGFsc28gaGF2ZSBjYXN0IGlubmVyIHZhbHVlc1xuICAgICAgICAgICAgLy8gMi4gdGhpcyBpcyBzdHJpY3QgaW4gd2hpY2ggY2FzZSB0aGUgbmVzdGVkIHZhbHVlcyB3ZXJlbid0IGNhc3QgZWl0aGVyXG4gICAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgICBwYXJlbnQ6IHZhbHVlLFxuICAgICAgICAgICAgb3JpZ2luYWxWYWx1ZTogb3JpZ2luYWxWYWx1ZVtrZXldXG4gICAgICAgICAgfSksIGNiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjYihudWxsKTtcbiAgICAgIH0pO1xuXG4gICAgICBydW5UZXN0cyh7XG4gICAgICAgIHN5bmMsXG4gICAgICAgIHRlc3RzLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBlbmRFYXJseTogYWJvcnRFYXJseSxcbiAgICAgICAgc29ydDogdGhpcy5fc29ydEVycm9ycyxcbiAgICAgICAgcGF0aDogb3B0cy5wYXRoXG4gICAgICB9LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBjbG9uZShzcGVjKSB7XG4gICAgY29uc3QgbmV4dCA9IHN1cGVyLmNsb25lKHNwZWMpO1xuICAgIG5leHQuZmllbGRzID0gX2V4dGVuZHMoe30sIHRoaXMuZmllbGRzKTtcbiAgICBuZXh0Ll9ub2RlcyA9IHRoaXMuX25vZGVzO1xuICAgIG5leHQuX2V4Y2x1ZGVkRWRnZXMgPSB0aGlzLl9leGNsdWRlZEVkZ2VzO1xuICAgIG5leHQuX3NvcnRFcnJvcnMgPSB0aGlzLl9zb3J0RXJyb3JzO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgY29uY2F0KHNjaGVtYSkge1xuICAgIGxldCBuZXh0ID0gc3VwZXIuY29uY2F0KHNjaGVtYSk7XG4gICAgbGV0IG5leHRGaWVsZHMgPSBuZXh0LmZpZWxkcztcblxuICAgIGZvciAobGV0IFtmaWVsZCwgc2NoZW1hT3JSZWZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZmllbGRzKSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbmV4dEZpZWxkc1tmaWVsZF07XG5cbiAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXh0RmllbGRzW2ZpZWxkXSA9IHNjaGVtYU9yUmVmO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBCYXNlU2NoZW1hICYmIHNjaGVtYU9yUmVmIGluc3RhbmNlb2YgQmFzZVNjaGVtYSkge1xuICAgICAgICBuZXh0RmllbGRzW2ZpZWxkXSA9IHNjaGVtYU9yUmVmLmNvbmNhdCh0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0LndpdGhNdXRhdGlvbigoKSA9PiBuZXh0LnNoYXBlKG5leHRGaWVsZHMsIHRoaXMuX2V4Y2x1ZGVkRWRnZXMpKTtcbiAgfVxuXG4gIGdldERlZmF1bHRGcm9tU2hhcGUoKSB7XG4gICAgbGV0IGRmdCA9IHt9O1xuXG4gICAgdGhpcy5fbm9kZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkc1trZXldO1xuICAgICAgZGZ0W2tleV0gPSAnZGVmYXVsdCcgaW4gZmllbGQgPyBmaWVsZC5nZXREZWZhdWx0KCkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGZ0O1xuICB9XG5cbiAgX2dldERlZmF1bHQoKSB7XG4gICAgaWYgKCdkZWZhdWx0JyBpbiB0aGlzLnNwZWMpIHtcbiAgICAgIHJldHVybiBzdXBlci5fZ2V0RGVmYXVsdCgpO1xuICAgIH0gLy8gaWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBzZXQgaW52ZW50IG9uZVxuXG5cbiAgICBpZiAoIXRoaXMuX25vZGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXREZWZhdWx0RnJvbVNoYXBlKCk7XG4gIH1cblxuICBzaGFwZShhZGRpdGlvbnMsIGV4Y2x1ZGVzID0gW10pIHtcbiAgICBsZXQgbmV4dCA9IHRoaXMuY2xvbmUoKTtcbiAgICBsZXQgZmllbGRzID0gT2JqZWN0LmFzc2lnbihuZXh0LmZpZWxkcywgYWRkaXRpb25zKTtcbiAgICBuZXh0LmZpZWxkcyA9IGZpZWxkcztcbiAgICBuZXh0Ll9zb3J0RXJyb3JzID0gc29ydEJ5S2V5T3JkZXIoT2JqZWN0LmtleXMoZmllbGRzKSk7XG5cbiAgICBpZiAoZXhjbHVkZXMubGVuZ3RoKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgY29udmVuaWVuY2UgZm9yIHdoZW4gdXNlcnMgb25seSBzdXBwbHkgYSBzaW5nbGUgcGFpclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV4Y2x1ZGVzWzBdKSkgZXhjbHVkZXMgPSBbZXhjbHVkZXNdO1xuICAgICAgbmV4dC5fZXhjbHVkZWRFZGdlcyA9IFsuLi5uZXh0Ll9leGNsdWRlZEVkZ2VzLCAuLi5leGNsdWRlc107XG4gICAgfVxuXG4gICAgbmV4dC5fbm9kZXMgPSBzb3J0RmllbGRzKGZpZWxkcywgbmV4dC5fZXhjbHVkZWRFZGdlcyk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICBwaWNrKGtleXMpIHtcbiAgICBjb25zdCBwaWNrZWQgPSB7fTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGlmICh0aGlzLmZpZWxkc1trZXldKSBwaWNrZWRba2V5XSA9IHRoaXMuZmllbGRzW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKS53aXRoTXV0YXRpb24obmV4dCA9PiB7XG4gICAgICBuZXh0LmZpZWxkcyA9IHt9O1xuICAgICAgcmV0dXJuIG5leHQuc2hhcGUocGlja2VkKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9taXQoa2V5cykge1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLmNsb25lKCk7XG4gICAgY29uc3QgZmllbGRzID0gbmV4dC5maWVsZHM7XG4gICAgbmV4dC5maWVsZHMgPSB7fTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGRlbGV0ZSBmaWVsZHNba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dC53aXRoTXV0YXRpb24oKCkgPT4gbmV4dC5zaGFwZShmaWVsZHMpKTtcbiAgfVxuXG4gIGZyb20oZnJvbSwgdG8sIGFsaWFzKSB7XG4gICAgbGV0IGZyb21HZXR0ZXIgPSBnZXR0ZXIoZnJvbSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtKG9iaiA9PiB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBvYmo7XG4gICAgICBsZXQgbmV3T2JqID0gb2JqO1xuXG4gICAgICBpZiAoaGFzKG9iaiwgZnJvbSkpIHtcbiAgICAgICAgbmV3T2JqID0gX2V4dGVuZHMoe30sIG9iaik7XG4gICAgICAgIGlmICghYWxpYXMpIGRlbGV0ZSBuZXdPYmpbZnJvbV07XG4gICAgICAgIG5ld09ialt0b10gPSBmcm9tR2V0dGVyKG9iaik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgfSk7XG4gIH1cblxuICBub1Vua25vd24obm9BbGxvdyA9IHRydWUsIG1lc3NhZ2UgPSBsb2NhbGUubm9Vbmtub3duKSB7XG4gICAgaWYgKHR5cGVvZiBub0FsbG93ID09PSAnc3RyaW5nJykge1xuICAgICAgbWVzc2FnZSA9IG5vQWxsb3c7XG4gICAgICBub0FsbG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgbmV4dCA9IHRoaXMudGVzdCh7XG4gICAgICBuYW1lOiAnbm9Vbmtub3duJyxcbiAgICAgIGV4Y2x1c2l2ZTogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG5cbiAgICAgIHRlc3QodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0cnVlO1xuICAgICAgICBjb25zdCB1bmtub3duS2V5cyA9IHVua25vd24odGhpcy5zY2hlbWEsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuICFub0FsbG93IHx8IHVua25vd25LZXlzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmNyZWF0ZUVycm9yKHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIHVua25vd246IHVua25vd25LZXlzLmpvaW4oJywgJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgbmV4dC5zcGVjLm5vVW5rbm93biA9IG5vQWxsb3c7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICB1bmtub3duKGFsbG93ID0gdHJ1ZSwgbWVzc2FnZSA9IGxvY2FsZS5ub1Vua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5ub1Vua25vd24oIWFsbG93LCBtZXNzYWdlKTtcbiAgfVxuXG4gIHRyYW5zZm9ybUtleXMoZm4pIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ob2JqID0+IG9iaiAmJiBtYXBLZXlzKG9iaiwgKF8sIGtleSkgPT4gZm4oa2V5KSkpO1xuICB9XG5cbiAgY2FtZWxDYXNlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUtleXMoY2FtZWxDYXNlKTtcbiAgfVxuXG4gIHNuYWtlQ2FzZSgpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1LZXlzKHNuYWtlQ2FzZSk7XG4gIH1cblxuICBjb25zdGFudENhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtS2V5cyhrZXkgPT4gc25ha2VDYXNlKGtleSkudG9VcHBlckNhc2UoKSk7XG4gIH1cblxuICBkZXNjcmliZSgpIHtcbiAgICBsZXQgYmFzZSA9IHN1cGVyLmRlc2NyaWJlKCk7XG4gICAgYmFzZS5maWVsZHMgPSBtYXBWYWx1ZXModGhpcy5maWVsZHMsIHZhbHVlID0+IHZhbHVlLmRlc2NyaWJlKCkpO1xuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoc3BlYykge1xuICByZXR1cm4gbmV3IE9iamVjdFNjaGVtYShzcGVjKTtcbn1cbmNyZWF0ZS5wcm90b3R5cGUgPSBPYmplY3RTY2hlbWEucHJvdG90eXBlOyJdLCJuYW1lcyI6WyJtYXAiLCJzZXQiLCJiYXNlQ2xvbmUiLCJzcmMiLCJjaXJjdWxhcnMiLCJjbG9uZXMiLCJjbG9uZSIsIm9iaiIsImtleSIsImlkeCIsInRvU3RyaW5nIiwiZXJyb3JUb1N0cmluZyIsInJlZ0V4cFRvU3RyaW5nIiwic3ltYm9sVG9TdHJpbmciLCJTWU1CT0xfUkVHRVhQIiwicHJpbnROdW1iZXIiLCJ2YWwiLCJwcmludFNpbXBsZVZhbHVlIiwicXVvdGVTdHJpbmdzIiwidHlwZU9mIiwidGFnIiwicHJpbnRWYWx1ZSIsInZhbHVlIiwicmVzdWx0IiwibWl4ZWQiLCJwYXRoIiwidHlwZSIsIm9yaWdpbmFsVmFsdWUiLCJpc0Nhc3QiLCJtc2ciLCJzdHJpbmciLCJudW1iZXIiLCJkYXRlIiwiYm9vbGVhbiIsIm9iamVjdCIsImFycmF5Iiwib2JqZWN0UHJvdG8iLCJoYXNPd25Qcm9wZXJ0eSIsImJhc2VIYXMiLCJfYmFzZUhhcyIsImlzQXJyYXkiLCJpc0FycmF5XzEiLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwiX2ZyZWVHbG9iYWwiLCJyZXF1aXJlJCQwIiwiZnJlZVNlbGYiLCJyb290IiwiX3Jvb3QiLCJTeW1ib2wiLCJfU3ltYm9sIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImdldFJhd1RhZyIsImlzT3duIiwidW5tYXNrZWQiLCJfZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJfb2JqZWN0VG9TdHJpbmciLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsIm51bGxUYWciLCJ1bmRlZmluZWRUYWciLCJiYXNlR2V0VGFnIiwiX2Jhc2VHZXRUYWciLCJpc09iamVjdExpa2UiLCJpc09iamVjdExpa2VfMSIsInN5bWJvbFRhZyIsImlzU3ltYm9sIiwiaXNTeW1ib2xfMSIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJpc0tleSIsIl9pc0tleSIsImlzT2JqZWN0IiwiaXNPYmplY3RfMSIsImFzeW5jVGFnIiwiZnVuY1RhZyIsImdlblRhZyIsInByb3h5VGFnIiwiaXNGdW5jdGlvbiIsImlzRnVuY3Rpb25fMSIsImNvcmVKc0RhdGEiLCJfY29yZUpzRGF0YSIsIm1hc2tTcmNLZXkiLCJ1aWQiLCJpc01hc2tlZCIsImZ1bmMiLCJfaXNNYXNrZWQiLCJmdW5jUHJvdG8iLCJmdW5jVG9TdHJpbmciLCJ0b1NvdXJjZSIsIl90b1NvdXJjZSIsInJlcXVpcmUkJDMiLCJyZVJlZ0V4cENoYXIiLCJyZUlzSG9zdEN0b3IiLCJyZUlzTmF0aXZlIiwiYmFzZUlzTmF0aXZlIiwicGF0dGVybiIsIl9iYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsIl9nZXRWYWx1ZSIsImdldE5hdGl2ZSIsIl9nZXROYXRpdmUiLCJuYXRpdmVDcmVhdGUiLCJfbmF0aXZlQ3JlYXRlIiwiaGFzaENsZWFyIiwiX2hhc2hDbGVhciIsImhhc2hEZWxldGUiLCJfaGFzaERlbGV0ZSIsIkhBU0hfVU5ERUZJTkVEIiwiaGFzaEdldCIsImRhdGEiLCJfaGFzaEdldCIsImhhc2hIYXMiLCJfaGFzaEhhcyIsImhhc2hTZXQiLCJfaGFzaFNldCIsInJlcXVpcmUkJDQiLCJIYXNoIiwiZW50cmllcyIsImluZGV4IiwibGVuZ3RoIiwiZW50cnkiLCJfSGFzaCIsImxpc3RDYWNoZUNsZWFyIiwiX2xpc3RDYWNoZUNsZWFyIiwiZXEiLCJvdGhlciIsImVxXzEiLCJhc3NvY0luZGV4T2YiLCJfYXNzb2NJbmRleE9mIiwiYXJyYXlQcm90byIsInNwbGljZSIsImxpc3RDYWNoZURlbGV0ZSIsImxhc3RJbmRleCIsIl9saXN0Q2FjaGVEZWxldGUiLCJsaXN0Q2FjaGVHZXQiLCJfbGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwiX2xpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIl9saXN0Q2FjaGVTZXQiLCJMaXN0Q2FjaGUiLCJfTGlzdENhY2hlIiwiTWFwIiwiX01hcCIsIm1hcENhY2hlQ2xlYXIiLCJfbWFwQ2FjaGVDbGVhciIsImlzS2V5YWJsZSIsIl9pc0tleWFibGUiLCJnZXRNYXBEYXRhIiwiX2dldE1hcERhdGEiLCJtYXBDYWNoZURlbGV0ZSIsIl9tYXBDYWNoZURlbGV0ZSIsIm1hcENhY2hlR2V0IiwiX21hcENhY2hlR2V0IiwibWFwQ2FjaGVIYXMiLCJfbWFwQ2FjaGVIYXMiLCJtYXBDYWNoZVNldCIsInNpemUiLCJfbWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsIl9NYXBDYWNoZSIsIkZVTkNfRVJST1JfVEVYVCIsIm1lbW9pemUiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiYXJncyIsImNhY2hlIiwibWVtb2l6ZV8xIiwiTUFYX01FTU9JWkVfU0laRSIsIm1lbW9pemVDYXBwZWQiLCJfbWVtb2l6ZUNhcHBlZCIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJzdHJpbmdUb1BhdGgiLCJtYXRjaCIsInF1b3RlIiwic3ViU3RyaW5nIiwiX3N0cmluZ1RvUGF0aCIsImFycmF5TWFwIiwiaXRlcmF0ZWUiLCJfYXJyYXlNYXAiLCJJTkZJTklUWSIsInN5bWJvbFByb3RvIiwiYmFzZVRvU3RyaW5nIiwiX2Jhc2VUb1N0cmluZyIsInRvU3RyaW5nXzEiLCJjYXN0UGF0aCIsIl9jYXN0UGF0aCIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJfYmFzZUlzQXJndW1lbnRzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc0FyZ3VtZW50cyIsImlzQXJndW1lbnRzXzEiLCJNQVhfU0FGRV9JTlRFR0VSIiwicmVJc1VpbnQiLCJpc0luZGV4IiwiX2lzSW5kZXgiLCJpc0xlbmd0aCIsImlzTGVuZ3RoXzEiLCJ0b0tleSIsIl90b0tleSIsInJlcXVpcmUkJDUiLCJoYXNQYXRoIiwiaGFzRnVuYyIsIl9oYXNQYXRoIiwiaGFzIiwiaGFzXzEiLCJpc1NjaGVtYSIsIkNvbmRpdGlvbiIsInJlZnMiLCJvcHRpb25zIiwiaXMiLCJ0aGVuIiwib3RoZXJ3aXNlIiwiY2hlY2siLCJ2YWx1ZXMiLCJzY2hlbWEiLCJicmFuY2giLCJiYXNlIiwicmVmIiwidG9BcnJheSIsIl9leHRlbmRzIiwidGFyZ2V0IiwiaSIsInNvdXJjZSIsInN0clJlZyIsIlZhbGlkYXRpb25FcnJvciIsIm1lc3NhZ2UiLCJwYXJhbXMiLCJfIiwiZXJyIiwiZXJyb3JPckVycm9ycyIsImZpZWxkIiwib25jZSIsImNiIiwiZmlyZWQiLCJydW5UZXN0cyIsImVuZEVhcmx5IiwidGVzdHMiLCJlcnJvcnMiLCJzb3J0IiwiY2FsbGJhY2siLCJjb3VudCIsIm5lc3RlZEVycm9ycyIsInRlc3QiLCJkZWZpbmVQcm9wZXJ0eSIsIl9kZWZpbmVQcm9wZXJ0eSIsImJhc2VBc3NpZ25WYWx1ZSIsIl9iYXNlQXNzaWduVmFsdWUiLCJjcmVhdGVCYXNlRm9yIiwiZnJvbVJpZ2h0Iiwia2V5c0Z1bmMiLCJpdGVyYWJsZSIsInByb3BzIiwiX2NyZWF0ZUJhc2VGb3IiLCJiYXNlRm9yIiwiX2Jhc2VGb3IiLCJiYXNlVGltZXMiLCJuIiwiX2Jhc2VUaW1lcyIsInN0dWJGYWxzZSIsInN0dWJGYWxzZV8xIiwiZnJlZUV4cG9ydHMiLCJleHBvcnRzIiwiZnJlZU1vZHVsZSIsIm1vZHVsZSIsIm1vZHVsZUV4cG9ydHMiLCJCdWZmZXIiLCJuYXRpdmVJc0J1ZmZlciIsImlzQnVmZmVyIiwiYXJyYXlUYWciLCJib29sVGFnIiwiZGF0ZVRhZyIsImVycm9yVGFnIiwibWFwVGFnIiwibnVtYmVyVGFnIiwib2JqZWN0VGFnIiwicmVnZXhwVGFnIiwic2V0VGFnIiwic3RyaW5nVGFnIiwid2Vha01hcFRhZyIsImFycmF5QnVmZmVyVGFnIiwiZGF0YVZpZXdUYWciLCJmbG9hdDMyVGFnIiwiZmxvYXQ2NFRhZyIsImludDhUYWciLCJpbnQxNlRhZyIsImludDMyVGFnIiwidWludDhUYWciLCJ1aW50OENsYW1wZWRUYWciLCJ1aW50MTZUYWciLCJ1aW50MzJUYWciLCJ0eXBlZEFycmF5VGFncyIsImJhc2VJc1R5cGVkQXJyYXkiLCJfYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIl9iYXNlVW5hcnkiLCJmcmVlUHJvY2VzcyIsIm5vZGVVdGlsIiwidHlwZXMiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5XzEiLCJhcnJheUxpa2VLZXlzIiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiX2FycmF5TGlrZUtleXMiLCJpc1Byb3RvdHlwZSIsIkN0b3IiLCJwcm90byIsIl9pc1Byb3RvdHlwZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJhcmciLCJfb3ZlckFyZyIsIm5hdGl2ZUtleXMiLCJfbmF0aXZlS2V5cyIsImJhc2VLZXlzIiwiX2Jhc2VLZXlzIiwiaXNBcnJheUxpa2UiLCJpc0FycmF5TGlrZV8xIiwia2V5cyIsImtleXNfMSIsImJhc2VGb3JPd24iLCJfYmFzZUZvck93biIsInN0YWNrQ2xlYXIiLCJfc3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwiX3N0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJfc3RhY2tHZXQiLCJzdGFja0hhcyIsIl9zdGFja0hhcyIsIkxBUkdFX0FSUkFZX1NJWkUiLCJzdGFja1NldCIsInBhaXJzIiwiX3N0YWNrU2V0IiwiU3RhY2siLCJfU3RhY2siLCJzZXRDYWNoZUFkZCIsIl9zZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiX3NldENhY2hlSGFzIiwiU2V0Q2FjaGUiLCJfU2V0Q2FjaGUiLCJhcnJheVNvbWUiLCJwcmVkaWNhdGUiLCJfYXJyYXlTb21lIiwiY2FjaGVIYXMiLCJfY2FjaGVIYXMiLCJDT01QQVJFX1BBUlRJQUxfRkxBRyIsIkNPTVBBUkVfVU5PUkRFUkVEX0ZMQUciLCJlcXVhbEFycmF5cyIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiZXF1YWxGdW5jIiwic3RhY2siLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsIl9lcXVhbEFycmF5cyIsIlVpbnQ4QXJyYXkiLCJfVWludDhBcnJheSIsIm1hcFRvQXJyYXkiLCJfbWFwVG9BcnJheSIsInNldFRvQXJyYXkiLCJfc2V0VG9BcnJheSIsInN5bWJvbFZhbHVlT2YiLCJlcXVhbEJ5VGFnIiwiY29udmVydCIsInN0YWNrZWQiLCJfZXF1YWxCeVRhZyIsImFycmF5UHVzaCIsIm9mZnNldCIsIl9hcnJheVB1c2giLCJiYXNlR2V0QWxsS2V5cyIsInN5bWJvbHNGdW5jIiwiX2Jhc2VHZXRBbGxLZXlzIiwiYXJyYXlGaWx0ZXIiLCJyZXNJbmRleCIsIl9hcnJheUZpbHRlciIsInN0dWJBcnJheSIsInN0dWJBcnJheV8xIiwibmF0aXZlR2V0U3ltYm9scyIsImdldFN5bWJvbHMiLCJzeW1ib2wiLCJfZ2V0U3ltYm9scyIsImdldEFsbEtleXMiLCJfZ2V0QWxsS2V5cyIsImVxdWFsT2JqZWN0cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib3RoUHJvcHMiLCJvYmpTdGFja2VkIiwic2tpcEN0b3IiLCJvYmpWYWx1ZSIsIm9iakN0b3IiLCJvdGhDdG9yIiwiX2VxdWFsT2JqZWN0cyIsIkRhdGFWaWV3IiwiX0RhdGFWaWV3IiwiUHJvbWlzZSIsIl9Qcm9taXNlIiwiU2V0IiwiX1NldCIsIldlYWtNYXAiLCJfV2Vha01hcCIsInJlcXVpcmUkJDYiLCJwcm9taXNlVGFnIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiZ2V0VGFnIiwiY3RvclN0cmluZyIsIl9nZXRUYWciLCJyZXF1aXJlJCQ3IiwiYmFzZUlzRXF1YWxEZWVwIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJfYmFzZUlzRXF1YWxEZWVwIiwiYmFzZUlzRXF1YWwiLCJfYmFzZUlzRXF1YWwiLCJiYXNlSXNNYXRjaCIsIm1hdGNoRGF0YSIsIm5vQ3VzdG9taXplciIsInNyY1ZhbHVlIiwiX2Jhc2VJc01hdGNoIiwiaXNTdHJpY3RDb21wYXJhYmxlIiwiX2lzU3RyaWN0Q29tcGFyYWJsZSIsImdldE1hdGNoRGF0YSIsIl9nZXRNYXRjaERhdGEiLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIsIl9tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIsImJhc2VNYXRjaGVzIiwiX2Jhc2VNYXRjaGVzIiwiYmFzZUdldCIsIl9iYXNlR2V0IiwiZ2V0IiwiZGVmYXVsdFZhbHVlIiwiZ2V0XzEiLCJiYXNlSGFzSW4iLCJfYmFzZUhhc0luIiwiaGFzSW4iLCJoYXNJbl8xIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsIl9iYXNlTWF0Y2hlc1Byb3BlcnR5IiwiaWRlbnRpdHkiLCJpZGVudGl0eV8xIiwiYmFzZVByb3BlcnR5IiwiX2Jhc2VQcm9wZXJ0eSIsImJhc2VQcm9wZXJ0eURlZXAiLCJfYmFzZVByb3BlcnR5RGVlcCIsInByb3BlcnR5IiwicHJvcGVydHlfMSIsImJhc2VJdGVyYXRlZSIsIl9iYXNlSXRlcmF0ZWUiLCJtYXBWYWx1ZXMiLCJtYXBWYWx1ZXNfMSIsIkNhY2hlIiwibWF4U2l6ZSIsIlNQTElUX1JFR0VYIiwiRElHSVRfUkVHRVgiLCJMRUFEX0RJR0lUX1JFR0VYIiwiU1BFQ19DSEFSX1JFR0VYIiwiQ0xFQU5fUVVPVEVTX1JFR0VYIiwiTUFYX0NBQ0hFX1NJWkUiLCJwYXRoQ2FjaGUiLCJzZXRDYWNoZSIsImdldENhY2hlIiwicHJvcGVydHlFeHByIiwic3BsaXQiLCJub3JtYWxpemVQYXRoIiwicGFydHMiLCJsZW4iLCJwYXJ0Iiwic2FmZSIsInNlZ21lbnRzIiwiaXNRdW90ZWQiLCJ0aGlzQXJnIiwiZm9yRWFjaCIsIml0ZXIiLCJpc0JyYWNrZXQiLCJzaG91bGRCZVF1b3RlZCIsInN0ciIsImhhc0xlYWRpbmdOdW1iZXIiLCJoYXNTcGVjaWFsQ2hhcnMiLCJwcmVmaXhlcyIsIlJlZmVyZW5jZSIsInByZWZpeCIsImdldHRlciIsInBhcmVudCIsImNvbnRleHQiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImNyZWF0ZVZhbGlkYXRpb24iLCJjb25maWciLCJ2YWxpZGF0ZSIsIl9yZWYiLCJsYWJlbCIsInN5bmMiLCJyZXN0IiwibmFtZSIsInJlc29sdmUiLCJpdGVtIiwiUmVmIiwiY3JlYXRlRXJyb3IiLCJvdmVycmlkZXMiLCJuZXh0UGFyYW1zIiwiZXJyb3IiLCJjdHgiLCJ2YWxpZE9yRXJyb3IiLCJfcmVmMiIsInRyaW0iLCJnZXRJbiIsImxhc3RQYXJ0IiwibGFzdFBhcnREZWJ1ZyIsIl9wYXJ0IiwiUmVmZXJlbmNlU2V0IiwiZGVzY3JpcHRpb24iLCJhY2MiLCJlIiwibmV4dCIsIm5ld0l0ZW1zIiwicmVtb3ZlSXRlbXMiLCJCYXNlU2NoZW1hIiwibG9jYWxlIiwiX3ZhbHVlIiwic3BlYyIsImNsb25lRGVlcCIsImZuIiwiYmVmb3JlIiwiY29tYmluZWQiLCJtZXJnZWRTcGVjIiwidiIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJyZXNvbHZlZFNjaGVtYSIsImZvcm1hdHRlZFZhbHVlIiwiZm9ybWF0dGVkUmVzdWx0IiwicmF3VmFsdWUiLCJfb3B0aW9ucyIsImZyb20iLCJzdHJpY3QiLCJhYm9ydEVhcmx5IiwiaW5pdGlhbFRlc3RzIiwiZmluYWxUZXN0cyIsIm1heWJlQ2IiLCJyZWplY3QiLCJkZWYiLCJpc1N0cmljdCIsInMiLCJpc051bGxhYmxlIiwib3B0cyIsImlzRXhjbHVzaXZlIiwiZGVwcyIsImRlcCIsImVudW1zIiwidmFsaWRzIiwicmVzb2x2ZWQiLCJpbnZhbGlkcyIsInN0cmlwIiwibWV0YSIsImxpc3QiLCJjIiwibWV0aG9kIiwicGFyZW50UGF0aCIsImFsaWFzIiwiTWl4ZWQiLCJpc0Fic2VudCIsImNyZWF0ZSIsIkJvb2xlYW5TY2hlbWEiLCJyRW1haWwiLCJyVXJsIiwiclVVSUQiLCJpc1RyaW1tZWQiLCJvYmpTdHJpbmdUYWciLCJTdHJpbmdTY2hlbWEiLCJzdHJWYWx1ZSIsIm1pbiIsIm1heCIsInJlZ2V4IiwiZXhjbHVkZUVtcHR5U3RyaW5nIiwiaXNvUmVnIiwicGFyc2VJc29EYXRlIiwibnVtZXJpY0tleXMiLCJtaW51dGVzT2Zmc2V0IiwidGltZXN0YW1wIiwic3RydWN0IiwiayIsImludmFsaWREYXRlIiwiaXNEYXRlIiwiRGF0ZVNjaGVtYSIsImlzb1BhcnNlIiwicGFyYW0iLCJjYXN0IiwibGltaXQiLCJhcnJheVJlZHVjZSIsImFjY3VtdWxhdG9yIiwiaW5pdEFjY3VtIiwiX2FycmF5UmVkdWNlIiwiYmFzZVByb3BlcnR5T2YiLCJfYmFzZVByb3BlcnR5T2YiLCJkZWJ1cnJlZExldHRlcnMiLCJkZWJ1cnJMZXR0ZXIiLCJfZGVidXJyTGV0dGVyIiwicmVMYXRpbiIsInJzQ29tYm9NYXJrc1JhbmdlIiwicmVDb21ib0hhbGZNYXJrc1JhbmdlIiwicnNDb21ib1N5bWJvbHNSYW5nZSIsInJzQ29tYm9SYW5nZSIsInJzQ29tYm8iLCJyZUNvbWJvTWFyayIsImRlYnVyciIsImRlYnVycl8xIiwicmVBc2NpaVdvcmQiLCJhc2NpaVdvcmRzIiwiX2FzY2lpV29yZHMiLCJyZUhhc1VuaWNvZGVXb3JkIiwiaGFzVW5pY29kZVdvcmQiLCJfaGFzVW5pY29kZVdvcmQiLCJyc0FzdHJhbFJhbmdlIiwicnNEaW5nYmF0UmFuZ2UiLCJyc0xvd2VyUmFuZ2UiLCJyc01hdGhPcFJhbmdlIiwicnNOb25DaGFyUmFuZ2UiLCJyc1B1bmN0dWF0aW9uUmFuZ2UiLCJyc1NwYWNlUmFuZ2UiLCJyc1VwcGVyUmFuZ2UiLCJyc1ZhclJhbmdlIiwicnNCcmVha1JhbmdlIiwicnNBcG9zIiwicnNCcmVhayIsInJzRGlnaXRzIiwicnNEaW5nYmF0IiwicnNMb3dlciIsInJzTWlzYyIsInJzRml0eiIsInJzTW9kaWZpZXIiLCJyc05vbkFzdHJhbCIsInJzUmVnaW9uYWwiLCJyc1N1cnJQYWlyIiwicnNVcHBlciIsInJzWldKIiwicnNNaXNjTG93ZXIiLCJyc01pc2NVcHBlciIsInJzT3B0Q29udHJMb3dlciIsInJzT3B0Q29udHJVcHBlciIsInJlT3B0TW9kIiwicnNPcHRWYXIiLCJyc09wdEpvaW4iLCJyc09yZExvd2VyIiwicnNPcmRVcHBlciIsInJzU2VxIiwicnNFbW9qaSIsInJlVW5pY29kZVdvcmQiLCJ1bmljb2RlV29yZHMiLCJfdW5pY29kZVdvcmRzIiwid29yZHMiLCJndWFyZCIsIndvcmRzXzEiLCJyZUFwb3MiLCJjcmVhdGVDb21wb3VuZGVyIiwiX2NyZWF0ZUNvbXBvdW5kZXIiLCJzbmFrZUNhc2UiLCJ3b3JkIiwic25ha2VDYXNlXzEiLCJiYXNlU2xpY2UiLCJzdGFydCIsImVuZCIsIl9iYXNlU2xpY2UiLCJjYXN0U2xpY2UiLCJfY2FzdFNsaWNlIiwicmVIYXNVbmljb2RlIiwiaGFzVW5pY29kZSIsIl9oYXNVbmljb2RlIiwiYXNjaWlUb0FycmF5IiwiX2FzY2lpVG9BcnJheSIsInJzQXN0cmFsIiwicnNTeW1ib2wiLCJyZVVuaWNvZGUiLCJ1bmljb2RlVG9BcnJheSIsIl91bmljb2RlVG9BcnJheSIsInN0cmluZ1RvQXJyYXkiLCJfc3RyaW5nVG9BcnJheSIsImNyZWF0ZUNhc2VGaXJzdCIsIm1ldGhvZE5hbWUiLCJzdHJTeW1ib2xzIiwiY2hyIiwidHJhaWxpbmciLCJfY3JlYXRlQ2FzZUZpcnN0IiwidXBwZXJGaXJzdCIsInVwcGVyRmlyc3RfMSIsImNhcGl0YWxpemUiLCJjYXBpdGFsaXplXzEiLCJjYW1lbENhc2UiLCJjYW1lbENhc2VfMSIsIm1hcEtleXMiLCJtYXBLZXlzXzEiLCJ0b3Bvc29ydE1vZHVsZSIsImVkZ2VzIiwidG9wb3NvcnQiLCJ1bmlxdWVOb2RlcyIsIm5vZGVzIiwiY3Vyc29yIiwic29ydGVkIiwidmlzaXRlZCIsIm91dGdvaW5nRWRnZXMiLCJtYWtlT3V0Z29pbmdFZGdlcyIsIm5vZGVzSGFzaCIsIm1ha2VOb2Rlc0hhc2giLCJlZGdlIiwidmlzaXQiLCJub2RlIiwicHJlZGVjZXNzb3JzIiwibm9kZVJlcCIsIm91dGdvaW5nIiwiY2hpbGQiLCJhcnIiLCJyZXMiLCJzb3J0RmllbGRzIiwiZmllbGRzIiwiZXhjbHVkZWRFZGdlcyIsImV4Y2x1ZGVzIiwiYSIsImIiLCJhZGROb2RlIiwiZGVwUGF0aCIsImZpbmRJbmRleCIsImlpIiwiX2VyciRwYXRoIiwic29ydEJ5S2V5T3JkZXIiLCJ1bmtub3duIiwia25vd24iLCJkZWZhdWx0U29ydCIsIk9iamVjdFNjaGVtYSIsIl9vcHRpb25zJHN0cmlwVW5rbm93biIsImludGVybWVkaWF0ZVZhbHVlIiwiaW5uZXJPcHRpb25zIiwiaXNDaGFuZ2VkIiwicHJvcCIsImV4aXN0cyIsImZpZWxkVmFsdWUiLCJpbnB1dFZhbHVlIiwiZmllbGRTcGVjIiwicmVjdXJzaXZlIiwibmV4dEZpZWxkcyIsInNjaGVtYU9yUmVmIiwiZGZ0IiwiYWRkaXRpb25zIiwicGlja2VkIiwidG8iLCJmcm9tR2V0dGVyIiwibmV3T2JqIiwibm9BbGxvdyIsInVua25vd25LZXlzIiwiYWxsb3ciXSwibWFwcGluZ3MiOiI7QUFDQSxJQUFJQTtBQUNKLElBQUk7QUFDRixFQUFBQSxLQUFNO0FBQ1IsUUFBWTtBQUFBO0FBQ1osSUFBSUM7QUFHSixJQUFJO0FBQ0YsRUFBQUEsS0FBTTtBQUNSLFFBQVk7QUFBQTtBQUVaLFNBQVNDLEdBQVdDLEdBQUtDLEdBQVdDLEdBQVE7QUFFMUMsTUFBSSxDQUFDRixLQUFPLE9BQU9BLEtBQVEsWUFBWSxPQUFPQSxLQUFRO0FBQ3BELFdBQU9BO0FBSVQsTUFBSUEsRUFBSSxZQUFZLGVBQWVBO0FBQ2pDLFdBQU9BLEVBQUksVUFBVSxFQUFJO0FBSTNCLE1BQUlBLGFBQWU7QUFDakIsV0FBTyxJQUFJLEtBQUtBLEVBQUksUUFBUyxDQUFBO0FBSS9CLE1BQUlBLGFBQWU7QUFDakIsV0FBTyxJQUFJLE9BQU9BLENBQUc7QUFJdkIsTUFBSSxNQUFNLFFBQVFBLENBQUc7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QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUNoRCxHQUFRO0FBQUEsRUFBTSxHQUFRO0FBQUEsRUFBSyxHQUFRO0FBQUEsRUFBSyxHQUFRO0FBQUEsRUFDaEQsR0FBUTtBQUFBLEVBQU0sR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQ2hELEdBQVE7QUFBQSxFQUFNLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUNoRCxHQUFRO0FBQUEsRUFBTSxHQUFRO0FBQUEsRUFDdEIsR0FBUTtBQUFBLEVBQU0sR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQzFFLEdBQVE7QUFBQSxFQUFNLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUMxRSxHQUFRO0FBQUEsRUFBTSxHQUFRO0FBQUEsRUFBSyxHQUFRO0FBQUEsRUFBSyxHQUFRO0FBQUEsRUFDaEQsR0FBUTtBQUFBLEVBQU0sR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQUssR0FBUTtBQUFBLEVBQ2hELEdBQVE7QUFBQSxFQUFNLEdBQVE7QUFBQSxFQUFLLEdBQVE7QUFBQSxFQUNuQyxHQUFRO0FBQUEsRUFBTSxHQUFRO0FBQUEsRUFDdEIsR0FBUTtBQUFBLEVBQU0sR0FBUTtBQUFBLEVBQ3RCLEdBQVE7QUFBQTtBQUFBLEVBRVIsR0FBVTtBQUFBLEVBQU0sR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQ3pDLEdBQVU7QUFBQSxFQUFNLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUN6QyxHQUFVO0FBQUEsRUFBTSxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFDeEQsR0FBVTtBQUFBLEVBQU0sR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQ3hELEdBQVU7QUFBQSxFQUFNLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUN4RCxHQUFVO0FBQUEsRUFBTSxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFDdkUsR0FBVTtBQUFBLEVBQU0sR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQ3ZFLEdBQVU7QUFBQSxFQUFNLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUN4RCxHQUFVO0FBQUEsRUFBTSxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFDeEQsR0FBVTtBQUFBLEVBQU0sR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQ3hELEdBQVU7QUFBQSxFQUFNLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUN2RSxHQUFVO0FBQUEsRUFBTSxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFDdkUsR0FBVTtBQUFBLEVBQU0sR0FBVTtBQUFBLEVBQzFCLEdBQVU7QUFBQSxFQUFNLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUN6QyxHQUFVO0FBQUEsRUFBTSxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFDdkUsR0FBVTtBQUFBLEVBQU0sR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQUssR0FBVTtBQUFBLEVBQ3ZFLEdBQVU7QUFBQSxFQUFNLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUFLLEdBQVU7QUFBQSxFQUN4RCxHQUFVO0FBQUEsRUFBTSxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFBSyxHQUFVO0FBQUEsRUFDeEQsR0FBVTtBQUFBLEVBQU0s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MCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjcsMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjZdfQ==\n","const e = /^[a-zA-ZÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿÀ-žð∂ ,'.-]+$/, r = /^[a-zA-ZÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿÀ-žð∂0-9 ,'./-]+$/, n = /^\\+?\\d{1,4}?[-.\\s]?\\(?\\d{1,3}?\\)?[-.\\s]?\\d{1,4}[-.\\s]?\\d{1,4}[-.\\s]?\\d{1,9}$/, a = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]{2,}\\.[a-zA-Z]{2,}$/, s = /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/, c = /^[a-zA-ZÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿÀ-žð∂0-9 ,'./-]+$/, i = /^[a-zA-Z0-9- ]*$/, d = /^[a-zA-Z0-9 ,'.-]+$/, $ = /[A-Z0-9 ,'.-]{1,14}/i, u = /^[a-zA-ZÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿÀ-žð∂ ,.'-/\\n/]+$/, o = /^[0-9 ]*$/, A = /^[A-Za-z]{6}[2-9A-Za-z][0-9A-Na-nP-Zp-z]([A-Za-z0-9]{3}|X{3})?$/, Z = /^[a-zA-Z0-9 .'-]+$/, z = (t) => {\n switch (t) {\n case \"AT\":\n return /^(AT)(U\\d{8}$)/i;\n case \"BE\":\n return /^(BE)(\\d{10}$)/i;\n case \"BG\":\n return /^(BG)(\\d{9,10}$)/i;\n case \"HR\":\n return /^(HR)(\\d{11}$)/i;\n case \"CY\":\n return /^(CY)([0-5|9]\\d{7}[A-Z]$)/i;\n case \"CZ\":\n return /^(CZ)(\\d{8,10})?$/i;\n case \"DE\":\n return /^(DE)([1-9]\\d{8}$)/i;\n case \"DK\":\n return /^(DK)(\\d{8}$)/i;\n case \"EE\":\n return /^(EE)(10\\d{7}$)/i;\n case \"EL\":\n return /^(EL|GR)(\\d{9}$)/i;\n case \"ES\":\n return /^(ES)([0-9A-Z][0-9]{7}[0-9A-Z]$)/i;\n case \"FI\":\n return /^(FI)(\\d{8}$)/i;\n case \"FR\":\n return /^(FR)([0-9A-Z]{2}[0-9]{9}$)/i;\n case \"HU\":\n return /^(HU)(\\d{8}$)/i;\n case \"IE\":\n return /^(IE)([0-9A-Z\\*\\+]{7}[A-Z]{1,2}$)/i;\n case \"IT\":\n return /^(IT)(\\d{11}$)/i;\n case \"LT\":\n return /^(LT)(\\d{9}$|\\d{12}$)/i;\n case \"LU\":\n return /^(LU)(\\d{8}$)/i;\n case \"LV\":\n return /^(LV)(\\d{11}$)/i;\n case \"MT\":\n return /^(MT)([1-9]\\d{7}$)/i;\n case \"NL\":\n return /^(NL)(\\d{9}B\\d{2}$)/i;\n case \"PL\":\n return /^(PL)(\\d{10}$)/i;\n case \"PT\":\n return /^(PT)(\\d{9}$)/i;\n case \"RO\":\n return /^(RO)([1-9]\\d{1,9}$)/i;\n case \"SK\":\n return /^(SK)([1-9]\\d[(2-4)|(6-9)]\\d{7}$)/i;\n case \"SI\":\n return /^(SI)([1-9]\\d{7}$)/i;\n case \"SE\":\n return /^(SE)(\\d{10}01$)/i;\n default:\n return /[A-Z0-9]{1,14}/i;\n }\n};\nexport {\n c as addressLinepattern,\n o as bankAccountNoPattern,\n d as commonTextPattern,\n r as commonTextWithDiacritesPattern,\n e as commonTextWithDiacritesWithoutNumbers,\n u as descriptionpattern,\n a as emailPattern,\n z as euCountriesVATPattern,\n $ as freeTextVATPattern,\n Z as personIdPattern,\n n as phonePattern,\n i as postalCodePattern,\n A as swiftCodePattern,\n s as webAddressPattern\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXgtdXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9yZWdleC11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNXaXRob3V0TnVtYmVycyA9XG4gIC9eW2EtekEtWsOALcOWw5gtw7bDuC3Er8S0LcWRxZQtxb7HjS3HsMe0Lce1x7gtyJvIni3In8ikLcizyYPJhi3Jj+G4gC3hup7GgC3Gk8aXLcaaxp0txqHGpC3GpcarLcawxrItxrbhuqAt4bu/w4Atxb7DsOKIgiAsJy4tXSskLztcbmV4cG9ydCBjb25zdCBjb21tb25UZXh0V2l0aERpYWNyaXRlc1BhdHRlcm4gPVxuICAvXlthLXpBLVrDgC3DlsOYLcO2w7gtxK/EtC3FkcWULcW+x40tx7DHtC3Htce4LcibyJ4tyJ/IpC3Is8mDyYYtyY/huIAt4bqexoAtxpPGly3GmsadLcahxqQtxqXGqy3GsMayLca24bqgLeG7v8OALcW+w7DiiIIwLTkgLCcuLy1dKyQvO1xuZXhwb3J0IGNvbnN0IHBob25lUGF0dGVybiA9XG4gIC9eXFwrP1xcZHsxLDR9P1stLlxcc10/XFwoP1xcZHsxLDN9P1xcKT9bLS5cXHNdP1xcZHsxLDR9Wy0uXFxzXT9cXGR7MSw0fVstLlxcc10/XFxkezEsOX0kLztcbmV4cG9ydCBjb25zdCBlbWFpbFBhdHRlcm4gPVxuICAvXlthLXpBLVowLTkuXyUrLV0rQFthLXpBLVowLTkuLV17Mix9XFwuW2EtekEtWl17Mix9JC87XG5leHBvcnQgY29uc3Qgd2ViQWRkcmVzc1BhdHRlcm4gPVxuICAvXihodHRwOlxcL1xcL3d3d1xcLnxodHRwczpcXC9cXC93d3dcXC58aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsxLDI1Nn1cXC5bYS16QS1aMC05KCldezEsNn1cXGIoPzpbLWEtekEtWjAtOSgpQDolX1xcKy5+Iz8mXFwvPV0qKSQvO1xuZXhwb3J0IGNvbnN0IGFkZHJlc3NMaW5lcGF0dGVybiA9XG4gIC9eW2EtekEtWsOALcOWw5gtw7bDuC3Er8S0LcWRxZQtxb7HjS3HsMe0Lce1x7gtyJvIni3In8ikLcizyYPJhi3Jj+G4gC3hup7GgC3Gk8aXLcaaxp0txqHGpC3GpcarLcawxrItxrbhuqAt4bu/w4Atxb7DsOKIgjAtOSAsJy4vLV0rJC87XG5leHBvcnQgY29uc3QgcG9zdGFsQ29kZVBhdHRlcm4gPSAvXlthLXpBLVowLTktIF0qJC87IC8vL15cXHMqKFthLXpBLVowLTktXVxccyopJC87XG4vL2V4cG9ydCBjb25zdCB2YXRQYXR0ZXJuID0gLyhBVCk/VVswLTldezh9fChCRSk/MFswLTldezl9fChCRyk/WzAtOV17OSwxMH18KEhSKT9bMC05XXsxMX18KENZKT9bMC05XXs4fVtBLVpdfChDWik/WzAtOV17OCwxMH18KERFKT9bMC05XXs5fXwoREspP1swLTldezh9fChFRSk/WzAtOV17OX18KEVMfEdSKT9bMC05XXs5fXwoRVMpP1swLTlBLVpdWzAtOV17N31bMC05QS1aXXwoRkkpP1swLTldezh9fChGUik/WzAtOUEtWl17Mn1bMC05XXs5fXxbQS1aXXsyfVswLTldezN9KXwoSFUpP1swLTldezh9fChJRSk/WzAtOV1TWzAtOV17NX1bQS1aXXwoSVQpP1swLTldezExfXwoTFQpPyhbMC05XXs5fXxbMC05XXsxMn0pfChMVSk/WzAtOV17OH18KExWKT9bMC05XXsxMX18KE1UKT9bMC05XXs4fXwoTkwpP1swLTldezl9QlswLTldezJ9fChQTCk/WzAtOV17MTB9fChQVCk/WzAtOV17OX18KFJPKT9bMC05XXsyLDEwfXwoU0UpP1swLTldezEyfXwoU0kpP1swLTldezh9fChTSyk/WzAtOV17MTB9JC87XG5leHBvcnQgY29uc3QgY29tbW9uVGV4dFBhdHRlcm4gPSAvXlthLXpBLVowLTkgLCcuLV0rJC87XG5leHBvcnQgY29uc3QgZnJlZVRleHRWQVRQYXR0ZXJuID0gL1tBLVowLTkgLCcuLV17MSwxNH0vaTtcbmV4cG9ydCBjb25zdCBkZXNjcmlwdGlvbnBhdHRlcm4gPVxuICAvXlthLXpBLVrDgC3DlsOYLcO2w7gtxK/EtC3FkcWULcW+x40tx7DHtC3Htce4LcibyJ4tyJ/IpC3Is8mDyYYtyY/huIAt4bqexoAtxpPGly3GmsadLcahxqQtxqXGqy3GsMayLca24bqgLeG7v8OALcW+w7DiiIIgLC4nLS9cXG4vXSskLztcbmV4cG9ydCBjb25zdCBiYW5rQWNjb3VudE5vUGF0dGVybiA9IC9eWzAtOSBdKiQvO1xuZXhwb3J0IGNvbnN0IHN3aWZ0Q29kZVBhdHRlcm4gPVxuICAvXltBLVphLXpdezZ9WzItOUEtWmEtel1bMC05QS1OYS1uUC1acC16XShbQS1aYS16MC05XXszfXxYezN9KT8kLztcbmV4cG9ydCBjb25zdCBwZXJzb25JZFBhdHRlcm4gPSAvXlthLXpBLVowLTkgLictXSskLztcblxuZXhwb3J0IGNvbnN0IGV1Q291bnRyaWVzVkFUUGF0dGVybiA9IChjb2RlOiBzdHJpbmcpID0+IHtcbiAgc3dpdGNoIChjb2RlKSB7XG4gICAgY2FzZSBcIkFUXCI6XG4gICAgICByZXR1cm4gL14oQVQpKFVcXGR7OH0kKS9pO1xuICAgIGNhc2UgXCJCRVwiOlxuICAgICAgcmV0dXJuIC9eKEJFKShcXGR7MTB9JCkvaTtcbiAgICBjYXNlIFwiQkdcIjpcbiAgICAgIHJldHVybiAvXihCRykoXFxkezksMTB9JCkvaTtcbiAgICBjYXNlIFwiSFJcIjpcbiAgICAgIHJldHVybiAvXihIUikoXFxkezExfSQpL2k7XG4gICAgY2FzZSBcIkNZXCI6XG4gICAgICByZXR1cm4gL14oQ1kpKFswLTV8OV1cXGR7N31bQS1aXSQpL2k7XG4gICAgY2FzZSBcIkNaXCI6XG4gICAgICByZXR1cm4gL14oQ1opKFxcZHs4LDEwfSk/JC9pO1xuICAgIGNhc2UgXCJERVwiOlxuICAgICAgcmV0dXJuIC9eKERFKShbMS05XVxcZHs4fSQpL2k7XG4gICAgY2FzZSBcIkRLXCI6XG4gICAgICByZXR1cm4gL14oREspKFxcZHs4fSQpL2k7XG4gICAgY2FzZSBcIkVFXCI6XG4gICAgICByZXR1cm4gL14oRUUpKDEwXFxkezd9JCkvaTtcbiAgICBjYXNlIFwiRUxcIjpcbiAgICAgIHJldHVybiAvXihFTHxHUikoXFxkezl9JCkvaTtcbiAgICBjYXNlIFwiRVNcIjpcbiAgICAgIHJldHVybiAvXihFUykoWzAtOUEtWl1bMC05XXs3fVswLTlBLVpdJCkvaTtcbiAgICBjYXNlIFwiRklcIjpcbiAgICAgIHJldHVybiAvXihGSSkoXFxkezh9JCkvaTtcbiAgICBjYXNlIFwiRlJcIjpcbiAgICAgIHJldHVybiAvXihGUikoWzAtOUEtWl17Mn1bMC05XXs5fSQpL2k7XG4gICAgY2FzZSBcIkhVXCI6XG4gICAgICByZXR1cm4gL14oSFUpKFxcZHs4fSQpL2k7XG4gICAgY2FzZSBcIklFXCI6XG4gICAgICByZXR1cm4gL14oSUUpKFswLTlBLVpcXCpcXCtdezd9W0EtWl17MSwyfSQpL2k7XG4gICAgY2FzZSBcIklUXCI6XG4gICAgICByZXR1cm4gL14oSVQpKFxcZHsxMX0kKS9pO1xuICAgIGNhc2UgXCJMVFwiOlxuICAgICAgcmV0dXJuIC9eKExUKShcXGR7OX0kfFxcZHsxMn0kKS9pO1xuICAgIGNhc2UgXCJMVVwiOlxuICAgICAgcmV0dXJuIC9eKExVKShcXGR7OH0kKS9pO1xuICAgIGNhc2UgXCJMVlwiOlxuICAgICAgcmV0dXJuIC9eKExWKShcXGR7MTF9JCkvaTtcbiAgICBjYXNlIFwiTVRcIjpcbiAgICAgIHJldHVybiAvXihNVCkoWzEtOV1cXGR7N30kKS9pO1xuICAgIGNhc2UgXCJOTFwiOlxuICAgICAgcmV0dXJuIC9eKE5MKShcXGR7OX1CXFxkezJ9JCkvaTtcbiAgICBjYXNlIFwiUExcIjpcbiAgICAgIHJldHVybiAvXihQTCkoXFxkezEwfSQpL2k7XG4gICAgY2FzZSBcIlBUXCI6XG4gICAgICByZXR1cm4gL14oUFQpKFxcZHs5fSQpL2k7XG4gICAgY2FzZSBcIlJPXCI6XG4gICAgICByZXR1cm4gL14oUk8pKFsxLTldXFxkezEsOX0kKS9pO1xuICAgIGNhc2UgXCJTS1wiOlxuICAgICAgcmV0dXJuIC9eKFNLKShbMS05XVxcZFsoMi00KXwoNi05KV1cXGR7N30kKS9pO1xuICAgIGNhc2UgXCJTSVwiOlxuICAgICAgcmV0dXJuIC9eKFNJKShbMS05XVxcZHs3fSQpL2k7XG4gICAgY2FzZSBcIlNFXCI6XG4gICAgICByZXR1cm4gL14oU0UpKFxcZHsxMH0wMSQpL2k7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAvW0EtWjAtOV17MSwxNH0vaTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzIiwiY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNQYXR0ZXJuIiwicGhvbmVQYXR0ZXJuIiwiZW1haWxQYXR0ZXJuIiwid2ViQWRkcmVzc1BhdHRlcm4iLCJhZGRyZXNzTGluZXBhdHRlcm4iLCJwb3N0YWxDb2RlUGF0dGVybiIsImNvbW1vblRleHRQYXR0ZXJuIiwiZnJlZVRleHRWQVRQYXR0ZXJuIiwiZGVzY3JpcHRpb25wYXR0ZXJuIiwiYmFua0FjY291bnROb1BhdHRlcm4iLCJzd2lmdENvZGVQYXR0ZXJuIiwicGVyc29uSWRQYXR0ZXJuIiwiZXVDb3VudHJpZXNWQVRQYXR0ZXJuIiwiY29kZSJdLCJtYXBwaW5ncyI6IkFBQU8sTUFBTUEsSUFDWCxtRkFDV0MsSUFDWCx1RkFDV0MsSUFDWCxnRkFDV0MsSUFDWCx1REFDV0MsSUFDWCxnSkFDV0MsSUFDWCx1RkFDV0MsSUFBb0Isb0JBRXBCQyxJQUFvQix1QkFDcEJDLElBQXFCLHdCQUNyQkMsSUFDWCx1RkFDV0MsSUFBdUIsYUFDdkJDLElBQ1gsbUVBQ1dDLElBQWtCLHNCQUVsQkMsSUFBd0IsQ0FBQ0MsTUFBaUI7QUFDckQsVUFBUUEsR0FBTTtBQUFBLElBQ1osS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1QsS0FBSztBQUNJLGFBQUE7QUFBQSxJQUNULEtBQUs7QUFDSSxhQUFBO0FBQUEsSUFDVCxLQUFLO0FBQ0ksYUFBQTtBQUFBLElBQ1Q7QUFDUyxhQUFBO0FBQUEsRUFBQTtBQUViOyJ9\n","var I = /* @__PURE__ */ ((E) => (E.REGISTERED = \"REGISTERED\", E.DECLINED = \"DECLINED\", E.ACTIVE = \"ACTIVE\", E.INACTIVE = \"INACTIVE\", E))(I || {}), C = /* @__PURE__ */ ((E) => (E.INVOICE = \"INVOICE\", E.COMPANY = \"COMPANY\", E))(C || {});\nexport {\n C as AddressType,\n I as OrganisationStatus\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9ucy5tb2RlbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbGliL21vZGVscy9vcmdhbmlzYXRpb25zLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBPcmdhbmlzYXRpb25SZXNwb25zZSB7XG4gIG9yZ2FuaXNhdGlvbklkOiBudW1iZXI7XG4gIHRtYUlkOiBzdHJpbmc7XG4gIG9yZ2FuaXNhdGlvbk5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgbXNwaWQ6IHN0cmluZztcbiAgd2ViQWRkcmVzczogc3RyaW5nO1xuICBzdGF0dXM6IE9yZ2FuaXNhdGlvblN0YXR1cztcbiAgcmVnaXN0cmF0aW9uRGF0ZTogc3RyaW5nO1xuICBhcHByb3ZhbERhdGU6IHN0cmluZztcbiAgbGFzdFVwZGF0ZWREYXRlOiBzdHJpbmc7XG5cbiAgYWRkcmVzc2VzOiBPcmdhbmlzYXRpb25BZGRyZXNzW107XG4gIGNvbnRhY3RQZXJzb246IE9yZ2FuaXNhdGlvbkNvbnRhY3RQZXJzb247XG4gIGxlZ2FsSW5mbzogT3JnYW5pc2F0aW9uTGVnYWxJbmZvO1xuICBzaWduYXRvcnlBdXRob3JpdHlJbmZvOiBPcmdhbmlzYXRpb25TaWduYXRvcnlBdXRob3JpdHlJbmZvO1xuICBiYW5rSW5mbzogT3JnYW5pc2F0aW9uQmFua0luZm87XG4gIGJpbGxpbmdJbmZvOiBPcmdhbmlzYXRpb25CaWxsaW5nSW5mbztcbiAgYXR0YWNobWVudHM6IE9yZ2FuaXNhdGlvbkF0dGFjaG1lbnRbXTtcblxuICBzaGlwcGVyUm9sZT86IGJvb2xlYW47XG4gIGNhcnJpZXJSb2xlPzogYm9vbGVhbjtcbiAgY2NSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBsYlJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbmVudW0gT3JnYW5pc2F0aW9uU3RhdHVzIHtcbiAgUkVHSVNURVJFRCA9IFwiUkVHSVNURVJFRFwiLFxuICBERUNMSU5FRCA9IFwiREVDTElORURcIixcbiAgQUNUSVZFID0gXCJBQ1RJVkVcIixcbiAgSU5BQ1RJVkUgPSBcIklOQUNUSVZFXCIsXG59XG5cbmludGVyZmFjZSBPcmdhbmlzYXRpb25TaWduYXRvcnlBdXRob3JpdHlJbmZvIHtcbiAgbmFtZTogc3RyaW5nO1xuICBzdXJuYW1lOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIC8vdGVtcCBzb2x1dGlvbiAtIGhhbmRsaW5nIG9sZCBhbmQgbmV3IHJlZyBtb2RlbFxuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgc2FtZUFzQWRtaW46IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pc2F0aW9uQXR0YWNobWVudCB7XG4gIGNyZWF0aW9uRGF0ZT86IERhdGU7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBmaWxlTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIG1pbWVUeXBlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uTGVnYWxJbmZvIHtcbiAgY29tcGFueUxlZ2FsRm9ybT86IHN0cmluZztcbiAgY29ycG9yYXRlTGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGNvbXBhbnlSZWdpc3RyYXRpb25OdW1iZXI/OiBzdHJpbmc7XG4gIHJlZ2lzdGVyaW5nQm9keT86IHN0cmluZztcbiAgdmF0UmVnaXN0cmF0aW9uTnVtYmVyPzogc3RyaW5nO1xuICBnczFDb21wYW55UHJlZml4Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uQmFua0luZm8ge1xuICBiYW5rTmFtZT86IHN0cmluZztcbiAgYmFua0JyYW5jaE5hbWU/OiBzdHJpbmc7XG4gIGJhbmtBY2NvdW50TnVtYmVyPzogc3RyaW5nO1xuICBpYmFuTnVtYmVyPzogc3RyaW5nO1xuICBzd2lmdENvZGU/OiBzdHJpbmc7XG4gIGJpY0NvZGU/OiBzdHJpbmc7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uQmlsbGluZ0luZm8ge1xuICBsb2dpdml0eVBvTnVtYmVyPzogc3RyaW5nO1xuICBsb2dpZnlQb051bWJlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmdhbmlzYXRpb25Db250YWN0UGVyc29uIHtcbiAgY29udGFjdE5hbWU6IHN0cmluZztcbiAgY29udGFjdFN1cm5hbWU6IHN0cmluZztcbiAgY29udGFjdFBob25lTnVtYmVyOiBzdHJpbmc7XG4gIGNvbnRhY3RFbWFpbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uQWRkcmVzcyB7XG4gIGFkZHJlc3NMaW5lMTogc3RyaW5nO1xuICBhZGRyZXNzTGluZTI/OiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgY291bnRyeUNvZGU6IHN0cmluZztcbiAgY291bnR5OiBzdHJpbmc7XG4gIHBvc3RhbENvZGU6IHN0cmluZztcbiAgYWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlO1xufVxuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uUmVnaXN0cmF0aW9uUGF5bG9hZCB7XG4gIG9yZ2FuaXNhdGlvbk5hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgd2ViQWRkcmVzczogc3RyaW5nO1xuXG4gIGFkZHJlc3NlczogT3JnYW5pc2F0aW9uQWRkcmVzc1tdO1xuICBjb250YWN0UGVyc29uOiBPcmdhbmlzYXRpb25Db250YWN0UGVyc29uO1xuICBsZWdhbEluZm86IE9yZ2FuaXNhdGlvbkxlZ2FsSW5mbztcbiAgc2lnbmF0b3J5QXV0aG9yaXR5SW5mbz86IE9yZ2FuaXNhdGlvblNpZ25hdG9yeUF1dGhvcml0eUluZm87XG4gIGJpbGxpbmdJbmZvOiBPcmdhbmlzYXRpb25CaWxsaW5nSW5mbztcbn1cblxuaW50ZXJmYWNlIE9yZ2FuaXNhdGlvblVwZGF0ZVBheWxvYWQge1xuICBjb250YWN0UGVyc29uOiBPcmdhbmlzYXRpb25Db250YWN0UGVyc29uO1xufVxuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uUmVnaXN0cmF0aW9uQWNjZXB0UmVzcG9uc2Uge1xuICBvcmdhbmlzYXRpb25JZDogbnVtYmVyO1xuICB0bWFJZDogc3RyaW5nO1xuICBlcnBDdXN0b21lckNyZWF0ZWQ6IGJvb2xlYW47XG4gIGVycFN1cHBvcnROb3RpZmllZE9mRmFpbHVyZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIE9yZ2FuaXNhdGlvblJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgZ3JvdXBJZDogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbn1cblxuZW51bSBBZGRyZXNzVHlwZSB7XG4gIElOVk9JQ0UgPSBcIklOVk9JQ0VcIixcbiAgQ09NUEFOWSA9IFwiQ09NUEFOWVwiLFxufVxuXG5leHBvcnQgdHlwZSB7XG4gIE9yZ2FuaXNhdGlvbkFkZHJlc3MsXG4gIE9yZ2FuaXNhdGlvblJlc3BvbnNlLFxuICBPcmdhbmlzYXRpb25CYW5rSW5mbyxcbiAgT3JnYW5pc2F0aW9uQmlsbGluZ0luZm8sXG4gIE9yZ2FuaXNhdGlvblJlZ2lzdHJhdGlvbkFjY2VwdFJlc3BvbnNlLFxuICBPcmdhbmlzYXRpb25SZWdpc3RyYXRpb25QYXlsb2FkLFxuICBPcmdhbmlzYXRpb25SZWdpc3RyYXRpb25SZXNwb25zZSxcbiAgT3JnYW5pc2F0aW9uVXBkYXRlUGF5bG9hZCxcbn07XG5leHBvcnQgeyBBZGRyZXNzVHlwZSwgT3JnYW5pc2F0aW9uU3RhdHVzIH07XG4iXSwibmFtZXMiOlsiT3JnYW5pc2F0aW9uU3RhdHVzIiwiQWRkcmVzc1R5cGUiXSwibWFwcGluZ3MiOiJBQTJCSyxJQUFBQSxzQkFBQUEsT0FDSEEsRUFBQSxhQUFhLGNBQ2JBLEVBQUEsV0FBVyxZQUNYQSxFQUFBLFNBQVMsVUFDVEEsRUFBQSxXQUFXLFlBSlJBLElBQUFBLEtBQUEsQ0FBQSxDQUFBLEdBOEZBQyxzQkFBQUEsT0FDSEEsRUFBQSxVQUFVLFdBQ1ZBLEVBQUEsVUFBVSxXQUZQQSxJQUFBQSxLQUFBLENBQUEsQ0FBQTsifQ==\n","import { c as b, a as m, b as N } from \"../../../object-BoWdjekM.js\";\nimport { euCountriesVATPattern as q, freeTextVATPattern as A, commonTextWithDiacritesWithoutNumbers as a, phonePattern as s, emailPattern as g, commonTextWithDiacritesPattern as f, webAddressPattern as P, addressLinepattern as v, postalCodePattern as S } from \"../../../utils/regex-utils.js\";\nimport { AddressType as $ } from \"../../../models/organisations.model.js\";\nconst T = (r) => ({\n orgName: (r == null ? void 0 : r.orgName) || \"\",\n email: (r == null ? void 0 : r.email) || \"\",\n phoneNumber: (r == null ? void 0 : r.phoneNumber) || \"\",\n webAddress: (r == null ? void 0 : r.webAddress) || \"\",\n addressLine1: (r == null ? void 0 : r.addressLine1) || \"\",\n addressLine2: (r == null ? void 0 : r.addressLine2) || \"\",\n city: (r == null ? void 0 : r.city) || \"\",\n country: (r == null ? void 0 : r.country) || \"\",\n county: (r == null ? void 0 : r.county) || \"\",\n postalCode: (r == null ? void 0 : r.postalCode) || \"\",\n companyLegalForm: (r == null ? void 0 : r.companyLegalForm) || \"\",\n // corporateLanguage: initialValues?.corporateLanguage || '',\n companyRegistrationNo: (r == null ? void 0 : r.companyRegistrationNo) || \"\",\n // registeringBody: initialValues?.registeringBody || '',\n vatRegistrationNumber: (r == null ? void 0 : r.vatRegistrationNumber) || \"\",\n // gs1CompanyPrefix: initialValues?.gs1CompanyPrefix || '',\n logivityPoNumber: (r == null ? void 0 : r.logivityPoNumber) || \"\",\n signatoryName: (r == null ? void 0 : r.signatoryName) || \"\",\n signatorySurname: (r == null ? void 0 : r.signatorySurname) || \"\",\n signatoryEmail: (r == null ? void 0 : r.signatoryEmail) || \"\",\n signatoryPhoneNumber: (r == null ? void 0 : r.signatoryPhoneNumber) || \"\",\n signatorySameAsAdmin: (r == null ? void 0 : r.signatorySameAsAdmin) && (r == null ? void 0 : r.signatorySameAsAdmin.toString()) || \"\",\n adminName: (r == null ? void 0 : r.adminName) || \"\",\n adminPhoneNumber: (r == null ? void 0 : r.adminPhoneNumber) || \"\",\n adminSurname: (r == null ? void 0 : r.adminSurname) || \"\",\n adminEmail: (r == null ? void 0 : r.adminEmail) || \"\",\n adminUsePolicyAccepted: (r == null ? void 0 : r.adminUsePolicyAccepted) || !1\n}), i = (r, t, o) => !(t && o && o.findIndex((e) => e.fieldName === r) > -1), w = (r, t, o) => {\n if (o.findIndex(\n (e) => e.code === r.parent.country\n ) > -1) {\n const e = o.filter((d) => d.code === r.parent.country);\n return q(e[0].vatcode).test(t);\n } else\n return A.test(t);\n}, c = (r, t) => r.replace(/\\s/g, \"\").length <= t, L = (r, t) => ({\n adminName: m().trim().required(r(\"validations.registration.adminnamerequired\")).matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(64, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 64)),\n adminPhoneNumber: m().trim().required(r(\"validations.registration.adminphonerequired\")).matches(s, r(\"validations.commons.phonepattern\")).test(\n \"max-length-validator\",\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 15),\n (o) => o ? c(o, 15) : !0\n ),\n adminSurname: m().trim().required(r(\"validations.registration.adminsurnamerequired\")).matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(64, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 64)),\n adminEmail: m().trim().required(r(\"validations.registration.emailrequired\")).email(r(\"validations.commons.validemail\")).matches(g, r(\"validations.commons.validemail\")).max(254, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 254)).test(\n \"server-error\",\n r(\"register.emailalreadyinuse\"),\n (o, e) => i(e.path, o, t)\n ),\n adminUsePolicyAccepted: N().oneOf(\n [!0],\n r(\"validations.registration.acceptpolicyrequired\")\n ),\n signatorySameAsAdmin: m().required(\n r(\"validations.registration.authrizationselectionrequired\")\n ),\n signatoryName: m().trim().when(\"signatorySameAsAdmin\", {\n is: \"false\",\n then: m().required(r(\"validations.registration.authnamerequired\")).matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(\n 64,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 64)\n )\n }),\n signatoryPhoneNumber: m().trim().when(\"signatorySameAsAdmin\", {\n is: \"false\",\n then: m().required(r(\"validations.registration.authphonerequired\")).matches(s, r(\"validations.commons.phonepattern\")).test(\n \"max-length-validator\",\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 15),\n (o) => o ? c(o, 15) : !0\n )\n }),\n signatorySurname: m().trim().when(\"signatorySameAsAdmin\", {\n is: \"false\",\n then: m().required(r(\"validations.registration.authsurnamerequired\")).matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(\n 64,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 64)\n )\n }),\n signatoryEmail: m().trim().when(\"signatorySameAsAdmin\", {\n is: \"false\",\n then: m().required(r(\"validations.registration.authemailrequired\")).email(r(\"validations.commons.validemail\")).matches(g, r(\"validations.commons.validemail\")).max(\n 254,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 254)\n )\n }).test(\n \"isDifferentEmails\",\n r(\"validations.commons.differentemail\"),\n (o, e) => {\n var d, h, p, x, y;\n const n = e;\n return ((h = (d = n == null ? void 0 : n.from[0]) == null ? void 0 : d.value) == null ? void 0 : h.signatorySameAsAdmin) === \"true\" || !(o != null && o.trim()) || ((y = (x = (p = n == null ? void 0 : n.from[0]) == null ? void 0 : p.value) == null ? void 0 : x.adminEmail) == null ? void 0 : y.trim()) !== (o == null ? void 0 : o.trim());\n }\n )\n}), R = (r, t, o) => ({\n orgName: m().trim().required(r(\"validations.registration.orgrequired\")).matches(\n f,\n r(\"validations.commons.commontextWithdiacritespattern\")\n ).max(80, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 80)),\n vatRegistrationNumber: m().trim().required(r(\"validations.commons.required\")).when(\"country\", {\n is: (e) => t.findIndex((n) => n.code === e) > -1,\n then: m().required(r(\"validations.registration.vatrequired\"))\n }).max(14, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 14)).test(\n \"vat-pattern-error\",\n r(\n \"validations.registration.orgdetails.vatRegistrationNumber.patternerror\"\n ),\n (e, n) => e ? w(n, e, t) : !0\n ).test(\n \"server-error\",\n r(\"register.vatregistrationnumberalreadyinuse\"),\n (e, n) => i(n.path, e, o)\n ),\n companyRegistrationNo: m().trim().required(r(\"validations.registration.orgregnumberrequired\")).max(15, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 15)).test(\n \"server-error\",\n r(\"register.orgregistrationnumberalreadyinuse\"),\n (e, n) => i(n.path, e, o)\n ),\n companyLegalForm: m().trim().required(r(\"validations.registration.orglegalformrequired\")).matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(\n 100,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 100)\n ),\n email: m().trim().required(r(\"validations.registration.orgemailrequired\")).email(r(\"validations.commons.validemail\")).matches(g, r(\"validations.commons.validemail\")).max(\n 254,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 254)\n ),\n phoneNumber: m().trim().required(r(\"validations.registration.orgphonerequired\")).matches(s, r(\"validations.commons.phonepattern\")).test(\n \"max-length-validator\",\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 15),\n (e) => e ? c(e, 15) : !0\n ),\n webAddress: m().trim().required(r(\"validations.registration.webaddressrequired\")).matches(\n P,\n r(\"validations.registration.webaddresspattern\")\n ).max(\n 256,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 256)\n ),\n addressLine1: m().trim().required(r(\"validations.registration.addressline1required\")).matches(\n v,\n r(\"validations.commons.commontextWithdiacritespattern\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n addressLine2: m().trim().matches(\n v,\n r(\"validations.commons.commontextWithdiacritespattern\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n city: m().trim().required(r(\"validations.registration.cityrequired\")).matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n country: m().trim().required(r(\"validations.registration.countryrequired\")).max(3, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 3)),\n county: m().trim().matches(\n a,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n postalCode: m().trim().required(r(\"validations.registration.zipcoderequired\")).matches(\n S,\n r(\"validations.registration.postalcodepattern\")\n ).trim().test(\n \"max-length-validator\",\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 10),\n (e) => e ? c(e, 10) : !0\n )\n}), W = (r, t, o, e) => {\n switch (t) {\n case 0:\n return L(r, e);\n case 1:\n return R(r, o, e);\n default:\n return {};\n }\n}, I = (r, t, o, e) => b().shape(\n W(\n r,\n t,\n o,\n e\n )\n), F = (r) => ({\n organisationName: r.orgName.trim(),\n email: r.email.trim(),\n webAddress: r.webAddress,\n phoneNumber: r.phoneNumber,\n contactPerson: {\n contactName: r.adminName,\n contactPhoneNumber: r.adminPhoneNumber,\n contactSurname: r.adminSurname,\n contactEmail: r.adminEmail.trim()\n },\n legalInfo: {\n companyLegalForm: r.companyLegalForm,\n companyRegistrationNumber: r.companyRegistrationNo,\n vatRegistrationNumber: r.vatRegistrationNumber\n },\n billingInfo: { logivityPoNumber: r.logivityPoNumber },\n signatoryAuthorityInfo: {\n name: r.signatoryName,\n surname: r.signatorySurname,\n email: r.signatoryEmail.trim(),\n phoneNumber: r.signatoryPhoneNumber,\n sameAsAdmin: r.signatorySameAsAdmin === \"true\"\n },\n addresses: [\n {\n city: r.city,\n addressLine1: r.addressLine1,\n addressLine2: r.addressLine2,\n countryCode: r.country,\n county: r.county,\n postalCode: r.postalCode,\n addressType: $.COMPANY\n }\n ]\n});\nexport {\n c as checkLengthWithoutSpaces,\n i as checkServerErrors,\n T as getCommonRegistrationInitialValues,\n F as getCommonRegistrationPayload,\n I as getCommonRegistrationValidationSchema,\n W as getCommonRegistrationValidationSchemaFields,\n w as validateVATPattern\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLWZvcm0tY29tbW9uLmhlbHBlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvb25ib2FyZGluZy9yZWdpc3RyYXRpb24vcmVnaXN0cmF0aW9uLWZvcm0tY29tbW9uLmhlbHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgWXVwIGZyb20gXCJ5dXBcIjtcbmltcG9ydCB7XG4gIGFkZHJlc3NMaW5lcGF0dGVybixcbiAgY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNQYXR0ZXJuLFxuICBjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzLFxuICBlbWFpbFBhdHRlcm4sXG4gIGV1Q291bnRyaWVzVkFUUGF0dGVybixcbiAgZnJlZVRleHRWQVRQYXR0ZXJuLFxuICBwaG9uZVBhdHRlcm4sXG4gIHBvc3RhbENvZGVQYXR0ZXJuLFxuICB3ZWJBZGRyZXNzUGF0dGVybixcbn0gZnJvbSBcIkB1dGlscy9yZWdleC11dGlscy50c1wiO1xuaW1wb3J0IHsgQ291bnRyeU9wdGlvbiB9IGZyb20gXCJAbW9kZWxzL3V0aWxpdHkubW9kZWwudHNcIjtcbmltcG9ydCB7XG4gIEFkZHJlc3NUeXBlLFxuICBPcmdhbmlzYXRpb25SZWdpc3RyYXRpb25QYXlsb2FkLFxufSBmcm9tIFwiQG1vZGVscy9vcmdhbmlzYXRpb25zLm1vZGVsLnRzXCI7XG5cbmludGVyZmFjZSBUZXN0Q29udGV4dEV4dGVuZGVkIHtcbiAgZnJvbToge1xuICAgIHZhbHVlOiBhbnk7XG4gIH1bXTtcbiAgb3B0aW9uczoge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgcGFyZW50OiBhbnk7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDb21tb25SZWdpc3RyYXRpb25Jbml0aWFsVmFsdWVzID0gKFxuICBpbml0aWFsVmFsdWVzPzogQ29tbW9uUmVnaXN0cmF0aW9uRm9ybVZhbHVlc1xuKSA9PiAoe1xuICBvcmdOYW1lOiBpbml0aWFsVmFsdWVzPy5vcmdOYW1lIHx8IFwiXCIsXG4gIGVtYWlsOiBpbml0aWFsVmFsdWVzPy5lbWFpbCB8fCBcIlwiLFxuICBwaG9uZU51bWJlcjogaW5pdGlhbFZhbHVlcz8ucGhvbmVOdW1iZXIgfHwgXCJcIixcbiAgd2ViQWRkcmVzczogaW5pdGlhbFZhbHVlcz8ud2ViQWRkcmVzcyB8fCBcIlwiLFxuXG4gIGFkZHJlc3NMaW5lMTogaW5pdGlhbFZhbHVlcz8uYWRkcmVzc0xpbmUxIHx8IFwiXCIsXG4gIGFkZHJlc3NMaW5lMjogaW5pdGlhbFZhbHVlcz8uYWRkcmVzc0xpbmUyIHx8IFwiXCIsXG4gIGNpdHk6IGluaXRpYWxWYWx1ZXM/LmNpdHkgfHwgXCJcIixcbiAgY291bnRyeTogaW5pdGlhbFZhbHVlcz8uY291bnRyeSB8fCBcIlwiLFxuICBjb3VudHk6IGluaXRpYWxWYWx1ZXM/LmNvdW50eSB8fCBcIlwiLFxuICBwb3N0YWxDb2RlOiBpbml0aWFsVmFsdWVzPy5wb3N0YWxDb2RlIHx8IFwiXCIsXG5cbiAgY29tcGFueUxlZ2FsRm9ybTogaW5pdGlhbFZhbHVlcz8uY29tcGFueUxlZ2FsRm9ybSB8fCBcIlwiLFxuICAvLyBjb3Jwb3JhdGVMYW5ndWFnZTogaW5pdGlhbFZhbHVlcz8uY29ycG9yYXRlTGFuZ3VhZ2UgfHwgJycsXG4gIGNvbXBhbnlSZWdpc3RyYXRpb25ObzogaW5pdGlhbFZhbHVlcz8uY29tcGFueVJlZ2lzdHJhdGlvbk5vIHx8IFwiXCIsXG4gIC8vIHJlZ2lzdGVyaW5nQm9keTogaW5pdGlhbFZhbHVlcz8ucmVnaXN0ZXJpbmdCb2R5IHx8ICcnLFxuICB2YXRSZWdpc3RyYXRpb25OdW1iZXI6IGluaXRpYWxWYWx1ZXM/LnZhdFJlZ2lzdHJhdGlvbk51bWJlciB8fCBcIlwiLFxuICAvLyBnczFDb21wYW55UHJlZml4OiBpbml0aWFsVmFsdWVzPy5nczFDb21wYW55UHJlZml4IHx8ICcnLFxuXG4gIGxvZ2l2aXR5UG9OdW1iZXI6IGluaXRpYWxWYWx1ZXM/LmxvZ2l2aXR5UG9OdW1iZXIgfHwgXCJcIixcblxuICBzaWduYXRvcnlOYW1lOiBpbml0aWFsVmFsdWVzPy5zaWduYXRvcnlOYW1lIHx8IFwiXCIsXG4gIHNpZ25hdG9yeVN1cm5hbWU6IGluaXRpYWxWYWx1ZXM/LnNpZ25hdG9yeVN1cm5hbWUgfHwgXCJcIixcbiAgc2lnbmF0b3J5RW1haWw6IGluaXRpYWxWYWx1ZXM/LnNpZ25hdG9yeUVtYWlsIHx8IFwiXCIsXG4gIHNpZ25hdG9yeVBob25lTnVtYmVyOiBpbml0aWFsVmFsdWVzPy5zaWduYXRvcnlQaG9uZU51bWJlciB8fCBcIlwiLFxuICBzaWduYXRvcnlTYW1lQXNBZG1pbjpcbiAgICAoaW5pdGlhbFZhbHVlcz8uc2lnbmF0b3J5U2FtZUFzQWRtaW4gJiZcbiAgICAgIGluaXRpYWxWYWx1ZXM/LnNpZ25hdG9yeVNhbWVBc0FkbWluLnRvU3RyaW5nKCkpIHx8XG4gICAgXCJcIixcblxuICBhZG1pbk5hbWU6IGluaXRpYWxWYWx1ZXM/LmFkbWluTmFtZSB8fCBcIlwiLFxuICBhZG1pblBob25lTnVtYmVyOiBpbml0aWFsVmFsdWVzPy5hZG1pblBob25lTnVtYmVyIHx8IFwiXCIsXG4gIGFkbWluU3VybmFtZTogaW5pdGlhbFZhbHVlcz8uYWRtaW5TdXJuYW1lIHx8IFwiXCIsXG4gIGFkbWluRW1haWw6IGluaXRpYWxWYWx1ZXM/LmFkbWluRW1haWwgfHwgXCJcIixcbiAgYWRtaW5Vc2VQb2xpY3lBY2NlcHRlZDogaW5pdGlhbFZhbHVlcz8uYWRtaW5Vc2VQb2xpY3lBY2NlcHRlZCB8fCBmYWxzZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgY2hlY2tTZXJ2ZXJFcnJvcnMgPSAoXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICB2YWw/OiBzdHJpbmcsXG4gIHNlcnZlckVycm9ycz86IGFueVtdXG4pID0+IHtcbiAgaWYgKFxuICAgIHZhbCAmJlxuICAgIHNlcnZlckVycm9ycyAmJlxuICAgIHNlcnZlckVycm9ycy5maW5kSW5kZXgoKHMpID0+IHMuZmllbGROYW1lID09PSBmaWVsZE5hbWUpID4gLTFcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG4vLyBleHBvcnQgY29uc3QgdmFsaWRhdGVWQVRQYXR0ZXJuID0gKHRleHRDb250ZXh0Oll1cC5UZXN0Q29udGV4dCwgdmFsdWU6c3RyaW5nLCBldUNvdW50cmllczphbnkpID0+IHtcbi8vICAgaWYoZXVDb3VudHJpZXMuZmluZEluZGV4KChjOiB7IGNvZGU6IGFueTsgfSkgPT4gYy5jb2RlID09PSB0ZXh0Q29udGV4dC5wYXJlbnQuY291bnRyeSkgPiAtMSl7XG4vLyAgICAgLy92YXIgY291bnRlcnljb2RlcmVnZXggPSBuZXcgUmVnRXhwKCcvXicgKyB0ZXh0Q29udGV4dC5wYXJlbnQuY291bnRyeSArJy9nbScpXG4vLyAgICAgY29uc3QgdmF0Y291bnRyeWNvZGUgPSBldUNvdW50cmllcy5maWx0ZXIoKGN0OmFueSk9Pntcbi8vICAgICAgIHJldHVybiAoY3QuY29kZSA9PT0gdGV4dENvbnRleHQucGFyZW50LmNvdW50cnkpXG4vLyAgICAgfSlcbi8vICAgICBpZih2YXRjb3VudHJ5Y29kZSAmJiB2YXRjb3VudHJ5Y29kZS5sZW5ndGggPiAwKXtcbi8vICAgICAgIGNvbnN0IGNvdW50ZXJ5Y29kZXJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7dmF0Y291bnRyeWNvZGVbMF0udmF0Y29kZX0uKmAsICdnJyk7XG4vLyAgICAgICByZXR1cm4gY291bnRlcnljb2RlcmVnZXgudGVzdCh2YWx1ZSkgJiYgdmF0UGF0dGVybi50ZXN0KHZhbHVlKVxuLy8gICAgIH1lbHNle1xuLy8gICAgICAgcmV0dXJuIHZhdFBhdHRlcm4udGVzdCh2YWx1ZSlcbi8vICAgICB9XG4vLyAgIH1lbHNle1xuLy8gICAgIHJldHVybiBjb21tb25UZXh0UGF0dGVybi50ZXN0KHZhbHVlKVxuLy8gICB9XG4vLyB9XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVZBVFBhdHRlcm4gPSAoXG4gIHRleHRDb250ZXh0OiBZdXAuVGVzdENvbnRleHQsXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGV1Q291bnRyaWVzOiBhbnlcbikgPT4ge1xuICBpZiAoXG4gICAgZXVDb3VudHJpZXMuZmluZEluZGV4KFxuICAgICAgKGM6IHsgY29kZTogYW55IH0pID0+IGMuY29kZSA9PT0gdGV4dENvbnRleHQucGFyZW50LmNvdW50cnlcbiAgICApID4gLTFcbiAgKSB7XG4gICAgY29uc3QgdmF0Y291bnRyeWNvZGUgPSBldUNvdW50cmllcy5maWx0ZXIoKGN0OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBjdC5jb2RlID09PSB0ZXh0Q29udGV4dC5wYXJlbnQuY291bnRyeTtcbiAgICB9KTtcbiAgICBjb25zdCBwYXR0ZXJuID0gZXVDb3VudHJpZXNWQVRQYXR0ZXJuKHZhdGNvdW50cnljb2RlWzBdLnZhdGNvZGUpO1xuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmcmVlVGV4dFZBVFBhdHRlcm4udGVzdCh2YWx1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0xlbmd0aFdpdGhvdXRTcGFjZXMgPSAodmFsOiBzdHJpbmcsIG1heGxlbmd0aDogbnVtYmVyKSA9PiB7XG4gIHJldHVybiB2YWwucmVwbGFjZSgvXFxzL2csIFwiXCIpLmxlbmd0aCA8PSBtYXhsZW5ndGg7XG59O1xuXG5jb25zdCBjb250YWN0RGV0YWlsc1ZhbGlkYXRpb25zID0gKHQ6IEZ1bmN0aW9uLCBzZXJ2ZXJFcnJvcnM/OiBhbnlbXSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGFkbWluTmFtZTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5hZG1pbm5hbWVyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5jb21tb250ZXh0V2l0aGRpYWNyaXRlc3dpdGhvdXRudW1iZXJcIilcbiAgICAgIClcbiAgICAgIC5tYXgoNjQsIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDY0KSksXG4gICAgYWRtaW5QaG9uZU51bWJlcjogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5hZG1pbnBob25lcmVxdWlyZWRcIikpXG4gICAgICAubWF0Y2hlcyhwaG9uZVBhdHRlcm4sIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLnBob25lcGF0dGVyblwiKSlcbiAgICAgIC50ZXN0KFxuICAgICAgICBcIm1heC1sZW5ndGgtdmFsaWRhdG9yXCIsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDE1KSxcbiAgICAgICAgKHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbCA/IGNoZWNrTGVuZ3RoV2l0aG91dFNwYWNlcyh2YWwsIDE1KSA6IHRydWU7XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgYWRtaW5TdXJuYW1lOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLmFkbWluc3VybmFtZXJlcXVpcmVkXCIpKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIGNvbW1vblRleHRXaXRoRGlhY3JpdGVzV2l0aG91dE51bWJlcnMsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzd2l0aG91dG51bWJlclwiKVxuICAgICAgKVxuICAgICAgLm1heCg2NCwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgNjQpKSxcbiAgICBhZG1pbkVtYWlsOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLmVtYWlscmVxdWlyZWRcIikpXG4gICAgICAuZW1haWwodChcInZhbGlkYXRpb25zLmNvbW1vbnMudmFsaWRlbWFpbFwiKSlcbiAgICAgIC5tYXRjaGVzKGVtYWlsUGF0dGVybiwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMudmFsaWRlbWFpbFwiKSlcbiAgICAgIC5tYXgoMjU0LCB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAyNTQpKVxuICAgICAgLnRlc3QoXG4gICAgICAgIFwic2VydmVyLWVycm9yXCIsXG4gICAgICAgIHQoXCJyZWdpc3Rlci5lbWFpbGFscmVhZHlpbnVzZVwiKSxcbiAgICAgICAgKHZhbCwgdGVzdENvbnRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tTZXJ2ZXJFcnJvcnModGVzdENvbnRleHQucGF0aCwgdmFsLCBzZXJ2ZXJFcnJvcnMpO1xuICAgICAgICB9XG4gICAgICApLFxuXG4gICAgYWRtaW5Vc2VQb2xpY3lBY2NlcHRlZDogWXVwLmJvb2xlYW4oKS5vbmVPZihcbiAgICAgIFt0cnVlXSxcbiAgICAgIHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24uYWNjZXB0cG9saWN5cmVxdWlyZWRcIilcbiAgICApLFxuXG4gICAgc2lnbmF0b3J5U2FtZUFzQWRtaW46IFl1cC5zdHJpbmcoKS5yZXF1aXJlZChcbiAgICAgIHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24uYXV0aHJpemF0aW9uc2VsZWN0aW9ucmVxdWlyZWRcIilcbiAgICApLFxuXG4gICAgc2lnbmF0b3J5TmFtZTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAud2hlbihcInNpZ25hdG9yeVNhbWVBc0FkbWluXCIsIHtcbiAgICAgICAgaXM6IFwiZmFsc2VcIixcbiAgICAgICAgdGhlbjogWXVwLnN0cmluZygpXG4gICAgICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24uYXV0aG5hbWVyZXF1aXJlZFwiKSlcbiAgICAgICAgICAubWF0Y2hlcyhcbiAgICAgICAgICAgIGNvbW1vblRleHRXaXRoRGlhY3JpdGVzV2l0aG91dE51bWJlcnMsXG4gICAgICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5jb21tb250ZXh0V2l0aGRpYWNyaXRlc3dpdGhvdXRudW1iZXJcIilcbiAgICAgICAgICApXG4gICAgICAgICAgLm1heChcbiAgICAgICAgICAgIDY0LFxuICAgICAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgNjQpXG4gICAgICAgICAgKSxcbiAgICAgIH0pLFxuXG4gICAgc2lnbmF0b3J5UGhvbmVOdW1iZXI6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLndoZW4oXCJzaWduYXRvcnlTYW1lQXNBZG1pblwiLCB7XG4gICAgICAgIGlzOiBcImZhbHNlXCIsXG4gICAgICAgIHRoZW46IFl1cC5zdHJpbmcoKVxuICAgICAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLmF1dGhwaG9uZXJlcXVpcmVkXCIpKVxuICAgICAgICAgIC5tYXRjaGVzKHBob25lUGF0dGVybiwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMucGhvbmVwYXR0ZXJuXCIpKVxuICAgICAgICAgIC50ZXN0KFxuICAgICAgICAgICAgXCJtYXgtbGVuZ3RoLXZhbGlkYXRvclwiLFxuICAgICAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMTUpLFxuICAgICAgICAgICAgKHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB2YWwgPyBjaGVja0xlbmd0aFdpdGhvdXRTcGFjZXModmFsLCAxNSkgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICksXG4gICAgICB9KSxcbiAgICBzaWduYXRvcnlTdXJuYW1lOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC53aGVuKFwic2lnbmF0b3J5U2FtZUFzQWRtaW5cIiwge1xuICAgICAgICBpczogXCJmYWxzZVwiLFxuICAgICAgICB0aGVuOiBZdXAuc3RyaW5nKClcbiAgICAgICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5hdXRoc3VybmFtZXJlcXVpcmVkXCIpKVxuICAgICAgICAgIC5tYXRjaGVzKFxuICAgICAgICAgICAgY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNXaXRob3V0TnVtYmVycyxcbiAgICAgICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzd2l0aG91dG51bWJlclwiKVxuICAgICAgICAgIClcbiAgICAgICAgICAubWF4KFxuICAgICAgICAgICAgNjQsXG4gICAgICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCA2NClcbiAgICAgICAgICApLFxuICAgICAgfSksXG4gICAgc2lnbmF0b3J5RW1haWw6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLndoZW4oXCJzaWduYXRvcnlTYW1lQXNBZG1pblwiLCB7XG4gICAgICAgIGlzOiBcImZhbHNlXCIsXG4gICAgICAgIHRoZW46IFl1cC5zdHJpbmcoKVxuICAgICAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLmF1dGhlbWFpbHJlcXVpcmVkXCIpKVxuICAgICAgICAgIC5lbWFpbCh0KFwidmFsaWRhdGlvbnMuY29tbW9ucy52YWxpZGVtYWlsXCIpKVxuICAgICAgICAgIC5tYXRjaGVzKGVtYWlsUGF0dGVybiwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMudmFsaWRlbWFpbFwiKSlcbiAgICAgICAgICAubWF4KFxuICAgICAgICAgICAgMjU0LFxuICAgICAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMjU0KVxuICAgICAgICAgICksXG4gICAgICB9KVxuICAgICAgLnRlc3QoXG4gICAgICAgIFwiaXNEaWZmZXJlbnRFbWFpbHNcIixcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMuZGlmZmVyZW50ZW1haWxcIiksXG4gICAgICAgICh2YWw6IGFueSwgY29udGV4dDogWXVwLlRlc3RDb250ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2VsZiA9IGNvbnRleHQgYXMgWXVwLlRlc3RDb250ZXh0ICYgVGVzdENvbnRleHRFeHRlbmRlZDtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2VsZj8uZnJvbVswXT8udmFsdWU/LnNpZ25hdG9yeVNhbWVBc0FkbWluID09PSBcInRydWVcIiB8fFxuICAgICAgICAgICAgIXZhbD8udHJpbSgpIHx8XG4gICAgICAgICAgICBzZWxmPy5mcm9tWzBdPy52YWx1ZT8uYWRtaW5FbWFpbD8udHJpbSgpICE9PSB2YWw/LnRyaW0oKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICksXG4gIH07XG59O1xuXG5jb25zdCBnZXRPcmdEZXRhaWxzVmFsaWRhdGlvbnMgPSAoXG4gIHQ6IEZ1bmN0aW9uLFxuICBldUNvdW50cmllczogQ291bnRyeU9wdGlvbltdLFxuICBzZXJ2ZXJFcnJvcnM/OiBhbnlbXVxuKSA9PiB7XG4gIHJldHVybiB7XG4gICAgb3JnTmFtZTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5vcmdyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBjb21tb25UZXh0V2l0aERpYWNyaXRlc1BhdHRlcm4sXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzcGF0dGVyblwiKVxuICAgICAgKVxuICAgICAgLm1heCg4MCwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgODApKSxcbiAgICB2YXRSZWdpc3RyYXRpb25OdW1iZXI6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLnJlcXVpcmVkXCIpKVxuICAgICAgLndoZW4oXCJjb3VudHJ5XCIsIHtcbiAgICAgICAgaXM6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGV1Q291bnRyaWVzLmZpbmRJbmRleCgoYykgPT4gYy5jb2RlID09PSB2YWx1ZSkgPiAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgdGhlbjogWXVwLnN0cmluZygpLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24udmF0cmVxdWlyZWRcIikpLFxuICAgICAgfSlcbiAgICAgIC5tYXgoMTQsIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDE0KSlcbiAgICAgIC50ZXN0KFxuICAgICAgICBcInZhdC1wYXR0ZXJuLWVycm9yXCIsXG4gICAgICAgIHQoXG4gICAgICAgICAgXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24ub3JnZGV0YWlscy52YXRSZWdpc3RyYXRpb25OdW1iZXIucGF0dGVybmVycm9yXCJcbiAgICAgICAgKSxcbiAgICAgICAgKHZhbDogYW55LCB0ZXN0Q29udGV4dCkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWwgPyB2YWxpZGF0ZVZBVFBhdHRlcm4odGVzdENvbnRleHQsIHZhbCwgZXVDb3VudHJpZXMpIDogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnRlc3QoXG4gICAgICAgIFwic2VydmVyLWVycm9yXCIsXG4gICAgICAgIHQoXCJyZWdpc3Rlci52YXRyZWdpc3RyYXRpb25udW1iZXJhbHJlYWR5aW51c2VcIiksXG4gICAgICAgICh2YWwsIHRlc3RDb250ZXh0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrU2VydmVyRXJyb3JzKHRlc3RDb250ZXh0LnBhdGgsIHZhbCwgc2VydmVyRXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICBjb21wYW55UmVnaXN0cmF0aW9uTm86IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24ub3JncmVnbnVtYmVycmVxdWlyZWRcIikpXG4gICAgICAubWF4KDE1LCB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAxNSkpXG4gICAgICAudGVzdChcbiAgICAgICAgXCJzZXJ2ZXItZXJyb3JcIixcbiAgICAgICAgdChcInJlZ2lzdGVyLm9yZ3JlZ2lzdHJhdGlvbm51bWJlcmFscmVhZHlpbnVzZVwiKSxcbiAgICAgICAgKHZhbCwgdGVzdENvbnRleHQpID0+IHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tTZXJ2ZXJFcnJvcnModGVzdENvbnRleHQucGF0aCwgdmFsLCBzZXJ2ZXJFcnJvcnMpO1xuICAgICAgICB9XG4gICAgICApLFxuICAgIGNvbXBhbnlMZWdhbEZvcm06IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24ub3JnbGVnYWxmb3JtcmVxdWlyZWRcIikpXG4gICAgICAubWF0Y2hlcyhcbiAgICAgICAgY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNXaXRob3V0TnVtYmVycyxcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMuY29tbW9udGV4dFdpdGhkaWFjcml0ZXN3aXRob3V0bnVtYmVyXCIpXG4gICAgICApXG4gICAgICAubWF4KFxuICAgICAgICAxMDAsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDEwMClcbiAgICAgICksXG4gICAgZW1haWw6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24ub3JnZW1haWxyZXF1aXJlZFwiKSlcbiAgICAgIC5lbWFpbCh0KFwidmFsaWRhdGlvbnMuY29tbW9ucy52YWxpZGVtYWlsXCIpKVxuICAgICAgLm1hdGNoZXMoZW1haWxQYXR0ZXJuLCB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy52YWxpZGVtYWlsXCIpKVxuICAgICAgLm1heChcbiAgICAgICAgMjU0LFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAyNTQpXG4gICAgICApLFxuICAgIHBob25lTnVtYmVyOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLm9yZ3Bob25lcmVxdWlyZWRcIikpXG4gICAgICAubWF0Y2hlcyhwaG9uZVBhdHRlcm4sIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLnBob25lcGF0dGVyblwiKSlcbiAgICAgIC50ZXN0KFxuICAgICAgICBcIm1heC1sZW5ndGgtdmFsaWRhdG9yXCIsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDE1KSxcbiAgICAgICAgKHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZhbCA/IGNoZWNrTGVuZ3RoV2l0aG91dFNwYWNlcyh2YWwsIDE1KSA6IHRydWU7XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgd2ViQWRkcmVzczogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi53ZWJhZGRyZXNzcmVxdWlyZWRcIikpXG4gICAgICAubWF0Y2hlcyhcbiAgICAgICAgd2ViQWRkcmVzc1BhdHRlcm4sXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24ud2ViYWRkcmVzc3BhdHRlcm5cIilcbiAgICAgIClcbiAgICAgIC5tYXgoXG4gICAgICAgIDI1NixcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMjU2KVxuICAgICAgKSxcblxuICAgIGFkZHJlc3NMaW5lMTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5hZGRyZXNzbGluZTFyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBhZGRyZXNzTGluZXBhdHRlcm4sXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzcGF0dGVyblwiKVxuICAgICAgKVxuICAgICAgLm1heCgzNSwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMzUpKSxcbiAgICBhZGRyZXNzTGluZTI6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIGFkZHJlc3NMaW5lcGF0dGVybixcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMuY29tbW9udGV4dFdpdGhkaWFjcml0ZXNwYXR0ZXJuXCIpXG4gICAgICApXG4gICAgICAubWF4KDM1LCB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAzNSkpLFxuICAgIGNpdHk6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24uY2l0eXJlcXVpcmVkXCIpKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIGNvbW1vblRleHRXaXRoRGlhY3JpdGVzV2l0aG91dE51bWJlcnMsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzd2l0aG91dG51bWJlclwiKVxuICAgICAgKVxuICAgICAgLm1heCgzNSwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMzUpKSxcbiAgICBjb3VudHJ5OiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLmNvdW50cnlyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXgoMywgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMykpLFxuICAgIGNvdW50eTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAubWF0Y2hlcyhcbiAgICAgICAgY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNXaXRob3V0TnVtYmVycyxcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMuY29tbW9udGV4dFdpdGhkaWFjcml0ZXN3aXRob3V0bnVtYmVyXCIpXG4gICAgICApXG4gICAgICAubWF4KDM1LCB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAzNSkpLFxuICAgIHBvc3RhbENvZGU6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24uemlwY29kZXJlcXVpcmVkXCIpKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIHBvc3RhbENvZGVQYXR0ZXJuLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLnBvc3RhbGNvZGVwYXR0ZXJuXCIpXG4gICAgICApXG4gICAgICAudHJpbSgpXG4gICAgICAudGVzdChcbiAgICAgICAgXCJtYXgtbGVuZ3RoLXZhbGlkYXRvclwiLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAxMCksXG4gICAgICAgICh2YWw6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWwgPyBjaGVja0xlbmd0aFdpdGhvdXRTcGFjZXModmFsLCAxMCkgOiB0cnVlO1xuICAgICAgICB9XG4gICAgICApLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbW1vblJlZ2lzdHJhdGlvblZhbGlkYXRpb25TY2hlbWFGaWVsZHMgPSAoXG4gIHQ6IEZ1bmN0aW9uLFxuICBjdXJyZW50U3RlcDogbnVtYmVyLFxuICBldUNvdW50cmllczogQ291bnRyeU9wdGlvbltdLFxuICBzZXJ2ZXJFcnJvcnM/OiBhbnlbXVxuKSA9PiB7XG4gIHN3aXRjaCAoY3VycmVudFN0ZXApIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gY29udGFjdERldGFpbHNWYWxpZGF0aW9ucyh0LCBzZXJ2ZXJFcnJvcnMpO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBnZXRPcmdEZXRhaWxzVmFsaWRhdGlvbnModCwgZXVDb3VudHJpZXMsIHNlcnZlckVycm9ycyk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbW1vblJlZ2lzdHJhdGlvblZhbGlkYXRpb25TY2hlbWEgPSAoXG4gIHQ6IEZ1bmN0aW9uLFxuICBjdXJyZW50U3RlcDogbnVtYmVyLFxuICBldUNvdW50cmllczogQ291bnRyeU9wdGlvbltdLFxuICBzZXJ2ZXJFcnJvcnM/OiBhbnlbXVxuKSA9PiB7XG4gIHJldHVybiBZdXAub2JqZWN0KCkuc2hhcGUoXG4gICAgZ2V0Q29tbW9uUmVnaXN0cmF0aW9uVmFsaWRhdGlvblNjaGVtYUZpZWxkcyhcbiAgICAgIHQsXG4gICAgICBjdXJyZW50U3RlcCxcbiAgICAgIGV1Q291bnRyaWVzLFxuICAgICAgc2VydmVyRXJyb3JzXG4gICAgKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbW1vblJlZ2lzdHJhdGlvblBheWxvYWQgPSAoXG4gIHZhbHVlczogQ29tbW9uUmVnaXN0cmF0aW9uRm9ybVZhbHVlc1xuKTogT3JnYW5pc2F0aW9uUmVnaXN0cmF0aW9uUGF5bG9hZCA9PiB7XG4gIHJldHVybiB7XG4gICAgb3JnYW5pc2F0aW9uTmFtZTogdmFsdWVzLm9yZ05hbWUudHJpbSgpLFxuICAgIGVtYWlsOiB2YWx1ZXMuZW1haWwudHJpbSgpLFxuICAgIHdlYkFkZHJlc3M6IHZhbHVlcy53ZWJBZGRyZXNzLFxuICAgIHBob25lTnVtYmVyOiB2YWx1ZXMucGhvbmVOdW1iZXIsXG5cbiAgICBjb250YWN0UGVyc29uOiB7XG4gICAgICBjb250YWN0TmFtZTogdmFsdWVzLmFkbWluTmFtZSxcbiAgICAgIGNvbnRhY3RQaG9uZU51bWJlcjogdmFsdWVzLmFkbWluUGhvbmVOdW1iZXIsXG4gICAgICBjb250YWN0U3VybmFtZTogdmFsdWVzLmFkbWluU3VybmFtZSxcbiAgICAgIGNvbnRhY3RFbWFpbDogdmFsdWVzLmFkbWluRW1haWwudHJpbSgpLFxuICAgIH0sXG4gICAgbGVnYWxJbmZvOiB7XG4gICAgICBjb21wYW55TGVnYWxGb3JtOiB2YWx1ZXMuY29tcGFueUxlZ2FsRm9ybSxcbiAgICAgIGNvbXBhbnlSZWdpc3RyYXRpb25OdW1iZXI6IHZhbHVlcy5jb21wYW55UmVnaXN0cmF0aW9uTm8sXG4gICAgICB2YXRSZWdpc3RyYXRpb25OdW1iZXI6IHZhbHVlcy52YXRSZWdpc3RyYXRpb25OdW1iZXIsXG4gICAgfSxcbiAgICBiaWxsaW5nSW5mbzogeyBsb2dpdml0eVBvTnVtYmVyOiB2YWx1ZXMubG9naXZpdHlQb051bWJlciB9LFxuXG4gICAgc2lnbmF0b3J5QXV0aG9yaXR5SW5mbzoge1xuICAgICAgbmFtZTogdmFsdWVzLnNpZ25hdG9yeU5hbWUsXG4gICAgICBzdXJuYW1lOiB2YWx1ZXMuc2lnbmF0b3J5U3VybmFtZSxcbiAgICAgIGVtYWlsOiB2YWx1ZXMuc2lnbmF0b3J5RW1haWwudHJpbSgpLFxuICAgICAgcGhvbmVOdW1iZXI6IHZhbHVlcy5zaWduYXRvcnlQaG9uZU51bWJlcixcbiAgICAgIHNhbWVBc0FkbWluOiB2YWx1ZXMuc2lnbmF0b3J5U2FtZUFzQWRtaW4gPT09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlLFxuICAgIH0sXG4gICAgYWRkcmVzc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGNpdHk6IHZhbHVlcy5jaXR5LFxuICAgICAgICBhZGRyZXNzTGluZTE6IHZhbHVlcy5hZGRyZXNzTGluZTEsXG4gICAgICAgIGFkZHJlc3NMaW5lMjogdmFsdWVzLmFkZHJlc3NMaW5lMixcbiAgICAgICAgY291bnRyeUNvZGU6IHZhbHVlcy5jb3VudHJ5LFxuICAgICAgICBjb3VudHk6IHZhbHVlcy5jb3VudHksXG4gICAgICAgIHBvc3RhbENvZGU6IHZhbHVlcy5wb3N0YWxDb2RlLFxuICAgICAgICBhZGRyZXNzVHlwZTogQWRkcmVzc1R5cGUuQ09NUEFOWSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uUmVnaXN0cmF0aW9uRm9ybVZhbHVlcyB7XG4gIG9yZ05hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgd2ViQWRkcmVzczogc3RyaW5nO1xuXG4gIGNvbXBhbnlMZWdhbEZvcm06IHN0cmluZztcbiAgY29tcGFueVJlZ2lzdHJhdGlvbk5vOiBzdHJpbmc7XG4gIHZhdFJlZ2lzdHJhdGlvbk51bWJlcjogc3RyaW5nO1xuICBsb2dpdml0eVBvTnVtYmVyOiBzdHJpbmc7XG5cbiAgYWRkcmVzc0xpbmUxOiBzdHJpbmc7XG4gIGFkZHJlc3NMaW5lMjogc3RyaW5nO1xuICBjaXR5OiBzdHJpbmc7XG4gIHBvc3RhbENvZGU6IHN0cmluZztcbiAgY291bnRyeTogc3RyaW5nO1xuICBjb3VudHk6IHN0cmluZztcblxuICBzaWduYXRvcnlOYW1lOiBzdHJpbmc7XG4gIHNpZ25hdG9yeVN1cm5hbWU6IHN0cmluZztcbiAgc2lnbmF0b3J5RW1haWw6IHN0cmluZztcbiAgc2lnbmF0b3J5UGhvbmVOdW1iZXI6IHN0cmluZztcbiAgc2lnbmF0b3J5U2FtZUFzQWRtaW46IHN0cmluZztcblxuICBhZG1pbk5hbWU6IHN0cmluZztcbiAgYWRtaW5QaG9uZU51bWJlcjogc3RyaW5nO1xuICBhZG1pblN1cm5hbWU6IHN0cmluZztcbiAgYWRtaW5FbWFpbDogc3RyaW5nO1xuICBhZG1pblVzZVBvbGljeUFjY2VwdGVkOiBib29sZWFuO1xufVxuIl0sIm5hbWVzIjpbImdldENvbW1vblJlZ2lzdHJhdGlvbkluaXRpYWxWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwiY2hlY2tTZXJ2ZXJFcnJvcnMiLCJmaWVsZE5hbWUiLCJ2YWwiLCJzZXJ2ZXJFcnJvcnMiLCJzIiwidmFsaWRhdGVWQVRQYXR0ZXJuIiwidGV4dENvbnRleHQiLCJ2YWx1ZSIsImV1Q291bnRyaWVzIiwiYyIsInZhdGNvdW50cnljb2RlIiwiY3QiLCJldUNvdW50cmllc1ZBVFBhdHRlcm4iLCJmcmVlVGV4dFZBVFBhdHRlcm4iLCJjaGVja0xlbmd0aFdpdGhvdXRTcGFjZXMiLCJtYXhsZW5ndGgiLCJjb250YWN0RGV0YWlsc1ZhbGlkYXRpb25zIiwidCIsIll1cC5zdHJpbmciLCJjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzIiwicGhvbmVQYXR0ZXJuIiwiZW1haWxQYXR0ZXJuIiwidGVzdENvbnRleHQiLCJZdXAuYm9vbGVhbiIsImNvbnRleHQiLCJzZWxmIiwiX2IiLCJfYSIsIl9lIiwiX2QiLCJfYyIsImdldE9yZ0RldGFpbHNWYWxpZGF0aW9ucyIsImNvbW1vblRleHRXaXRoRGlhY3JpdGVzUGF0dGVybiIsIndlYkFkZHJlc3NQYXR0ZXJuIiwiYWRkcmVzc0xpbmVwYXR0ZXJuIiwicG9zdGFsQ29kZVBhdHRlcm4iLCJnZXRDb21tb25SZWdpc3RyYXRpb25WYWxpZGF0aW9uU2NoZW1hRmllbGRzIiwiY3VycmVudFN0ZXAiLCJnZXRDb21tb25SZWdpc3RyYXRpb25WYWxpZGF0aW9uU2NoZW1hIiwiWXVwLm9iamVjdCIsImdldENvbW1vblJlZ2lzdHJhdGlvblBheWxvYWQiLCJ2YWx1ZXMiLCJBZGRyZXNzVHlwZSJdLCJtYXBwaW5ncyI6Ijs7O0FBNEJhLE1BQUFBLElBQXFDLENBQ2hEQyxPQUNJO0FBQUEsRUFDSixVQUFTQSxLQUFBLGdCQUFBQSxFQUFlLFlBQVc7QUFBQSxFQUNuQyxRQUFPQSxLQUFBLGdCQUFBQSxFQUFlLFVBQVM7QUFBQSxFQUMvQixjQUFhQSxLQUFBLGdCQUFBQSxFQUFlLGdCQUFlO0FBQUEsRUFDM0MsYUFBWUEsS0FBQSxnQkFBQUEsRUFBZSxlQUFjO0FBQUEsRUFFekMsZUFBY0EsS0FBQSxnQkFBQUEsRUFBZSxpQkFBZ0I7QUFBQSxFQUM3QyxlQUFjQSxLQUFBLGdCQUFBQSxFQUFlLGlCQUFnQjtBQUFBLEVBQzdDLE9BQU1BLEtBQUEsZ0JBQUFBLEVBQWUsU0FBUTtBQUFBLEVBQzdCLFVBQVNBLEtBQUEsZ0JBQUFBLEVBQWUsWUFBVztBQUFBLEVBQ25DLFNBQVFBLEtBQUEsZ0JBQUFBLEVBQWUsV0FBVTtBQUFBLEVBQ2pDLGFBQVlBLEtBQUEsZ0JBQUFBLEVBQWUsZUFBYztBQUFB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\n","import { c as y, a as e } from \"../../../object-BoWdjekM.js\";\nimport { commonTextWithDiacritesPattern as v, commonTextWithDiacritesWithoutNumbers as m, emailPattern as b, phonePattern as i, webAddressPattern as q, addressLinepattern as p, postalCodePattern as N } from \"../../../utils/regex-utils.js\";\nimport { checkLengthWithoutSpaces as x } from \"../../onboarding/registration/registration-form-common.helper.js\";\nimport { AddressType as L } from \"../../../models/organisations.model.js\";\nconst P = (r) => {\n var o, t, d, n, a, s, c, g, h;\n return {\n orgName: (r == null ? void 0 : r.organisationName) || \"\",\n email: (r == null ? void 0 : r.email) || \"\",\n phoneNumber: (r == null ? void 0 : r.phoneNumber) || \"\",\n webAddress: (r == null ? void 0 : r.webAddress) || \"\",\n addressLine1: ((o = r == null ? void 0 : r.addresses[0]) == null ? void 0 : o.addressLine1) || \"\",\n addressLine2: ((t = r == null ? void 0 : r.addresses[0]) == null ? void 0 : t.addressLine2) || \"\",\n city: ((d = r == null ? void 0 : r.addresses[0]) == null ? void 0 : d.city) || \"\",\n country: ((n = r == null ? void 0 : r.addresses[0]) == null ? void 0 : n.countryCode) || \"\",\n county: ((a = r == null ? void 0 : r.addresses[0]) == null ? void 0 : a.county) || \"\",\n postalCode: ((s = r == null ? void 0 : r.addresses[0]) == null ? void 0 : s.postalCode) || \"\",\n companyLegalForm: ((c = r == null ? void 0 : r.legalInfo) == null ? void 0 : c.companyLegalForm) || \"\",\n companyRegistrationNo: ((g = r == null ? void 0 : r.legalInfo) == null ? void 0 : g.companyRegistrationNumber) || \"\",\n vatRegistrationNumber: ((h = r == null ? void 0 : r.legalInfo) == null ? void 0 : h.vatRegistrationNumber) || \"\"\n };\n}, $ = (r) => ({\n orgName: e().trim().required(r(\"validations.registration.orgrequired\")).matches(\n v,\n r(\"validations.commons.commontextWithdiacritespattern\")\n ).max(80, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 80)),\n companyLegalForm: e().trim().required(r(\"validations.registration.orglegalformrequired\")).matches(\n m,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(\n 100,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 100)\n ),\n email: e().trim().required(r(\"validations.registration.orgemailrequired\")).email(r(\"validations.commons.validemail\")).matches(b, r(\"validations.commons.validemail\")).max(\n 254,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 254)\n ),\n phoneNumber: e().trim().required(r(\"validations.registration.orgphonerequired\")).matches(i, r(\"validations.commons.phonepattern\")).test(\n \"max-length-validator\",\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 15),\n (o) => o ? x(o, 15) : !0\n ),\n webAddress: e().trim().required(r(\"validations.registration.webaddressrequired\")).matches(\n q,\n r(\"validations.registration.webaddresspattern\")\n ).max(\n 256,\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 256)\n ),\n addressLine1: e().trim().required(r(\"validations.registration.addressline1required\")).matches(\n p,\n r(\"validations.commons.commontextWithdiacritespattern\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n addressLine2: e().trim().matches(\n p,\n r(\"validations.commons.commontextWithdiacritespattern\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n city: e().trim().required(r(\"validations.registration.cityrequired\")).matches(\n m,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n country: e().trim().required(r(\"validations.registration.countryrequired\")).max(3, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 3)),\n county: e().trim().matches(\n m,\n r(\"validations.commons.commontextWithdiacriteswithoutnumber\")\n ).max(35, r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 35)),\n postalCode: e().trim().required(r(\"validations.registration.zipcoderequired\")).matches(\n N,\n r(\"validations.registration.postalcodepattern\")\n ).trim().test(\n \"max-length-validator\",\n r(\"validations.commons.maxlength\").replace(\"${maxlength}\", 10),\n (o) => o ? x(o, 10) : !0\n )\n}), A = (r) => y().shape($(r)), F = (r) => ({\n organisationName: r.orgName.trim(),\n orgEmail: r.email.trim(),\n webAddress: r.webAddress,\n phoneNumber: r.phoneNumber,\n companyLegalForm: r.companyLegalForm,\n address: {\n city: r.city,\n addressLine1: r.addressLine1,\n addressLine2: r.addressLine2,\n countryCode: r.country,\n county: r.county,\n postalCode: r.postalCode,\n addressType: L.COMPANY\n },\n billingInfo: { logivityPoNumber: r.logivityPoNumber }\n});\nexport {\n P as getOrganisationInitialValue,\n A as getOrgnisationValidationSchema,\n F as getUpdateOrgnisationPayload\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLWVkaXQuaGVscGVyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29tcG9uZW50cy9zdXBlcmFkbWluL29yZ2FuaXNhdGlvbi1lZGl0LWNvbXBvbmVudC9vcmdhbmlzYXRpb24tZWRpdC5oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgWXVwIGZyb20gXCJ5dXBcIjtcbmltcG9ydCB7XG4gIGFkZHJlc3NMaW5lcGF0dGVybixcbiAgY29tbW9uVGV4dFdpdGhEaWFjcml0ZXNQYXR0ZXJuLFxuICBjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzLFxuICBlbWFpbFBhdHRlcm4sXG4gIHBob25lUGF0dGVybixcbiAgcG9zdGFsQ29kZVBhdHRlcm4sXG4gIHdlYkFkZHJlc3NQYXR0ZXJuLFxufSBmcm9tIFwiQHV0aWxzL3JlZ2V4LXV0aWxzLnRzXCI7XG5pbXBvcnQgeyBjaGVja0xlbmd0aFdpdGhvdXRTcGFjZXMgfSBmcm9tIFwiLi4vLi4vb25ib2FyZGluZy9yZWdpc3RyYXRpb24vcmVnaXN0cmF0aW9uLWZvcm0tY29tbW9uLmhlbHBlclwiO1xuaW1wb3J0IHtcbiAgQWRkcmVzc1R5cGUsXG4gIE9yZ2FuaXNhdGlvbkFkZHJlc3MsXG4gIE9yZ2FuaXNhdGlvbkJpbGxpbmdJbmZvLFxuICBPcmdhbmlzYXRpb25SZXNwb25zZSxcbn0gZnJvbSBcIkBtb2RlbHMvb3JnYW5pc2F0aW9ucy5tb2RlbC50c1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0T3JnYW5pc2F0aW9uSW5pdGlhbFZhbHVlID0gKFxuICBpbml0aWFsVmFsdWVzPzogT3JnYW5pc2F0aW9uUmVzcG9uc2Vcbik6IE9yZ25pc2F0aW9uRGV0YWlsc0Zvcm1WYWx1ZXMgPT4gKHtcbiAgb3JnTmFtZTogaW5pdGlhbFZhbHVlcz8ub3JnYW5pc2F0aW9uTmFtZSB8fCBcIlwiLFxuICBlbWFpbDogaW5pdGlhbFZhbHVlcz8uZW1haWwgfHwgXCJcIixcbiAgcGhvbmVOdW1iZXI6IGluaXRpYWxWYWx1ZXM/LnBob25lTnVtYmVyIHx8IFwiXCIsXG4gIHdlYkFkZHJlc3M6IGluaXRpYWxWYWx1ZXM/LndlYkFkZHJlc3MgfHwgXCJcIixcblxuICBhZGRyZXNzTGluZTE6IGluaXRpYWxWYWx1ZXM/LmFkZHJlc3Nlc1swXT8uYWRkcmVzc0xpbmUxIHx8IFwiXCIsXG4gIGFkZHJlc3NMaW5lMjogaW5pdGlhbFZhbHVlcz8uYWRkcmVzc2VzWzBdPy5hZGRyZXNzTGluZTIgfHwgXCJcIixcbiAgY2l0eTogaW5pdGlhbFZhbHVlcz8uYWRkcmVzc2VzWzBdPy5jaXR5IHx8IFwiXCIsXG4gIGNvdW50cnk6IGluaXRpYWxWYWx1ZXM/LmFkZHJlc3Nlc1swXT8uY291bnRyeUNvZGUgfHwgXCJcIixcbiAgY291bnR5OiBpbml0aWFsVmFsdWVzPy5hZGRyZXNzZXNbMF0/LmNvdW50eSB8fCBcIlwiLFxuICBwb3N0YWxDb2RlOiBpbml0aWFsVmFsdWVzPy5hZGRyZXNzZXNbMF0/LnBvc3RhbENvZGUgfHwgXCJcIixcblxuICBjb21wYW55TGVnYWxGb3JtOiBpbml0aWFsVmFsdWVzPy5sZWdhbEluZm8/LmNvbXBhbnlMZWdhbEZvcm0gfHwgXCJcIixcbiAgY29tcGFueVJlZ2lzdHJhdGlvbk5vOlxuICAgIGluaXRpYWxWYWx1ZXM/LmxlZ2FsSW5mbz8uY29tcGFueVJlZ2lzdHJhdGlvbk51bWJlciB8fCBcIlwiLFxuICB2YXRSZWdpc3RyYXRpb25OdW1iZXI6IGluaXRpYWxWYWx1ZXM/LmxlZ2FsSW5mbz8udmF0UmVnaXN0cmF0aW9uTnVtYmVyIHx8IFwiXCIsXG59KTtcblxuY29uc3QgZ2V0T3JnRGV0YWlsc1ZhbGlkYXRpb25zID0gKHQ6IEZ1bmN0aW9uKSA9PiB7XG4gIHJldHVybiB7XG4gICAgb3JnTmFtZTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5vcmdyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBjb21tb25UZXh0V2l0aERpYWNyaXRlc1BhdHRlcm4sXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzcGF0dGVyblwiKVxuICAgICAgKVxuICAgICAgLm1heCg4MCwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgODApKSxcbiAgICBjb21wYW55TGVnYWxGb3JtOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLm9yZ2xlZ2FsZm9ybXJlcXVpcmVkXCIpKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIGNvbW1vblRleHRXaXRoRGlhY3JpdGVzV2l0aG91dE51bWJlcnMsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzd2l0aG91dG51bWJlclwiKVxuICAgICAgKVxuICAgICAgLm1heChcbiAgICAgICAgMTAwLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAxMDApXG4gICAgICApLFxuICAgIGVtYWlsOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLm9yZ2VtYWlscmVxdWlyZWRcIikpXG4gICAgICAuZW1haWwodChcInZhbGlkYXRpb25zLmNvbW1vbnMudmFsaWRlbWFpbFwiKSlcbiAgICAgIC5tYXRjaGVzKGVtYWlsUGF0dGVybiwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMudmFsaWRlbWFpbFwiKSlcbiAgICAgIC5tYXgoXG4gICAgICAgIDI1NCxcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMjU0KVxuICAgICAgKSxcbiAgICBwaG9uZU51bWJlcjogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5vcmdwaG9uZXJlcXVpcmVkXCIpKVxuICAgICAgLm1hdGNoZXMocGhvbmVQYXR0ZXJuLCB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5waG9uZXBhdHRlcm5cIikpXG4gICAgICAudGVzdChcbiAgICAgICAgXCJtYXgtbGVuZ3RoLXZhbGlkYXRvclwiLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5tYXhsZW5ndGhcIikucmVwbGFjZShcIiR7bWF4bGVuZ3RofVwiLCAxNSksXG4gICAgICAgICh2YWw6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2YWwgPyBjaGVja0xlbmd0aFdpdGhvdXRTcGFjZXModmFsLCAxNSkgOiB0cnVlO1xuICAgICAgICB9XG4gICAgICApLFxuICAgIHdlYkFkZHJlc3M6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24ud2ViYWRkcmVzc3JlcXVpcmVkXCIpKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIHdlYkFkZHJlc3NQYXR0ZXJuLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLndlYmFkZHJlc3NwYXR0ZXJuXCIpXG4gICAgICApXG4gICAgICAubWF4KFxuICAgICAgICAyNTYsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDI1NilcbiAgICAgICksXG5cbiAgICBhZGRyZXNzTGluZTE6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnJlcXVpcmVkKHQoXCJ2YWxpZGF0aW9ucy5yZWdpc3RyYXRpb24uYWRkcmVzc2xpbmUxcmVxdWlyZWRcIikpXG4gICAgICAubWF0Y2hlcyhcbiAgICAgICAgYWRkcmVzc0xpbmVwYXR0ZXJuLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5jb21tb250ZXh0V2l0aGRpYWNyaXRlc3BhdHRlcm5cIilcbiAgICAgIClcbiAgICAgIC5tYXgoMzUsIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDM1KSksXG4gICAgYWRkcmVzc0xpbmUyOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBhZGRyZXNzTGluZXBhdHRlcm4sXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzcGF0dGVyblwiKVxuICAgICAgKVxuICAgICAgLm1heCgzNSwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMzUpKSxcbiAgICBjaXR5OiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLmNpdHlyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzLFxuICAgICAgICB0KFwidmFsaWRhdGlvbnMuY29tbW9ucy5jb21tb250ZXh0V2l0aGRpYWNyaXRlc3dpdGhvdXRudW1iZXJcIilcbiAgICAgIClcbiAgICAgIC5tYXgoMzUsIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDM1KSksXG4gICAgY291bnRyeTogWXVwLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5jb3VudHJ5cmVxdWlyZWRcIikpXG4gICAgICAubWF4KDMsIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLm1heGxlbmd0aFwiKS5yZXBsYWNlKFwiJHttYXhsZW5ndGh9XCIsIDMpKSxcbiAgICBjb3VudHk6IFl1cC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLm1hdGNoZXMoXG4gICAgICAgIGNvbW1vblRleHRXaXRoRGlhY3JpdGVzV2l0aG91dE51bWJlcnMsXG4gICAgICAgIHQoXCJ2YWxpZGF0aW9ucy5jb21tb25zLmNvbW1vbnRleHRXaXRoZGlhY3JpdGVzd2l0aG91dG51bWJlclwiKVxuICAgICAgKVxuICAgICAgLm1heCgzNSwgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMzUpKSxcbiAgICBwb3N0YWxDb2RlOiBZdXAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbnMucmVnaXN0cmF0aW9uLnppcGNvZGVyZXF1aXJlZFwiKSlcbiAgICAgIC5tYXRjaGVzKFxuICAgICAgICBwb3N0YWxDb2RlUGF0dGVybixcbiAgICAgICAgdChcInZhbGlkYXRpb25zLnJlZ2lzdHJhdGlvbi5wb3N0YWxjb2RlcGF0dGVyblwiKVxuICAgICAgKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRlc3QoXG4gICAgICAgIFwibWF4LWxlbmd0aC12YWxpZGF0b3JcIixcbiAgICAgICAgdChcInZhbGlkYXRpb25zLmNvbW1vbnMubWF4bGVuZ3RoXCIpLnJlcGxhY2UoXCIke21heGxlbmd0aH1cIiwgMTApLFxuICAgICAgICAodmFsOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdmFsID8gY2hlY2tMZW5ndGhXaXRob3V0U3BhY2VzKHZhbCwgMTApIDogdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPcmduaXNhdGlvblZhbGlkYXRpb25TY2hlbWEgPSAodDogRnVuY3Rpb24pID0+IHtcbiAgcmV0dXJuIFl1cC5vYmplY3QoKS5zaGFwZShnZXRPcmdEZXRhaWxzVmFsaWRhdGlvbnModCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZU9yZ25pc2F0aW9uUGF5bG9hZCA9IChcbiAgdmFsdWVzOiBPcmduaXNhdGlvbkRldGFpbHNGb3JtVmFsdWVzXG4pOiBFZGl0T3JnYW5pc2F0aW9uUmVnaXN0cmF0aW9uUGF5bG9hZCA9PiB7XG4gIHJldHVybiB7XG4gICAgb3JnYW5pc2F0aW9uTmFtZTogdmFsdWVzLm9yZ05hbWUudHJpbSgpLFxuICAgIG9yZ0VtYWlsOiB2YWx1ZXMuZW1haWwudHJpbSgpLFxuICAgIHdlYkFkZHJlc3M6IHZhbHVlcy53ZWJBZGRyZXNzLFxuICAgIHBob25lTnVtYmVyOiB2YWx1ZXMucGhvbmVOdW1iZXIsXG4gICAgY29tcGFueUxlZ2FsRm9ybTogdmFsdWVzLmNvbXBhbnlMZWdhbEZvcm0sXG4gICAgYWRkcmVzczoge1xuICAgICAgY2l0eTogdmFsdWVzLmNpdHksXG4gICAgICBhZGRyZXNzTGluZTE6IHZhbHVlcy5hZGRyZXNzTGluZTEsXG4gICAgICBhZGRyZXNzTGluZTI6IHZhbHVlcy5hZGRyZXNzTGluZTIsXG4gICAgICBjb3VudHJ5Q29kZTogdmFsdWVzLmNvdW50cnksXG4gICAgICBjb3VudHk6IHZhbHVlcy5jb3VudHksXG4gICAgICBwb3N0YWxDb2RlOiB2YWx1ZXMucG9zdGFsQ29kZSxcbiAgICAgIGFkZHJlc3NUeXBlOiBBZGRyZXNzVHlwZS5DT01QQU5ZLFxuICAgIH0sXG4gICAgYmlsbGluZ0luZm86IHsgbG9naXZpdHlQb051bWJlcjogdmFsdWVzLmxvZ2l2aXR5UG9OdW1iZXIgfSxcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnbmlzYXRpb25EZXRhaWxzRm9ybVZhbHVlcyB7XG4gIG9yZ05hbWU6IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgd2ViQWRkcmVzczogc3RyaW5nO1xuXG4gIGNvbXBhbnlMZWdhbEZvcm06IHN0cmluZztcbiAgY29tcGFueVJlZ2lzdHJhdGlvbk5vOiBzdHJpbmc7XG4gIHZhdFJlZ2lzdHJhdGlvbk51bWJlcjogc3RyaW5nO1xuICBhZGRyZXNzTGluZTE6IHN0cmluZztcbiAgYWRkcmVzc0xpbmUyOiBzdHJpbmc7XG4gIGNpdHk6IHN0cmluZztcbiAgcG9zdGFsQ29kZTogc3RyaW5nO1xuICBjb3VudHJ5OiBzdHJpbmc7XG4gIGNvdW50eTogc3RyaW5nO1xuXG4gIGxvZ2l2aXR5UG9OdW1iZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdE9yZ2FuaXNhdGlvblJlZ2lzdHJhdGlvblBheWxvYWQge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIG9yZ0VtYWlsOiBzdHJpbmc7XG4gIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gIHdlYkFkZHJlc3M6IHN0cmluZztcbiAgYWRkcmVzczogT3JnYW5pc2F0aW9uQWRkcmVzcztcbiAgY29tcGFueUxlZ2FsRm9ybT86IHN0cmluZztcbiAgYmlsbGluZ0luZm8/OiBPcmdhbmlzYXRpb25CaWxsaW5nSW5mbztcbn1cbiJdLCJuYW1lcyI6WyJnZXRPcmdhbmlzYXRpb25Jbml0aWFsVmFsdWUiLCJpbml0aWFsVmFsdWVzIiwiX2EiLCJfYiIsIl9jIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9pIiwiZ2V0T3JnRGV0YWlsc1ZhbGlkYXRpb25zIiwidCIsIll1cC5zdHJpbmciLCJjb21tb25UZXh0V2l0aERpYWNyaXRlc1BhdHRlcm4iLCJjb21tb25UZXh0V2l0aERpYWNyaXRlc1dpdGhvdXROdW1iZXJzIiwiZW1haWxQYXR0ZXJuIiwicGhvbmVQYXR0ZXJuIiwidmFsIiwiY2hlY2tMZW5ndGhXaXRob3V0U3BhY2VzIiwid2ViQWRkcmVzc1BhdHRlcm4iLCJhZGRyZXNzTGluZXBhdHRlcm4iLCJwb3N0YWxDb2RlUGF0dGVybiIsImdldE9yZ25pc2F0aW9uVmFsaWRhdGlvblNjaGVtYSIsIll1cC5vYmplY3QiLCJnZXRVcGRhdGVPcmduaXNhdGlvblBheWxvYWQiLCJ2YWx1ZXMiLCJBZGRyZXNzVHlwZSJdLCJtYXBwaW5ncyI6Ijs7OztBQWtCYSxNQUFBQSxJQUE4QixDQUN6Q0MsTUFDa0M7O0FBQUE7QUFBQSxJQUNsQyxVQUFTQSxLQUFBLGdCQUFBQSxFQUFlLHFCQUFvQjtBQUFBLElBQzVDLFFBQU9BLEtBQUEsZ0JBQUFBLEVBQWUsVUFBUztBQUFBLElBQy9CLGNBQWFBLEtBQUEsZ0JBQUFBLEVBQWUsZ0JBQWU7QUFBQSxJQUMzQyxhQUFZQSxLQUFBLGdCQUFBQSxFQUFlLGVBQWM7QUFBQSxJQUV6QyxnQkFBY0MsSUFBQUQsS0FBQSxnQkFBQUEsRUFBZSxVQUFVLE9BQXpCLGdCQUFBQyxFQUE2QixpQkFBZ0I7QUFBQSxJQUMzRCxnQkFBY0MsSUFBQUYsS0FBQSxnQkFBQUEsRUFBZSxVQUFVLE9BQXpCLGdCQUFBRSxFQUE2QixpQkFBZ0I7QUFBQSxJQUMzRCxRQUFNQyxJQUFBSCxLQUFBLGdCQUFBQSxFQUFlLFVBQVUsT0FBekIsZ0JBQUFHLEVBQTZCLFNBQVE7QUFBQSxJQUMzQyxXQUFTQyxJQUFBSixLQUFBLGdCQUFBQSxFQUFlLFVBQVUsT0FBekIsZ0JBQUFJLEVBQTZCLGdCQUFlO0FBQUEsSUFDckQsVUFBUUMsSUFBQUwsS0FBQSxnQkFBQUEsRUFBZSxVQUFVLE9BQXpCLGdCQUFBSyxFQUE2QixXQUFVO0FBQUEsSUFDL0MsY0FBWUMsSUFBQU4sS0FBQSxnQkFBQUEsRUFBZSxVQUFVLE9BQXpCLGdCQUFBTSxFQUE2QixlQUFjO0FBQUEsSUFFdkQsb0JBQWtCQyxJQUFBUCxLQUFBLGdCQUFBQSxFQUFlLGNBQWYsZ0JBQUFPLEVBQTBCLHFCQUFvQjtBQUFBLElBQ2hFLHlCQUNFQyxJQUFBUixLQUFBLGdCQUFBQSxFQUFlLGNBQWYsZ0JBQUFRLEVBQTBCLDhCQUE2QjtBQUFBLElBQ3pELHlC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\n","import { FilterOperator as t } from \"../../../../../models/filter.model.js\";\nvar i = /* @__PURE__ */ ((s) => (s.REGISTERED = \"success\", s.AML_REQUEST_SENT = \"success\", s.AML_SUBMITTED = \"success\", s.TC_SENT = \"success\", s.TC_APPROVED = \"success\", s.ACTIVE = \"success\", s.DECLINED_INITIAL_APPROVAL = \"error\", s.DECLINED_AML = \"error\", s.DECLINED_AML_SUBMITTED = \"error\", s.DECLINED_TC = \"error\", s.DECLINED = \"error\", s))(i || {});\nconst L = (s, r, e) => {\n let a = [], E = i[s];\n const c = Number(((1 - 0.3) / (e - 1)).toFixed(2)), T = (n = 1) => E === \"success\" ? n : e - r + 1;\n return r && [...Array(r)].forEach((n, u) => {\n const o = u !== e - 1 ? Number(1 + c) : 0.3, p = u !== r - 1 ? \"success\" : E;\n a.push({ value: T(o), status: p });\n }), a;\n}, A = (s) => ({\n REGISTERED: s(\"superadmin.registrations.statustexts.awaitingIA\"),\n AML_REQUEST_SENT: s(\"superadmin.registrations.statustexts.awaitingAML\"),\n AML_SUBMITTED: s(\"superadmin.registrations.statustexts.amlcompleted\"),\n TC_SENT: s(\"superadmin.registrations.statustexts.awaitingTC\"),\n TC_APPROVED: s(\"superadmin.registrations.statustexts.awaitingfinal\"),\n ACTIVE: s(\"superadmin.registrations.statustexts.active\"),\n DECLINED_INITIAL_APPROVAL: s(\n \"superadmin.registrations.statustexts.declined\"\n ),\n DECLINED_AML: s(\"superadmin.registrations.statustexts.declined\"),\n DECLINED_AML_SUBMITTED: s(\"superadmin.registrations.statustexts.declined\"),\n DECLINED_TC: s(\"superadmin.registrations.statustexts.declined\"),\n DECLINED: s(\"superadmin.registrations.statustexts.declined\")\n}), I = (s, r, e) => ({\n statusConfig: L(\n s,\n r,\n e\n ),\n maxValue: e\n}), P = (s, r) => A(r)[s], M = (s, r) => {\n switch (s) {\n case \"REGISTERED\":\n return r(\"superadmin.registrations.actions.acceptIA\");\n case \"AML_REQUEST_SENT\":\n return \"\";\n case \"AML_SUBMITTED\":\n return r(\"superadmin.registrations.actions.acceptKYC\");\n case \"TC_SENT\":\n return r(\"superadmin.registrations.actions.acceptsign\");\n case \"TC_APPROVED\":\n return r(\"superadmin.registrations.actions.finalsubmission\");\n default:\n return;\n }\n}, S = (s, r) => {\n switch (s) {\n case \"AML_REQUEST_SENT\":\n return {\n label: r(\"superadmin.registrations.actions.resendinvitation\"),\n type: \"email\"\n /* EMAIL */\n };\n case \"AML_SUBMITTED\":\n return {\n label: r(\"superadmin.registrations.actions.correctamlform\"),\n type: \"correctaml\"\n /* CORRECTAML */\n };\n case \"TC_SENT\":\n return {\n label: r(\"superadmin.registrations.actions.resendtc\"),\n type: \"tcemail\"\n /* TCEMAIL */\n };\n default:\n return;\n }\n}, C = (s) => {\n switch (s) {\n case \"REGISTERED\":\n case \"AML_REQUEST_SENT\":\n case \"AML_SUBMITTED\":\n case \"TC_SENT\":\n case \"TC_APPROVED\":\n return !0;\n default:\n return;\n }\n};\nvar _ = /* @__PURE__ */ ((s) => (s.ALL = \"ALL\", s.DECLINE = \"DECLINED\", s.INITAL_APPROVAL = \"REGISTERED\", s.ACTIVE = \"TC_APPROVED\", s.AML_APPROVAL = \"AML_REQUEST_SENT\", s.TC_APPROVAL = \"TC_SENT\", s))(_ || {});\nconst N = (s) => {\n const r = [], e = [], a = [];\n return s === \"ALL\" || (s === \"DECLINED\" ? r.push({\n field: \"STATUS\",\n operator: t.LIKE,\n value: `%${s}%`\n }) : s === \"AML_REQUEST_SENT\" ? (e.push({\n filters: [\n {\n field: \"STATUS\",\n operator: t.EQ,\n value: \"AML_REQUEST_SENT\"\n }\n ]\n }), e.push({\n filters: [\n {\n field: \"STATUS\",\n operator: t.EQ,\n value: \"AML_SUBMITTED\"\n }\n ]\n })) : r.push({ field: \"STATUS\", operator: t.EQ, value: s })), { filters: r, orFilters: e, customParameters: a };\n};\nvar l = /* @__PURE__ */ ((s) => (s.APPROVE = \"approve\", s.REJECT = \"reject\", s.EMAIL = \"email\", s.TCEMAIL = \"tcemail\", s.CORRECTAML = \"correctaml\", s.DELETE = \"delete\", s))(l || {}), d = /* @__PURE__ */ ((s) => (s.savedPopupOpen = \"savedPopupOpen\", s.tcPopupOpen = \"tcPopupOpen\", s.tqPopupOpen = \"tqPopupOpen\", s.errorPopupOpen = \"errorPopupOpen\", s.erpErrorPopup = \"erpErrorPopup\", s))(d || {});\nexport {\n i as RegStatusColor,\n l as RegistrationActionType,\n _ as RegistrationFilterItem,\n d as UserNotificationTypes,\n P as getPBLabelTranslations,\n I as getProgressBarConfig,\n N as getQuickRegistrationFilters,\n L as getStatusConfig,\n A as getTransalations,\n M as showApprovaltBtns,\n C as showDeclineBtn,\n S as showEmailbtn\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cmF0aW9uLmhlbHBlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvdGFibGVzL3N1cGVyLWFkbWluL25ldy9yZWdpc3RyYXRpb25zL3JlZ2lzdHJhdGlvbi5oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJPcGVyYXRvciwgT3JGaWx0ZXIgfSBmcm9tIFwiQG1vZGVscy9maWx0ZXIubW9kZWwudHNcIjtcblxuZXhwb3J0IGVudW0gUmVnU3RhdHVzQ29sb3Ige1xuICBSRUdJU1RFUkVEID0gXCJzdWNjZXNzXCIsXG4gIEFNTF9SRVFVRVNUX1NFTlQgPSBcInN1Y2Nlc3NcIixcbiAgQU1MX1NVQk1JVFRFRCA9IFwic3VjY2Vzc1wiLFxuICBUQ19TRU5UID0gXCJzdWNjZXNzXCIsXG4gIFRDX0FQUFJPVkVEID0gXCJzdWNjZXNzXCIsXG4gIEFDVElWRSA9IFwic3VjY2Vzc1wiLFxuICBERUNMSU5FRF9JTklUSUFMX0FQUFJPVkFMID0gXCJlcnJvclwiLFxuICBERUNMSU5FRF9BTUwgPSBcImVycm9yXCIsXG4gIERFQ0xJTkVEX0FNTF9TVUJNSVRURUQgPSBcImVycm9yXCIsXG4gIERFQ0xJTkVEX1RDID0gXCJlcnJvclwiLFxuICBERUNMSU5FRCA9IFwiZXJyb3JcIixcbn1cblxuZXhwb3J0IGNvbnN0IGdldFN0YXR1c0NvbmZpZyA9IChcbiAgcmVnaXN0cmF0aW9uU3RhdHVzOiBzdHJpbmcsXG4gIGN1cnJlbnRTdGVwOiBudW1iZXIsXG4gIG1heFN0ZXBDb3VudDogbnVtYmVyLFxuKSA9PiB7XG4gIGxldCBjb25maWc6IGFueSA9IFtdO1xuICBsZXQgcmVnU3RhdHVzQ29sb3IgPVxuICAgIFJlZ1N0YXR1c0NvbG9yW3JlZ2lzdHJhdGlvblN0YXR1cyBhcyBrZXlvZiB0eXBlb2YgUmVnU3RhdHVzQ29sb3JdO1xuXG4gIGNvbnN0IHBhcnRpYWxDb3VudGVyID0gTnVtYmVyKCgoMSAtIDAuMykgLyAobWF4U3RlcENvdW50IC0gMSkpLnRvRml4ZWQoMikpO1xuXG4gIGNvbnN0IGdldFZhbHVlID0gKHZhbCA9IDEpID0+IHtcbiAgICByZXR1cm4gcmVnU3RhdHVzQ29sb3IgPT09IFwic3VjY2Vzc1wiID8gdmFsIDogbWF4U3RlcENvdW50IC0gY3VycmVudFN0ZXAgKyAxO1xuICB9O1xuXG4gIGN1cnJlbnRTdGVwICYmXG4gICAgWy4uLkFycmF5KGN1cnJlbnRTdGVwKV0/LmZvckVhY2goKF8sIGkpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IGkgIT09IG1heFN0ZXBDb3VudCAtIDEgPyBOdW1iZXIoMSArIHBhcnRpYWxDb3VudGVyKSA6IDAuMztcbiAgICAgIGNvbnN0IGNvbG9yID0gaSAhPT0gY3VycmVudFN0ZXAgLSAxID8gXCJzdWNjZXNzXCIgOiByZWdTdGF0dXNDb2xvcjtcbiAgICAgIGNvbmZpZy5wdXNoKHsgdmFsdWU6IGdldFZhbHVlKHZhbCksIHN0YXR1czogY29sb3IgfSk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUcmFuc2FsYXRpb25zID0gKHQ6IEZ1bmN0aW9uKSA9PiB7XG4gIHJldHVybiB7XG4gICAgUkVHSVNURVJFRDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5zdGF0dXN0ZXh0cy5hd2FpdGluZ0lBXCIpLFxuICAgIEFNTF9SRVFVRVNUX1NFTlQ6IHQoXCJzdXBlcmFkbWluLnJlZ2lzdHJhdGlvbnMuc3RhdHVzdGV4dHMuYXdhaXRpbmdBTUxcIiksXG4gICAgQU1MX1NVQk1JVFRFRDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5zdGF0dXN0ZXh0cy5hbWxjb21wbGV0ZWRcIiksXG4gICAgVENfU0VOVDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5zdGF0dXN0ZXh0cy5hd2FpdGluZ1RDXCIpLFxuICAgIFRDX0FQUFJPVkVEOiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLnN0YXR1c3RleHRzLmF3YWl0aW5nZmluYWxcIiksXG4gICAgQUNUSVZFOiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLnN0YXR1c3RleHRzLmFjdGl2ZVwiKSxcbiAgICBERUNMSU5FRF9JTklUSUFMX0FQUFJPVkFMOiB0KFxuICAgICAgXCJzdXBlcmFkbWluLnJlZ2lzdHJhdGlvbnMuc3RhdHVzdGV4dHMuZGVjbGluZWRcIixcbiAgICApLFxuICAgIERFQ0xJTkVEX0FNTDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5zdGF0dXN0ZXh0cy5kZWNsaW5lZFwiKSxcbiAgICBERUNMSU5FRF9BTUxfU1VCTUlUVEVEOiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLnN0YXR1c3RleHRzLmRlY2xpbmVkXCIpLFxuICAgIERFQ0xJTkVEX1RDOiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLnN0YXR1c3RleHRzLmRlY2xpbmVkXCIpLFxuICAgIERFQ0xJTkVEOiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLnN0YXR1c3RleHRzLmRlY2xpbmVkXCIpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb2dyZXNzQmFyQ29uZmlnID0gKFxuICByZWdpc3RyYXRpb25TdGF0dXM6IHN0cmluZyxcbiAgY3VycmVudFN0ZXA6IG51bWJlcixcbiAgbWF4U3RlcENvdW50OiBudW1iZXIsXG4pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXNDb25maWc6IGdldFN0YXR1c0NvbmZpZyhcbiAgICAgIHJlZ2lzdHJhdGlvblN0YXR1cyxcbiAgICAgIGN1cnJlbnRTdGVwLFxuICAgICAgbWF4U3RlcENvdW50LFxuICAgICksXG4gICAgbWF4VmFsdWU6IG1heFN0ZXBDb3VudCxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQQkxhYmVsVHJhbnNsYXRpb25zID0gKFxuICByZWdpc3RyYXRpb25TdGF0dXM6IHN0cmluZyxcbiAgdDogRnVuY3Rpb24sXG4pID0+IHtcbiAgbGV0IHRyYW5zYWxhdGlvbnMgPSBnZXRUcmFuc2FsYXRpb25zKHQpO1xuICByZXR1cm4gdHJhbnNhbGF0aW9uc1tyZWdpc3RyYXRpb25TdGF0dXMgYXMga2V5b2YgdHlwZW9mIHRyYW5zYWxhdGlvbnNdO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3dBcHByb3ZhbHRCdG5zID0gKHJlZ2lzdHJhdGlvblN0YXR1czogc3RyaW5nLCB0OiBGdW5jdGlvbikgPT4ge1xuICBzd2l0Y2ggKHJlZ2lzdHJhdGlvblN0YXR1cykge1xuICAgIGNhc2UgXCJSRUdJU1RFUkVEXCI6XG4gICAgICByZXR1cm4gdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5hY3Rpb25zLmFjY2VwdElBXCIpO1xuICAgIGNhc2UgXCJBTUxfUkVRVUVTVF9TRU5UXCI6XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICBjYXNlIFwiQU1MX1NVQk1JVFRFRFwiOlxuICAgICAgcmV0dXJuIHQoXCJzdXBlcmFkbWluLnJlZ2lzdHJhdGlvbnMuYWN0aW9ucy5hY2NlcHRLWUNcIik7XG4gICAgY2FzZSBcIlRDX1NFTlRcIjpcbiAgICAgIHJldHVybiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLmFjdGlvbnMuYWNjZXB0c2lnblwiKTtcbiAgICBjYXNlIFwiVENfQVBQUk9WRURcIjpcbiAgICAgIHJldHVybiB0KFwic3VwZXJhZG1pbi5yZWdpc3RyYXRpb25zLmFjdGlvbnMuZmluYWxzdWJtaXNzaW9uXCIpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd0VtYWlsYnRuID0gKHJlZ2lzdHJhdGlvblN0YXR1czogc3RyaW5nLCB0OiBGdW5jdGlvbikgPT4ge1xuICBzd2l0Y2ggKHJlZ2lzdHJhdGlvblN0YXR1cykge1xuICAgIGNhc2UgXCJBTUxfUkVRVUVTVF9TRU5UXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5hY3Rpb25zLnJlc2VuZGludml0YXRpb25cIiksXG4gICAgICAgIHR5cGU6IFJlZ2lzdHJhdGlvbkFjdGlvblR5cGUuRU1BSUwsXG4gICAgICB9O1xuICAgIGNhc2UgXCJBTUxfU1VCTUlUVEVEXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5hY3Rpb25zLmNvcnJlY3RhbWxmb3JtXCIpLFxuICAgICAgICB0eXBlOiBSZWdpc3RyYXRpb25BY3Rpb25UeXBlLkNPUlJFQ1RBTUwsXG4gICAgICB9O1xuICAgIGNhc2UgXCJUQ19TRU5UXCI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogdChcInN1cGVyYWRtaW4ucmVnaXN0cmF0aW9ucy5hY3Rpb25zLnJlc2VuZHRjXCIpLFxuICAgICAgICB0eXBlOiBSZWdpc3RyYXRpb25BY3Rpb25UeXBlLlRDRU1BSUwsXG4gICAgICB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvd0RlY2xpbmVCdG4gPSAocmVnaXN0cmF0aW9uU3RhdHVzOiBzdHJpbmcpID0+IHtcbiAgc3dpdGNoIChyZWdpc3RyYXRpb25TdGF0dXMpIHtcbiAgICBjYXNlIFwiUkVHSVNURVJFRFwiOlxuICAgIGNhc2UgXCJBTUxfUkVRVUVTVF9TRU5UXCI6XG4gICAgY2FzZSBcIkFNTF9TVUJNSVRURURcIjpcbiAgICBjYXNlIFwiVENfU0VOVFwiOlxuICAgIGNhc2UgXCJUQ19BUFBST1ZFRFwiOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG5cbmV4cG9ydCBlbnVtIFJlZ2lzdHJhdGlvbkZpbHRlckl0ZW0ge1xuICBBTEwgPSBcIkFMTFwiLFxuICBERUNMSU5FID0gXCJERUNMSU5FRFwiLFxuICBJTklUQUxfQVBQUk9WQUwgPSBcIlJFR0lTVEVSRURcIixcbiAgQUNUSVZFID0gXCJUQ19BUFBST1ZFRFwiLFxuICBBTUxfQVBQUk9WQUwgPSBcIkFNTF9SRVFVRVNUX1NFTlRcIiwgLy8sIEFNTF9TVUJNSVRURURcbiAgVENfQVBQUk9WQUwgPSBcIlRDX1NFTlRcIixcbn1cblxuZXhwb3J0IGNvbnN0IGdldFF1aWNrUmVnaXN0cmF0aW9uRmlsdGVycyA9IChpdGVtOiBSZWdpc3RyYXRpb25GaWx0ZXJJdGVtKSA9PiB7XG4gIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIGNvbnN0IG9yRmlsdGVyczogT3JGaWx0ZXJbXSA9IFtdO1xuICBjb25zdCBjdXN0b21QYXJhbWV0ZXJzOiBhbnkgPSBbXTtcbiAgaWYgKGl0ZW0gPT09IFJlZ2lzdHJhdGlvbkZpbHRlckl0ZW0uQUxMKSB7XG4gICAgLy8gZmlsdGVycy5wdXNoKHsgZmllbGQ6ICdTVEFUVVMnLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkVRLCB2YWx1ZTogJ0FDVElWRScgfSk7XG4gIH0gZWxzZSBpZiAoaXRlbSA9PT0gUmVnaXN0cmF0aW9uRmlsdGVySXRlbS5ERUNMSU5FKSB7XG4gICAgZmlsdGVycy5wdXNoKHtcbiAgICAgIGZpZWxkOiBcIlNUQVRVU1wiLFxuICAgICAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkxJS0UsXG4gICAgICB2YWx1ZTogYCUke2l0ZW19JWAsXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXRlbSA9PT0gUmVnaXN0cmF0aW9uRmlsdGVySXRlbS5BTUxfQVBQUk9WQUwpIHtcbiAgICBvckZpbHRlcnMucHVzaCh7XG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogXCJTVEFUVVNcIixcbiAgICAgICAgICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG4gICAgICAgICAgdmFsdWU6IFwiQU1MX1JFUVVFU1RfU0VOVFwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBvckZpbHRlcnMucHVzaCh7XG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaWVsZDogXCJTVEFUVVNcIixcbiAgICAgICAgICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG4gICAgICAgICAgdmFsdWU6IFwiQU1MX1NVQk1JVFRFRFwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmaWx0ZXJzLnB1c2goeyBmaWVsZDogXCJTVEFUVVNcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTogaXRlbSB9KTtcbiAgfVxuICByZXR1cm4geyBmaWx0ZXJzLCBvckZpbHRlcnMsIGN1c3RvbVBhcmFtZXRlcnMgfTtcbn07XG5cbmV4cG9ydCBlbnVtIFJlZ2lzdHJhdGlvbkFjdGlvblR5cGUge1xuICBBUFBST1ZFID0gXCJhcHByb3ZlXCIsXG4gIFJFSkVDVCA9IFwicmVqZWN0XCIsXG4gIEVNQUlMID0gXCJlbWFpbFwiLFxuICBUQ0VNQUlMID0gXCJ0Y2VtYWlsXCIsXG4gIENPUlJFQ1RBTUwgPSBcImNvcnJlY3RhbWxcIixcbiAgREVMRVRFID0gXCJkZWxldGVcIixcbn1cblxuZXhwb3J0IGVudW0gVXNlck5vdGlmaWNhdGlvblR5cGVzIHtcbiAgc2F2ZWRQb3B1cE9wZW4gPSBcInNhdmVkUG9wdXBPcGVuXCIsXG4gIHRjUG9wdXBPcGVuID0gXCJ0Y1BvcHVwT3BlblwiLFxuICB0cVBvcHVwT3BlbiA9IFwidHFQb3B1cE9wZW5cIixcbiAgZXJyb3JQb3B1cE9wZW4gPSBcImVycm9yUG9wdXBPcGVuXCIsXG4gIGVycEVycm9yUG9wdXAgPSBcImVycEVycm9yUG9wdXBcIixcbn1cblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBOb3RpZmljYXRpb25TZXR0aW5nc1R5cGUgPSB7XG4gIGhlYWRlcjogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGluZm90ZXh0MTogc3RyaW5nO1xuICBpbmZvdGV4dDI6IHN0cmluZztcbiAgY2xvc2V0ZXh0OiBzdHJpbmc7XG4gIG9uQ2FuY2VsOiAoKSA9PiBhbnk7XG4gIG9uQ29uZmlybT86IChpZDogYW55KSA9PiBhbnk7XG59O1xuIl0sIm5hbWVzIjpbIlJlZ1N0YXR1c0NvbG9yIiwiZ2V0U3RhdHVzQ29uZmlnIiwicmVnaXN0cmF0aW9uU3RhdHVzIiwiY3VycmVudFN0ZXAiLCJtYXhTdGVwQ291bnQiLCJjb25maWciLCJyZWdTdGF0dXNDb2xvciIsInBhcnRpYWxDb3VudGVyIiwiZ2V0VmFsdWUiLCJ2YWwiLCJfIiwiaSIsImNvbG9yIiwiZ2V0VHJhbnNhbGF0aW9ucyIsInQiLCJnZXRQcm9ncmVzc0JhckNvbmZpZyIsImdldFBCTGFiZWxUcmFuc2xhdGlvbnMiLCJzaG93QXBwcm92YWx0QnRucyIsInNob3dFbWFpbGJ0biIsInNob3dEZWNsaW5lQnRuIiwiUmVnaXN0cmF0aW9uRmlsdGVySXRlbSIsImdldFF1aWNrUmVnaXN0cmF0aW9uRmlsdGVycyIsIml0ZW0iLCJmaWx0ZXJzIiwib3JGaWx0ZXJzIiwiY3VzdG9tUGFyYW1ldGVycyIsIkZpbHRlck9wZXJhdG9yIiwiUmVnaXN0cmF0aW9uQWN0aW9uVHlwZSIsIlVzZXJOb3RpZmljYXRpb25UeXBlcyJdLCJtYXBwaW5ncyI6IjtBQUVZLElBQUFBLHNCQUFBQSxPQUNWQSxFQUFBLGFBQWEsV0FDYkEsRUFBQSxtQkFBbUIsV0FDbkJBLEVBQUEsZ0JBQWdCLFdBQ2hCQSxFQUFBLFVBQVUsV0FDVkEsRUFBQSxjQUFjLFdBQ2RBLEVBQUEsU0FBUyxXQUNUQSxFQUFBLDRCQUE0QixTQUM1QkEsRUFBQSxlQUFlLFNBQ2ZBLEVBQUEseUJBQXlCLFNBQ3pCQSxFQUFBLGNBQWMsU0FDZEEsRUFBQSxXQUFXLFNBWERBLElBQUFBLEtBQUEsQ0FBQSxDQUFBO0FBY0wsTUFBTUMsSUFBa0IsQ0FDN0JDLEdBQ0FDLEdBQ0FDLE1BQ0c7QUFDSCxNQUFJQyxJQUFjLENBQUMsR0FDZkMsSUFDRk4sRUFBZUUsQ0FBaUQ7QUFFNUQsUUFBQUssSUFBaUIsU0FBUyxJQUFJ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\n","const g = (s, r, a, o, t) => (e) => new Promise((w) => {\n let d = [];\n const i = [], c = [], l = [];\n let n = e.password;\n e.password || (n = \"a\"), \"oldPassword\" in e && !e.oldPassword && c.push(\"minLength\"), e.password !== e.retype && i.push(\"passwordNotMatched\"), !e.usePolicyAccepted && t && l.push(\"usePolicyAccepted\"), a.validatePassword({ password: n, username: s, familyName: r }).then((p) => {\n p.item.valid || (d = [...d, ...p.item.errors]), o && o(p), w({\n ...d.length > 0 && { password: JSON.stringify(d) },\n ...i.length > 0 && {\n retype: JSON.stringify(i)\n },\n ...c.length > 0 && {\n oldPassword: JSON.stringify(c)\n },\n ...l.length > 0 && {\n usePolicyAccepted: JSON.stringify(l)\n }\n });\n });\n}), f = (s, r) => {\n const a = {\n passwordNotMatched: {\n message: \"passwordpage.validation.notmatched\",\n valid: !1\n },\n ...r ? { usePolicyAccepted: {\n message: \"passwordpage.validation.usePolicyAccepted\",\n valid: !1\n } } : {}\n };\n return new Promise((o) => {\n s.validatePassword({\n password: \"a\",\n username: \"a\",\n familyName: \"a\"\n }).then((t) => {\n t.item.policyErrors.forEach((e) => {\n a[e.errorKey] = {\n message: e.errorMessage,\n valid: !1\n };\n }), o(a);\n }).catch(() => {\n console.log(\"Fetch all validation errors failed\"), o(a);\n });\n });\n}, P = (s) => {\n var a, o;\n const r = (o = (a = s == null ? void 0 : s.response) == null ? void 0 : a.data) == null ? void 0 : o.errorMessage;\n if (r) {\n let t = [];\n return r && (r.indexOf(\",\") !== -1 ? t = r.split(\",\") : t.push(r)), t.map((e) => ({ message: e, valid: !1 }));\n }\n return [];\n}, h = (s) => ({\n title: `passwordpage.${s}.title`,\n subtitle: `passwordpage.${s}.subtitle`,\n passwordPlaceholder: `passwordpage.${s}.password`,\n retypePlaceholder: `passwordpage.${s}.retype`,\n buttonLabel: `passwordpage.${s}.confirm`,\n acceptUsePolicy: `passwordpage.${s}.acceptUsePolicy`\n});\nexport {\n P as extractPasswordChangeErrors,\n f as getAllErrorsPasswordForm,\n h as getPasswordFormLabelsObject,\n g as validatorForPasswordForm\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtdmFsaWRhdGlvbnMudXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9wYXNzd29yZC12YWxpZGF0aW9ucy51dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtaWtFcnJvcnMgfSBmcm9tIFwiZm9ybWlrXCI7XG5pbXBvcnQge1xuICBQYXNzd29yZEZvcm1MYWJlbHMsXG4gIFBhc3N3b3JkRm9ybVR5cGUsXG4gIFBhc3N3b3JkVmFsaWRhdGlvblNlcnZpY2UsXG4gIFZhbGlkYXRpb25EaXNwbGF5TW9kZWwsXG59IGZyb20gXCJAbW9kZWxzL3Bhc3N3b3JkLXZhbGlkYXRpb25zLm1vZGVsLnRzXCI7XG5pbXBvcnQge1xuICBJdGVtUmVzcG9uc2UsXG4gIFZhbGlkYXRlUGFzc3dvcmRSZXNwb25zZSxcbn0gZnJvbSBcIkBtb2RlbHMvYXBpLWludGVyZmFjZS5tb2RlbC50c1wiO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdG9yRm9yUGFzc3dvcmRGb3JtID1cbiAgKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgZmFtaWx5TmFtZTogc3RyaW5nLFxuICAgIHZhbGlkYXRpb25TZXJ2aWNlOiBQYXNzd29yZFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIG9uVmFsaWRhdGU/OiAocmVzcG9uc2U6IEl0ZW1SZXNwb25zZTxWYWxpZGF0ZVBhc3N3b3JkUmVzcG9uc2U+KSA9PiBhbnksXG4gICAgYWN0aXZhdGlvbj86IGJvb2xlYW4sXG4gICkgPT5cbiAgKHZhbHVlczogUGFzc3dvcmRGb3JtVHlwZSkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGb3JtaWtFcnJvcnM8UGFzc3dvcmRGb3JtVHlwZT4+KChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3QgcmV0eXBlRXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgY29uc3Qgb2xkUGFzc3dvcmRFcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCB1c2VQb2xpY3lBY2NlcHRlZEVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBwYXNzd29yZCA9IHZhbHVlcy5wYXNzd29yZDtcblxuICAgICAgaWYgKCF2YWx1ZXMucGFzc3dvcmQpIHtcbiAgICAgICAgcGFzc3dvcmQgPSBcImFcIjsgLy8gTk9TT05BUiAtIEJGOiBiYWNrZW5kIGlzc3VlLCB3b3JrYXJvdW5kIHRvIGF2b2lkIGJhY2tlbmQgZXJyb3JcbiAgICAgIH1cbiAgICAgIGlmIChcIm9sZFBhc3N3b3JkXCIgaW4gdmFsdWVzICYmICF2YWx1ZXMub2xkUGFzc3dvcmQpIHtcbiAgICAgICAgb2xkUGFzc3dvcmRFcnJvcnMucHVzaChcIm1pbkxlbmd0aFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMucGFzc3dvcmQgIT09IHZhbHVlcy5yZXR5cGUpIHtcbiAgICAgICAgcmV0eXBlRXJyb3JzLnB1c2goXCJwYXNzd29yZE5vdE1hdGNoZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlcy51c2VQb2xpY3lBY2NlcHRlZCAmJiBhY3RpdmF0aW9uKSB7XG4gICAgICAgIHVzZVBvbGljeUFjY2VwdGVkRXJyb3JzLnB1c2goXCJ1c2VQb2xpY3lBY2NlcHRlZFwiKTtcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRpb25TZXJ2aWNlXG4gICAgICAgIC52YWxpZGF0ZVBhc3N3b3JkKHsgcGFzc3dvcmQsIHVzZXJuYW1lLCBmYW1pbHlOYW1lIH0pXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcG9uc2UuaXRlbS52YWxpZCkge1xuICAgICAgICAgICAgZXJyb3JzID0gWy4uLmVycm9ycywgLi4ucmVzcG9uc2UuaXRlbS5lcnJvcnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob25WYWxpZGF0ZSkge1xuICAgICAgICAgICAgb25WYWxpZGF0ZShyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgLi4uKGVycm9ycy5sZW5ndGggPiAwICYmIHsgcGFzc3dvcmQ6IEpTT04uc3RyaW5naWZ5KGVycm9ycykgfSksXG4gICAgICAgICAgICAuLi4ocmV0eXBlRXJyb3JzLmxlbmd0aCA+IDAgJiYge1xuICAgICAgICAgICAgICByZXR5cGU6IEpTT04uc3RyaW5naWZ5KHJldHlwZUVycm9ycyksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC4uLihvbGRQYXNzd29yZEVycm9ycy5sZW5ndGggPiAwICYmIHtcbiAgICAgICAgICAgICAgb2xkUGFzc3dvcmQ6IEpTT04uc3RyaW5naWZ5KG9sZFBhc3N3b3JkRXJyb3JzKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHVzZVBvbGljeUFjY2VwdGVkRXJyb3JzLmxlbmd0aCA+IDAgJiYge1xuICAgICAgICAgICAgICB1c2VQb2xpY3lBY2NlcHRlZDogSlNPTi5zdHJpbmdpZnkodXNlUG9saWN5QWNjZXB0ZWRFcnJvcnMpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsRXJyb3JzUGFzc3dvcmRGb3JtID0gKFxuICB2YWxpZGF0aW9uU2VydmljZTogUGFzc3dvcmRWYWxpZGF0aW9uU2VydmljZSxcbiAgYWN0aXZhdGlvbj86IGJvb2xlYW4sXG4pOiBQcm9taXNlPHtcbiAgW2tleTogc3RyaW5nXTogVmFsaWRhdGlvbkRpc3BsYXlNb2RlbDtcbn0+ID0+IHtcbiAgY29uc3QgZXJyb3JzOiB7IFtrZXk6IHN0cmluZ106IFZhbGlkYXRpb25EaXNwbGF5TW9kZWwgfSA9IHtcbiAgICBwYXNzd29yZE5vdE1hdGNoZWQ6IHtcbiAgICAgIG1lc3NhZ2U6IFwicGFzc3dvcmRwYWdlLnZhbGlkYXRpb24ubm90bWF0Y2hlZFwiLFxuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgLi4uKGFjdGl2YXRpb24gPyB7IHVzZVBvbGljeUFjY2VwdGVkOiB7XG4gICAgICBtZXNzYWdlOiBcInBhc3N3b3JkcGFnZS52YWxpZGF0aW9uLnVzZVBvbGljeUFjY2VwdGVkXCIsXG4gICAgICB2YWxpZDogZmFsc2UsXG4gICAgfSB9IDoge30pLFxuICB9O1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICB2YWxpZGF0aW9uU2VydmljZVxuICAgICAgLnZhbGlkYXRlUGFzc3dvcmQoe1xuICAgICAgICBwYXNzd29yZDogXCJhXCIsXG4gICAgICAgIHVzZXJuYW1lOiBcImFcIixcbiAgICAgICAgZmFtaWx5TmFtZTogXCJhXCIsXG4gICAgICB9KSAvLyBOT1NPTkFSIC0gQkY6IGJhY2tlbmQgaXNzdWUsIHdvcmthcm91bmQgdG8gYXZvaWQgYmFja2VuZCBlcnJvclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHJlc3BvbnNlLml0ZW0ucG9saWN5RXJyb3JzLmZvckVhY2goKHBvbGljeUVycm9yKSA9PiB7XG4gICAgICAgICAgZXJyb3JzW3BvbGljeUVycm9yLmVycm9yS2V5XSA9IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHBvbGljeUVycm9yLmVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzb2x2ZShlcnJvcnMpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiRmV0Y2ggYWxsIHZhbGlkYXRpb24gZXJyb3JzIGZhaWxlZFwiKTtcbiAgICAgICAgcmVzb2x2ZShlcnJvcnMpO1xuICAgICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RQYXNzd29yZENoYW5nZUVycm9ycyA9IChcbiAgZXJyb3I6IGFueSxcbik6IFZhbGlkYXRpb25EaXNwbGF5TW9kZWxbXSA9PiB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yPy5yZXNwb25zZT8uZGF0YT8uZXJyb3JNZXNzYWdlIGFzIHN0cmluZztcbiAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgIGxldCBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgIGlmIChlcnJvck1lc3NhZ2UuaW5kZXhPZihcIixcIikgIT09IC0xKSB7XG4gICAgICAgIG1lc3NhZ2VzID0gZXJyb3JNZXNzYWdlLnNwbGl0KFwiLFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4gKHsgbWVzc2FnZSwgdmFsaWQ6IGZhbHNlIH0pKTtcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmRGb3JtTGFiZWxzT2JqZWN0ID0gKFxuICBrZXk6IHN0cmluZyxcbik6IFBhc3N3b3JkRm9ybUxhYmVscyA9PiB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6IGBwYXNzd29yZHBhZ2UuJHtrZXl9LnRpdGxlYCxcbiAgICBzdWJ0aXRsZTogYHBhc3N3b3JkcGFnZS4ke2tleX0uc3VidGl0bGVgLFxuICAgIHBhc3N3b3JkUGxhY2Vob2xkZXI6IGBwYXNzd29yZHBhZ2UuJHtrZXl9LnBhc3N3b3JkYCxcbiAgICByZXR5cGVQbGFjZWhvbGRlcjogYHBhc3N3b3JkcGFnZS4ke2tleX0ucmV0eXBlYCxcbiAgICBidXR0b25MYWJlbDogYHBhc3N3b3JkcGFnZS4ke2tleX0uY29uZmlybWAsXG4gICAgYWNjZXB0VXNlUG9saWN5OiBgcGFzc3dvcmRwYWdlLiR7a2V5fS5hY2NlcHRVc2VQb2xpY3lgLFxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0b3JGb3JQYXNzd29yZEZvcm0iLCJ1c2VybmFtZSIsImZhbWlseU5hbWUiLCJ2YWxpZGF0aW9uU2VydmljZSIsIm9uVmFsaWRhdGUiLCJhY3RpdmF0aW9uIiwidmFsdWVzIiwicmVzb2x2ZSIsImVycm9ycyIsInJldHlwZUVycm9ycyIsIm9sZFBhc3N3b3JkRXJyb3JzIiwidXNlUG9saWN5QWNjZXB0ZWRFcnJvcnMiLCJwYXNzd29yZCIsInJlc3BvbnNlIiwiZ2V0QWxsRXJyb3JzUGFzc3dvcmRGb3JtIiwicG9saWN5RXJyb3IiLCJleHRyYWN0UGFzc3dvcmRDaGFuZ2VFcnJvcnMiLCJlcnJvciIsIl9hIiwiX2IiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlcyIsIm1lc3NhZ2UiLCJnZXRQYXNzd29yZEZvcm1MYWJlbHNPYmplY3QiLCJrZXkiXSwibWFwcGluZ3MiOiJBQVlhLE1BQUFBLElBQ1gsQ0FDRUMsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsTUFFRixDQUFDQyxNQUNRLElBQUksUUFBd0MsQ0FBQ0MsTUFBWTtBQUM5RCxNQUFJQyxJQUFtQixDQUFDO0FBQ3hCLFFBQU1DLElBQXlCLENBQUMsR0FDMUJDLElBQThCLENBQUMsR0FDL0JDLElBQW9DLENBQUM7QUFDM0MsTUFBSUMsSUFBV04sRUFBTztBQUVsQixFQUFDQSxFQUFPLGFBQ0NNLElBQUEsTUFFVCxpQkFBaUJOLEtBQVUsQ0FBQ0EsRUFBTyxlQUNyQ0ksRUFBa0IsS0FBSyxXQUFXLEdBRWhDSixFQUFPLGFBQWFBLEVBQU8sVUFDN0JHLEVBQWEsS0FBSyxvQkFBb0IsR0FFcEMsQ0FBQ0gsRUFBTyxxQkFBcUJELEtBQy9CTSxFQUF3QixLQUFLLG1CQUFtQixHQUcvQ1IsRUFBQSxpQkFBaUIsRUFBRSxVQUFBUyxHQUFVLFVBQUFYLEdBQVUsWUFBQUMsR0FBWSxFQUNuRCxLQUFLLENBQUNXLE1BQWE7QUFDZCxJQUFDQSxFQUFTLEtBQUssVUFDakJMLElBQVMsQ0FBQyxHQUFHQSxHQUFRLEdBQUdLLEVBQVMsS0FBSyxNQUFNLElBRTFDVCxLQUNGQSxFQUFXUyxDQUFRLEdBRWJOLEVBQUE7QUFBQSxNQUNOLEdBQUlDLEVBQU8sU0FBUyxLQUFLLEVBQUUsVUFBVSxLQUFLLFVBQVVBLENBQU0sRUFBRTtBQUFBLE1BQzVELEdBQUlDLEVBQWEsU0FBUyxLQUFLO0FBQUEsUUFDN0IsUUFBUSxLQUFLLFVBQVVBLENBQVk7QUFBQSxNQUNyQztBQUFBLE1BQ0EsR0FBSUMsRUFBa0IsU0FBUyxLQUFLO0FBQUEsUUFDbEMsYUFBYSxLQUFLLFVBQVVBLENBQWlCO0FBQUEsTUFDL0M7QUFBQSxNQUNBLEdBQUlDLEVBQXdCLFNBQVMsS0FBSztBQUFBLFFBQ3hDLG1CQUFtQixLQUFLLFVBQVVBLENBQXVCO0FBQUEsTUFBQTtBQUFBLElBQzNELENBQ0Q7QUFBQSxFQUFBLENBQ0Y7QUFBQSxDQUNKLEdBR1FHLElBQTJCLENBQ3RDWCxHQUNBRSxNQUdJO0FBQ0osUUFBTUcsSUFBb0Q7QUFBQSxJQUN4RCxvQkFBb0I7QUFBQSxNQUNsQixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsR0FBSUgsSUFBYSxFQUFFLG1CQUFtQjtBQUFBLE1BQ3BDLFNBQVM7QUFBQSxNQUNULE9BQU87QUFBQSxJQUFBLE1BQ0gsQ0FBQTtBQUFBLEVBQ1I7QUFDTyxTQUFBLElBQUksUUFBUSxDQUFDRSxNQUFZO0FBQzlCLElBQUFKLEVBQ0csaUJBQWlCO0FBQUEsTUFDaEIsVUFBVTtBQUFBLE1BQ1YsVUFBVTtBQUFBLE1BQ1YsWUFBWTtBQUFBLElBQUEsQ0FDYixFQUNBLEtBQUssQ0FBQ1UsTUFBYTtBQUNsQixNQUFBQSxFQUFTLEtBQUssYUFBYSxRQUFRLENBQUNFLE1BQWdCO0FBQzNDLFFBQUFQLEVBQUFPLEVBQVksUUFBUSxJQUFJO0FBQUEsVUFDN0IsU0FBU0EsRUFBWTtBQUFBLFVBQ3JCLE9BQU87QUFBQSxRQUNUO0FBQUEsTUFBQSxDQUNELEdBQ0RSLEVBQVFDLENBQU07QUFBQSxJQUFBLENBQ2YsRUFDQSxNQUFNLE1BQU07QUFDWCxjQUFRLElBQUksb0NBQW9DLEdBQ2hERCxFQUFRQyxDQUFNO0FBQUEsSUFBQSxDQUNmO0FBQUEsRUFBQSxDQUNKO0FBQ0gsR0FFYVEsSUFBOEIsQ0FDekNDLE1BQzZCO0FBOUZsQixNQUFBQyxHQUFBQztBQStGTCxRQUFBQyxLQUFlRCxLQUFBRCxJQUFBRCxLQUFBLGdCQUFBQSxFQUFPLGFBQVAsZ0JBQUFDLEVBQWlCLFNBQWpCLGdCQUFBQyxFQUF1QjtBQUM1QyxNQUFJQyxHQUFjO0FBQ2hCLFFBQUlDLElBQXFCLENBQUM7QUFFMUIsV0FBSUQsTUFDRUEsRUFBYSxRQUFRLEdBQUcsTUFBTSxLQUNyQkMsSUFBQUQsRUFBYSxNQUFNLEdBQUcsSUFFakNDLEVBQVMsS0FBS0QsQ0FBWSxJQUd2QkMsRUFBUyxJQUFJLENBQUNDLE9BQWEsRUFBRSxTQUFBQSxHQUFTLE9BQU8sS0FBUTtBQUFBLEVBQUE7QUFFOUQsU0FBTyxDQUFDO0FBQ1YsR0FFYUMsSUFBOEIsQ0FDekNDLE9BRU87QUFBQSxFQUNMLE9BQU8sZ0JBQWdCQSxDQUFHO0FBQUEsRUFDMUIsVUFBVSxnQkFBZ0JBLENBQUc7QUFBQSxFQUM3QixxQkFBcUIsZ0JBQWdCQSxDQUFHO0FBQUEsRUFDeEMsbUJBQW1CLGdCQUFnQkEsQ0FBRztBQUFBLEVBQ3RDLGFBQWEsZ0JBQWdCQSxDQUFHO0FBQUEsRUFDaEMsaUJBQWlCLGdCQUFnQkEsQ0FBRztBQUN0QzsifQ==\n","const i = (t, g) => {\n const e = t && t.settings ? t.settings.filter((n) => n.key === g) : [];\n return e && e.length > 0 ? e[0].value : \"{}\";\n};\nexport {\n i as getUserSettingByName\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy51dGlscy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL3NldHRpbmcudXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlclNldHRpbmdzUGF5bG9hZCB9IGZyb20gXCJAbW9kZWxzL2FwcC11c2VyLm1vZGVsLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyU2V0dGluZ0J5TmFtZSA9IChcbiAgcmVzcG9uc2U6IFVzZXJTZXR0aW5nc1BheWxvYWQsXG4gIG5hbWU6IHN0cmluZyxcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHVzZXJTZXR0aW5nID1cbiAgICByZXNwb25zZSAmJiByZXNwb25zZS5zZXR0aW5nc1xuICAgICAgPyByZXNwb25zZS5zZXR0aW5ncy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ua2V5ID09PSBuYW1lKVxuICAgICAgOiBbXTtcbiAgcmV0dXJuIHVzZXJTZXR0aW5nICYmIHVzZXJTZXR0aW5nLmxlbmd0aCA+IDAgPyB1c2VyU2V0dGluZ1swXS52YWx1ZSA6IFwie31cIjtcbn07XG4iXSwibmFtZXMiOlsiZ2V0VXNlclNldHRpbmdCeU5hbWUiLCJyZXNwb25zZSIsIm5hbWUiLCJ1c2VyU2V0dGluZyIsIml0ZW0iXSwibWFwcGluZ3MiOiJBQUVhLE1BQUFBLElBQXVCLENBQ2xDQyxHQUNBQyxNQUNXO0FBQ1gsUUFBTUMsSUFDSkYsS0FBWUEsRUFBUyxXQUNqQkEsRUFBUyxTQUFTLE9BQU8sQ0FBQ0csTUFBU0EsRUFBSyxRQUFRRixDQUFJLElBQ3BELENBQUM7QUFDUCxTQUFPQyxLQUFlQSxFQUFZLFNBQVMsSUFBSUEsRUFBWSxDQUFDLEVBQUUsUUFBUTtBQUN4RTsifQ==\n","const i = (t) => (\"0\" + t).slice(-2), o = (t, r) => {\n var e;\n return t !== null ? (e = Number(t)) == null ? void 0 : e.toFixed(r) : \"\";\n};\nexport {\n i as formatTwoDigits,\n o as numberToFixedDigit\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC51dGlscy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL21hdGgudXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZvcm1hdFR3b0RpZ2l0cyA9IChuOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIChcIjBcIiArIG4pLnNsaWNlKC0yKTtcbn07XG5cbmV4cG9ydCBjb25zdCBudW1iZXJUb0ZpeGVkRGlnaXQgPSAodmFsOiBzdHJpbmcgfCBudW1iZXIsIHRvRGlnaXQ6IG51bWJlcikgPT4ge1xuICByZXR1cm4gdmFsICE9PSBudWxsID8gTnVtYmVyKHZhbCk/LnRvRml4ZWQodG9EaWdpdCkgOiBcIlwiO1xufTtcbiJdLCJuYW1lcyI6WyJmb3JtYXRUd29EaWdpdHMiLCJuIiwibnVtYmVyVG9GaXhlZERpZ2l0IiwidmFsIiwidG9EaWdpdCIsIl9hIl0sIm1hcHBpbmdzIjoiQUFBYSxNQUFBQSxJQUFrQixDQUFDQyxPQUN0QixNQUFNQSxHQUFHLE1BQU0sRUFBRSxHQUdkQyxJQUFxQixDQUFDQyxHQUFzQkMsTUFBb0I7QUFKaEUsTUFBQUM7QUFLWCxTQUFPRixNQUFRLFFBQU9FLElBQUEsT0FBT0YsQ0FBRyxNQUFWLGdCQUFBRSxFQUFhLFFBQVFELEtBQVc7QUFDeEQ7In0=\n","const C = (e) => {\n let d = \"-\";\n return e && (d = `${Math.abs(e).toFixed(4)}° ${e > 0 ? \"N\" : \"S\"}`), d;\n}, P = (e) => {\n let d = \"-\";\n return e && (d = `${Math.abs(e).toFixed(4)}° ${e > 0 ? \"E\" : \"W\"}`), d;\n}, t = (e, d) => {\n const s = e.find((r) => r.code === d);\n return (s == null ? void 0 : s.name) || d;\n}, m = (e) => e ? `${e}\n` : \"\", y = (e) => e ? `${e}, ` : \"\", g = (e, d) => e.City === d.City && e.CountryCode === d.CountryCode && e.LocationName === d.LocationName && e.Position.Latitude === d.Position.Latitude && e.Position.Longitude === d.Position.Longitude && e.PostalCode === d.PostalCode && e.AddressLine1 === d.AddressLine1 && e.AddressLine2 === d.AddressLine2, N = (e, d) => {\n var s, r, L, u;\n return e.City === d.City && e.CountryCode === d.CountryCode && e.LocationName === d.LocationName && ((s = e == null ? void 0 : e.Position) == null ? void 0 : s.Latitude) === ((r = d == null ? void 0 : d.Position) == null ? void 0 : r.Latitude) && ((L = e == null ? void 0 : e.Position) == null ? void 0 : L.Longitude) === ((u = d == null ? void 0 : d.Position) == null ? void 0 : u.Longitude) && e.PostalCode === d.PostalCode && e.AddressLine1 === d.AddressLine1 && e.AddressLine2 === d.AddressLine2;\n}, f = (e, d) => {\n var s, r, L, u;\n return e.City === d.City && e.CountryCode === d.CountryCode && e.LocationName === d.LocationName && ((s = e == null ? void 0 : e.Position) == null ? void 0 : s.Latitude) === ((r = d == null ? void 0 : d.Position) == null ? void 0 : r.Latitude) && ((L = e == null ? void 0 : e.Position) == null ? void 0 : L.Longitude) === ((u = d == null ? void 0 : d.Position) == null ? void 0 : u.Longitude) && e.PostalCode === d.PostalCode && e.AddressLine1 === d.AddressLine1 && e.AddressLine2 === d.AddressLine2;\n};\nexport {\n g as areLocationsEqual,\n f as areTSAndShipmentLocationsEqual,\n N as areTSLocationsEqual,\n P as formatLatitude,\n C as formatLongitude,\n m as getAddressItemLabel,\n t as getCountryCodeName,\n y as getLocationItem\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9sb2NhdGlvbi51dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb3VudHJ5T3B0aW9uIH0gZnJvbSBcIkBtb2RlbHMvdXRpbGl0eS5tb2RlbC50c1wiO1xuaW1wb3J0IHsgUG9zaXRpb24sIFNoaXBtZW50TG9jYXRpb24gfSBmcm9tIFwiQG1vZGVscy9sb2NhdGlvbi5tb2RlbC50c1wiO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0TG9uZ2l0dWRlID0gKGxuZzogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgbGV0IGZvcm1hdHRlZCA9IFwiLVwiO1xuICBpZiAobG5nKSB7XG4gICAgZm9ybWF0dGVkID0gYCR7TWF0aC5hYnMobG5nKS50b0ZpeGVkKDQpfcKwICR7bG5nID4gMCA/IFwiTlwiIDogXCJTXCJ9YDtcbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdExhdGl0dWRlID0gKGxhdDogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgbGV0IGZvcm1hdHRlZCA9IFwiLVwiO1xuICBpZiAobGF0KSB7XG4gICAgZm9ybWF0dGVkID0gYCR7TWF0aC5hYnMobGF0KS50b0ZpeGVkKDQpfcKwICR7bGF0ID4gMCA/IFwiRVwiIDogXCJXXCJ9YDtcbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvdW50cnlDb2RlTmFtZSA9IChcbiAgY291bnRyaWVzOiBDb3VudHJ5T3B0aW9uW10sXG4gIGNvZGU6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IHJlcyA9IGNvdW50cmllcy5maW5kKChjKSA9PiBjLmNvZGUgPT09IGNvZGUpO1xuICByZXR1cm4gcmVzPy5uYW1lIHx8IGNvZGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWRkcmVzc0l0ZW1MYWJlbCA9IChpdGVtPzogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBpdGVtID8gYCR7aXRlbX1cXG5gIDogXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhdGlvbkl0ZW0gPSAoaXRlbTogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBpdGVtID8gYCR7aXRlbX0sIGAgOiBcIlwiO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUU0xvY2F0aW9uIHtcbiAgLy9TaG91bGQgYmUgcmVtb3ZlZCB3aGVuIFNoaXBtZW50TG9jYXRpb24gd2lsbCBiZSB0aGUgc2FtZVxuICBZb3VyTG9jYXRpb25SZWZlcmVuY2U/OiBzdHJpbmc7XG4gIFBvc2l0aW9uPzogUG9zaXRpb247XG4gIExvY2F0aW9uTmFtZTogc3RyaW5nO1xuICBTdG9wTnVtYmVyPzogc3RyaW5nO1xuICBBZGRyZXNzTGluZTE/OiBzdHJpbmc7XG4gIEFkZHJlc3NMaW5lMj86IHN0cmluZztcbiAgUG9zdGFsQ29kZT86IHN0cmluZztcbiAgQ2l0eT86IHN0cmluZztcbiAgQ291bnRyeUNvZGU/OiBzdHJpbmc7XG4gIFRpbWVab25lPzogc3RyaW5nO1xuICBTZXF1ZW5jZU51bWJlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IGFyZUxvY2F0aW9uc0VxdWFsID0gKFxuICBsb2NhdGlvbkE6IFNoaXBtZW50TG9jYXRpb24sXG4gIGxvY2F0aW9uQjogU2hpcG1lbnRMb2NhdGlvbixcbikgPT5cbiAgbG9jYXRpb25BLkNpdHkgPT09IGxvY2F0aW9uQi5DaXR5ICYmXG4gIGxvY2F0aW9uQS5Db3VudHJ5Q29kZSA9PT0gbG9jYXRpb25CLkNvdW50cnlDb2RlICYmXG4gIGxvY2F0aW9uQS5Mb2NhdGlvbk5hbWUgPT09IGxvY2F0aW9uQi5Mb2NhdGlvbk5hbWUgJiZcbiAgbG9jYXRpb25BLlBvc2l0aW9uLkxhdGl0dWRlID09PSBsb2NhdGlvbkIuUG9zaXRpb24uTGF0aXR1ZGUgJiZcbiAgbG9jYXRpb25BLlBvc2l0aW9uLkxvbmdpdHVkZSA9PT0gbG9jYXRpb25CLlBvc2l0aW9uLkxvbmdpdHVkZSAmJlxuICBsb2NhdGlvbkEuUG9zdGFsQ29kZSA9PT0gbG9jYXRpb25CLlBvc3RhbENvZGUgJiZcbiAgbG9jYXRpb25BLkFkZHJlc3NMaW5lMSA9PT0gbG9jYXRpb25CLkFkZHJlc3NMaW5lMSAmJlxuICBsb2NhdGlvbkEuQWRkcmVzc0xpbmUyID09PSBsb2NhdGlvbkIuQWRkcmVzc0xpbmUyO1xuXG5leHBvcnQgY29uc3QgYXJlVFNMb2NhdGlvbnNFcXVhbCA9IChcbiAgbG9jYXRpb25BOiBUU0xvY2F0aW9uLFxuICBsb2NhdGlvbkI6IFRTTG9jYXRpb24sXG4pID0+XG4gIGxvY2F0aW9uQS5DaXR5ID09PSBsb2NhdGlvbkIuQ2l0eSAmJlxuICBsb2NhdGlvbkEuQ291bnRyeUNvZGUgPT09IGxvY2F0aW9uQi5Db3VudHJ5Q29kZSAmJlxuICBsb2NhdGlvbkEuTG9jYXRpb25OYW1lID09PSBsb2NhdGlvbkIuTG9jYXRpb25OYW1lICYmXG4gIGxvY2F0aW9uQT8uUG9zaXRpb24/LkxhdGl0dWRlID09PSBsb2NhdGlvbkI/LlBvc2l0aW9uPy5MYXRpdHVkZSAmJlxuICBsb2NhdGlvbkE/LlBvc2l0aW9uPy5Mb25naXR1ZGUgPT09IGxvY2F0aW9uQj8uUG9zaXRpb24/LkxvbmdpdHVkZSAmJlxuICBsb2NhdGlvbkEuUG9zdGFsQ29kZSA9PT0gbG9jYXRpb25CLlBvc3RhbENvZGUgJiZcbiAgbG9jYXRpb25BLkFkZHJlc3NMaW5lMSA9PT0gbG9jYXRpb25CLkFkZHJlc3NMaW5lMSAmJlxuICBsb2NhdGlvbkEuQWRkcmVzc0xpbmUyID09PSBsb2NhdGlvbkIuQWRkcmVzc0xpbmUyO1xuXG5leHBvcnQgY29uc3QgYXJlVFNBbmRTaGlwbWVudExvY2F0aW9uc0VxdWFsID0gKFxuICBsb2NhdGlvbkE6IFRTTG9jYXRpb24sXG4gIGxvY2F0aW9uQjogU2hpcG1lbnRMb2NhdGlvbiwgLy9UT0RPIFRPIEJFIFJFTU9WRUQgV0hFTiBTaGlwbWVudExvY2F0aW9uIHdpbGwgbG9vayBsaWtlIFRTTG9jYXRpb25cbikgPT5cbiAgbG9jYXRpb25BLkNpdHkgPT09IGxvY2F0aW9uQi5DaXR5ICYmXG4gIGxvY2F0aW9uQS5Db3VudHJ5Q29kZSA9PT0gbG9jYXRpb25CLkNvdW50cnlDb2RlICYmXG4gIGxvY2F0aW9uQS5Mb2NhdGlvbk5hbWUgPT09IGxvY2F0aW9uQi5Mb2NhdGlvbk5hbWUgJiZcbiAgbG9jYXRpb25BPy5Qb3NpdGlvbj8uTGF0aXR1ZGUgPT09IGxvY2F0aW9uQj8uUG9zaXRpb24/LkxhdGl0dWRlICYmXG4gIGxvY2F0aW9uQT8uUG9zaXRpb24/LkxvbmdpdHVkZSA9PT0gbG9jYXRpb25CPy5Qb3NpdGlvbj8uTG9uZ2l0dWRlICYmXG4gIGxvY2F0aW9uQS5Qb3N0YWxDb2RlID09PSBsb2NhdGlvbkIuUG9zdGFsQ29kZSAmJlxuICBsb2NhdGlvbkEuQWRkcmVzc0xpbmUxID09PSBsb2NhdGlvbkIuQWRkcmVzc0xpbmUxICYmXG4gIGxvY2F0aW9uQS5BZGRyZXNzTGluZTIgPT09IGxvY2F0aW9uQi5BZGRyZXNzTGluZTI7XG4iXSwibmFtZXMiOlsiZm9ybWF0TG9uZ2l0dWRlIiwibG5nIiwiZm9ybWF0dGVkIiwiZm9ybWF0TGF0aXR1ZGUiLCJsYXQiLCJnZXRDb3VudHJ5Q29kZU5hbWUiLCJjb3VudHJpZXMiLCJjb2RlIiwicmVzIiwiYyIsImdldEFkZHJlc3NJdGVtTGFiZWwiLCJpdGVtIiwiZ2V0TG9jYXRpb25JdGVtIiwiYXJlTG9jYXRpb25zRXF1YWwiLCJsb2NhdGlvbkEiLCJsb2NhdGlvbkIiLCJhcmVUU0xvY2F0aW9uc0VxdWFsIiwiX2EiLCJfYiIsIl9jIiwiX2QiLCJhcmVUU0FuZFNoaXBtZW50TG9jYXRpb25zRXF1YWwiXSwibWFwcGluZ3MiOiJBQUdhLE1BQUFBLElBQWtCLENBQUNDLE1BQXdCO0FBQ3RELE1BQUlDLElBQVk7QUFDaEIsU0FBSUQsTUFDRkMsSUFBWSxHQUFHLEtBQUssSUFBSUQsQ0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUtBLElBQU0sSUFBSSxNQUFNLEdBQUcsS0FFMURDO0FBQ1QsR0FFYUMsSUFBaUIsQ0FBQ0MsTUFBd0I7QUFDckQsTUFBSUYsSUFBWTtBQUNoQixTQUFJRSxNQUNGRixJQUFZLEdBQUcsS0FBSyxJQUFJRSxDQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBS0EsSUFBTSxJQUFJLE1BQU0sR0FBRyxLQUUxREY7QUFDVCxHQUVhRyxJQUFxQixDQUNoQ0MsR0FDQUMsTUFDdUI7QUFDdkIsUUFBTUMsSUFBTUYsRUFBVSxLQUFLLENBQUNHLE1BQU1BLEVBQUUsU0FBU0YsQ0FBSTtBQUNqRCxVQUFPQyxLQUFBLGdCQUFBQSxFQUFLLFNBQVFEO0FBQ3RCLEdBRWFHLElBQXNCLENBQUNDLE1BQzNCQSxJQUFPLEdBQUdBLENBQUk7QUFBQSxJQUFPLElBR2pCQyxJQUFrQixDQUFDRCxNQUN2QkEsSUFBTyxHQUFHQSxDQUFJLE9BQU8sSUFrQmpCRSxJQUFvQixDQUMvQkMsR0FDQUMsTUFFQUQsRUFBVSxTQUFTQyxFQUFVLFFBQzdCRCxFQUFVLGdCQUFnQkMsRUFBVSxlQUNwQ0QsRUFBVSxpQkFBaUJDLEVBQVUsZ0JBQ3JDRCxFQUFVLFNBQVMsYUFBYUMsRUFBVSxTQUFTLFlBQ25ERCxFQUFVLFNBQVMsY0FBY0MsRUFBVSxTQUFTLGFBQ3BERCxFQUFVLGVBQWVDLEVBQVUsY0FDbkNELEVBQVUsaUJBQWlCQyxFQUFVLGdCQUNyQ0QsRUFBVSxpQkFBaUJDLEVBQVUsY0FFMUJDLElBQXNCLENBQ2pDRixHQUNBQyxNQUVBO0FBaEVXLE1BQUFFLEdBQUFDLEdBQUFDLEdBQUFDO0FBZ0VYLFNBQUFOLEVBQVUsU0FBU0MsRUFBVSxRQUM3QkQsRUFBVSxnQkFBZ0JDLEVBQVUsZUFDcENELEVBQVUsaUJBQWlCQyxFQUFVLGtCQUNyQ0UsSUFBQUgsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBRyxFQUFxQixnQkFBYUMsSUFBQUgsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBRyxFQUFxQixlQUN2REMsSUFBQUwsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBSyxFQUFxQixpQkFBY0MsSUFBQUwsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBSyxFQUFxQixjQUN4RE4sRUFBVSxlQUFlQyxFQUFVLGNBQ25DRCxFQUFVLGlCQUFpQkMsRUFBVSxnQkFDckNELEVBQVUsaUJBQWlCQyxFQUFVO0FBQUEsR0FFMUJNLElBQWlDLENBQzVDUCxHQUNBQyxNQUVBO0FBN0VXLE1BQUFFLEdBQUFDLEdBQUFDLEdBQUFDO0FBNkVYLFNBQUFOLEVBQVUsU0FBU0MsRUFBVSxRQUM3QkQsRUFBVSxnQkFBZ0JDLEVBQVUsZUFDcENELEVBQVUsaUJBQWlCQyxFQUFVLGtCQUNyQ0UsSUFBQUgsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBRyxFQUFxQixnQkFBYUMsSUFBQUgsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBRyxFQUFxQixlQUN2REMsSUFBQUwsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBSyxFQUFxQixpQkFBY0MsSUFBQUwsS0FBQSxnQkFBQUEsRUFBVyxhQUFYLGdCQUFBSyxFQUFxQixjQUN4RE4sRUFBVSxlQUFlQyxFQUFVLGNBQ25DRCxFQUFVLGlCQUFpQkMsRUFBVSxnQkFDckNELEVBQVUsaUJBQWlCQyxFQUFVO0FBQUE7In0=\n","const a = (t) => {\n try {\n const e = localStorage.getItem(t);\n if (e === null)\n return;\n const r = JSON.parse(e);\n if (r != null && r.expireTime && r.expireTime <= Date.now()) {\n o(t);\n return;\n } else\n return r;\n } catch {\n return;\n }\n}, s = (t, e) => {\n try {\n const r = JSON.stringify(e);\n localStorage.setItem(t, r);\n } catch {\n }\n}, o = (t) => {\n try {\n localStorage.removeItem(t);\n } catch {\n }\n}, i = (t) => {\n try {\n const e = sessionStorage.getItem(t);\n return e === null ? void 0 : JSON.parse(e);\n } catch {\n return;\n }\n}, c = (t, e) => {\n try {\n const r = JSON.stringify(e);\n sessionStorage.setItem(t, r);\n } catch {\n }\n}, n = (t) => {\n try {\n sessionStorage.removeItem(t);\n } catch {\n }\n};\nexport {\n a as loadLocalStorageState,\n i as loadSessionStorageState,\n o as removeLocalStorageState,\n n as removeSessionStorageState,\n s as saveLocalStorageState,\n c as saveSessionStorageState\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS11dGlscy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL2xvY2FsLXN0b3JhZ2UtdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGxvYWRMb2NhbFN0b3JhZ2VTdGF0ZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgaWYgKHNlcmlhbGl6ZWRTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc2VyaWFsaXplZFN0YXRlKTtcbiAgICBpZiAoZGF0YT8uZXhwaXJlVGltZSAmJiBkYXRhLmV4cGlyZVRpbWUgPD0gRGF0ZS5ub3coKSkge1xuICAgICAgcmVtb3ZlTG9jYWxTdG9yYWdlU3RhdGUoa2V5KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbFN0b3JhZ2VTdGF0ZSA9IChrZXk6IHN0cmluZywgc3RhdGU6IGFueSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IEpTT04uc3RyaW5naWZ5KHN0YXRlKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHNlcmlhbGl6ZWRTdGF0ZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElnbm9yZSB3cml0ZSBlcnJvcnMuXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbFN0b3JhZ2VTdGF0ZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElnbm9yZSB3cml0ZSBlcnJvcnMuXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkU2Vzc2lvblN0b3JhZ2VTdGF0ZSA9IChrZXk6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRTdGF0ZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICBpZiAoc2VyaWFsaXplZFN0YXRlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5wYXJzZShzZXJpYWxpemVkU3RhdGUpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZVNlc3Npb25TdG9yYWdlU3RhdGUgPSAoa2V5OiBzdHJpbmcsIHN0YXRlOiBhbnkpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzZXJpYWxpemVkU3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSk7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShrZXksIHNlcmlhbGl6ZWRTdGF0ZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIElnbm9yZSB3cml0ZSBlcnJvcnMuXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZXNzaW9uU3RvcmFnZVN0YXRlID0gKGtleTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBJZ25vcmUgd3JpdGUgZXJyb3JzLlxuICB9XG59O1xuIl0sIm5hbWVzIjpbImxvYWRMb2NhbFN0b3JhZ2VTdGF0ZSIsImtleSIsInNlcmlhbGl6ZWRTdGF0ZSIsImRhdGEiLCJyZW1vdmVMb2NhbFN0b3JhZ2VTdGF0ZSIsInNhdmVMb2NhbFN0b3JhZ2VTdGF0ZSIsInN0YXRlIiwibG9hZFNlc3Npb25TdG9yYWdlU3RhdGUiLCJzYXZlU2Vzc2lvblN0b3JhZ2VTdGF0ZSIsInJlbW92ZVNlc3Npb25TdG9yYWdlU3RhdGUiXSwibWFwcGluZ3MiOiJBQUFhLE1BQUFBLElBQXdCLENBQUNDLE1BQWdCO0FBQ2hELE1BQUE7QUFDSSxVQUFBQyxJQUFrQixhQUFhLFFBQVFELENBQUc7QUFDaEQsUUFBSUMsTUFBb0I7QUFDZjtBQUVILFVBQUFDLElBQU8sS0FBSyxNQUFNRCxDQUFlO0FBQ3ZDLFFBQUlDLEtBQUEsUUFBQUEsRUFBTSxjQUFjQSxFQUFLLGNBQWMsS0FBSyxPQUFPO0FBQ3JELE1BQUFDLEVBQXdCSCxDQUFHO0FBQ3BCO0FBQUEsSUFBQTtBQUVBLGFBQUFFO0FBQUEsVUFFRztBQUNMO0FBQUEsRUFBQTtBQUVYLEdBRWFFLElBQXdCLENBQUNKLEdBQWFLLE1BQWU7QUFDNUQsTUFBQTtBQUNJLFVBQUFKLElBQWtCLEtBQUssVUFBVUksQ0FBSztBQUMvQixpQkFBQSxRQUFRTCxHQUFLQyxDQUFlO0FBQUEsVUFDN0I7QUFBQSxFQUFBO0FBR2hCLEdBRWFFLElBQTBCLENBQUNILE1BQWdCO0FBQ2xELE1BQUE7QUFDRixpQkFBYSxXQUFXQSxDQUFHO0FBQUEsVUFDZjtBQUFBLEVBQUE7QUFHaEIsR0FFYU0sSUFBMEIsQ0FBQ04sTUFBZ0I7QUFDbEQsTUFBQTtBQUNJLFVBQUFDLElBQWtCLGVBQWUsUUFBUUQsQ0FBRztBQUNsRCxXQUFJQyxNQUFvQixPQUNmLFNBRUYsS0FBSyxNQUFNQSxDQUFlO0FBQUEsVUFDckI7QUFDTDtBQUFBLEVBQUE7QUFFWCxHQUVhTSxJQUEwQixDQUFDUCxHQUFhSyxNQUFlO0FBQzlELE1BQUE7QUFDSSxVQUFBSixJQUFrQixLQUFLLFVBQVVJLENBQUs7QUFDN0IsbUJBQUEsUUFBUUwsR0FBS0MsQ0FBZTtBQUFBLFVBQy9CO0FBQUEsRUFBQTtBQUdoQixHQUVhTyxJQUE0QixDQUFDUixNQUFnQjtBQUNwRCxNQUFBO0FBQ0YsbUJBQWUsV0FBV0EsQ0FBRztBQUFBLFVBQ2pCO0FBQUEsRUFBQTtBQUdoQjsifQ==\n","import { a as Xr, c as tr, g as Zr } from \"../_commonjsHelpers-BkfeUUK-.js\";\nimport { loadLocalStorageState as O, saveLocalStorageState as he, removeLocalStorageState as qe, saveSessionStorageState as Be, removeSessionStorageState as He } from \"./local-storage-utils.js\";\nimport { URLQueryKeys as E } from \"../models/filter.model.js\";\nvar jr = Error, et = EvalError, rt = RangeError, tt = ReferenceError, $r = SyntaxError, fe = TypeError, nt = URIError, at = function() {\n if (typeof Symbol != \"function\" || typeof Object.getOwnPropertySymbols != \"function\")\n return !1;\n if (typeof Symbol.iterator == \"symbol\")\n return !0;\n var e = {}, t = Symbol(\"test\"), n = Object(t);\n if (typeof t == \"string\" || Object.prototype.toString.call(t) !== \"[object Symbol]\" || Object.prototype.toString.call(n) !== \"[object Symbol]\")\n return !1;\n var o = 42;\n e[t] = o;\n for (t in e)\n return !1;\n if (typeof Object.keys == \"function\" && Object.keys(e).length !== 0 || typeof Object.getOwnPropertyNames == \"function\" && Object.getOwnPropertyNames(e).length !== 0)\n return !1;\n var a = Object.getOwnPropertySymbols(e);\n if (a.length !== 1 || a[0] !== t || !Object.prototype.propertyIsEnumerable.call(e, t))\n return !1;\n if (typeof Object.getOwnPropertyDescriptor == \"function\") {\n var i = Object.getOwnPropertyDescriptor(e, t);\n if (i.value !== o || i.enumerable !== !0)\n return !1;\n }\n return !0;\n}, nr = typeof Symbol < \"u\" && Symbol, ot = at, it = function() {\n return typeof nr != \"function\" || typeof Symbol != \"function\" || typeof nr(\"foo\") != \"symbol\" || typeof Symbol(\"bar\") != \"symbol\" ? !1 : ot();\n}, Oe = {\n __proto__: null,\n foo: {}\n}, lt = Object, ft = function() {\n return { __proto__: Oe }.foo === Oe.foo && !(Oe instanceof lt);\n}, ct = \"Function.prototype.bind called on incompatible \", ut = Object.prototype.toString, st = Math.max, pt = \"[object Function]\", ar = function(e, t) {\n for (var n = [], o = 0; o < e.length; o += 1)\n n[o] = e[o];\n for (var a = 0; a < t.length; a += 1)\n n[a + e.length] = t[a];\n return n;\n}, yt = function(e, t) {\n for (var n = [], o = t, a = 0; o < e.length; o += 1, a += 1)\n n[a] = e[o];\n return n;\n}, dt = function(r, e) {\n for (var t = \"\", n = 0; n < r.length; n += 1)\n t += r[n], n + 1 < r.length && (t += e);\n return t;\n}, vt = function(e) {\n var t = this;\n if (typeof t != \"function\" || ut.apply(t) !== pt)\n throw new TypeError(ct + t);\n for (var n = yt(arguments, 1), o, a = function() {\n if (this instanceof o) {\n var u = t.apply(\n this,\n ar(n, arguments)\n );\n return Object(u) === u ? u : this;\n }\n return t.apply(\n e,\n ar(n, arguments)\n );\n }, i = st(0, t.length - n.length), f = [], l = 0; l < i; l++)\n f[l] = \"$\" + l;\n if (o = Function(\"binder\", \"return function (\" + dt(f, \",\") + \"){ return binder.apply(this,arguments); }\")(a), t.prototype) {\n var s = function() {\n };\n s.prototype = t.prototype, o.prototype = new s(), s.prototype = null;\n }\n return o;\n}, gt = vt, ze = Function.prototype.bind || gt, ht = Function.prototype.call, mt = Object.prototype.hasOwnProperty, St = ze, bt = St.call(ht, mt), y, wt = jr, At = et, Et = rt, Pt = tt, X = $r, Y = fe, Ot = nt, Ir = Function, $e = function(r) {\n try {\n return Ir('\"use strict\"; return (' + r + \").constructor;\")();\n } catch {\n }\n}, Q = Object.getOwnPropertyDescriptor;\nif (Q)\n try {\n Q({}, \"\");\n } catch {\n Q = null;\n }\nvar Ie = function() {\n throw new Y();\n}, $t = Q ? function() {\n try {\n return arguments.callee, Ie;\n } catch {\n try {\n return Q(arguments, \"callee\").get;\n } catch {\n return Ie;\n }\n }\n}() : Ie, z = it(), It = ft(), b = Object.getPrototypeOf || (It ? function(r) {\n return r.__proto__;\n} : null), J = {}, Ft = typeof Uint8Array > \"u\" || !b ? y : b(Uint8Array), K = {\n __proto__: null,\n \"%AggregateError%\": typeof AggregateError > \"u\" ? y : AggregateError,\n \"%Array%\": Array,\n \"%ArrayBuffer%\": typeof ArrayBuffer > \"u\" ? y : ArrayBuffer,\n \"%ArrayIteratorPrototype%\": z && b ? b([][Symbol.iterator]()) : y,\n \"%AsyncFromSyncIteratorPrototype%\": y,\n \"%AsyncFunction%\": J,\n \"%AsyncGenerator%\": J,\n \"%AsyncGeneratorFunction%\": J,\n \"%AsyncIteratorPrototype%\": J,\n \"%Atomics%\": typeof Atomics > \"u\" ? y : Atomics,\n \"%BigInt%\": typeof BigInt > \"u\" ? y : BigInt,\n \"%BigInt64Array%\": typeof BigInt64Array > \"u\" ? y : BigInt64Array,\n \"%BigUint64Array%\": typeof BigUint64Array > \"u\" ? y : BigUint64Array,\n \"%Boolean%\": Boolean,\n \"%DataView%\": typeof DataView > \"u\" ? y : DataView,\n \"%Date%\": Date,\n \"%decodeURI%\": decodeURI,\n \"%decodeURIComponent%\": decodeURIComponent,\n \"%encodeURI%\": encodeURI,\n \"%encodeURIComponent%\": encodeURIComponent,\n \"%Error%\": wt,\n \"%eval%\": eval,\n // eslint-disable-line no-eval\n \"%EvalError%\": At,\n \"%Float32Array%\": typeof Float32Array > \"u\" ? y : Float32Array,\n \"%Float64Array%\": typeof Float64Array > \"u\" ? y : Float64Array,\n \"%FinalizationRegistry%\": typeof FinalizationRegistry > \"u\" ? y : FinalizationRegistry,\n \"%Function%\": Ir,\n \"%GeneratorFunction%\": J,\n \"%Int8Array%\": typeof Int8Array > \"u\" ? y : Int8Array,\n \"%Int16Array%\": typeof Int16Array > \"u\" ? y : Int16Array,\n \"%Int32Array%\": typeof Int32Array > \"u\" ? y : Int32Array,\n \"%isFinite%\": isFinite,\n \"%isNaN%\": isNaN,\n \"%IteratorPrototype%\": z && b ? b(b([][Symbol.iterator]())) : y,\n \"%JSON%\": typeof JSON == \"object\" ? JSON : y,\n \"%Map%\": typeof Map > \"u\" ? y : Map,\n \"%MapIteratorPrototype%\": typeof Map > \"u\" || !z || !b ? y : b((/* @__PURE__ */ new Map())[Symbol.iterator]()),\n \"%Math%\": Math,\n \"%Number%\": Number,\n \"%Object%\": Object,\n \"%parseFloat%\": parseFloat,\n \"%parseInt%\": parseInt,\n \"%Promise%\": typeof Promise > \"u\" ? y : Promise,\n \"%Proxy%\": typeof Proxy > \"u\" ? y : Proxy,\n \"%RangeError%\": Et,\n \"%ReferenceError%\": Pt,\n \"%Reflect%\": typeof Reflect > \"u\" ? y : Reflect,\n \"%RegExp%\": RegExp,\n \"%Set%\": typeof Set > \"u\" ? y : Set,\n \"%SetIteratorPrototype%\": typeof Set > \"u\" || !z || !b ? y : b((/* @__PURE__ */ new Set())[Symbol.iterator]()),\n \"%SharedArrayBuffer%\": typeof SharedArrayBuffer > \"u\" ? y : SharedArrayBuffer,\n \"%String%\": String,\n \"%StringIteratorPrototype%\": z && b ? b(\"\"[Symbol.iterator]()) : y,\n \"%Symbol%\": z ? Symbol : y,\n \"%SyntaxError%\": X,\n \"%ThrowTypeError%\": $t,\n \"%TypedArray%\": Ft,\n \"%TypeError%\": Y,\n \"%Uint8Array%\": typeof Uint8Array > \"u\" ? y : Uint8Array,\n \"%Uint8ClampedArray%\": typeof Uint8ClampedArray > \"u\" ? y : Uint8ClampedArray,\n \"%Uint16Array%\": typeof Uint16Array > \"u\" ? y : Uint16Array,\n \"%Uint32Array%\": typeof Uint32Array > \"u\" ? y : Uint32Array,\n \"%URIError%\": Ot,\n \"%WeakMap%\": typeof WeakMap > \"u\" ? y : WeakMap,\n \"%WeakRef%\": typeof WeakRef > \"u\" ? y : WeakRef,\n \"%WeakSet%\": typeof WeakSet > \"u\" ? y : WeakSet\n};\nif (b)\n try {\n null.error;\n } catch (r) {\n var Rt = b(b(r));\n K[\"%Error.prototype%\"] = Rt;\n }\nvar Dt = function r(e) {\n var t;\n if (e === \"%AsyncFunction%\")\n t = $e(\"async function () {}\");\n else if (e === \"%GeneratorFunction%\")\n t = $e(\"function* () {}\");\n else if (e === \"%AsyncGeneratorFunction%\")\n t = $e(\"async function* () {}\");\n else if (e === \"%AsyncGenerator%\") {\n var n = r(\"%AsyncGeneratorFunction%\");\n n && (t = n.prototype);\n } else if (e === \"%AsyncIteratorPrototype%\") {\n var o = r(\"%AsyncGenerator%\");\n o && b && (t = b(o.prototype));\n }\n return K[e] = t, t;\n}, or = {\n __proto__: null,\n \"%ArrayBufferPrototype%\": [\"ArrayBuffer\", \"prototype\"],\n \"%ArrayPrototype%\": [\"Array\", \"prototype\"],\n \"%ArrayProto_entries%\": [\"Array\", \"prototype\", \"entries\"],\n \"%ArrayProto_forEach%\": [\"Array\", \"prototype\", \"forEach\"],\n \"%ArrayProto_keys%\": [\"Array\", \"prototype\", \"keys\"],\n \"%ArrayProto_values%\": [\"Array\", \"prototype\", \"values\"],\n \"%AsyncFunctionPrototype%\": [\"AsyncFunction\", \"prototype\"],\n \"%AsyncGenerator%\": [\"AsyncGeneratorFunction\", \"prototype\"],\n \"%AsyncGeneratorPrototype%\": [\"AsyncGeneratorFunction\", \"prototype\", \"prototype\"],\n \"%BooleanPrototype%\": [\"Boolean\", \"prototype\"],\n \"%DataViewPrototype%\": [\"DataView\", \"prototype\"],\n \"%DatePrototype%\": [\"Date\", \"prototype\"],\n \"%ErrorPrototype%\": [\"Error\", \"prototype\"],\n \"%EvalErrorPrototype%\": [\"EvalError\", \"prototype\"],\n \"%Float32ArrayPrototype%\": [\"Float32Array\", \"prototype\"],\n \"%Float64ArrayPrototype%\": [\"Float64Array\", \"prototype\"],\n \"%FunctionPrototype%\": [\"Function\", \"prototype\"],\n \"%Generator%\": [\"GeneratorFunction\", \"prototype\"],\n \"%GeneratorPrototype%\": [\"GeneratorFunction\", \"prototype\", \"prototype\"],\n \"%Int8ArrayPrototype%\": [\"Int8Array\", \"prototype\"],\n \"%Int16ArrayPrototype%\": [\"Int16Array\", \"prototype\"],\n \"%Int32ArrayPrototype%\": [\"Int32Array\", \"prototype\"],\n \"%JSONParse%\": [\"JSON\", \"parse\"],\n \"%JSONStringify%\": [\"JSON\", \"stringify\"],\n \"%MapPrototype%\": [\"Map\", \"prototype\"],\n \"%NumberPrototype%\": [\"Number\", \"prototype\"],\n \"%ObjectPrototype%\": [\"Object\", \"prototype\"],\n \"%ObjProto_toString%\": [\"Object\", \"prototype\", \"toString\"],\n \"%ObjProto_valueOf%\": [\"Object\", \"prototype\", \"valueOf\"],\n \"%PromisePrototype%\": [\"Promise\", \"prototype\"],\n \"%PromiseProto_then%\": [\"Promise\", \"prototype\", \"then\"],\n \"%Promise_all%\": [\"Promise\", \"all\"],\n \"%Promise_reject%\": [\"Promise\", \"reject\"],\n \"%Promise_resolve%\": [\"Promise\", \"resolve\"],\n \"%RangeErrorPrototype%\": [\"RangeError\", \"prototype\"],\n \"%ReferenceErrorPrototype%\": [\"ReferenceError\", \"prototype\"],\n \"%RegExpPrototype%\": [\"RegExp\", \"prototype\"],\n \"%SetPrototype%\": [\"Set\", \"prototype\"],\n \"%SharedArrayBufferPrototype%\": [\"SharedArrayBuffer\", \"prototype\"],\n \"%StringPrototype%\": [\"String\", \"prototype\"],\n \"%SymbolPrototype%\": [\"Symbol\", \"prototype\"],\n \"%SyntaxErrorPrototype%\": [\"SyntaxError\", \"prototype\"],\n \"%TypedArrayPrototype%\": [\"TypedArray\", \"prototype\"],\n \"%TypeErrorPrototype%\": [\"TypeError\", \"prototype\"],\n \"%Uint8ArrayPrototype%\": [\"Uint8Array\", \"prototype\"],\n \"%Uint8ClampedArrayPrototype%\": [\"Uint8ClampedArray\", \"prototype\"],\n \"%Uint16ArrayPrototype%\": [\"Uint16Array\", \"prototype\"],\n \"%Uint32ArrayPrototype%\": [\"Uint32Array\", \"prototype\"],\n \"%URIErrorPrototype%\": [\"URIError\", \"prototype\"],\n \"%WeakMapPrototype%\": [\"WeakMap\", \"prototype\"],\n \"%WeakSetPrototype%\": [\"WeakSet\", \"prototype\"]\n}, ce = ze, me = bt, Tt = ce.call(Function.call, Array.prototype.concat), xt = ce.call(Function.apply, Array.prototype.splice), ir = ce.call(Function.call, String.prototype.replace), Se = ce.call(Function.call, String.prototype.slice), _t = ce.call(Function.call, RegExp.prototype.exec), Ut = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g, Nt = /\\\\(\\\\)?/g, Ct = function(e) {\n var t = Se(e, 0, 1), n = Se(e, -1);\n if (t === \"%\" && n !== \"%\")\n throw new X(\"invalid intrinsic syntax, expected closing `%`\");\n if (n === \"%\" && t !== \"%\")\n throw new X(\"invalid intrinsic syntax, expected opening `%`\");\n var o = [];\n return ir(e, Ut, function(a, i, f, l) {\n o[o.length] = f ? ir(l, Nt, \"$1\") : i || a;\n }), o;\n}, Bt = function(e, t) {\n var n = e, o;\n if (me(or, n) && (o = or[n], n = \"%\" + o[0] + \"%\"), me(K, n)) {\n var a = K[n];\n if (a === J && (a = Dt(n)), typeof a > \"u\" && !t)\n throw new Y(\"intrinsic \" + e + \" exists, but is not available. Please file an issue!\");\n return {\n alias: o,\n name: n,\n value: a\n };\n }\n throw new X(\"intrinsic \" + e + \" does not exist!\");\n}, ee = function(e, t) {\n if (typeof e != \"string\" || e.length === 0)\n throw new Y(\"intrinsic name must be a non-empty string\");\n if (arguments.length > 1 && typeof t != \"boolean\")\n throw new Y('\"allowMissing\" argument must be a boolean');\n if (_t(/^%?[^%]*%?$/, e) === null)\n throw new X(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");\n var n = Ct(e), o = n.length > 0 ? n[0] : \"\", a = Bt(\"%\" + o + \"%\", t), i = a.name, f = a.value, l = !1, s = a.alias;\n s && (o = s[0], xt(n, Tt([0, 1], s)));\n for (var u = 1, p = !0; u < n.length; u += 1) {\n var c = n[u], v = Se(c, 0, 1), g = Se(c, -1);\n if ((v === '\"' || v === \"'\" || v === \"`\" || g === '\"' || g === \"'\" || g === \"`\") && v !== g)\n throw new X(\"property names with quotes must have matching quotes\");\n if ((c === \"constructor\" || !p) && (l = !0), o += \".\" + c, i = \"%\" + o + \"%\", me(K, i))\n f = K[i];\n else if (f != null) {\n if (!(c in f)) {\n if (!t)\n throw new Y(\"base intrinsic for \" + e + \" exists, but the property is not available.\");\n return;\n }\n if (Q && u + 1 >= n.length) {\n var m = Q(f, c);\n p = !!m, p && \"get\" in m && !(\"originalValue\" in m.get) ? f = m.get : f = f[c];\n } else\n p = me(f, c), f = f[c];\n p && !l && (K[i] = f);\n }\n }\n return f;\n}, Fr = { exports: {} }, Fe, lr;\nfunction Ve() {\n if (lr) return Fe;\n lr = 1;\n var r = ee, e = r(\"%Object.defineProperty%\", !0) || !1;\n if (e)\n try {\n e({}, \"a\", { value: 1 });\n } catch {\n e = !1;\n }\n return Fe = e, Fe;\n}\nvar Lt = ee, ve = Lt(\"%Object.getOwnPropertyDescriptor%\", !0);\nif (ve)\n try {\n ve([], \"length\");\n } catch {\n ve = null;\n }\nvar Rr = ve, fr = Ve(), Wt = $r, V = fe, cr = Rr, Mt = function(e, t, n) {\n if (!e || typeof e != \"object\" && typeof e != \"function\")\n throw new V(\"`obj` must be an object or a function`\");\n if (typeof t != \"string\" && typeof t != \"symbol\")\n throw new V(\"`property` must be a string or a symbol`\");\n if (arguments.length > 3 && typeof arguments[3] != \"boolean\" && arguments[3] !== null)\n throw new V(\"`nonEnumerable`, if provided, must be a boolean or null\");\n if (arguments.length > 4 && typeof arguments[4] != \"boolean\" && arguments[4] !== null)\n throw new V(\"`nonWritable`, if provided, must be a boolean or null\");\n if (arguments.length > 5 && typeof arguments[5] != \"boolean\" && arguments[5] !== null)\n throw new V(\"`nonConfigurable`, if provided, must be a boolean or null\");\n if (arguments.length > 6 && typeof arguments[6] != \"boolean\")\n throw new V(\"`loose`, if provided, must be a boolean\");\n var o = arguments.length > 3 ? arguments[3] : null, a = arguments.length > 4 ? arguments[4] : null, i = arguments.length > 5 ? arguments[5] : null, f = arguments.length > 6 ? arguments[6] : !1, l = !!cr && cr(e, t);\n if (fr)\n fr(e, t, {\n configurable: i === null && l ? l.configurable : !i,\n enumerable: o === null && l ? l.enumerable : !o,\n value: n,\n writable: a === null && l ? l.writable : !a\n });\n else if (f || !o && !a && !i)\n e[t] = n;\n else\n throw new Wt(\"This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.\");\n}, Le = Ve(), Dr = function() {\n return !!Le;\n};\nDr.hasArrayLengthDefineBug = function() {\n if (!Le)\n return null;\n try {\n return Le([], \"length\", { value: 1 }).length !== 1;\n } catch {\n return !0;\n }\n};\nvar Gt = Dr, kt = ee, ur = Mt, Qt = Gt(), sr = Rr, pr = fe, Kt = kt(\"%Math.floor%\"), qt = function(e, t) {\n if (typeof e != \"function\")\n throw new pr(\"`fn` is not a function\");\n if (typeof t != \"number\" || t < 0 || t > 4294967295 || Kt(t) !== t)\n throw new pr(\"`length` must be a positive 32-bit integer\");\n var n = arguments.length > 2 && !!arguments[2], o = !0, a = !0;\n if (\"length\" in e && sr) {\n var i = sr(e, \"length\");\n i && !i.configurable && (o = !1), i && !i.writable && (a = !1);\n }\n return (o || a || !n) && (Qt ? ur(\n /** @type {Parameters[0]} */\n e,\n \"length\",\n t,\n !0,\n !0\n ) : ur(\n /** @type {Parameters[0]} */\n e,\n \"length\",\n t\n )), e;\n};\n(function(r) {\n var e = ze, t = ee, n = qt, o = fe, a = t(\"%Function.prototype.apply%\"), i = t(\"%Function.prototype.call%\"), f = t(\"%Reflect.apply%\", !0) || e.call(i, a), l = Ve(), s = t(\"%Math.max%\");\n r.exports = function(c) {\n if (typeof c != \"function\")\n throw new o(\"a function is required\");\n var v = f(e, i, arguments);\n return n(\n v,\n 1 + s(0, c.length - (arguments.length - 1)),\n !0\n );\n };\n var u = function() {\n return f(e, a, arguments);\n };\n l ? l(r.exports, \"apply\", { value: u }) : r.exports.apply = u;\n})(Fr);\nvar Ht = Fr.exports, Tr = ee, xr = Ht, zt = xr(Tr(\"String.prototype.indexOf\")), Vt = function(e, t) {\n var n = Tr(e, !!t);\n return typeof n == \"function\" && zt(e, \".prototype.\") > -1 ? xr(n) : n;\n};\nconst Jt = {}, Yt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n default: Jt\n}, Symbol.toStringTag, { value: \"Module\" })), Xt = /* @__PURE__ */ Xr(Yt);\nvar Je = typeof Map == \"function\" && Map.prototype, Re = Object.getOwnPropertyDescriptor && Je ? Object.getOwnPropertyDescriptor(Map.prototype, \"size\") : null, be = Je && Re && typeof Re.get == \"function\" ? Re.get : null, yr = Je && Map.prototype.forEach, Ye = typeof Set == \"function\" && Set.prototype, De = Object.getOwnPropertyDescriptor && Ye ? Object.getOwnPropertyDescriptor(Set.prototype, \"size\") : null, we = Ye && De && typeof De.get == \"function\" ? De.get : null, dr = Ye && Set.prototype.forEach, Zt = typeof WeakMap == \"function\" && WeakMap.prototype, oe = Zt ? WeakMap.prototype.has : null, jt = typeof WeakSet == \"function\" && WeakSet.prototype, ie = jt ? WeakSet.prototype.has : null, en = typeof WeakRef == \"function\" && WeakRef.prototype, vr = en ? WeakRef.prototype.deref : null, rn = Boolean.prototype.valueOf, tn = Object.prototype.toString, nn = Function.prototype.toString, an = String.prototype.match, Xe = String.prototype.slice, B = String.prototype.replace, on = String.prototype.toUpperCase, gr = String.prototype.toLowerCase, _r = RegExp.prototype.test, hr = Array.prototype.concat, F = Array.prototype.join, ln = Array.prototype.slice, mr = Math.floor, We = typeof BigInt == \"function\" ? BigInt.prototype.valueOf : null, Te = Object.getOwnPropertySymbols, Me = typeof Symbol == \"function\" && typeof Symbol.iterator == \"symbol\" ? Symbol.prototype.toString : null, Z = typeof Symbol == \"function\" && typeof Symbol.iterator == \"object\", A = typeof Symbol == \"function\" && Symbol.toStringTag && (typeof Symbol.toStringTag === Z || !0) ? Symbol.toStringTag : null, Ur = Object.prototype.propertyIsEnumerable, Sr = (typeof Reflect == \"function\" ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function(r) {\n return r.__proto__;\n} : null);\nfunction br(r, e) {\n if (r === 1 / 0 || r === -1 / 0 || r !== r || r && r > -1e3 && r < 1e3 || _r.call(/e/, e))\n return e;\n var t = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof r == \"number\") {\n var n = r < 0 ? -mr(-r) : mr(r);\n if (n !== r) {\n var o = String(n), a = Xe.call(e, o.length + 1);\n return B.call(o, t, \"$&_\") + \".\" + B.call(B.call(a, /([0-9]{3})/g, \"$&_\"), /_$/, \"\");\n }\n }\n return B.call(e, t, \"$&_\");\n}\nvar Ge = Xt, wr = Ge.custom, Ar = Cr(wr) ? wr : null, fn = function r(e, t, n, o) {\n var a = t || {};\n if (C(a, \"quoteStyle\") && a.quoteStyle !== \"single\" && a.quoteStyle !== \"double\")\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n if (C(a, \"maxStringLength\") && (typeof a.maxStringLength == \"number\" ? a.maxStringLength < 0 && a.maxStringLength !== 1 / 0 : a.maxStringLength !== null))\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n var i = C(a, \"customInspect\") ? a.customInspect : !0;\n if (typeof i != \"boolean\" && i !== \"symbol\")\n throw new TypeError(\"option \\\"customInspect\\\", if provided, must be `true`, `false`, or `'symbol'`\");\n if (C(a, \"indent\") && a.indent !== null && a.indent !== \"\t\" && !(parseInt(a.indent, 10) === a.indent && a.indent > 0))\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n if (C(a, \"numericSeparator\") && typeof a.numericSeparator != \"boolean\")\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n var f = a.numericSeparator;\n if (typeof e > \"u\")\n return \"undefined\";\n if (e === null)\n return \"null\";\n if (typeof e == \"boolean\")\n return e ? \"true\" : \"false\";\n if (typeof e == \"string\")\n return Lr(e, a);\n if (typeof e == \"number\") {\n if (e === 0)\n return 1 / 0 / e > 0 ? \"0\" : \"-0\";\n var l = String(e);\n return f ? br(e, l) : l;\n }\n if (typeof e == \"bigint\") {\n var s = String(e) + \"n\";\n return f ? br(e, s) : s;\n }\n var u = typeof a.depth > \"u\" ? 5 : a.depth;\n if (typeof n > \"u\" && (n = 0), n >= u && u > 0 && typeof e == \"object\")\n return ke(e) ? \"[Array]\" : \"[Object]\";\n var p = $n(a, n);\n if (typeof o > \"u\")\n o = [];\n else if (Br(o, e) >= 0)\n return \"[Circular]\";\n function c(P, U, N) {\n if (U && (o = ln.call(o), o.push(U)), N) {\n var ne = {\n depth: a.depth\n };\n return C(a, \"quoteStyle\") && (ne.quoteStyle = a.quoteStyle), r(P, ne, n + 1, o);\n }\n return r(P, a, n + 1, o);\n }\n if (typeof e == \"function\" && !Er(e)) {\n var v = hn(e), g = pe(e, c);\n return \"[Function\" + (v ? \": \" + v : \" (anonymous)\") + \"]\" + (g.length > 0 ? \" { \" + F.call(g, \", \") + \" }\" : \"\");\n }\n if (Cr(e)) {\n var m = Z ? B.call(String(e), /^(Symbol\\(.*\\))_[^)]*$/, \"$1\") : Me.call(e);\n return typeof e == \"object\" && !Z ? ae(m) : m;\n }\n if (En(e)) {\n for (var w = \"<\" + gr.call(String(e.nodeName)), D = e.attributes || [], T = 0; T < D.length; T++)\n w += \" \" + D[T].name + \"=\" + Nr(cn(D[T].value), \"double\", a);\n return w += \">\", e.childNodes && e.childNodes.length && (w += \"...\"), w += \"\", w;\n }\n if (ke(e)) {\n if (e.length === 0)\n return \"[]\";\n var d = pe(e, c);\n return p && !On(d) ? \"[\" + Qe(d, p) + \"]\" : \"[ \" + F.call(d, \", \") + \" ]\";\n }\n if (sn(e)) {\n var x = pe(e, c);\n return !(\"cause\" in Error.prototype) && \"cause\" in e && !Ur.call(e, \"cause\") ? \"{ [\" + String(e) + \"] \" + F.call(hr.call(\"[cause]: \" + c(e.cause), x), \", \") + \" }\" : x.length === 0 ? \"[\" + String(e) + \"]\" : \"{ [\" + String(e) + \"] \" + F.call(x, \", \") + \" }\";\n }\n if (typeof e == \"object\" && i) {\n if (Ar && typeof e[Ar] == \"function\" && Ge)\n return Ge(e, { depth: u - n });\n if (i !== \"symbol\" && typeof e.inspect == \"function\")\n return e.inspect();\n }\n if (mn(e)) {\n var M = [];\n return yr && yr.call(e, function(P, U) {\n M.push(c(U, e, !0) + \" => \" + c(P, e));\n }), Pr(\"Map\", be.call(e), M, p);\n }\n if (wn(e)) {\n var te = [];\n return dr && dr.call(e, function(P) {\n te.push(c(P, e));\n }), Pr(\"Set\", we.call(e), te, p);\n }\n if (Sn(e))\n return xe(\"WeakMap\");\n if (An(e))\n return xe(\"WeakSet\");\n if (bn(e))\n return xe(\"WeakRef\");\n if (yn(e))\n return ae(c(Number(e)));\n if (vn(e))\n return ae(c(We.call(e)));\n if (dn(e))\n return ae(rn.call(e));\n if (pn(e))\n return ae(c(String(e)));\n if (typeof window < \"u\" && e === window)\n return \"{ [object Window] }\";\n if (typeof globalThis < \"u\" && e === globalThis || typeof tr < \"u\" && e === tr)\n return \"{ [object globalThis] }\";\n if (!un(e) && !Er(e)) {\n var q = pe(e, c), ue = Sr ? Sr(e) === Object.prototype : e instanceof Object || e.constructor === Object, G = e instanceof Object ? \"\" : \"null prototype\", _ = !ue && A && Object(e) === e && A in e ? Xe.call(L(e), 8, -1) : G ? \"Object\" : \"\", se = ue || typeof e.constructor != \"function\" ? \"\" : e.constructor.name ? e.constructor.name + \" \" : \"\", H = se + (_ || G ? \"[\" + F.call(hr.call([], _ || [], G || []), \": \") + \"] \" : \"\");\n return q.length === 0 ? H + \"{}\" : p ? H + \"{\" + Qe(q, p) + \"}\" : H + \"{ \" + F.call(q, \", \") + \" }\";\n }\n return String(e);\n};\nfunction Nr(r, e, t) {\n var n = (t.quoteStyle || e) === \"double\" ? '\"' : \"'\";\n return n + r + n;\n}\nfunction cn(r) {\n return B.call(String(r), /\"/g, \""\");\n}\nfunction ke(r) {\n return L(r) === \"[object Array]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction un(r) {\n return L(r) === \"[object Date]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction Er(r) {\n return L(r) === \"[object RegExp]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction sn(r) {\n return L(r) === \"[object Error]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction pn(r) {\n return L(r) === \"[object String]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction yn(r) {\n return L(r) === \"[object Number]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction dn(r) {\n return L(r) === \"[object Boolean]\" && (!A || !(typeof r == \"object\" && A in r));\n}\nfunction Cr(r) {\n if (Z)\n return r && typeof r == \"object\" && r instanceof Symbol;\n if (typeof r == \"symbol\")\n return !0;\n if (!r || typeof r != \"object\" || !Me)\n return !1;\n try {\n return Me.call(r), !0;\n } catch {\n }\n return !1;\n}\nfunction vn(r) {\n if (!r || typeof r != \"object\" || !We)\n return !1;\n try {\n return We.call(r), !0;\n } catch {\n }\n return !1;\n}\nvar gn = Object.prototype.hasOwnProperty || function(r) {\n return r in this;\n};\nfunction C(r, e) {\n return gn.call(r, e);\n}\nfunction L(r) {\n return tn.call(r);\n}\nfunction hn(r) {\n if (r.name)\n return r.name;\n var e = an.call(nn.call(r), /^function\\s*([\\w$]+)/);\n return e ? e[1] : null;\n}\nfunction Br(r, e) {\n if (r.indexOf)\n return r.indexOf(e);\n for (var t = 0, n = r.length; t < n; t++)\n if (r[t] === e)\n return t;\n return -1;\n}\nfunction mn(r) {\n if (!be || !r || typeof r != \"object\")\n return !1;\n try {\n be.call(r);\n try {\n we.call(r);\n } catch {\n return !0;\n }\n return r instanceof Map;\n } catch {\n }\n return !1;\n}\nfunction Sn(r) {\n if (!oe || !r || typeof r != \"object\")\n return !1;\n try {\n oe.call(r, oe);\n try {\n ie.call(r, ie);\n } catch {\n return !0;\n }\n return r instanceof WeakMap;\n } catch {\n }\n return !1;\n}\nfunction bn(r) {\n if (!vr || !r || typeof r != \"object\")\n return !1;\n try {\n return vr.call(r), !0;\n } catch {\n }\n return !1;\n}\nfunction wn(r) {\n if (!we || !r || typeof r != \"object\")\n return !1;\n try {\n we.call(r);\n try {\n be.call(r);\n } catch {\n return !0;\n }\n return r instanceof Set;\n } catch {\n }\n return !1;\n}\nfunction An(r) {\n if (!ie || !r || typeof r != \"object\")\n return !1;\n try {\n ie.call(r, ie);\n try {\n oe.call(r, oe);\n } catch {\n return !0;\n }\n return r instanceof WeakSet;\n } catch {\n }\n return !1;\n}\nfunction En(r) {\n return !r || typeof r != \"object\" ? !1 : typeof HTMLElement < \"u\" && r instanceof HTMLElement ? !0 : typeof r.nodeName == \"string\" && typeof r.getAttribute == \"function\";\n}\nfunction Lr(r, e) {\n if (r.length > e.maxStringLength) {\n var t = r.length - e.maxStringLength, n = \"... \" + t + \" more character\" + (t > 1 ? \"s\" : \"\");\n return Lr(Xe.call(r, 0, e.maxStringLength), e) + n;\n }\n var o = B.call(B.call(r, /(['\\\\])/g, \"\\\\$1\"), /[\\x00-\\x1f]/g, Pn);\n return Nr(o, \"single\", e);\n}\nfunction Pn(r) {\n var e = r.charCodeAt(0), t = {\n 8: \"b\",\n 9: \"t\",\n 10: \"n\",\n 12: \"f\",\n 13: \"r\"\n }[e];\n return t ? \"\\\\\" + t : \"\\\\x\" + (e < 16 ? \"0\" : \"\") + on.call(e.toString(16));\n}\nfunction ae(r) {\n return \"Object(\" + r + \")\";\n}\nfunction xe(r) {\n return r + \" { ? }\";\n}\nfunction Pr(r, e, t, n) {\n var o = n ? Qe(t, n) : F.call(t, \", \");\n return r + \" (\" + e + \") {\" + o + \"}\";\n}\nfunction On(r) {\n for (var e = 0; e < r.length; e++)\n if (Br(r[e], `\n`) >= 0)\n return !1;\n return !0;\n}\nfunction $n(r, e) {\n var t;\n if (r.indent === \"\t\")\n t = \"\t\";\n else if (typeof r.indent == \"number\" && r.indent > 0)\n t = F.call(Array(r.indent + 1), \" \");\n else\n return null;\n return {\n base: t,\n prev: F.call(Array(e + 1), t)\n };\n}\nfunction Qe(r, e) {\n if (r.length === 0)\n return \"\";\n var t = `\n` + e.prev + e.base;\n return t + F.call(r, \",\" + t) + `\n` + e.prev;\n}\nfunction pe(r, e) {\n var t = ke(r), n = [];\n if (t) {\n n.length = r.length;\n for (var o = 0; o < r.length; o++)\n n[o] = C(r, o) ? e(r[o], r) : \"\";\n }\n var a = typeof Te == \"function\" ? Te(r) : [], i;\n if (Z) {\n i = {};\n for (var f = 0; f < a.length; f++)\n i[\"$\" + a[f]] = a[f];\n }\n for (var l in r)\n C(r, l) && (t && String(Number(l)) === l && l < r.length || Z && i[\"$\" + l] instanceof Symbol || (_r.call(/[^\\w$]/, l) ? n.push(e(l, r) + \": \" + e(r[l], r)) : n.push(l + \": \" + e(r[l], r))));\n if (typeof Te == \"function\")\n for (var s = 0; s < a.length; s++)\n Ur.call(r, a[s]) && n.push(\"[\" + e(a[s]) + \"]: \" + e(r[a[s]], r));\n return n;\n}\nvar Wr = ee, re = Vt, In = fn, Fn = fe, ye = Wr(\"%WeakMap%\", !0), de = Wr(\"%Map%\", !0), Rn = re(\"WeakMap.prototype.get\", !0), Dn = re(\"WeakMap.prototype.set\", !0), Tn = re(\"WeakMap.prototype.has\", !0), xn = re(\"Map.prototype.get\", !0), _n = re(\"Map.prototype.set\", !0), Un = re(\"Map.prototype.has\", !0), Ze = function(r, e) {\n for (var t = r, n; (n = t.next) !== null; t = n)\n if (n.key === e)\n return t.next = n.next, n.next = /** @type {NonNullable} */\n r.next, r.next = n, n;\n}, Nn = function(r, e) {\n var t = Ze(r, e);\n return t && t.value;\n}, Cn = function(r, e, t) {\n var n = Ze(r, e);\n n ? n.value = t : r.next = /** @type {import('.').ListNode} */\n {\n // eslint-disable-line no-param-reassign, no-extra-parens\n key: e,\n next: r.next,\n value: t\n };\n}, Bn = function(r, e) {\n return !!Ze(r, e);\n}, Ln = function() {\n var e, t, n, o = {\n assert: function(a) {\n if (!o.has(a))\n throw new Fn(\"Side channel does not contain \" + In(a));\n },\n get: function(a) {\n if (ye && a && (typeof a == \"object\" || typeof a == \"function\")) {\n if (e)\n return Rn(e, a);\n } else if (de) {\n if (t)\n return xn(t, a);\n } else if (n)\n return Nn(n, a);\n },\n has: function(a) {\n if (ye && a && (typeof a == \"object\" || typeof a == \"function\")) {\n if (e)\n return Tn(e, a);\n } else if (de) {\n if (t)\n return Un(t, a);\n } else if (n)\n return Bn(n, a);\n return !1;\n },\n set: function(a, i) {\n ye && a && (typeof a == \"object\" || typeof a == \"function\") ? (e || (e = new ye()), Dn(e, a, i)) : de ? (t || (t = new de()), _n(t, a, i)) : (n || (n = { key: {}, next: null }), Cn(n, a, i));\n }\n };\n return o;\n}, Wn = String.prototype.replace, Mn = /%20/g, _e = {\n RFC1738: \"RFC1738\",\n RFC3986: \"RFC3986\"\n}, je = {\n default: _e.RFC3986,\n formatters: {\n RFC1738: function(r) {\n return Wn.call(r, Mn, \"+\");\n },\n RFC3986: function(r) {\n return String(r);\n }\n },\n RFC1738: _e.RFC1738,\n RFC3986: _e.RFC3986\n}, Gn = je, Ue = Object.prototype.hasOwnProperty, k = Array.isArray, $ = function() {\n for (var r = [], e = 0; e < 256; ++e)\n r.push(\"%\" + ((e < 16 ? \"0\" : \"\") + e.toString(16)).toUpperCase());\n return r;\n}(), kn = function(e) {\n for (; e.length > 1; ) {\n var t = e.pop(), n = t.obj[t.prop];\n if (k(n)) {\n for (var o = [], a = 0; a < n.length; ++a)\n typeof n[a] < \"u\" && o.push(n[a]);\n t.obj[t.prop] = o;\n }\n }\n}, Mr = function(e, t) {\n for (var n = t && t.plainObjects ? /* @__PURE__ */ Object.create(null) : {}, o = 0; o < e.length; ++o)\n typeof e[o] < \"u\" && (n[o] = e[o]);\n return n;\n}, Qn = function r(e, t, n) {\n if (!t)\n return e;\n if (typeof t != \"object\") {\n if (k(e))\n e.push(t);\n else if (e && typeof e == \"object\")\n (n && (n.plainObjects || n.allowPrototypes) || !Ue.call(Object.prototype, t)) && (e[t] = !0);\n else\n return [e, t];\n return e;\n }\n if (!e || typeof e != \"object\")\n return [e].concat(t);\n var o = e;\n return k(e) && !k(t) && (o = Mr(e, n)), k(e) && k(t) ? (t.forEach(function(a, i) {\n if (Ue.call(e, i)) {\n var f = e[i];\n f && typeof f == \"object\" && a && typeof a == \"object\" ? e[i] = r(f, a, n) : e.push(a);\n } else\n e[i] = a;\n }), e) : Object.keys(t).reduce(function(a, i) {\n var f = t[i];\n return Ue.call(a, i) ? a[i] = r(a[i], f, n) : a[i] = f, a;\n }, o);\n}, Kn = function(e, t) {\n return Object.keys(t).reduce(function(n, o) {\n return n[o] = t[o], n;\n }, e);\n}, qn = function(r, e, t) {\n var n = r.replace(/\\+/g, \" \");\n if (t === \"iso-8859-1\")\n return n.replace(/%[0-9a-f]{2}/gi, unescape);\n try {\n return decodeURIComponent(n);\n } catch {\n return n;\n }\n}, Ne = 1024, Hn = function(e, t, n, o, a) {\n if (e.length === 0)\n return e;\n var i = e;\n if (typeof e == \"symbol\" ? i = Symbol.prototype.toString.call(e) : typeof e != \"string\" && (i = String(e)), n === \"iso-8859-1\")\n return escape(i).replace(/%u[0-9a-f]{4}/gi, function(v) {\n return \"%26%23\" + parseInt(v.slice(2), 16) + \"%3B\";\n });\n for (var f = \"\", l = 0; l < i.length; l += Ne) {\n for (var s = i.length >= Ne ? i.slice(l, l + Ne) : i, u = [], p = 0; p < s.length; ++p) {\n var c = s.charCodeAt(p);\n if (c === 45 || c === 46 || c === 95 || c === 126 || c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || a === Gn.RFC1738 && (c === 40 || c === 41)) {\n u[u.length] = s.charAt(p);\n continue;\n }\n if (c < 128) {\n u[u.length] = $[c];\n continue;\n }\n if (c < 2048) {\n u[u.length] = $[192 | c >> 6] + $[128 | c & 63];\n continue;\n }\n if (c < 55296 || c >= 57344) {\n u[u.length] = $[224 | c >> 12] + $[128 | c >> 6 & 63] + $[128 | c & 63];\n continue;\n }\n p += 1, c = 65536 + ((c & 1023) << 10 | s.charCodeAt(p) & 1023), u[u.length] = $[240 | c >> 18] + $[128 | c >> 12 & 63] + $[128 | c >> 6 & 63] + $[128 | c & 63];\n }\n f += u.join(\"\");\n }\n return f;\n}, zn = function(e) {\n for (var t = [{ obj: { o: e }, prop: \"o\" }], n = [], o = 0; o < t.length; ++o)\n for (var a = t[o], i = a.obj[a.prop], f = Object.keys(i), l = 0; l < f.length; ++l) {\n var s = f[l], u = i[s];\n typeof u == \"object\" && u !== null && n.indexOf(u) === -1 && (t.push({ obj: i, prop: s }), n.push(u));\n }\n return kn(t), e;\n}, Vn = function(e) {\n return Object.prototype.toString.call(e) === \"[object RegExp]\";\n}, Jn = function(e) {\n return !e || typeof e != \"object\" ? !1 : !!(e.constructor && e.constructor.isBuffer && e.constructor.isBuffer(e));\n}, Yn = function(e, t) {\n return [].concat(e, t);\n}, Xn = function(e, t) {\n if (k(e)) {\n for (var n = [], o = 0; o < e.length; o += 1)\n n.push(t(e[o]));\n return n;\n }\n return t(e);\n}, Gr = {\n arrayToObject: Mr,\n assign: Kn,\n combine: Yn,\n compact: zn,\n decode: qn,\n encode: Hn,\n isBuffer: Jn,\n isRegExp: Vn,\n maybeMap: Xn,\n merge: Qn\n}, kr = Ln, ge = Gr, le = je, Zn = Object.prototype.hasOwnProperty, Qr = {\n brackets: function(e) {\n return e + \"[]\";\n },\n comma: \"comma\",\n indices: function(e, t) {\n return e + \"[\" + t + \"]\";\n },\n repeat: function(e) {\n return e;\n }\n}, I = Array.isArray, jn = Array.prototype.push, Kr = function(r, e) {\n jn.apply(r, I(e) ? e : [e]);\n}, ea = Date.prototype.toISOString, Or = le.default, S = {\n addQueryPrefix: !1,\n allowDots: !1,\n allowEmptyArrays: !1,\n arrayFormat: \"indices\",\n charset: \"utf-8\",\n charsetSentinel: !1,\n delimiter: \"&\",\n encode: !0,\n encodeDotInKeys: !1,\n encoder: ge.encode,\n encodeValuesOnly: !1,\n format: Or,\n formatter: le.formatters[Or],\n // deprecated\n indices: !1,\n serializeDate: function(e) {\n return ea.call(e);\n },\n skipNulls: !1,\n strictNullHandling: !1\n}, ra = function(e) {\n return typeof e == \"string\" || typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"symbol\" || typeof e == \"bigint\";\n}, Ce = {}, ta = function r(e, t, n, o, a, i, f, l, s, u, p, c, v, g, m, w, D, T) {\n for (var d = e, x = T, M = 0, te = !1; (x = x.get(Ce)) !== void 0 && !te; ) {\n var q = x.get(e);\n if (M += 1, typeof q < \"u\") {\n if (q === M)\n throw new RangeError(\"Cyclic object value\");\n te = !0;\n }\n typeof x.get(Ce) > \"u\" && (M = 0);\n }\n if (typeof u == \"function\" ? d = u(t, d) : d instanceof Date ? d = v(d) : n === \"comma\" && I(d) && (d = ge.maybeMap(d, function(Pe) {\n return Pe instanceof Date ? v(Pe) : Pe;\n })), d === null) {\n if (i)\n return s && !w ? s(t, S.encoder, D, \"key\", g) : t;\n d = \"\";\n }\n if (ra(d) || ge.isBuffer(d)) {\n if (s) {\n var ue = w ? t : s(t, S.encoder, D, \"key\", g);\n return [m(ue) + \"=\" + m(s(d, S.encoder, D, \"value\", g))];\n }\n return [m(t) + \"=\" + m(String(d))];\n }\n var G = [];\n if (typeof d > \"u\")\n return G;\n var _;\n if (n === \"comma\" && I(d))\n w && s && (d = ge.maybeMap(d, s)), _ = [{ value: d.length > 0 ? d.join(\",\") || null : void 0 }];\n else if (I(u))\n _ = u;\n else {\n var se = Object.keys(d);\n _ = p ? se.sort(p) : se;\n }\n var H = l ? t.replace(/\\./g, \"%2E\") : t, P = o && I(d) && d.length === 1 ? H + \"[]\" : H;\n if (a && I(d) && d.length === 0)\n return P + \"[]\";\n for (var U = 0; U < _.length; ++U) {\n var N = _[U], ne = typeof N == \"object\" && typeof N.value < \"u\" ? N.value : d[N];\n if (!(f && ne === null)) {\n var Ee = c && l ? N.replace(/\\./g, \"%2E\") : N, Yr = I(d) ? typeof n == \"function\" ? n(P, Ee) : P : P + (c ? \".\" + Ee : \"[\" + Ee + \"]\");\n T.set(e, M);\n var rr = kr();\n rr.set(Ce, T), Kr(G, r(\n ne,\n Yr,\n n,\n o,\n a,\n i,\n f,\n l,\n n === \"comma\" && w && I(d) ? null : s,\n u,\n p,\n c,\n v,\n g,\n m,\n w,\n D,\n rr\n ));\n }\n }\n return G;\n}, na = function(e) {\n if (!e)\n return S;\n if (typeof e.allowEmptyArrays < \"u\" && typeof e.allowEmptyArrays != \"boolean\")\n throw new TypeError(\"`allowEmptyArrays` option can only be `true` or `false`, when provided\");\n if (typeof e.encodeDotInKeys < \"u\" && typeof e.encodeDotInKeys != \"boolean\")\n throw new TypeError(\"`encodeDotInKeys` option can only be `true` or `false`, when provided\");\n if (e.encoder !== null && typeof e.encoder < \"u\" && typeof e.encoder != \"function\")\n throw new TypeError(\"Encoder has to be a function.\");\n var t = e.charset || S.charset;\n if (typeof e.charset < \"u\" && e.charset !== \"utf-8\" && e.charset !== \"iso-8859-1\")\n throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");\n var n = le.default;\n if (typeof e.format < \"u\") {\n if (!Zn.call(le.formatters, e.format))\n throw new TypeError(\"Unknown format option provided.\");\n n = e.format;\n }\n var o = le.formatters[n], a = S.filter;\n (typeof e.filter == \"function\" || I(e.filter)) && (a = e.filter);\n var i;\n if (e.arrayFormat in Qr ? i = e.arrayFormat : \"indices\" in e ? i = e.indices ? \"indices\" : \"repeat\" : i = S.arrayFormat, \"commaRoundTrip\" in e && typeof e.commaRoundTrip != \"boolean\")\n throw new TypeError(\"`commaRoundTrip` must be a boolean, or absent\");\n var f = typeof e.allowDots > \"u\" ? e.encodeDotInKeys === !0 ? !0 : S.allowDots : !!e.allowDots;\n return {\n addQueryPrefix: typeof e.addQueryPrefix == \"boolean\" ? e.addQueryPrefix : S.addQueryPrefix,\n allowDots: f,\n allowEmptyArrays: typeof e.allowEmptyArrays == \"boolean\" ? !!e.allowEmptyArrays : S.allowEmptyArrays,\n arrayFormat: i,\n charset: t,\n charsetSentinel: typeof e.charsetSentinel == \"boolean\" ? e.charsetSentinel : S.charsetSentinel,\n commaRoundTrip: e.commaRoundTrip,\n delimiter: typeof e.delimiter > \"u\" ? S.delimiter : e.delimiter,\n encode: typeof e.encode == \"boolean\" ? e.encode : S.encode,\n encodeDotInKeys: typeof e.encodeDotInKeys == \"boolean\" ? e.encodeDotInKeys : S.encodeDotInKeys,\n encoder: typeof e.encoder == \"function\" ? e.encoder : S.encoder,\n encodeValuesOnly: typeof e.encodeValuesOnly == \"boolean\" ? e.encodeValuesOnly : S.encodeValuesOnly,\n filter: a,\n format: n,\n formatter: o,\n serializeDate: typeof e.serializeDate == \"function\" ? e.serializeDate : S.serializeDate,\n skipNulls: typeof e.skipNulls == \"boolean\" ? e.skipNulls : S.skipNulls,\n sort: typeof e.sort == \"function\" ? e.sort : null,\n strictNullHandling: typeof e.strictNullHandling == \"boolean\" ? e.strictNullHandling : S.strictNullHandling\n };\n}, aa = function(r, e) {\n var t = r, n = na(e), o, a;\n typeof n.filter == \"function\" ? (a = n.filter, t = a(\"\", t)) : I(n.filter) && (a = n.filter, o = a);\n var i = [];\n if (typeof t != \"object\" || t === null)\n return \"\";\n var f = Qr[n.arrayFormat], l = f === \"comma\" && n.commaRoundTrip;\n o || (o = Object.keys(t)), n.sort && o.sort(n.sort);\n for (var s = kr(), u = 0; u < o.length; ++u) {\n var p = o[u];\n n.skipNulls && t[p] === null || Kr(i, ta(\n t[p],\n p,\n f,\n l,\n n.allowEmptyArrays,\n n.strictNullHandling,\n n.skipNulls,\n n.encodeDotInKeys,\n n.encode ? n.encoder : null,\n n.filter,\n n.sort,\n n.allowDots,\n n.serializeDate,\n n.format,\n n.formatter,\n n.encodeValuesOnly,\n n.charset,\n s\n ));\n }\n var c = i.join(n.delimiter), v = n.addQueryPrefix === !0 ? \"?\" : \"\";\n return n.charsetSentinel && (n.charset === \"iso-8859-1\" ? v += \"utf8=%26%2310003%3B&\" : v += \"utf8=%E2%9C%93&\"), c.length > 0 ? v + c : \"\";\n}, j = Gr, Ke = Object.prototype.hasOwnProperty, oa = Array.isArray, h = {\n allowDots: !1,\n allowEmptyArrays: !1,\n allowPrototypes: !1,\n allowSparse: !1,\n arrayLimit: 20,\n charset: \"utf-8\",\n charsetSentinel: !1,\n comma: !1,\n decodeDotInKeys: !1,\n decoder: j.decode,\n delimiter: \"&\",\n depth: 5,\n duplicates: \"combine\",\n ignoreQueryPrefix: !1,\n interpretNumericEntities: !1,\n parameterLimit: 1e3,\n parseArrays: !0,\n plainObjects: !1,\n strictDepth: !1,\n strictNullHandling: !1\n}, ia = function(r) {\n return r.replace(/&#(\\d+);/g, function(e, t) {\n return String.fromCharCode(parseInt(t, 10));\n });\n}, qr = function(r, e) {\n return r && typeof r == \"string\" && e.comma && r.indexOf(\",\") > -1 ? r.split(\",\") : r;\n}, la = \"utf8=%26%2310003%3B\", fa = \"utf8=%E2%9C%93\", ca = function(e, t) {\n var n = { __proto__: null }, o = t.ignoreQueryPrefix ? e.replace(/^\\?/, \"\") : e;\n o = o.replace(/%5B/gi, \"[\").replace(/%5D/gi, \"]\");\n var a = t.parameterLimit === 1 / 0 ? void 0 : t.parameterLimit, i = o.split(t.delimiter, a), f = -1, l, s = t.charset;\n if (t.charsetSentinel)\n for (l = 0; l < i.length; ++l)\n i[l].indexOf(\"utf8=\") === 0 && (i[l] === fa ? s = \"utf-8\" : i[l] === la && (s = \"iso-8859-1\"), f = l, l = i.length);\n for (l = 0; l < i.length; ++l)\n if (l !== f) {\n var u = i[l], p = u.indexOf(\"]=\"), c = p === -1 ? u.indexOf(\"=\") : p + 1, v, g;\n c === -1 ? (v = t.decoder(u, h.decoder, s, \"key\"), g = t.strictNullHandling ? null : \"\") : (v = t.decoder(u.slice(0, c), h.decoder, s, \"key\"), g = j.maybeMap(\n qr(u.slice(c + 1), t),\n function(w) {\n return t.decoder(w, h.decoder, s, \"value\");\n }\n )), g && t.interpretNumericEntities && s === \"iso-8859-1\" && (g = ia(g)), u.indexOf(\"[]=\") > -1 && (g = oa(g) ? [g] : g);\n var m = Ke.call(n, v);\n m && t.duplicates === \"combine\" ? n[v] = j.combine(n[v], g) : (!m || t.duplicates === \"last\") && (n[v] = g);\n }\n return n;\n}, ua = function(r, e, t, n) {\n for (var o = n ? e : qr(e, t), a = r.length - 1; a >= 0; --a) {\n var i, f = r[a];\n if (f === \"[]\" && t.parseArrays)\n i = t.allowEmptyArrays && (o === \"\" || t.strictNullHandling && o === null) ? [] : [].concat(o);\n else {\n i = t.plainObjects ? /* @__PURE__ */ Object.create(null) : {};\n var l = f.charAt(0) === \"[\" && f.charAt(f.length - 1) === \"]\" ? f.slice(1, -1) : f, s = t.decodeDotInKeys ? l.replace(/%2E/g, \".\") : l, u = parseInt(s, 10);\n !t.parseArrays && s === \"\" ? i = { 0: o } : !isNaN(u) && f !== s && String(u) === s && u >= 0 && t.parseArrays && u <= t.arrayLimit ? (i = [], i[u] = o) : s !== \"__proto__\" && (i[s] = o);\n }\n o = i;\n }\n return o;\n}, sa = function(e, t, n, o) {\n if (e) {\n var a = n.allowDots ? e.replace(/\\.([^.[]+)/g, \"[$1]\") : e, i = /(\\[[^[\\]]*])/, f = /(\\[[^[\\]]*])/g, l = n.depth > 0 && i.exec(a), s = l ? a.slice(0, l.index) : a, u = [];\n if (s) {\n if (!n.plainObjects && Ke.call(Object.prototype, s) && !n.allowPrototypes)\n return;\n u.push(s);\n }\n for (var p = 0; n.depth > 0 && (l = f.exec(a)) !== null && p < n.depth; ) {\n if (p += 1, !n.plainObjects && Ke.call(Object.prototype, l[1].slice(1, -1)) && !n.allowPrototypes)\n return;\n u.push(l[1]);\n }\n if (l) {\n if (n.strictDepth === !0)\n throw new RangeError(\"Input depth exceeded depth option of \" + n.depth + \" and strictDepth is true\");\n u.push(\"[\" + a.slice(l.index) + \"]\");\n }\n return ua(u, t, n, o);\n }\n}, pa = function(e) {\n if (!e)\n return h;\n if (typeof e.allowEmptyArrays < \"u\" && typeof e.allowEmptyArrays != \"boolean\")\n throw new TypeError(\"`allowEmptyArrays` option can only be `true` or `false`, when provided\");\n if (typeof e.decodeDotInKeys < \"u\" && typeof e.decodeDotInKeys != \"boolean\")\n throw new TypeError(\"`decodeDotInKeys` option can only be `true` or `false`, when provided\");\n if (e.decoder !== null && typeof e.decoder < \"u\" && typeof e.decoder != \"function\")\n throw new TypeError(\"Decoder has to be a function.\");\n if (typeof e.charset < \"u\" && e.charset !== \"utf-8\" && e.charset !== \"iso-8859-1\")\n throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");\n var t = typeof e.charset > \"u\" ? h.charset : e.charset, n = typeof e.duplicates > \"u\" ? h.duplicates : e.duplicates;\n if (n !== \"combine\" && n !== \"first\" && n !== \"last\")\n throw new TypeError(\"The duplicates option must be either combine, first, or last\");\n var o = typeof e.allowDots > \"u\" ? e.decodeDotInKeys === !0 ? !0 : h.allowDots : !!e.allowDots;\n return {\n allowDots: o,\n allowEmptyArrays: typeof e.allowEmptyArrays == \"boolean\" ? !!e.allowEmptyArrays : h.allowEmptyArrays,\n allowPrototypes: typeof e.allowPrototypes == \"boolean\" ? e.allowPrototypes : h.allowPrototypes,\n allowSparse: typeof e.allowSparse == \"boolean\" ? e.allowSparse : h.allowSparse,\n arrayLimit: typeof e.arrayLimit == \"number\" ? e.arrayLimit : h.arrayLimit,\n charset: t,\n charsetSentinel: typeof e.charsetSentinel == \"boolean\" ? e.charsetSentinel : h.charsetSentinel,\n comma: typeof e.comma == \"boolean\" ? e.comma : h.comma,\n decodeDotInKeys: typeof e.decodeDotInKeys == \"boolean\" ? e.decodeDotInKeys : h.decodeDotInKeys,\n decoder: typeof e.decoder == \"function\" ? e.decoder : h.decoder,\n delimiter: typeof e.delimiter == \"string\" || j.isRegExp(e.delimiter) ? e.delimiter : h.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: typeof e.depth == \"number\" || e.depth === !1 ? +e.depth : h.depth,\n duplicates: n,\n ignoreQueryPrefix: e.ignoreQueryPrefix === !0,\n interpretNumericEntities: typeof e.interpretNumericEntities == \"boolean\" ? e.interpretNumericEntities : h.interpretNumericEntities,\n parameterLimit: typeof e.parameterLimit == \"number\" ? e.parameterLimit : h.parameterLimit,\n parseArrays: e.parseArrays !== !1,\n plainObjects: typeof e.plainObjects == \"boolean\" ? e.plainObjects : h.plainObjects,\n strictDepth: typeof e.strictDepth == \"boolean\" ? !!e.strictDepth : h.strictDepth,\n strictNullHandling: typeof e.strictNullHandling == \"boolean\" ? e.strictNullHandling : h.strictNullHandling\n };\n}, ya = function(r, e) {\n var t = pa(e);\n if (r === \"\" || r === null || typeof r > \"u\")\n return t.plainObjects ? /* @__PURE__ */ Object.create(null) : {};\n for (var n = typeof r == \"string\" ? ca(r, t) : r, o = t.plainObjects ? /* @__PURE__ */ Object.create(null) : {}, a = Object.keys(n), i = 0; i < a.length; ++i) {\n var f = a[i], l = sa(f, n[f], t, typeof r == \"string\");\n o = j.merge(o, l, t);\n }\n return t.allowSparse === !0 ? o : j.compact(o);\n}, da = aa, va = ya, ga = je, ha = {\n formats: ga,\n parse: va,\n stringify: da\n};\nconst ma = /* @__PURE__ */ Zr(ha), Da = (r, e) => {\n const t = ma.parse(r, { ignoreQueryPrefix: !0 });\n return t && t[e] ? t[e] : \"\";\n}, Hr = (r) => r.substring(0, r.indexOf(\"?\")) || r, zr = (r) => r.substring(r.lastIndexOf(\"/\") + 1), Ta = (r) => zr(Hr(r)), xa = (r) => decodeURI(zr(Hr(r))), W = \"filter\", Ae = \"cookies\", R = \"redirectfiters\", er = \"redirectpathname\", Sa = (r) => {\n var n, o, a;\n const e = (n = O(\n `${R}_${r}`\n )) == null ? void 0 : n.search;\n return (a = (((o = e == null ? void 0 : e.substring(1)) == null ? void 0 : o.split(\";\")) || []).find((i) => i.startsWith(E.QUICK))) == null ? void 0 : a.split(\":\")[1];\n}, ba = (r, e) => {\n var i;\n const t = (i = O(\n `${R}_${r}`\n )) == null ? void 0 : i.search, o = ((t == null ? void 0 : t.split(\"&\")) || []).find((f) => f.startsWith(e));\n return new URLSearchParams(o).get(e);\n}, wa = (r) => {\n var n, o;\n const e = (n = O(\n `${R}_${r}`\n )) == null ? void 0 : n.search;\n return (o = ((e == null ? void 0 : e.substring(1).split(\";\")) || []).find((a) => a.startsWith(E.SORTING))) == null ? void 0 : o.split(\":\")[1];\n}, Aa = (r) => {\n var o;\n if (!r)\n return [];\n const t = (o = (r == null ? void 0 : r.substring(1).split(\";\")).find((a) => a.startsWith(E.FILTERS))) == null ? void 0 : o.split(\":\")[1];\n return (t == null ? void 0 : t.split(\"&\").filter((a) => !!a).map((a) => {\n const i = a.split(\"=\");\n return {\n id: i[0],\n value: i[1],\n label: i[0]\n };\n })) || [];\n}, _a = (r, e) => {\n var a;\n const t = O(W), n = t == null ? void 0 : t.baseTableState[r];\n let o = (n == null ? void 0 : n.tableFilters) || [];\n if (e && e[r]) {\n const i = (a = O(\n `${R}_${e[r]}`\n )) == null ? void 0 : a.search, f = Aa(i), l = i == null ? void 0 : i.substring(1).split(\";\").find((s) => s.startsWith(E.FILTERS));\n (f && f.length > 0 || l === `${E.FILTERS}:`) && (o = f);\n }\n return o;\n}, Ua = (r, e) => {\n var o;\n const t = O(W);\n let n = (o = t == null ? void 0 : t.filter[r]) == null ? void 0 : o.sort;\n if (e && e[r]) {\n const a = wa(e[r]);\n if (a) {\n const i = a.split(\"&\")[0].split(\"=\")[1], f = a.split(\"&\")[1].split(\"=\")[1];\n n = {\n sortBy: i,\n sortDir: f\n };\n }\n }\n return n;\n}, Na = (r, e, t) => {\n var i;\n const n = O(W);\n let o = \"\", a = (i = n == null ? void 0 : n.filter[r]) == null ? void 0 : i.queryParams;\n if (a && a[0] && (o = a[0][t]), e && e[r]) {\n const f = ba(\n e[r],\n t\n );\n f && (o = f);\n }\n return o;\n}, Ca = (r, e, t) => {\n const n = O(W), o = n == null ? void 0 : n.baseTableState[r];\n let a = (o == null ? void 0 : o.activeSwitch) || t;\n if (e && e[r]) {\n const i = Sa(e[r]);\n i && (a = i);\n }\n return a;\n}, Ea = (r) => {\n const e = window.location.search.split(\";\").filter((l) => !!l), t = `${E.SORTING}:`, n = e.findIndex((l) => l.startsWith(t)), o = e.find((l) => l.startsWith(t)), a = o == null ? void 0 : o.split(\":\"), i = new URLSearchParams(r).toString();\n let f = `${E.SORTING}:${i};`;\n return r || (f = `${E.SORTING}:${a ? a[1] : \"\"};`), e[n] = f, e.join(\";\");\n}, Pa = (r, e, t) => {\n var c, v, g;\n const n = (c = r == null ? void 0 : r.map((m) => ({ id: m.id, value: m.value }))) == null ? void 0 : c.reduce(\n (m, w) => ({ [w.id]: w.value, ...m }),\n {}\n ), o = new URLSearchParams(n).toString(), a = window.location.search.substring(1).split(\";\"), i = `${E.FILTERS}:${o};`, f = (v = a[1]) == null ? void 0 : v.split(\":\");\n let l = `${E.QUICK}:${e};`;\n e || (l = `${E.QUICK}:${f ? f[1] : \"\"};`);\n const s = (g = a[2]) == null ? void 0 : g.split(\":\"), u = new URLSearchParams(t).toString();\n let p = `${E.SORTING}:${u};`;\n return t || (p = `${E.SORTING}:${s ? s[1] : \"\"};`), `${i}${l}${p}`;\n}, Oa = () => O(er), $a = () => O(R), Ba = () => {\n var r;\n return (r = O(Ae)) == null ? void 0 : r.accepted;\n}, La = () => {\n he(Ae, { accepted: !0 });\n}, Wa = (r) => {\n var a, i;\n const e = Oa(), t = ((a = e == null ? void 0 : e.pathname) == null ? void 0 : a.replace(r, \"\")) || \"\", n = ((i = $a()) == null ? void 0 : i.search) || \"\", o = (e == null ? void 0 : e.hash) || \"\";\n return `${t}${n}${o}`;\n}, Vr = (r) => window.location.pathname.replace(r, \"\"), Jr = () => {\n const { hash: r } = window.location;\n return r || \"\";\n}, Ma = () => {\n const { search: r } = window.location;\n return r || \"\";\n}, Ga = (r) => {\n he(`${R}_${Vr(r)}`, {\n search: window.location.search\n }), he(er, {\n pathname: window.location.pathname,\n hash: Jr()\n });\n}, ka = () => {\n qe(W);\n}, Qa = () => {\n qe(Ae);\n}, Ka = (r) => {\n r.forEach((e) => {\n qe(`${R}_${e}`);\n });\n}, qa = (r, e) => {\n r(e) && he(W, {\n baseTableState: e.baseTableState,\n filter: e.filter\n });\n}, Ha = (r, e, t, n, o) => {\n const a = Pa(t, n, o);\n r.replace({ pathname: e.pathname, search: a });\n}, za = (r, e, t) => {\n const n = Ea(t);\n r.replace({ pathname: e.pathname, search: n });\n}, Va = (r) => {\n Be(\n `${R}_${Vr(r)}`,\n { search: window.location.search }\n ), Be(er, {\n pathname: window.location.pathname,\n hash: Jr()\n });\n}, Ja = () => {\n He(W);\n}, Ya = () => {\n He(Ae);\n}, Xa = (r) => {\n r.forEach((e) => {\n He(`${R}_${e}`);\n });\n}, Za = (r, e) => {\n r(e) && Be(W, {\n baseTableState: e.baseTableState,\n filter: e.filter\n });\n};\nexport {\n Ae as COOKIES_STATE_KEY,\n W as FILTERS_STATE_KEY,\n er as REDIRECT_PATHNAME_STATE_KEY,\n R as REDIRECT_STATE_KEY,\n La as acceptCookieStateFlag,\n Ba as getCookieAcceptedStatus,\n Jr as getCurrentHash,\n Vr as getCurrentPath,\n Ma as getCurrentSearch,\n Aa as getFiltersStateFromUrl,\n zr as getLastUrlPart,\n Ta as getLastUrlPartWithoutParams,\n xa as getLastUrlPartWithoutParamsDecoded,\n ba as getQueryParamStateFromUrl,\n Na as getQueryParams,\n Ca as getQuickFilter,\n Sa as getQuickFilterStateFromUrl,\n $a as getRedirectFilterState,\n Oa as getRedirectPathState,\n Wa as getRedirectedUrl,\n Ua as getSortingObject,\n wa as getSortingStateFromUrl,\n _a as getTableFilters,\n Pa as getUrlFilteringQuery,\n Da as getUrlParam,\n Ea as getUrlSortingQuery,\n Hr as getUrlWithoutParams,\n Qa as removeCookieConsentLocalStorageData,\n Ya as removeCookieConsentSessionStorageData,\n ka as removeFilterLocalStorageData,\n Ja as removeFilterSessionStorageData,\n Xa as removeRedirectStateSessionStorageData,\n Ka as removeRedirectStatetLocalStorageData,\n Ga as saveFilterToLocalStorage,\n Va as saveFilterToSessionStorage,\n qa as saveStoreToLocalStorage,\n Za as saveStoreToSessionStorage,\n Ha as updateUrlFilterQuery,\n za as updateUrlSorting\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLnV0aWxzLmpzIiwic291cmNlcyI6WyIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9ldmFsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9yYW5nZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmVmLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9zeW50YXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3R5cGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3VyaS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9oYXMtcHJvdG8vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhc293bi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9nZXQtaW50cmluc2ljL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2VzLWRlZmluZS1wcm9wZXJ0eS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9nb3BkL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2RlZmluZS1kYXRhLXByb3BlcnR5L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2hhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycy9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9zZXQtZnVuY3Rpb24tbGVuZ3RoL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvY2FsbEJvdW5kLmpzIiwiLi4vLi4vX192aXRlLWJyb3dzZXItZXh0ZXJuYWwiLCIuLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWluc3BlY3QvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9mb3JtYXRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvc3RyaW5naWZ5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL3FzL2xpYi9wYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvaW5kZXguanMiLCIuLi8uLi9saWIvdXRpbHMvdXJsLnV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2V2YWwnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXZhbEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yYW5nZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSYW5nZUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9yZWYnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gUmVmZXJlbmNlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3N5bnRheCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBTeW50YXhFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdHlwZScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBUeXBlRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3VyaScpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBVUklFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHN5bSBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdGVzdCA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHRmb286IHt9XG59O1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzUHJvdG8oKSB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3I6IFRTIGVycm9ycyBvbiBhbiBpbmhlcml0ZWQgcHJvcGVydHkgZm9yIHNvbWUgcmVhc29uXG5cdHJldHVybiB7IF9fcHJvdG9fXzogdGVzdCB9LmZvbyA9PT0gdGVzdC5mb29cblx0XHQmJiAhKHRlc3QgaW5zdGFuY2VvZiAkT2JqZWN0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbnZhciBjb25jYXR0eSA9IGZ1bmN0aW9uIGNvbmNhdHR5KGEsIGIpIHtcbiAgICB2YXIgYXJyID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyW2ldID0gYVtpXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGFycltqICsgYS5sZW5ndGhdID0gYltqXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIHNsaWN5ID0gZnVuY3Rpb24gc2xpY3koYXJyTGlrZSwgb2Zmc2V0KSB7XG4gICAgdmFyIGFyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBvZmZzZXQgfHwgMCwgaiA9IDA7IGkgPCBhcnJMaWtlLmxlbmd0aDsgaSArPSAxLCBqICs9IDEpIHtcbiAgICAgICAgYXJyW2pdID0gYXJyTGlrZVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn07XG5cbnZhciBqb2lueSA9IGZ1bmN0aW9uIChhcnIsIGpvaW5lcikge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBzdHIgKz0gYXJyW2ldO1xuICAgICAgICBpZiAoaSArIDEgPCBhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdHIgKz0gam9pbmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmFwcGx5KHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY3koYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgY29uY2F0dHkoYXJncywgYXJndW1lbnRzKVxuICAgICAgICApO1xuXG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IG1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzW2ldID0gJyQnICsgaTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgam9pbnkoYm91bmRBcmdzLCAnLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciAkaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoY2FsbCwgJGhhc093bik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMnKTtcbnZhciAkRXZhbEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL2V2YWwnKTtcbnZhciAkUmFuZ2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yYW5nZScpO1xudmFyICRSZWZlcmVuY2VFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9yZWYnKTtcbnZhciAkU3ludGF4RXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvc3ludGF4Jyk7XG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFVSSUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3VyaScpO1xuXG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG52YXIgaGFzUHJvdG8gPSByZXF1aXJlKCdoYXMtcHJvdG8nKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgKFxuXHRoYXNQcm90b1xuXHRcdD8gZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblx0XHQ6IG51bGxcbik7XG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQmlnSW50NjRBcnJheSUnOiB0eXBlb2YgQmlnSW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQ2NEFycmF5LFxuXHQnJUJpZ1VpbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdVaW50NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdVaW50NjRBcnJheSxcblx0JyVCb29sZWFuJSc6IEJvb2xlYW4sXG5cdCclRGF0YVZpZXclJzogdHlwZW9mIERhdGFWaWV3ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IERhdGFWaWV3LFxuXHQnJURhdGUlJzogRGF0ZSxcblx0JyVkZWNvZGVVUkklJzogZGVjb2RlVVJJLFxuXHQnJWRlY29kZVVSSUNvbXBvbmVudCUnOiBkZWNvZGVVUklDb21wb25lbnQsXG5cdCclZW5jb2RlVVJJJSc6IGVuY29kZVVSSSxcblx0JyVlbmNvZGVVUklDb21wb25lbnQlJzogZW5jb2RlVVJJQ29tcG9uZW50LFxuXHQnJUVycm9yJSc6ICRFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiAkRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6IE9iamVjdCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6ICRSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6ICRSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogJFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG5pZiAoZ2V0UHJvdG8pIHtcblx0dHJ5IHtcblx0XHRudWxsLmVycm9yOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vcHVsbC8zODQjaXNzdWVjb21tZW50LTEzNjQyNjQyMjlcblx0XHR2YXIgZXJyb3JQcm90byA9IGdldFByb3RvKGdldFByb3RvKGUpKTtcblx0XHRJTlRSSU5TSUNTWyclRXJyb3IucHJvdG90eXBlJSddID0gZXJyb3JQcm90bztcblx0fVxufVxuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuICYmIGdldFByb3RvKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0JyVBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ0FycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG90eXBlJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b19lbnRyaWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2VudHJpZXMnXSxcblx0JyVBcnJheVByb3RvX2ZvckVhY2glJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZm9yRWFjaCddLFxuXHQnJUFycmF5UHJvdG9fa2V5cyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdrZXlzJ10sXG5cdCclQXJyYXlQcm90b192YWx1ZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAndmFsdWVzJ10sXG5cdCclQXN5bmNGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0FzeW5jRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclQm9vbGVhblByb3RvdHlwZSUnOiBbJ0Jvb2xlYW4nLCAncHJvdG90eXBlJ10sXG5cdCclRGF0YVZpZXdQcm90b3R5cGUlJzogWydEYXRhVmlldycsICdwcm90b3R5cGUnXSxcblx0JyVEYXRlUHJvdG90eXBlJSc6IFsnRGF0ZScsICdwcm90b3R5cGUnXSxcblx0JyVFcnJvclByb3RvdHlwZSUnOiBbJ0Vycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUV2YWxFcnJvclByb3RvdHlwZSUnOiBbJ0V2YWxFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDMyQXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQ2NEFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQ2NEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZ1bmN0aW9uUHJvdG90eXBlJSc6IFsnRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclR2VuZXJhdG9yUHJvdG90eXBlJSc6IFsnR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDhBcnJheVByb3RvdHlwZSUnOiBbJ0ludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnSW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnSW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVKU09OUGFyc2UlJzogWydKU09OJywgJ3BhcnNlJ10sXG5cdCclSlNPTlN0cmluZ2lmeSUnOiBbJ0pTT04nLCAnc3RyaW5naWZ5J10sXG5cdCclTWFwUHJvdG90eXBlJSc6IFsnTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJU51bWJlclByb3RvdHlwZSUnOiBbJ051bWJlcicsICdwcm90b3R5cGUnXSxcblx0JyVPYmplY3RQcm90b3R5cGUlJzogWydPYmplY3QnLCAncHJvdG90eXBlJ10sXG5cdCclT2JqUHJvdG9fdG9TdHJpbmclJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3RvU3RyaW5nJ10sXG5cdCclT2JqUHJvdG9fdmFsdWVPZiUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndmFsdWVPZiddLFxuXHQnJVByb21pc2VQcm90b3R5cGUlJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZSddLFxuXHQnJVByb21pc2VQcm90b190aGVuJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnLCAndGhlbiddLFxuXHQnJVByb21pc2VfYWxsJSc6IFsnUHJvbWlzZScsICdhbGwnXSxcblx0JyVQcm9taXNlX3JlamVjdCUnOiBbJ1Byb21pc2UnLCAncmVqZWN0J10sXG5cdCclUHJvbWlzZV9yZXNvbHZlJSc6IFsnUHJvbWlzZScsICdyZXNvbHZlJ10sXG5cdCclUmFuZ2VFcnJvclByb3RvdHlwZSUnOiBbJ1JhbmdlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlJzogWydSZWZlcmVuY2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWdFeHBQcm90b3R5cGUlJzogWydSZWdFeHAnLCAncHJvdG90eXBlJ10sXG5cdCclU2V0UHJvdG90eXBlJSc6IFsnU2V0JywgJ3Byb3RvdHlwZSddLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnU2hhcmVkQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclU3RyaW5nUHJvdG90eXBlJSc6IFsnU3RyaW5nJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bWJvbFByb3RvdHlwZSUnOiBbJ1N5bWJvbCcsICdwcm90b3R5cGUnXSxcblx0JyVTeW50YXhFcnJvclByb3RvdHlwZSUnOiBbJ1N5bnRheEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVkQXJyYXlQcm90b3R5cGUlJzogWydUeXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVR5cGVFcnJvclByb3RvdHlwZSUnOiBbJ1R5cGVFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQxNkFycmF5UHJvdG90eXBlJSc6IFsnVWludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDMyQXJyYXlQcm90b3R5cGUlJzogWydVaW50MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVUklFcnJvclByb3RvdHlwZSUnOiBbJ1VSSUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtNYXBQcm90b3R5cGUlJzogWydXZWFrTWFwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVdlYWtTZXRQcm90b3R5cGUlJzogWydXZWFrU2V0JywgJ3Byb3RvdHlwZSddXG59O1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXNvd24nKTtcbnZhciAkY29uY2F0ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIEFycmF5LnByb3RvdHlwZS5jb25jYXQpO1xudmFyICRzcGxpY2VBcHBseSA9IGJpbmQuY2FsbChGdW5jdGlvbi5hcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciAkc3RyU2xpY2UgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgU3RyaW5nLnByb3RvdHlwZS5zbGljZSk7XG52YXIgJGV4ZWMgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHRpZiAoJGV4ZWMoL14lP1teJV0qJT8kLywgbmFtZSkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lJyk7XG5cdH1cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpIHx8IGZhbHNlO1xuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRkZWZpbmVQcm9wZXJ0eTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcblxuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoW10sICdsZW5ndGgnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGdPUERcblx0XHQkZ09QRCA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZ09QRDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgJFN5bnRheEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3N5bnRheCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xuXG52YXIgZ29wZCA9IHJlcXVpcmUoJ2dvcGQnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lRGF0YVByb3BlcnR5KFxuXHRvYmosXG5cdHByb3BlcnR5LFxuXHR2YWx1ZVxuKSB7XG5cdGlmICghb2JqIHx8ICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgb2JqYCBtdXN0IGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uYCcpO1xuXHR9XG5cdGlmICh0eXBlb2YgcHJvcGVydHkgIT09ICdzdHJpbmcnICYmIHR5cGVvZiBwcm9wZXJ0eSAhPT0gJ3N5bWJvbCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMyAmJiB0eXBlb2YgYXJndW1lbnRzWzNdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzNdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25FbnVtZXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgdHlwZW9mIGFyZ3VtZW50c1s0XSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1s0XSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNSAmJiB0eXBlb2YgYXJndW1lbnRzWzVdICE9PSAnYm9vbGVhbicgJiYgYXJndW1lbnRzWzVdICE9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCcpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gNiAmJiB0eXBlb2YgYXJndW1lbnRzWzZdICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgbm9uRW51bWVyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogbnVsbDtcblx0dmFyIG5vbldyaXRhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgPyBhcmd1bWVudHNbNF0gOiBudWxsO1xuXHR2YXIgbm9uQ29uZmlndXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiBudWxsO1xuXHR2YXIgbG9vc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gNiA/IGFyZ3VtZW50c1s2XSA6IGZhbHNlO1xuXG5cdC8qIEB0eXBlIHtmYWxzZSB8IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPHVua25vd24+fSAqL1xuXHR2YXIgZGVzYyA9ICEhZ29wZCAmJiBnb3BkKG9iaiwgcHJvcGVydHkpO1xuXG5cdGlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0XHQkZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wZXJ0eSwge1xuXHRcdFx0Y29uZmlndXJhYmxlOiBub25Db25maWd1cmFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2MuY29uZmlndXJhYmxlIDogIW5vbkNvbmZpZ3VyYWJsZSxcblx0XHRcdGVudW1lcmFibGU6IG5vbkVudW1lcmFibGUgPT09IG51bGwgJiYgZGVzYyA/IGRlc2MuZW51bWVyYWJsZSA6ICFub25FbnVtZXJhYmxlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IG5vbldyaXRhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLndyaXRhYmxlIDogIW5vbldyaXRhYmxlXG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAobG9vc2UgfHwgKCFub25FbnVtZXJhYmxlICYmICFub25Xcml0YWJsZSAmJiAhbm9uQ29uZmlndXJhYmxlKSkge1xuXHRcdC8vIG11c3QgZmFsbCBiYWNrIHRvIFtbU2V0XV0sIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgYXNrZWQgdG8gbWFrZSBub24tZW51bWVyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tY29uZmlndXJhYmxlXG5cdFx0b2JqW3Byb3BlcnR5XSA9IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignVGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IGRlZmluaW5nIGEgcHJvcGVydHkgYXMgbm9uLWNvbmZpZ3VyYWJsZSwgbm9uLXdyaXRhYmxlLCBvciBub24tZW51bWVyYWJsZS4nKTtcblx0fVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9ycyA9IGZ1bmN0aW9uIGhhc1Byb3BlcnR5RGVzY3JpcHRvcnMoKSB7XG5cdHJldHVybiAhISRkZWZpbmVQcm9wZXJ0eTtcbn07XG5cbmhhc1Byb3BlcnR5RGVzY3JpcHRvcnMuaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcgPSBmdW5jdGlvbiBoYXNBcnJheUxlbmd0aERlZmluZUJ1ZygpIHtcblx0Ly8gbm9kZSB2MC42IGhhcyBhIGJ1ZyB3aGVyZSBhcnJheSBsZW5ndGhzIGNhbiBiZSBTZXQgYnV0IG5vdCBEZWZpbmVkXG5cdGlmICghJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0dHJ5IHtcblx0XHRyZXR1cm4gJGRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGggIT09IDE7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJbiBGaXJlZm94IDQtMjIsIGRlZmluaW5nIGxlbmd0aCBvbiBhbiBhcnJheSB0aHJvd3MgYW4gZXhjZXB0aW9uLlxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvcnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLWRhdGEtcHJvcGVydHknKTtcbnZhciBoYXNEZXNjcmlwdG9ycyA9IHJlcXVpcmUoJ2hhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpKCk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJ2dvcGQnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRmbG9vciA9IEdldEludHJpbnNpYygnJU1hdGguZmxvb3IlJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldEZ1bmN0aW9uTGVuZ3RoKGZuLCBsZW5ndGgpIHtcblx0aWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdH1cblx0aWYgKHR5cGVvZiBsZW5ndGggIT09ICdudW1iZXInIHx8IGxlbmd0aCA8IDAgfHwgbGVuZ3RoID4gMHhGRkZGRkZGRiB8fCAkZmxvb3IobGVuZ3RoKSAhPT0gbGVuZ3RoKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2BsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlcicpO1xuXHR9XG5cblx0dmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgISFhcmd1bWVudHNbMl07XG5cblx0dmFyIGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgPSB0cnVlO1xuXHR2YXIgZnVuY3Rpb25MZW5ndGhJc1dyaXRhYmxlID0gdHJ1ZTtcblx0aWYgKCdsZW5ndGgnIGluIGZuICYmIGdPUEQpIHtcblx0XHR2YXIgZGVzYyA9IGdPUEQoZm4sICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdGZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKGRlc2MgJiYgIWRlc2Mud3JpdGFibGUpIHtcblx0XHRcdGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlIHx8IGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSB8fCAhbG9vc2UpIHtcblx0XHRpZiAoaGFzRGVzY3JpcHRvcnMpIHtcblx0XHRcdGRlZmluZSgvKiogQHR5cGUge1BhcmFtZXRlcnM8ZGVmaW5lPlswXX0gKi8gKGZuKSwgJ2xlbmd0aCcsIGxlbmd0aCwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlZmluZSgvKiogQHR5cGUge1BhcmFtZXRlcnM8ZGVmaW5lPlswXX0gKi8gKGZuKSwgJ2xlbmd0aCcsIGxlbmd0aCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBzZXRGdW5jdGlvbkxlbmd0aCA9IHJlcXVpcmUoJ3NldC1mdW5jdGlvbi1sZW5ndGgnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJ2VzLWRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ2luYWxGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdhIGZ1bmN0aW9uIGlzIHJlcXVpcmVkJyk7XG5cdH1cblx0dmFyIGZ1bmMgPSAkcmVmbGVjdEFwcGx5KGJpbmQsICRjYWxsLCBhcmd1bWVudHMpO1xuXHRyZXR1cm4gc2V0RnVuY3Rpb25MZW5ndGgoXG5cdFx0ZnVuYyxcblx0XHQxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpLFxuXHRcdHRydWVcblx0KTtcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQge30iLCJ2YXIgaGFzTWFwID0gdHlwZW9mIE1hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBNYXAucHJvdG90eXBlO1xudmFyIG1hcFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNNYXAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE1hcC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIG1hcFNpemUgPSBoYXNNYXAgJiYgbWFwU2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIG1hcFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG1hcFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgbWFwRm9yRWFjaCA9IGhhc01hcCAmJiBNYXAucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJyAmJiBTZXQucHJvdG90eXBlO1xudmFyIHNldFNpemVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiBoYXNTZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFNldC5wcm90b3R5cGUsICdzaXplJykgOiBudWxsO1xudmFyIHNldFNpemUgPSBoYXNTZXQgJiYgc2V0U2l6ZURlc2NyaXB0b3IgJiYgdHlwZW9mIHNldFNpemVEZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFNpemVEZXNjcmlwdG9yLmdldCA6IG51bGw7XG52YXIgc2V0Rm9yRWFjaCA9IGhhc1NldCAmJiBTZXQucHJvdG90eXBlLmZvckVhY2g7XG52YXIgaGFzV2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nICYmIFdlYWtNYXAucHJvdG90eXBlO1xudmFyIHdlYWtNYXBIYXMgPSBoYXNXZWFrTWFwID8gV2Vha01hcC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgJiYgV2Vha1NldC5wcm90b3R5cGU7XG52YXIgd2Vha1NldEhhcyA9IGhhc1dlYWtTZXQgPyBXZWFrU2V0LnByb3RvdHlwZS5oYXMgOiBudWxsO1xudmFyIGhhc1dlYWtSZWYgPSB0eXBlb2YgV2Vha1JlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrUmVmLnByb3RvdHlwZTtcbnZhciB3ZWFrUmVmRGVyZWYgPSBoYXNXZWFrUmVmID8gV2Vha1JlZi5wcm90b3R5cGUuZGVyZWYgOiBudWxsO1xudmFyIGJvb2xlYW5WYWx1ZU9mID0gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZjtcbnZhciBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciAkbWF0Y2ggPSBTdHJpbmcucHJvdG90eXBlLm1hdGNoO1xudmFyICRzbGljZSA9IFN0cmluZy5wcm90b3R5cGUuc2xpY2U7XG52YXIgJHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgJHRvVXBwZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b1VwcGVyQ2FzZTtcbnZhciAkdG9Mb3dlckNhc2UgPSBTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlO1xudmFyICR0ZXN0ID0gUmVnRXhwLnByb3RvdHlwZS50ZXN0O1xudmFyICRjb25jYXQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0O1xudmFyICRqb2luID0gQXJyYXkucHJvdG90eXBlLmpvaW47XG52YXIgJGFyclNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyICRmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgYmlnSW50VmFsdWVPZiA9IHR5cGVvZiBCaWdJbnQgPT09ICdmdW5jdGlvbicgPyBCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YgOiBudWxsO1xudmFyIGdPUFMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIHN5bVRvU3RyaW5nID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJyA/IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgOiBudWxsO1xudmFyIGhhc1NoYW1tZWRTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnb2JqZWN0Jztcbi8vIGllLCBgaGFzLXRvc3RyaW5ndGFnL3NoYW1zXG52YXIgdG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZyAmJiAodHlwZW9mIFN5bWJvbC50b1N0cmluZ1RhZyA9PT0gaGFzU2hhbW1lZFN5bWJvbHMgPyAnb2JqZWN0JyA6ICdzeW1ib2wnKVxuICAgID8gU3ltYm9sLnRvU3RyaW5nVGFnXG4gICAgOiBudWxsO1xudmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbnZhciBnUE8gPSAodHlwZW9mIFJlZmxlY3QgPT09ICdmdW5jdGlvbicgPyBSZWZsZWN0LmdldFByb3RvdHlwZU9mIDogT2JqZWN0LmdldFByb3RvdHlwZU9mKSB8fCAoXG4gICAgW10uX19wcm90b19fID09PSBBcnJheS5wcm90b3R5cGUgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuICAgICAgICA/IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICByZXR1cm4gTy5fX3Byb3RvX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgfVxuICAgICAgICA6IG51bGxcbik7XG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNTZXBhcmF0b3IobnVtLCBzdHIpIHtcbiAgICBpZiAoXG4gICAgICAgIG51bSA9PT0gSW5maW5pdHlcbiAgICAgICAgfHwgbnVtID09PSAtSW5maW5pdHlcbiAgICAgICAgfHwgbnVtICE9PSBudW1cbiAgICAgICAgfHwgKG51bSAmJiBudW0gPiAtMTAwMCAmJiBudW0gPCAxMDAwKVxuICAgICAgICB8fCAkdGVzdC5jYWxsKC9lLywgc3RyKVxuICAgICkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICB2YXIgc2VwUmVnZXggPSAvWzAtOV0oPz0oPzpbMC05XXszfSkrKD8hWzAtOV0pKS9nO1xuICAgIGlmICh0eXBlb2YgbnVtID09PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgaW50ID0gbnVtIDwgMCA/IC0kZmxvb3IoLW51bSkgOiAkZmxvb3IobnVtKTsgLy8gdHJ1bmMobnVtKVxuICAgICAgICBpZiAoaW50ICE9PSBudW0pIHtcbiAgICAgICAgICAgIHZhciBpbnRTdHIgPSBTdHJpbmcoaW50KTtcbiAgICAgICAgICAgIHZhciBkZWMgPSAkc2xpY2UuY2FsbChzdHIsIGludFN0ci5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKGludFN0ciwgc2VwUmVnZXgsICckJl8nKSArICcuJyArICRyZXBsYWNlLmNhbGwoJHJlcGxhY2UuY2FsbChkZWMsIC8oWzAtOV17M30pL2csICckJl8nKSwgL18kLywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHN0ciwgc2VwUmVnZXgsICckJl8nKTtcbn1cblxudmFyIHV0aWxJbnNwZWN0ID0gcmVxdWlyZSgnLi91dGlsLmluc3BlY3QnKTtcbnZhciBpbnNwZWN0Q3VzdG9tID0gdXRpbEluc3BlY3QuY3VzdG9tO1xudmFyIGluc3BlY3RTeW1ib2wgPSBpc1N5bWJvbChpbnNwZWN0Q3VzdG9tKSA/IGluc3BlY3RDdXN0b20gOiBudWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluc3BlY3RfKG9iaiwgb3B0aW9ucywgZGVwdGgsIHNlZW4pIHtcbiAgICB2YXIgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykgJiYgKG9wdHMucXVvdGVTdHlsZSAhPT0gJ3NpbmdsZScgJiYgb3B0cy5xdW90ZVN0eWxlICE9PSAnZG91YmxlJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwicXVvdGVTdHlsZVwiIG11c3QgYmUgXCJzaW5nbGVcIiBvciBcImRvdWJsZVwiJyk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgaGFzKG9wdHMsICdtYXhTdHJpbmdMZW5ndGgnKSAmJiAodHlwZW9mIG9wdHMubWF4U3RyaW5nTGVuZ3RoID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyBvcHRzLm1heFN0cmluZ0xlbmd0aCA8IDAgJiYgb3B0cy5tYXhTdHJpbmdMZW5ndGggIT09IEluZmluaXR5XG4gICAgICAgICAgICA6IG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBudWxsXG4gICAgICAgIClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwibWF4U3RyaW5nTGVuZ3RoXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgSW5maW5pdHksIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tSW5zcGVjdCA9IGhhcyhvcHRzLCAnY3VzdG9tSW5zcGVjdCcpID8gb3B0cy5jdXN0b21JbnNwZWN0IDogdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN1c3RvbUluc3BlY3QgIT09ICdib29sZWFuJyAmJiBjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJjdXN0b21JbnNwZWN0XCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCwgYGZhbHNlYCwgb3IgYFxcJ3N5bWJvbFxcJ2AnKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnaW5kZW50JylcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09IG51bGxcbiAgICAgICAgJiYgb3B0cy5pbmRlbnQgIT09ICdcXHQnXG4gICAgICAgICYmICEocGFyc2VJbnQob3B0cy5pbmRlbnQsIDEwKSA9PT0gb3B0cy5pbmRlbnQgJiYgb3B0cy5pbmRlbnQgPiAwKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJpbmRlbnRcIiBtdXN0IGJlIFwiXFxcXHRcIiwgYW4gaW50ZWdlciA+IDAsIG9yIGBudWxsYCcpO1xuICAgIH1cbiAgICBpZiAoaGFzKG9wdHMsICdudW1lcmljU2VwYXJhdG9yJykgJiYgdHlwZW9mIG9wdHMubnVtZXJpY1NlcGFyYXRvciAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm51bWVyaWNTZXBhcmF0b3JcIiwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYHRydWVgIG9yIGBmYWxzZWAnKTtcbiAgICB9XG4gICAgdmFyIG51bWVyaWNTZXBhcmF0b3IgPSBvcHRzLm51bWVyaWNTZXBhcmF0b3I7XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIG9iaiA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKG9iaiwgb3B0cyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAob2JqID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gSW5maW5pdHkgLyBvYmogPiAwID8gJzAnIDogJy0wJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3RyID0gU3RyaW5nKG9iaik7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIHN0cikgOiBzdHI7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50Jykge1xuICAgICAgICB2YXIgYmlnSW50U3RyID0gU3RyaW5nKG9iaikgKyAnbic7XG4gICAgICAgIHJldHVybiBudW1lcmljU2VwYXJhdG9yID8gYWRkTnVtZXJpY1NlcGFyYXRvcihvYmosIGJpZ0ludFN0cikgOiBiaWdJbnRTdHI7XG4gICAgfVxuXG4gICAgdmFyIG1heERlcHRoID0gdHlwZW9mIG9wdHMuZGVwdGggPT09ICd1bmRlZmluZWQnID8gNSA6IG9wdHMuZGVwdGg7XG4gICAgaWYgKHR5cGVvZiBkZXB0aCA9PT0gJ3VuZGVmaW5lZCcpIHsgZGVwdGggPSAwOyB9XG4gICAgaWYgKGRlcHRoID49IG1heERlcHRoICYmIG1heERlcHRoID4gMCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gaXNBcnJheShvYmopID8gJ1tBcnJheV0nIDogJ1tPYmplY3RdJztcbiAgICB9XG5cbiAgICB2YXIgaW5kZW50ID0gZ2V0SW5kZW50KG9wdHMsIGRlcHRoKTtcblxuICAgIGlmICh0eXBlb2Ygc2VlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VlbiA9IFtdO1xuICAgIH0gZWxzZSBpZiAoaW5kZXhPZihzZWVuLCBvYmopID49IDApIHtcbiAgICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNwZWN0KHZhbHVlLCBmcm9tLCBub0luZGVudCkge1xuICAgICAgICBpZiAoZnJvbSkge1xuICAgICAgICAgICAgc2VlbiA9ICRhcnJTbGljZS5jYWxsKHNlZW4pO1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub0luZGVudCkge1xuICAgICAgICAgICAgdmFyIG5ld09wdHMgPSB7XG4gICAgICAgICAgICAgICAgZGVwdGg6IG9wdHMuZGVwdGhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaGFzKG9wdHMsICdxdW90ZVN0eWxlJykpIHtcbiAgICAgICAgICAgICAgICBuZXdPcHRzLnF1b3RlU3R5bGUgPSBvcHRzLnF1b3RlU3R5bGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zcGVjdF8odmFsdWUsIG5ld09wdHMsIGRlcHRoICsgMSwgc2Vlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBvcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmICFpc1JlZ0V4cChvYmopKSB7IC8vIGluIG9sZGVyIGVuZ2luZXMsIHJlZ2V4ZXMgYXJlIGNhbGxhYmxlXG4gICAgICAgIHZhciBuYW1lID0gbmFtZU9mKG9iaik7XG4gICAgICAgIHZhciBrZXlzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICByZXR1cm4gJ1tGdW5jdGlvbicgKyAobmFtZSA/ICc6ICcgKyBuYW1lIDogJyAoYW5vbnltb3VzKScpICsgJ10nICsgKGtleXMubGVuZ3RoID4gMCA/ICcgeyAnICsgJGpvaW4uY2FsbChrZXlzLCAnLCAnKSArICcgfScgOiAnJyk7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChvYmopKSB7XG4gICAgICAgIHZhciBzeW1TdHJpbmcgPSBoYXNTaGFtbWVkU3ltYm9scyA/ICRyZXBsYWNlLmNhbGwoU3RyaW5nKG9iaiksIC9eKFN5bWJvbFxcKC4qXFwpKV9bXildKiQvLCAnJDEnKSA6IHN5bVRvU3RyaW5nLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICFoYXNTaGFtbWVkU3ltYm9scyA/IG1hcmtCb3hlZChzeW1TdHJpbmcpIDogc3ltU3RyaW5nO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KG9iaikpIHtcbiAgICAgICAgdmFyIHMgPSAnPCcgKyAkdG9Mb3dlckNhc2UuY2FsbChTdHJpbmcob2JqLm5vZGVOYW1lKSk7XG4gICAgICAgIHZhciBhdHRycyA9IG9iai5hdHRyaWJ1dGVzIHx8IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzICs9ICcgJyArIGF0dHJzW2ldLm5hbWUgKyAnPScgKyB3cmFwUXVvdGVzKHF1b3RlKGF0dHJzW2ldLnZhbHVlKSwgJ2RvdWJsZScsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gJz4nO1xuICAgICAgICBpZiAob2JqLmNoaWxkTm9kZXMgJiYgb2JqLmNoaWxkTm9kZXMubGVuZ3RoKSB7IHMgKz0gJy4uLic7IH1cbiAgICAgICAgcyArPSAnPC8nICsgJHRvTG93ZXJDYXNlLmNhbGwoU3RyaW5nKG9iai5ub2RlTmFtZSkpICsgJz4nO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1tdJzsgfVxuICAgICAgICB2YXIgeHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmIChpbmRlbnQgJiYgIXNpbmdsZUxpbmVWYWx1ZXMoeHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1snICsgaW5kZW50ZWRKb2luKHhzLCBpbmRlbnQpICsgJ10nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnWyAnICsgJGpvaW4uY2FsbCh4cywgJywgJykgKyAnIF0nO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcihvYmopKSB7XG4gICAgICAgIHZhciBwYXJ0cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgaWYgKCEoJ2NhdXNlJyBpbiBFcnJvci5wcm90b3R5cGUpICYmICdjYXVzZScgaW4gb2JqICYmICFpc0VudW1lcmFibGUuY2FsbChvYmosICdjYXVzZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3sgWycgKyBTdHJpbmcob2JqKSArICddICcgKyAkam9pbi5jYWxsKCRjb25jYXQuY2FsbCgnW2NhdXNlXTogJyArIGluc3BlY3Qob2JqLmNhdXNlKSwgcGFydHMpLCAnLCAnKSArICcgfSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJ1snICsgU3RyaW5nKG9iaikgKyAnXSc7IH1cbiAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgJGpvaW4uY2FsbChwYXJ0cywgJywgJykgKyAnIH0nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgY3VzdG9tSW5zcGVjdCkge1xuICAgICAgICBpZiAoaW5zcGVjdFN5bWJvbCAmJiB0eXBlb2Ygb2JqW2luc3BlY3RTeW1ib2xdID09PSAnZnVuY3Rpb24nICYmIHV0aWxJbnNwZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbEluc3BlY3Qob2JqLCB7IGRlcHRoOiBtYXhEZXB0aCAtIGRlcHRoIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbUluc3BlY3QgIT09ICdzeW1ib2wnICYmIHR5cGVvZiBvYmouaW5zcGVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5pbnNwZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTWFwKG9iaikpIHtcbiAgICAgICAgdmFyIG1hcFBhcnRzID0gW107XG4gICAgICAgIGlmIChtYXBGb3JFYWNoKSB7XG4gICAgICAgICAgICBtYXBGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIG1hcFBhcnRzLnB1c2goaW5zcGVjdChrZXksIG9iaiwgdHJ1ZSkgKyAnID0+ICcgKyBpbnNwZWN0KHZhbHVlLCBvYmopKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2YoJ01hcCcsIG1hcFNpemUuY2FsbChvYmopLCBtYXBQYXJ0cywgaW5kZW50KTtcbiAgICB9XG4gICAgaWYgKGlzU2V0KG9iaikpIHtcbiAgICAgICAgdmFyIHNldFBhcnRzID0gW107XG4gICAgICAgIGlmIChzZXRGb3JFYWNoKSB7XG4gICAgICAgICAgICBzZXRGb3JFYWNoLmNhbGwob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzZXRQYXJ0cy5wdXNoKGluc3BlY3QodmFsdWUsIG9iaikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25PZignU2V0Jywgc2V0U2l6ZS5jYWxsKG9iaiksIHNldFBhcnRzLCBpbmRlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtNYXAnKTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha1NldChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrU2V0Jyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtSZWYob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1JlZicpO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoTnVtYmVyKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKGlzQmlnSW50KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KGJpZ0ludFZhbHVlT2YuY2FsbChvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0Jvb2xlYW4ob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGJvb2xlYW5WYWx1ZU9mLmNhbGwob2JqKSk7XG4gICAgfVxuICAgIGlmIChpc1N0cmluZyhvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChTdHJpbmcob2JqKSkpO1xuICAgIH1cbiAgICAvLyBub3RlOiBpbiBJRSA4LCBzb21ldGltZXMgYGdsb2JhbCAhPT0gd2luZG93YCBidXQgYm90aCBhcmUgdGhlIHByb3RvdHlwZXMgb2YgZWFjaCBvdGhlclxuICAgIC8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiBvYmogPT09IHdpbmRvdykge1xuICAgICAgICByZXR1cm4gJ3sgW29iamVjdCBXaW5kb3ddIH0nO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSBnbG9iYWxUaGlzKVxuICAgICAgICB8fCAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSBnbG9iYWwpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAneyBbb2JqZWN0IGdsb2JhbFRoaXNdIH0nO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvYmopICYmICFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgIHZhciB5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgdmFyIGlzUGxhaW5PYmplY3QgPSBnUE8gPyBnUE8ob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZSA6IG9iaiBpbnN0YW5jZW9mIE9iamVjdCB8fCBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdDtcbiAgICAgICAgdmFyIHByb3RvVGFnID0gb2JqIGluc3RhbmNlb2YgT2JqZWN0ID8gJycgOiAnbnVsbCBwcm90b3R5cGUnO1xuICAgICAgICB2YXIgc3RyaW5nVGFnID0gIWlzUGxhaW5PYmplY3QgJiYgdG9TdHJpbmdUYWcgJiYgT2JqZWN0KG9iaikgPT09IG9iaiAmJiB0b1N0cmluZ1RhZyBpbiBvYmogPyAkc2xpY2UuY2FsbCh0b1N0cihvYmopLCA4LCAtMSkgOiBwcm90b1RhZyA/ICdPYmplY3QnIDogJyc7XG4gICAgICAgIHZhciBjb25zdHJ1Y3RvclRhZyA9IGlzUGxhaW5PYmplY3QgfHwgdHlwZW9mIG9iai5jb25zdHJ1Y3RvciAhPT0gJ2Z1bmN0aW9uJyA/ICcnIDogb2JqLmNvbnN0cnVjdG9yLm5hbWUgPyBvYmouY29uc3RydWN0b3IubmFtZSArICcgJyA6ICcnO1xuICAgICAgICB2YXIgdGFnID0gY29uc3RydWN0b3JUYWcgKyAoc3RyaW5nVGFnIHx8IHByb3RvVGFnID8gJ1snICsgJGpvaW4uY2FsbCgkY29uY2F0LmNhbGwoW10sIHN0cmluZ1RhZyB8fCBbXSwgcHJvdG9UYWcgfHwgW10pLCAnOiAnKSArICddICcgOiAnJyk7XG4gICAgICAgIGlmICh5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRhZyArICd7fSc7IH1cbiAgICAgICAgaWYgKGluZGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZyArICd7JyArIGluZGVudGVkSm9pbih5cywgaW5kZW50KSArICd9JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFnICsgJ3sgJyArICRqb2luLmNhbGwoeXMsICcsICcpICsgJyB9JztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhvYmopO1xufTtcblxuZnVuY3Rpb24gd3JhcFF1b3RlcyhzLCBkZWZhdWx0U3R5bGUsIG9wdHMpIHtcbiAgICB2YXIgcXVvdGVDaGFyID0gKG9wdHMucXVvdGVTdHlsZSB8fCBkZWZhdWx0U3R5bGUpID09PSAnZG91YmxlJyA/ICdcIicgOiBcIidcIjtcbiAgICByZXR1cm4gcXVvdGVDaGFyICsgcyArIHF1b3RlQ2hhcjtcbn1cblxuZnVuY3Rpb24gcXVvdGUocykge1xuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKFN0cmluZyhzKSwgL1wiL2csICcmcXVvdDsnKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheShvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0RhdGUob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBEYXRlXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1JlZ0V4cChvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNFcnJvcihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEVycm9yXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc1N0cmluZyhvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IFN0cmluZ10nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBOdW1iZXJdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHsgcmV0dXJuIHRvU3RyKG9iaikgPT09ICdbb2JqZWN0IEJvb2xlYW5dJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cblxuLy8gU3ltYm9sIGFuZCBCaWdJbnQgZG8gaGF2ZSBTeW1ib2wudG9TdHJpbmdUYWcgYnkgc3BlYywgc28gdGhhdCBjYW4ndCBiZSB1c2VkIHRvIGVsaW1pbmF0ZSBmYWxzZSBwb3NpdGl2ZXNcbmZ1bmN0aW9uIGlzU3ltYm9sKG9iaikge1xuICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scykge1xuICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiBpbnN0YW5jZW9mIFN5bWJvbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhc3ltVG9TdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBzeW1Ub1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0JpZ0ludChvYmopIHtcbiAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCAhYmlnSW50VmFsdWVPZikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGJpZ0ludFZhbHVlT2YuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkgfHwgZnVuY3Rpb24gKGtleSkgeyByZXR1cm4ga2V5IGluIHRoaXM7IH07XG5mdW5jdGlvbiBoYXMob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBrZXkpO1xufVxuXG5mdW5jdGlvbiB0b1N0cihvYmopIHtcbiAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbChvYmopO1xufVxuXG5mdW5jdGlvbiBuYW1lT2YoZikge1xuICAgIGlmIChmLm5hbWUpIHsgcmV0dXJuIGYubmFtZTsgfVxuICAgIHZhciBtID0gJG1hdGNoLmNhbGwoZnVuY3Rpb25Ub1N0cmluZy5jYWxsKGYpLCAvXmZ1bmN0aW9uXFxzKihbXFx3JF0rKS8pO1xuICAgIGlmIChtKSB7IHJldHVybiBtWzFdOyB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGluZGV4T2YoeHMsIHgpIHtcbiAgICBpZiAoeHMuaW5kZXhPZikgeyByZXR1cm4geHMuaW5kZXhPZih4KTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsID0geHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmICh4c1tpXSA9PT0geCkgeyByZXR1cm4gaTsgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG59XG5cbmZ1bmN0aW9uIGlzTWFwKHgpIHtcbiAgICBpZiAoIW1hcFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIE1hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha01hcCh4KSB7XG4gICAgaWYgKCF3ZWFrTWFwSGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrTWFwOyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNXZWFrUmVmKHgpIHtcbiAgICBpZiAoIXdlYWtSZWZEZXJlZiB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrUmVmRGVyZWYuY2FsbCh4KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU2V0KHgpIHtcbiAgICBpZiAoIXNldFNpemUgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc2V0U2l6ZS5jYWxsKHgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbWFwU2l6ZS5jYWxsKHgpO1xuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geCBpbnN0YW5jZW9mIFNldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1NldCh4KSB7XG4gICAgaWYgKCF3ZWFrU2V0SGFzIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHdlYWtTZXRIYXMuY2FsbCh4LCB3ZWFrU2V0SGFzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHdlYWtNYXBIYXMuY2FsbCh4LCB3ZWFrTWFwSGFzKTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWFrU2V0OyAvLyBjb3JlLWpzIHdvcmthcm91bmQsIHByZS12Mi41LjBcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50KHgpIHtcbiAgICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHggaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiB4Lm5vZGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyLCBvcHRzKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPiBvcHRzLm1heFN0cmluZ0xlbmd0aCkge1xuICAgICAgICB2YXIgcmVtYWluaW5nID0gc3RyLmxlbmd0aCAtIG9wdHMubWF4U3RyaW5nTGVuZ3RoO1xuICAgICAgICB2YXIgdHJhaWxlciA9ICcuLi4gJyArIHJlbWFpbmluZyArICcgbW9yZSBjaGFyYWN0ZXInICsgKHJlbWFpbmluZyA+IDEgPyAncycgOiAnJyk7XG4gICAgICAgIHJldHVybiBpbnNwZWN0U3RyaW5nKCRzbGljZS5jYWxsKHN0ciwgMCwgb3B0cy5tYXhTdHJpbmdMZW5ndGgpLCBvcHRzKSArIHRyYWlsZXI7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgdmFyIHMgPSAkcmVwbGFjZS5jYWxsKCRyZXBsYWNlLmNhbGwoc3RyLCAvKFsnXFxcXF0pL2csICdcXFxcJDEnKSwgL1tcXHgwMC1cXHgxZl0vZywgbG93Ynl0ZSk7XG4gICAgcmV0dXJuIHdyYXBRdW90ZXMocywgJ3NpbmdsZScsIG9wdHMpO1xufVxuXG5mdW5jdGlvbiBsb3dieXRlKGMpIHtcbiAgICB2YXIgbiA9IGMuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgeCA9IHtcbiAgICAgICAgODogJ2InLFxuICAgICAgICA5OiAndCcsXG4gICAgICAgIDEwOiAnbicsXG4gICAgICAgIDEyOiAnZicsXG4gICAgICAgIDEzOiAncidcbiAgICB9W25dO1xuICAgIGlmICh4KSB7IHJldHVybiAnXFxcXCcgKyB4OyB9XG4gICAgcmV0dXJuICdcXFxceCcgKyAobiA8IDB4MTAgPyAnMCcgOiAnJykgKyAkdG9VcHBlckNhc2UuY2FsbChuLnRvU3RyaW5nKDE2KSk7XG59XG5cbmZ1bmN0aW9uIG1hcmtCb3hlZChzdHIpIHtcbiAgICByZXR1cm4gJ09iamVjdCgnICsgc3RyICsgJyknO1xufVxuXG5mdW5jdGlvbiB3ZWFrQ29sbGVjdGlvbk9mKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSArICcgeyA/IH0nO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0aW9uT2YodHlwZSwgc2l6ZSwgZW50cmllcywgaW5kZW50KSB7XG4gICAgdmFyIGpvaW5lZEVudHJpZXMgPSBpbmRlbnQgPyBpbmRlbnRlZEpvaW4oZW50cmllcywgaW5kZW50KSA6ICRqb2luLmNhbGwoZW50cmllcywgJywgJyk7XG4gICAgcmV0dXJuIHR5cGUgKyAnICgnICsgc2l6ZSArICcpIHsnICsgam9pbmVkRW50cmllcyArICd9Jztcbn1cblxuZnVuY3Rpb24gc2luZ2xlTGluZVZhbHVlcyh4cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGluZGV4T2YoeHNbaV0sICdcXG4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldEluZGVudChvcHRzLCBkZXB0aCkge1xuICAgIHZhciBiYXNlSW5kZW50O1xuICAgIGlmIChvcHRzLmluZGVudCA9PT0gJ1xcdCcpIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICdcXHQnO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdHMuaW5kZW50ID09PSAnbnVtYmVyJyAmJiBvcHRzLmluZGVudCA+IDApIHtcbiAgICAgICAgYmFzZUluZGVudCA9ICRqb2luLmNhbGwoQXJyYXkob3B0cy5pbmRlbnQgKyAxKSwgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZTogYmFzZUluZGVudCxcbiAgICAgICAgcHJldjogJGpvaW4uY2FsbChBcnJheShkZXB0aCArIDEpLCBiYXNlSW5kZW50KVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGluZGVudGVkSm9pbih4cywgaW5kZW50KSB7XG4gICAgaWYgKHhzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cbiAgICB2YXIgbGluZUpvaW5lciA9ICdcXG4nICsgaW5kZW50LnByZXYgKyBpbmRlbnQuYmFzZTtcbiAgICByZXR1cm4gbGluZUpvaW5lciArICRqb2luLmNhbGwoeHMsICcsJyArIGxpbmVKb2luZXIpICsgJ1xcbicgKyBpbmRlbnQucHJldjtcbn1cblxuZnVuY3Rpb24gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpIHtcbiAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iaik7XG4gICAgdmFyIHhzID0gW107XG4gICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHhzLmxlbmd0aCA9IG9iai5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4c1tpXSA9IGhhcyhvYmosIGkpID8gaW5zcGVjdChvYmpbaV0sIG9iaikgOiAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgc3ltcyA9IHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nID8gZ09QUyhvYmopIDogW107XG4gICAgdmFyIHN5bU1hcDtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgc3ltTWFwID0ge307XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3ltcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgc3ltTWFwWyckJyArIHN5bXNba11dID0gc3ltc1trXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBpZiAoIWhhcyhvYmosIGtleSkpIHsgY29udGludWU7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgaWYgKGlzQXJyICYmIFN0cmluZyhOdW1iZXIoa2V5KSkgPT09IGtleSAmJiBrZXkgPCBvYmoubGVuZ3RoKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChoYXNTaGFtbWVkU3ltYm9scyAmJiBzeW1NYXBbJyQnICsga2V5XSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0byBwcmV2ZW50IHNoYW1tZWQgU3ltYm9scywgd2hpY2ggYXJlIHN0b3JlZCBhcyBzdHJpbmdzLCBmcm9tIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBzdHJpbmcga2V5IHNlY3Rpb25cbiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKCR0ZXN0LmNhbGwoL1teXFx3JF0vLCBrZXkpKSB7XG4gICAgICAgICAgICB4cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmopICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgeHMucHVzaChrZXkgKyAnOiAnICsgaW5zcGVjdChvYmpba2V5XSwgb2JqKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnT1BTID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ltcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltc1tqXSkpIHtcbiAgICAgICAgICAgICAgICB4cy5wdXNoKCdbJyArIGluc3BlY3Qoc3ltc1tqXSkgKyAnXTogJyArIGluc3BlY3Qob2JqW3N5bXNbal1dLCBvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geHM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIGluc3BlY3QgPSByZXF1aXJlKCdvYmplY3QtaW5zcGVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy90eXBlJyk7XG52YXIgJFdlYWtNYXAgPSBHZXRJbnRyaW5zaWMoJyVXZWFrTWFwJScsIHRydWUpO1xudmFyICRNYXAgPSBHZXRJbnRyaW5zaWMoJyVNYXAlJywgdHJ1ZSk7XG5cbnZhciAkd2Vha01hcEdldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBTZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwSGFzID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcbnZhciAkbWFwR2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICRtYXBTZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJG1hcEhhcyA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcblxuLypcbiogVGhpcyBmdW5jdGlvbiB0cmF2ZXJzZXMgdGhlIGxpc3QgcmV0dXJuaW5nIHRoZSBub2RlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGtleS5cbipcbiogVGhhdCBub2RlIGlzIGFsc28gbW92ZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXQgaWYgaXQncyBhY2Nlc3NlZCBhZ2FpbiB3ZSBkb24ndCBuZWVkIHRvIHRyYXZlcnNlIHRoZSB3aG9sZSBsaXN0LiBCeSBkb2luZyBzbywgYWxsIHRoZSByZWNlbnRseSB1c2VkIG5vZGVzIGNhbiBiZSBhY2Nlc3NlZCByZWxhdGl2ZWx5IHF1aWNrbHkuXG4qL1xuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5saXN0R2V0Tm9kZX0gKi9cbnZhciBsaXN0R2V0Tm9kZSA9IGZ1bmN0aW9uIChsaXN0LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHQvKiogQHR5cGUge3R5cGVvZiBsaXN0IHwgTm9uTnVsbGFibGU8KHR5cGVvZiBsaXN0KVsnbmV4dCddPn0gKi9cblx0dmFyIHByZXYgPSBsaXN0O1xuXHQvKiogQHR5cGUgeyh0eXBlb2YgbGlzdClbJ25leHQnXX0gKi9cblx0dmFyIGN1cnI7XG5cdGZvciAoOyAoY3VyciA9IHByZXYubmV4dCkgIT09IG51bGw7IHByZXYgPSBjdXJyKSB7XG5cdFx0aWYgKGN1cnIua2V5ID09PSBrZXkpIHtcblx0XHRcdHByZXYubmV4dCA9IGN1cnIubmV4dDtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnNcblx0XHRcdGN1cnIubmV4dCA9IC8qKiBAdHlwZSB7Tm9uTnVsbGFibGU8dHlwZW9mIGxpc3QubmV4dD59ICovIChsaXN0Lm5leHQpO1xuXHRcdFx0bGlzdC5uZXh0ID0gY3VycjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHRcdFx0cmV0dXJuIGN1cnI7XG5cdFx0fVxuXHR9XG59O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RHZXR9ICovXG52YXIgbGlzdEdldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlO1xufTtcbi8qKiBAdHlwZSB7aW1wb3J0KCcuJykubGlzdFNldH0gKi9cbnZhciBsaXN0U2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSwgdmFsdWUpIHtcblx0dmFyIG5vZGUgPSBsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xuXHRpZiAobm9kZSkge1xuXHRcdG5vZGUudmFsdWUgPSB2YWx1ZTtcblx0fSBlbHNlIHtcblx0XHQvLyBQcmVwZW5kIHRoZSBuZXcgbm9kZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cdFx0b2JqZWN0cy5uZXh0ID0gLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5MaXN0Tm9kZTx0eXBlb2YgdmFsdWU+fSAqLyAoeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduLCBuby1leHRyYS1wYXJlbnNcblx0XHRcdGtleToga2V5LFxuXHRcdFx0bmV4dDogb2JqZWN0cy5uZXh0LFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fSk7XG5cdH1cbn07XG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RIYXN9ICovXG52YXIgbGlzdEhhcyA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXkpIHtcblx0cmV0dXJuICEhbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcbn07XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFNpZGVDaGFubmVsKCkge1xuXHQvKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCB1bmtub3duPn0gKi8gdmFyICR3bTtcblx0LyoqIEB0eXBlIHtNYXA8b2JqZWN0LCB1bmtub3duPn0gKi8gdmFyICRtO1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLicpLlJvb3ROb2RlPHVua25vd24+fSAqLyB2YXIgJG87XG5cblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5DaGFubmVsfSAqL1xuXHR2YXIgY2hhbm5lbCA9IHtcblx0XHRhc3NlcnQ6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICghY2hhbm5lbC5oYXMoa2V5KSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignU2lkZSBjaGFubmVsIGRvZXMgbm90IGNvbnRhaW4gJyArIGluc3BlY3Qoa2V5KSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXQ6IGZ1bmN0aW9uIChrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEdldCgkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEdldCgkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RHZXQoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGhhczogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCR3bSkge1xuXHRcdFx0XHRcdHJldHVybiAkd2Vha01hcEhhcygkd20sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoJG0pIHtcblx0XHRcdFx0XHRyZXR1cm4gJG1hcEhhcygkbSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCRvKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbG9uZWx5LWlmXG5cdFx0XHRcdFx0cmV0dXJuIGxpc3RIYXMoJG8sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICghJHdtKSB7XG5cdFx0XHRcdFx0JHdtID0gbmV3ICRXZWFrTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JHdlYWtNYXBTZXQoJHdtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoJE1hcCkge1xuXHRcdFx0XHRpZiAoISRtKSB7XG5cdFx0XHRcdFx0JG0gPSBuZXcgJE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCRtYXBTZXQoJG0sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKCEkbykge1xuXHRcdFx0XHRcdC8vIEluaXRpYWxpemUgdGhlIGxpbmtlZCBsaXN0IGFzIGFuIGVtcHR5IG5vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2YgdGhlIGZpcnN0IG5vZGU6IHdlIGNhbiBhbHdheXMgcmVmZXIgdG8gaXQgYXMgKHByZXZpb3VzIG5vZGUpLm5leHQsIGluc3RlYWQgb2Ygc29tZXRoaW5nIGxpa2UgKGxpc3QpLmhlYWRcblx0XHRcdFx0XHQkbyA9IHsga2V5OiB7fSwgbmV4dDogbnVsbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxpc3RTZXQoJG8sIGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0cmV0dXJuIGNoYW5uZWw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcbnZhciBwZXJjZW50VHdlbnRpZXMgPSAvJTIwL2c7XG5cbnZhciBGb3JtYXQgPSB7XG4gICAgUkZDMTczODogJ1JGQzE3MzgnLFxuICAgIFJGQzM5ODY6ICdSRkMzOTg2J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgJ2RlZmF1bHQnOiBGb3JtYXQuUkZDMzk4NixcbiAgICBmb3JtYXR0ZXJzOiB7XG4gICAgICAgIFJGQzE3Mzg6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2UuY2FsbCh2YWx1ZSwgcGVyY2VudFR3ZW50aWVzLCAnKycpO1xuICAgICAgICB9LFxuICAgICAgICBSRkMzOTg2OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBSRkMxNzM4OiBGb3JtYXQuUkZDMTczOCxcbiAgICBSRkMzOTg2OiBGb3JtYXQuUkZDMzk4NlxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBoZXhUYWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICBhcnJheS5wdXNoKCclJyArICgoaSA8IDE2ID8gJzAnIDogJycpICsgaS50b1N0cmluZygxNikpLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn0oKSk7XG5cbnZhciBjb21wYWN0UXVldWUgPSBmdW5jdGlvbiBjb21wYWN0UXVldWUocXVldWUpIHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgaXRlbSA9IHF1ZXVlLnBvcCgpO1xuICAgICAgICB2YXIgb2JqID0gaXRlbS5vYmpbaXRlbS5wcm9wXTtcblxuICAgICAgICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICB2YXIgY29tcGFjdGVkID0gW107XG5cbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpbal0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBhY3RlZC5wdXNoKG9ialtqXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtLm9ialtpdGVtLnByb3BdID0gY29tcGFjdGVkO1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIGFycmF5VG9PYmplY3QgPSBmdW5jdGlvbiBhcnJheVRvT2JqZWN0KHNvdXJjZSwgb3B0aW9ucykge1xuICAgIHZhciBvYmogPSBvcHRpb25zICYmIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc291cmNlW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgb2JqW2ldID0gc291cmNlW2ldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zKSB7XG4gICAgLyogZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOiAwICovXG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGFyZ2V0LnB1c2goc291cmNlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICgob3B0aW9ucyAmJiAob3B0aW9ucy5wbGFpbk9iamVjdHMgfHwgb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpKSB8fCAhaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgc291cmNlKSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFtzb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbdGFyZ2V0LCBzb3VyY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gW3RhcmdldF0uY29uY2F0KHNvdXJjZSk7XG4gICAgfVxuXG4gICAgdmFyIG1lcmdlVGFyZ2V0ID0gdGFyZ2V0O1xuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBtZXJnZVRhcmdldCA9IGFycmF5VG9PYmplY3QodGFyZ2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmIGlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaSkge1xuICAgICAgICAgICAgaWYgKGhhcy5jYWxsKHRhcmdldCwgaSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0SXRlbSA9IHRhcmdldFtpXTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0SXRlbSAmJiB0eXBlb2YgdGFyZ2V0SXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gbWVyZ2UodGFyZ2V0SXRlbSwgaXRlbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICAgIGlmIChoYXMuY2FsbChhY2MsIGtleSkpIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gbWVyZ2UoYWNjW2tleV0sIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBtZXJnZVRhcmdldCk7XG59O1xuXG52YXIgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduU2luZ2xlU291cmNlKHRhcmdldCwgc291cmNlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICBhY2Nba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHRhcmdldCk7XG59O1xuXG52YXIgZGVjb2RlID0gZnVuY3Rpb24gKHN0ciwgZGVjb2RlciwgY2hhcnNldCkge1xuICAgIHZhciBzdHJXaXRob3V0UGx1cyA9IHN0ci5yZXBsYWNlKC9cXCsvZywgJyAnKTtcbiAgICBpZiAoY2hhcnNldCA9PT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIC8vIHVuZXNjYXBlIG5ldmVyIHRocm93cywgbm8gdHJ5Li4uY2F0Y2ggbmVlZGVkOlxuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXMucmVwbGFjZSgvJVswLTlhLWZdezJ9L2dpLCB1bmVzY2FwZSk7XG4gICAgfVxuICAgIC8vIHV0Zi04XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzdHJXaXRob3V0UGx1cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gc3RyV2l0aG91dFBsdXM7XG4gICAgfVxufTtcblxudmFyIGxpbWl0ID0gMTAyNDtcblxuLyogZXNsaW50IG9wZXJhdG9yLWxpbmVicmVhazogWzIsIFwiYmVmb3JlXCJdICovXG5cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiBlbmNvZGUoc3RyLCBkZWZhdWx0RW5jb2RlciwgY2hhcnNldCwga2luZCwgZm9ybWF0KSB7XG4gICAgLy8gVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJpYW4gV2hpdGUgKG1zY2RleCkgZm9yIHRoZSBpby5qcyBjb3JlIHF1ZXJ5c3RyaW5nIGxpYnJhcnkuXG4gICAgLy8gSXQgaGFzIGJlZW4gYWRhcHRlZCBoZXJlIGZvciBzdHJpY3RlciBhZGhlcmVuY2UgdG8gUkZDIDM5ODZcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmcgPSBzdHI7XG4gICAgaWYgKHR5cGVvZiBzdHIgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgIHN0cmluZyA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzdHIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RyaW5nID0gU3RyaW5nKHN0cik7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICByZXR1cm4gZXNjYXBlKHN0cmluZykucmVwbGFjZSgvJXVbMC05YS1mXXs0fS9naSwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICAgICAgICByZXR1cm4gJyUyNiUyMycgKyBwYXJzZUludCgkMC5zbGljZSgyKSwgMTYpICsgJyUzQic7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN0cmluZy5sZW5ndGg7IGogKz0gbGltaXQpIHtcbiAgICAgICAgdmFyIHNlZ21lbnQgPSBzdHJpbmcubGVuZ3RoID49IGxpbWl0ID8gc3RyaW5nLnNsaWNlKGosIGogKyBsaW1pdCkgOiBzdHJpbmc7XG4gICAgICAgIHZhciBhcnIgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHZhciBjID0gc2VnbWVudC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGMgPT09IDB4MkQgLy8gLVxuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4NUYgLy8gX1xuICAgICAgICAgICAgICAgIHx8IGMgPT09IDB4N0UgLy8gflxuICAgICAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgICAgICB8fCAoYyA+PSAweDQxICYmIGMgPD0gMHg1QSkgLy8gYS16XG4gICAgICAgICAgICAgICAgfHwgKGMgPj0gMHg2MSAmJiBjIDw9IDB4N0EpIC8vIEEtWlxuICAgICAgICAgICAgICAgIHx8IChmb3JtYXQgPT09IGZvcm1hdHMuUkZDMTczOCAmJiAoYyA9PT0gMHgyOCB8fCBjID09PSAweDI5KSkgLy8gKCApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBzZWdtZW50LmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbY107XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYyA8IDB4RDgwMCB8fCBjID49IDB4RTAwMCkge1xuICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleFRhYmxlWzB4RTAgfCAoYyA+PiAxMildXG4gICAgICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiA2KSAmIDB4M0YpXVxuICAgICAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICAgICAgYyA9IDB4MTAwMDAgKyAoKChjICYgMHgzRkYpIDw8IDEwKSB8IChzZWdtZW50LmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuXG4gICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEYwIHwgKGMgPj4gMTgpXVxuICAgICAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8ICgoYyA+PiAxMikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dCArPSBhcnIuam9pbignJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbn07XG5cbnZhciBjb21wYWN0ID0gZnVuY3Rpb24gY29tcGFjdCh2YWx1ZSkge1xuICAgIHZhciBxdWV1ZSA9IFt7IG9iajogeyBvOiB2YWx1ZSB9LCBwcm9wOiAnbycgfV07XG4gICAgdmFyIHJlZnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZVtpXTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgdmFyIHZhbCA9IG9ialtrZXldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiByZWZzLmluZGV4T2YodmFsKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHsgb2JqOiBvYmosIHByb3A6IGtleSB9KTtcbiAgICAgICAgICAgICAgICByZWZzLnB1c2godmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBhY3RRdWV1ZShxdWV1ZSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgaXNSZWdFeHAgPSBmdW5jdGlvbiBpc1JlZ0V4cChvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufTtcblxudmFyIGlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhIShvYmouY29uc3RydWN0b3IgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopKTtcbn07XG5cbnZhciBjb21iaW5lID0gZnVuY3Rpb24gY29tYmluZShhLCBiKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChhLCBiKTtcbn07XG5cbnZhciBtYXliZU1hcCA9IGZ1bmN0aW9uIG1heWJlTWFwKHZhbCwgZm4pIHtcbiAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhciBtYXBwZWQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIG1hcHBlZC5wdXNoKGZuKHZhbFtpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIHJldHVybiBmbih2YWwpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgYXJyYXlUb09iamVjdDogYXJyYXlUb09iamVjdCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBjb21iaW5lOiBjb21iaW5lLFxuICAgIGNvbXBhY3Q6IGNvbXBhY3QsXG4gICAgZGVjb2RlOiBkZWNvZGUsXG4gICAgZW5jb2RlOiBlbmNvZGUsXG4gICAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBtYXliZU1hcDogbWF5YmVNYXAsXG4gICAgbWVyZ2U6IG1lcmdlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0U2lkZUNoYW5uZWwgPSByZXF1aXJlKCdzaWRlLWNoYW5uZWwnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGFycmF5UHJlZml4R2VuZXJhdG9ycyA9IHtcbiAgICBicmFja2V0czogZnVuY3Rpb24gYnJhY2tldHMocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXggKyAnW10nO1xuICAgIH0sXG4gICAgY29tbWE6ICdjb21tYScsXG4gICAgaW5kaWNlczogZnVuY3Rpb24gaW5kaWNlcyhwcmVmaXgsIGtleSkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1snICsga2V5ICsgJ10nO1xuICAgIH0sXG4gICAgcmVwZWF0OiBmdW5jdGlvbiByZXBlYXQocHJlZml4KSB7XG4gICAgICAgIHJldHVybiBwcmVmaXg7XG4gICAgfVxufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbnZhciBwdXNoVG9BcnJheSA9IGZ1bmN0aW9uIChhcnIsIHZhbHVlT3JBcnJheSkge1xuICAgIHB1c2guYXBwbHkoYXJyLCBpc0FycmF5KHZhbHVlT3JBcnJheSkgPyB2YWx1ZU9yQXJyYXkgOiBbdmFsdWVPckFycmF5XSk7XG59O1xuXG52YXIgdG9JU08gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGRlZmF1bHRGb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG52YXIgZGVmYXVsdHMgPSB7XG4gICAgYWRkUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gICAgYXJyYXlGb3JtYXQ6ICdpbmRpY2VzJyxcbiAgICBjaGFyc2V0OiAndXRmLTgnLFxuICAgIGNoYXJzZXRTZW50aW5lbDogZmFsc2UsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZW5jb2RlOiB0cnVlLFxuICAgIGVuY29kZURvdEluS2V5czogZmFsc2UsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxcbiAgICAvLyBkZXByZWNhdGVkXG4gICAgaW5kaWNlczogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7XG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaXNOb25OdWxsaXNoUHJpbWl0aXZlID0gZnVuY3Rpb24gaXNOb25OdWxsaXNoUHJpbWl0aXZlKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnc3ltYm9sJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2JpZ2ludCc7XG59O1xuXG52YXIgc2VudGluZWwgPSB7fTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgY29tbWFSb3VuZFRyaXAsXG4gICAgYWxsb3dFbXB0eUFycmF5cyxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgc2tpcE51bGxzLFxuICAgIGVuY29kZURvdEluS2V5cyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdCxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0LFxuICAgIHNpZGVDaGFubmVsXG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuXG4gICAgdmFyIHRtcFNjID0gc2lkZUNoYW5uZWw7XG4gICAgdmFyIHN0ZXAgPSAwO1xuICAgIHZhciBmaW5kRmxhZyA9IGZhbHNlO1xuICAgIHdoaWxlICgodG1wU2MgPSB0bXBTYy5nZXQoc2VudGluZWwpKSAhPT0gdm9pZCB1bmRlZmluZWQgJiYgIWZpbmRGbGFnKSB7XG4gICAgICAgIC8vIFdoZXJlIG9iamVjdCBsYXN0IGFwcGVhcmVkIGluIHRoZSByZWYgdHJlZVxuICAgICAgICB2YXIgcG9zID0gdG1wU2MuZ2V0KG9iamVjdCk7XG4gICAgICAgIHN0ZXAgKz0gMTtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAocG9zID09PSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0N5Y2xpYyBvYmplY3QgdmFsdWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluZEZsYWcgPSB0cnVlOyAvLyBCcmVhayB3aGlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdG1wU2MuZ2V0KHNlbnRpbmVsKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHN0ZXAgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAoaXNOb25OdWxsaXNoUHJpbWl0aXZlKG9iaikgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBqb2luIGVsZW1lbnRzIGluXG4gICAgICAgIGlmIChlbmNvZGVWYWx1ZXNPbmx5ICYmIGVuY29kZXIpIHtcbiAgICAgICAgICAgIG9iaiA9IHV0aWxzLm1heWJlTWFwKG9iaiwgZW5jb2Rlcik7XG4gICAgICAgIH1cbiAgICAgICAgb2JqS2V5cyA9IFt7IHZhbHVlOiBvYmoubGVuZ3RoID4gMCA/IG9iai5qb2luKCcsJykgfHwgbnVsbCA6IHZvaWQgdW5kZWZpbmVkIH1dO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBvYmpLZXlzID0gc29ydCA/IGtleXMuc29ydChzb3J0KSA6IGtleXM7XG4gICAgfVxuXG4gICAgdmFyIGVuY29kZWRQcmVmaXggPSBlbmNvZGVEb3RJbktleXMgPyBwcmVmaXgucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IHByZWZpeDtcblxuICAgIHZhciBhZGp1c3RlZFByZWZpeCA9IGNvbW1hUm91bmRUcmlwICYmIGlzQXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAxID8gZW5jb2RlZFByZWZpeCArICdbXScgOiBlbmNvZGVkUHJlZml4O1xuXG4gICAgaWYgKGFsbG93RW1wdHlBcnJheXMgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGFkanVzdGVkUHJlZml4ICsgJ1tdJztcbiAgICB9XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iaktleXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbal07XG4gICAgICAgIHZhciB2YWx1ZSA9IHR5cGVvZiBrZXkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBrZXkudmFsdWUgIT09ICd1bmRlZmluZWQnID8ga2V5LnZhbHVlIDogb2JqW2tleV07XG5cbiAgICAgICAgaWYgKHNraXBOdWxscyAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZW5jb2RlZEtleSA9IGFsbG93RG90cyAmJiBlbmNvZGVEb3RJbktleXMgPyBrZXkucmVwbGFjZSgvXFwuL2csICclMkUnKSA6IGtleTtcbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGlzQXJyYXkob2JqKVxuICAgICAgICAgICAgPyB0eXBlb2YgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2Z1bmN0aW9uJyA/IGdlbmVyYXRlQXJyYXlQcmVmaXgoYWRqdXN0ZWRQcmVmaXgsIGVuY29kZWRLZXkpIDogYWRqdXN0ZWRQcmVmaXhcbiAgICAgICAgICAgIDogYWRqdXN0ZWRQcmVmaXggKyAoYWxsb3dEb3RzID8gJy4nICsgZW5jb2RlZEtleSA6ICdbJyArIGVuY29kZWRLZXkgKyAnXScpO1xuXG4gICAgICAgIHNpZGVDaGFubmVsLnNldChvYmplY3QsIHN0ZXApO1xuICAgICAgICB2YXIgdmFsdWVTaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgICAgIHZhbHVlU2lkZUNoYW5uZWwuc2V0KHNlbnRpbmVsLCBzaWRlQ2hhbm5lbCk7XG4gICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBrZXlQcmVmaXgsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBhbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgc2tpcE51bGxzLFxuICAgICAgICAgICAgZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBlbmNvZGVWYWx1ZXNPbmx5ICYmIGlzQXJyYXkob2JqKSA/IG51bGwgOiBlbmNvZGVyLFxuICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgc29ydCxcbiAgICAgICAgICAgIGFsbG93RG90cyxcbiAgICAgICAgICAgIHNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICBmb3JtYXR0ZXIsXG4gICAgICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICAgICAgY2hhcnNldCxcbiAgICAgICAgICAgIHZhbHVlU2lkZUNoYW5uZWxcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbn07XG5cbnZhciBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BhbGxvd0VtcHR5QXJyYXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVEb3RJbktleXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgZW5jb2RlRG90SW5LZXlzYCBvcHRpb24gY2FuIG9ubHkgYmUgYHRydWVgIG9yIGBmYWxzZWAsIHdoZW4gcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5lbmNvZGVyICE9PSBudWxsICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmVuY29kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRW5jb2RlciBoYXMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgY2hhcnNldCA9IG9wdHMuY2hhcnNldCB8fCBkZWZhdWx0cy5jaGFyc2V0O1xuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5mb3JtYXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICghaGFzLmNhbGwoZm9ybWF0cy5mb3JtYXR0ZXJzLCBvcHRzLmZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZm9ybWF0IG9wdGlvbiBwcm92aWRlZC4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtYXQgPSBvcHRzLmZvcm1hdDtcbiAgICB9XG4gICAgdmFyIGZvcm1hdHRlciA9IGZvcm1hdHMuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXG4gICAgdmFyIGZpbHRlciA9IGRlZmF1bHRzLmZpbHRlcjtcbiAgICBpZiAodHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nIHx8IGlzQXJyYXkob3B0cy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdHMuZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0cy5hcnJheUZvcm1hdCBpbiBhcnJheVByZWZpeEdlbmVyYXRvcnMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmFycmF5Rm9ybWF0O1xuICAgIH0gZWxzZSBpZiAoJ2luZGljZXMnIGluIG9wdHMpIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBvcHRzLmluZGljZXMgPyAnaW5kaWNlcycgOiAncmVwZWF0JztcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheUZvcm1hdCA9IGRlZmF1bHRzLmFycmF5Rm9ybWF0O1xuICAgIH1cblxuICAgIGlmICgnY29tbWFSb3VuZFRyaXAnIGluIG9wdHMgJiYgdHlwZW9mIG9wdHMuY29tbWFSb3VuZFRyaXAgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgY29tbWFSb3VuZFRyaXBgIG11c3QgYmUgYSBib29sZWFuLCBvciBhYnNlbnQnKTtcbiAgICB9XG5cbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IG9wdHMuZW5jb2RlRG90SW5LZXlzID09PSB0cnVlID8gdHJ1ZSA6IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhZGRRdWVyeVByZWZpeDogdHlwZW9mIG9wdHMuYWRkUXVlcnlQcmVmaXggPT09ICdib29sZWFuJyA/IG9wdHMuYWRkUXVlcnlQcmVmaXggOiBkZWZhdWx0cy5hZGRRdWVyeVByZWZpeCxcbiAgICAgICAgYWxsb3dEb3RzOiBhbGxvd0RvdHMsXG4gICAgICAgIGFsbG93RW1wdHlBcnJheXM6IHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgPT09ICdib29sZWFuJyA/ICEhb3B0cy5hbGxvd0VtcHR5QXJyYXlzIDogZGVmYXVsdHMuYWxsb3dFbXB0eUFycmF5cyxcbiAgICAgICAgYXJyYXlGb3JtYXQ6IGFycmF5Rm9ybWF0LFxuICAgICAgICBjaGFyc2V0OiBjaGFyc2V0LFxuICAgICAgICBjaGFyc2V0U2VudGluZWw6IHR5cGVvZiBvcHRzLmNoYXJzZXRTZW50aW5lbCA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5jaGFyc2V0U2VudGluZWwgOiBkZWZhdWx0cy5jaGFyc2V0U2VudGluZWwsXG4gICAgICAgIGNvbW1hUm91bmRUcmlwOiBvcHRzLmNvbW1hUm91bmRUcmlwLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kZWxpbWl0ZXIgOiBvcHRzLmRlbGltaXRlcixcbiAgICAgICAgZW5jb2RlOiB0eXBlb2Ygb3B0cy5lbmNvZGUgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlIDogZGVmYXVsdHMuZW5jb2RlLFxuICAgICAgICBlbmNvZGVEb3RJbktleXM6IHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVEb3RJbktleXMgOiBkZWZhdWx0cy5lbmNvZGVEb3RJbktleXMsXG4gICAgICAgIGVuY29kZXI6IHR5cGVvZiBvcHRzLmVuY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmVuY29kZXIgOiBkZWZhdWx0cy5lbmNvZGVyLFxuICAgICAgICBlbmNvZGVWYWx1ZXNPbmx5OiB0eXBlb2Ygb3B0cy5lbmNvZGVWYWx1ZXNPbmx5ID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZVZhbHVlc09ubHkgOiBkZWZhdWx0cy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICBzZXJpYWxpemVEYXRlOiB0eXBlb2Ygb3B0cy5zZXJpYWxpemVEYXRlID09PSAnZnVuY3Rpb24nID8gb3B0cy5zZXJpYWxpemVEYXRlIDogZGVmYXVsdHMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgc2tpcE51bGxzOiB0eXBlb2Ygb3B0cy5za2lwTnVsbHMgPT09ICdib29sZWFuJyA/IG9wdHMuc2tpcE51bGxzIDogZGVmYXVsdHMuc2tpcE51bGxzLFxuICAgICAgICBzb3J0OiB0eXBlb2Ygb3B0cy5zb3J0ID09PSAnZnVuY3Rpb24nID8gb3B0cy5zb3J0IDogbnVsbCxcbiAgICAgICAgc3RyaWN0TnVsbEhhbmRsaW5nOiB0eXBlb2Ygb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgPT09ICdib29sZWFuJyA/IG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nIDogZGVmYXVsdHMuc3RyaWN0TnVsbEhhbmRsaW5nXG4gICAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgb3B0cykge1xuICAgIHZhciBvYmogPSBvYmplY3Q7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpO1xuXG4gICAgdmFyIG9iaktleXM7XG4gICAgdmFyIGZpbHRlcjtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaiA9IGZpbHRlcignJywgb2JqKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9ucy5maWx0ZXIpKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH1cblxuICAgIHZhciBrZXlzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgb2JqID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICB2YXIgZ2VuZXJhdGVBcnJheVByZWZpeCA9IGFycmF5UHJlZml4R2VuZXJhdG9yc1tvcHRpb25zLmFycmF5Rm9ybWF0XTtcbiAgICB2YXIgY29tbWFSb3VuZFRyaXAgPSBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIG9wdGlvbnMuY29tbWFSb3VuZFRyaXA7XG5cbiAgICBpZiAoIW9iaktleXMpIHtcbiAgICAgICAgb2JqS2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc29ydCkge1xuICAgICAgICBvYmpLZXlzLnNvcnQob3B0aW9ucy5zb3J0KTtcbiAgICB9XG5cbiAgICB2YXIgc2lkZUNoYW5uZWwgPSBnZXRTaWRlQ2hhbm5lbCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqS2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqS2V5c1tpXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5za2lwTnVsbHMgJiYgb2JqW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHB1c2hUb0FycmF5KGtleXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIG9ialtrZXldLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIGNvbW1hUm91bmRUcmlwLFxuICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICAgICAgb3B0aW9ucy5zdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBvcHRpb25zLnNraXBOdWxscyxcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGUgPyBvcHRpb25zLmVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RG90cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgICAgICBzaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpLCB0aGUgXCJudW1lcmljIGVudGl0eVwiIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hlY2ttYXJrXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0ImJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dFbXB0eUFycmF5czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGNvbW1hOiBmYWxzZSxcbiAgICBkZWNvZGVEb3RJbktleXM6IGZhbHNlLFxuICAgIGRlY29kZXI6IHV0aWxzLmRlY29kZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBkZXB0aDogNSxcbiAgICBkdXBsaWNhdGVzOiAnY29tYmluZScsXG4gICAgaWdub3JlUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogZmFsc2UsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGFyc2VBcnJheXM6IHRydWUsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3REZXB0aDogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIGludGVycHJldE51bWVyaWNFbnRpdGllcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYjKFxcZCspOy9nLCBmdW5jdGlvbiAoJDAsIG51bWJlclN0cikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChudW1iZXJTdHIsIDEwKSk7XG4gICAgfSk7XG59O1xuXG52YXIgcGFyc2VBcnJheVZhbHVlID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vLyBUaGlzIGlzIHdoYXQgYnJvd3NlcnMgd2lsbCBzdWJtaXQgd2hlbiB0aGUg4pyTIGNoYXJhY3RlciBvY2N1cnMgaW4gYW5cbi8vIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBib2R5IGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIHBhZ2UgY29udGFpbmluZ1xuLy8gdGhlIGZvcm0gaXMgaXNvLTg4NTktMSwgb3Igd2hlbiB0aGUgc3VibWl0dGVkIGZvcm0gaGFzIGFuIGFjY2VwdC1jaGFyc2V0XG4vLyBhdHRyaWJ1dGUgb2YgaXNvLTg4NTktMS4gUHJlc3VtYWJseSBhbHNvIHdpdGggb3RoZXIgY2hhcnNldHMgdGhhdCBkbyBub3QgY29udGFpblxuLy8gdGhlIOKckyBjaGFyYWN0ZXIsIHN1Y2ggYXMgdXMtYXNjaWkuXG52YXIgaXNvU2VudGluZWwgPSAndXRmOD0lMjYlMjMxMDAwMyUzQic7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKVxuXG4vLyBUaGVzZSBhcmUgdGhlIHBlcmNlbnQtZW5jb2RlZCB1dGYtOCBvY3RldHMgcmVwcmVzZW50aW5nIGEgY2hlY2ttYXJrLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlcXVlc3QgYWN0dWFsbHkgaXMgdXRmLTggZW5jb2RlZC5cbnZhciBjaGFyc2V0U2VudGluZWwgPSAndXRmOD0lRTIlOUMlOTMnOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG5cbnZhciBwYXJzZVZhbHVlcyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMoc3RyLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHsgX19wcm90b19fOiBudWxsIH07XG5cbiAgICB2YXIgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHI7XG4gICAgY2xlYW5TdHIgPSBjbGVhblN0ci5yZXBsYWNlKC8lNUIvZ2ksICdbJykucmVwbGFjZSgvJTVEL2dpLCAnXScpO1xuICAgIHZhciBsaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdDtcbiAgICB2YXIgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpO1xuICAgIHZhciBza2lwSW5kZXggPSAtMTsgLy8gS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgdXRmOCBzZW50aW5lbCB3YXMgZm91bmRcbiAgICB2YXIgaTtcblxuICAgIHZhciBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0O1xuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKCd1dGY4PScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzW2ldID09PSBjaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICd1dGYtOCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1tpXSA9PT0gaXNvU2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICdpc28tODg1OS0xJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpID0gcGFydHMubGVuZ3RoOyAvLyBUaGUgZXNsaW50IHNldHRpbmdzIGRvIG5vdCBhbGxvdyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA9PT0gc2tpcEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICAgIHZhciBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpO1xuICAgICAgICB2YXIgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IHV0aWxzLm1heWJlTWFwKFxuICAgICAgICAgICAgICAgIHBhcnNlQXJyYXlWYWx1ZShwYXJ0LnNsaWNlKHBvcyArIDEpLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZW5jb2RlZFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWNvZGVyKGVuY29kZWRWYWwsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsICYmIG9wdGlvbnMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzICYmIGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgdmFsID0gaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzKHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydC5pbmRleE9mKCdbXT0nKSA+IC0xKSB7XG4gICAgICAgICAgICB2YWwgPSBpc0FycmF5KHZhbCkgPyBbdmFsXSA6IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBleGlzdGluZyA9IGhhcy5jYWxsKG9iaiwga2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICYmIG9wdGlvbnMuZHVwbGljYXRlcyA9PT0gJ2NvbWJpbmUnKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHV0aWxzLmNvbWJpbmUob2JqW2tleV0sIHZhbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV4aXN0aW5nIHx8IG9wdGlvbnMuZHVwbGljYXRlcyA9PT0gJ2xhc3QnKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VPYmplY3QgPSBmdW5jdGlvbiAoY2hhaW4sIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKSB7XG4gICAgdmFyIGxlYWYgPSB2YWx1ZXNQYXJzZWQgPyB2YWwgOiBwYXJzZUFycmF5VmFsdWUodmFsLCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMuYWxsb3dFbXB0eUFycmF5cyAmJiAobGVhZiA9PT0gJycgfHwgKG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nICYmIGxlYWYgPT09IG51bGwpKVxuICAgICAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgICAgICA6IFtdLmNvbmNhdChsZWFmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgICAgICAgdmFyIGNsZWFuUm9vdCA9IHJvb3QuY2hhckF0KDApID09PSAnWycgJiYgcm9vdC5jaGFyQXQocm9vdC5sZW5ndGggLSAxKSA9PT0gJ10nID8gcm9vdC5zbGljZSgxLCAtMSkgOiByb290O1xuICAgICAgICAgICAgdmFyIGRlY29kZWRSb290ID0gb3B0aW9ucy5kZWNvZGVEb3RJbktleXMgPyBjbGVhblJvb3QucmVwbGFjZSgvJTJFL2csICcuJykgOiBjbGVhblJvb3Q7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludChkZWNvZGVkUm9vdCwgMTApO1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnBhcnNlQXJyYXlzICYmIGRlY29kZWRSb290ID09PSAnJykge1xuICAgICAgICAgICAgICAgIG9iaiA9IHsgMDogbGVhZiB9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICAgICAgJiYgcm9vdCAhPT0gZGVjb2RlZFJvb3RcbiAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaW5kZXgpID09PSBkZWNvZGVkUm9vdFxuICAgICAgICAgICAgICAgICYmIGluZGV4ID49IDBcbiAgICAgICAgICAgICAgICAmJiAob3B0aW9ucy5wYXJzZUFycmF5cyAmJiBpbmRleCA8PSBvcHRpb25zLmFycmF5TGltaXQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvYmogPSBbXTtcbiAgICAgICAgICAgICAgICBvYmpbaW5kZXhdID0gbGVhZjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlZFJvb3QgIT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgICAgICAgICAgb2JqW2RlY29kZWRSb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBvcHRpb25zLmRlcHRoID4gMCAmJiBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAob3B0aW9ucy5kZXB0aCA+IDAgJiYgKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGNoZWNrIHN0cmljdERlcHRoIG9wdGlvbiBmb3IgdGhyb3csIGVsc2UganVzdCBhZGQgd2hhdGV2ZXIgaXMgbGVmdFxuXG4gICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0RGVwdGggPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnB1dCBkZXB0aCBleGNlZWRlZCBkZXB0aCBvcHRpb24gb2YgJyArIG9wdGlvbnMuZGVwdGggKyAnIGFuZCBzdHJpY3REZXB0aCBpcyB0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKCdbJyArIGtleS5zbGljZShzZWdtZW50LmluZGV4KSArICddJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0KGtleXMsIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgYWxsb3dFbXB0eUFycmF5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmRlY29kZURvdEluS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGRlY29kZURvdEluS2V5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgY2hhcnNldCA9IHR5cGVvZiBvcHRzLmNoYXJzZXQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuY2hhcnNldCA6IG9wdHMuY2hhcnNldDtcblxuICAgIHZhciBkdXBsaWNhdGVzID0gdHlwZW9mIG9wdHMuZHVwbGljYXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kdXBsaWNhdGVzIDogb3B0cy5kdXBsaWNhdGVzO1xuXG4gICAgaWYgKGR1cGxpY2F0ZXMgIT09ICdjb21iaW5lJyAmJiBkdXBsaWNhdGVzICE9PSAnZmlyc3QnICYmIGR1cGxpY2F0ZXMgIT09ICdsYXN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZHVwbGljYXRlcyBvcHRpb24gbXVzdCBiZSBlaXRoZXIgY29tYmluZSwgZmlyc3QsIG9yIGxhc3QnKTtcbiAgICB9XG5cbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IG9wdHMuZGVjb2RlRG90SW5LZXlzID09PSB0cnVlID8gdHJ1ZSA6IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd0RvdHM6IGFsbG93RG90cyxcbiAgICAgICAgYWxsb3dFbXB0eUFycmF5czogdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyA9PT0gJ2Jvb2xlYW4nID8gISFvcHRzLmFsbG93RW1wdHlBcnJheXMgOiBkZWZhdWx0cy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICBhbGxvd1Byb3RvdHlwZXM6IHR5cGVvZiBvcHRzLmFsbG93UHJvdG90eXBlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1Byb3RvdHlwZXMgOiBkZWZhdWx0cy5hbGxvd1Byb3RvdHlwZXMsXG4gICAgICAgIGFsbG93U3BhcnNlOiB0eXBlb2Ygb3B0cy5hbGxvd1NwYXJzZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1NwYXJzZSA6IGRlZmF1bHRzLmFsbG93U3BhcnNlLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZURvdEluS2V5czogdHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzID09PSAnYm9vbGVhbicgPyBvcHRzLmRlY29kZURvdEluS2V5cyA6IGRlZmF1bHRzLmRlY29kZURvdEluS2V5cyxcbiAgICAgICAgZGVjb2RlcjogdHlwZW9mIG9wdHMuZGVjb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZGVjb2RlciA6IGRlZmF1bHRzLmRlY29kZXIsXG4gICAgICAgIGRlbGltaXRlcjogdHlwZW9mIG9wdHMuZGVsaW1pdGVyID09PSAnc3RyaW5nJyB8fCB1dGlscy5pc1JlZ0V4cChvcHRzLmRlbGltaXRlcikgPyBvcHRzLmRlbGltaXRlciA6IGRlZmF1bHRzLmRlbGltaXRlcixcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uLCBuby1leHRyYS1wYXJlbnNcbiAgICAgICAgZGVwdGg6ICh0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgfHwgb3B0cy5kZXB0aCA9PT0gZmFsc2UpID8gK29wdHMuZGVwdGggOiBkZWZhdWx0cy5kZXB0aCxcbiAgICAgICAgZHVwbGljYXRlczogZHVwbGljYXRlcyxcbiAgICAgICAgaWdub3JlUXVlcnlQcmVmaXg6IG9wdHMuaWdub3JlUXVlcnlQcmVmaXggPT09IHRydWUsXG4gICAgICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogdHlwZW9mIG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID09PSAnYm9vbGVhbicgPyBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA6IGRlZmF1bHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyxcbiAgICAgICAgcGFyYW1ldGVyTGltaXQ6IHR5cGVvZiBvcHRzLnBhcmFtZXRlckxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMucGFyYW1ldGVyTGltaXQgOiBkZWZhdWx0cy5wYXJhbWV0ZXJMaW1pdCxcbiAgICAgICAgcGFyc2VBcnJheXM6IG9wdHMucGFyc2VBcnJheXMgIT09IGZhbHNlLFxuICAgICAgICBwbGFpbk9iamVjdHM6IHR5cGVvZiBvcHRzLnBsYWluT2JqZWN0cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5wbGFpbk9iamVjdHMgOiBkZWZhdWx0cy5wbGFpbk9iamVjdHMsXG4gICAgICAgIHN0cmljdERlcHRoOiB0eXBlb2Ygb3B0cy5zdHJpY3REZXB0aCA9PT0gJ2Jvb2xlYW4nID8gISFvcHRzLnN0cmljdERlcHRoIDogZGVmYXVsdHMuc3RyaWN0RGVwdGgsXG4gICAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHlwZW9mIG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZ1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKTtcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMsIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFsbG93U3BhcnNlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xudmFyIHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZm9ybWF0czogZm9ybWF0cyxcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlcbn07XG4iLCJpbXBvcnQgcXMgZnJvbSBcInFzXCI7XG5pbXBvcnQge1xuICBsb2FkTG9jYWxTdG9yYWdlU3RhdGUsXG4gIHJlbW92ZUxvY2FsU3RvcmFnZVN0YXRlLFxuICByZW1vdmVTZXNzaW9uU3RvcmFnZVN0YXRlLFxuICBzYXZlTG9jYWxTdG9yYWdlU3RhdGUsXG4gIHNhdmVTZXNzaW9uU3RvcmFnZVN0YXRlLFxufSBmcm9tIFwiLi9sb2NhbC1zdG9yYWdlLXV0aWxzXCI7XG5pbXBvcnQgeyBUYWJsZUZpbHRlckl0ZW0gfSBmcm9tIFwiQGNvbXBvbmVudHMvYmFzZS10YWJsZS9iYXNlLXRhYmxlLm1vZGVsLnRzXCI7XG5pbXBvcnQgeyBTb3J0YWJsZSwgVVJMUXVlcnlLZXlzIH0gZnJvbSBcIkBtb2RlbHMvZmlsdGVyLm1vZGVsLnRzXCI7XG5cbi8vIHNlYXJjaCBvYmplY3QgaXMgYWNjZXNzaWJsZSBmcm9tIGhpc3RvcnkubG9jYXRpb24uc2VhcmNoIG9yIHRoaXMucHJvcHMubG9jYXRpb24uc2VhcmNoXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW0gPSAoc2VhcmNoOiBzdHJpbmcsIGtleTogc3RyaW5nKTogYW55ID0+IHtcbiAgY29uc3QgcGFyc2VkUGFyYW1zID0gcXMucGFyc2Uoc2VhcmNoLCB7IGlnbm9yZVF1ZXJ5UHJlZml4OiB0cnVlIH0pO1xuICByZXR1cm4gcGFyc2VkUGFyYW1zICYmIHBhcnNlZFBhcmFtc1trZXldID8gKHBhcnNlZFBhcmFtc1trZXldIGFzIHN0cmluZykgOiBcIlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFdpdGhvdXRQYXJhbXMgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdXJsLnN1YnN0cmluZygwLCB1cmwuaW5kZXhPZihcIj9cIikpIHx8IHVybDtcbmV4cG9ydCBjb25zdCBnZXRMYXN0VXJsUGFydCA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PlxuICB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbmV4cG9ydCBjb25zdCBnZXRMYXN0VXJsUGFydFdpdGhvdXRQYXJhbXMgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgZ2V0TGFzdFVybFBhcnQoZ2V0VXJsV2l0aG91dFBhcmFtcyh1cmwpKTtcbmV4cG9ydCBjb25zdCBnZXRMYXN0VXJsUGFydFdpdGhvdXRQYXJhbXNEZWNvZGVkID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+XG4gIGRlY29kZVVSSShnZXRMYXN0VXJsUGFydChnZXRVcmxXaXRob3V0UGFyYW1zKHVybCkpKTtcblxuZXhwb3J0IGNvbnN0IEZJTFRFUlNfU1RBVEVfS0VZID0gXCJmaWx0ZXJcIjtcbmV4cG9ydCBjb25zdCBDT09LSUVTX1NUQVRFX0tFWSA9IFwiY29va2llc1wiO1xuZXhwb3J0IGNvbnN0IFJFRElSRUNUX1NUQVRFX0tFWSA9IFwicmVkaXJlY3RmaXRlcnNcIjtcbmV4cG9ydCBjb25zdCBSRURJUkVDVF9QQVRITkFNRV9TVEFURV9LRVkgPSBcInJlZGlyZWN0cGF0aG5hbWVcIjtcblxuZXhwb3J0IGNvbnN0IGdldFF1aWNrRmlsdGVyU3RhdGVGcm9tVXJsID0gKGNvbnRleHQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBzZWFyY2ggPSBsb2FkTG9jYWxTdG9yYWdlU3RhdGUoXG4gICAgYCR7UkVESVJFQ1RfU1RBVEVfS0VZfV8ke2NvbnRleHR9YCxcbiAgKT8uc2VhcmNoO1xuICBjb25zdCB1cmxTZWFyY2hTdGF0ZUFycmF5ID0gc2VhcmNoPy5zdWJzdHJpbmcoMSk/LnNwbGl0KFwiO1wiKSB8fCBbXTtcbiAgcmV0dXJuIHVybFNlYXJjaFN0YXRlQXJyYXlcbiAgICAuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnN0YXJ0c1dpdGgoVVJMUXVlcnlLZXlzLlFVSUNLKSlcbiAgICA/LnNwbGl0KFwiOlwiKVsxXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtU3RhdGVGcm9tVXJsID0gKGNvbnRleHQ6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2VhcmNoID0gbG9hZExvY2FsU3RvcmFnZVN0YXRlKFxuICAgIGAke1JFRElSRUNUX1NUQVRFX0tFWX1fJHtjb250ZXh0fWAsXG4gICk/LnNlYXJjaDtcbiAgY29uc3QgdXJsU2VhcmNoU3RhdGVBcnJheSA9IHNlYXJjaD8uc3BsaXQoXCImXCIpIHx8IFtdO1xuXG4gIGNvbnN0IHFwID0gdXJsU2VhcmNoU3RhdGVBcnJheS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0uc3RhcnRzV2l0aChrZXkpKTtcbiAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxcCk7XG4gIHJldHVybiB1cmxQYXJhbXMuZ2V0KGtleSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U29ydGluZ1N0YXRlRnJvbVVybCA9IChjb250ZXh0OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgc2VhcmNoID0gbG9hZExvY2FsU3RvcmFnZVN0YXRlKFxuICAgIGAke1JFRElSRUNUX1NUQVRFX0tFWX1fJHtjb250ZXh0fWAsXG4gICk/LnNlYXJjaDtcbiAgY29uc3QgdXJsU2VhcmNoU3RhdGVBcnJheSA9IHNlYXJjaD8uc3Vic3RyaW5nKDEpLnNwbGl0KFwiO1wiKSB8fCBbXTtcbiAgcmV0dXJuIHVybFNlYXJjaFN0YXRlQXJyYXlcbiAgICAuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnN0YXJ0c1dpdGgoVVJMUXVlcnlLZXlzLlNPUlRJTkcpKVxuICAgID8uc3BsaXQoXCI6XCIpWzFdO1xufTtcbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJzU3RhdGVGcm9tVXJsID0gKHNlYXJjaDogc3RyaW5nKSA9PiB7XG4gIGlmICghc2VhcmNoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgdXJsU2VhcmNoU3RhdGVBcnJheSA9IHNlYXJjaD8uc3Vic3RyaW5nKDEpLnNwbGl0KFwiO1wiKTtcbiAgY29uc3QgdXJsRmlsdGVycyA9IHVybFNlYXJjaFN0YXRlQXJyYXlcbiAgICAuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnN0YXJ0c1dpdGgoVVJMUXVlcnlLZXlzLkZJTFRFUlMpKVxuICAgID8uc3BsaXQoXCI6XCIpWzFdO1xuICBjb25zdCBmaWx0ZXJzOiBUYWJsZUZpbHRlckl0ZW1bXSA9XG4gICAgdXJsRmlsdGVyc1xuICAgICAgPy5zcGxpdChcIiZcIilcbiAgICAgIC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gISFpdGVtKVxuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBpdGVtLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgY29uc3QgdGFibGVGaWx0ZXI6IFRhYmxlRmlsdGVySXRlbSA9IHtcbiAgICAgICAgICBpZDogZW50cmllc1swXSxcbiAgICAgICAgICB2YWx1ZTogZW50cmllc1sxXSxcbiAgICAgICAgICBsYWJlbDogZW50cmllc1swXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRmlsdGVyO1xuICAgICAgfSkgfHwgW107XG4gIHJldHVybiBmaWx0ZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhYmxlRmlsdGVycyA9IChjb250ZXh0TmFtZTogc3RyaW5nLCBzdGF0ZU1hcDogYW55KSA9PiB7XG4gIGNvbnN0IHBlcnNpc3RlZFN0YXRlID0gbG9hZExvY2FsU3RvcmFnZVN0YXRlKEZJTFRFUlNfU1RBVEVfS0VZKTtcbiAgY29uc3QgYmFzZVRhYmxlU3RhdGUgPSBwZXJzaXN0ZWRTdGF0ZT8uYmFzZVRhYmxlU3RhdGVbY29udGV4dE5hbWVdO1xuICBsZXQgdGFibGVGaWx0ZXJzID0gYmFzZVRhYmxlU3RhdGU/LnRhYmxlRmlsdGVycyB8fCBbXTtcbiAgaWYgKHN0YXRlTWFwICYmIHN0YXRlTWFwW2NvbnRleHROYW1lXSkge1xuICAgIGNvbnN0IHNlYXJjaCA9IGxvYWRMb2NhbFN0b3JhZ2VTdGF0ZShcbiAgICAgIGAke1JFRElSRUNUX1NUQVRFX0tFWX1fJHtzdGF0ZU1hcFtjb250ZXh0TmFtZV19YCxcbiAgICApPy5zZWFyY2g7XG4gICAgY29uc3QgdG1wRmlsdGVycyA9IGdldEZpbHRlcnNTdGF0ZUZyb21Vcmwoc2VhcmNoKTtcbiAgICBjb25zdCB1cmxGaWx0ZXJzID0gc2VhcmNoXG4gICAgICA/LnN1YnN0cmluZygxKVxuICAgICAgLnNwbGl0KFwiO1wiKVxuICAgICAgLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5zdGFydHNXaXRoKFVSTFF1ZXJ5S2V5cy5GSUxURVJTKSk7XG4gICAgaWYgKFxuICAgICAgKHRtcEZpbHRlcnMgJiYgdG1wRmlsdGVycy5sZW5ndGggPiAwKSB8fFxuICAgICAgdXJsRmlsdGVycyA9PT0gYCR7VVJMUXVlcnlLZXlzLkZJTFRFUlN9OmBcbiAgICApIHtcbiAgICAgIHRhYmxlRmlsdGVycyA9IHRtcEZpbHRlcnM7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZUZpbHRlcnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U29ydGluZ09iamVjdCA9IChjb250ZXh0TmFtZTogc3RyaW5nLCBjb250ZXh0TWFwOiBhbnkpID0+IHtcbiAgY29uc3QgcGVyc2lzdGVkU3RhdGUgPSBsb2FkTG9jYWxTdG9yYWdlU3RhdGUoRklMVEVSU19TVEFURV9LRVkpO1xuICBsZXQgc29ydFZhbHVlID0gcGVyc2lzdGVkU3RhdGU/LmZpbHRlcltjb250ZXh0TmFtZV0/LnNvcnQ7XG5cbiAgaWYgKGNvbnRleHRNYXAgJiYgY29udGV4dE1hcFtjb250ZXh0TmFtZV0pIHtcbiAgICBjb25zdCB0bXAgPSBnZXRTb3J0aW5nU3RhdGVGcm9tVXJsKGNvbnRleHRNYXBbY29udGV4dE5hbWVdKTtcbiAgICBpZiAodG1wKSB7XG4gICAgICBjb25zdCBzb3J0QnkgPSB0bXAuc3BsaXQoXCImXCIpWzBdLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgIGNvbnN0IHNvcnREaXIgPSB0bXAuc3BsaXQoXCImXCIpWzFdLnNwbGl0KFwiPVwiKVsxXTtcbiAgICAgIHNvcnRWYWx1ZSA9IHtcbiAgICAgICAgc29ydEJ5LFxuICAgICAgICBzb3J0RGlyLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvcnRWYWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRRdWVyeVBhcmFtcyA9IChcbiAgY29udGV4dE5hbWU6IHN0cmluZyxcbiAgc3RhdGVNYXA6IGFueSxcbiAga2V5OiBzdHJpbmcsXG4pID0+IHtcbiAgY29uc3QgcGVyc2lzdGVkU3RhdGUgPSBsb2FkTG9jYWxTdG9yYWdlU3RhdGUoRklMVEVSU19TVEFURV9LRVkpO1xuICBsZXQgdmFsdWUgPSBcIlwiO1xuICBsZXQgcXVlcnlQYXJhbXMgPSBwZXJzaXN0ZWRTdGF0ZT8uZmlsdGVyW2NvbnRleHROYW1lXT8ucXVlcnlQYXJhbXM7XG4gIGlmIChxdWVyeVBhcmFtcyAmJiBxdWVyeVBhcmFtc1swXSkge1xuICAgIHZhbHVlID0gcXVlcnlQYXJhbXNbMF1ba2V5XTtcbiAgfVxuICBpZiAoc3RhdGVNYXAgJiYgc3RhdGVNYXBbY29udGV4dE5hbWVdKSB7XG4gICAgY29uc3QgdG1wUXVlcnlQYXJhbXMgPSBnZXRRdWVyeVBhcmFtU3RhdGVGcm9tVXJsKFxuICAgICAgc3RhdGVNYXBbY29udGV4dE5hbWVdLFxuICAgICAga2V5LFxuICAgICk7XG4gICAgaWYgKHRtcFF1ZXJ5UGFyYW1zKSB7XG4gICAgICB2YWx1ZSA9IHRtcFF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UXVpY2tGaWx0ZXIgPSAoXG4gIGNvbnRleHROYW1lOiBzdHJpbmcsXG4gIHN0YXRlTWFwOiBhbnksXG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nLFxuKSA9PiB7XG4gIGNvbnN0IHBlcnNpc3RlZFN0YXRlID0gbG9hZExvY2FsU3RvcmFnZVN0YXRlKEZJTFRFUlNfU1RBVEVfS0VZKTtcbiAgY29uc3QgYmFzZVRhYmxlU3RhdGUgPSBwZXJzaXN0ZWRTdGF0ZT8uYmFzZVRhYmxlU3RhdGVbY29udGV4dE5hbWVdO1xuICBsZXQgcXVpY2tGaWx0ZXIgPSBiYXNlVGFibGVTdGF0ZT8uYWN0aXZlU3dpdGNoIHx8IGRlZmF1bHRWYWx1ZTtcbiAgaWYgKHN0YXRlTWFwICYmIHN0YXRlTWFwW2NvbnRleHROYW1lXSkge1xuICAgIGNvbnN0IHRtcFF1aWNrRmlsdGVyID0gZ2V0UXVpY2tGaWx0ZXJTdGF0ZUZyb21Vcmwoc3RhdGVNYXBbY29udGV4dE5hbWVdKTtcbiAgICBpZiAodG1wUXVpY2tGaWx0ZXIpIHtcbiAgICAgIHF1aWNrRmlsdGVyID0gdG1wUXVpY2tGaWx0ZXI7XG4gICAgfVxuICB9XG4gIHJldHVybiBxdWlja0ZpbHRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcmxTb3J0aW5nUXVlcnkgPSAoc29ydGluZzogYW55KSA9PiB7XG4gIGNvbnN0IHVybFBhcnRzID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaC5zcGxpdChcIjtcIikuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pO1xuICBjb25zdCBxdWVyeVN0YXJ0c1dpdGggPSBgJHtVUkxRdWVyeUtleXMuU09SVElOR306YDtcbiAgY29uc3QgaW5kZXggPSB1cmxQYXJ0cy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChxdWVyeVN0YXJ0c1dpdGgpKTtcbiAgY29uc3Qgc29ydGluZ1VybCA9IHVybFBhcnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChxdWVyeVN0YXJ0c1dpdGgpKTtcbiAgY29uc3Qgc29ydEFycmF5ID0gc29ydGluZ1VybD8uc3BsaXQoXCI6XCIpO1xuICBjb25zdCBzdGF0ZVVybFNvcnRpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNvcnRpbmcgYXMgYW55KS50b1N0cmluZygpO1xuICBsZXQgc29ydGluZ1NlYXJjaCA9IGAke1VSTFF1ZXJ5S2V5cy5TT1JUSU5HfToke3N0YXRlVXJsU29ydGluZ307YDtcbiAgaWYgKCFzb3J0aW5nKSB7XG4gICAgc29ydGluZ1NlYXJjaCA9IGAke1VSTFF1ZXJ5S2V5cy5TT1JUSU5HfToke3NvcnRBcnJheSA/IHNvcnRBcnJheVsxXSA6IFwiXCJ9O2A7XG4gIH1cbiAgdXJsUGFydHNbaW5kZXhdID0gc29ydGluZ1NlYXJjaDtcbiAgcmV0dXJuIHVybFBhcnRzLmpvaW4oXCI7XCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybEZpbHRlcmluZ1F1ZXJ5ID0gKFxuICB0YWJsZUZpbHRlcnM6IFRhYmxlRmlsdGVySXRlbVtdLFxuICBxdWljaz86IHN0cmluZyxcbiAgc29ydGluZz86IFNvcnRhYmxlLFxuKSA9PiB7XG4gIGNvbnN0IG9iakZpbHRlcnMgPSB0YWJsZUZpbHRlcnNcbiAgICA/Lm1hcCgoaXRlbSkgPT4gKHsgaWQ6IGl0ZW0uaWQsIHZhbHVlOiBpdGVtLnZhbHVlIH0pKVxuICAgID8ucmVkdWNlKFxuICAgICAgKHByZXZWYWwsIGN1cnJWYWwpID0+ICh7IFtjdXJyVmFsLmlkXTogY3VyclZhbC52YWx1ZSwgLi4ucHJldlZhbCB9KSxcbiAgICAgIHt9LFxuICAgICk7XG5cbiAgY29uc3Qgc3RhdGVVcmxGaWx0ZXJzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhvYmpGaWx0ZXJzKS50b1N0cmluZygpO1xuICBjb25zdCBsb2NhdGlvblVybFNlYXJjaCA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiO1wiKTtcblxuICBjb25zdCBmaWx0ZXJzU2VhcmNoID0gYCR7VVJMUXVlcnlLZXlzLkZJTFRFUlN9OiR7c3RhdGVVcmxGaWx0ZXJzfTtgO1xuXG4gIGNvbnN0IHF1aWNrQXJyYXkgPSBsb2NhdGlvblVybFNlYXJjaFsxXT8uc3BsaXQoXCI6XCIpO1xuICBsZXQgcXVpY2tTZWFyY2ggPSBgJHtVUkxRdWVyeUtleXMuUVVJQ0t9OiR7cXVpY2t9O2A7XG4gIGlmICghcXVpY2spIHtcbiAgICBxdWlja1NlYXJjaCA9IGAke1VSTFF1ZXJ5S2V5cy5RVUlDS306JHtxdWlja0FycmF5ID8gcXVpY2tBcnJheVsxXSA6IFwiXCJ9O2A7XG4gIH1cblxuICBjb25zdCBzb3J0QXJyYXkgPSBsb2NhdGlvblVybFNlYXJjaFsyXT8uc3BsaXQoXCI6XCIpO1xuICBjb25zdCBzdGF0ZVVybFNvcnRpbmcgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNvcnRpbmcgYXMgYW55KS50b1N0cmluZygpO1xuICBsZXQgc29ydGluZ1NlYXJjaCA9IGAke1VSTFF1ZXJ5S2V5cy5TT1JUSU5HfToke3N0YXRlVXJsU29ydGluZ307YDtcbiAgaWYgKCFzb3J0aW5nKSB7XG4gICAgc29ydGluZ1NlYXJjaCA9IGAke1VSTFF1ZXJ5S2V5cy5TT1JUSU5HfToke3NvcnRBcnJheSA/IHNvcnRBcnJheVsxXSA6IFwiXCJ9O2A7XG4gIH1cbiAgcmV0dXJuIGAke2ZpbHRlcnNTZWFyY2h9JHtxdWlja1NlYXJjaH0ke3NvcnRpbmdTZWFyY2h9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWRpcmVjdFBhdGhTdGF0ZSA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRMb2NhbFN0b3JhZ2VTdGF0ZShSRURJUkVDVF9QQVRITkFNRV9TVEFURV9LRVkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlZGlyZWN0RmlsdGVyU3RhdGUgPSAoKSA9PiB7XG4gIHJldHVybiBsb2FkTG9jYWxTdG9yYWdlU3RhdGUoUkVESVJFQ1RfU1RBVEVfS0VZKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb29raWVBY2NlcHRlZFN0YXR1cyA9ICgpID0+IHtcbiAgcmV0dXJuIGxvYWRMb2NhbFN0b3JhZ2VTdGF0ZShDT09LSUVTX1NUQVRFX0tFWSk/LmFjY2VwdGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGFjY2VwdENvb2tpZVN0YXRlRmxhZyA9ICgpID0+IHtcbiAgc2F2ZUxvY2FsU3RvcmFnZVN0YXRlKENPT0tJRVNfU1RBVEVfS0VZLCB7IGFjY2VwdGVkOiB0cnVlIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlZGlyZWN0ZWRVcmwgPSAoYXBwUHJlZml4OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGF0aFN0YXRlID0gZ2V0UmVkaXJlY3RQYXRoU3RhdGUoKTtcbiAgY29uc3QgcGF0aG5hbWUgPSBwYXRoU3RhdGU/LnBhdGhuYW1lPy5yZXBsYWNlKGFwcFByZWZpeCwgXCJcIikgfHwgXCJcIjtcbiAgY29uc3Qgc2VhcmNoID0gZ2V0UmVkaXJlY3RGaWx0ZXJTdGF0ZSgpPy5zZWFyY2ggfHwgXCJcIjtcbiAgY29uc3QgaGFzaCA9IHBhdGhTdGF0ZT8uaGFzaCB8fCBcIlwiO1xuICByZXR1cm4gYCR7cGF0aG5hbWV9JHtzZWFyY2h9JHtoYXNofWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGggPSAoYXBwUHJlZml4OiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKGFwcFByZWZpeCwgXCJcIik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhhc2ggPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgeyBoYXNoIH0gPSB3aW5kb3cubG9jYXRpb247XG4gIHJldHVybiBoYXNoID8gaGFzaCA6IFwiXCI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFNlYXJjaCA9ICgpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7IHNlYXJjaCB9ID0gd2luZG93LmxvY2F0aW9uO1xuICByZXR1cm4gc2VhcmNoID8gc2VhcmNoIDogXCJcIjtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlRmlsdGVyVG9Mb2NhbFN0b3JhZ2UgPSAoYXBwUHJlZml4OiBzdHJpbmcpID0+IHtcbiAgc2F2ZUxvY2FsU3RvcmFnZVN0YXRlKGAke1JFRElSRUNUX1NUQVRFX0tFWX1fJHtnZXRDdXJyZW50UGF0aChhcHBQcmVmaXgpfWAsIHtcbiAgICBzZWFyY2g6IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gsXG4gIH0pO1xuICBzYXZlTG9jYWxTdG9yYWdlU3RhdGUoUkVESVJFQ1RfUEFUSE5BTUVfU1RBVEVfS0VZLCB7XG4gICAgcGF0aG5hbWU6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICBoYXNoOiBnZXRDdXJyZW50SGFzaCgpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJMb2NhbFN0b3JhZ2VEYXRhID0gKCkgPT4ge1xuICByZW1vdmVMb2NhbFN0b3JhZ2VTdGF0ZShGSUxURVJTX1NUQVRFX0tFWSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQ29va2llQ29uc2VudExvY2FsU3RvcmFnZURhdGEgPSAoKSA9PiB7XG4gIHJlbW92ZUxvY2FsU3RvcmFnZVN0YXRlKENPT0tJRVNfU1RBVEVfS0VZKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVSZWRpcmVjdFN0YXRldExvY2FsU3RvcmFnZURhdGEgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiB7XG4gIHBhdGhzLmZvckVhY2goKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJlbW92ZUxvY2FsU3RvcmFnZVN0YXRlKGAke1JFRElSRUNUX1NUQVRFX0tFWX1fJHtwYXRofWApO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlU3RvcmVUb0xvY2FsU3RvcmFnZSA9IChcbiAgaXNVc2VyTG9nZ2VkSW46IEZ1bmN0aW9uLFxuICBzdGF0ZTogYW55LFxuKSA9PiB7XG4gIGlmIChpc1VzZXJMb2dnZWRJbihzdGF0ZSkpIHtcbiAgICBzYXZlTG9jYWxTdG9yYWdlU3RhdGUoRklMVEVSU19TVEFURV9LRVksIHtcbiAgICAgIGJhc2VUYWJsZVN0YXRlOiBzdGF0ZS5iYXNlVGFibGVTdGF0ZSxcbiAgICAgIGZpbHRlcjogc3RhdGUuZmlsdGVyLFxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVXJsRmlsdGVyUXVlcnkgPSAoXG4gIGhpc3Rvcnk6IGFueSxcbiAgbG9jYXRpb246IGFueSxcbiAgdGFibGVGaWx0ZXJzOiBUYWJsZUZpbHRlckl0ZW1bXSxcbiAgcXVpY2s/OiBhbnksXG4gIHNvcnRpbmc/OiBTb3J0YWJsZSxcbikgPT4ge1xuICBjb25zdCBzZWFyY2ggPSBnZXRVcmxGaWx0ZXJpbmdRdWVyeSh0YWJsZUZpbHRlcnMsIHF1aWNrLCBzb3J0aW5nKTtcbiAgaGlzdG9yeS5yZXBsYWNlKHsgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLCBzZWFyY2ggfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVXJsU29ydGluZyA9IChcbiAgaGlzdG9yeTogYW55LFxuICBsb2NhdGlvbjogYW55LFxuICB2YWx1ZTogT2JqZWN0LFxuKSA9PiB7XG4gIGNvbnN0IHNlYXJjaCA9IGdldFVybFNvcnRpbmdRdWVyeSh2YWx1ZSk7XG4gIGhpc3RvcnkucmVwbGFjZSh7IHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSwgc2VhcmNoIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVGaWx0ZXJUb1Nlc3Npb25TdG9yYWdlID0gKGFwcFByZWZpeDogc3RyaW5nKSA9PiB7XG4gIHNhdmVTZXNzaW9uU3RvcmFnZVN0YXRlKFxuICAgIGAke1JFRElSRUNUX1NUQVRFX0tFWX1fJHtnZXRDdXJyZW50UGF0aChhcHBQcmVmaXgpfWAsXG4gICAgeyBzZWFyY2g6IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggfSxcbiAgKTtcbiAgc2F2ZVNlc3Npb25TdG9yYWdlU3RhdGUoUkVESVJFQ1RfUEFUSE5BTUVfU1RBVEVfS0VZLCB7XG4gICAgcGF0aG5hbWU6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICBoYXNoOiBnZXRDdXJyZW50SGFzaCgpLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGaWx0ZXJTZXNzaW9uU3RvcmFnZURhdGEgPSAoKSA9PiB7XG4gIHJlbW92ZVNlc3Npb25TdG9yYWdlU3RhdGUoRklMVEVSU19TVEFURV9LRVkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUNvb2tpZUNvbnNlbnRTZXNzaW9uU3RvcmFnZURhdGEgPSAoKSA9PiB7XG4gIHJlbW92ZVNlc3Npb25TdG9yYWdlU3RhdGUoQ09PS0lFU19TVEFURV9LRVkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVJlZGlyZWN0U3RhdGVTZXNzaW9uU3RvcmFnZURhdGEgPSAocGF0aHM6IHN0cmluZ1tdKSA9PiB7XG4gIHBhdGhzLmZvckVhY2goKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJlbW92ZVNlc3Npb25TdG9yYWdlU3RhdGUoYCR7UkVESVJFQ1RfU1RBVEVfS0VZfV8ke3BhdGh9YCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVTdG9yZVRvU2Vzc2lvblN0b3JhZ2UgPSAoXG4gIGlzVXNlckxvZ2dlZEluOiBGdW5jdGlvbixcbiAgc3RhdGU6IGFueSxcbikgPT4ge1xuICBpZiAoaXNVc2VyTG9nZ2VkSW4oc3RhdGUpKSB7XG4gICAgc2F2ZVNlc3Npb25TdG9yYWdlU3RhdGUoRklMVEVSU19TVEFURV9LRVksIHtcbiAgICAgIGJhc2VUYWJsZVN0YXRlOiBzdGF0ZS5iYXNlVGFibGVTdGF0ZSxcbiAgICAgIGZpbHRlcjogc3RhdGUuZmlsdGVyLFxuICAgIH0pO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbImVzRXJyb3JzIiwiX2V2YWwiLCJyYW5nZSIsInJlZiIsInN5bnRheCIsInR5cGUiLCJ1cmkiLCJzaGFtcyIsIm9iaiIsInN5bSIsInN5bU9iaiIsInN5bVZhbCIsInN5bXMiLCJkZXNjcmlwdG9yIiwib3JpZ1N5bWJvbCIsImhhc1N5bWJvbFNoYW0iLCJyZXF1aXJlJCQwIiwiaGFzU3ltYm9scyIsInRlc3QiLCIkT2JqZWN0IiwiaGFzUHJvdG8iLCJFUlJPUl9NRVNTQUdFIiwidG9TdHIiLCJtYXgiLCJmdW5jVHlwZSIsImNvbmNhdHR5IiwiYSIsImIiLCJhcnIiLCJpIiwiaiIsInNsaWN5IiwiYXJyTGlrZSIsIm9mZnNldCIsImpvaW55Iiwiam9pbmVyIiwic3RyIiwiaW1wbGVtZW50YXRpb24iLCJ0aGF0IiwidGFyZ2V0IiwiYXJncyIsImJvdW5kIiwiYmluZGVyIiwicmVzdWx0IiwiYm91bmRMZW5ndGgiLCJib3VuZEFyZ3MiLCJFbXB0eSIsImZ1bmN0aW9uQmluZCIsImNhbGwiLCIkaGFzT3duIiwiYmluZCIsImhhc293biIsInVuZGVmaW5lZCIsIiRFcnJvciIsIiRFdmFsRXJyb3IiLCJyZXF1aXJlJCQxIiwiJFJhbmdlRXJyb3IiLCJyZXF1aXJlJCQyIiwiJFJlZmVyZW5jZUVycm9yIiwicmVxdWlyZSQkMyIsIiRTeW50YXhFcnJvciIsInJlcXVpcmUkJDQiLCIkVHlwZUVycm9yIiwicmVxdWlyZSQkNSIsIiRVUklFcnJvciIsInJlcXVpcmUkJDYiLCIkRnVuY3Rpb24iLCJnZXRFdmFsbGVkQ29uc3RydWN0b3IiLCJleHByZXNzaW9uU3ludGF4IiwiJGdPUEQiLCJ0aHJvd1R5cGVFcnJvciIsIlRocm93VHlwZUVycm9yIiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJnZXRQcm90byIsIngiLCJuZWVkc0V2YWwiLCJUeXBlZEFycmF5IiwiSU5UUklOU0lDUyIsImUiLCJlcnJvclByb3RvIiwiZG9FdmFsIiwibmFtZSIsInZhbHVlIiwiZm4iLCJnZW4iLCJMRUdBQ1lfQUxJQVNFUyIsInJlcXVpcmUkJDkiLCJoYXNPd24iLCJyZXF1aXJlJCQxMCIsIiRjb25jYXQiLCIkc3BsaWNlQXBwbHkiLCIkcmVwbGFjZSIsIiRzdHJTbGljZSIsIiRleGVjIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsInN0cmluZ1RvUGF0aCIsInN0cmluZyIsImZpcnN0IiwibGFzdCIsIm1hdGNoIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJnZXRCYXNlSW50cmluc2ljIiwiYWxsb3dNaXNzaW5nIiwiaW50cmluc2ljTmFtZSIsImFsaWFzIiwiZ2V0SW50cmluc2ljIiwicGFydHMiLCJpbnRyaW5zaWNCYXNlTmFtZSIsImludHJpbnNpYyIsImludHJpbnNpY1JlYWxOYW1lIiwic2tpcEZ1cnRoZXJDYWNoaW5nIiwiaXNPd24iLCJwYXJ0IiwiZGVzYyIsIkdldEludHJpbnNpYyIsIiRkZWZpbmVQcm9wZXJ0eSIsImVzRGVmaW5lUHJvcGVydHkiLCJnb3BkIiwiZGVmaW5lRGF0YVByb3BlcnR5IiwicHJvcGVydHkiLCJub25FbnVtZXJhYmxlIiwibm9uV3JpdGFibGUiLCJub25Db25maWd1cmFibGUiLCJsb29zZSIsImhhc1Byb3BlcnR5RGVzY3JpcHRvcnMiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3JzXzEiLCJkZWZpbmUiLCJoYXNEZXNjcmlwdG9ycyIsImdPUEQiLCIkZmxvb3IiLCJzZXRGdW5jdGlvbkxlbmd0aCIsImxlbmd0aCIsImZ1bmN0aW9uTGVuZ3RoSXNDb25maWd1cmFibGUiLCJmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUiLCIkYXBwbHkiLCIkY2FsbCIsIiRyZWZsZWN0QXBwbHkiLCIkbWF4IiwibW9kdWxlIiwib3JpZ2luYWxGdW5jdGlvbiIsImZ1bmMiLCJhcHBseUJpbmQiLCJjYWxsQmluZCIsIiRpbmRleE9mIiwiY2FsbEJvdW5kIiwiX192aXRlQnJvd3NlckV4dGVybmFsIiwiaGFzTWFwIiwibWFwU2l6ZURlc2NyaXB0b3IiLCJtYXBTaXplIiwibWFwRm9yRWFjaCIsImhhc1NldCIsInNldFNpemVEZXNjcmlwdG9yIiwic2V0U2l6ZSIsInNldEZvckVhY2giLCJoYXNXZWFrTWFwIiwid2Vha01hcEhhcyIsImhhc1dlYWtTZXQiLCJ3ZWFrU2V0SGFzIiwiaGFzV2Vha1JlZiIsIndlYWtSZWZEZXJlZiIsImJvb2xlYW5WYWx1ZU9mIiwib2JqZWN0VG9TdHJpbmciLCJmdW5jdGlvblRvU3RyaW5nIiwiJG1hdGNoIiwiJHNsaWNlIiwiJHRvVXBwZXJDYXNlIiwiJHRvTG93ZXJDYXNlIiwiJHRlc3QiLCIkam9pbiIsIiRhcnJTbGljZSIsImJpZ0ludFZhbHVlT2YiLCJnT1BTIiwic3ltVG9TdHJpbmciLCJoYXNTaGFtbWVkU3ltYm9scyIsInRvU3RyaW5nVGFnIiwiaXNFbnVtZXJhYmxlIiwiZ1BPIiwiTyIsImFkZE51bWVyaWNTZXBhcmF0b3IiLCJudW0iLCJzZXBSZWdleCIsImludCIsImludFN0ciIsImRlYyIsInV0aWxJbnNwZWN0IiwiaW5zcGVjdEN1c3RvbSIsImluc3BlY3RTeW1ib2wiLCJpc1N5bWJvbCIsIm9iamVjdEluc3BlY3QiLCJpbnNwZWN0XyIsIm9wdGlvbnMiLCJkZXB0aCIsInNlZW4iLCJvcHRzIiwiaGFzIiwiY3VzdG9tSW5zcGVjdCIsIm51bWVyaWNTZXBhcmF0b3IiLCJpbnNwZWN0U3RyaW5nIiwiYmlnSW50U3RyIiwibWF4RGVwdGgiLCJpc0FycmF5IiwiaW5kZW50IiwiZ2V0SW5kZW50IiwiaW5kZXhPZiIsImluc3BlY3QiLCJmcm9tIiwibm9JbmRlbnQiLCJuZXdPcHRzIiwiaXNSZWdFeHAiLCJuYW1lT2YiLCJrZXlzIiwiYXJyT2JqS2V5cyIsInN5bVN0cmluZyIsIm1hcmtCb3hlZCIsImlzRWxlbWVudCIsInMiLCJhdHRycyIsIndyYXBRdW90ZXMiLCJ4cyIsInNpbmdsZUxpbmVWYWx1ZXMiLCJpbmRlbnRlZEpvaW4iLCJpc0Vycm9yIiwiaXNNYXAiLCJtYXBQYXJ0cyIsImtleSIsImNvbGxlY3Rpb25PZiIsImlzU2V0Iiwic2V0UGFydHMiLCJpc1dlYWtNYXAiLCJ3ZWFrQ29sbGVjdGlvbk9mIiwiaXNXZWFrU2V0IiwiaXNXZWFrUmVmIiwiaXNOdW1iZXIiLCJpc0JpZ0ludCIsImlzQm9vbGVhbiIsImlzU3RyaW5nIiwiZ2xvYmFsIiwiaXNEYXRlIiwieXMiLCJpc1BsYWluT2JqZWN0IiwicHJvdG9UYWciLCJzdHJpbmdUYWciLCJjb25zdHJ1Y3RvclRhZyIsInRhZyIsImRlZmF1bHRTdHlsZSIsInF1b3RlQ2hhciIsImYiLCJtIiwibCIsInJlbWFpbmluZyIsInRyYWlsZXIiLCJsb3dieXRlIiwiYyIsIm4iLCJzaXplIiwiZW50cmllcyIsImpvaW5lZEVudHJpZXMiLCJiYXNlSW5kZW50IiwibGluZUpvaW5lciIsImlzQXJyIiwic3ltTWFwIiwiayIsIiRXZWFrTWFwIiwiJE1hcCIsIiR3ZWFrTWFwR2V0IiwiJHdlYWtNYXBTZXQiLCIkd2Vha01hcEhhcyIsIiRtYXBHZXQiLCIkbWFwU2V0IiwiJG1hcEhhcyIsImxpc3RHZXROb2RlIiwibGlzdCIsInByZXYiLCJjdXJyIiwibGlzdEdldCIsIm9iamVjdHMiLCJub2RlIiwibGlzdFNldCIsImxpc3RIYXMiLCJzaWRlQ2hhbm5lbCIsIiR3bSIsIiRtIiwiJG8iLCJjaGFubmVsIiwicmVwbGFjZSIsInBlcmNlbnRUd2VudGllcyIsIkZvcm1hdCIsImZvcm1hdHMiLCJoZXhUYWJsZSIsImFycmF5IiwiY29tcGFjdFF1ZXVlIiwicXVldWUiLCJpdGVtIiwiY29tcGFjdGVkIiwiYXJyYXlUb09iamVjdCIsInNvdXJjZSIsIm1lcmdlIiwibWVyZ2VUYXJnZXQiLCJ0YXJnZXRJdGVtIiwiYWNjIiwiYXNzaWduIiwiZGVjb2RlIiwiZGVjb2RlciIsImNoYXJzZXQiLCJzdHJXaXRob3V0UGx1cyIsImxpbWl0IiwiZW5jb2RlIiwiZGVmYXVsdEVuY29kZXIiLCJraW5kIiwiZm9ybWF0IiwiJDAiLCJvdXQiLCJzZWdtZW50IiwiY29tcGFjdCIsInJlZnMiLCJ2YWwiLCJpc0J1ZmZlciIsImNvbWJpbmUiLCJtYXliZU1hcCIsIm1hcHBlZCIsInV0aWxzIiwiZ2V0U2lkZUNoYW5uZWwiLCJhcnJheVByZWZpeEdlbmVyYXRvcnMiLCJwcmVmaXgiLCJwdXNoIiwicHVzaFRvQXJyYXkiLCJ2YWx1ZU9yQXJyYXkiLCJ0b0lTTyIsImRlZmF1bHRGb3JtYXQiLCJkZWZhdWx0cyIsImRhdGUiLCJpc05vbk51bGxpc2hQcmltaXRpdmUiLCJ2Iiwic2VudGluZWwiLCJzdHJpbmdpZnkiLCJvYmplY3QiLCJnZW5lcmF0ZUFycmF5UHJlZml4IiwiY29tbWFSb3VuZFRyaXAiLCJhbGxvd0VtcHR5QXJyYXlzIiwic3RyaWN0TnVsbEhhbmRsaW5nIiwic2tpcE51bGxzIiwiZW5jb2RlRG90SW5LZXlzIiwiZW5jb2RlciIsImZpbHRlciIsInNvcnQiLCJhbGxvd0RvdHMiLCJzZXJpYWxpemVEYXRlIiwiZm9ybWF0dGVyIiwiZW5jb2RlVmFsdWVzT25seSIsInRtcFNjIiwic3RlcCIsImZpbmRGbGFnIiwicG9zIiwia2V5VmFsdWUiLCJ2YWx1ZXMiLCJvYmpLZXlzIiwiZW5jb2RlZFByZWZpeCIsImFkanVzdGVkUHJlZml4IiwiZW5jb2RlZEtleSIsImtleVByZWZpeCIsInZhbHVlU2lkZUNoYW5uZWwiLCJub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zIiwiYXJyYXlGb3JtYXQiLCJzdHJpbmdpZnlfMSIsImpvaW5lZCIsImludGVycHJldE51bWVyaWNFbnRpdGllcyIsIm51bWJlclN0ciIsInBhcnNlQXJyYXlWYWx1ZSIsImlzb1NlbnRpbmVsIiwiY2hhcnNldFNlbnRpbmVsIiwicGFyc2VWYWx1ZXMiLCJjbGVhblN0ciIsInNraXBJbmRleCIsImJyYWNrZXRFcXVhbHNQb3MiLCJlbmNvZGVkVmFsIiwiZXhpc3RpbmciLCJwYXJzZU9iamVjdCIsImNoYWluIiwidmFsdWVzUGFyc2VkIiwibGVhZiIsInJvb3QiLCJjbGVhblJvb3QiLCJkZWNvZGVkUm9vdCIsImluZGV4IiwicGFyc2VLZXlzIiwiZ2l2ZW5LZXkiLCJicmFja2V0cyIsImNoaWxkIiwicGFyZW50Iiwibm9ybWFsaXplUGFyc2VPcHRpb25zIiwiZHVwbGljYXRlcyIsInBhcnNlIiwidGVtcE9iaiIsIm5ld09iaiIsImxpYiIsImdldFVybFBhcmFtIiwic2VhcmNoIiwicGFyc2VkUGFyYW1zIiwicXMiLCJnZXRVcmxXaXRob3V0UGFyYW1zIiwidXJsIiwiZ2V0TGFzdFVybFBhcnQiLCJnZXRMYXN0VXJsUGFydFdpdGhvdXRQYXJhbXMiLCJnZXRMYXN0VXJsUGFydFdpdGhvdXRQYXJhbXNEZWNvZGVkIiwiRklMVEVSU19TVEFURV9LRVkiLCJDT09LSUVTX1NUQVRFX0tFWSIsIlJFRElSRUNUX1NUQVRFX0tFWSIsIlJFRElSRUNUX1BBVEhOQU1FX1NUQVRFX0tFWSIsImdldFF1aWNrRmlsdGVyU3RhdGVGcm9tVXJsIiwiY29udGV4dCIsIl9hIiwibG9hZExvY2FsU3RvcmFnZVN0YXRlIiwiX2MiLCJfYiIsIlVSTFF1ZXJ5S2V5cyIsImdldFF1ZXJ5UGFyYW1TdGF0ZUZyb21VcmwiLCJxcCIsImdldFNvcnRpbmdTdGF0ZUZyb21VcmwiLCJnZXRGaWx0ZXJzU3RhdGVGcm9tVXJsIiwidXJsRmlsdGVycyIsImdldFRhYmxlRmlsdGVycyIsImNvbnRleHROYW1lIiwic3RhdGVNYXAiLCJwZXJzaXN0ZWRTdGF0ZSIsImJhc2VUYWJsZVN0YXRlIiwidGFibGVGaWx0ZXJzIiwidG1wRmlsdGVycyIsImdldFNvcnRpbmdPYmplY3QiLCJjb250ZXh0TWFwIiwic29ydFZhbHVlIiwidG1wIiwic29ydEJ5Iiwic29ydERpciIsImdldFF1ZXJ5UGFyYW1zIiwicXVlcnlQYXJhbXMiLCJ0bXBRdWVyeVBhcmFtcyIsImdldFF1aWNrRmlsdGVyIiwiZGVmYXVsdFZhbHVlIiwicXVpY2tGaWx0ZXIiLCJ0bXBRdWlja0ZpbHRlciIsImdldFVybFNvcnRpbmdRdWVyeSIsInNvcnRpbmciLCJ1cmxQYXJ0cyIsInF1ZXJ5U3RhcnRzV2l0aCIsInNvcnRpbmdVcmwiLCJzb3J0QXJyYXkiLCJzdGF0ZVVybFNvcnRpbmciLCJzb3J0aW5nU2VhcmNoIiwiZ2V0VXJsRmlsdGVyaW5nUXVlcnkiLCJxdWljayIsIm9iakZpbHRlcnMiLCJwcmV2VmFsIiwiY3VyclZhbCIsInN0YXRlVXJsRmlsdGVycyIsImxvY2F0aW9uVXJsU2VhcmNoIiwiZmlsdGVyc1NlYXJjaCIsInF1aWNrQXJyYXkiLCJxdWlja1NlYXJjaCIsImdldFJlZGlyZWN0UGF0aFN0YXRlIiwiZ2V0UmVkaXJlY3RGaWx0ZXJTdGF0ZSIsImdldENvb2tpZUFjY2VwdGVkU3RhdHVzIiwiYWNjZXB0Q29va2llU3RhdGVGbGFnIiwic2F2ZUxvY2FsU3RvcmFnZVN0YXRlIiwiZ2V0UmVkaXJlY3RlZFVybCIsImFwcFByZWZpeCIsInBhdGhTdGF0ZSIsInBhdGhuYW1lIiwiaGFzaCIsImdldEN1cnJlbnRQYXRoIiwiZ2V0Q3VycmVudEhhc2giLCJnZXRDdXJyZW50U2VhcmNoIiwic2F2ZUZpbHRlclRvTG9jYWxTdG9yYWdlIiwicmVtb3ZlRmlsdGVyTG9jYWxTdG9yYWdlRGF0YSIsInJlbW92ZUxvY2FsU3RvcmFnZVN0YXRlIiwicmVtb3ZlQ29va2llQ29uc2VudExvY2FsU3RvcmFnZURhdGEiLCJyZW1vdmVSZWRpcmVjdFN0YXRldExvY2FsU3RvcmFnZURhdGEiLCJwYXRocyIsInBhdGgiLCJzYXZlU3RvcmVUb0xvY2FsU3RvcmFnZSIsImlzVXNlckxvZ2dlZEluIiwic3RhdGUiLCJ1cGRhdGVVcmxGaWx0ZXJRdWVyeSIsImhpc3RvcnkiLCJsb2NhdGlvbiIsInVwZGF0ZVVybFNvcnRpbmciLCJzYXZlRmlsdGVyVG9TZXNzaW9uU3RvcmFnZSIsInNhdmVTZXNzaW9uU3RvcmFnZVN0YXRlIiwicmVtb3ZlRmlsdGVyU2Vzc2lvblN0b3JhZ2VEYXRhIiwicmVtb3ZlU2Vzc2lvblN0b3JhZ2VTdGF0ZSIsInJlbW92ZUNvb2tpZUNvbnNlbnRTZXNzaW9uU3RvcmFnZURhdGEiLCJyZW1vdmVSZWRpcmVjdFN0YXRlU2Vzc2lvblN0b3JhZ2VEYXRhIiwic2F2ZVN0b3JlVG9TZXNzaW9uU3RvcmFnZSJdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsSUFBQUEsS0FBaUIsT0NBakJDLEtBQWlCLFdDQWpCQyxLQUFpQixZQ0FqQkMsS0FBaUIsZ0JDQWpCQyxLQUFpQixhQ0FqQkMsS0FBaUIsV0NBakJDLEtBQWlCLFVDQWpCQyxLQUFpQixXQUFzQjtBQUN0QyxNQUFJLE9BQU8sVUFBVyxjQUFjLE9BQU8sT0FBTyx5QkFBMEI7QUFBYyxXQUFPO0FBQ2pHLE1BQUksT0FBTyxPQUFPLFlBQWE7QUFBWSxXQUFPO0FBRWxELE1BQUlDLElBQU0sQ0FBRSxHQUNSQyxJQUFNLE9BQU8sTUFBTSxHQUNuQkMsSUFBUyxPQUFPRCxDQUFHO0FBSXZCLE1BSEksT0FBT0EsS0FBUSxZQUVmLE9BQU8sVUFBVSxTQUFTLEtBQUtBLENBQUcsTUFBTSxxQkFDeEMsT0FBTyxVQUFVLFNBQVMsS0FBS0MsQ0FBTSxNQUFNO0FBQXFCLFdBQU87QUFVM0UsTUFBSUMsSUFBUztBQUNiLEVBQUFILEVBQUlDLENBQUcsSUFBSUU7QUFDWCxPQUFLRixLQUFPRDtBQUFPLFdBQU87QUFHMUIsTUFGSSxPQUFPLE9BQU8sUUFBUyxjQUFjLE9BQU8sS0FBS0EsQ0FBRyxFQUFFLFdBQVcsS0FFakUsT0FBTyxP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LElBQUk4RCxHQUFlSixDQUFTLENBQUM7QUFBQSxJQUNsRCxFQUFFLFFBQVEsT0FBTyxTQUFTLE9BQU87QUFBQSxFQUNuQyxHQUNBc0IsR0FBd0IvRSxJQUE2QjtBQUFBLElBQ25ELFVBQVUsT0FBTyxTQUFTO0FBQUEsSUFDMUIsTUFBTThELEdBQWU7QUFBQSxFQUFBLENBQ3RCO0FBQ0gsR0FFYWtCLEtBQWlDLE1BQU07QUFDbEQsRUFBQUMsR0FBMEJwRixDQUFpQjtBQUM3QyxHQUVhcUYsS0FBd0MsTUFBTTtBQUN6RCxFQUFBRCxHQUEwQm5GLEVBQWlCO0FBQzdDLEdBRWFxRixLQUF3QyxDQUFDZCxNQUFvQjtBQUNsRSxFQUFBQSxFQUFBLFFBQVEsQ0FBQ0MsTUFBaUI7QUFDOUIsSUFBQVcsR0FBMEIsR0FBR2xGLENBQWtCLElBQUl1RSxDQUFJLEVBQUU7QUFBQSxFQUFBLENBQzFEO0FBQ0gsR0FFYWMsS0FBNEIsQ0FDdkNaLEdBQ0FDLE1BQ0c7QUFDQyxFQUFBRCxFQUFlQyxDQUFLLEtBQ3RCTSxHQUF3QmxGLEdBQW1CO0FBQUEsSUFDekMsZ0JBQWdCNEUsRUFBTTtBQUFBLElBQ3RCLFFBQVFBLEVBQU07QUFBQSxFQUFBLENBQ2Y7QUFFTDsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywyOF19\n","const c = (t) => {\n try {\n if (t)\n return JSON.parse(atob(t.split(\".\")[1]));\n } catch {\n return null;\n }\n}, r = (t) => t.data, e = (t) => t.map((a) => r(a));\nexport {\n r as extractData,\n e as extractManyData,\n c as parseJwt\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3MudXRpbHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlscy9heGlvcy51dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBeGlvc1Jlc3BvbnNlIH0gZnJvbSBcImF4aW9zXCI7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUp3dCA9ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShhdG9iKHRva2VuLnNwbGl0KFwiLlwiKVsxXSkpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdERhdGEgPSAocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE7XG5leHBvcnQgY29uc3QgZXh0cmFjdE1hbnlEYXRhID0gKHJlc3BvbnNlczogQXhpb3NSZXNwb25zZVtdKSA9PlxuICByZXNwb25zZXMubWFwKChyZXNwb25zZSkgPT4gZXh0cmFjdERhdGEocmVzcG9uc2UpKTtcbiJdLCJuYW1lcyI6WyJwYXJzZUp3dCIsInRva2VuIiwiZXh0cmFjdERhdGEiLCJyZXNwb25zZSIsImV4dHJhY3RNYW55RGF0YSIsInJlc3BvbnNlcyJdLCJtYXBwaW5ncyI6IkFBRWEsTUFBQUEsSUFBVyxDQUFDQyxNQUE4QjtBQUNqRCxNQUFBO0FBQ0YsUUFBSUE7QUFDSyxhQUFBLEtBQUssTUFBTSxLQUFLQSxFQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQUEsVUFFbkM7QUFDSCxXQUFBO0FBQUEsRUFBQTtBQUVYLEdBRWFDLElBQWMsQ0FBQ0MsTUFBNEJBLEVBQVMsTUFDcERDLElBQWtCLENBQUNDLE1BQzlCQSxFQUFVLElBQUksQ0FBQ0YsTUFBYUQsRUFBWUMsQ0FBUSxDQUFDOyJ9\n","import { AddressType as r } from \"../models/organisations.model.js\";\nconst a = (s) => {\n const e = s.find((d) => d.addressType === r.COMPANY);\n return e || {\n addressLine1: \"\",\n addressLine2: \"\",\n postalCode: \"\",\n city: \"\",\n countryCode: \"\",\n county: \"\",\n addressType: r.COMPANY\n };\n}, c = (s) => s.find((e) => e.addressType === r.INVOICE) || a(s), p = (s) => {\n const { addressLine1: e, addressLine2: d, city: t, countryCode: n, postalCode: o } = s;\n return {\n street: `${e}\n${d || \"\"}`,\n addressLine1: e,\n addressLine2: d,\n postCode: o,\n city: t,\n countryCode: n\n };\n};\nexport {\n a as getOrganisationCompanyAddress,\n p as getOrganisationFormattedAddress,\n c as getOrganisationInvoiceAddress\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9ucy51dGlscy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWxzL29yZ2FuaXNhdGlvbnMudXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRkcmVzc1R5cGUsXG4gIE9yZ2FuaXNhdGlvbkFkZHJlc3MsXG59IGZyb20gXCJAbW9kZWxzL29yZ2FuaXNhdGlvbnMubW9kZWwudHNcIjtcblxuY29uc3QgZ2V0T3JnYW5pc2F0aW9uQ29tcGFueUFkZHJlc3MgPSAoXG4gIGFkZHJlc3NlczogT3JnYW5pc2F0aW9uQWRkcmVzc1tdLFxuKTogT3JnYW5pc2F0aW9uQWRkcmVzcyA9PiB7XG4gIGNvbnN0IGFkZHJlc3MgPSBhZGRyZXNzZXMuZmluZCgoYSkgPT4gYS5hZGRyZXNzVHlwZSA9PT0gQWRkcmVzc1R5cGUuQ09NUEFOWSk7XG4gIGlmICghYWRkcmVzcykge1xuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzTGluZTE6IFwiXCIsXG4gICAgICBhZGRyZXNzTGluZTI6IFwiXCIsXG4gICAgICBwb3N0YWxDb2RlOiBcIlwiLFxuICAgICAgY2l0eTogXCJcIixcbiAgICAgIGNvdW50cnlDb2RlOiBcIlwiLFxuICAgICAgY291bnR5OiBcIlwiLFxuICAgICAgYWRkcmVzc1R5cGU6IEFkZHJlc3NUeXBlLkNPTVBBTlksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gYWRkcmVzcztcbn07XG5cbmNvbnN0IGdldE9yZ2FuaXNhdGlvbkludm9pY2VBZGRyZXNzID0gKFxuICBhZGRyZXNzZXM6IE9yZ2FuaXNhdGlvbkFkZHJlc3NbXSxcbik6IE9yZ2FuaXNhdGlvbkFkZHJlc3MgPT4ge1xuICByZXR1cm4gKFxuICAgIGFkZHJlc3Nlcy5maW5kKChhKSA9PiBhLmFkZHJlc3NUeXBlID09PSBBZGRyZXNzVHlwZS5JTlZPSUNFKSB8fFxuICAgIGdldE9yZ2FuaXNhdGlvbkNvbXBhbnlBZGRyZXNzKGFkZHJlc3NlcylcbiAgKTtcbn07XG5cbmNvbnN0IGdldE9yZ2FuaXNhdGlvbkZvcm1hdHRlZEFkZHJlc3MgPSAoYWRkcmVzczogT3JnYW5pc2F0aW9uQWRkcmVzcykgPT4ge1xuICBjb25zdCB7IGFkZHJlc3NMaW5lMSwgYWRkcmVzc0xpbmUyLCBjaXR5LCBjb3VudHJ5Q29kZSwgcG9zdGFsQ29kZSB9ID0gYWRkcmVzcztcbiAgcmV0dXJuIHtcbiAgICBzdHJlZXQ6IGAke2FkZHJlc3NMaW5lMX1cXG4ke2FkZHJlc3NMaW5lMiB8fCBcIlwifWAsXG4gICAgYWRkcmVzc0xpbmUxOiBhZGRyZXNzTGluZTEsXG4gICAgYWRkcmVzc0xpbmUyOiBhZGRyZXNzTGluZTIsXG4gICAgcG9zdENvZGU6IHBvc3RhbENvZGUsXG4gICAgY2l0eSxcbiAgICBjb3VudHJ5Q29kZSxcbiAgfTtcbn07XG5cbmV4cG9ydCB7XG4gIGdldE9yZ2FuaXNhdGlvbkNvbXBhbnlBZGRyZXNzLFxuICBnZXRPcmdhbmlzYXRpb25JbnZvaWNlQWRkcmVzcyxcbiAgZ2V0T3JnYW5pc2F0aW9uRm9ybWF0dGVkQWRkcmVzcyxcbn07XG4iXSwibmFtZXMiOlsiZ2V0T3JnYW5pc2F0aW9uQ29tcGFueUFkZHJlc3MiLCJhZGRyZXNzZXMiLCJhZGRyZXNzIiwiYSIsIkFkZHJlc3NUeXBlIiwiZ2V0T3JnYW5pc2F0aW9uSW52b2ljZUFkZHJlc3MiLCJnZXRPcmdhbmlzYXRpb25Gb3JtYXR0ZWRBZGRyZXNzIiwiYWRkcmVzc0xpbmUxIiwiYWRkcmVzc0xpbmUyIiwiY2l0eSIsImNvdW50cnlDb2RlIiwicG9zdGFsQ29kZSJdLCJtYXBwaW5ncyI6IjtBQUtNLE1BQUFBLElBQWdDLENBQ3BDQyxNQUN3QjtBQUNsQixRQUFBQyxJQUFVRCxFQUFVLEtBQUssQ0FBQ0UsTUFBTUEsRUFBRSxnQkFBZ0JDLEVBQVksT0FBTztBQUMzRSxTQUFLRixLQUNJO0FBQUEsSUFDTCxjQUFjO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxZQUFZO0FBQUEsSUFDWixNQUFNO0FBQUEsSUFDTixhQUFhO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixhQUFhRSxFQUFZO0FBQUEsRUFDM0I7QUFHSixHQUVNQyxJQUFnQyxDQUNwQ0osTUFHRUEsRUFBVSxLQUFLLENBQUNFLE1BQU1BLEVBQUUsZ0JBQWdCQyxFQUFZLE9BQU8sS0FDM0RKLEVBQThCQyxDQUFTLEdBSXJDSyxJQUFrQyxDQUFDSixNQUFpQztBQUN4RSxRQUFNLEVBQUUsY0FBQUssR0FBYyxjQUFBQyxHQUFjLE1BQUFDLEdBQU0sYUFBQUMsR0FBYSxZQUFBQyxNQUFlVDtBQUMvRCxTQUFBO0FBQUEsSUFDTCxRQUFRLEdBQUdLLENBQVk7QUFBQSxFQUFLQyxLQUFnQixFQUFFO0FBQUEsSUFDOUMsY0FBQUQ7QUFBQSxJQUNBLGNBQUFDO0FBQUEsSUFDQSxVQUFVRztBQUFBLElBQ1YsTUFBQUY7QUFBQSxJQUNBLGFBQUFDO0FBQUEsRUFDRjtBQUNGOyJ9\n","import { BinaryChoice as s } from \"../models/utility.model.js\";\nconst u = (t, n = \"\") => Object.keys(t).reduce((r, e) => {\n const o = n.length ? n + \".\" : \"\";\n return typeof t[e] == \"object\" ? Object.assign(\n r,\n u(t[e], o + e)\n ) : r[o + e] = t[e], r;\n}, {}), a = (t, n) => {\n let r = null;\n return (...o) => {\n r !== null && (clearTimeout(r), r = null), r = setTimeout(() => t(...o), n);\n };\n}, l = (t, n, r) => {\n try {\n const e = Number.parseFloat(t.toString());\n if (Number.isNaN(e)) throw \"Nan\";\n return e.toFixed(n);\n } catch {\n return r;\n }\n}, i = (t, n, r) => {\n try {\n const e = Number.parseFloat(t.toString());\n if (Number.isNaN(e)) throw \"Nan\";\n return Math.round(e * Math.pow(10, n)) / Math.pow(10, n);\n } catch {\n return r;\n }\n}, h = (t, n) => {\n const r = [];\n for (let e = 0; e < t.length; e += n)\n r.push(t.slice(e, e + n));\n return r;\n}, d = (t) => t ? s.YES : s.NO;\nexport {\n d as asBinaryChoice,\n h as chunkArray,\n a as debounce,\n u as flattenObject,\n i as secureRound,\n l as secureToFixed\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnV0aWxzLmpzIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMvY29tbW9uLnV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpbmFyeUNob2ljZSB9IGZyb20gXCJAbW9kZWxzL3V0aWxpdHkubW9kZWwudHNcIjtcblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5PYmplY3QgPSAoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHByZWZpeCA9IFwiXCIsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKGFjYywgaykgPT4ge1xuICAgIGNvbnN0IHByZSA9IHByZWZpeC5sZW5ndGggPyBwcmVmaXggKyBcIi5cIiA6IFwiXCI7XG4gICAgaWYgKHR5cGVvZiBvYmpba10gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIGFjYyxcbiAgICAgICAgZmxhdHRlbk9iamVjdChvYmpba10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHByZSArIGspLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW3ByZSArIGtdID0gb2JqW2tdO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVib3VuY2UgPSA8RiBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbiAgZnVuYzogRixcbiAgd2FpdEZvcjogbnVtYmVyLFxuKSA9PiB7XG4gIGxldCB0aW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGRlYm91bmNlZCA9ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KSA9PiB7XG4gICAgaWYgKHRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBmdW5jKC4uLmFyZ3MpLCB3YWl0Rm9yKTtcbiAgfTtcblxuICByZXR1cm4gZGVib3VuY2VkIGFzICguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KSA9PiBSZXR1cm5UeXBlPEY+O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlY3VyZVRvRml4ZWQgPSAoXG4gIHZhbHVlOiBudW1iZXIgfCBzdHJpbmcsXG4gIGZpeGVkUG9zaXRpb25zOiBudW1iZXIsXG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nLFxuKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgaWYgKE51bWJlci5pc05hTihwYXJzZWQpKSB0aHJvdyBcIk5hblwiO1xuICAgIGVsc2UgcmV0dXJuIHBhcnNlZC50b0ZpeGVkKGZpeGVkUG9zaXRpb25zKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZWN1cmVSb3VuZCA9IChcbiAgdmFsdWU6IG51bWJlciB8IHN0cmluZyxcbiAgZml4ZWRQb3NpdGlvbnM6IG51bWJlcixcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmcsXG4pID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZS50b1N0cmluZygpKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlZCkpIHRocm93IFwiTmFuXCI7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgTWF0aC5yb3VuZChwYXJzZWQgKiBNYXRoLnBvdygxMCwgZml4ZWRQb3NpdGlvbnMpKSAvXG4gICAgICAgIE1hdGgucG93KDEwLCBmaXhlZFBvc2l0aW9ucylcbiAgICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2h1bmtBcnJheSA9IChhcnJheTogYW55W10sIGNodW5rU2l6ZTogbnVtYmVyKTogYW55W11bXSA9PiB7XG4gIGNvbnN0IHJlczogYW55W11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSArPSBjaHVua1NpemUpIHtcbiAgICByZXMucHVzaChhcnJheS5zbGljZShpLCBpICsgY2h1bmtTaXplKSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbmV4cG9ydCBjb25zdCBhc0JpbmFyeUNob2ljZSA9ICh2YWx1ZTogYm9vbGVhbikgPT5cbiAgdmFsdWUgPyBCaW5hcnlDaG9pY2UuWUVTIDogQmluYXJ5Q2hvaWNlLk5PO1xuIl0sIm5hbWVzIjpbImZsYXR0ZW5PYmplY3QiLCJvYmoiLCJwcmVmaXgiLCJhY2MiLCJrIiwicHJlIiwiZGVib3VuY2UiLCJmdW5jIiwid2FpdEZvciIsInRpbWVvdXQiLCJhcmdzIiwic2VjdXJlVG9GaXhlZCIsInZhbHVlIiwiZml4ZWRQb3NpdGlvbnMiLCJkZWZhdWx0VmFsdWUiLCJwYXJzZWQiLCJzZWN1cmVSb3VuZCIsImNodW5rQXJyYXkiLCJhcnJheSIsImNodW5rU2l6ZSIsInJlcyIsImkiLCJhc0JpbmFyeUNob2ljZSIsIkJpbmFyeUNob2ljZSJdLCJtYXBwaW5ncyI6IjtBQUVPLE1BQU1BLElBQWdCLENBQzNCQyxHQUNBQyxJQUFTLE9BRUYsT0FBTyxLQUFLRCxDQUFHLEVBQUUsT0FBZ0MsQ0FBQ0UsR0FBS0MsTUFBTTtBQUNsRSxRQUFNQyxJQUFNSCxFQUFPLFNBQVNBLElBQVMsTUFBTTtBQUMzQyxTQUFJLE9BQU9ELEVBQUlHLENBQUMsS0FBTSxXQUNiLE9BQUE7QUFBQSxJQUNMRDtBQUFBLElBQ0FILEVBQWNDLEVBQUlHLENBQUMsR0FBOEJDLElBQU1ELENBQUM7QUFBQSxFQUMxRCxJQUVBRCxFQUFJRSxJQUFNRCxDQUFDLElBQUlILEVBQUlHLENBQUMsR0FFZkQ7QUFDVCxHQUFHLEVBQUUsR0FHTUcsSUFBVyxDQUN0QkMsR0FDQUMsTUFDRztBQUNILE1BQUlDLElBQWdEO0FBVTdDLFNBUlcsSUFBSUMsTUFBd0I7QUFDNUMsSUFBSUQsTUFBWSxTQUNkLGFBQWFBLENBQU8sR0FDVkEsSUFBQSxPQUVaQSxJQUFVLFdBQVcsTUFBTUYsRUFBSyxHQUFHRyxDQUFJLEdBQUdGLENBQU87QUFBQSxFQUNuRDtBQUdGLEdBRWFHLElBQWdCLENBQzNCQyxHQUNBQyxHQUNBQyxNQUNHO0FBQ0MsTUFBQTtBQUNGLFVBQU1DLElBQVMsT0FBTyxXQUFXSCxFQUFNLFVBQVU7QUFDakQsUUFBSSxPQUFPLE1BQU1HLENBQU0sRUFBUyxPQUFBO0FBQzNCLFdBQU9BLEVBQU8sUUFBUUYsQ0FBYztBQUFBLFVBQy9CO0FBQ0gsV0FBQUM7QUFBQSxFQUFBO0FBRVgsR0FFYUUsSUFBYyxDQUN6QkosR0FDQUMsR0FDQUMsTUFDRztBQUNDLE1BQUE7QUFDRixVQUFNQyxJQUFTLE9BQU8sV0FBV0gsRUFBTSxVQUFVO0FBQ2pELFFBQUksT0FBTyxNQUFNRyxDQUFNLEVBQVMsT0FBQTtBQUU5QixXQUNFLEtBQUssTUFBTUEsSUFBUyxLQUFLLElBQUksSUFBSUYsQ0FBYyxDQUFDLElBQ2hELEtBQUssSUFBSSxJQUFJQSxDQUFjO0FBQUEsVUFFckI7QUFDSCxXQUFBQztBQUFBLEVBQUE7QUFFWCxHQUVhRyxJQUFhLENBQUNDLEdBQWNDLE1BQStCO0FBQ3RFLFFBQU1DLElBQWUsQ0FBQztBQUN0QixXQUFTQyxJQUFJLEdBQUdBLElBQUlILEVBQU0sUUFBUUcsS0FBS0Y7QUFDckMsSUFBQUMsRUFBSSxLQUFLRixFQUFNLE1BQU1HLEdBQUdBLElBQUlGLENBQVMsQ0FBQztBQUVqQyxTQUFBQztBQUNULEdBRWFFLElBQWlCLENBQUNWLE1BQzdCQSxJQUFRVyxFQUFhLE1BQU1BLEVBQWE7In0=\n","var A = Object.defineProperty;\nvar L = (s, r, E) => r in s ? A(s, r, { enumerable: !0, configurable: !0, writable: !0, value: E }) : s[r] = E;\nvar O = (s, r, E) => L(s, typeof r != \"symbol\" ? r + \"\" : r, E);\nclass _ {\n constructor(r, E, N, n) {\n O(this, \"className\");\n O(this, \"primaryComponent\");\n O(this, \"secondaryComponent\");\n O(this, \"colspan\");\n this.primaryComponent = r, this.secondaryComponent = E, this.colspan = n, this.className = N;\n }\n}\nvar a = /* @__PURE__ */ ((s) => (s[s.SEARCH = 0] = \"SEARCH\", s[s.FILTER = 1] = \"FILTER\", s[s.MOBILE_BOTTOM = 2] = \"MOBILE_BOTTOM\", s[s.SORT = 3] = \"SORT\", s))(a || {}), i = /* @__PURE__ */ ((s) => (s[s.ALL_PAGE = 0] = \"ALL_PAGE\", s[s.NONE_PAGE = 1] = \"NONE_PAGE\", s[s.NONE = 2] = \"NONE\", s))(i || {});\nexport {\n i as BulkCheckboxItem,\n _ as CustomHeadingItem,\n a as TableButtonItemType\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10YWJsZS5tb2RlbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2NvbXBvbmVudHMvYmFzZS10YWJsZS9iYXNlLXRhYmxlLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tIFwiQG1vZGVscy9maWx0ZXIubW9kZWwudHNcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiQGNvbXBvbmVudHMvbXVsdGktc2VsZWN0LWZpbHRlci1maWVsZC9tdWx0aS1zZWxlY3QtZmlsdGVyLWZpZWxkLmNvbXBvbmVudC50c3hcIjtcbmltcG9ydCB7IFNvcnRUeXBlIH0gZnJvbSBcIkBjb21wb25lbnRzL3NvcnQtaXRlbS9zb3J0LWl0ZW0ubW9kZWwudHNcIjtcbmltcG9ydCB7IEZpZWxkSXRlbSB9IGZyb20gXCJAY29tcG9uZW50cy9kcm9wZG93bi1maWVsZHMvZHJvcGRvd24tZmllbGRzLmNvbXBvbmVudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VUYWJsZVNlYXJjaEZpZWxkIHtcbiAgZmllbGROYW1lOiBzdHJpbmc7XG4gIGZpZWxkUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgZmllbGRDbGFzczogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ3VzdG9tSGVhZGluZ0l0ZW0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHByaW1hcnlDb21wb25lbnQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc2Vjb25kYXJ5Q29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb2xzcGFuPzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaW1hcnlDb21wb25lbnQ6IFJlYWN0LlJlYWN0Tm9kZSwgc2Vjb25kYXJ5Q29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlLCBjbGFzc05hbWU/OiBzdHJpbmcsIGNvbHNwYW4/OiBudW1iZXIpIHtcbiAgICB0aGlzLnByaW1hcnlDb21wb25lbnQgPSBwcmltYXJ5Q29tcG9uZW50O1xuICAgIHRoaXMuc2Vjb25kYXJ5Q29tcG9uZW50ID0gc2Vjb25kYXJ5Q29tcG9uZW50O1xuICAgIHRoaXMuY29sc3BhbiA9IGNvbHNwYW47XG4gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBIZWFkaW5nSXRlbSB7XG4gIHByaW1hcnk/OiBzdHJpbmc7XG4gIHByaW1hcnlTb3J0PzogYm9vbGVhbjtcbiAgc2Vjb25kYXJ5Pzogc3RyaW5nO1xuICBzZWNvbmRhcnlTb3J0YWJsZT86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGNsYXNzPzogc3RyaW5nO1xuICBoZWFkZXJBY3Rpb24/OiAoKSA9PiB2b2lkO1xuICBoZWFkZXJJY29uPzogc3RyaW5nO1xuICBjb2xzcGFuPzogbnVtYmVyO1xuICBjbGFzc01vYmlsZT86IHN0cmluZztcbiAgbW9iaWxlPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydGFibGVPcHRpb25zPzogYm9vbGVhbjtcbiAgYWN0aW9ucz86IGFueTtcbiAgaXNEYXRlPzogYm9vbGVhbjtcbiAgaXNUaW1lPzogYm9vbGVhbjtcbiAgc2VhcmNoRmllbGROYW1lPzogc3RyaW5nO1xuICBpc1JkcklucHV0UmFuZ2VzPzogYm9vbGVhbjtcbiAgc29ydEZpZWxkTmFtZT86IHN0cmluZztcbiAgc2Vjb25kYXJ5U29ydEZpZWxkTmFtZT86IHN0cmluZztcbiAgZHJvcGRvd25PcHRpb25zPzogT3B0aW9uVHlwZVtdO1xuICBpc0V4cGFuZGFibGVEcm9wZG93bj86IGJvb2xlYW4sXG4gIGV4dGVuZGVkRmllbGRzPzogRmllbGRJdGVtW107XG4gIGRyb3Bkb3duR3JvdXBzPzogYm9vbGVhbjtcbiAgZmllbGRTZWFyY2hOYW1lPzogc3RyaW5nO1xuICBpc1NlYXJjaFBhbmVsPzogYm9vbGVhbjtcbiAgc2VhcmNoUGFuZWxQbGFjZWhvbGRlcj86IHN0cmluZztcbiAgc2VhcmNoUGFuZWxMYWJlbD86IHN0cmluZztcbiAgc2VhcmNoRmllbGRBcnJheT86IEJhc2VUYWJsZVNlYXJjaEZpZWxkW107XG4gIHNlYXJjaFJvd3M/OiBudW1iZXI7XG4gIGRpc3BsYXlPbmx5VmFsdWVzPzogYm9vbGVhbjtcbiAgcHJpbWFyeUNsYXNzPzogc3RyaW5nO1xuICBzZWNvbmRhcnlDbGFzcz86IHN0cmluZztcbiAgaW5wdXRGaWVsZHM/OiBhbnk7XG4gIG5vRGVmYXVsdFZhbHVlcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIFRhYmxlQnV0dG9uSXRlbVR5cGUge1xuICBTRUFSQ0gsIC8vIHByZWRlZmluZWQgdHlwZSwgdG8gdXNlIG9ubHkgaW5zaWRlIEJhc2VUYWJsZVxuICBGSUxURVIsIC8vIHByZWRlZmluZWQgdHlwZSwgdG8gdXNlIG9ubHkgaW5zaWRlIEJhc2VUYWJsZVxuICBNT0JJTEVfQk9UVE9NLFxuICBTT1JULFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQnV0dG9uRHJvcGRvd25PcHRpb24ge1xuICBjbGFzczogc3RyaW5nO1xuICBhY3Rpb246ICgpID0+IGFueTtcbiAgdGl0bGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUJ1dHRvbkl0ZW0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG4gIHR5cGU/OiBUYWJsZUJ1dHRvbkl0ZW1UeXBlO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZHJvcERvd25PcHRpb25zPzogVGFibGVCdXR0b25Ecm9wZG93bk9wdGlvbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU3dpdGNoSXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVGaWx0ZXJJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzcGxheWVkVmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTb3J0SXRlbSB7XG4gIGlkOiBzdHJpbmc7XG4gIGRpcjogU29ydERpcmVjdGlvbjtcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogU29ydFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRhYmxlU2VhcmNoQ29tbXBvbmVudFByb3BzIHtcbiAgZmlsdGVySXRlbXM6IFRhYmxlRmlsdGVySXRlbVtdO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBvblNhdmU6ICh2YWx1ZXM6IFRhYmxlRmlsdGVySXRlbVtdLCBmaWx0ZXJUZW1wbGF0ZUlkPzogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VUYWJsZVNvcnRDb21tcG9uZW50UHJvcHMge1xuICBpdGVtczogVGFibGVTb3J0SXRlbVtdO1xuICBvbkNsb3NlOiAoKSA9PiB2b2lkO1xuICBvblNhdmU6IChzb3J0SXRlbXM6IFRhYmxlU29ydEl0ZW1bXSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGVudW0gQnVsa0NoZWNrYm94SXRlbSB7XG4gIEFMTF9QQUdFLFxuICBOT05FX1BBR0UsXG4gIE5PTkUsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxlcnRJdGVtIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBjb3VudD86IG51bWJlcjtcbiAgb25DbGljaz86ICgpID0+IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWxrQnV0dG9uUHJvcHMge1xuICBsYWJlbDogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGhhbmRsZXI6IChpdGVtcz86IGFueSkgPT4gYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VUYWJsZUJ1bGtTZWxlY3RBY3Rpb25Qcm9wcyB7XG4gIGRpc3BsYXk/OiBib29sZWFuO1xuICBidXR0b25zPzogQnVsa0J1dHRvblByb3BzW107XG4gIGl0ZW1zOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoYmFyQ29tcG9uZW50UHJvcHMge1xuICBkaXNwbGF5PzogYm9vbGVhbjtcbiAgdHJhbnNsYXRpb25zOiBzdHJpbmc7XG4gIGZvcm1pazogYW55O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNsYXNzTmFtZUlucHV0Pzogc3RyaW5nO1xuICBpc1N1Ym1pdEFsd2F5cz86IGJvb2xlYW47XG59XG4iXSwibmFtZXMiOlsiQ3VzdG9tSGVhZGluZ0l0ZW0iLCJwcmltYXJ5Q29tcG9uZW50Iiwic2Vjb25kYXJ5Q29tcG9uZW50IiwiY2xhc3NOYW1lIiwiY29sc3BhbiIsIl9fcHVibGljRmllbGQiLCJUYWJsZUJ1dHRvbkl0ZW1UeXBlIiwiVGFibGVCdXR0b25JdGVtVHlwZTIiLCJCdWxrQ2hlY2tib3hJdGVtIiwiQnVsa0NoZWNrYm94SXRlbTIiXSwibWFwcGluZ3MiOiI7OztBQVdPLE1BQU1BLEVBQWtCO0FBQUEsRUFNN0IsWUFBWUMsR0FBbUNDLEdBQXNDQyxHQUFvQkMsR0FBa0I7QUFMM0gsSUFBQUMsRUFBQTtBQUNBLElBQUFBLEVBQUE7QUFDQSxJQUFBQSxFQUFBO0FBQ0EsSUFBQUEsRUFBQTtBQUdFLFNBQUssbUJBQW1CSixHQUN4QixLQUFLLHFCQUFxQkMsR0FDMUIsS0FBSyxVQUFVRSxHQUNmLEtBQUssWUFBWUQ7QUFBQSxFQUFBO0FBRXJCO0FBeUNZLElBQUFHLHNCQUFBQSxPQUNWQSxFQUFBQyxFQUFBLFNBQUEsQ0FBQSxJQUFBLFVBQ0FELEVBQUFDLEVBQUEsU0FBQSxDQUFBLElBQUEsVUFDQUQsRUFBQUMsRUFBQSxnQkFBQSxDQUFBLElBQUEsaUJBQ0FELEVBQUFDLEVBQUEsT0FBQSxDQUFBLElBQUEsUUFKVUQsSUFBQUEsS0FBQSxDQUFBLENBQUEsR0FxREFFLHNCQUFBQSxPQUNWQSxFQUFBQyxFQUFBLFdBQUEsQ0FBQSxJQUFBLFlBQ0FELEVBQUFDLEVBQUEsWUFBQSxDQUFBLElBQUEsYUFDQUQsRUFBQUMsRUFBQSxPQUFBLENBQUEsSUFBQSxRQUhVRCxJQUFBQSxLQUFBLENBQUEsQ0FBQTsifQ==\n","function Ne(e, t) {\n return function() {\n return e.apply(t, arguments);\n };\n}\nconst { toString: Ze } = Object.prototype, { getPrototypeOf: ce } = Object, $ = /* @__PURE__ */ ((e) => (t) => {\n const n = Ze.call(t);\n return e[n] || (e[n] = n.slice(8, -1).toLowerCase());\n})(/* @__PURE__ */ Object.create(null)), C = (e) => (e = e.toLowerCase(), (t) => $(t) === e), v = (e) => (t) => typeof t === e, { isArray: U } = Array, q = v(\"undefined\");\nfunction Ye(e) {\n return e !== null && !q(e) && e.constructor !== null && !q(e.constructor) && x(e.constructor.isBuffer) && e.constructor.isBuffer(e);\n}\nconst Pe = C(\"ArrayBuffer\");\nfunction et(e) {\n let t;\n return typeof ArrayBuffer < \"u\" && ArrayBuffer.isView ? t = ArrayBuffer.isView(e) : t = e && e.buffer && Pe(e.buffer), t;\n}\nconst tt = v(\"string\"), x = v(\"function\"), _e = v(\"number\"), K = (e) => e !== null && typeof e == \"object\", nt = (e) => e === !0 || e === !1, z = (e) => {\n if ($(e) !== \"object\")\n return !1;\n const t = ce(e);\n return (t === null || t === Object.prototype || Object.getPrototypeOf(t) === null) && !(Symbol.toStringTag in e) && !(Symbol.iterator in e);\n}, rt = C(\"Date\"), st = C(\"File\"), ot = C(\"Blob\"), it = C(\"FileList\"), at = (e) => K(e) && x(e.pipe), ct = (e) => {\n let t;\n return e && (typeof FormData == \"function\" && e instanceof FormData || x(e.append) && ((t = $(e)) === \"formdata\" || // detect form-data instance\n t === \"object\" && x(e.toString) && e.toString() === \"[object FormData]\"));\n}, ut = C(\"URLSearchParams\"), [lt, ft, dt, pt] = [\"ReadableStream\", \"Request\", \"Response\", \"Headers\"].map(C), ht = (e) => e.trim ? e.trim() : e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\nfunction I(e, t, { allOwnKeys: n = !1 } = {}) {\n if (e === null || typeof e > \"u\")\n return;\n let r, s;\n if (typeof e != \"object\" && (e = [e]), U(e))\n for (r = 0, s = e.length; r < s; r++)\n t.call(null, e[r], r, e);\n else {\n const o = n ? Object.getOwnPropertyNames(e) : Object.keys(e), i = o.length;\n let c;\n for (r = 0; r < i; r++)\n c = o[r], t.call(null, e[c], c, e);\n }\n}\nfunction Fe(e, t) {\n t = t.toLowerCase();\n const n = Object.keys(e);\n let r = n.length, s;\n for (; r-- > 0; )\n if (s = n[r], t === s.toLowerCase())\n return s;\n return null;\n}\nconst L = typeof globalThis < \"u\" ? globalThis : typeof self < \"u\" ? self : typeof window < \"u\" ? window : global, Le = (e) => !q(e) && e !== L;\nfunction te() {\n const { caseless: e } = Le(this) && this || {}, t = {}, n = (r, s) => {\n const o = e && Fe(t, s) || s;\n z(t[o]) && z(r) ? t[o] = te(t[o], r) : z(r) ? t[o] = te({}, r) : U(r) ? t[o] = r.slice() : t[o] = r;\n };\n for (let r = 0, s = arguments.length; r < s; r++)\n arguments[r] && I(arguments[r], n);\n return t;\n}\nconst mt = (e, t, n, { allOwnKeys: r } = {}) => (I(t, (s, o) => {\n n && x(s) ? e[o] = Ne(s, n) : e[o] = s;\n}, { allOwnKeys: r }), e), yt = (e) => (e.charCodeAt(0) === 65279 && (e = e.slice(1)), e), bt = (e, t, n, r) => {\n e.prototype = Object.create(t.prototype, r), e.prototype.constructor = e, Object.defineProperty(e, \"super\", {\n value: t.prototype\n }), n && Object.assign(e.prototype, n);\n}, wt = (e, t, n, r) => {\n let s, o, i;\n const c = {};\n if (t = t || {}, e == null) return t;\n do {\n for (s = Object.getOwnPropertyNames(e), o = s.length; o-- > 0; )\n i = s[o], (!r || r(i, e, t)) && !c[i] && (t[i] = e[i], c[i] = !0);\n e = n !== !1 && ce(e);\n } while (e && (!n || n(e, t)) && e !== Object.prototype);\n return t;\n}, Et = (e, t, n) => {\n e = String(e), (n === void 0 || n > e.length) && (n = e.length), n -= t.length;\n const r = e.indexOf(t, n);\n return r !== -1 && r === n;\n}, Rt = (e) => {\n if (!e) return null;\n if (U(e)) return e;\n let t = e.length;\n if (!_e(t)) return null;\n const n = new Array(t);\n for (; t-- > 0; )\n n[t] = e[t];\n return n;\n}, St = /* @__PURE__ */ ((e) => (t) => e && t instanceof e)(typeof Uint8Array < \"u\" && ce(Uint8Array)), gt = (e, t) => {\n const r = (e && e[Symbol.iterator]).call(e);\n let s;\n for (; (s = r.next()) && !s.done; ) {\n const o = s.value;\n t.call(e, o[0], o[1]);\n }\n}, Ot = (e, t) => {\n let n;\n const r = [];\n for (; (n = e.exec(t)) !== null; )\n r.push(n);\n return r;\n}, Tt = C(\"HTMLFormElement\"), At = (e) => e.toLowerCase().replace(\n /[-_\\s]([a-z\\d])(\\w*)/g,\n function(n, r, s) {\n return r.toUpperCase() + s;\n }\n), he = (({ hasOwnProperty: e }) => (t, n) => e.call(t, n))(Object.prototype), xt = C(\"RegExp\"), Be = (e, t) => {\n const n = Object.getOwnPropertyDescriptors(e), r = {};\n I(n, (s, o) => {\n let i;\n (i = t(s, o, e)) !== !1 && (r[o] = i || s);\n }), Object.defineProperties(e, r);\n}, Ct = (e) => {\n Be(e, (t, n) => {\n if (x(e) && [\"arguments\", \"caller\", \"callee\"].indexOf(n) !== -1)\n return !1;\n const r = e[n];\n if (x(r)) {\n if (t.enumerable = !1, \"writable\" in t) {\n t.writable = !1;\n return;\n }\n t.set || (t.set = () => {\n throw Error(\"Can not rewrite read-only method '\" + n + \"'\");\n });\n }\n });\n}, Nt = (e, t) => {\n const n = {}, r = (s) => {\n s.forEach((o) => {\n n[o] = !0;\n });\n };\n return U(e) ? r(e) : r(String(e).split(t)), n;\n}, Pt = () => {\n}, _t = (e, t) => e != null && Number.isFinite(e = +e) ? e : t, Q = \"abcdefghijklmnopqrstuvwxyz\", me = \"0123456789\", De = {\n DIGIT: me,\n ALPHA: Q,\n ALPHA_DIGIT: Q + Q.toUpperCase() + me\n}, Ft = (e = 16, t = De.ALPHA_DIGIT) => {\n let n = \"\";\n const { length: r } = t;\n for (; e--; )\n n += t[Math.random() * r | 0];\n return n;\n};\nfunction Lt(e) {\n return !!(e && x(e.append) && e[Symbol.toStringTag] === \"FormData\" && e[Symbol.iterator]);\n}\nconst Bt = (e) => {\n const t = new Array(10), n = (r, s) => {\n if (K(r)) {\n if (t.indexOf(r) >= 0)\n return;\n if (!(\"toJSON\" in r)) {\n t[s] = r;\n const o = U(r) ? [] : {};\n return I(r, (i, c) => {\n const f = n(i, s + 1);\n !q(f) && (o[c] = f);\n }), t[s] = void 0, o;\n }\n }\n return r;\n };\n return n(e, 0);\n}, Dt = C(\"AsyncFunction\"), Ut = (e) => e && (K(e) || x(e)) && x(e.then) && x(e.catch), Ue = ((e, t) => e ? setImmediate : t ? ((n, r) => (L.addEventListener(\"message\", ({ source: s, data: o }) => {\n s === L && o === n && r.length && r.shift()();\n}, !1), (s) => {\n r.push(s), L.postMessage(n, \"*\");\n}))(`axios@${Math.random()}`, []) : (n) => setTimeout(n))(\n typeof setImmediate == \"function\",\n x(L.postMessage)\n), kt = typeof queueMicrotask < \"u\" ? queueMicrotask.bind(L) : typeof process < \"u\" && process.nextTick || Ue, a = {\n isArray: U,\n isArrayBuffer: Pe,\n isBuffer: Ye,\n isFormData: ct,\n isArrayBufferView: et,\n isString: tt,\n isNumber: _e,\n isBoolean: nt,\n isObject: K,\n isPlainObject: z,\n isReadableStream: lt,\n isRequest: ft,\n isResponse: dt,\n isHeaders: pt,\n isUndefined: q,\n isDate: rt,\n isFile: st,\n isBlob: ot,\n isRegExp: xt,\n isFunction: x,\n isStream: at,\n isURLSearchParams: ut,\n isTypedArray: St,\n isFileList: it,\n forEach: I,\n merge: te,\n extend: mt,\n trim: ht,\n stripBOM: yt,\n inherits: bt,\n toFlatObject: wt,\n kindOf: $,\n kindOfTest: C,\n endsWith: Et,\n toArray: Rt,\n forEachEntry: gt,\n matchAll: Ot,\n isHTMLForm: Tt,\n hasOwnProperty: he,\n hasOwnProp: he,\n // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors: Be,\n freezeMethods: Ct,\n toObjectSet: Nt,\n toCamelCase: At,\n noop: Pt,\n toFiniteNumber: _t,\n findKey: Fe,\n global: L,\n isContextDefined: Le,\n ALPHABET: De,\n generateString: Ft,\n isSpecCompliantForm: Lt,\n toJSONObject: Bt,\n isAsyncFn: Dt,\n isThenable: Ut,\n setImmediate: Ue,\n asap: kt\n};\nfunction m(e, t, n, r, s) {\n Error.call(this), Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : this.stack = new Error().stack, this.message = e, this.name = \"AxiosError\", t && (this.code = t), n && (this.config = n), r && (this.request = r), s && (this.response = s, this.status = s.status ? s.status : null);\n}\na.inherits(m, Error, {\n toJSON: function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: a.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\nconst ke = m.prototype, je = {};\n[\n \"ERR_BAD_OPTION_VALUE\",\n \"ERR_BAD_OPTION\",\n \"ECONNABORTED\",\n \"ETIMEDOUT\",\n \"ERR_NETWORK\",\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"ERR_DEPRECATED\",\n \"ERR_BAD_RESPONSE\",\n \"ERR_BAD_REQUEST\",\n \"ERR_CANCELED\",\n \"ERR_NOT_SUPPORT\",\n \"ERR_INVALID_URL\"\n // eslint-disable-next-line func-names\n].forEach((e) => {\n je[e] = { value: e };\n});\nObject.defineProperties(m, je);\nObject.defineProperty(ke, \"isAxiosError\", { value: !0 });\nm.from = (e, t, n, r, s, o) => {\n const i = Object.create(ke);\n return a.toFlatObject(e, i, function(f) {\n return f !== Error.prototype;\n }, (c) => c !== \"isAxiosError\"), m.call(i, e.message, t, n, r, s), i.cause = e, i.name = e.name, o && Object.assign(i, o), i;\n};\nconst jt = null;\nfunction ne(e) {\n return a.isPlainObject(e) || a.isArray(e);\n}\nfunction qe(e) {\n return a.endsWith(e, \"[]\") ? e.slice(0, -2) : e;\n}\nfunction ye(e, t, n) {\n return e ? e.concat(t).map(function(s, o) {\n return s = qe(s), !n && o ? \"[\" + s + \"]\" : s;\n }).join(n ? \".\" : \"\") : t;\n}\nfunction qt(e) {\n return a.isArray(e) && !e.some(ne);\n}\nconst It = a.toFlatObject(a, {}, null, function(t) {\n return /^is[A-Z]/.test(t);\n});\nfunction G(e, t, n) {\n if (!a.isObject(e))\n throw new TypeError(\"target must be an object\");\n t = t || new FormData(), n = a.toFlatObject(n, {\n metaTokens: !0,\n dots: !1,\n indexes: !1\n }, !1, function(y, h) {\n return !a.isUndefined(h[y]);\n });\n const r = n.metaTokens, s = n.visitor || l, o = n.dots, i = n.indexes, f = (n.Blob || typeof Blob < \"u\" && Blob) && a.isSpecCompliantForm(t);\n if (!a.isFunction(s))\n throw new TypeError(\"visitor must be a function\");\n function u(p) {\n if (p === null) return \"\";\n if (a.isDate(p))\n return p.toISOString();\n if (!f && a.isBlob(p))\n throw new m(\"Blob is not supported. Use a Buffer instead.\");\n return a.isArrayBuffer(p) || a.isTypedArray(p) ? f && typeof Blob == \"function\" ? new Blob([p]) : Buffer.from(p) : p;\n }\n function l(p, y, h) {\n let w = p;\n if (p && !h && typeof p == \"object\") {\n if (a.endsWith(y, \"{}\"))\n y = r ? y : y.slice(0, -2), p = JSON.stringify(p);\n else if (a.isArray(p) && qt(p) || (a.isFileList(p) || a.endsWith(y, \"[]\")) && (w = a.toArray(p)))\n return y = qe(y), w.forEach(function(g, N) {\n !(a.isUndefined(g) || g === null) && t.append(\n // eslint-disable-next-line no-nested-ternary\n i === !0 ? ye([y], N, o) : i === null ? y : y + \"[]\",\n u(g)\n );\n }), !1;\n }\n return ne(p) ? !0 : (t.append(ye(h, y, o), u(p)), !1);\n }\n const d = [], b = Object.assign(It, {\n defaultVisitor: l,\n convertValue: u,\n isVisitable: ne\n });\n function R(p, y) {\n if (!a.isUndefined(p)) {\n if (d.indexOf(p) !== -1)\n throw Error(\"Circular reference detected in \" + y.join(\".\"));\n d.push(p), a.forEach(p, function(w, S) {\n (!(a.isUndefined(w) || w === null) && s.call(\n t,\n w,\n a.isString(S) ? S.trim() : S,\n y,\n b\n )) === !0 && R(w, y ? y.concat(S) : [S]);\n }), d.pop();\n }\n }\n if (!a.isObject(e))\n throw new TypeError(\"data must be an object\");\n return R(e), t;\n}\nfunction be(e) {\n const t = {\n \"!\": \"%21\",\n \"'\": \"%27\",\n \"(\": \"%28\",\n \")\": \"%29\",\n \"~\": \"%7E\",\n \"%20\": \"+\",\n \"%00\": \"\\0\"\n };\n return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g, function(r) {\n return t[r];\n });\n}\nfunction ue(e, t) {\n this._pairs = [], e && G(e, this, t);\n}\nconst Ie = ue.prototype;\nIe.append = function(t, n) {\n this._pairs.push([t, n]);\n};\nIe.toString = function(t) {\n const n = t ? function(r) {\n return t.call(this, r, be);\n } : be;\n return this._pairs.map(function(s) {\n return n(s[0]) + \"=\" + n(s[1]);\n }, \"\").join(\"&\");\n};\nfunction Ht(e) {\n return encodeURIComponent(e).replace(/%3A/gi, \":\").replace(/%24/g, \"$\").replace(/%2C/gi, \",\").replace(/%20/g, \"+\").replace(/%5B/gi, \"[\").replace(/%5D/gi, \"]\");\n}\nfunction He(e, t, n) {\n if (!t)\n return e;\n const r = n && n.encode || Ht, s = n && n.serialize;\n let o;\n if (s ? o = s(t, n) : o = a.isURLSearchParams(t) ? t.toString() : new ue(t, n).toString(r), o) {\n const i = e.indexOf(\"#\");\n i !== -1 && (e = e.slice(0, i)), e += (e.indexOf(\"?\") === -1 ? \"?\" : \"&\") + o;\n }\n return e;\n}\nclass we {\n constructor() {\n this.handlers = [];\n }\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(t, n, r) {\n return this.handlers.push({\n fulfilled: t,\n rejected: n,\n synchronous: r ? r.synchronous : !1,\n runWhen: r ? r.runWhen : null\n }), this.handlers.length - 1;\n }\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(t) {\n this.handlers[t] && (this.handlers[t] = null);\n }\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n this.handlers && (this.handlers = []);\n }\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(t) {\n a.forEach(this.handlers, function(r) {\n r !== null && t(r);\n });\n }\n}\nconst Me = {\n silentJSONParsing: !0,\n forcedJSONParsing: !0,\n clarifyTimeoutError: !1\n}, Mt = typeof URLSearchParams < \"u\" ? URLSearchParams : ue, zt = typeof FormData < \"u\" ? FormData : null, Jt = typeof Blob < \"u\" ? Blob : null, Vt = {\n isBrowser: !0,\n classes: {\n URLSearchParams: Mt,\n FormData: zt,\n Blob: Jt\n },\n protocols: [\"http\", \"https\", \"file\", \"blob\", \"url\", \"data\"]\n}, le = typeof window < \"u\" && typeof document < \"u\", re = typeof navigator == \"object\" && navigator || void 0, Wt = le && (!re || [\"ReactNative\", \"NativeScript\", \"NS\"].indexOf(re.product) < 0), $t = typeof WorkerGlobalScope < \"u\" && // eslint-disable-next-line no-undef\nself instanceof WorkerGlobalScope && typeof self.importScripts == \"function\", vt = le && window.location.href || \"http://localhost\", Kt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n hasBrowserEnv: le,\n hasStandardBrowserEnv: Wt,\n hasStandardBrowserWebWorkerEnv: $t,\n navigator: re,\n origin: vt\n}, Symbol.toStringTag, { value: \"Module\" })), T = {\n ...Kt,\n ...Vt\n};\nfunction Gt(e, t) {\n return G(e, new T.classes.URLSearchParams(), Object.assign({\n visitor: function(n, r, s, o) {\n return T.isNode && a.isBuffer(n) ? (this.append(r, n.toString(\"base64\")), !1) : o.defaultVisitor.apply(this, arguments);\n }\n }, t));\n}\nfunction Xt(e) {\n return a.matchAll(/\\w+|\\[(\\w*)]/g, e).map((t) => t[0] === \"[]\" ? \"\" : t[1] || t[0]);\n}\nfunction Qt(e) {\n const t = {}, n = Object.keys(e);\n let r;\n const s = n.length;\n let o;\n for (r = 0; r < s; r++)\n o = n[r], t[o] = e[o];\n return t;\n}\nfunction ze(e) {\n function t(n, r, s, o) {\n let i = n[o++];\n if (i === \"__proto__\") return !0;\n const c = Number.isFinite(+i), f = o >= n.length;\n return i = !i && a.isArray(s) ? s.length : i, f ? (a.hasOwnProp(s, i) ? s[i] = [s[i], r] : s[i] = r, !c) : ((!s[i] || !a.isObject(s[i])) && (s[i] = []), t(n, r, s[i], o) && a.isArray(s[i]) && (s[i] = Qt(s[i])), !c);\n }\n if (a.isFormData(e) && a.isFunction(e.entries)) {\n const n = {};\n return a.forEachEntry(e, (r, s) => {\n t(Xt(r), s, n, 0);\n }), n;\n }\n return null;\n}\nfunction Zt(e, t, n) {\n if (a.isString(e))\n try {\n return (t || JSON.parse)(e), a.trim(e);\n } catch (r) {\n if (r.name !== \"SyntaxError\")\n throw r;\n }\n return (0, JSON.stringify)(e);\n}\nconst H = {\n transitional: Me,\n adapter: [\"xhr\", \"http\", \"fetch\"],\n transformRequest: [function(t, n) {\n const r = n.getContentType() || \"\", s = r.indexOf(\"application/json\") > -1, o = a.isObject(t);\n if (o && a.isHTMLForm(t) && (t = new FormData(t)), a.isFormData(t))\n return s ? JSON.stringify(ze(t)) : t;\n if (a.isArrayBuffer(t) || a.isBuffer(t) || a.isStream(t) || a.isFile(t) || a.isBlob(t) || a.isReadableStream(t))\n return t;\n if (a.isArrayBufferView(t))\n return t.buffer;\n if (a.isURLSearchParams(t))\n return n.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\", !1), t.toString();\n let c;\n if (o) {\n if (r.indexOf(\"application/x-www-form-urlencoded\") > -1)\n return Gt(t, this.formSerializer).toString();\n if ((c = a.isFileList(t)) || r.indexOf(\"multipart/form-data\") > -1) {\n const f = this.env && this.env.FormData;\n return G(\n c ? { \"files[]\": t } : t,\n f && new f(),\n this.formSerializer\n );\n }\n }\n return o || s ? (n.setContentType(\"application/json\", !1), Zt(t)) : t;\n }],\n transformResponse: [function(t) {\n const n = this.transitional || H.transitional, r = n && n.forcedJSONParsing, s = this.responseType === \"json\";\n if (a.isResponse(t) || a.isReadableStream(t))\n return t;\n if (t && a.isString(t) && (r && !this.responseType || s)) {\n const i = !(n && n.silentJSONParsing) && s;\n try {\n return JSON.parse(t);\n } catch (c) {\n if (i)\n throw c.name === \"SyntaxError\" ? m.from(c, m.ERR_BAD_RESPONSE, this, null, this.response) : c;\n }\n }\n return t;\n }],\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: \"XSRF-TOKEN\",\n xsrfHeaderName: \"X-XSRF-TOKEN\",\n maxContentLength: -1,\n maxBodyLength: -1,\n env: {\n FormData: T.classes.FormData,\n Blob: T.classes.Blob\n },\n validateStatus: function(t) {\n return t >= 200 && t < 300;\n },\n headers: {\n common: {\n Accept: \"application/json, text/plain, */*\",\n \"Content-Type\": void 0\n }\n }\n};\na.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\"], (e) => {\n H.headers[e] = {};\n});\nconst Yt = a.toObjectSet([\n \"age\",\n \"authorization\",\n \"content-length\",\n \"content-type\",\n \"etag\",\n \"expires\",\n \"from\",\n \"host\",\n \"if-modified-since\",\n \"if-unmodified-since\",\n \"last-modified\",\n \"location\",\n \"max-forwards\",\n \"proxy-authorization\",\n \"referer\",\n \"retry-after\",\n \"user-agent\"\n]), en = (e) => {\n const t = {};\n let n, r, s;\n return e && e.split(`\n`).forEach(function(i) {\n s = i.indexOf(\":\"), n = i.substring(0, s).trim().toLowerCase(), r = i.substring(s + 1).trim(), !(!n || t[n] && Yt[n]) && (n === \"set-cookie\" ? t[n] ? t[n].push(r) : t[n] = [r] : t[n] = t[n] ? t[n] + \", \" + r : r);\n }), t;\n}, Ee = Symbol(\"internals\");\nfunction j(e) {\n return e && String(e).trim().toLowerCase();\n}\nfunction J(e) {\n return e === !1 || e == null ? e : a.isArray(e) ? e.map(J) : String(e);\n}\nfunction tn(e) {\n const t = /* @__PURE__ */ Object.create(null), n = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let r;\n for (; r = n.exec(e); )\n t[r[1]] = r[2];\n return t;\n}\nconst nn = (e) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());\nfunction Z(e, t, n, r, s) {\n if (a.isFunction(r))\n return r.call(this, t, n);\n if (s && (t = n), !!a.isString(t)) {\n if (a.isString(r))\n return t.indexOf(r) !== -1;\n if (a.isRegExp(r))\n return r.test(t);\n }\n}\nfunction rn(e) {\n return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (t, n, r) => n.toUpperCase() + r);\n}\nfunction sn(e, t) {\n const n = a.toCamelCase(\" \" + t);\n [\"get\", \"set\", \"has\"].forEach((r) => {\n Object.defineProperty(e, r + n, {\n value: function(s, o, i) {\n return this[r].call(this, t, s, o, i);\n },\n configurable: !0\n });\n });\n}\nclass A {\n constructor(t) {\n t && this.set(t);\n }\n set(t, n, r) {\n const s = this;\n function o(c, f, u) {\n const l = j(f);\n if (!l)\n throw new Error(\"header name must be a non-empty string\");\n const d = a.findKey(s, l);\n (!d || s[d] === void 0 || u === !0 || u === void 0 && s[d] !== !1) && (s[d || f] = J(c));\n }\n const i = (c, f) => a.forEach(c, (u, l) => o(u, l, f));\n if (a.isPlainObject(t) || t instanceof this.constructor)\n i(t, n);\n else if (a.isString(t) && (t = t.trim()) && !nn(t))\n i(en(t), n);\n else if (a.isHeaders(t))\n for (const [c, f] of t.entries())\n o(f, c, r);\n else\n t != null && o(n, t, r);\n return this;\n }\n get(t, n) {\n if (t = j(t), t) {\n const r = a.findKey(this, t);\n if (r) {\n const s = this[r];\n if (!n)\n return s;\n if (n === !0)\n return tn(s);\n if (a.isFunction(n))\n return n.call(this, s, r);\n if (a.isRegExp(n))\n return n.exec(s);\n throw new TypeError(\"parser must be boolean|regexp|function\");\n }\n }\n }\n has(t, n) {\n if (t = j(t), t) {\n const r = a.findKey(this, t);\n return !!(r && this[r] !== void 0 && (!n || Z(this, this[r], r, n)));\n }\n return !1;\n }\n delete(t, n) {\n const r = this;\n let s = !1;\n function o(i) {\n if (i = j(i), i) {\n const c = a.findKey(r, i);\n c && (!n || Z(r, r[c], c, n)) && (delete r[c], s = !0);\n }\n }\n return a.isArray(t) ? t.forEach(o) : o(t), s;\n }\n clear(t) {\n const n = Object.keys(this);\n let r = n.length, s = !1;\n for (; r--; ) {\n const o = n[r];\n (!t || Z(this, this[o], o, t, !0)) && (delete this[o], s = !0);\n }\n return s;\n }\n normalize(t) {\n const n = this, r = {};\n return a.forEach(this, (s, o) => {\n const i = a.findKey(r, o);\n if (i) {\n n[i] = J(s), delete n[o];\n return;\n }\n const c = t ? rn(o) : String(o).trim();\n c !== o && delete n[o], n[c] = J(s), r[c] = !0;\n }), this;\n }\n concat(...t) {\n return this.constructor.concat(this, ...t);\n }\n toJSON(t) {\n const n = /* @__PURE__ */ Object.create(null);\n return a.forEach(this, (r, s) => {\n r != null && r !== !1 && (n[s] = t && a.isArray(r) ? r.join(\", \") : r);\n }), n;\n }\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n toString() {\n return Object.entries(this.toJSON()).map(([t, n]) => t + \": \" + n).join(`\n`);\n }\n get [Symbol.toStringTag]() {\n return \"AxiosHeaders\";\n }\n static from(t) {\n return t instanceof this ? t : new this(t);\n }\n static concat(t, ...n) {\n const r = new this(t);\n return n.forEach((s) => r.set(s)), r;\n }\n static accessor(t) {\n const r = (this[Ee] = this[Ee] = {\n accessors: {}\n }).accessors, s = this.prototype;\n function o(i) {\n const c = j(i);\n r[c] || (sn(s, i), r[c] = !0);\n }\n return a.isArray(t) ? t.forEach(o) : o(t), this;\n }\n}\nA.accessor([\"Content-Type\", \"Content-Length\", \"Accept\", \"Accept-Encoding\", \"User-Agent\", \"Authorization\"]);\na.reduceDescriptors(A.prototype, ({ value: e }, t) => {\n let n = t[0].toUpperCase() + t.slice(1);\n return {\n get: () => e,\n set(r) {\n this[n] = r;\n }\n };\n});\na.freezeMethods(A);\nfunction Y(e, t) {\n const n = this || H, r = t || n, s = A.from(r.headers);\n let o = r.data;\n return a.forEach(e, function(c) {\n o = c.call(n, o, s.normalize(), t ? t.status : void 0);\n }), s.normalize(), o;\n}\nfunction Je(e) {\n return !!(e && e.__CANCEL__);\n}\nfunction k(e, t, n) {\n m.call(this, e ?? \"canceled\", m.ERR_CANCELED, t, n), this.name = \"CanceledError\";\n}\na.inherits(k, m, {\n __CANCEL__: !0\n});\nfunction Ve(e, t, n) {\n const r = n.config.validateStatus;\n !n.status || !r || r(n.status) ? e(n) : t(new m(\n \"Request failed with status code \" + n.status,\n [m.ERR_BAD_REQUEST, m.ERR_BAD_RESPONSE][Math.floor(n.status / 100) - 4],\n n.config,\n n.request,\n n\n ));\n}\nfunction on(e) {\n const t = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(e);\n return t && t[1] || \"\";\n}\nfunction an(e, t) {\n e = e || 10;\n const n = new Array(e), r = new Array(e);\n let s = 0, o = 0, i;\n return t = t !== void 0 ? t : 1e3, function(f) {\n const u = Date.now(), l = r[o];\n i || (i = u), n[s] = f, r[s] = u;\n let d = o, b = 0;\n for (; d !== s; )\n b += n[d++], d = d % e;\n if (s = (s + 1) % e, s === o && (o = (o + 1) % e), u - i < t)\n return;\n const R = l && u - l;\n return R ? Math.round(b * 1e3 / R) : void 0;\n };\n}\nfunction cn(e, t) {\n let n = 0, r = 1e3 / t, s, o;\n const i = (u, l = Date.now()) => {\n n = l, s = null, o && (clearTimeout(o), o = null), e.apply(null, u);\n };\n return [(...u) => {\n const l = Date.now(), d = l - n;\n d >= r ? i(u, l) : (s = u, o || (o = setTimeout(() => {\n o = null, i(s);\n }, r - d)));\n }, () => s && i(s)];\n}\nconst V = (e, t, n = 3) => {\n let r = 0;\n const s = an(50, 250);\n return cn((o) => {\n const i = o.loaded, c = o.lengthComputable ? o.total : void 0, f = i - r, u = s(f), l = i <= c;\n r = i;\n const d = {\n loaded: i,\n total: c,\n progress: c ? i / c : void 0,\n bytes: f,\n rate: u || void 0,\n estimated: u && c && l ? (c - i) / u : void 0,\n event: o,\n lengthComputable: c != null,\n [t ? \"download\" : \"upload\"]: !0\n };\n e(d);\n }, n);\n}, Re = (e, t) => {\n const n = e != null;\n return [(r) => t[0]({\n lengthComputable: n,\n total: e,\n loaded: r\n }), t[1]];\n}, Se = (e) => (...t) => a.asap(() => e(...t)), un = T.hasStandardBrowserEnv ? (\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n function() {\n const t = T.navigator && /(msie|trident)/i.test(T.navigator.userAgent), n = document.createElement(\"a\");\n let r;\n function s(o) {\n let i = o;\n return t && (n.setAttribute(\"href\", i), i = n.href), n.setAttribute(\"href\", i), {\n href: n.href,\n protocol: n.protocol ? n.protocol.replace(/:$/, \"\") : \"\",\n host: n.host,\n search: n.search ? n.search.replace(/^\\?/, \"\") : \"\",\n hash: n.hash ? n.hash.replace(/^#/, \"\") : \"\",\n hostname: n.hostname,\n port: n.port,\n pathname: n.pathname.charAt(0) === \"/\" ? n.pathname : \"/\" + n.pathname\n };\n }\n return r = s(window.location.href), function(i) {\n const c = a.isString(i) ? s(i) : i;\n return c.protocol === r.protocol && c.host === r.host;\n };\n }()\n) : (\n // Non standard browser envs (web workers, react-native) lack needed support.\n /* @__PURE__ */ function() {\n return function() {\n return !0;\n };\n }()\n), ln = T.hasStandardBrowserEnv ? (\n // Standard browser envs support document.cookie\n {\n write(e, t, n, r, s, o) {\n const i = [e + \"=\" + encodeURIComponent(t)];\n a.isNumber(n) && i.push(\"expires=\" + new Date(n).toGMTString()), a.isString(r) && i.push(\"path=\" + r), a.isString(s) && i.push(\"domain=\" + s), o === !0 && i.push(\"secure\"), document.cookie = i.join(\"; \");\n },\n read(e) {\n const t = document.cookie.match(new RegExp(\"(^|;\\\\s*)(\" + e + \")=([^;]*)\"));\n return t ? decodeURIComponent(t[3]) : null;\n },\n remove(e) {\n this.write(e, \"\", Date.now() - 864e5);\n }\n }\n) : (\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {\n },\n read() {\n return null;\n },\n remove() {\n }\n }\n);\nfunction fn(e) {\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(e);\n}\nfunction dn(e, t) {\n return t ? e.replace(/\\/?\\/$/, \"\") + \"/\" + t.replace(/^\\/+/, \"\") : e;\n}\nfunction We(e, t) {\n return e && !fn(t) ? dn(e, t) : t;\n}\nconst ge = (e) => e instanceof A ? { ...e } : e;\nfunction D(e, t) {\n t = t || {};\n const n = {};\n function r(u, l, d) {\n return a.isPlainObject(u) && a.isPlainObject(l) ? a.merge.call({ caseless: d }, u, l) : a.isPlainObject(l) ? a.merge({}, l) : a.isArray(l) ? l.slice() : l;\n }\n function s(u, l, d) {\n if (a.isUndefined(l)) {\n if (!a.isUndefined(u))\n return r(void 0, u, d);\n } else return r(u, l, d);\n }\n function o(u, l) {\n if (!a.isUndefined(l))\n return r(void 0, l);\n }\n function i(u, l) {\n if (a.isUndefined(l)) {\n if (!a.isUndefined(u))\n return r(void 0, u);\n } else return r(void 0, l);\n }\n function c(u, l, d) {\n if (d in t)\n return r(u, l);\n if (d in e)\n return r(void 0, u);\n }\n const f = {\n url: o,\n method: o,\n data: o,\n baseURL: i,\n transformRequest: i,\n transformResponse: i,\n paramsSerializer: i,\n timeout: i,\n timeoutMessage: i,\n withCredentials: i,\n withXSRFToken: i,\n adapter: i,\n responseType: i,\n xsrfCookieName: i,\n xsrfHeaderName: i,\n onUploadProgress: i,\n onDownloadProgress: i,\n decompress: i,\n maxContentLength: i,\n maxBodyLength: i,\n beforeRedirect: i,\n transport: i,\n httpAgent: i,\n httpsAgent: i,\n cancelToken: i,\n socketPath: i,\n responseEncoding: i,\n validateStatus: c,\n headers: (u, l) => s(ge(u), ge(l), !0)\n };\n return a.forEach(Object.keys(Object.assign({}, e, t)), function(l) {\n const d = f[l] || s, b = d(e[l], t[l], l);\n a.isUndefined(b) && d !== c || (n[l] = b);\n }), n;\n}\nconst $e = (e) => {\n const t = D({}, e);\n let { data: n, withXSRFToken: r, xsrfHeaderName: s, xsrfCookieName: o, headers: i, auth: c } = t;\n t.headers = i = A.from(i), t.url = He(We(t.baseURL, t.url), e.params, e.paramsSerializer), c && i.set(\n \"Authorization\",\n \"Basic \" + btoa((c.username || \"\") + \":\" + (c.password ? unescape(encodeURIComponent(c.password)) : \"\"))\n );\n let f;\n if (a.isFormData(n)) {\n if (T.hasStandardBrowserEnv || T.hasStandardBrowserWebWorkerEnv)\n i.setContentType(void 0);\n else if ((f = i.getContentType()) !== !1) {\n const [u, ...l] = f ? f.split(\";\").map((d) => d.trim()).filter(Boolean) : [];\n i.setContentType([u || \"multipart/form-data\", ...l].join(\"; \"));\n }\n }\n if (T.hasStandardBrowserEnv && (r && a.isFunction(r) && (r = r(t)), r || r !== !1 && un(t.url))) {\n const u = s && o && ln.read(o);\n u && i.set(s, u);\n }\n return t;\n}, pn = typeof XMLHttpRequest < \"u\", hn = pn && function(e) {\n return new Promise(function(n, r) {\n const s = $e(e);\n let o = s.data;\n const i = A.from(s.headers).normalize();\n let { responseType: c, onUploadProgress: f, onDownloadProgress: u } = s, l, d, b, R, p;\n function y() {\n R && R(), p && p(), s.cancelToken && s.cancelToken.unsubscribe(l), s.signal && s.signal.removeEventListener(\"abort\", l);\n }\n let h = new XMLHttpRequest();\n h.open(s.method.toUpperCase(), s.url, !0), h.timeout = s.timeout;\n function w() {\n if (!h)\n return;\n const g = A.from(\n \"getAllResponseHeaders\" in h && h.getAllResponseHeaders()\n ), O = {\n data: !c || c === \"text\" || c === \"json\" ? h.responseText : h.response,\n status: h.status,\n statusText: h.statusText,\n headers: g,\n config: e,\n request: h\n };\n Ve(function(F) {\n n(F), y();\n }, function(F) {\n r(F), y();\n }, O), h = null;\n }\n \"onloadend\" in h ? h.onloadend = w : h.onreadystatechange = function() {\n !h || h.readyState !== 4 || h.status === 0 && !(h.responseURL && h.responseURL.indexOf(\"file:\") === 0) || setTimeout(w);\n }, h.onabort = function() {\n h && (r(new m(\"Request aborted\", m.ECONNABORTED, e, h)), h = null);\n }, h.onerror = function() {\n r(new m(\"Network Error\", m.ERR_NETWORK, e, h)), h = null;\n }, h.ontimeout = function() {\n let N = s.timeout ? \"timeout of \" + s.timeout + \"ms exceeded\" : \"timeout exceeded\";\n const O = s.transitional || Me;\n s.timeoutErrorMessage && (N = s.timeoutErrorMessage), r(new m(\n N,\n O.clarifyTimeoutError ? m.ETIMEDOUT : m.ECONNABORTED,\n e,\n h\n )), h = null;\n }, o === void 0 && i.setContentType(null), \"setRequestHeader\" in h && a.forEach(i.toJSON(), function(N, O) {\n h.setRequestHeader(O, N);\n }), a.isUndefined(s.withCredentials) || (h.withCredentials = !!s.withCredentials), c && c !== \"json\" && (h.responseType = s.responseType), u && ([b, p] = V(u, !0), h.addEventListener(\"progress\", b)), f && h.upload && ([d, R] = V(f), h.upload.addEventListener(\"progress\", d), h.upload.addEventListener(\"loadend\", R)), (s.cancelToken || s.signal) && (l = (g) => {\n h && (r(!g || g.type ? new k(null, e, h) : g), h.abort(), h = null);\n }, s.cancelToken && s.cancelToken.subscribe(l), s.signal && (s.signal.aborted ? l() : s.signal.addEventListener(\"abort\", l)));\n const S = on(s.url);\n if (S && T.protocols.indexOf(S) === -1) {\n r(new m(\"Unsupported protocol \" + S + \":\", m.ERR_BAD_REQUEST, e));\n return;\n }\n h.send(o || null);\n });\n}, mn = (e, t) => {\n const { length: n } = e = e ? e.filter(Boolean) : [];\n if (t || n) {\n let r = new AbortController(), s;\n const o = function(u) {\n if (!s) {\n s = !0, c();\n const l = u instanceof Error ? u : this.reason;\n r.abort(l instanceof m ? l : new k(l instanceof Error ? l.message : l));\n }\n };\n let i = t && setTimeout(() => {\n i = null, o(new m(`timeout ${t} of ms exceeded`, m.ETIMEDOUT));\n }, t);\n const c = () => {\n e && (i && clearTimeout(i), i = null, e.forEach((u) => {\n u.unsubscribe ? u.unsubscribe(o) : u.removeEventListener(\"abort\", o);\n }), e = null);\n };\n e.forEach((u) => u.addEventListener(\"abort\", o));\n const { signal: f } = r;\n return f.unsubscribe = () => a.asap(c), f;\n }\n}, yn = function* (e, t) {\n let n = e.byteLength;\n if (n < t) {\n yield e;\n return;\n }\n let r = 0, s;\n for (; r < n; )\n s = r + t, yield e.slice(r, s), r = s;\n}, bn = async function* (e, t) {\n for await (const n of wn(e))\n yield* yn(n, t);\n}, wn = async function* (e) {\n if (e[Symbol.asyncIterator]) {\n yield* e;\n return;\n }\n const t = e.getReader();\n try {\n for (; ; ) {\n const { done: n, value: r } = await t.read();\n if (n)\n break;\n yield r;\n }\n } finally {\n await t.cancel();\n }\n}, Oe = (e, t, n, r) => {\n const s = bn(e, t);\n let o = 0, i, c = (f) => {\n i || (i = !0, r && r(f));\n };\n return new ReadableStream({\n async pull(f) {\n try {\n const { done: u, value: l } = await s.next();\n if (u) {\n c(), f.close();\n return;\n }\n let d = l.byteLength;\n if (n) {\n let b = o += d;\n n(b);\n }\n f.enqueue(new Uint8Array(l));\n } catch (u) {\n throw c(u), u;\n }\n },\n cancel(f) {\n return c(f), s.return();\n }\n }, {\n highWaterMark: 2\n });\n}, X = typeof fetch == \"function\" && typeof Request == \"function\" && typeof Response == \"function\", ve = X && typeof ReadableStream == \"function\", En = X && (typeof TextEncoder == \"function\" ? /* @__PURE__ */ ((e) => (t) => e.encode(t))(new TextEncoder()) : async (e) => new Uint8Array(await new Response(e).arrayBuffer())), Ke = (e, ...t) => {\n try {\n return !!e(...t);\n } catch {\n return !1;\n }\n}, Rn = ve && Ke(() => {\n let e = !1;\n const t = new Request(T.origin, {\n body: new ReadableStream(),\n method: \"POST\",\n get duplex() {\n return e = !0, \"half\";\n }\n }).headers.has(\"Content-Type\");\n return e && !t;\n}), Te = 64 * 1024, se = ve && Ke(() => a.isReadableStream(new Response(\"\").body)), W = {\n stream: se && ((e) => e.body)\n};\nX && ((e) => {\n [\"text\", \"arrayBuffer\", \"blob\", \"formData\", \"stream\"].forEach((t) => {\n !W[t] && (W[t] = a.isFunction(e[t]) ? (n) => n[t]() : (n, r) => {\n throw new m(`Response type '${t}' is not supported`, m.ERR_NOT_SUPPORT, r);\n });\n });\n})(new Response());\nconst Sn = async (e) => {\n if (e == null)\n return 0;\n if (a.isBlob(e))\n return e.size;\n if (a.isSpecCompliantForm(e))\n return (await new Request(T.origin, {\n method: \"POST\",\n body: e\n }).arrayBuffer()).byteLength;\n if (a.isArrayBufferView(e) || a.isArrayBuffer(e))\n return e.byteLength;\n if (a.isURLSearchParams(e) && (e = e + \"\"), a.isString(e))\n return (await En(e)).byteLength;\n}, gn = async (e, t) => {\n const n = a.toFiniteNumber(e.getContentLength());\n return n ?? Sn(t);\n}, On = X && (async (e) => {\n let {\n url: t,\n method: n,\n data: r,\n signal: s,\n cancelToken: o,\n timeout: i,\n onDownloadProgress: c,\n onUploadProgress: f,\n responseType: u,\n headers: l,\n withCredentials: d = \"same-origin\",\n fetchOptions: b\n } = $e(e);\n u = u ? (u + \"\").toLowerCase() : \"text\";\n let R = mn([s, o && o.toAbortSignal()], i), p;\n const y = R && R.unsubscribe && (() => {\n R.unsubscribe();\n });\n let h;\n try {\n if (f && Rn && n !== \"get\" && n !== \"head\" && (h = await gn(l, r)) !== 0) {\n let O = new Request(t, {\n method: \"POST\",\n body: r,\n duplex: \"half\"\n }), P;\n if (a.isFormData(r) && (P = O.headers.get(\"content-type\")) && l.setContentType(P), O.body) {\n const [F, M] = Re(\n h,\n V(Se(f))\n );\n r = Oe(O.body, Te, F, M);\n }\n }\n a.isString(d) || (d = d ? \"include\" : \"omit\");\n const w = \"credentials\" in Request.prototype;\n p = new Request(t, {\n ...b,\n signal: R,\n method: n.toUpperCase(),\n headers: l.normalize().toJSON(),\n body: r,\n duplex: \"half\",\n credentials: w ? d : void 0\n });\n let S = await fetch(p);\n const g = se && (u === \"stream\" || u === \"response\");\n if (se && (c || g && y)) {\n const O = {};\n [\"status\", \"statusText\", \"headers\"].forEach((pe) => {\n O[pe] = S[pe];\n });\n const P = a.toFiniteNumber(S.headers.get(\"content-length\")), [F, M] = c && Re(\n P,\n V(Se(c), !0)\n ) || [];\n S = new Response(\n Oe(S.body, Te, F, () => {\n M && M(), y && y();\n }),\n O\n );\n }\n u = u || \"text\";\n let N = await W[a.findKey(W, u) || \"text\"](S, e);\n return !g && y && y(), await new Promise((O, P) => {\n Ve(O, P, {\n data: N,\n headers: A.from(S.headers),\n status: S.status,\n statusText: S.statusText,\n config: e,\n request: p\n });\n });\n } catch (w) {\n throw y && y(), w && w.name === \"TypeError\" && /fetch/i.test(w.message) ? Object.assign(\n new m(\"Network Error\", m.ERR_NETWORK, e, p),\n {\n cause: w.cause || w\n }\n ) : m.from(w, w && w.code, e, p);\n }\n}), oe = {\n http: jt,\n xhr: hn,\n fetch: On\n};\na.forEach(oe, (e, t) => {\n if (e) {\n try {\n Object.defineProperty(e, \"name\", { value: t });\n } catch {\n }\n Object.defineProperty(e, \"adapterName\", { value: t });\n }\n});\nconst Ae = (e) => `- ${e}`, Tn = (e) => a.isFunction(e) || e === null || e === !1, Ge = {\n getAdapter: (e) => {\n e = a.isArray(e) ? e : [e];\n const { length: t } = e;\n let n, r;\n const s = {};\n for (let o = 0; o < t; o++) {\n n = e[o];\n let i;\n if (r = n, !Tn(n) && (r = oe[(i = String(n)).toLowerCase()], r === void 0))\n throw new m(`Unknown adapter '${i}'`);\n if (r)\n break;\n s[i || \"#\" + o] = r;\n }\n if (!r) {\n const o = Object.entries(s).map(\n ([c, f]) => `adapter ${c} ` + (f === !1 ? \"is not supported by the environment\" : \"is not available in the build\")\n );\n let i = t ? o.length > 1 ? `since :\n` + o.map(Ae).join(`\n`) : \" \" + Ae(o[0]) : \"as no adapter specified\";\n throw new m(\n \"There is no suitable adapter to dispatch the request \" + i,\n \"ERR_NOT_SUPPORT\"\n );\n }\n return r;\n },\n adapters: oe\n};\nfunction ee(e) {\n if (e.cancelToken && e.cancelToken.throwIfRequested(), e.signal && e.signal.aborted)\n throw new k(null, e);\n}\nfunction xe(e) {\n return ee(e), e.headers = A.from(e.headers), e.data = Y.call(\n e,\n e.transformRequest\n ), [\"post\", \"put\", \"patch\"].indexOf(e.method) !== -1 && e.headers.setContentType(\"application/x-www-form-urlencoded\", !1), Ge.getAdapter(e.adapter || H.adapter)(e).then(function(r) {\n return ee(e), r.data = Y.call(\n e,\n e.transformResponse,\n r\n ), r.headers = A.from(r.headers), r;\n }, function(r) {\n return Je(r) || (ee(e), r && r.response && (r.response.data = Y.call(\n e,\n e.transformResponse,\n r.response\n ), r.response.headers = A.from(r.response.headers))), Promise.reject(r);\n });\n}\nconst Xe = \"1.7.7\", fe = {};\n[\"object\", \"boolean\", \"number\", \"function\", \"string\", \"symbol\"].forEach((e, t) => {\n fe[e] = function(r) {\n return typeof r === e || \"a\" + (t < 1 ? \"n \" : \" \") + e;\n };\n});\nconst Ce = {};\nfe.transitional = function(t, n, r) {\n function s(o, i) {\n return \"[Axios v\" + Xe + \"] Transitional option '\" + o + \"'\" + i + (r ? \". \" + r : \"\");\n }\n return (o, i, c) => {\n if (t === !1)\n throw new m(\n s(i, \" has been removed\" + (n ? \" in \" + n : \"\")),\n m.ERR_DEPRECATED\n );\n return n && !Ce[i] && (Ce[i] = !0, console.warn(\n s(\n i,\n \" has been deprecated since v\" + n + \" and will be removed in the near future\"\n )\n )), t ? t(o, i, c) : !0;\n };\n};\nfunction An(e, t, n) {\n if (typeof e != \"object\")\n throw new m(\"options must be an object\", m.ERR_BAD_OPTION_VALUE);\n const r = Object.keys(e);\n let s = r.length;\n for (; s-- > 0; ) {\n const o = r[s], i = t[o];\n if (i) {\n const c = e[o], f = c === void 0 || i(c, o, e);\n if (f !== !0)\n throw new m(\"option \" + o + \" must be \" + f, m.ERR_BAD_OPTION_VALUE);\n continue;\n }\n if (n !== !0)\n throw new m(\"Unknown option \" + o, m.ERR_BAD_OPTION);\n }\n}\nconst ie = {\n assertOptions: An,\n validators: fe\n}, _ = ie.validators;\nclass B {\n constructor(t) {\n this.defaults = t, this.interceptors = {\n request: new we(),\n response: new we()\n };\n }\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(t, n) {\n try {\n return await this._request(t, n);\n } catch (r) {\n if (r instanceof Error) {\n let s;\n Error.captureStackTrace ? Error.captureStackTrace(s = {}) : s = new Error();\n const o = s.stack ? s.stack.replace(/^.+\\n/, \"\") : \"\";\n try {\n r.stack ? o && !String(r.stack).endsWith(o.replace(/^.+\\n.+\\n/, \"\")) && (r.stack += `\n` + o) : r.stack = o;\n } catch {\n }\n }\n throw r;\n }\n }\n _request(t, n) {\n typeof t == \"string\" ? (n = n || {}, n.url = t) : n = t || {}, n = D(this.defaults, n);\n const { transitional: r, paramsSerializer: s, headers: o } = n;\n r !== void 0 && ie.assertOptions(r, {\n silentJSONParsing: _.transitional(_.boolean),\n forcedJSONParsing: _.transitional(_.boolean),\n clarifyTimeoutError: _.transitional(_.boolean)\n }, !1), s != null && (a.isFunction(s) ? n.paramsSerializer = {\n serialize: s\n } : ie.assertOptions(s, {\n encode: _.function,\n serialize: _.function\n }, !0)), n.method = (n.method || this.defaults.method || \"get\").toLowerCase();\n let i = o && a.merge(\n o.common,\n o[n.method]\n );\n o && a.forEach(\n [\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\", \"common\"],\n (p) => {\n delete o[p];\n }\n ), n.headers = A.concat(i, o);\n const c = [];\n let f = !0;\n this.interceptors.request.forEach(function(y) {\n typeof y.runWhen == \"function\" && y.runWhen(n) === !1 || (f = f && y.synchronous, c.unshift(y.fulfilled, y.rejected));\n });\n const u = [];\n this.interceptors.response.forEach(function(y) {\n u.push(y.fulfilled, y.rejected);\n });\n let l, d = 0, b;\n if (!f) {\n const p = [xe.bind(this), void 0];\n for (p.unshift.apply(p, c), p.push.apply(p, u), b = p.length, l = Promise.resolve(n); d < b; )\n l = l.then(p[d++], p[d++]);\n return l;\n }\n b = c.length;\n let R = n;\n for (d = 0; d < b; ) {\n const p = c[d++], y = c[d++];\n try {\n R = p(R);\n } catch (h) {\n y.call(this, h);\n break;\n }\n }\n try {\n l = xe.call(this, R);\n } catch (p) {\n return Promise.reject(p);\n }\n for (d = 0, b = u.length; d < b; )\n l = l.then(u[d++], u[d++]);\n return l;\n }\n getUri(t) {\n t = D(this.defaults, t);\n const n = We(t.baseURL, t.url);\n return He(n, t.params, t.paramsSerializer);\n }\n}\na.forEach([\"delete\", \"get\", \"head\", \"options\"], function(t) {\n B.prototype[t] = function(n, r) {\n return this.request(D(r || {}, {\n method: t,\n url: n,\n data: (r || {}).data\n }));\n };\n});\na.forEach([\"post\", \"put\", \"patch\"], function(t) {\n function n(r) {\n return function(o, i, c) {\n return this.request(D(c || {}, {\n method: t,\n headers: r ? {\n \"Content-Type\": \"multipart/form-data\"\n } : {},\n url: o,\n data: i\n }));\n };\n }\n B.prototype[t] = n(), B.prototype[t + \"Form\"] = n(!0);\n});\nclass de {\n constructor(t) {\n if (typeof t != \"function\")\n throw new TypeError(\"executor must be a function.\");\n let n;\n this.promise = new Promise(function(o) {\n n = o;\n });\n const r = this;\n this.promise.then((s) => {\n if (!r._listeners) return;\n let o = r._listeners.length;\n for (; o-- > 0; )\n r._listeners[o](s);\n r._listeners = null;\n }), this.promise.then = (s) => {\n let o;\n const i = new Promise((c) => {\n r.subscribe(c), o = c;\n }).then(s);\n return i.cancel = function() {\n r.unsubscribe(o);\n }, i;\n }, t(function(o, i, c) {\n r.reason || (r.reason = new k(o, i, c), n(r.reason));\n });\n }\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason)\n throw this.reason;\n }\n /**\n * Subscribe to the cancel signal\n */\n subscribe(t) {\n if (this.reason) {\n t(this.reason);\n return;\n }\n this._listeners ? this._listeners.push(t) : this._listeners = [t];\n }\n /**\n * Unsubscribe from the cancel signal\n */\n unsubscribe(t) {\n if (!this._listeners)\n return;\n const n = this._listeners.indexOf(t);\n n !== -1 && this._listeners.splice(n, 1);\n }\n toAbortSignal() {\n const t = new AbortController(), n = (r) => {\n t.abort(r);\n };\n return this.subscribe(n), t.signal.unsubscribe = () => this.unsubscribe(n), t.signal;\n }\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let t;\n return {\n token: new de(function(s) {\n t = s;\n }),\n cancel: t\n };\n }\n}\nfunction xn(e) {\n return function(n) {\n return e.apply(null, n);\n };\n}\nfunction Cn(e) {\n return a.isObject(e) && e.isAxiosError === !0;\n}\nconst ae = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511\n};\nObject.entries(ae).forEach(([e, t]) => {\n ae[t] = e;\n});\nfunction Qe(e) {\n const t = new B(e), n = Ne(B.prototype.request, t);\n return a.extend(n, B.prototype, t, { allOwnKeys: !0 }), a.extend(n, t, null, { allOwnKeys: !0 }), n.create = function(s) {\n return Qe(D(e, s));\n }, n;\n}\nconst E = Qe(H);\nE.Axios = B;\nE.CanceledError = k;\nE.CancelToken = de;\nE.isCancel = Je;\nE.VERSION = Xe;\nE.toFormData = G;\nE.AxiosError = m;\nE.Cancel = E.CanceledError;\nE.all = function(t) {\n return Promise.all(t);\n};\nE.spread = xn;\nE.isAxiosError = Cn;\nE.mergeConfig = D;\nE.AxiosHeaders = A;\nE.formToJSON = (e) => ze(a.isHTMLForm(e) ? new FormData(e) : e);\nE.getAdapter = Ge.getAdapter;\nE.HttpStatusCode = ae;\nE.default = E;\nconst Nn = (e) => E.interceptors.response.use(void 0, (t) => (t.response.status === 401 && e.logout(), Promise.reject(t)));\nexport {\n Nn as initAxios\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3MuaW50ZXJjZXB0b3JzLmpzIiwic291cmNlcyI6WyIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYmluZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9udWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Jsb2IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2NvbW1vbi91dGlscy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zSGVhZGVycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvaXNDYW5jZWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Rocm90dGxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2ZldGNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9hZGFwdGVycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbFRva2VuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0F4aW9zRXJyb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwiLi4vLi4vbGliL2ludGVyY2VwdG9ycy9heGlvcy5pbnRlcmNlcHRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKCkge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgd2hpbGUgKHNpemUtLSkge1xuICAgIHN0ciArPSBhbHBoYWJldFtNYXRoLnJhbmRvbSgpICogbGVuZ3RofDBdXG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHJldHVybiB2aXNpdChvYmosIDApO1xufVxuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZSxcbiAgc2V0SW1tZWRpYXRlOiBfc2V0SW1tZWRpYXRlLFxuICBhc2FwXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA/IHJlc3BvbnNlLnN0YXR1cyA6IG51bGw7XG4gIH1cbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxuZXhwb3J0IGRlZmF1bHQgbnVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlKTtcbiAgfSA6IGVuY29kZTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMnO1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgICAgZm4oaCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnID8gVVJMU2VhcmNoUGFyYW1zIDogQXhpb3NVUkxTZWFyY2hQYXJhbXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0IGRlZmF1bHQgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGxcbiIsImltcG9ydCBVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICcuL2NsYXNzZXMvRm9ybURhdGEuanMnXG5pbXBvcnQgQmxvYiBmcm9tICcuL2NsYXNzZXMvQmxvYi5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcbiIsImNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG5jb25zdCBfbmF2aWdhdG9yID0gdHlwZW9mIG5hdmlnYXRvciA9PT0gJ29iamVjdCcgJiYgbmF2aWdhdG9yIHx8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IGhhc0Jyb3dzZXJFbnYgJiZcbiAgKCFfbmF2aWdhdG9yIHx8IFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihfbmF2aWdhdG9yLnByb2R1Y3QpIDwgMCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG5leHBvcnQge1xuICBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudixcbiAgX25hdmlnYXRvciBhcyBuYXZpZ2F0b3IsXG4gIG9yaWdpblxufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLCBuYW1lKS5tYXAobWF0Y2ggPT4ge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gYXJyYXkgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNvbnZlcnQgdG8gYW4gb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBhcyB0aGUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5VG9PYmplY3QoYXJyKSB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgbGV0IGk7XG4gIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICBsZXQga2V5O1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldO1xuICAgIG9ialtrZXldID0gYXJyW2tleV07XG4gIH1cbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIEZvcm1EYXRhIG9iamVjdCBhbmQgcmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gY29udmVydCB0byBKU09OLlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+IHwgbnVsbH0gVGhlIGNvbnZlcnRlZCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIGxldCBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBOdW1iZXIuaXNGaW5pdGUoK25hbWUpO1xuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID49IHBhdGgubGVuZ3RoO1xuICAgIG5hbWUgPSAhbmFtZSAmJiB1dGlscy5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscy5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldFtuYW1lXSwgaW5kZXgpO1xuXG4gICAgaWYgKHJlc3VsdCAmJiB1dGlscy5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscy5pc0Z1bmN0aW9uKGZvcm1EYXRhLmVudHJpZXMpKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGRlZmF1bHQgcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBwYXJzZUhlYWRlcnMgZnJvbSAnLi4vaGVscGVycy9wYXJzZUhlYWRlcnMuanMnO1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscy5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBzcGVlZG9tZXRlcjtcbiIsIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfVxuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpXG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwiaW1wb3J0IHNwZWVkb21ldGVyIGZyb20gXCIuL3NwZWVkb21ldGVyLmpzXCI7XG5pbXBvcnQgdGhyb3R0bGUgZnJvbSBcIi4vdGhyb3R0bGUuanNcIjtcbmltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuZXhwb3J0IGNvbnN0IHByb2dyZXNzRXZlbnRSZWR1Y2VyID0gKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtLCBmcmVxID0gMykgPT4ge1xuICBsZXQgYnl0ZXNOb3RpZmllZCA9IDA7XG4gIGNvbnN0IF9zcGVlZG9tZXRlciA9IHNwZWVkb21ldGVyKDUwLCAyNTApO1xuXG4gIHJldHVybiB0aHJvdHRsZShlID0+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBlLmxvYWRlZDtcbiAgICBjb25zdCB0b3RhbCA9IGUubGVuZ3RoQ29tcHV0YWJsZSA/IGUudG90YWwgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZ3Jlc3NCeXRlcyA9IGxvYWRlZCAtIGJ5dGVzTm90aWZpZWQ7XG4gICAgY29uc3QgcmF0ZSA9IF9zcGVlZG9tZXRlcihwcm9ncmVzc0J5dGVzKTtcbiAgICBjb25zdCBpblJhbmdlID0gbG9hZGVkIDw9IHRvdGFsO1xuXG4gICAgYnl0ZXNOb3RpZmllZCA9IGxvYWRlZDtcblxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBsb2FkZWQsXG4gICAgICB0b3RhbCxcbiAgICAgIHByb2dyZXNzOiB0b3RhbCA/IChsb2FkZWQgLyB0b3RhbCkgOiB1bmRlZmluZWQsXG4gICAgICBieXRlczogcHJvZ3Jlc3NCeXRlcyxcbiAgICAgIHJhdGU6IHJhdGUgPyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXN0aW1hdGVkOiByYXRlICYmIHRvdGFsICYmIGluUmFuZ2UgPyAodG90YWwgLSBsb2FkZWQpIC8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiBlLFxuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdG90YWwgIT0gbnVsbCxcbiAgICAgIFtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXTogdHJ1ZVxuICAgIH07XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yID0gKHRvdGFsLCB0aHJvdHRsZWQpID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG5cbiAgcmV0dXJuIFsobG9hZGVkKSA9PiB0aHJvdHRsZWRbMF0oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pLCB0aHJvdHRsZWRbMV1dO1xufVxuXG5leHBvcnQgY29uc3QgYXN5bmNEZWNvcmF0b3IgPSAoZm4pID0+ICguLi5hcmdzKSA9PiB1dGlscy5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcblxuZXhwb3J0IGRlZmF1bHQgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscy5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgaXNBYnNvbHV0ZVVSTCBmcm9tICcuLi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMnO1xuaW1wb3J0IGNvbWJpbmVVUkxzIGZyb20gJy4uL2hlbHBlcnMvY29tYmluZVVSTHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL0F4aW9zSGVhZGVycy5qc1wiO1xuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tIFwiLi9pc1VSTFNhbWVPcmlnaW4uanNcIjtcbmltcG9ydCBjb29raWVzIGZyb20gXCIuL2Nvb2tpZXMuanNcIjtcbmltcG9ydCBidWlsZEZ1bGxQYXRoIGZyb20gXCIuLi9jb3JlL2J1aWxkRnVsbFBhdGguanNcIjtcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tIFwiLi4vY29yZS9tZXJnZUNvbmZpZy5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBidWlsZFVSTCBmcm9tIFwiLi9idWlsZFVSTC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn1cblxuIiwiaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuaW1wb3J0IHNldHRsZSBmcm9tICcuLy4uL2NvcmUvc2V0dGxlLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQge3Byb2dyZXNzRXZlbnRSZWR1Y2VyfSBmcm9tICcuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzJztcbmltcG9ydCByZXNvbHZlQ29uZmlnIGZyb20gXCIuLi9oZWxwZXJzL3Jlc29sdmVDb25maWcuanNcIjtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSBcIi4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwiXG5leHBvcnQgY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZWFkU3RyZWFtKGl0ZXJhYmxlKSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhjaHVuaywgY2h1bmtTaXplKTtcbiAgfVxufVxuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgX29uRmluaXNoKCk7XG4gICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgIGxldCBsb2FkZWRCeXRlcyA9IGJ5dGVzICs9IGxlbjtcbiAgICAgICAgICBvblByb2dyZXNzKGxvYWRlZEJ5dGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBfb25GaW5pc2goZXJyKTtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgX29uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufVxuIiwiaW1wb3J0IHBsYXRmb3JtIGZyb20gXCIuLi9wbGF0Zm9ybS9pbmRleC5qc1wiO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuaW1wb3J0IGNvbXBvc2VTaWduYWxzIGZyb20gXCIuLi9oZWxwZXJzL2NvbXBvc2VTaWduYWxzLmpzXCI7XG5pbXBvcnQge3RyYWNrU3RyZWFtfSBmcm9tIFwiLi4vaGVscGVycy90cmFja1N0cmVhbS5qc1wiO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXIsIHByb2dyZXNzRXZlbnREZWNvcmF0b3IsIGFzeW5jRGVjb3JhdG9yfSBmcm9tIFwiLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qc1wiO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuaW1wb3J0IHNldHRsZSBmcm9tIFwiLi4vY29yZS9zZXR0bGUuanNcIjtcblxuY29uc3QgaXNGZXRjaFN1cHBvcnRlZCA9IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgUmVzcG9uc2UgPT09ICdmdW5jdGlvbic7XG5jb25zdCBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gaXNGZXRjaFN1cHBvcnRlZCAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5cbi8vIHVzZWQgb25seSBpbnNpZGUgdGhlIGZldGNoIGFkYXB0ZXJcbmNvbnN0IGVuY29kZVRleHQgPSBpc0ZldGNoU3VwcG9ydGVkICYmICh0eXBlb2YgVGV4dEVuY29kZXIgPT09ICdmdW5jdGlvbicgP1xuICAgICgoZW5jb2RlcikgPT4gKHN0cikgPT4gZW5jb2Rlci5lbmNvZGUoc3RyKSkobmV3IFRleHRFbmNvZGVyKCkpIDpcbiAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2Uoc3RyKS5hcnJheUJ1ZmZlcigpKVxuKTtcblxuY29uc3QgdGVzdCA9IChmbiwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIWZuKC4uLmFyZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCAmJiB0ZXN0KCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gIHRlc3QoKCkgPT4gdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoJycpLmJvZHkpKTtcblxuXG5jb25zdCByZXNvbHZlcnMgPSB7XG4gIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG59O1xuXG5pc0ZldGNoU3VwcG9ydGVkICYmICgoKHJlcykgPT4ge1xuICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICFyZXNvbHZlcnNbdHlwZV0gJiYgKHJlc29sdmVyc1t0eXBlXSA9IHV0aWxzLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pXG4gIH0pO1xufSkobmV3IFJlc3BvbnNlKSk7XG5cbmNvbnN0IGdldEJvZHlMZW5ndGggPSBhc3luYyAoYm9keSkgPT4ge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih1dGlscy5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gICAgcmV0dXJuIChhd2FpdCBfcmVxdWVzdC5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMuaXNBcnJheUJ1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscy5pc1N0cmluZyhib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgZW5jb2RlVGV4dChib2R5KSkuYnl0ZUxlbmd0aDtcbiAgfVxufVxuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICByZXR1cm4gbGVuZ3RoID09IG51bGwgPyBnZXRCb2R5TGVuZ3RoKGJvZHkpIDogbGVuZ3RoO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBjb21wb3NlZFNpZ25hbCA9IGNvbXBvc2VTaWduYWxzKFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sIHRpbWVvdXQpO1xuXG4gIGxldCByZXF1ZXN0O1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUgJiYgKCgpID0+IHtcbiAgICAgIGNvbXBvc2VkU2lnbmFsLnVuc3Vic2NyaWJlKCk7XG4gIH0pO1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvd29ya2VyZC9pc3N1ZXMvOTAyXG4gICAgY29uc3QgaXNDcmVkZW50aWFsc1N1cHBvcnRlZCA9IFwiY3JlZGVudGlhbHNcIiBpbiBSZXF1ZXN0LnByb3RvdHlwZTtcbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID8gd2l0aENyZWRlbnRpYWxzIDogdW5kZWZpbmVkXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0KTtcblxuICAgIGNvbnN0IGlzU3RyZWFtUmVzcG9uc2UgPSBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChyZXNwb25zZVR5cGUgPT09ICdzdHJlYW0nIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3Jlc3BvbnNlJyk7XG5cbiAgICBpZiAoc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAob25Eb3dubG9hZFByb2dyZXNzIHx8IChpc1N0cmVhbVJlc3BvbnNlICYmIHVuc3Vic2NyaWJlKSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzLnRvRmluaXRlTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKTtcblxuICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUpXG4gICAgICApIHx8IFtdO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCAoKSA9PiB7XG4gICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuICAgICAgICB9KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscy5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuXG4iLCJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHJhbnNmb3JtRGF0YSBmcm9tICcuL3RyYW5zZm9ybURhdGEuanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4uL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSBcIi4uL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzXCI7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS43LjdcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscy5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgdG9BYm9ydFNpZ25hbCgpIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVycik7XG4gICAgfTtcblxuICAgIHRoaXMuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIGNvbnRyb2xsZXIuc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdGhpcy51bnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICByZXR1cm4gY29udHJvbGxlci5zaWduYWw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxUb2tlbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iLCJjb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgSHR0cFN0YXR1c0NvZGU7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCBiaW5kIGZyb20gJy4vaGVscGVycy9iaW5kLmpzJztcbmltcG9ydCBBeGlvcyBmcm9tICcuL2NvcmUvQXhpb3MuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vY29yZS9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi9kZWZhdWx0cy9pbmRleC5qcyc7XG5pbXBvcnQgZm9ybURhdGFUb0pTT04gZnJvbSAnLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbFRva2VuIGZyb20gJy4vY2FuY2VsL0NhbmNlbFRva2VuLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuL2NhbmNlbC9pc0NhbmNlbC5qcyc7XG5pbXBvcnQge1ZFUlNJT059IGZyb20gJy4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi9oZWxwZXJzL3RvRm9ybURhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHNwcmVhZCBmcm9tICcuL2hlbHBlcnMvc3ByZWFkLmpzJztcbmltcG9ydCBpc0F4aW9zRXJyb3IgZnJvbSAnLi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuL2NvcmUvQXhpb3NIZWFkZXJzLmpzXCI7XG5pbXBvcnQgYWRhcHRlcnMgZnJvbSAnLi9hZGFwdGVycy9hZGFwdGVycy5qcyc7XG5pbXBvcnQgSHR0cFN0YXR1c0NvZGUgZnJvbSAnLi9oZWxwZXJzL0h0dHBTdGF0dXNDb2RlLmpzJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW47XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCJpbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbmV4cG9ydCBjb25zdCBpbml0QXhpb3MgPSAoYXV0aFNlcnZpY2U6IGFueSkgPT5cbiAgYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZSh1bmRlZmluZWQsIChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvci5yZXNwb25zZS5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgYXV0aFNlcnZpY2UubG9nb3V0KCk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH0pO1xuIl0sIm5hbWVzIjpbImJpbmQiLCJmbiIsInRoaXNBcmciLCJ0b1N0cmluZyIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsInN0ciIsImtpbmRPZlRlc3QiLCJ0eXBlIiwidHlwZU9mVGVzdCIsImlzQXJyYXkiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwidmFsIiwiaXNGdW5jdGlvbiIsImlzQXJyYXlCdWZmZXIiLCJpc0FycmF5QnVmZmVyVmlldyIsInJlc3VsdCIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzQm9vbGVhbiIsImlzUGxhaW5PYmplY3QiLCJwcm90b3R5cGUiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNTdHJlYW0iLCJpc0Zvcm1EYXRhIiwia2luZCIsImlzVVJMU2VhcmNoUGFyYW1zIiwiaXNSZWFkYWJsZVN0cmVhbSIsImlzUmVxdWVzdCIsImlzUmVzcG9uc2UiLCJpc0hlYWRlcnMiLCJ0cmltIiwiZm9yRWFjaCIsIm9iaiIsImFsbE93bktleXMiLCJpIiwibCIsImtleXMiLCJsZW4iLCJrZXkiLCJmaW5kS2V5IiwiX2tleSIsIl9nbG9iYWwiLCJpc0NvbnRleHREZWZpbmVkIiwiY29udGV4dCIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4dGVuZCIsImEiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiaW5oZXJpdHMiLCJjb25zdHJ1Y3RvciIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsImRlc2NyaXB0b3JzIiwidG9GbGF0T2JqZWN0Iiwic291cmNlT2JqIiwiZGVzdE9iaiIsImZpbHRlciIsInByb3BGaWx0ZXIiLCJwcm9wIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJwb3NpdGlvbiIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiZm9yRWFjaEVudHJ5IiwiaXRlcmF0b3IiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiaXNIVE1MRm9ybSIsInRvQ2FtZWxDYXNlIiwibSIsInAxIiwicDIiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUmVnRXhwIiwicmVkdWNlRGVzY3JpcHRvcnMiLCJyZWR1Y2VyIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsIm5hbWUiLCJyZXQiLCJmcmVlemVNZXRob2RzIiwidmFsdWUiLCJ0b09iamVjdFNldCIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJBTFBIQSIsIkRJR0lUIiwiQUxQSEFCRVQiLCJnZW5lcmF0ZVN0cmluZyIsInNpemUiLCJhbHBoYWJldCIsImxlbmd0aCIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJzdGFjayIsInZpc2l0Iiwic291cmNlIiwidGFyZ2V0IiwicmVkdWNlZFZhbHVlIiwiaXNBc3luY0ZuIiwiaXNUaGVuYWJsZSIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInRva2VuIiwiY2FsbGJhY2tzIiwiZGF0YSIsImNiIiwiYXNhcCIsInV0aWxzJDEiLCJBeGlvc0Vycm9yIiwibWVzc2FnZSIsImNvZGUiLCJjb25maWciLCJyZXF1ZXN0IiwicmVzcG9uc2UiLCJ1dGlscyIsImVycm9yIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiaHR0cEFkYXB0ZXIiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwicGF0aCIsImRvdHMiLCJpc0ZsYXRBcnJheSIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwiZm9ybURhdGEiLCJvcHRpb25zIiwib3B0aW9uIiwibWV0YVRva2VucyIsInZpc2l0b3IiLCJkZWZhdWx0VmlzaXRvciIsImluZGV4ZXMiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwiZWwiLCJpbmRleCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJlbmNvZGUiLCJjaGFyTWFwIiwibWF0Y2giLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsInBhcmFtcyIsImVuY29kZXIiLCJfZW5jb2RlIiwiYnVpbGRVUkwiLCJ1cmwiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJpZCIsImgiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsIlVSTFNlYXJjaFBhcmFtcyQxIiwiRm9ybURhdGEkMSIsIkJsb2IkMSIsInBsYXRmb3JtJDEiLCJVUkxTZWFyY2hQYXJhbXMiLCJGb3JtRGF0YSIsIkJsb2IiLCJoYXNCcm93c2VyRW52IiwiX25hdmlnYXRvciIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIm9yaWdpbiIsInBsYXRmb3JtIiwidG9VUkxFbmNvZGVkRm9ybSIsImhlbHBlcnMiLCJwYXJzZVByb3BQYXRoIiwiYXJyYXlUb09iamVjdCIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0Iiwic3RyaW5naWZ5U2FmZWx5IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJlIiwiZGVmYXVsdHMiLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJfRm9ybURhdGEiLCJ0cmFuc2l0aW9uYWwiLCJmb3JjZWRKU09OUGFyc2luZyIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsInN0YXR1cyIsIm1ldGhvZCIsImlnbm9yZUR1cGxpY2F0ZU9mIiwicGFyc2VIZWFkZXJzIiwicmF3SGVhZGVycyIsInBhcnNlZCIsImxpbmUiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJwYXJzZVRva2VucyIsInRva2VucyIsInRva2Vuc1JFIiwiaXNWYWxpZEhlYWRlck5hbWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwiZm9ybWF0SGVhZGVyIiwidyIsImNoYXIiLCJidWlsZEFjY2Vzc29ycyIsImFjY2Vzc29yTmFtZSIsIm1ldGhvZE5hbWUiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZWxmIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ0YXJnZXRzIiwiYXNTdHJpbmdzIiwiZmlyc3QiLCJjb21wdXRlZCIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJ0cmFuc2Zvcm1EYXRhIiwiZm5zIiwiaXNDYW5jZWwiLCJDYW5jZWxlZEVycm9yIiwic2V0dGxlIiwicmVzb2x2ZSIsInJlamVjdCIsInZhbGlkYXRlU3RhdHVzIiwicGFyc2VQcm90b2NvbCIsInNwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiaGVhZCIsInRhaWwiLCJmaXJzdFNhbXBsZVRTIiwiY2h1bmtMZW5ndGgiLCJub3ciLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwidGhyb3R0bGUiLCJmcmVxIiwidGltZXN0YW1wIiwidGhyZXNob2xkIiwibGFzdEFyZ3MiLCJ0aW1lciIsImludm9rZSIsImFyZ3MiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImJ5dGVzTm90aWZpZWQiLCJfc3BlZWRvbWV0ZXIiLCJsb2FkZWQiLCJ0b3RhbCIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwiaW5SYW5nZSIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwiYXN5bmNEZWNvcmF0b3IiLCJpc1VSTFNhbWVPcmlnaW4iLCJtc2llIiwidXJsUGFyc2luZ05vZGUiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInJlcXVlc3RVUkwiLCJjb29raWVzIiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImJhc2VVUkwiLCJyZWxhdGl2ZVVSTCIsImJ1aWxkRnVsbFBhdGgiLCJyZXF1ZXN0ZWRVUkwiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsIndpdGhYU1JGVG9rZW4iLCJ4c3JmSGVhZGVyTmFtZSIsInhzcmZDb29raWVOYW1lIiwiYXV0aCIsInhzcmZWYWx1ZSIsImlzWEhSQWRhcHRlclN1cHBvcnRlZCIsInhockFkYXB0ZXIiLCJfY29uZmlnIiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsInJlc3BvbnNlVHlwZSIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJkb25lIiwib25sb2FkZW5kIiwicmVzcG9uc2VIZWFkZXJzIiwiZXJyIiwidGltZW91dEVycm9yTWVzc2FnZSIsImNhbmNlbCIsInByb3RvY29sIiwiY29tcG9zZVNpZ25hbHMiLCJzaWduYWxzIiwidGltZW91dCIsImNvbnRyb2xsZXIiLCJhYm9ydGVkIiwib25hYm9ydCIsInJlYXNvbiIsInVuc3Vic2NyaWJlIiwic2lnbmFsIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsInBvcyIsImVuZCIsInJlYWRCeXRlcyIsIml0ZXJhYmxlIiwicmVhZFN0cmVhbSIsInN0cmVhbSIsInJlYWRlciIsInRyYWNrU3RyZWFtIiwib25Qcm9ncmVzcyIsIm9uRmluaXNoIiwiX29uRmluaXNoIiwibG9hZGVkQnl0ZXMiLCJpc0ZldGNoU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJ0ZXN0Iiwic3VwcG9ydHNSZXF1ZXN0U3RyZWFtIiwiZHVwbGV4QWNjZXNzZWQiLCJoYXNDb250ZW50VHlwZSIsIkRFRkFVTFRfQ0hVTktfU0laRSIsInN1cHBvcnRzUmVzcG9uc2VTdHJlYW0iLCJyZXNvbHZlcnMiLCJyZXMiLCJfIiwiZ2V0Qm9keUxlbmd0aCIsImJvZHkiLCJyZXNvbHZlQm9keUxlbmd0aCIsImZldGNoQWRhcHRlciIsImNhbmNlbFRva2VuIiwid2l0aENyZWRlbnRpYWxzIiwiZmV0Y2hPcHRpb25zIiwiY29tcG9zZWRTaWduYWwiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsIl9yZXF1ZXN0IiwiY29udGVudFR5cGVIZWFkZXIiLCJmbHVzaCIsImlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVzcG9uc2VEYXRhIiwia25vd25BZGFwdGVycyIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInN0YXRlIiwicyIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyIsImRlcHJlY2F0ZWRXYXJuaW5ncyIsInZhbGlkYXRvciIsInZlcnNpb24iLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJwYXJhbXNTZXJpYWxpemVyIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwicmVzcG9uc2VJbnRlcmNlcHRvckNoYWluIiwicHJvbWlzZSIsImNoYWluIiwib25GdWxmaWxsZWQiLCJvblJlamVjdGVkIiwiZnVsbFBhdGgiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJvbmZ1bGZpbGxlZCIsIl9yZXNvbHZlIiwiYWJvcnQiLCJjIiwic3ByZWFkIiwiY2FsbGJhY2siLCJpc0F4aW9zRXJyb3IiLCJwYXlsb2FkIiwiSHR0cFN0YXR1c0NvZGUiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImF4aW9zIiwicHJvbWlzZXMiLCJpbml0QXhpb3MiLCJhdXRoU2VydmljZSJdLCJtYXBwaW5ncyI6IkFBRWUsU0FBU0EsR0FBS0MsR0FBSUMsR0FBUztBQUN4QyxTQUFPLFdBQWdCO0FBQ3JCLFdBQU9ELEVBQUcsTUFBTUMsR0FBUyxTQUFTO0FBQUEsRUFDbkM7QUFDSDtBQ0FBLE1BQU0sRUFBQyxVQUFBQyxHQUFRLElB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QUFDO0FBQUEsRUFDakUsR0FFTThCO0FBQ1Q7QUFHQSxNQUFNQyxJQUFRSCxHQUFleFEsQ0FBUTtBQUdyQzJRLEVBQU0sUUFBUWhDO0FBR2RnQyxFQUFNLGdCQUFnQjdNO0FBQ3RCNk0sRUFBTSxjQUFjZjtBQUNwQmUsRUFBTSxXQUFXOU07QUFDakI4TSxFQUFNLFVBQVU1QztBQUNoQjRDLEVBQU0sYUFBYXBVO0FBR25Cb1UsRUFBTSxhQUFhdFY7QUFHbkJzVixFQUFNLFNBQVNBLEVBQU07QUFHckJBLEVBQU0sTUFBTSxTQUFhQyxHQUFVO0FBQ2pDLFNBQU8sUUFBUSxJQUFJQSxDQUFRO0FBQzdCO0FBRUFELEVBQU0sU0FBU1I7QUFHZlEsRUFBTSxlQUFlTjtBQUdyQk0sRUFBTSxjQUFjako7QUFFcEJpSixFQUFNLGVBQWV2TztBQUVyQnVPLEVBQU0sYUFBYSxDQUFBcmQsTUFBU2tNLEdBQWU3RCxFQUFNLFdBQVdySSxDQUFLLElBQUksSUFBSSxTQUFTQSxDQUFLLElBQUlBLENBQUs7QUFFaEdxZCxFQUFNLGFBQWFwRCxHQUFTO0FBRTVCb0QsRUFBTSxpQkFBaUJKO0FBRXZCSSxFQUFNLFVBQVVBO0FDbkZILE1BQUFFLEtBQVksQ0FBQ0MsTUFDeEJILEVBQU0sYUFBYSxTQUFTLElBQUksUUFBVyxDQUFDL1UsT0FDdENBLEVBQU0sU0FBUyxXQUFXLE9BQzVCa1YsRUFBWSxPQUFPLEdBRWQsUUFBUSxPQUFPbFYsQ0FBSyxFQUM1QjsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OF19\n","function we(e) {\n if (typeof e != \"object\" || e === null)\n return !1;\n let r = e;\n for (; Object.getPrototypeOf(r) !== null; )\n r = Object.getPrototypeOf(r);\n return Object.getPrototypeOf(e) === r || Object.getPrototypeOf(e) === null;\n}\nfunction be(e) {\n return we(e) && \"type\" in e && typeof e.type == \"string\";\n}\nvar ae = Symbol.for(\"immer-nothing\"), re = Symbol.for(\"immer-draftable\"), E = Symbol.for(\"immer-state\"), Ne = process.env.NODE_ENV !== \"production\" ? [\n // All error codes, starting by 0:\n function(e) {\n return `The plugin for '${e}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${e}()\\` when initializing your application.`;\n },\n function(e) {\n return `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${e}'`;\n },\n \"This object has been frozen and should not be mutated\",\n function(e) {\n return \"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" + e;\n },\n \"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n \"Immer forbids circular references\",\n \"The first or second argument to `produce` must be a function\",\n \"The third argument to `produce` must be a function or undefined\",\n \"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n \"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n function(e) {\n return `'current' expects a draft, got: ${e}`;\n },\n \"Object.defineProperty() cannot be used on an Immer draft\",\n \"Object.setPrototypeOf() cannot be used on an Immer draft\",\n \"Immer only supports deleting array indices\",\n \"Immer only supports setting array indices and the 'length' property\",\n function(e) {\n return `'original' expects a draft, got: ${e}`;\n }\n // Note: if more errors are added, the errorOffset in Patches.ts should be increased\n // See Patches.ts for additional errors\n] : [];\nfunction _(e, ...r) {\n if (process.env.NODE_ENV !== \"production\") {\n const t = Ne[e], n = typeof t == \"function\" ? t.apply(null, r) : t;\n throw new Error(`[Immer] ${n}`);\n }\n throw new Error(\n `[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`\n );\n}\nvar S = Object.getPrototypeOf;\nfunction C(e) {\n return !!e && !!e[E];\n}\nfunction N(e) {\n var r;\n return e ? fe(e) || Array.isArray(e) || !!e[re] || !!((r = e.constructor) != null && r[re]) || x(e) || V(e) : !1;\n}\nvar De = Object.prototype.constructor.toString();\nfunction fe(e) {\n if (!e || typeof e != \"object\")\n return !1;\n const r = S(e);\n if (r === null)\n return !0;\n const t = Object.hasOwnProperty.call(r, \"constructor\") && r.constructor;\n return t === Object ? !0 : typeof t == \"function\" && Function.toString.call(t) === De;\n}\nfunction M(e, r) {\n F(e) === 0 ? Reflect.ownKeys(e).forEach((t) => {\n r(t, e[t], e);\n }) : e.forEach((t, n) => r(n, t, e));\n}\nfunction F(e) {\n const r = e[E];\n return r ? r.type_ : Array.isArray(e) ? 1 : x(e) ? 2 : V(e) ? 3 : 0;\n}\nfunction K(e, r) {\n return F(e) === 2 ? e.has(r) : Object.prototype.hasOwnProperty.call(e, r);\n}\nfunction de(e, r, t) {\n const n = F(e);\n n === 2 ? e.set(r, t) : n === 3 ? e.add(t) : e[r] = t;\n}\nfunction ge(e, r) {\n return e === r ? e !== 0 || 1 / e === 1 / r : e !== e && r !== r;\n}\nfunction x(e) {\n return e instanceof Map;\n}\nfunction V(e) {\n return e instanceof Set;\n}\nfunction O(e) {\n return e.copy_ || e.base_;\n}\nfunction U(e, r) {\n if (x(e))\n return new Map(e);\n if (V(e))\n return new Set(e);\n if (Array.isArray(e))\n return Array.prototype.slice.call(e);\n const t = fe(e);\n if (r === !0 || r === \"class_only\" && !t) {\n const n = Object.getOwnPropertyDescriptors(e);\n delete n[E];\n let o = Reflect.ownKeys(n);\n for (let i = 0; i < o.length; i++) {\n const c = o[i], s = n[c];\n s.writable === !1 && (s.writable = !0, s.configurable = !0), (s.get || s.set) && (n[c] = {\n configurable: !0,\n writable: !0,\n // could live with !!desc.set as well here...\n enumerable: s.enumerable,\n value: e[c]\n });\n }\n return Object.create(S(e), n);\n } else {\n const n = S(e);\n if (n !== null && t)\n return { ...e };\n const o = Object.create(n);\n return Object.assign(o, e);\n }\n}\nfunction X(e, r = !1) {\n return I(e) || C(e) || !N(e) || (F(e) > 1 && (e.set = e.add = e.clear = e.delete = Oe), Object.freeze(e), r && Object.entries(e).forEach(([t, n]) => X(n, !0))), e;\n}\nfunction Oe() {\n _(2);\n}\nfunction I(e) {\n return Object.isFrozen(e);\n}\nvar Ce = {};\nfunction P(e) {\n const r = Ce[e];\n return r || _(0, e), r;\n}\nvar R;\nfunction le() {\n return R;\n}\nfunction Pe(e, r) {\n return {\n drafts_: [],\n parent_: e,\n immer_: r,\n // Whenever the modified draft contains a draft from another scope, we\n // need to prevent auto-freezing so the unowned draft can be finalized.\n canAutoFreeze_: !0,\n unfinalizedDrafts_: 0\n };\n}\nfunction te(e, r) {\n r && (P(\"Patches\"), e.patches_ = [], e.inversePatches_ = [], e.patchListener_ = r);\n}\nfunction G(e) {\n Y(e), e.drafts_.forEach(ve), e.drafts_ = null;\n}\nfunction Y(e) {\n e === R && (R = e.parent_);\n}\nfunction ne(e) {\n return R = Pe(R, e);\n}\nfunction ve(e) {\n const r = e[E];\n r.type_ === 0 || r.type_ === 1 ? r.revoke_() : r.revoked_ = !0;\n}\nfunction oe(e, r) {\n r.unfinalizedDrafts_ = r.drafts_.length;\n const t = r.drafts_[0];\n return e !== void 0 && e !== t ? (t[E].modified_ && (G(r), _(4)), N(e) && (e = j(r, e), r.parent_ || A(r, e)), r.patches_ && P(\"Patches\").generateReplacementPatches_(\n t[E].base_,\n e,\n r.patches_,\n r.inversePatches_\n )) : e = j(r, t, []), G(r), r.patches_ && r.patchListener_(r.patches_, r.inversePatches_), e !== ae ? e : void 0;\n}\nfunction j(e, r, t) {\n if (I(r))\n return r;\n const n = r[E];\n if (!n)\n return M(\n r,\n (o, i) => ie(e, n, r, o, i, t)\n ), r;\n if (n.scope_ !== e)\n return r;\n if (!n.modified_)\n return A(e, n.base_, !0), n.base_;\n if (!n.finalized_) {\n n.finalized_ = !0, n.scope_.unfinalizedDrafts_--;\n const o = n.copy_;\n let i = o, c = !1;\n n.type_ === 3 && (i = new Set(o), o.clear(), c = !0), M(\n i,\n (s, d) => ie(e, n, o, s, d, t, c)\n ), A(e, o, !1), t && e.patches_ && P(\"Patches\").generatePatches_(\n n,\n t,\n e.patches_,\n e.inversePatches_\n );\n }\n return n.copy_;\n}\nfunction ie(e, r, t, n, o, i, c) {\n if (process.env.NODE_ENV !== \"production\" && o === t && _(5), C(o)) {\n const s = i && r && r.type_ !== 3 && // Set objects are atomic since they have no keys.\n !K(r.assigned_, n) ? i.concat(n) : void 0, d = j(e, o, s);\n if (de(t, n, d), C(d))\n e.canAutoFreeze_ = !1;\n else\n return;\n } else c && t.add(o);\n if (N(o) && !I(o)) {\n if (!e.immer_.autoFreeze_ && e.unfinalizedDrafts_ < 1)\n return;\n j(e, o), (!r || !r.scope_.parent_) && typeof n != \"symbol\" && Object.prototype.propertyIsEnumerable.call(t, n) && A(e, o);\n }\n}\nfunction A(e, r, t = !1) {\n !e.parent_ && e.immer_.autoFreeze_ && e.canAutoFreeze_ && X(r, t);\n}\nfunction Se(e, r) {\n const t = Array.isArray(e), n = {\n type_: t ? 1 : 0,\n // Track which produce call this is associated with.\n scope_: r ? r.scope_ : le(),\n // True for both shallow and deep changes.\n modified_: !1,\n // Used during finalization.\n finalized_: !1,\n // Track which properties have been assigned (true) or deleted (false).\n assigned_: {},\n // The parent draft state.\n parent_: r,\n // The base state.\n base_: e,\n // The base proxy.\n draft_: null,\n // set below\n // The base copy with any updated values.\n copy_: null,\n // Called by the `produce` function.\n revoke_: null,\n isManual_: !1\n };\n let o = n, i = J;\n t && (o = [n], i = T);\n const { revoke: c, proxy: s } = Proxy.revocable(o, i);\n return n.draft_ = s, n.revoke_ = c, s;\n}\nvar J = {\n get(e, r) {\n if (r === E)\n return e;\n const t = O(e);\n if (!K(t, r))\n return Re(e, t, r);\n const n = t[r];\n return e.finalized_ || !N(n) ? n : n === B(e.base_, r) ? (W(e), e.copy_[r] = H(n, e)) : n;\n },\n has(e, r) {\n return r in O(e);\n },\n ownKeys(e) {\n return Reflect.ownKeys(O(e));\n },\n set(e, r, t) {\n const n = pe(O(e), r);\n if (n != null && n.set)\n return n.set.call(e.draft_, t), !0;\n if (!e.modified_) {\n const o = B(O(e), r), i = o == null ? void 0 : o[E];\n if (i && i.base_ === t)\n return e.copy_[r] = t, e.assigned_[r] = !1, !0;\n if (ge(t, o) && (t !== void 0 || K(e.base_, r)))\n return !0;\n W(e), q(e);\n }\n return e.copy_[r] === t && // special case: handle new props with value 'undefined'\n (t !== void 0 || r in e.copy_) || // special case: NaN\n Number.isNaN(t) && Number.isNaN(e.copy_[r]) || (e.copy_[r] = t, e.assigned_[r] = !0), !0;\n },\n deleteProperty(e, r) {\n return B(e.base_, r) !== void 0 || r in e.base_ ? (e.assigned_[r] = !1, W(e), q(e)) : delete e.assigned_[r], e.copy_ && delete e.copy_[r], !0;\n },\n // Note: We never coerce `desc.value` into an Immer draft, because we can't make\n // the same guarantee in ES5 mode.\n getOwnPropertyDescriptor(e, r) {\n const t = O(e), n = Reflect.getOwnPropertyDescriptor(t, r);\n return n && {\n writable: !0,\n configurable: e.type_ !== 1 || r !== \"length\",\n enumerable: n.enumerable,\n value: t[r]\n };\n },\n defineProperty() {\n _(11);\n },\n getPrototypeOf(e) {\n return S(e.base_);\n },\n setPrototypeOf() {\n _(12);\n }\n}, T = {};\nM(J, (e, r) => {\n T[e] = function() {\n return arguments[0] = arguments[0][0], r.apply(this, arguments);\n };\n});\nT.deleteProperty = function(e, r) {\n return process.env.NODE_ENV !== \"production\" && isNaN(parseInt(r)) && _(13), T.set.call(this, e, r, void 0);\n};\nT.set = function(e, r, t) {\n return process.env.NODE_ENV !== \"production\" && r !== \"length\" && isNaN(parseInt(r)) && _(14), J.set.call(this, e[0], r, t, e[0]);\n};\nfunction B(e, r) {\n const t = e[E];\n return (t ? O(t) : e)[r];\n}\nfunction Re(e, r, t) {\n var o;\n const n = pe(r, t);\n return n ? \"value\" in n ? n.value : (\n // This is a very special case, if the prop is a getter defined by the\n // prototype, we should invoke it with the draft as context!\n (o = n.get) == null ? void 0 : o.call(e.draft_)\n ) : void 0;\n}\nfunction pe(e, r) {\n if (!(r in e))\n return;\n let t = S(e);\n for (; t; ) {\n const n = Object.getOwnPropertyDescriptor(t, r);\n if (n)\n return n;\n t = S(t);\n }\n}\nfunction q(e) {\n e.modified_ || (e.modified_ = !0, e.parent_ && q(e.parent_));\n}\nfunction W(e) {\n e.copy_ || (e.copy_ = U(\n e.base_,\n e.scope_.immer_.useStrictShallowCopy_\n ));\n}\nvar Te = class {\n constructor(e) {\n this.autoFreeze_ = !0, this.useStrictShallowCopy_ = !1, this.produce = (r, t, n) => {\n if (typeof r == \"function\" && typeof t != \"function\") {\n const i = t;\n t = r;\n const c = this;\n return function(d = i, ...l) {\n return c.produce(d, (u) => t.call(this, u, ...l));\n };\n }\n typeof t != \"function\" && _(6), n !== void 0 && typeof n != \"function\" && _(7);\n let o;\n if (N(r)) {\n const i = ne(this), c = H(r, void 0);\n let s = !0;\n try {\n o = t(c), s = !1;\n } finally {\n s ? G(i) : Y(i);\n }\n return te(i, n), oe(o, i);\n } else if (!r || typeof r != \"object\") {\n if (o = t(r), o === void 0 && (o = r), o === ae && (o = void 0), this.autoFreeze_ && X(o, !0), n) {\n const i = [], c = [];\n P(\"Patches\").generateReplacementPatches_(r, o, i, c), n(i, c);\n }\n return o;\n } else\n _(1, r);\n }, this.produceWithPatches = (r, t) => {\n if (typeof r == \"function\")\n return (c, ...s) => this.produceWithPatches(c, (d) => r(d, ...s));\n let n, o;\n return [this.produce(r, t, (c, s) => {\n n = c, o = s;\n }), n, o];\n }, typeof (e == null ? void 0 : e.autoFreeze) == \"boolean\" && this.setAutoFreeze(e.autoFreeze), typeof (e == null ? void 0 : e.useStrictShallowCopy) == \"boolean\" && this.setUseStrictShallowCopy(e.useStrictShallowCopy);\n }\n createDraft(e) {\n N(e) || _(8), C(e) && (e = ze(e));\n const r = ne(this), t = H(e, void 0);\n return t[E].isManual_ = !0, Y(r), t;\n }\n finishDraft(e, r) {\n const t = e && e[E];\n (!t || !t.isManual_) && _(9);\n const { scope_: n } = t;\n return te(n, r), oe(void 0, n);\n }\n /**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * By default, auto-freezing is enabled.\n */\n setAutoFreeze(e) {\n this.autoFreeze_ = e;\n }\n /**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\n setUseStrictShallowCopy(e) {\n this.useStrictShallowCopy_ = e;\n }\n applyPatches(e, r) {\n let t;\n for (t = r.length - 1; t >= 0; t--) {\n const o = r[t];\n if (o.path.length === 0 && o.op === \"replace\") {\n e = o.value;\n break;\n }\n }\n t > -1 && (r = r.slice(t + 1));\n const n = P(\"Patches\").applyPatches_;\n return C(e) ? n(e, r) : this.produce(\n e,\n (o) => n(o, r)\n );\n }\n};\nfunction H(e, r) {\n const t = x(e) ? P(\"MapSet\").proxyMap_(e, r) : V(e) ? P(\"MapSet\").proxySet_(e, r) : Se(e, r);\n return (r ? r.scope_ : le()).drafts_.push(t), t;\n}\nfunction ze(e) {\n return C(e) || _(10, e), ye(e);\n}\nfunction ye(e) {\n if (!N(e) || I(e))\n return e;\n const r = e[E];\n let t;\n if (r) {\n if (!r.modified_)\n return r.base_;\n r.finalized_ = !0, t = U(e, r.scope_.immer_.useStrictShallowCopy_);\n } else\n t = U(e, !0);\n return M(t, (n, o) => {\n de(t, n, ye(o));\n }), r && (r.finalized_ = !1), t;\n}\nvar w = new Te(), he = w.produce;\nw.produceWithPatches.bind(\n w\n);\nw.setAutoFreeze.bind(w);\nw.setUseStrictShallowCopy.bind(w);\nw.applyPatches.bind(w);\nw.createDraft.bind(w);\nw.finishDraft.bind(w);\nfunction ce(e, r) {\n function t(...n) {\n if (r) {\n let o = r(...n);\n if (!o)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(0) : \"prepareAction did not return an object\");\n return {\n type: e,\n payload: o.payload,\n ...\"meta\" in o && {\n meta: o.meta\n },\n ...\"error\" in o && {\n error: o.error\n }\n };\n }\n return {\n type: e,\n payload: n[0]\n };\n }\n return t.toString = () => `${e}`, t.type = e, t.match = (n) => be(n) && n.type === e, t;\n}\nfunction se(e) {\n return N(e) ? he(e, () => {\n }) : e;\n}\nfunction ue(e, r, t) {\n if (e.has(r)) {\n let o = e.get(r);\n return t.update && (o = t.update(o, r, e), e.set(r, o)), o;\n }\n if (!t.insert) throw new Error(process.env.NODE_ENV === \"production\" ? p(10) : \"No insert provided for key not already in map\");\n const n = t.insert(r, e);\n return e.set(r, n), n;\n}\nfunction _e(e) {\n const r = {}, t = [];\n let n;\n const o = {\n addCase(i, c) {\n if (process.env.NODE_ENV !== \"production\") {\n if (t.length > 0)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(26) : \"`builder.addCase` should only be called before calling `builder.addMatcher`\");\n if (n)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(27) : \"`builder.addCase` should only be called before calling `builder.addDefaultCase`\");\n }\n const s = typeof i == \"string\" ? i : i.type;\n if (!s)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(28) : \"`builder.addCase` cannot be called with an empty action type\");\n if (s in r)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(29) : `\\`builder.addCase\\` cannot be called with two reducers for the same action type '${s}'`);\n return r[s] = c, o;\n },\n addMatcher(i, c) {\n if (process.env.NODE_ENV !== \"production\" && n)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(30) : \"`builder.addMatcher` should only be called before calling `builder.addDefaultCase`\");\n return t.push({\n matcher: i,\n reducer: c\n }), o;\n },\n addDefaultCase(i) {\n if (process.env.NODE_ENV !== \"production\" && n)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(31) : \"`builder.addDefaultCase` can only be called once\");\n return n = i, o;\n }\n };\n return e(o), [r, t, n];\n}\nfunction ke(e) {\n return typeof e == \"function\";\n}\nfunction Me(e, r) {\n if (process.env.NODE_ENV !== \"production\" && typeof r == \"object\")\n throw new Error(process.env.NODE_ENV === \"production\" ? p(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n let [t, n, o] = _e(r), i;\n if (ke(e))\n i = () => se(e());\n else {\n const s = se(e);\n i = () => s;\n }\n function c(s = i(), d) {\n let l = [t[d.type], ...n.filter(({\n matcher: u\n }) => u(d)).map(({\n reducer: u\n }) => u)];\n return l.filter((u) => !!u).length === 0 && (l = [o]), l.reduce((u, m) => {\n if (m)\n if (C(u)) {\n const z = m(u, d);\n return z === void 0 ? u : z;\n } else {\n if (N(u))\n return he(u, (g) => m(g, d));\n {\n const g = m(u, d);\n if (g === void 0) {\n if (u === null)\n return u;\n throw Error(\"A case reducer on a non-draftable value must not return undefined\");\n }\n return g;\n }\n }\n return u;\n }, s);\n }\n return c.getInitialState = i, c;\n}\nfunction Ke(e) {\n if (e.meta && e.meta.rejectedWithValue)\n throw e.payload;\n if (e.error)\n throw e.error;\n return e.payload;\n}\nvar je = /* @__PURE__ */ Symbol.for(\"rtk-slice-createasyncthunk\");\nfunction Ae(e, r) {\n return `${e}/${r}`;\n}\nfunction Fe({\n creators: e\n} = {}) {\n var t;\n const r = (t = e == null ? void 0 : e.asyncThunk) == null ? void 0 : t[je];\n return function(o) {\n const {\n name: i,\n reducerPath: c = i\n } = o;\n if (!i)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(11) : \"`name` is a required option for createSlice\");\n typeof process < \"u\" && process.env.NODE_ENV === \"development\" && o.initialState === void 0 && console.error(\"You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`\");\n const s = (typeof o.reducers == \"function\" ? o.reducers(Ve()) : o.reducers) || {}, d = Object.keys(s), l = {\n sliceCaseReducersByName: {},\n sliceCaseReducersByType: {},\n actionCreators: {},\n sliceMatchers: []\n }, u = {\n addCase(a, f) {\n const y = typeof a == \"string\" ? a : a.type;\n if (!y)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(12) : \"`context.addCase` cannot be called with an empty action type\");\n if (y in l.sliceCaseReducersByType)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(13) : \"`context.addCase` cannot be called with two reducers for the same action type: \" + y);\n return l.sliceCaseReducersByType[y] = f, u;\n },\n addMatcher(a, f) {\n return l.sliceMatchers.push({\n matcher: a,\n reducer: f\n }), u;\n },\n exposeAction(a, f) {\n return l.actionCreators[a] = f, u;\n },\n exposeCaseReducer(a, f) {\n return l.sliceCaseReducersByName[a] = f, u;\n }\n };\n d.forEach((a) => {\n const f = s[a], y = {\n reducerName: a,\n type: Ae(i, a),\n createNotation: typeof o.reducers == \"function\"\n };\n $e(f) ? We(y, f, u, r) : Ie(y, f, u);\n });\n function m() {\n if (process.env.NODE_ENV !== \"production\" && typeof o.extraReducers == \"object\")\n throw new Error(process.env.NODE_ENV === \"production\" ? p(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n const [a = {}, f = [], y = void 0] = typeof o.extraReducers == \"function\" ? _e(o.extraReducers) : [o.extraReducers], D = {\n ...a,\n ...l.sliceCaseReducersByType\n };\n return Me(o.initialState, (b) => {\n for (let h in D)\n b.addCase(h, D[h]);\n for (let h of l.sliceMatchers)\n b.addMatcher(h.matcher, h.reducer);\n for (let h of f)\n b.addMatcher(h.matcher, h.reducer);\n y && b.addDefaultCase(y);\n });\n }\n const g = (a) => a, z = /* @__PURE__ */ new Map();\n let v;\n function Q(a, f) {\n return v || (v = m()), v(a, f);\n }\n function $() {\n return v || (v = m()), v.getInitialState();\n }\n function Z(a, f = !1) {\n function y(b) {\n let h = b[a];\n if (typeof h > \"u\") {\n if (f)\n h = $();\n else if (process.env.NODE_ENV !== \"production\")\n throw new Error(process.env.NODE_ENV === \"production\" ? p(15) : \"selectSlice returned undefined for an uninjected slice reducer\");\n }\n return h;\n }\n function D(b = g) {\n const h = ue(z, f, {\n insert: () => /* @__PURE__ */ new WeakMap()\n });\n return ue(h, b, {\n insert: () => {\n const ee = {};\n for (const [me, Ee] of Object.entries(o.selectors ?? {}))\n ee[me] = xe(Ee, b, $, f);\n return ee;\n }\n });\n }\n return {\n reducerPath: a,\n getSelectors: D,\n get selectors() {\n return D(y);\n },\n selectSlice: y\n };\n }\n const L = {\n name: i,\n reducer: Q,\n actions: l.actionCreators,\n caseReducers: l.sliceCaseReducersByName,\n getInitialState: $,\n ...Z(c),\n injectInto(a, {\n reducerPath: f,\n ...y\n } = {}) {\n const D = f ?? c;\n return a.inject({\n reducerPath: D,\n reducer: Q\n }, y), {\n ...L,\n ...Z(D, !0)\n };\n }\n };\n return L;\n };\n}\nfunction xe(e, r, t, n) {\n function o(i, ...c) {\n let s = r(i);\n if (typeof s > \"u\") {\n if (n)\n s = t();\n else if (process.env.NODE_ENV !== \"production\")\n throw new Error(process.env.NODE_ENV === \"production\" ? p(16) : \"selectState returned undefined for an uninjected slice reducer\");\n }\n return e(s, ...c);\n }\n return o.unwrapped = e, o;\n}\nvar Ue = /* @__PURE__ */ Fe();\nfunction Ve() {\n function e(r, t) {\n return {\n _reducerDefinitionType: \"asyncThunk\",\n payloadCreator: r,\n ...t\n };\n }\n return e.withTypes = () => e, {\n reducer(r) {\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [r.name](...t) {\n return r(...t);\n }\n }[r.name], {\n _reducerDefinitionType: \"reducer\"\n /* reducer */\n });\n },\n preparedReducer(r, t) {\n return {\n _reducerDefinitionType: \"reducerWithPrepare\",\n prepare: r,\n reducer: t\n };\n },\n asyncThunk: e\n };\n}\nfunction Ie({\n type: e,\n reducerName: r,\n createNotation: t\n}, n, o) {\n let i, c;\n if (\"reducer\" in n) {\n if (t && !Be(n))\n throw new Error(process.env.NODE_ENV === \"production\" ? p(17) : \"Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.\");\n i = n.reducer, c = n.prepare;\n } else\n i = n;\n o.addCase(e, i).exposeCaseReducer(r, i).exposeAction(r, c ? ce(e, c) : ce(e));\n}\nfunction $e(e) {\n return e._reducerDefinitionType === \"asyncThunk\";\n}\nfunction Be(e) {\n return e._reducerDefinitionType === \"reducerWithPrepare\";\n}\nfunction We({\n type: e,\n reducerName: r\n}, t, n, o) {\n if (!o)\n throw new Error(process.env.NODE_ENV === \"production\" ? p(18) : \"Cannot use `create.asyncThunk` in the built-in `createSlice`. Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.\");\n const {\n payloadCreator: i,\n fulfilled: c,\n pending: s,\n rejected: d,\n settled: l,\n options: u\n } = t, m = o(e, i, u);\n n.exposeAction(r, m), c && n.addCase(m.fulfilled, c), s && n.addCase(m.pending, s), d && n.addCase(m.rejected, d), l && n.addMatcher(m.settled, l), n.exposeCaseReducer(r, {\n fulfilled: c || k,\n pending: s || k,\n rejected: d || k,\n settled: l || k\n });\n}\nfunction k() {\n}\nfunction p(e) {\n return `Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `;\n}\nexport {\n Ue as c,\n Ke as u\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtdG9vbGtpdC5tb2Rlcm4tVDZYSm94QmYuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9yZWR1eC9kaXN0L3JlZHV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9pbW1lci9kaXN0L2ltbWVyLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AcmVkdXhqcy90b29sa2l0L2Rpc3QvcmVkdXgtdG9vbGtpdC5tb2Rlcm4ubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHNyYy91dGlscy9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlLnRzXG5mdW5jdGlvbiBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgcmV0dXJuIGBNaW5pZmllZCBSZWR1eCBlcnJvciAjJHtjb2RlfTsgdmlzaXQgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvRXJyb3JzP2NvZGU9JHtjb2RlfSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzLiBgO1xufVxuXG4vLyBzcmMvdXRpbHMvc3ltYm9sLW9ic2VydmFibGUudHNcbnZhciAkJG9ic2VydmFibGUgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiKSgpO1xudmFyIHN5bWJvbF9vYnNlcnZhYmxlX2RlZmF1bHQgPSAkJG9ic2VydmFibGU7XG5cbi8vIHNyYy91dGlscy9hY3Rpb25UeXBlcy50c1xudmFyIHJhbmRvbVN0cmluZyA9ICgpID0+IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdChcIlwiKS5qb2luKFwiLlwiKTtcbnZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogYEBAcmVkdXgvSU5JVCR7LyogQF9fUFVSRV9fICovIHJhbmRvbVN0cmluZygpfWAsXG4gIFJFUExBQ0U6IGBAQHJlZHV4L1JFUExBQ0Ukey8qIEBfX1BVUkVfXyAqLyByYW5kb21TdHJpbmcoKX1gLFxuICBQUk9CRV9VTktOT1dOX0FDVElPTjogKCkgPT4gYEBAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT04ke3JhbmRvbVN0cmluZygpfWBcbn07XG52YXIgYWN0aW9uVHlwZXNfZGVmYXVsdCA9IEFjdGlvblR5cGVzO1xuXG4vLyBzcmMvdXRpbHMvaXNQbGFpbk9iamVjdC50c1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgb2JqID09PSBudWxsKVxuICAgIHJldHVybiBmYWxzZTtcbiAgbGV0IHByb3RvID0gb2JqO1xuICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT09IHByb3RvIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBudWxsO1xufVxuXG4vLyBzcmMvdXRpbHMva2luZE9mLnRzXG5mdW5jdGlvbiBtaW5pS2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSB2b2lkIDApXG4gICAgcmV0dXJuIFwidW5kZWZpbmVkXCI7XG4gIGlmICh2YWwgPT09IG51bGwpXG4gICAgcmV0dXJuIFwibnVsbFwiO1xuICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbDtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgIGNhc2UgXCJzeW1ib2xcIjpcbiAgICBjYXNlIFwiZnVuY3Rpb25cIjoge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgaWYgKGlzRGF0ZSh2YWwpKVxuICAgIHJldHVybiBcImRhdGVcIjtcbiAgaWYgKGlzRXJyb3IodmFsKSlcbiAgICByZXR1cm4gXCJlcnJvclwiO1xuICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBjdG9yTmFtZSh2YWwpO1xuICBzd2l0Y2ggKGNvbnN0cnVjdG9yTmFtZSkge1xuICAgIGNhc2UgXCJTeW1ib2xcIjpcbiAgICBjYXNlIFwiUHJvbWlzZVwiOlxuICAgIGNhc2UgXCJXZWFrTWFwXCI6XG4gICAgY2FzZSBcIldlYWtTZXRcIjpcbiAgICBjYXNlIFwiTWFwXCI6XG4gICAgY2FzZSBcIlNldFwiOlxuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xufVxuZnVuY3Rpb24gY3Rvck5hbWUodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgPyB2YWwuY29uc3RydWN0b3IubmFtZSA6IG51bGw7XG59XG5mdW5jdGlvbiBpc0Vycm9yKHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIHZhbC5tZXNzYWdlID09PSBcInN0cmluZ1wiICYmIHZhbC5jb25zdHJ1Y3RvciAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLnN0YWNrVHJhY2VMaW1pdCA9PT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiB0eXBlb2YgdmFsLnRvRGF0ZVN0cmluZyA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiB2YWwuZ2V0RGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiB2YWwuc2V0RGF0ZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICBsZXQgdHlwZU9mVmFsID0gdHlwZW9mIHZhbDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHR5cGVPZlZhbCA9IG1pbmlLaW5kT2YodmFsKTtcbiAgfVxuICByZXR1cm4gdHlwZU9mVmFsO1xufVxuXG4vLyBzcmMvY3JlYXRlU3RvcmUudHNcbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIpIDogYEV4cGVjdGVkIHRoZSByb290IHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICcke2tpbmRPZihyZWR1Y2VyKX0nYCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBlbmhhbmNlciA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiBlbmhhbmNlciA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBhcmd1bWVudHNbM10gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDApIDogXCJJdCBsb29rcyBsaWtlIHlvdSBhcmUgcGFzc2luZyBzZXZlcmFsIHN0b3JlIGVuaGFuY2VycyB0byBjcmVhdGVTdG9yZSgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuIEluc3RlYWQsIGNvbXBvc2UgdGhlbSB0b2dldGhlciB0byBhIHNpbmdsZSBmdW5jdGlvbi4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI2NyZWF0aW5nLWEtc3RvcmUtd2l0aC1lbmhhbmNlcnMgZm9yIGFuIGV4YW1wbGUuXCIpO1xuICB9XG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgZW5oYW5jZXIgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBlbmhhbmNlciA9IHByZWxvYWRlZFN0YXRlO1xuICAgIHByZWxvYWRlZFN0YXRlID0gdm9pZCAwO1xuICB9XG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDEpIDogYEV4cGVjdGVkIHRoZSBlbmhhbmNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKGVuaGFuY2VyKX0nYCk7XG4gICAgfVxuICAgIHJldHVybiBlbmhhbmNlcihjcmVhdGVTdG9yZSkocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xuICB9XG4gIGxldCBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XG4gIGxldCBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcbiAgbGV0IGN1cnJlbnRMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICBsZXQgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XG4gIGxldCBsaXN0ZW5lcklkQ291bnRlciA9IDA7XG4gIGxldCBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIG5leHRMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICAgICAgY3VycmVudExpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lciwga2V5KSA9PiB7XG4gICAgICAgIG5leHRMaXN0ZW5lcnMuc2V0KGtleSwgbGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzKSA6IFwiWW91IG1heSBub3QgY2FsbCBzdG9yZS5nZXRTdGF0ZSgpIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gVGhlIHJlZHVjZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgdGhlIHN0YXRlIGFzIGFuIGFyZ3VtZW50LiBQYXNzIGl0IGRvd24gZnJvbSB0aGUgdG9wIHJlZHVjZXIgaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gdGhlIHN0b3JlLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuICBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDQpIDogYEV4cGVjdGVkIHRoZSBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKGxpc3RlbmVyKX0nYCk7XG4gICAgfVxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg1KSA6IFwiWW91IG1heSBub3QgY2FsbCBzdG9yZS5zdWJzY3JpYmUoKSB3aGlsZSB0aGUgcmVkdWNlciBpcyBleGVjdXRpbmcuIElmIHlvdSB3b3VsZCBsaWtlIHRvIGJlIG5vdGlmaWVkIGFmdGVyIHRoZSBzdG9yZSBoYXMgYmVlbiB1cGRhdGVkLCBzdWJzY3JpYmUgZnJvbSBhIGNvbXBvbmVudCBhbmQgaW52b2tlIHN0b3JlLmdldFN0YXRlKCkgaW4gdGhlIGNhbGxiYWNrIHRvIGFjY2VzcyB0aGUgbGF0ZXN0IHN0YXRlLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuXCIpO1xuICAgIH1cbiAgICBsZXQgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgY29uc3QgbGlzdGVuZXJJZCA9IGxpc3RlbmVySWRDb3VudGVyKys7XG4gICAgbmV4dExpc3RlbmVycy5zZXQobGlzdGVuZXJJZCwgbGlzdGVuZXIpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDYpIDogXCJZb3UgbWF5IG5vdCB1bnN1YnNjcmliZSBmcm9tIGEgc3RvcmUgbGlzdGVuZXIgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpL3N0b3JlI3N1YnNjcmliZWxpc3RlbmVyIGZvciBtb3JlIGRldGFpbHMuXCIpO1xuICAgICAgfVxuICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XG4gICAgICBuZXh0TGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcklkKTtcbiAgICAgIGN1cnJlbnRMaXN0ZW5lcnMgPSBudWxsO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGFjdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDcpIDogYEFjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiBJbnN0ZWFkLCB0aGUgYWN0dWFsIHR5cGUgd2FzOiAnJHtraW5kT2YoYWN0aW9uKX0nLiBZb3UgbWF5IG5lZWQgdG8gYWRkIG1pZGRsZXdhcmUgdG8geW91ciBzdG9yZSBzZXR1cCB0byBoYW5kbGUgZGlzcGF0Y2hpbmcgb3RoZXIgdmFsdWVzLCBzdWNoIGFzICdyZWR1eC10aHVuaycgdG8gaGFuZGxlIGRpc3BhdGNoaW5nIGZ1bmN0aW9ucy4gU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC00LXN0b3JlI21pZGRsZXdhcmUgYW5kIGh0dHBzOi8vcmVkdXguanMub3JnL3R1dG9yaWFscy9mdW5kYW1lbnRhbHMvcGFydC02LWFzeW5jLWxvZ2ljI3VzaW5nLXRoZS1yZWR1eC10aHVuay1taWRkbGV3YXJlIGZvciBleGFtcGxlcy5gKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOCkgOiAnQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFwidHlwZVwiIHByb3BlcnR5LiBZb3UgbWF5IGhhdmUgbWlzc3BlbGxlZCBhbiBhY3Rpb24gdHlwZSBzdHJpbmcgY29uc3RhbnQuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYWN0aW9uLnR5cGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDE3KSA6IGBBY3Rpb24gXCJ0eXBlXCIgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZy4gSW5zdGVhZCwgdGhlIGFjdHVhbCB0eXBlIHdhczogJyR7a2luZE9mKGFjdGlvbi50eXBlKX0nLiBWYWx1ZSB3YXM6ICcke2FjdGlvbi50eXBlfScgKHN0cmluZ2lmaWVkKWApO1xuICAgIH1cbiAgICBpZiAoaXNEaXNwYXRjaGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoOSkgOiBcIlJlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy5cIik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcbiAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICAgIGxpc3RlbmVyKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfVxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTApIDogYEV4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiBJbnN0ZWFkLCByZWNlaXZlZDogJyR7a2luZE9mKG5leHRSZWR1Y2VyKX1gKTtcbiAgICB9XG4gICAgY3VycmVudFJlZHVjZXIgPSBuZXh0UmVkdWNlcjtcbiAgICBkaXNwYXRjaCh7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlc19kZWZhdWx0LlJFUExBQ0VcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cbiAgICAgICAqIEBwYXJhbSBvYnNlcnZlciBBbnkgb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gb2JzZXJ2ZXIuXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cbiAgICAgICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXG4gICAgICAgKiBiZSB1c2VkIHRvIHVuc3Vic2NyaWJlIHRoZSBvYnNlcnZhYmxlIGZyb20gdGhlIHN0b3JlLCBhbmQgcHJldmVudCBmdXJ0aGVyXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cbiAgICAgICAqL1xuICAgICAgc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZXIgIT09IFwib2JqZWN0XCIgfHwgb2JzZXJ2ZXIgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMSkgOiBgRXhwZWN0ZWQgdGhlIG9ic2VydmVyIHRvIGJlIGFuIG9iamVjdC4gSW5zdGVhZCwgcmVjZWl2ZWQ6ICcke2tpbmRPZihvYnNlcnZlcil9J2ApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcbiAgICAgICAgICBjb25zdCBvYnNlcnZlckFzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcbiAgICAgICAgICBpZiAob2JzZXJ2ZXJBc09ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyQXNPYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvdXRlclN1YnNjcmliZShvYnNlcnZlU3RhdGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgW3N5bWJvbF9vYnNlcnZhYmxlX2RlZmF1bHRdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGRpc3BhdGNoKHtcbiAgICB0eXBlOiBhY3Rpb25UeXBlc19kZWZhdWx0LklOSVRcbiAgfSk7XG4gIGNvbnN0IHN0b3JlID0ge1xuICAgIGRpc3BhdGNoLFxuICAgIHN1YnNjcmliZSxcbiAgICBnZXRTdGF0ZSxcbiAgICByZXBsYWNlUmVkdWNlcixcbiAgICBbc3ltYm9sX29ic2VydmFibGVfZGVmYXVsdF06IG9ic2VydmFibGVcbiAgfTtcbiAgcmV0dXJuIHN0b3JlO1xufVxuZnVuY3Rpb24gbGVnYWN5X2NyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICByZXR1cm4gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKTtcbn1cblxuLy8gc3JjL3V0aWxzL3dhcm5pbmcudHNcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgdHJ5IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG4vLyBzcmMvY29tYmluZVJlZHVjZXJzLnRzXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xuICBjb25zdCByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgY29uc3QgYXJndW1lbnROYW1lID0gYWN0aW9uICYmIGFjdGlvbi50eXBlID09PSBhY3Rpb25UeXBlc19kZWZhdWx0LklOSVQgPyBcInByZWxvYWRlZFN0YXRlIGFyZ3VtZW50IHBhc3NlZCB0byBjcmVhdGVTdG9yZVwiIDogXCJwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlclwiO1xuICBpZiAocmVkdWNlcktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIGNvbWJpbmVSZWR1Y2VycyBpcyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSByZWR1Y2Vycy5cIjtcbiAgfVxuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXRTdGF0ZSkpIHtcbiAgICByZXR1cm4gYFRoZSAke2FyZ3VtZW50TmFtZX0gaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcIiR7a2luZE9mKGlucHV0U3RhdGUpfVwiLiBFeHBlY3RlZCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6IFwiJHtyZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKX1cImA7XG4gIH1cbiAgY29uc3QgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoKGtleSkgPT4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldKTtcbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xuICB9KTtcbiAgaWYgKGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gYWN0aW9uVHlwZXNfZGVmYXVsdC5SRVBMQUNFKVxuICAgIHJldHVybjtcbiAgaWYgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gYFVuZXhwZWN0ZWQgJHt1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gXCJrZXlzXCIgOiBcImtleVwifSBcIiR7dW5leHBlY3RlZEtleXMuam9pbignXCIsIFwiJyl9XCIgZm91bmQgaW4gJHthcmd1bWVudE5hbWV9LiBFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6IFwiJHtyZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKX1cIi4gVW5leHBlY3RlZCBrZXlzIHdpbGwgYmUgaWdub3JlZC5gO1xuICB9XG59XG5mdW5jdGlvbiBhc3NlcnRSZWR1Y2VyU2hhcGUocmVkdWNlcnMpIHtcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodm9pZCAwLCB7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlc19kZWZhdWx0LklOSVRcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTIpIDogYFRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXCIke2tleX1cIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3IgdGhpcyByZWR1Y2VyLCB5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLmApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodm9pZCAwLCB7XG4gICAgICB0eXBlOiBhY3Rpb25UeXBlc19kZWZhdWx0LlBST0JFX1VOS05PV05fQUNUSU9OKClcbiAgICB9KSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTMpIDogYFRoZSBzbGljZSByZWR1Y2VyIGZvciBrZXkgXCIke2tleX1cIiByZXR1cm5lZCB1bmRlZmluZWQgd2hlbiBwcm9iZWQgd2l0aCBhIHJhbmRvbSB0eXBlLiBEb24ndCB0cnkgdG8gaGFuZGxlICcke2FjdGlvblR5cGVzX2RlZmF1bHQuSU5JVH0nIG9yIG90aGVyIGFjdGlvbnMgaW4gXCJyZWR1eC8qXCIgbmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLmApO1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpIHtcbiAgY29uc3QgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIGNvbnN0IGZpbmFsUmVkdWNlcnMgPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IHJlZHVjZXJLZXlzW2ldO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICB3YXJuaW5nKGBObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXCIke2tleX1cImApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgZmluYWxSZWR1Y2Vyc1trZXldID0gcmVkdWNlcnNba2V5XTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xuICBsZXQgdW5leHBlY3RlZEtleUNhY2hlO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdW5leHBlY3RlZEtleUNhY2hlID0ge307XG4gIH1cbiAgbGV0IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgc2hhcGVBc3NlcnRpb25FcnJvciA9IGU7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKHN0YXRlID0ge30sIGFjdGlvbikge1xuICAgIGlmIChzaGFwZUFzc2VydGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zdCB3YXJuaW5nTWVzc2FnZSA9IGdldFVuZXhwZWN0ZWRTdGF0ZVNoYXBlV2FybmluZ01lc3NhZ2Uoc3RhdGUsIGZpbmFsUmVkdWNlcnMsIGFjdGlvbiwgdW5leHBlY3RlZEtleUNhY2hlKTtcbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xuICAgICAgICB3YXJuaW5nKHdhcm5pbmdNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGZpbmFsUmVkdWNlcktleXNbaV07XG4gICAgICBjb25zdCByZWR1Y2VyID0gZmluYWxSZWR1Y2Vyc1trZXldO1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZUZvcktleSA9IHN0YXRlW2tleV07XG4gICAgICBjb25zdCBuZXh0U3RhdGVGb3JLZXkgPSByZWR1Y2VyKHByZXZpb3VzU3RhdGVGb3JLZXksIGFjdGlvbik7XG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb25zdCBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNCkgOiBgV2hlbiBjYWxsZWQgd2l0aCBhbiBhY3Rpb24gb2YgdHlwZSAke2FjdGlvblR5cGUgPyBgXCIke1N0cmluZyhhY3Rpb25UeXBlKX1cImAgOiBcIih1bmtub3duIHR5cGUpXCJ9LCB0aGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFwiJHtrZXl9XCIgcmV0dXJuZWQgdW5kZWZpbmVkLiBUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuIElmIHlvdSB3YW50IHRoaXMgcmVkdWNlciB0byBob2xkIG5vIHZhbHVlLCB5b3UgY2FuIHJldHVybiBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLmApO1xuICAgICAgfVxuICAgICAgbmV4dFN0YXRlW2tleV0gPSBuZXh0U3RhdGVGb3JLZXk7XG4gICAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBuZXh0U3RhdGVGb3JLZXkgIT09IHByZXZpb3VzU3RhdGVGb3JLZXk7XG4gICAgfVxuICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoO1xuICAgIHJldHVybiBoYXNDaGFuZ2VkID8gbmV4dFN0YXRlIDogc3RhdGU7XG4gIH07XG59XG5cbi8vIHNyYy9iaW5kQWN0aW9uQ3JlYXRvcnMudHNcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoKGFjdGlvbkNyZWF0b3IuYXBwbHkodGhpcywgYXJncykpO1xuICB9O1xufVxuZnVuY3Rpb24gYmluZEFjdGlvbkNyZWF0b3JzKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCkge1xuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKTtcbiAgfVxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSBcIm9iamVjdFwiIHx8IGFjdGlvbkNyZWF0b3JzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTYpIDogYGJpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgYnV0IGluc3RlYWQgcmVjZWl2ZWQ6ICcke2tpbmRPZihhY3Rpb25DcmVhdG9ycyl9Jy4gRGlkIHlvdSB3cml0ZSBcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXCIgaW5zdGVhZCBvZiBcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cIj9gKTtcbiAgfVxuICBjb25zdCBib3VuZEFjdGlvbkNyZWF0b3JzID0ge307XG4gIGZvciAoY29uc3Qga2V5IGluIGFjdGlvbkNyZWF0b3JzKSB7XG4gICAgY29uc3QgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XG4gICAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XG59XG5cbi8vIHNyYy9jb21wb3NlLnRzXG5mdW5jdGlvbiBjb21wb3NlKC4uLmZ1bmNzKSB7XG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKGFyZykgPT4gYXJnO1xuICB9XG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gZnVuY3NbMF07XG4gIH1cbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZSgoYSwgYikgPT4gKC4uLmFyZ3MpID0+IGEoYiguLi5hcmdzKSkpO1xufVxuXG4vLyBzcmMvYXBwbHlNaWRkbGV3YXJlLnRzXG5mdW5jdGlvbiBhcHBseU1pZGRsZXdhcmUoLi4ubWlkZGxld2FyZXMpIHtcbiAgcmV0dXJuIChjcmVhdGVTdG9yZTIpID0+IChyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSkgPT4ge1xuICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlU3RvcmUyKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlKTtcbiAgICBsZXQgZGlzcGF0Y2ggPSAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNSkgOiBcIkRpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuIE90aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC5cIik7XG4gICAgfTtcbiAgICBjb25zdCBtaWRkbGV3YXJlQVBJID0ge1xuICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgZGlzcGF0Y2g6IChhY3Rpb24sIC4uLmFyZ3MpID0+IGRpc3BhdGNoKGFjdGlvbiwgLi4uYXJncylcbiAgICB9O1xuICAgIGNvbnN0IGNoYWluID0gbWlkZGxld2FyZXMubWFwKChtaWRkbGV3YXJlKSA9PiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpKTtcbiAgICBkaXNwYXRjaCA9IGNvbXBvc2UoLi4uY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RvcmUsXG4gICAgICBkaXNwYXRjaFxuICAgIH07XG4gIH07XG59XG5cbi8vIHNyYy91dGlscy9pc0FjdGlvbi50c1xuZnVuY3Rpb24gaXNBY3Rpb24oYWN0aW9uKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KGFjdGlvbikgJiYgXCJ0eXBlXCIgaW4gYWN0aW9uICYmIHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gXCJzdHJpbmdcIjtcbn1cbmV4cG9ydCB7XG4gIGFjdGlvblR5cGVzX2RlZmF1bHQgYXMgX19ET19OT1RfVVNFX19BY3Rpb25UeXBlcyxcbiAgYXBwbHlNaWRkbGV3YXJlLFxuICBiaW5kQWN0aW9uQ3JlYXRvcnMsXG4gIGNvbWJpbmVSZWR1Y2VycyxcbiAgY29tcG9zZSxcbiAgY3JlYXRlU3RvcmUsXG4gIGlzQWN0aW9uLFxuICBpc1BsYWluT2JqZWN0LFxuICBsZWdhY3lfY3JlYXRlU3RvcmVcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWR1eC5tanMubWFwIiwiLy8gc3JjL3V0aWxzL2Vudi50c1xudmFyIE5PVEhJTkcgPSBTeW1ib2wuZm9yKFwiaW1tZXItbm90aGluZ1wiKTtcbnZhciBEUkFGVEFCTEUgPSBTeW1ib2wuZm9yKFwiaW1tZXItZHJhZnRhYmxlXCIpO1xudmFyIERSQUZUX1NUQVRFID0gU3ltYm9sLmZvcihcImltbWVyLXN0YXRlXCIpO1xuXG4vLyBzcmMvdXRpbHMvZXJyb3JzLnRzXG52YXIgZXJyb3JzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gW1xuICAvLyBBbGwgZXJyb3IgY29kZXMsIHN0YXJ0aW5nIGJ5IDA6XG4gIGZ1bmN0aW9uKHBsdWdpbikge1xuICAgIHJldHVybiBgVGhlIHBsdWdpbiBmb3IgJyR7cGx1Z2lufScgaGFzIG5vdCBiZWVuIGxvYWRlZCBpbnRvIEltbWVyLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgaW1wb3J0IGFuZCBjYWxsIFxcYGVuYWJsZSR7cGx1Z2lufSgpXFxgIHdoZW4gaW5pdGlhbGl6aW5nIHlvdXIgYXBwbGljYXRpb24uYDtcbiAgfSxcbiAgZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gYHByb2R1Y2UgY2FuIG9ubHkgYmUgY2FsbGVkIG9uIHRoaW5ncyB0aGF0IGFyZSBkcmFmdGFibGU6IHBsYWluIG9iamVjdHMsIGFycmF5cywgTWFwLCBTZXQgb3IgY2xhc3NlcyB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnW2ltbWVyYWJsZV06IHRydWUnLiBHb3QgJyR7dGhpbmd9J2A7XG4gIH0sXG4gIFwiVGhpcyBvYmplY3QgaGFzIGJlZW4gZnJvemVuIGFuZCBzaG91bGQgbm90IGJlIG11dGF0ZWRcIixcbiAgZnVuY3Rpb24oZGF0YSkge1xuICAgIHJldHVybiBcIkNhbm5vdCB1c2UgYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWQuIERpZCB5b3UgcGFzcyBhbiBvYmplY3QgZnJvbSBpbnNpZGUgYW4gaW1tZXIgZnVuY3Rpb24gdG8gYW4gYXN5bmMgcHJvY2Vzcz8gXCIgKyBkYXRhO1xuICB9LFxuICBcIkFuIGltbWVyIHByb2R1Y2VyIHJldHVybmVkIGEgbmV3IHZhbHVlICphbmQqIG1vZGlmaWVkIGl0cyBkcmFmdC4gRWl0aGVyIHJldHVybiBhIG5ldyB2YWx1ZSAqb3IqIG1vZGlmeSB0aGUgZHJhZnQuXCIsXG4gIFwiSW1tZXIgZm9yYmlkcyBjaXJjdWxhciByZWZlcmVuY2VzXCIsXG4gIFwiVGhlIGZpcnN0IG9yIHNlY29uZCBhcmd1bWVudCB0byBgcHJvZHVjZWAgbXVzdCBiZSBhIGZ1bmN0aW9uXCIsXG4gIFwiVGhlIHRoaXJkIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgdW5kZWZpbmVkXCIsXG4gIFwiRmlyc3QgYXJndW1lbnQgdG8gYGNyZWF0ZURyYWZ0YCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LCBhbiBhcnJheSwgb3IgYW4gaW1tZXJhYmxlIG9iamVjdFwiLFxuICBcIkZpcnN0IGFyZ3VtZW50IHRvIGBmaW5pc2hEcmFmdGAgbXVzdCBiZSBhIGRyYWZ0IHJldHVybmVkIGJ5IGBjcmVhdGVEcmFmdGBcIixcbiAgZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gYCdjdXJyZW50JyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gO1xuICB9LFxuICBcIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSgpIGNhbm5vdCBiZSB1c2VkIG9uIGFuIEltbWVyIGRyYWZ0XCIsXG4gIFwiT2JqZWN0LnNldFByb3RvdHlwZU9mKCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcbiAgXCJJbW1lciBvbmx5IHN1cHBvcnRzIGRlbGV0aW5nIGFycmF5IGluZGljZXNcIixcbiAgXCJJbW1lciBvbmx5IHN1cHBvcnRzIHNldHRpbmcgYXJyYXkgaW5kaWNlcyBhbmQgdGhlICdsZW5ndGgnIHByb3BlcnR5XCIsXG4gIGZ1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIGAnb3JpZ2luYWwnIGV4cGVjdHMgYSBkcmFmdCwgZ290OiAke3RoaW5nfWA7XG4gIH1cbiAgLy8gTm90ZTogaWYgbW9yZSBlcnJvcnMgYXJlIGFkZGVkLCB0aGUgZXJyb3JPZmZzZXQgaW4gUGF0Y2hlcy50cyBzaG91bGQgYmUgaW5jcmVhc2VkXG4gIC8vIFNlZSBQYXRjaGVzLnRzIGZvciBhZGRpdGlvbmFsIGVycm9yc1xuXSA6IFtdO1xuZnVuY3Rpb24gZGllKGVycm9yLCAuLi5hcmdzKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBjb25zdCBlID0gZXJyb3JzW2Vycm9yXTtcbiAgICBjb25zdCBtc2cgPSB0eXBlb2YgZSA9PT0gXCJmdW5jdGlvblwiID8gZS5hcHBseShudWxsLCBhcmdzKSA6IGU7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbSW1tZXJdICR7bXNnfWApO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgW0ltbWVyXSBtaW5pZmllZCBlcnJvciBucjogJHtlcnJvcn0uIEZ1bGwgZXJyb3IgYXQ6IGh0dHBzOi8vYml0Lmx5LzNjWEVLV2ZgXG4gICk7XG59XG5cbi8vIHNyYy91dGlscy9jb21tb24udHNcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbmZ1bmN0aW9uIGlzRHJhZnQodmFsdWUpIHtcbiAgcmV0dXJuICEhdmFsdWUgJiYgISF2YWx1ZVtEUkFGVF9TVEFURV07XG59XG5mdW5jdGlvbiBpc0RyYWZ0YWJsZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKVxuICAgIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3QodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICEhdmFsdWVbRFJBRlRBQkxFXSB8fCAhIXZhbHVlLmNvbnN0cnVjdG9yPy5bRFJBRlRBQkxFXSB8fCBpc01hcCh2YWx1ZSkgfHwgaXNTZXQodmFsdWUpO1xufVxudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLnRvU3RyaW5nKCk7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKVxuICAgIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBnZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgaWYgKEN0b3IgPT09IE9iamVjdClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09IFwiZnVuY3Rpb25cIiAmJiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKEN0b3IpID09PSBvYmplY3RDdG9yU3RyaW5nO1xufVxuZnVuY3Rpb24gb3JpZ2luYWwodmFsdWUpIHtcbiAgaWYgKCFpc0RyYWZ0KHZhbHVlKSlcbiAgICBkaWUoMTUsIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlW0RSQUZUX1NUQVRFXS5iYXNlXztcbn1cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyKSB7XG4gIGlmIChnZXRBcmNodHlwZShvYmopID09PSAwIC8qIE9iamVjdCAqLykge1xuICAgIFJlZmxlY3Qub3duS2V5cyhvYmopLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaXRlcihrZXksIG9ialtrZXldLCBvYmopO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9iai5mb3JFYWNoKChlbnRyeSwgaW5kZXgpID0+IGl0ZXIoaW5kZXgsIGVudHJ5LCBvYmopKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0QXJjaHR5cGUodGhpbmcpIHtcbiAgY29uc3Qgc3RhdGUgPSB0aGluZ1tEUkFGVF9TVEFURV07XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLnR5cGVfIDogQXJyYXkuaXNBcnJheSh0aGluZykgPyAxIC8qIEFycmF5ICovIDogaXNNYXAodGhpbmcpID8gMiAvKiBNYXAgKi8gOiBpc1NldCh0aGluZykgPyAzIC8qIFNldCAqLyA6IDAgLyogT2JqZWN0ICovO1xufVxuZnVuY3Rpb24gaGFzKHRoaW5nLCBwcm9wKSB7XG4gIHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IDIgLyogTWFwICovID8gdGhpbmcuaGFzKHByb3ApIDogT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaW5nLCBwcm9wKTtcbn1cbmZ1bmN0aW9uIGdldCh0aGluZywgcHJvcCkge1xuICByZXR1cm4gZ2V0QXJjaHR5cGUodGhpbmcpID09PSAyIC8qIE1hcCAqLyA/IHRoaW5nLmdldChwcm9wKSA6IHRoaW5nW3Byb3BdO1xufVxuZnVuY3Rpb24gc2V0KHRoaW5nLCBwcm9wT3JPbGRWYWx1ZSwgdmFsdWUpIHtcbiAgY29uc3QgdCA9IGdldEFyY2h0eXBlKHRoaW5nKTtcbiAgaWYgKHQgPT09IDIgLyogTWFwICovKVxuICAgIHRoaW5nLnNldChwcm9wT3JPbGRWYWx1ZSwgdmFsdWUpO1xuICBlbHNlIGlmICh0ID09PSAzIC8qIFNldCAqLykge1xuICAgIHRoaW5nLmFkZCh2YWx1ZSk7XG4gIH0gZWxzZVxuICAgIHRoaW5nW3Byb3BPck9sZFZhbHVlXSA9IHZhbHVlO1xufVxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICB9XG59XG5mdW5jdGlvbiBpc01hcCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIE1hcDtcbn1cbmZ1bmN0aW9uIGlzU2V0KHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0IGluc3RhbmNlb2YgU2V0O1xufVxuZnVuY3Rpb24gbGF0ZXN0KHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5jb3B5XyB8fCBzdGF0ZS5iYXNlXztcbn1cbmZ1bmN0aW9uIHNoYWxsb3dDb3B5KGJhc2UsIHN0cmljdCkge1xuICBpZiAoaXNNYXAoYmFzZSkpIHtcbiAgICByZXR1cm4gbmV3IE1hcChiYXNlKTtcbiAgfVxuICBpZiAoaXNTZXQoYmFzZSkpIHtcbiAgICByZXR1cm4gbmV3IFNldChiYXNlKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShiYXNlKSlcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYmFzZSk7XG4gIGNvbnN0IGlzUGxhaW4gPSBpc1BsYWluT2JqZWN0KGJhc2UpO1xuICBpZiAoc3RyaWN0ID09PSB0cnVlIHx8IHN0cmljdCA9PT0gXCJjbGFzc19vbmx5XCIgJiYgIWlzUGxhaW4pIHtcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpO1xuICAgIGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURV07XG4gICAgbGV0IGtleXMgPSBSZWZsZWN0Lm93bktleXMoZGVzY3JpcHRvcnMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGNvbnN0IGRlc2MgPSBkZXNjcmlwdG9yc1trZXldO1xuICAgICAgaWYgKGRlc2Mud3JpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlc2Mud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICBkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpXG4gICAgICAgIGRlc2NyaXB0b3JzW2tleV0gPSB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIC8vIGNvdWxkIGxpdmUgd2l0aCAhIWRlc2Muc2V0IGFzIHdlbGwgaGVyZS4uLlxuICAgICAgICAgIGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSxcbiAgICAgICAgICB2YWx1ZTogYmFzZVtrZXldXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuY3JlYXRlKGdldFByb3RvdHlwZU9mKGJhc2UpLCBkZXNjcmlwdG9ycyk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvdG8gPSBnZXRQcm90b3R5cGVPZihiYXNlKTtcbiAgICBpZiAocHJvdG8gIT09IG51bGwgJiYgaXNQbGFpbikge1xuICAgICAgcmV0dXJuIHsgLi4uYmFzZSB9O1xuICAgIH1cbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvYmosIGJhc2UpO1xuICB9XG59XG5mdW5jdGlvbiBmcmVlemUob2JqLCBkZWVwID0gZmFsc2UpIHtcbiAgaWYgKGlzRnJvemVuKG9iaikgfHwgaXNEcmFmdChvYmopIHx8ICFpc0RyYWZ0YWJsZShvYmopKVxuICAgIHJldHVybiBvYmo7XG4gIGlmIChnZXRBcmNodHlwZShvYmopID4gMSkge1xuICAgIG9iai5zZXQgPSBvYmouYWRkID0gb2JqLmNsZWFyID0gb2JqLmRlbGV0ZSA9IGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucztcbiAgfVxuICBPYmplY3QuZnJlZXplKG9iaik7XG4gIGlmIChkZWVwKVxuICAgIE9iamVjdC5lbnRyaWVzKG9iaikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBmcmVlemUodmFsdWUsIHRydWUpKTtcbiAgcmV0dXJuIG9iajtcbn1cbmZ1bmN0aW9uIGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucygpIHtcbiAgZGllKDIpO1xufVxuZnVuY3Rpb24gaXNGcm96ZW4ob2JqKSB7XG4gIHJldHVybiBPYmplY3QuaXNGcm96ZW4ob2JqKTtcbn1cblxuLy8gc3JjL3V0aWxzL3BsdWdpbnMudHNcbnZhciBwbHVnaW5zID0ge307XG5mdW5jdGlvbiBnZXRQbHVnaW4ocGx1Z2luS2V5KSB7XG4gIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnNbcGx1Z2luS2V5XTtcbiAgaWYgKCFwbHVnaW4pIHtcbiAgICBkaWUoMCwgcGx1Z2luS2V5KTtcbiAgfVxuICByZXR1cm4gcGx1Z2luO1xufVxuZnVuY3Rpb24gbG9hZFBsdWdpbihwbHVnaW5LZXksIGltcGxlbWVudGF0aW9uKSB7XG4gIGlmICghcGx1Z2luc1twbHVnaW5LZXldKVxuICAgIHBsdWdpbnNbcGx1Z2luS2V5XSA9IGltcGxlbWVudGF0aW9uO1xufVxuXG4vLyBzcmMvY29yZS9zY29wZS50c1xudmFyIGN1cnJlbnRTY29wZTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRTY29wZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRTY29wZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNjb3BlKHBhcmVudF8sIGltbWVyXykge1xuICByZXR1cm4ge1xuICAgIGRyYWZ0c186IFtdLFxuICAgIHBhcmVudF8sXG4gICAgaW1tZXJfLFxuICAgIC8vIFdoZW5ldmVyIHRoZSBtb2RpZmllZCBkcmFmdCBjb250YWlucyBhIGRyYWZ0IGZyb20gYW5vdGhlciBzY29wZSwgd2VcbiAgICAvLyBuZWVkIHRvIHByZXZlbnQgYXV0by1mcmVlemluZyBzbyB0aGUgdW5vd25lZCBkcmFmdCBjYW4gYmUgZmluYWxpemVkLlxuICAgIGNhbkF1dG9GcmVlemVfOiB0cnVlLFxuICAgIHVuZmluYWxpemVkRHJhZnRzXzogMFxuICB9O1xufVxuZnVuY3Rpb24gdXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpIHtcbiAgaWYgKHBhdGNoTGlzdGVuZXIpIHtcbiAgICBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpO1xuICAgIHNjb3BlLnBhdGNoZXNfID0gW107XG4gICAgc2NvcGUuaW52ZXJzZVBhdGNoZXNfID0gW107XG4gICAgc2NvcGUucGF0Y2hMaXN0ZW5lcl8gPSBwYXRjaExpc3RlbmVyO1xuICB9XG59XG5mdW5jdGlvbiByZXZva2VTY29wZShzY29wZSkge1xuICBsZWF2ZVNjb3BlKHNjb3BlKTtcbiAgc2NvcGUuZHJhZnRzXy5mb3JFYWNoKHJldm9rZURyYWZ0KTtcbiAgc2NvcGUuZHJhZnRzXyA9IG51bGw7XG59XG5mdW5jdGlvbiBsZWF2ZVNjb3BlKHNjb3BlKSB7XG4gIGlmIChzY29wZSA9PT0gY3VycmVudFNjb3BlKSB7XG4gICAgY3VycmVudFNjb3BlID0gc2NvcGUucGFyZW50XztcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJTY29wZShpbW1lcjIpIHtcbiAgcmV0dXJuIGN1cnJlbnRTY29wZSA9IGNyZWF0ZVNjb3BlKGN1cnJlbnRTY29wZSwgaW1tZXIyKTtcbn1cbmZ1bmN0aW9uIHJldm9rZURyYWZ0KGRyYWZ0KSB7XG4gIGNvbnN0IHN0YXRlID0gZHJhZnRbRFJBRlRfU1RBVEVdO1xuICBpZiAoc3RhdGUudHlwZV8gPT09IDAgLyogT2JqZWN0ICovIHx8IHN0YXRlLnR5cGVfID09PSAxIC8qIEFycmF5ICovKVxuICAgIHN0YXRlLnJldm9rZV8oKTtcbiAgZWxzZVxuICAgIHN0YXRlLnJldm9rZWRfID0gdHJ1ZTtcbn1cblxuLy8gc3JjL2NvcmUvZmluYWxpemUudHNcbmZ1bmN0aW9uIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSkge1xuICBzY29wZS51bmZpbmFsaXplZERyYWZ0c18gPSBzY29wZS5kcmFmdHNfLmxlbmd0aDtcbiAgY29uc3QgYmFzZURyYWZ0ID0gc2NvcGUuZHJhZnRzX1swXTtcbiAgY29uc3QgaXNSZXBsYWNlZCA9IHJlc3VsdCAhPT0gdm9pZCAwICYmIHJlc3VsdCAhPT0gYmFzZURyYWZ0O1xuICBpZiAoaXNSZXBsYWNlZCkge1xuICAgIGlmIChiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLm1vZGlmaWVkXykge1xuICAgICAgcmV2b2tlU2NvcGUoc2NvcGUpO1xuICAgICAgZGllKDQpO1xuICAgIH1cbiAgICBpZiAoaXNEcmFmdGFibGUocmVzdWx0KSkge1xuICAgICAgcmVzdWx0ID0gZmluYWxpemUoc2NvcGUsIHJlc3VsdCk7XG4gICAgICBpZiAoIXNjb3BlLnBhcmVudF8pXG4gICAgICAgIG1heWJlRnJlZXplKHNjb3BlLCByZXN1bHQpO1xuICAgIH1cbiAgICBpZiAoc2NvcGUucGF0Y2hlc18pIHtcbiAgICAgIGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuICAgICAgICBiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLmJhc2VfLFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHNjb3BlLnBhdGNoZXNfLFxuICAgICAgICBzY29wZS5pbnZlcnNlUGF0Y2hlc19cbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCBiYXNlRHJhZnQsIFtdKTtcbiAgfVxuICByZXZva2VTY29wZShzY29wZSk7XG4gIGlmIChzY29wZS5wYXRjaGVzXykge1xuICAgIHNjb3BlLnBhdGNoTGlzdGVuZXJfKHNjb3BlLnBhdGNoZXNfLCBzY29wZS5pbnZlcnNlUGF0Y2hlc18pO1xuICB9XG4gIHJldHVybiByZXN1bHQgIT09IE5PVEhJTkcgPyByZXN1bHQgOiB2b2lkIDA7XG59XG5mdW5jdGlvbiBmaW5hbGl6ZShyb290U2NvcGUsIHZhbHVlLCBwYXRoKSB7XG4gIGlmIChpc0Zyb3plbih2YWx1ZSkpXG4gICAgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBzdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXTtcbiAgaWYgKCFzdGF0ZSkge1xuICAgIGVhY2goXG4gICAgICB2YWx1ZSxcbiAgICAgIChrZXksIGNoaWxkVmFsdWUpID0+IGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgdmFsdWUsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aClcbiAgICApO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoc3RhdGUuc2NvcGVfICE9PSByb290U2NvcGUpXG4gICAgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuICAgIG1heWJlRnJlZXplKHJvb3RTY29wZSwgc3RhdGUuYmFzZV8sIHRydWUpO1xuICAgIHJldHVybiBzdGF0ZS5iYXNlXztcbiAgfVxuICBpZiAoIXN0YXRlLmZpbmFsaXplZF8pIHtcbiAgICBzdGF0ZS5maW5hbGl6ZWRfID0gdHJ1ZTtcbiAgICBzdGF0ZS5zY29wZV8udW5maW5hbGl6ZWREcmFmdHNfLS07XG4gICAgY29uc3QgcmVzdWx0ID0gc3RhdGUuY29weV87XG4gICAgbGV0IHJlc3VsdEVhY2ggPSByZXN1bHQ7XG4gICAgbGV0IGlzU2V0MiA9IGZhbHNlO1xuICAgIGlmIChzdGF0ZS50eXBlXyA9PT0gMyAvKiBTZXQgKi8pIHtcbiAgICAgIHJlc3VsdEVhY2ggPSBuZXcgU2V0KHJlc3VsdCk7XG4gICAgICByZXN1bHQuY2xlYXIoKTtcbiAgICAgIGlzU2V0MiA9IHRydWU7XG4gICAgfVxuICAgIGVhY2goXG4gICAgICByZXN1bHRFYWNoLFxuICAgICAgKGtleSwgY2hpbGRWYWx1ZSkgPT4gZmluYWxpemVQcm9wZXJ0eShyb290U2NvcGUsIHN0YXRlLCByZXN1bHQsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCwgaXNTZXQyKVxuICAgICk7XG4gICAgbWF5YmVGcmVlemUocm9vdFNjb3BlLCByZXN1bHQsIGZhbHNlKTtcbiAgICBpZiAocGF0aCAmJiByb290U2NvcGUucGF0Y2hlc18pIHtcbiAgICAgIGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVQYXRjaGVzXyhcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvb3RTY29wZS5wYXRjaGVzXyxcbiAgICAgICAgcm9vdFNjb3BlLmludmVyc2VQYXRjaGVzX1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmNvcHlfO1xufVxuZnVuY3Rpb24gZmluYWxpemVQcm9wZXJ0eShyb290U2NvcGUsIHBhcmVudFN0YXRlLCB0YXJnZXRPYmplY3QsIHByb3AsIGNoaWxkVmFsdWUsIHJvb3RQYXRoLCB0YXJnZXRJc1NldCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGNoaWxkVmFsdWUgPT09IHRhcmdldE9iamVjdClcbiAgICBkaWUoNSk7XG4gIGlmIChpc0RyYWZ0KGNoaWxkVmFsdWUpKSB7XG4gICAgY29uc3QgcGF0aCA9IHJvb3RQYXRoICYmIHBhcmVudFN0YXRlICYmIHBhcmVudFN0YXRlLnR5cGVfICE9PSAzIC8qIFNldCAqLyAmJiAvLyBTZXQgb2JqZWN0cyBhcmUgYXRvbWljIHNpbmNlIHRoZXkgaGF2ZSBubyBrZXlzLlxuICAgICFoYXMocGFyZW50U3RhdGUuYXNzaWduZWRfLCBwcm9wKSA/IHJvb3RQYXRoLmNvbmNhdChwcm9wKSA6IHZvaWQgMDtcbiAgICBjb25zdCByZXMgPSBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUsIHBhdGgpO1xuICAgIHNldCh0YXJnZXRPYmplY3QsIHByb3AsIHJlcyk7XG4gICAgaWYgKGlzRHJhZnQocmVzKSkge1xuICAgICAgcm9vdFNjb3BlLmNhbkF1dG9GcmVlemVfID0gZmFsc2U7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAodGFyZ2V0SXNTZXQpIHtcbiAgICB0YXJnZXRPYmplY3QuYWRkKGNoaWxkVmFsdWUpO1xuICB9XG4gIGlmIChpc0RyYWZ0YWJsZShjaGlsZFZhbHVlKSAmJiAhaXNGcm96ZW4oY2hpbGRWYWx1ZSkpIHtcbiAgICBpZiAoIXJvb3RTY29wZS5pbW1lcl8uYXV0b0ZyZWV6ZV8gJiYgcm9vdFNjb3BlLnVuZmluYWxpemVkRHJhZnRzXyA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKTtcbiAgICBpZiAoKCFwYXJlbnRTdGF0ZSB8fCAhcGFyZW50U3RhdGUuc2NvcGVfLnBhcmVudF8pICYmIHR5cGVvZiBwcm9wICE9PSBcInN5bWJvbFwiICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0YXJnZXRPYmplY3QsIHByb3ApKVxuICAgICAgbWF5YmVGcmVlemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gbWF5YmVGcmVlemUoc2NvcGUsIHZhbHVlLCBkZWVwID0gZmFsc2UpIHtcbiAgaWYgKCFzY29wZS5wYXJlbnRfICYmIHNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiBzY29wZS5jYW5BdXRvRnJlZXplXykge1xuICAgIGZyZWV6ZSh2YWx1ZSwgZGVlcCk7XG4gIH1cbn1cblxuLy8gc3JjL2NvcmUvcHJveHkudHNcbmZ1bmN0aW9uIGNyZWF0ZVByb3h5UHJveHkoYmFzZSwgcGFyZW50KSB7XG4gIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJhc2UpO1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICB0eXBlXzogaXNBcnJheSA/IDEgLyogQXJyYXkgKi8gOiAwIC8qIE9iamVjdCAqLyxcbiAgICAvLyBUcmFjayB3aGljaCBwcm9kdWNlIGNhbGwgdGhpcyBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgc2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCksXG4gICAgLy8gVHJ1ZSBmb3IgYm90aCBzaGFsbG93IGFuZCBkZWVwIGNoYW5nZXMuXG4gICAgbW9kaWZpZWRfOiBmYWxzZSxcbiAgICAvLyBVc2VkIGR1cmluZyBmaW5hbGl6YXRpb24uXG4gICAgZmluYWxpemVkXzogZmFsc2UsXG4gICAgLy8gVHJhY2sgd2hpY2ggcHJvcGVydGllcyBoYXZlIGJlZW4gYXNzaWduZWQgKHRydWUpIG9yIGRlbGV0ZWQgKGZhbHNlKS5cbiAgICBhc3NpZ25lZF86IHt9LFxuICAgIC8vIFRoZSBwYXJlbnQgZHJhZnQgc3RhdGUuXG4gICAgcGFyZW50XzogcGFyZW50LFxuICAgIC8vIFRoZSBiYXNlIHN0YXRlLlxuICAgIGJhc2VfOiBiYXNlLFxuICAgIC8vIFRoZSBiYXNlIHByb3h5LlxuICAgIGRyYWZ0XzogbnVsbCxcbiAgICAvLyBzZXQgYmVsb3dcbiAgICAvLyBUaGUgYmFzZSBjb3B5IHdpdGggYW55IHVwZGF0ZWQgdmFsdWVzLlxuICAgIGNvcHlfOiBudWxsLFxuICAgIC8vIENhbGxlZCBieSB0aGUgYHByb2R1Y2VgIGZ1bmN0aW9uLlxuICAgIHJldm9rZV86IG51bGwsXG4gICAgaXNNYW51YWxfOiBmYWxzZVxuICB9O1xuICBsZXQgdGFyZ2V0ID0gc3RhdGU7XG4gIGxldCB0cmFwcyA9IG9iamVjdFRyYXBzO1xuICBpZiAoaXNBcnJheSkge1xuICAgIHRhcmdldCA9IFtzdGF0ZV07XG4gICAgdHJhcHMgPSBhcnJheVRyYXBzO1xuICB9XG4gIGNvbnN0IHsgcmV2b2tlLCBwcm94eSB9ID0gUHJveHkucmV2b2NhYmxlKHRhcmdldCwgdHJhcHMpO1xuICBzdGF0ZS5kcmFmdF8gPSBwcm94eTtcbiAgc3RhdGUucmV2b2tlXyA9IHJldm9rZTtcbiAgcmV0dXJuIHByb3h5O1xufVxudmFyIG9iamVjdFRyYXBzID0ge1xuICBnZXQoc3RhdGUsIHByb3ApIHtcbiAgICBpZiAocHJvcCA9PT0gRFJBRlRfU1RBVEUpXG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgY29uc3Qgc291cmNlID0gbGF0ZXN0KHN0YXRlKTtcbiAgICBpZiAoIWhhcyhzb3VyY2UsIHByb3ApKSB7XG4gICAgICByZXR1cm4gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGUsIHNvdXJjZSwgcHJvcCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW3Byb3BdO1xuICAgIGlmIChzdGF0ZS5maW5hbGl6ZWRfIHx8ICFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBwZWVrKHN0YXRlLmJhc2VfLCBwcm9wKSkge1xuICAgICAgcHJlcGFyZUNvcHkoc3RhdGUpO1xuICAgICAgcmV0dXJuIHN0YXRlLmNvcHlfW3Byb3BdID0gY3JlYXRlUHJveHkodmFsdWUsIHN0YXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBoYXMoc3RhdGUsIHByb3ApIHtcbiAgICByZXR1cm4gcHJvcCBpbiBsYXRlc3Qoc3RhdGUpO1xuICB9LFxuICBvd25LZXlzKHN0YXRlKSB7XG4gICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyhsYXRlc3Qoc3RhdGUpKTtcbiAgfSxcbiAgc2V0KHN0YXRlLCBwcm9wLCB2YWx1ZSkge1xuICAgIGNvbnN0IGRlc2MgPSBnZXREZXNjcmlwdG9yRnJvbVByb3RvKGxhdGVzdChzdGF0ZSksIHByb3ApO1xuICAgIGlmIChkZXNjPy5zZXQpIHtcbiAgICAgIGRlc2Muc2V0LmNhbGwoc3RhdGUuZHJhZnRfLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQyID0gcGVlayhsYXRlc3Qoc3RhdGUpLCBwcm9wKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnQyPy5bRFJBRlRfU1RBVEVdO1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAmJiBjdXJyZW50U3RhdGUuYmFzZV8gPT09IHZhbHVlKSB7XG4gICAgICAgIHN0YXRlLmNvcHlfW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpcyh2YWx1ZSwgY3VycmVudDIpICYmICh2YWx1ZSAhPT0gdm9pZCAwIHx8IGhhcyhzdGF0ZS5iYXNlXywgcHJvcCkpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIHByZXBhcmVDb3B5KHN0YXRlKTtcbiAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmNvcHlfW3Byb3BdID09PSB2YWx1ZSAmJiAvLyBzcGVjaWFsIGNhc2U6IGhhbmRsZSBuZXcgcHJvcHMgd2l0aCB2YWx1ZSAndW5kZWZpbmVkJ1xuICAgICh2YWx1ZSAhPT0gdm9pZCAwIHx8IHByb3AgaW4gc3RhdGUuY29weV8pIHx8IC8vIHNwZWNpYWwgY2FzZTogTmFOXG4gICAgTnVtYmVyLmlzTmFOKHZhbHVlKSAmJiBOdW1iZXIuaXNOYU4oc3RhdGUuY29weV9bcHJvcF0pKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgc3RhdGUuY29weV9bcHJvcF0gPSB2YWx1ZTtcbiAgICBzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBkZWxldGVQcm9wZXJ0eShzdGF0ZSwgcHJvcCkge1xuICAgIGlmIChwZWVrKHN0YXRlLmJhc2VfLCBwcm9wKSAhPT0gdm9pZCAwIHx8IHByb3AgaW4gc3RhdGUuYmFzZV8pIHtcbiAgICAgIHN0YXRlLmFzc2lnbmVkX1twcm9wXSA9IGZhbHNlO1xuICAgICAgcHJlcGFyZUNvcHkoc3RhdGUpO1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgc3RhdGUuYXNzaWduZWRfW3Byb3BdO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuY29weV8pIHtcbiAgICAgIGRlbGV0ZSBzdGF0ZS5jb3B5X1twcm9wXTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIC8vIE5vdGU6IFdlIG5ldmVyIGNvZXJjZSBgZGVzYy52YWx1ZWAgaW50byBhbiBJbW1lciBkcmFmdCwgYmVjYXVzZSB3ZSBjYW4ndCBtYWtlXG4gIC8vIHRoZSBzYW1lIGd1YXJhbnRlZSBpbiBFUzUgbW9kZS5cbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN0YXRlLCBwcm9wKSB7XG4gICAgY29uc3Qgb3duZXIgPSBsYXRlc3Qoc3RhdGUpO1xuICAgIGNvbnN0IGRlc2MgPSBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvd25lciwgcHJvcCk7XG4gICAgaWYgKCFkZXNjKVxuICAgICAgcmV0dXJuIGRlc2M7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiBzdGF0ZS50eXBlXyAhPT0gMSAvKiBBcnJheSAqLyB8fCBwcm9wICE9PSBcImxlbmd0aFwiLFxuICAgICAgZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlLFxuICAgICAgdmFsdWU6IG93bmVyW3Byb3BdXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkoKSB7XG4gICAgZGllKDExKTtcbiAgfSxcbiAgZ2V0UHJvdG90eXBlT2Yoc3RhdGUpIHtcbiAgICByZXR1cm4gZ2V0UHJvdG90eXBlT2Yoc3RhdGUuYmFzZV8pO1xuICB9LFxuICBzZXRQcm90b3R5cGVPZigpIHtcbiAgICBkaWUoMTIpO1xuICB9XG59O1xudmFyIGFycmF5VHJhcHMgPSB7fTtcbmVhY2gob2JqZWN0VHJhcHMsIChrZXksIGZuKSA9PiB7XG4gIGFycmF5VHJhcHNba2V5XSA9IGZ1bmN0aW9uKCkge1xuICAgIGFyZ3VtZW50c1swXSA9IGFyZ3VtZW50c1swXVswXTtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0pO1xuYXJyYXlUcmFwcy5kZWxldGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKHN0YXRlLCBwcm9wKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgaXNOYU4ocGFyc2VJbnQocHJvcCkpKVxuICAgIGRpZSgxMyk7XG4gIHJldHVybiBhcnJheVRyYXBzLnNldC5jYWxsKHRoaXMsIHN0YXRlLCBwcm9wLCB2b2lkIDApO1xufTtcbmFycmF5VHJhcHMuc2V0ID0gZnVuY3Rpb24oc3RhdGUsIHByb3AsIHZhbHVlKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgcHJvcCAhPT0gXCJsZW5ndGhcIiAmJiBpc05hTihwYXJzZUludChwcm9wKSkpXG4gICAgZGllKDE0KTtcbiAgcmV0dXJuIG9iamVjdFRyYXBzLnNldC5jYWxsKHRoaXMsIHN0YXRlWzBdLCBwcm9wLCB2YWx1ZSwgc3RhdGVbMF0pO1xufTtcbmZ1bmN0aW9uIHBlZWsoZHJhZnQsIHByb3ApIHtcbiAgY29uc3Qgc3RhdGUgPSBkcmFmdFtEUkFGVF9TVEFURV07XG4gIGNvbnN0IHNvdXJjZSA9IHN0YXRlID8gbGF0ZXN0KHN0YXRlKSA6IGRyYWZ0O1xuICByZXR1cm4gc291cmNlW3Byb3BdO1xufVxuZnVuY3Rpb24gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGUsIHNvdXJjZSwgcHJvcCkge1xuICBjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhzb3VyY2UsIHByb3ApO1xuICByZXR1cm4gZGVzYyA/IGB2YWx1ZWAgaW4gZGVzYyA/IGRlc2MudmFsdWUgOiAoXG4gICAgLy8gVGhpcyBpcyBhIHZlcnkgc3BlY2lhbCBjYXNlLCBpZiB0aGUgcHJvcCBpcyBhIGdldHRlciBkZWZpbmVkIGJ5IHRoZVxuICAgIC8vIHByb3RvdHlwZSwgd2Ugc2hvdWxkIGludm9rZSBpdCB3aXRoIHRoZSBkcmFmdCBhcyBjb250ZXh0IVxuICAgIGRlc2MuZ2V0Py5jYWxsKHN0YXRlLmRyYWZ0XylcbiAgKSA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIGdldERlc2NyaXB0b3JGcm9tUHJvdG8oc291cmNlLCBwcm9wKSB7XG4gIGlmICghKHByb3AgaW4gc291cmNlKSlcbiAgICByZXR1cm4gdm9pZCAwO1xuICBsZXQgcHJvdG8gPSBnZXRQcm90b3R5cGVPZihzb3VyY2UpO1xuICB3aGlsZSAocHJvdG8pIHtcbiAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgcHJvcCk7XG4gICAgaWYgKGRlc2MpXG4gICAgICByZXR1cm4gZGVzYztcbiAgICBwcm90byA9IGdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gdm9pZCAwO1xufVxuZnVuY3Rpb24gbWFya0NoYW5nZWQoc3RhdGUpIHtcbiAgaWYgKCFzdGF0ZS5tb2RpZmllZF8pIHtcbiAgICBzdGF0ZS5tb2RpZmllZF8gPSB0cnVlO1xuICAgIGlmIChzdGF0ZS5wYXJlbnRfKSB7XG4gICAgICBtYXJrQ2hhbmdlZChzdGF0ZS5wYXJlbnRfKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHByZXBhcmVDb3B5KHN0YXRlKSB7XG4gIGlmICghc3RhdGUuY29weV8pIHtcbiAgICBzdGF0ZS5jb3B5XyA9IHNoYWxsb3dDb3B5KFxuICAgICAgc3RhdGUuYmFzZV8sXG4gICAgICBzdGF0ZS5zY29wZV8uaW1tZXJfLnVzZVN0cmljdFNoYWxsb3dDb3B5X1xuICAgICk7XG4gIH1cbn1cblxuLy8gc3JjL2NvcmUvaW1tZXJDbGFzcy50c1xudmFyIEltbWVyMiA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgdGhpcy5hdXRvRnJlZXplXyA9IHRydWU7XG4gICAgdGhpcy51c2VTdHJpY3RTaGFsbG93Q29weV8gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2VcbiAgICAgKiByZXR1cm4gdmFsdWUgb2Z0ZW4gZGVwZW5kcyBvbiB0aGUgYmFzZSBzdGF0ZSkuIFRoZSByZWNpcGUgZnVuY3Rpb24gaXNcbiAgICAgKiBmcmVlIHRvIG11dGF0ZSBpdHMgZmlyc3QgYXJndW1lbnQgaG93ZXZlciBpdCB3YW50cy4gQWxsIG11dGF0aW9ucyBhcmVcbiAgICAgKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuICAgICAqXG4gICAgICogUGFzcyBvbmx5IGEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgXCJjdXJyaWVkIHByb2R1Y2VyXCIgd2hpY2ggcmVsaWV2ZXMgeW91XG4gICAgICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cbiAgICAgKlxuICAgICAqIE9ubHkgcGxhaW4gb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBtYWRlIG11dGFibGUuIEFsbCBvdGhlciBvYmplY3RzIGFyZVxuICAgICAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cbiAgICAgKlxuICAgICAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgX19ib3VuZF9fIHRvIGl0cyBgSW1tZXJgIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHthbnl9IGJhc2UgLSB0aGUgaW5pdGlhbCBzdGF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlY2lwZSAtIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBwcm94eSBvZiB0aGUgYmFzZSBzdGF0ZSBhcyBmaXJzdCBhcmd1bWVudCBhbmQgd2hpY2ggY2FuIGJlIGZyZWVseSBtb2RpZmllZFxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcbiAgICAgKiBAcmV0dXJucyB7YW55fSBhIG5ldyBzdGF0ZSwgb3IgdGhlIGluaXRpYWwgc3RhdGUgaWYgbm90aGluZyB3YXMgbW9kaWZpZWRcbiAgICAgKi9cbiAgICB0aGlzLnByb2R1Y2UgPSAoYmFzZSwgcmVjaXBlLCBwYXRjaExpc3RlbmVyKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgcmVjaXBlICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEJhc2UgPSByZWNpcGU7XG4gICAgICAgIHJlY2lwZSA9IGJhc2U7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gY3VycmllZFByb2R1Y2UoYmFzZTIgPSBkZWZhdWx0QmFzZSwgLi4uYXJncykge1xuICAgICAgICAgIHJldHVybiBzZWxmLnByb2R1Y2UoYmFzZTIsIChkcmFmdCkgPT4gcmVjaXBlLmNhbGwodGhpcywgZHJhZnQsIC4uLmFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgcmVjaXBlICE9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGRpZSg2KTtcbiAgICAgIGlmIChwYXRjaExpc3RlbmVyICE9PSB2b2lkIDAgJiYgdHlwZW9mIHBhdGNoTGlzdGVuZXIgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZGllKDcpO1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIGlmIChpc0RyYWZ0YWJsZShiYXNlKSkge1xuICAgICAgICBjb25zdCBzY29wZSA9IGVudGVyU2NvcGUodGhpcyk7XG4gICAgICAgIGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkoYmFzZSwgdm9pZCAwKTtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSByZWNpcGUocHJveHkpO1xuICAgICAgICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKGhhc0Vycm9yKVxuICAgICAgICAgICAgcmV2b2tlU2NvcGUoc2NvcGUpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxlYXZlU2NvcGUoc2NvcGUpO1xuICAgICAgICB9XG4gICAgICAgIHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlY2lwZShiYXNlKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKVxuICAgICAgICAgIHJlc3VsdCA9IGJhc2U7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IE5PVEhJTkcpXG4gICAgICAgICAgcmVzdWx0ID0gdm9pZCAwO1xuICAgICAgICBpZiAodGhpcy5hdXRvRnJlZXplXylcbiAgICAgICAgICBmcmVlemUocmVzdWx0LCB0cnVlKTtcbiAgICAgICAgaWYgKHBhdGNoTGlzdGVuZXIpIHtcbiAgICAgICAgICBjb25zdCBwID0gW107XG4gICAgICAgICAgY29uc3QgaXAgPSBbXTtcbiAgICAgICAgICBnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhiYXNlLCByZXN1bHQsIHAsIGlwKTtcbiAgICAgICAgICBwYXRjaExpc3RlbmVyKHAsIGlwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBlbHNlXG4gICAgICAgIGRpZSgxLCBiYXNlKTtcbiAgICB9O1xuICAgIHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzID0gKGJhc2UsIHJlY2lwZSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIChzdGF0ZSwgLi4uYXJncykgPT4gdGhpcy5wcm9kdWNlV2l0aFBhdGNoZXMoc3RhdGUsIChkcmFmdCkgPT4gYmFzZShkcmFmdCwgLi4uYXJncykpO1xuICAgICAgfVxuICAgICAgbGV0IHBhdGNoZXMsIGludmVyc2VQYXRjaGVzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9kdWNlKGJhc2UsIHJlY2lwZSwgKHAsIGlwKSA9PiB7XG4gICAgICAgIHBhdGNoZXMgPSBwO1xuICAgICAgICBpbnZlcnNlUGF0Y2hlcyA9IGlwO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gW3Jlc3VsdCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXNdO1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBjb25maWc/LmF1dG9GcmVlemUgPT09IFwiYm9vbGVhblwiKVxuICAgICAgdGhpcy5zZXRBdXRvRnJlZXplKGNvbmZpZy5hdXRvRnJlZXplKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZz8udXNlU3RyaWN0U2hhbGxvd0NvcHkgPT09IFwiYm9vbGVhblwiKVxuICAgICAgdGhpcy5zZXRVc2VTdHJpY3RTaGFsbG93Q29weShjb25maWcudXNlU3RyaWN0U2hhbGxvd0NvcHkpO1xuICB9XG4gIGNyZWF0ZURyYWZ0KGJhc2UpIHtcbiAgICBpZiAoIWlzRHJhZnRhYmxlKGJhc2UpKVxuICAgICAgZGllKDgpO1xuICAgIGlmIChpc0RyYWZ0KGJhc2UpKVxuICAgICAgYmFzZSA9IGN1cnJlbnQoYmFzZSk7XG4gICAgY29uc3Qgc2NvcGUgPSBlbnRlclNjb3BlKHRoaXMpO1xuICAgIGNvbnN0IHByb3h5ID0gY3JlYXRlUHJveHkoYmFzZSwgdm9pZCAwKTtcbiAgICBwcm94eVtEUkFGVF9TVEFURV0uaXNNYW51YWxfID0gdHJ1ZTtcbiAgICBsZWF2ZVNjb3BlKHNjb3BlKTtcbiAgICByZXR1cm4gcHJveHk7XG4gIH1cbiAgZmluaXNoRHJhZnQoZHJhZnQsIHBhdGNoTGlzdGVuZXIpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGRyYWZ0ICYmIGRyYWZ0W0RSQUZUX1NUQVRFXTtcbiAgICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5pc01hbnVhbF8pXG4gICAgICBkaWUoOSk7XG4gICAgY29uc3QgeyBzY29wZV86IHNjb3BlIH0gPSBzdGF0ZTtcbiAgICB1c2VQYXRjaGVzSW5TY29wZShzY29wZSwgcGF0Y2hMaXN0ZW5lcik7XG4gICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQodm9pZCAwLCBzY29wZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhc3MgdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IGZyZWV6ZSBhbGwgY29waWVzIGNyZWF0ZWQgYnkgSW1tZXIuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGF1dG8tZnJlZXppbmcgaXMgZW5hYmxlZC5cbiAgICovXG4gIHNldEF1dG9GcmVlemUodmFsdWUpIHtcbiAgICB0aGlzLmF1dG9GcmVlemVfID0gdmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFBhc3MgdHJ1ZSB0byBlbmFibGUgc3RyaWN0IHNoYWxsb3cgY29weS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaW1tZXIgZG9lcyBub3QgY29weSB0aGUgb2JqZWN0IGRlc2NyaXB0b3JzIHN1Y2ggYXMgZ2V0dGVyLCBzZXR0ZXIgYW5kIG5vbi1lbnVtcmFibGUgcHJvcGVydGllcy5cbiAgICovXG4gIHNldFVzZVN0cmljdFNoYWxsb3dDb3B5KHZhbHVlKSB7XG4gICAgdGhpcy51c2VTdHJpY3RTaGFsbG93Q29weV8gPSB2YWx1ZTtcbiAgfVxuICBhcHBseVBhdGNoZXMoYmFzZSwgcGF0Y2hlcykge1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IHBhdGNoZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHBhdGNoID0gcGF0Y2hlc1tpXTtcbiAgICAgIGlmIChwYXRjaC5wYXRoLmxlbmd0aCA9PT0gMCAmJiBwYXRjaC5vcCA9PT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgYmFzZSA9IHBhdGNoLnZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGkgPiAtMSkge1xuICAgICAgcGF0Y2hlcyA9IHBhdGNoZXMuc2xpY2UoaSArIDEpO1xuICAgIH1cbiAgICBjb25zdCBhcHBseVBhdGNoZXNJbXBsID0gZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5hcHBseVBhdGNoZXNfO1xuICAgIGlmIChpc0RyYWZ0KGJhc2UpKSB7XG4gICAgICByZXR1cm4gYXBwbHlQYXRjaGVzSW1wbChiYXNlLCBwYXRjaGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvZHVjZShcbiAgICAgIGJhc2UsXG4gICAgICAoZHJhZnQpID0+IGFwcGx5UGF0Y2hlc0ltcGwoZHJhZnQsIHBhdGNoZXMpXG4gICAgKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGNyZWF0ZVByb3h5KHZhbHVlLCBwYXJlbnQpIHtcbiAgY29uc3QgZHJhZnQgPSBpc01hcCh2YWx1ZSkgPyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlNYXBfKHZhbHVlLCBwYXJlbnQpIDogaXNTZXQodmFsdWUpID8gZ2V0UGx1Z2luKFwiTWFwU2V0XCIpLnByb3h5U2V0Xyh2YWx1ZSwgcGFyZW50KSA6IGNyZWF0ZVByb3h5UHJveHkodmFsdWUsIHBhcmVudCk7XG4gIGNvbnN0IHNjb3BlID0gcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpO1xuICBzY29wZS5kcmFmdHNfLnB1c2goZHJhZnQpO1xuICByZXR1cm4gZHJhZnQ7XG59XG5cbi8vIHNyYy9jb3JlL2N1cnJlbnQudHNcbmZ1bmN0aW9uIGN1cnJlbnQodmFsdWUpIHtcbiAgaWYgKCFpc0RyYWZ0KHZhbHVlKSlcbiAgICBkaWUoMTAsIHZhbHVlKTtcbiAgcmV0dXJuIGN1cnJlbnRJbXBsKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGN1cnJlbnRJbXBsKHZhbHVlKSB7XG4gIGlmICghaXNEcmFmdGFibGUodmFsdWUpIHx8IGlzRnJvemVuKHZhbHVlKSlcbiAgICByZXR1cm4gdmFsdWU7XG4gIGNvbnN0IHN0YXRlID0gdmFsdWVbRFJBRlRfU1RBVEVdO1xuICBsZXQgY29weTtcbiAgaWYgKHN0YXRlKSB7XG4gICAgaWYgKCFzdGF0ZS5tb2RpZmllZF8pXG4gICAgICByZXR1cm4gc3RhdGUuYmFzZV87XG4gICAgc3RhdGUuZmluYWxpemVkXyA9IHRydWU7XG4gICAgY29weSA9IHNoYWxsb3dDb3B5KHZhbHVlLCBzdGF0ZS5zY29wZV8uaW1tZXJfLnVzZVN0cmljdFNoYWxsb3dDb3B5Xyk7XG4gIH0gZWxzZSB7XG4gICAgY29weSA9IHNoYWxsb3dDb3B5KHZhbHVlLCB0cnVlKTtcbiAgfVxuICBlYWNoKGNvcHksIChrZXksIGNoaWxkVmFsdWUpID0+IHtcbiAgICBzZXQoY29weSwga2V5LCBjdXJyZW50SW1wbChjaGlsZFZhbHVlKSk7XG4gIH0pO1xuICBpZiAoc3RhdGUpIHtcbiAgICBzdGF0ZS5maW5hbGl6ZWRfID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59XG5cbi8vIHNyYy9wbHVnaW5zL3BhdGNoZXMudHNcbmZ1bmN0aW9uIGVuYWJsZVBhdGNoZXMoKSB7XG4gIGNvbnN0IGVycm9yT2Zmc2V0ID0gMTY7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBlcnJvcnMucHVzaChcbiAgICAgICdTZXRzIGNhbm5vdCBoYXZlIFwicmVwbGFjZVwiIHBhdGNoZXMuJyxcbiAgICAgIGZ1bmN0aW9uKG9wKSB7XG4gICAgICAgIHJldHVybiBcIlVuc3VwcG9ydGVkIHBhdGNoIG9wZXJhdGlvbjogXCIgKyBvcDtcbiAgICAgIH0sXG4gICAgICBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBcIkNhbm5vdCBhcHBseSBwYXRjaCwgcGF0aCBkb2Vzbid0IHJlc29sdmU6IFwiICsgcGF0aDtcbiAgICAgIH0sXG4gICAgICBcIlBhdGNoaW5nIHJlc2VydmVkIGF0dHJpYnV0ZXMgbGlrZSBfX3Byb3RvX18sIHByb3RvdHlwZSBhbmQgY29uc3RydWN0b3IgaXMgbm90IGFsbG93ZWRcIlxuICAgICk7XG4gIH1cbiAgY29uc3QgUkVQTEFDRSA9IFwicmVwbGFjZVwiO1xuICBjb25zdCBBREQgPSBcImFkZFwiO1xuICBjb25zdCBSRU1PVkUgPSBcInJlbW92ZVwiO1xuICBmdW5jdGlvbiBnZW5lcmF0ZVBhdGNoZXNfKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBzd2l0Y2ggKHN0YXRlLnR5cGVfKSB7XG4gICAgICBjYXNlIDAgLyogT2JqZWN0ICovOlxuICAgICAgY2FzZSAyIC8qIE1hcCAqLzpcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlUGF0Y2hlc0Zyb21Bc3NpZ25lZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBiYXNlUGF0aCxcbiAgICAgICAgICBwYXRjaGVzLFxuICAgICAgICAgIGludmVyc2VQYXRjaGVzXG4gICAgICAgICk7XG4gICAgICBjYXNlIDEgLyogQXJyYXkgKi86XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKTtcbiAgICAgIGNhc2UgMyAvKiBTZXQgKi86XG4gICAgICAgIHJldHVybiBnZW5lcmF0ZVNldFBhdGNoZXMoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgYmFzZVBhdGgsXG4gICAgICAgICAgcGF0Y2hlcyxcbiAgICAgICAgICBpbnZlcnNlUGF0Y2hlc1xuICAgICAgICApO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKSB7XG4gICAgbGV0IHsgYmFzZV8sIGFzc2lnbmVkXyB9ID0gc3RhdGU7XG4gICAgbGV0IGNvcHlfID0gc3RhdGUuY29weV87XG4gICAgaWYgKGNvcHlfLmxlbmd0aCA8IGJhc2VfLmxlbmd0aCkge1xuICAgICAgO1xuICAgICAgW2Jhc2VfLCBjb3B5X10gPSBbY29weV8sIGJhc2VfXTtcbiAgICAgIFtwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlc10gPSBbaW52ZXJzZVBhdGNoZXMsIHBhdGNoZXNdO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJhc2VfLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXNzaWduZWRfW2ldICYmIGNvcHlfW2ldICE9PSBiYXNlX1tpXSkge1xuICAgICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSk7XG4gICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgb3A6IFJFUExBQ0UsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICAvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgICAvLyBkdWUgdG8gdGhlIGJhc2UvY29weSBpbnZlcnNpb24gYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb25cbiAgICAgICAgICB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoY29weV9baV0pXG4gICAgICAgIH0pO1xuICAgICAgICBpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICBvcDogUkVQTEFDRSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChiYXNlX1tpXSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBjb3B5Xy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pO1xuICAgICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgICAgb3A6IEFERCxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgLy8gTmVlZCB0byBtYXliZSBjbG9uZSBpdCwgYXMgaXQgY2FuIGluIGZhY3QgYmUgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICAgIC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuICAgICAgICB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoY29weV9baV0pXG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGNvcHlfLmxlbmd0aCAtIDE7IGJhc2VfLmxlbmd0aCA8PSBpOyAtLWkpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKTtcbiAgICAgIGludmVyc2VQYXRjaGVzLnB1c2goe1xuICAgICAgICBvcDogUkVNT1ZFLFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKHN0YXRlLCBiYXNlUGF0aCwgcGF0Y2hlcywgaW52ZXJzZVBhdGNoZXMpIHtcbiAgICBjb25zdCB7IGJhc2VfLCBjb3B5XyB9ID0gc3RhdGU7XG4gICAgZWFjaChzdGF0ZS5hc3NpZ25lZF8sIChrZXksIGFzc2lnbmVkVmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9yaWdWYWx1ZSA9IGdldChiYXNlXywga2V5KTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZ2V0KGNvcHlfLCBrZXkpO1xuICAgICAgY29uc3Qgb3AgPSAhYXNzaWduZWRWYWx1ZSA/IFJFTU9WRSA6IGhhcyhiYXNlXywga2V5KSA/IFJFUExBQ0UgOiBBREQ7XG4gICAgICBpZiAob3JpZ1ZhbHVlID09PSB2YWx1ZSAmJiBvcCA9PT0gUkVQTEFDRSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChrZXkpO1xuICAgICAgcGF0Y2hlcy5wdXNoKG9wID09PSBSRU1PVkUgPyB7IG9wLCBwYXRoIH0gOiB7IG9wLCBwYXRoLCB2YWx1ZSB9KTtcbiAgICAgIGludmVyc2VQYXRjaGVzLnB1c2goXG4gICAgICAgIG9wID09PSBBREQgPyB7IG9wOiBSRU1PVkUsIHBhdGggfSA6IG9wID09PSBSRU1PVkUgPyB7IG9wOiBBREQsIHBhdGgsIHZhbHVlOiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZChvcmlnVmFsdWUpIH0gOiB7IG9wOiBSRVBMQUNFLCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKSB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGdlbmVyYXRlU2V0UGF0Y2hlcyhzdGF0ZSwgYmFzZVBhdGgsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKSB7XG4gICAgbGV0IHsgYmFzZV8sIGNvcHlfIH0gPSBzdGF0ZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgYmFzZV8uZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIGlmICghY29weV8uaGFzKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSk7XG4gICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgb3A6IFJFTU9WRSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBpbnZlcnNlUGF0Y2hlcy51bnNoaWZ0KHtcbiAgICAgICAgICBvcDogQURELFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfSk7XG4gICAgaSA9IDA7XG4gICAgY29weV8uZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgIGlmICghYmFzZV8uaGFzKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBwYXRoID0gYmFzZVBhdGguY29uY2F0KFtpXSk7XG4gICAgICAgIHBhdGNoZXMucHVzaCh7XG4gICAgICAgICAgb3A6IEFERCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBpbnZlcnNlUGF0Y2hlcy51bnNoaWZ0KHtcbiAgICAgICAgICBvcDogUkVNT1ZFLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2VWYWx1ZSwgcmVwbGFjZW1lbnQsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzKSB7XG4gICAgcGF0Y2hlcy5wdXNoKHtcbiAgICAgIG9wOiBSRVBMQUNFLFxuICAgICAgcGF0aDogW10sXG4gICAgICB2YWx1ZTogcmVwbGFjZW1lbnQgPT09IE5PVEhJTkcgPyB2b2lkIDAgOiByZXBsYWNlbWVudFxuICAgIH0pO1xuICAgIGludmVyc2VQYXRjaGVzLnB1c2goe1xuICAgICAgb3A6IFJFUExBQ0UsXG4gICAgICBwYXRoOiBbXSxcbiAgICAgIHZhbHVlOiBiYXNlVmFsdWVcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBhcHBseVBhdGNoZXNfKGRyYWZ0LCBwYXRjaGVzKSB7XG4gICAgcGF0Y2hlcy5mb3JFYWNoKChwYXRjaCkgPT4ge1xuICAgICAgY29uc3QgeyBwYXRoLCBvcCB9ID0gcGF0Y2g7XG4gICAgICBsZXQgYmFzZSA9IGRyYWZ0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJlbnRUeXBlID0gZ2V0QXJjaHR5cGUoYmFzZSk7XG4gICAgICAgIGxldCBwID0gcGF0aFtpXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwICE9PSBcInN0cmluZ1wiICYmIHR5cGVvZiBwICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgcCA9IFwiXCIgKyBwO1xuICAgICAgICB9XG4gICAgICAgIGlmICgocGFyZW50VHlwZSA9PT0gMCAvKiBPYmplY3QgKi8gfHwgcGFyZW50VHlwZSA9PT0gMSAvKiBBcnJheSAqLykgJiYgKHAgPT09IFwiX19wcm90b19fXCIgfHwgcCA9PT0gXCJjb25zdHJ1Y3RvclwiKSlcbiAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQgKyAzKTtcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlID09PSBcImZ1bmN0aW9uXCIgJiYgcCA9PT0gXCJwcm90b3R5cGVcIilcbiAgICAgICAgICBkaWUoZXJyb3JPZmZzZXQgKyAzKTtcbiAgICAgICAgYmFzZSA9IGdldChiYXNlLCBwKTtcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKVxuICAgICAgICAgIGRpZShlcnJvck9mZnNldCArIDIsIHBhdGguam9pbihcIi9cIikpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGdldEFyY2h0eXBlKGJhc2UpO1xuICAgICAgY29uc3QgdmFsdWUgPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKHBhdGNoLnZhbHVlKTtcbiAgICAgIGNvbnN0IGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgICAgIHN3aXRjaCAob3ApIHtcbiAgICAgICAgY2FzZSBSRVBMQUNFOlxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAyIC8qIE1hcCAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Uuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY2FzZSAzIC8qIFNldCAqLzpcbiAgICAgICAgICAgICAgZGllKGVycm9yT2Zmc2V0KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIGNhc2UgQUREOlxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAxIC8qIEFycmF5ICovOlxuICAgICAgICAgICAgICByZXR1cm4ga2V5ID09PSBcIi1cIiA/IGJhc2UucHVzaCh2YWx1ZSkgOiBiYXNlLnNwbGljZShrZXksIDAsIHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgMiAvKiBNYXAgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgMyAvKiBTZXQgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlIFJFTU9WRTpcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgMSAvKiBBcnJheSAqLzpcbiAgICAgICAgICAgICAgcmV0dXJuIGJhc2Uuc3BsaWNlKGtleSwgMSk7XG4gICAgICAgICAgICBjYXNlIDIgLyogTWFwICovOlxuICAgICAgICAgICAgICByZXR1cm4gYmFzZS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIGNhc2UgMyAvKiBTZXQgKi86XG4gICAgICAgICAgICAgIHJldHVybiBiYXNlLmRlbGV0ZShwYXRjaC52YWx1ZSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlIGJhc2Vba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZGllKGVycm9yT2Zmc2V0ICsgMSwgb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkcmFmdDtcbiAgfVxuICBmdW5jdGlvbiBkZWVwQ2xvbmVQYXRjaFZhbHVlKG9iaikge1xuICAgIGlmICghaXNEcmFmdGFibGUob2JqKSlcbiAgICAgIHJldHVybiBvYmo7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSlcbiAgICAgIHJldHVybiBvYmoubWFwKGRlZXBDbG9uZVBhdGNoVmFsdWUpO1xuICAgIGlmIChpc01hcChvYmopKVxuICAgICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICAgIEFycmF5LmZyb20ob2JqLmVudHJpZXMoKSkubWFwKChbaywgdl0pID0+IFtrLCBkZWVwQ2xvbmVQYXRjaFZhbHVlKHYpXSlcbiAgICAgICk7XG4gICAgaWYgKGlzU2V0KG9iaikpXG4gICAgICByZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKG9iaikubWFwKGRlZXBDbG9uZVBhdGNoVmFsdWUpKTtcbiAgICBjb25zdCBjbG9uZWQgPSBPYmplY3QuY3JlYXRlKGdldFByb3RvdHlwZU9mKG9iaikpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iailcbiAgICAgIGNsb25lZFtrZXldID0gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmpba2V5XSk7XG4gICAgaWYgKGhhcyhvYmosIERSQUZUQUJMRSkpXG4gICAgICBjbG9uZWRbRFJBRlRBQkxFXSA9IG9ialtEUkFGVEFCTEVdO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbiAgZnVuY3Rpb24gY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob2JqKSB7XG4gICAgaWYgKGlzRHJhZnQob2JqKSkge1xuICAgICAgcmV0dXJuIGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqKTtcbiAgICB9IGVsc2VcbiAgICAgIHJldHVybiBvYmo7XG4gIH1cbiAgbG9hZFBsdWdpbihcIlBhdGNoZXNcIiwge1xuICAgIGFwcGx5UGF0Y2hlc18sXG4gICAgZ2VuZXJhdGVQYXRjaGVzXyxcbiAgICBnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc19cbiAgfSk7XG59XG5cbi8vIHNyYy9wbHVnaW5zL21hcHNldC50c1xuZnVuY3Rpb24gZW5hYmxlTWFwU2V0KCkge1xuICBjbGFzcyBEcmFmdE1hcCBleHRlbmRzIE1hcCB7XG4gICAgY29uc3RydWN0b3IodGFyZ2V0LCBwYXJlbnQpIHtcbiAgICAgIHN1cGVyKCk7XG4gICAgICB0aGlzW0RSQUZUX1NUQVRFXSA9IHtcbiAgICAgICAgdHlwZV86IDIgLyogTWFwICovLFxuICAgICAgICBwYXJlbnRfOiBwYXJlbnQsXG4gICAgICAgIHNjb3BlXzogcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpLFxuICAgICAgICBtb2RpZmllZF86IGZhbHNlLFxuICAgICAgICBmaW5hbGl6ZWRfOiBmYWxzZSxcbiAgICAgICAgY29weV86IHZvaWQgMCxcbiAgICAgICAgYXNzaWduZWRfOiB2b2lkIDAsXG4gICAgICAgIGJhc2VfOiB0YXJnZXQsXG4gICAgICAgIGRyYWZ0XzogdGhpcyxcbiAgICAgICAgaXNNYW51YWxfOiBmYWxzZSxcbiAgICAgICAgcmV2b2tlZF86IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgIHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLnNpemU7XG4gICAgfVxuICAgIGhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBsYXRlc3QodGhpc1tEUkFGVF9TVEFURV0pLmhhcyhrZXkpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBpZiAoIWxhdGVzdChzdGF0ZSkuaGFzKGtleSkgfHwgbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcbiAgICAgICAgcHJlcGFyZU1hcENvcHkoc3RhdGUpO1xuICAgICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXy5zZXQoa2V5LCB0cnVlKTtcbiAgICAgICAgc3RhdGUuY29weV8uc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF8uc2V0KGtleSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVsZXRlKGtleSkge1xuICAgICAgaWYgKCF0aGlzLmhhcyhrZXkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgcHJlcGFyZU1hcENvcHkoc3RhdGUpO1xuICAgICAgbWFya0NoYW5nZWQoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLmJhc2VfLmhhcyhrZXkpKSB7XG4gICAgICAgIHN0YXRlLmFzc2lnbmVkXy5zZXQoa2V5LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5hc3NpZ25lZF8uZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgICBzdGF0ZS5jb3B5Xy5kZWxldGUoa2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgaWYgKGxhdGVzdChzdGF0ZSkuc2l6ZSkge1xuICAgICAgICBwcmVwYXJlTWFwQ29weShzdGF0ZSk7XG4gICAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUuYXNzaWduZWRfID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgICAgZWFjaChzdGF0ZS5iYXNlXywgKGtleSkgPT4ge1xuICAgICAgICAgIHN0YXRlLmFzc2lnbmVkXy5zZXQoa2V5LCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZS5jb3B5Xy5jbGVhcigpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3JFYWNoKGNiLCB0aGlzQXJnKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgbGF0ZXN0KHN0YXRlKS5mb3JFYWNoKChfdmFsdWUsIGtleSwgX21hcCkgPT4ge1xuICAgICAgICBjYi5jYWxsKHRoaXNBcmcsIHRoaXMuZ2V0KGtleSksIGtleSwgdGhpcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxhdGVzdChzdGF0ZSkuZ2V0KGtleSk7XG4gICAgICBpZiAoc3RhdGUuZmluYWxpemVkXyB8fCAhaXNEcmFmdGFibGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAhPT0gc3RhdGUuYmFzZV8uZ2V0KGtleSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZHJhZnQgPSBjcmVhdGVQcm94eSh2YWx1ZSwgc3RhdGUpO1xuICAgICAgcHJlcGFyZU1hcENvcHkoc3RhdGUpO1xuICAgICAgc3RhdGUuY29weV8uc2V0KGtleSwgZHJhZnQpO1xuICAgICAgcmV0dXJuIGRyYWZ0O1xuICAgIH1cbiAgICBrZXlzKCkge1xuICAgICAgcmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkua2V5cygpO1xuICAgIH1cbiAgICB2YWx1ZXMoKSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXMua2V5cygpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06ICgpID0+IHRoaXMudmFsdWVzKCksXG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCByID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgIGlmIChyLmRvbmUpXG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgZW50cmllcygpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5rZXlzKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4gdGhpcy5lbnRyaWVzKCksXG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCByID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgIGlmIChyLmRvbmUpXG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KHIudmFsdWUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlOiBbci52YWx1ZSwgdmFsdWVdXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgWyhEUkFGVF9TVEFURSwgU3ltYm9sLml0ZXJhdG9yKV0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHByb3h5TWFwXyh0YXJnZXQsIHBhcmVudCkge1xuICAgIHJldHVybiBuZXcgRHJhZnRNYXAodGFyZ2V0LCBwYXJlbnQpO1xuICB9XG4gIGZ1bmN0aW9uIHByZXBhcmVNYXBDb3B5KHN0YXRlKSB7XG4gICAgaWYgKCFzdGF0ZS5jb3B5Xykge1xuICAgICAgc3RhdGUuYXNzaWduZWRfID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgICAgIHN0YXRlLmNvcHlfID0gbmV3IE1hcChzdGF0ZS5iYXNlXyk7XG4gICAgfVxuICB9XG4gIGNsYXNzIERyYWZ0U2V0IGV4dGVuZHMgU2V0IHtcbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIHBhcmVudCkge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXNbRFJBRlRfU1RBVEVdID0ge1xuICAgICAgICB0eXBlXzogMyAvKiBTZXQgKi8sXG4gICAgICAgIHBhcmVudF86IHBhcmVudCxcbiAgICAgICAgc2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCksXG4gICAgICAgIG1vZGlmaWVkXzogZmFsc2UsXG4gICAgICAgIGZpbmFsaXplZF86IGZhbHNlLFxuICAgICAgICBjb3B5Xzogdm9pZCAwLFxuICAgICAgICBiYXNlXzogdGFyZ2V0LFxuICAgICAgICBkcmFmdF86IHRoaXMsXG4gICAgICAgIGRyYWZ0c186IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCksXG4gICAgICAgIHJldm9rZWRfOiBmYWxzZSxcbiAgICAgICAgaXNNYW51YWxfOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IHNpemUoKSB7XG4gICAgICByZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5zaXplO1xuICAgIH1cbiAgICBoYXModmFsdWUpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgaWYgKCFzdGF0ZS5jb3B5Xykge1xuICAgICAgICByZXR1cm4gc3RhdGUuYmFzZV8uaGFzKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5jb3B5Xy5oYXModmFsdWUpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChzdGF0ZS5kcmFmdHNfLmhhcyh2YWx1ZSkgJiYgc3RhdGUuY29weV8uaGFzKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhZGQodmFsdWUpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgaWYgKCF0aGlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgcHJlcGFyZVNldENvcHkoc3RhdGUpO1xuICAgICAgICBtYXJrQ2hhbmdlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLmNvcHlfLmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVsZXRlKHZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZS5jb3B5Xy5kZWxldGUodmFsdWUpIHx8IChzdGF0ZS5kcmFmdHNfLmhhcyh2YWx1ZSkgPyBzdGF0ZS5jb3B5Xy5kZWxldGUoc3RhdGUuZHJhZnRzXy5nZXQodmFsdWUpKSA6IChcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgZmFsc2VcbiAgICAgICkpO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV07XG4gICAgICBhc3NlcnRVbnJldm9rZWQoc3RhdGUpO1xuICAgICAgaWYgKGxhdGVzdChzdGF0ZSkuc2l6ZSkge1xuICAgICAgICBwcmVwYXJlU2V0Q29weShzdGF0ZSk7XG4gICAgICAgIG1hcmtDaGFuZ2VkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUuY29weV8uY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsdWVzKCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXTtcbiAgICAgIGFzc2VydFVucmV2b2tlZChzdGF0ZSk7XG4gICAgICBwcmVwYXJlU2V0Q29weShzdGF0ZSk7XG4gICAgICByZXR1cm4gc3RhdGUuY29weV8udmFsdWVzKCk7XG4gICAgfVxuICAgIGVudHJpZXMoKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdO1xuICAgICAgYXNzZXJ0VW5yZXZva2VkKHN0YXRlKTtcbiAgICAgIHByZXBhcmVTZXRDb3B5KHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZS5jb3B5Xy5lbnRyaWVzKCk7XG4gICAgfVxuICAgIGtleXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKTtcbiAgICB9XG4gICAgWyhEUkFGVF9TVEFURSwgU3ltYm9sLml0ZXJhdG9yKV0oKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKTtcbiAgICB9XG4gICAgZm9yRWFjaChjYiwgdGhpc0FyZykge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLnZhbHVlcygpO1xuICAgICAgbGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIHdoaWxlICghcmVzdWx0LmRvbmUpIHtcbiAgICAgICAgY2IuY2FsbCh0aGlzQXJnLCByZXN1bHQudmFsdWUsIHJlc3VsdC52YWx1ZSwgdGhpcyk7XG4gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gcHJveHlTZXRfKHRhcmdldCwgcGFyZW50KSB7XG4gICAgcmV0dXJuIG5ldyBEcmFmdFNldCh0YXJnZXQsIHBhcmVudCk7XG4gIH1cbiAgZnVuY3Rpb24gcHJlcGFyZVNldENvcHkoc3RhdGUpIHtcbiAgICBpZiAoIXN0YXRlLmNvcHlfKSB7XG4gICAgICBzdGF0ZS5jb3B5XyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgICBzdGF0ZS5iYXNlXy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAoaXNEcmFmdGFibGUodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgZHJhZnQgPSBjcmVhdGVQcm94eSh2YWx1ZSwgc3RhdGUpO1xuICAgICAgICAgIHN0YXRlLmRyYWZ0c18uc2V0KHZhbHVlLCBkcmFmdCk7XG4gICAgICAgICAgc3RhdGUuY29weV8uYWRkKGRyYWZ0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5jb3B5Xy5hZGQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gYXNzZXJ0VW5yZXZva2VkKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnJldm9rZWRfKVxuICAgICAgZGllKDMsIEpTT04uc3RyaW5naWZ5KGxhdGVzdChzdGF0ZSkpKTtcbiAgfVxuICBsb2FkUGx1Z2luKFwiTWFwU2V0XCIsIHsgcHJveHlNYXBfLCBwcm94eVNldF8gfSk7XG59XG5cbi8vIHNyYy9pbW1lci50c1xudmFyIGltbWVyID0gbmV3IEltbWVyMigpO1xudmFyIHByb2R1Y2UgPSBpbW1lci5wcm9kdWNlO1xudmFyIHByb2R1Y2VXaXRoUGF0Y2hlcyA9IGltbWVyLnByb2R1Y2VXaXRoUGF0Y2hlcy5iaW5kKFxuICBpbW1lclxuKTtcbnZhciBzZXRBdXRvRnJlZXplID0gaW1tZXIuc2V0QXV0b0ZyZWV6ZS5iaW5kKGltbWVyKTtcbnZhciBzZXRVc2VTdHJpY3RTaGFsbG93Q29weSA9IGltbWVyLnNldFVzZVN0cmljdFNoYWxsb3dDb3B5LmJpbmQoaW1tZXIpO1xudmFyIGFwcGx5UGF0Y2hlcyA9IGltbWVyLmFwcGx5UGF0Y2hlcy5iaW5kKGltbWVyKTtcbnZhciBjcmVhdGVEcmFmdCA9IGltbWVyLmNyZWF0ZURyYWZ0LmJpbmQoaW1tZXIpO1xudmFyIGZpbmlzaERyYWZ0ID0gaW1tZXIuZmluaXNoRHJhZnQuYmluZChpbW1lcik7XG5mdW5jdGlvbiBjYXN0RHJhZnQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuZnVuY3Rpb24gY2FzdEltbXV0YWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQge1xuICBJbW1lcjIgYXMgSW1tZXIsXG4gIGFwcGx5UGF0Y2hlcyxcbiAgY2FzdERyYWZ0LFxuICBjYXN0SW1tdXRhYmxlLFxuICBjcmVhdGVEcmFmdCxcbiAgY3VycmVudCxcbiAgZW5hYmxlTWFwU2V0LFxuICBlbmFibGVQYXRjaGVzLFxuICBmaW5pc2hEcmFmdCxcbiAgZnJlZXplLFxuICBEUkFGVEFCTEUgYXMgaW1tZXJhYmxlLFxuICBpc0RyYWZ0LFxuICBpc0RyYWZ0YWJsZSxcbiAgTk9USElORyBhcyBub3RoaW5nLFxuICBvcmlnaW5hbCxcbiAgcHJvZHVjZSxcbiAgcHJvZHVjZVdpdGhQYXRjaGVzLFxuICBzZXRBdXRvRnJlZXplLFxuICBzZXRVc2VTdHJpY3RTaGFsbG93Q29weVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWltbWVyLm1qcy5tYXAiLCIvLyBzcmMvaW5kZXgudHNcbmV4cG9ydCAqIGZyb20gXCJyZWR1eFwiO1xuaW1wb3J0IHsgcHJvZHVjZSwgY3VycmVudCBhcyBjdXJyZW50MywgZnJlZXplLCBvcmlnaW5hbCBhcyBvcmlnaW5hbDIsIGlzRHJhZnQgYXMgaXNEcmFmdDUgfSBmcm9tIFwiaW1tZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yLCBjcmVhdGVTZWxlY3RvckNyZWF0b3IgYXMgY3JlYXRlU2VsZWN0b3JDcmVhdG9yMiwgbHJ1TWVtb2l6ZSwgd2Vha01hcE1lbW9pemUgYXMgd2Vha01hcE1lbW9pemUyIH0gZnJvbSBcInJlc2VsZWN0XCI7XG5cbi8vIHNyYy9jcmVhdGVEcmFmdFNhZmVTZWxlY3Rvci50c1xuaW1wb3J0IHsgY3VycmVudCwgaXNEcmFmdCB9IGZyb20gXCJpbW1lclwiO1xuaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3JDcmVhdG9yLCB3ZWFrTWFwTWVtb2l6ZSB9IGZyb20gXCJyZXNlbGVjdFwiO1xudmFyIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yQ3JlYXRvciA9ICguLi5hcmdzKSA9PiB7XG4gIGNvbnN0IGNyZWF0ZVNlbGVjdG9yMiA9IGNyZWF0ZVNlbGVjdG9yQ3JlYXRvciguLi5hcmdzKTtcbiAgY29uc3QgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IyID0gT2JqZWN0LmFzc2lnbigoLi4uYXJnczIpID0+IHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yMiguLi5hcmdzMik7XG4gICAgY29uc3Qgd3JhcHBlZFNlbGVjdG9yID0gKHZhbHVlLCAuLi5yZXN0KSA9PiBzZWxlY3Rvcihpc0RyYWZ0KHZhbHVlKSA/IGN1cnJlbnQodmFsdWUpIDogdmFsdWUsIC4uLnJlc3QpO1xuICAgIE9iamVjdC5hc3NpZ24od3JhcHBlZFNlbGVjdG9yLCBzZWxlY3Rvcik7XG4gICAgcmV0dXJuIHdyYXBwZWRTZWxlY3RvcjtcbiAgfSwge1xuICAgIHdpdGhUeXBlczogKCkgPT4gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IyXG4gIH0pO1xuICByZXR1cm4gY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IyO1xufTtcbnZhciBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvciA9IC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVEcmFmdFNhZmVTZWxlY3RvckNyZWF0b3Iod2Vha01hcE1lbW9pemUpO1xuXG4vLyBzcmMvY29uZmlndXJlU3RvcmUudHNcbmltcG9ydCB7IGFwcGx5TWlkZGxld2FyZSwgY3JlYXRlU3RvcmUsIGNvbXBvc2UgYXMgY29tcG9zZTIsIGNvbWJpbmVSZWR1Y2VycywgaXNQbGFpbk9iamVjdCBhcyBpc1BsYWluT2JqZWN0MiB9IGZyb20gXCJyZWR1eFwiO1xuXG4vLyBzcmMvZGV2dG9vbHNFeHRlbnNpb24udHNcbmltcG9ydCB7IGNvbXBvc2UgfSBmcm9tIFwicmVkdXhcIjtcbnZhciBjb21wb3NlV2l0aERldlRvb2xzID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA6IGZ1bmN0aW9uKCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZvaWQgMDtcbiAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09IFwib2JqZWN0XCIpIHJldHVybiBjb21wb3NlO1xuICByZXR1cm4gY29tcG9zZS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbnZhciBkZXZUb29sc0VuaGFuY2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fIDogZnVuY3Rpb24oKSB7XG4gIHJldHVybiBmdW5jdGlvbihub29wMykge1xuICAgIHJldHVybiBub29wMztcbiAgfTtcbn07XG5cbi8vIHNyYy9nZXREZWZhdWx0TWlkZGxld2FyZS50c1xuaW1wb3J0IHsgdGh1bmsgYXMgdGh1bmtNaWRkbGV3YXJlLCB3aXRoRXh0cmFBcmd1bWVudCB9IGZyb20gXCJyZWR1eC10aHVua1wiO1xuXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCJyZWR1eFwiO1xuXG4vLyBzcmMvdHNIZWxwZXJzLnRzXG52YXIgaGFzTWF0Y2hGdW5jdGlvbiA9ICh2KSA9PiB7XG4gIHJldHVybiB2ICYmIHR5cGVvZiB2Lm1hdGNoID09PSBcImZ1bmN0aW9uXCI7XG59O1xuXG4vLyBzcmMvY3JlYXRlQWN0aW9uLnRzXG5mdW5jdGlvbiBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUFjdGlvbikge1xuICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKC4uLmFyZ3MpIHtcbiAgICBpZiAocHJlcGFyZUFjdGlvbikge1xuICAgICAgbGV0IHByZXBhcmVkID0gcHJlcGFyZUFjdGlvbiguLi5hcmdzKTtcbiAgICAgIGlmICghcHJlcGFyZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMCkgOiBcInByZXBhcmVBY3Rpb24gZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0XCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgcGF5bG9hZDogcHJlcGFyZWQucGF5bG9hZCxcbiAgICAgICAgLi4uXCJtZXRhXCIgaW4gcHJlcGFyZWQgJiYge1xuICAgICAgICAgIG1ldGE6IHByZXBhcmVkLm1ldGFcbiAgICAgICAgfSxcbiAgICAgICAgLi4uXCJlcnJvclwiIGluIHByZXBhcmVkICYmIHtcbiAgICAgICAgICBlcnJvcjogcHJlcGFyZWQuZXJyb3JcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGUsXG4gICAgICBwYXlsb2FkOiBhcmdzWzBdXG4gICAgfTtcbiAgfVxuICBhY3Rpb25DcmVhdG9yLnRvU3RyaW5nID0gKCkgPT4gYCR7dHlwZX1gO1xuICBhY3Rpb25DcmVhdG9yLnR5cGUgPSB0eXBlO1xuICBhY3Rpb25DcmVhdG9yLm1hdGNoID0gKGFjdGlvbikgPT4gaXNBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24udHlwZSA9PT0gdHlwZTtcbiAgcmV0dXJuIGFjdGlvbkNyZWF0b3I7XG59XG5mdW5jdGlvbiBpc0FjdGlvbkNyZWF0b3IoYWN0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSBcImZ1bmN0aW9uXCIgJiYgXCJ0eXBlXCIgaW4gYWN0aW9uICYmIC8vIGhhc01hdGNoRnVuY3Rpb24gb25seSB3YW50cyBNYXRjaGVycyBidXQgSSBkb24ndCBzZWUgdGhlIHBvaW50IGluIHJld3JpdGluZyBpdFxuICBoYXNNYXRjaEZ1bmN0aW9uKGFjdGlvbik7XG59XG5mdW5jdGlvbiBpc0ZTQShhY3Rpb24pIHtcbiAgcmV0dXJuIGlzQWN0aW9uKGFjdGlvbikgJiYgT2JqZWN0LmtleXMoYWN0aW9uKS5ldmVyeShpc1ZhbGlkS2V5KTtcbn1cbmZ1bmN0aW9uIGlzVmFsaWRLZXkoa2V5KSB7XG4gIHJldHVybiBbXCJ0eXBlXCIsIFwicGF5bG9hZFwiLCBcImVycm9yXCIsIFwibWV0YVwiXS5pbmRleE9mKGtleSkgPiAtMTtcbn1cblxuLy8gc3JjL2FjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlLnRzXG5mdW5jdGlvbiBnZXRNZXNzYWdlKHR5cGUpIHtcbiAgY29uc3Qgc3BsaXRUeXBlID0gdHlwZSA/IGAke3R5cGV9YC5zcGxpdChcIi9cIikgOiBbXTtcbiAgY29uc3QgYWN0aW9uTmFtZSA9IHNwbGl0VHlwZVtzcGxpdFR5cGUubGVuZ3RoIC0gMV0gfHwgXCJhY3Rpb25DcmVhdG9yXCI7XG4gIHJldHVybiBgRGV0ZWN0ZWQgYW4gYWN0aW9uIGNyZWF0b3Igd2l0aCB0eXBlIFwiJHt0eXBlIHx8IFwidW5rbm93blwifVwiIGJlaW5nIGRpc3BhdGNoZWQuIFxuTWFrZSBzdXJlIHlvdSdyZSBjYWxsaW5nIHRoZSBhY3Rpb24gY3JlYXRvciBiZWZvcmUgZGlzcGF0Y2hpbmcsIGkuZS4gXFxgZGlzcGF0Y2goJHthY3Rpb25OYW1lfSgpKVxcYCBpbnN0ZWFkIG9mIFxcYGRpc3BhdGNoKCR7YWN0aW9uTmFtZX0pXFxgLiBUaGlzIGlzIG5lY2Vzc2FyeSBldmVuIGlmIHRoZSBhY3Rpb24gaGFzIG5vIHBheWxvYWQuYDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMgPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbik7XG4gIH1cbiAgY29uc3Qge1xuICAgIGlzQWN0aW9uQ3JlYXRvcjogaXNBY3Rpb25DcmVhdG9yMiA9IGlzQWN0aW9uQ3JlYXRvclxuICB9ID0gb3B0aW9ucztcbiAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XG4gICAgaWYgKGlzQWN0aW9uQ3JlYXRvcjIoYWN0aW9uKSkge1xuICAgICAgY29uc29sZS53YXJuKGdldE1lc3NhZ2UoYWN0aW9uLnR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoYWN0aW9uKTtcbiAgfTtcbn1cblxuLy8gc3JjL3V0aWxzLnRzXG5pbXBvcnQgeyBwcm9kdWNlIGFzIGNyZWF0ZU5leHRTdGF0ZSwgaXNEcmFmdGFibGUgfSBmcm9tIFwiaW1tZXJcIjtcbmZ1bmN0aW9uIGdldFRpbWVNZWFzdXJlVXRpbHMobWF4RGVsYXksIGZuTmFtZSkge1xuICBsZXQgZWxhcHNlZCA9IDA7XG4gIHJldHVybiB7XG4gICAgbWVhc3VyZVRpbWUoZm4pIHtcbiAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBEYXRlLm5vdygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgICAgIGVsYXBzZWQgKz0gZmluaXNoZWQgLSBzdGFydGVkO1xuICAgICAgfVxuICAgIH0sXG4gICAgd2FybklmRXhjZWVkZWQoKSB7XG4gICAgICBpZiAoZWxhcHNlZCA+IG1heERlbGF5KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgJHtmbk5hbWV9IHRvb2sgJHtlbGFwc2VkfW1zLCB3aGljaCBpcyBtb3JlIHRoYW4gdGhlIHdhcm5pbmcgdGhyZXNob2xkIG9mICR7bWF4RGVsYXl9bXMuIFxuSWYgeW91ciBzdGF0ZSBvciBhY3Rpb25zIGFyZSB2ZXJ5IGxhcmdlLCB5b3UgbWF5IHdhbnQgdG8gZGlzYWJsZSB0aGUgbWlkZGxld2FyZSBhcyBpdCBtaWdodCBjYXVzZSB0b28gbXVjaCBvZiBhIHNsb3dkb3duIGluIGRldmVsb3BtZW50IG1vZGUuIFNlZSBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9nZXREZWZhdWx0TWlkZGxld2FyZSBmb3IgaW5zdHJ1Y3Rpb25zLlxuSXQgaXMgZGlzYWJsZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gZmluZChpdGVyYWJsZSwgY29tcGFyYXRvcikge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGl0ZXJhYmxlKSB7XG4gICAgaWYgKGNvbXBhcmF0b3IoZW50cnkpKSB7XG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2b2lkIDA7XG59XG52YXIgVHVwbGUgPSBjbGFzcyBfVHVwbGUgZXh0ZW5kcyBBcnJheSB7XG4gIGNvbnN0cnVjdG9yKC4uLml0ZW1zKSB7XG4gICAgc3VwZXIoLi4uaXRlbXMpO1xuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBfVHVwbGUucHJvdG90eXBlKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFtTeW1ib2wuc3BlY2llc10oKSB7XG4gICAgcmV0dXJuIF9UdXBsZTtcbiAgfVxuICBjb25jYXQoLi4uYXJyKSB7XG4gICAgcmV0dXJuIHN1cGVyLmNvbmNhdC5hcHBseSh0aGlzLCBhcnIpO1xuICB9XG4gIHByZXBlbmQoLi4uYXJyKSB7XG4gICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcnJbMF0pKSB7XG4gICAgICByZXR1cm4gbmV3IF9UdXBsZSguLi5hcnJbMF0uY29uY2F0KHRoaXMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfVHVwbGUoLi4uYXJyLmNvbmNhdCh0aGlzKSk7XG4gIH1cbn07XG5mdW5jdGlvbiBmcmVlemVEcmFmdGFibGUodmFsKSB7XG4gIHJldHVybiBpc0RyYWZ0YWJsZSh2YWwpID8gY3JlYXRlTmV4dFN0YXRlKHZhbCwgKCkgPT4ge1xuICB9KSA6IHZhbDtcbn1cbmZ1bmN0aW9uIGVtcGxhY2UobWFwLCBrZXksIGhhbmRsZXIpIHtcbiAgaWYgKG1hcC5oYXMoa2V5KSkge1xuICAgIGxldCB2YWx1ZSA9IG1hcC5nZXQoa2V5KTtcbiAgICBpZiAoaGFuZGxlci51cGRhdGUpIHtcbiAgICAgIHZhbHVlID0gaGFuZGxlci51cGRhdGUodmFsdWUsIGtleSwgbWFwKTtcbiAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoIWhhbmRsZXIuaW5zZXJ0KSB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMCkgOiBcIk5vIGluc2VydCBwcm92aWRlZCBmb3Iga2V5IG5vdCBhbHJlYWR5IGluIG1hcFwiKTtcbiAgY29uc3QgaW5zZXJ0ZWQgPSBoYW5kbGVyLmluc2VydChrZXksIG1hcCk7XG4gIG1hcC5zZXQoa2V5LCBpbnNlcnRlZCk7XG4gIHJldHVybiBpbnNlcnRlZDtcbn1cblxuLy8gc3JjL2ltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZS50c1xuZnVuY3Rpb24gaXNJbW11dGFibGVEZWZhdWx0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpO1xufVxuZnVuY3Rpb24gdHJhY2tGb3JNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopIHtcbiAgY29uc3QgdHJhY2tlZFByb3BlcnRpZXMgPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmopO1xuICByZXR1cm4ge1xuICAgIGRldGVjdE11dGF0aW9ucygpIHtcbiAgICAgIHJldHVybiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCB0cmFja2VkUHJvcGVydGllcywgb2JqKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzID0gW10sIG9iaiwgcGF0aCA9IFwiXCIsIGNoZWNrZWRPYmplY3RzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkge1xuICBjb25zdCB0cmFja2VkID0ge1xuICAgIHZhbHVlOiBvYmpcbiAgfTtcbiAgaWYgKCFpc0ltbXV0YWJsZShvYmopICYmICFjaGVja2VkT2JqZWN0cy5oYXMob2JqKSkge1xuICAgIGNoZWNrZWRPYmplY3RzLmFkZChvYmopO1xuICAgIHRyYWNrZWQuY2hpbGRyZW4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XG4gICAgICBpZiAoaWdub3JlUGF0aHMubGVuZ3RoICYmIGlnbm9yZVBhdGhzLmluZGV4T2YoY2hpbGRQYXRoKSAhPT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cmFja2VkLmNoaWxkcmVuW2tleV0gPSB0cmFja1Byb3BlcnRpZXMoaXNJbW11dGFibGUsIGlnbm9yZVBhdGhzLCBvYmpba2V5XSwgY2hpbGRQYXRoKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRyYWNrZWQ7XG59XG5mdW5jdGlvbiBkZXRlY3RNdXRhdGlvbnMoaXNJbW11dGFibGUsIGlnbm9yZWRQYXRocyA9IFtdLCB0cmFja2VkUHJvcGVydHksIG9iaiwgc2FtZVBhcmVudFJlZiA9IGZhbHNlLCBwYXRoID0gXCJcIikge1xuICBjb25zdCBwcmV2T2JqID0gdHJhY2tlZFByb3BlcnR5ID8gdHJhY2tlZFByb3BlcnR5LnZhbHVlIDogdm9pZCAwO1xuICBjb25zdCBzYW1lUmVmID0gcHJldk9iaiA9PT0gb2JqO1xuICBpZiAoc2FtZVBhcmVudFJlZiAmJiAhc2FtZVJlZiAmJiAhTnVtYmVyLmlzTmFOKG9iaikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2FzTXV0YXRlZDogdHJ1ZSxcbiAgICAgIHBhdGhcbiAgICB9O1xuICB9XG4gIGlmIChpc0ltbXV0YWJsZShwcmV2T2JqKSB8fCBpc0ltbXV0YWJsZShvYmopKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdhc011dGF0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuICBjb25zdCBrZXlzVG9EZXRlY3QgPSB7fTtcbiAgZm9yIChsZXQga2V5IGluIHRyYWNrZWRQcm9wZXJ0eS5jaGlsZHJlbikge1xuICAgIGtleXNUb0RldGVjdFtrZXldID0gdHJ1ZTtcbiAgfVxuICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAga2V5c1RvRGV0ZWN0W2tleV0gPSB0cnVlO1xuICB9XG4gIGNvbnN0IGhhc0lnbm9yZWRQYXRocyA9IGlnbm9yZWRQYXRocy5sZW5ndGggPiAwO1xuICBmb3IgKGxldCBrZXkgaW4ga2V5c1RvRGV0ZWN0KSB7XG4gICAgY29uc3QgbmVzdGVkUGF0aCA9IHBhdGggPyBwYXRoICsgXCIuXCIgKyBrZXkgOiBrZXk7XG4gICAgaWYgKGhhc0lnbm9yZWRQYXRocykge1xuICAgICAgY29uc3QgaGFzTWF0Y2hlcyA9IGlnbm9yZWRQYXRocy5zb21lKChpZ25vcmVkKSA9PiB7XG4gICAgICAgIGlmIChpZ25vcmVkIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgcmV0dXJuIGlnbm9yZWQudGVzdChuZXN0ZWRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmVzdGVkUGF0aCA9PT0gaWdub3JlZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGhhc01hdGNoZXMpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGRldGVjdE11dGF0aW9ucyhpc0ltbXV0YWJsZSwgaWdub3JlZFBhdGhzLCB0cmFja2VkUHJvcGVydHkuY2hpbGRyZW5ba2V5XSwgb2JqW2tleV0sIHNhbWVSZWYsIG5lc3RlZFBhdGgpO1xuICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3YXNNdXRhdGVkOiBmYWxzZVxuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKG9wdGlvbnMgPSB7fSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgcmV0dXJuICgpID0+IChuZXh0KSA9PiAoYWN0aW9uKSA9PiBuZXh0KGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgbGV0IHN0cmluZ2lmeTIgPSBmdW5jdGlvbihvYmosIHNlcmlhbGl6ZXIsIGluZGVudCwgZGVjeWNsZXIpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIGdldFNlcmlhbGl6ZTIoc2VyaWFsaXplciwgZGVjeWNsZXIpLCBpbmRlbnQpO1xuICAgIH0sIGdldFNlcmlhbGl6ZTIgPSBmdW5jdGlvbihzZXJpYWxpemVyLCBkZWN5Y2xlcikge1xuICAgICAgbGV0IHN0YWNrID0gW10sIGtleXMgPSBbXTtcbiAgICAgIGlmICghZGVjeWNsZXIpIGRlY3ljbGVyID0gZnVuY3Rpb24oXywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHN0YWNrWzBdID09PSB2YWx1ZSkgcmV0dXJuIFwiW0NpcmN1bGFyIH5dXCI7XG4gICAgICAgIHJldHVybiBcIltDaXJjdWxhciB+LlwiICsga2V5cy5zbGljZSgwLCBzdGFjay5pbmRleE9mKHZhbHVlKSkuam9pbihcIi5cIikgKyBcIl1cIjtcbiAgICAgIH07XG4gICAgICByZXR1cm4gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciB0aGlzUG9zID0gc3RhY2suaW5kZXhPZih0aGlzKTtcbiAgICAgICAgICB+dGhpc1BvcyA/IHN0YWNrLnNwbGljZSh0aGlzUG9zICsgMSkgOiBzdGFjay5wdXNoKHRoaXMpO1xuICAgICAgICAgIH50aGlzUG9zID8ga2V5cy5zcGxpY2UodGhpc1BvcywgSW5maW5pdHksIGtleSkgOiBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICBpZiAofnN0YWNrLmluZGV4T2YodmFsdWUpKSB2YWx1ZSA9IGRlY3ljbGVyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBzdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIgPT0gbnVsbCA/IHZhbHVlIDogc2VyaWFsaXplci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgfTtcbiAgICB9O1xuICAgIHZhciBzdHJpbmdpZnkgPSBzdHJpbmdpZnkyLCBnZXRTZXJpYWxpemUgPSBnZXRTZXJpYWxpemUyO1xuICAgIGxldCB7XG4gICAgICBpc0ltbXV0YWJsZSA9IGlzSW1tdXRhYmxlRGVmYXVsdCxcbiAgICAgIGlnbm9yZWRQYXRocyxcbiAgICAgIHdhcm5BZnRlciA9IDMyXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgdHJhY2sgPSB0cmFja0Zvck11dGF0aW9ucy5iaW5kKG51bGwsIGlzSW1tdXRhYmxlLCBpZ25vcmVkUGF0aHMpO1xuICAgIHJldHVybiAoe1xuICAgICAgZ2V0U3RhdGVcbiAgICB9KSA9PiB7XG4gICAgICBsZXQgc3RhdGUgPSBnZXRTdGF0ZSgpO1xuICAgICAgbGV0IHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIChuZXh0KSA9PiAoYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lYXN1cmVVdGlscyA9IGdldFRpbWVNZWFzdXJlVXRpbHMod2FybkFmdGVyLCBcIkltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZVwiKTtcbiAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcbiAgICAgICAgICBzdGF0ZSA9IGdldFN0YXRlKCk7XG4gICAgICAgICAgcmVzdWx0ID0gdHJhY2tlci5kZXRlY3RNdXRhdGlvbnMoKTtcbiAgICAgICAgICB0cmFja2VyID0gdHJhY2soc3RhdGUpO1xuICAgICAgICAgIGlmIChyZXN1bHQud2FzTXV0YXRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTkpIDogYEEgc3RhdGUgbXV0YXRpb24gd2FzIGRldGVjdGVkIGJldHdlZW4gZGlzcGF0Y2hlcywgaW4gdGhlIHBhdGggJyR7cmVzdWx0LnBhdGggfHwgXCJcIn0nLiAgVGhpcyBtYXkgY2F1c2UgaW5jb3JyZWN0IGJlaGF2aW9yLiAoaHR0cHM6Ly9yZWR1eC5qcy5vcmcvc3R5bGUtZ3VpZGUvc3R5bGUtZ3VpZGUjZG8tbm90LW11dGF0ZS1zdGF0ZSlgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXNwYXRjaGVkQWN0aW9uID0gbmV4dChhY3Rpb24pO1xuICAgICAgICBtZWFzdXJlVXRpbHMubWVhc3VyZVRpbWUoKCkgPT4ge1xuICAgICAgICAgIHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICAgICAgICByZXN1bHQgPSB0cmFja2VyLmRldGVjdE11dGF0aW9ucygpO1xuICAgICAgICAgIHRyYWNrZXIgPSB0cmFjayhzdGF0ZSk7XG4gICAgICAgICAgaWYgKHJlc3VsdC53YXNNdXRhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyMCkgOiBgQSBzdGF0ZSBtdXRhdGlvbiB3YXMgZGV0ZWN0ZWQgaW5zaWRlIGEgZGlzcGF0Y2gsIGluIHRoZSBwYXRoOiAke3Jlc3VsdC5wYXRoIHx8IFwiXCJ9LiBUYWtlIGEgbG9vayBhdCB0aGUgcmVkdWNlcihzKSBoYW5kbGluZyB0aGUgYWN0aW9uICR7c3RyaW5naWZ5MihhY3Rpb24pfS4gKGh0dHBzOi8vcmVkdXguanMub3JnL3N0eWxlLWd1aWRlL3N0eWxlLWd1aWRlI2RvLW5vdC1tdXRhdGUtc3RhdGUpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaGVkQWN0aW9uO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG59XG5cbi8vIHNyYy9zZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUudHNcbmltcG9ydCB7IGlzQWN0aW9uIGFzIGlzQWN0aW9uMiwgaXNQbGFpbk9iamVjdCB9IGZyb20gXCJyZWR1eFwiO1xuZnVuY3Rpb24gaXNQbGFpbih2YWwpIHtcbiAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB0eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiIHx8IHR5cGUgPT09IFwibnVtYmVyXCIgfHwgQXJyYXkuaXNBcnJheSh2YWwpIHx8IGlzUGxhaW5PYmplY3QodmFsKTtcbn1cbmZ1bmN0aW9uIGZpbmROb25TZXJpYWxpemFibGVWYWx1ZSh2YWx1ZSwgcGF0aCA9IFwiXCIsIGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbiwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzID0gW10sIGNhY2hlKSB7XG4gIGxldCBmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZTtcbiAgaWYgKCFpc1NlcmlhbGl6YWJsZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5UGF0aDogcGF0aCB8fCBcIjxyb290PlwiLFxuICAgICAgdmFsdWVcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGNhY2hlPy5oYXModmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGVudHJpZXMgPSBnZXRFbnRyaWVzICE9IG51bGwgPyBnZXRFbnRyaWVzKHZhbHVlKSA6IE9iamVjdC5lbnRyaWVzKHZhbHVlKTtcbiAgY29uc3QgaGFzSWdub3JlZFBhdGhzID0gaWdub3JlZFBhdGhzLmxlbmd0aCA+IDA7XG4gIGZvciAoY29uc3QgW2tleSwgbmVzdGVkVmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBuZXN0ZWRQYXRoID0gcGF0aCA/IHBhdGggKyBcIi5cIiArIGtleSA6IGtleTtcbiAgICBpZiAoaGFzSWdub3JlZFBhdGhzKSB7XG4gICAgICBjb25zdCBoYXNNYXRjaGVzID0gaWdub3JlZFBhdGhzLnNvbWUoKGlnbm9yZWQpID0+IHtcbiAgICAgICAgaWYgKGlnbm9yZWQgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICByZXR1cm4gaWdub3JlZC50ZXN0KG5lc3RlZFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXN0ZWRQYXRoID09PSBpZ25vcmVkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaGFzTWF0Y2hlcykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc1NlcmlhbGl6YWJsZShuZXN0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleVBhdGg6IG5lc3RlZFBhdGgsXG4gICAgICAgIHZhbHVlOiBuZXN0ZWRWYWx1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgZm91bmROZXN0ZWRTZXJpYWxpemFibGUgPSBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUobmVzdGVkVmFsdWUsIG5lc3RlZFBhdGgsIGlzU2VyaWFsaXphYmxlLCBnZXRFbnRyaWVzLCBpZ25vcmVkUGF0aHMsIGNhY2hlKTtcbiAgICAgIGlmIChmb3VuZE5lc3RlZFNlcmlhbGl6YWJsZSkge1xuICAgICAgICByZXR1cm4gZm91bmROZXN0ZWRTZXJpYWxpemFibGU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjYWNoZSAmJiBpc05lc3RlZEZyb3plbih2YWx1ZSkpIGNhY2hlLmFkZCh2YWx1ZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGlzTmVzdGVkRnJvemVuKHZhbHVlKSB7XG4gIGlmICghT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGNvbnN0IG5lc3RlZFZhbHVlIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgaWYgKHR5cGVvZiBuZXN0ZWRWYWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBuZXN0ZWRWYWx1ZSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgaWYgKCFpc05lc3RlZEZyb3plbihuZXN0ZWRWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShvcHRpb25zID0ge30pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHJldHVybiAoKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4gbmV4dChhY3Rpb24pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHtcbiAgICAgIGlzU2VyaWFsaXphYmxlID0gaXNQbGFpbixcbiAgICAgIGdldEVudHJpZXMsXG4gICAgICBpZ25vcmVkQWN0aW9ucyA9IFtdLFxuICAgICAgaWdub3JlZEFjdGlvblBhdGhzID0gW1wibWV0YS5hcmdcIiwgXCJtZXRhLmJhc2VRdWVyeU1ldGFcIl0sXG4gICAgICBpZ25vcmVkUGF0aHMgPSBbXSxcbiAgICAgIHdhcm5BZnRlciA9IDMyLFxuICAgICAgaWdub3JlU3RhdGUgPSBmYWxzZSxcbiAgICAgIGlnbm9yZUFjdGlvbnMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVDYWNoZSA9IGZhbHNlXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgY2FjaGUgPSAhZGlzYWJsZUNhY2hlICYmIFdlYWtTZXQgPyAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gKHN0b3JlQVBJKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgICAgaWYgKCFpc0FjdGlvbjIoYWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChhY3Rpb24pO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0ID0gbmV4dChhY3Rpb24pO1xuICAgICAgY29uc3QgbWVhc3VyZVV0aWxzID0gZ2V0VGltZU1lYXN1cmVVdGlscyh3YXJuQWZ0ZXIsIFwiU2VyaWFsaXphYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlXCIpO1xuICAgICAgaWYgKCFpZ25vcmVBY3Rpb25zICYmICEoaWdub3JlZEFjdGlvbnMubGVuZ3RoICYmIGlnbm9yZWRBY3Rpb25zLmluZGV4T2YoYWN0aW9uLnR5cGUpICE9PSAtMSkpIHtcbiAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKGFjdGlvbiwgXCJcIiwgaXNTZXJpYWxpemFibGUsIGdldEVudHJpZXMsIGlnbm9yZWRBY3Rpb25QYXRocywgY2FjaGUpO1xuICAgICAgICAgIGlmIChmb3VuZEFjdGlvbk5vblNlcmlhbGl6YWJsZVZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGtleVBhdGgsXG4gICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9ID0gZm91bmRBY3Rpb25Ob25TZXJpYWxpemFibGVWYWx1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gYW4gYWN0aW9uLCBpbiB0aGUgcGF0aDogXFxgJHtrZXlQYXRofVxcYC4gVmFsdWU6YCwgdmFsdWUsIFwiXFxuVGFrZSBhIGxvb2sgYXQgdGhlIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlZCB0aGlzIGFjdGlvbjogXCIsIGFjdGlvbiwgXCJcXG4oU2VlIGh0dHBzOi8vcmVkdXguanMub3JnL2ZhcS9hY3Rpb25zI3doeS1zaG91bGQtdHlwZS1iZS1hLXN0cmluZy1vci1hdC1sZWFzdC1zZXJpYWxpemFibGUtd2h5LXNob3VsZC1teS1hY3Rpb24tdHlwZXMtYmUtY29uc3RhbnRzKVwiLCBcIlxcbihUbyBhbGxvdyBub24tc2VyaWFsaXphYmxlIHZhbHVlcyBzZWU6IGh0dHBzOi8vcmVkdXgtdG9vbGtpdC5qcy5vcmcvdXNhZ2UvdXNhZ2UtZ3VpZGUjd29ya2luZy13aXRoLW5vbi1zZXJpYWxpemFibGUtZGF0YSlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaWdub3JlU3RhdGUpIHtcbiAgICAgICAgbWVhc3VyZVV0aWxzLm1lYXN1cmVUaW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlQVBJLmdldFN0YXRlKCk7XG4gICAgICAgICAgY29uc3QgZm91bmRTdGF0ZU5vblNlcmlhbGl6YWJsZVZhbHVlID0gZmluZE5vblNlcmlhbGl6YWJsZVZhbHVlKHN0YXRlLCBcIlwiLCBpc1NlcmlhbGl6YWJsZSwgZ2V0RW50cmllcywgaWdub3JlZFBhdGhzLCBjYWNoZSk7XG4gICAgICAgICAgaWYgKGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBrZXlQYXRoLFxuICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSA9IGZvdW5kU3RhdGVOb25TZXJpYWxpemFibGVWYWx1ZTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEEgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZSB3YXMgZGV0ZWN0ZWQgaW4gdGhlIHN0YXRlLCBpbiB0aGUgcGF0aDogXFxgJHtrZXlQYXRofVxcYC4gVmFsdWU6YCwgdmFsdWUsIGBcblRha2UgYSBsb29rIGF0IHRoZSByZWR1Y2VyKHMpIGhhbmRsaW5nIHRoaXMgYWN0aW9uIHR5cGU6ICR7YWN0aW9uLnR5cGV9LlxuKFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9mYXEvb3JnYW5pemluZy1zdGF0ZSNjYW4taS1wdXQtZnVuY3Rpb25zLXByb21pc2VzLW9yLW90aGVyLW5vbi1zZXJpYWxpemFibGUtaXRlbXMtaW4tbXktc3RvcmUtc3RhdGUpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWVhc3VyZVV0aWxzLndhcm5JZkV4Y2VlZGVkKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cbn1cblxuLy8gc3JjL2dldERlZmF1bHRNaWRkbGV3YXJlLnRzXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwiYm9vbGVhblwiO1xufVxudmFyIGJ1aWxkR2V0RGVmYXVsdE1pZGRsZXdhcmUgPSAoKSA9PiBmdW5jdGlvbiBnZXREZWZhdWx0TWlkZGxld2FyZShvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICB0aHVuayA9IHRydWUsXG4gICAgaW1tdXRhYmxlQ2hlY2sgPSB0cnVlLFxuICAgIHNlcmlhbGl6YWJsZUNoZWNrID0gdHJ1ZSxcbiAgICBhY3Rpb25DcmVhdG9yQ2hlY2sgPSB0cnVlXG4gIH0gPSBvcHRpb25zID8/IHt9O1xuICBsZXQgbWlkZGxld2FyZUFycmF5ID0gbmV3IFR1cGxlKCk7XG4gIGlmICh0aHVuaykge1xuICAgIGlmIChpc0Jvb2xlYW4odGh1bmspKSB7XG4gICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh0aHVua01pZGRsZXdhcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaWRkbGV3YXJlQXJyYXkucHVzaCh3aXRoRXh0cmFBcmd1bWVudCh0aHVuay5leHRyYUFyZ3VtZW50KSk7XG4gICAgfVxuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoaW1tdXRhYmxlQ2hlY2spIHtcbiAgICAgIGxldCBpbW11dGFibGVPcHRpb25zID0ge307XG4gICAgICBpZiAoIWlzQm9vbGVhbihpbW11dGFibGVDaGVjaykpIHtcbiAgICAgICAgaW1tdXRhYmxlT3B0aW9ucyA9IGltbXV0YWJsZUNoZWNrO1xuICAgICAgfVxuICAgICAgbWlkZGxld2FyZUFycmF5LnVuc2hpZnQoY3JlYXRlSW1tdXRhYmxlU3RhdGVJbnZhcmlhbnRNaWRkbGV3YXJlKGltbXV0YWJsZU9wdGlvbnMpKTtcbiAgICB9XG4gICAgaWYgKHNlcmlhbGl6YWJsZUNoZWNrKSB7XG4gICAgICBsZXQgc2VyaWFsaXphYmxlT3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKCFpc0Jvb2xlYW4oc2VyaWFsaXphYmxlQ2hlY2spKSB7XG4gICAgICAgIHNlcmlhbGl6YWJsZU9wdGlvbnMgPSBzZXJpYWxpemFibGVDaGVjaztcbiAgICAgIH1cbiAgICAgIG1pZGRsZXdhcmVBcnJheS5wdXNoKGNyZWF0ZVNlcmlhbGl6YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZShzZXJpYWxpemFibGVPcHRpb25zKSk7XG4gICAgfVxuICAgIGlmIChhY3Rpb25DcmVhdG9yQ2hlY2spIHtcbiAgICAgIGxldCBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKCFpc0Jvb2xlYW4oYWN0aW9uQ3JlYXRvckNoZWNrKSkge1xuICAgICAgICBhY3Rpb25DcmVhdG9yT3B0aW9ucyA9IGFjdGlvbkNyZWF0b3JDaGVjaztcbiAgICAgIH1cbiAgICAgIG1pZGRsZXdhcmVBcnJheS51bnNoaWZ0KGNyZWF0ZUFjdGlvbkNyZWF0b3JJbnZhcmlhbnRNaWRkbGV3YXJlKGFjdGlvbkNyZWF0b3JPcHRpb25zKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBtaWRkbGV3YXJlQXJyYXk7XG59O1xuXG4vLyBzcmMvYXV0b0JhdGNoRW5oYW5jZXIudHNcbnZhciBTSE9VTERfQVVUT0JBVENIID0gXCJSVEtfYXV0b0JhdGNoXCI7XG52YXIgcHJlcGFyZUF1dG9CYXRjaGVkID0gKCkgPT4gKHBheWxvYWQpID0+ICh7XG4gIHBheWxvYWQsXG4gIG1ldGE6IHtcbiAgICBbU0hPVUxEX0FVVE9CQVRDSF06IHRydWVcbiAgfVxufSk7XG52YXIgY3JlYXRlUXVldWVXaXRoVGltZXIgPSAodGltZW91dCkgPT4ge1xuICByZXR1cm4gKG5vdGlmeSkgPT4ge1xuICAgIHNldFRpbWVvdXQobm90aWZ5LCB0aW1lb3V0KTtcbiAgfTtcbn07XG52YXIgckFGID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKDEwKTtcbnZhciBhdXRvQmF0Y2hFbmhhbmNlciA9IChvcHRpb25zID0ge1xuICB0eXBlOiBcInJhZlwiXG59KSA9PiAobmV4dCkgPT4gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBuZXh0KC4uLmFyZ3MpO1xuICBsZXQgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgbGV0IHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XG4gIGxldCBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3QgcXVldWVDYWxsYmFjayA9IG9wdGlvbnMudHlwZSA9PT0gXCJ0aWNrXCIgPyBxdWV1ZU1pY3JvdGFzayA6IG9wdGlvbnMudHlwZSA9PT0gXCJyYWZcIiA/IHJBRiA6IG9wdGlvbnMudHlwZSA9PT0gXCJjYWxsYmFja1wiID8gb3B0aW9ucy5xdWV1ZU5vdGlmaWNhdGlvbiA6IGNyZWF0ZVF1ZXVlV2l0aFRpbWVyKG9wdGlvbnMudGltZW91dCk7XG4gIGNvbnN0IG5vdGlmeUxpc3RlbmVycyA9ICgpID0+IHtcbiAgICBub3RpZmljYXRpb25RdWV1ZWQgPSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkTm90aWZ5QXRFbmRPZlRpY2spIHtcbiAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gZmFsc2U7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobCkgPT4gbCgpKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdG9yZSwge1xuICAgIC8vIE92ZXJyaWRlIHRoZSBiYXNlIGBzdG9yZS5zdWJzY3JpYmVgIG1ldGhvZCB0byBrZWVwIG9yaWdpbmFsIGxpc3RlbmVyc1xuICAgIC8vIGZyb20gcnVubmluZyBpZiB3ZSdyZSBkZWxheWluZyBub3RpZmljYXRpb25zXG4gICAgc3Vic2NyaWJlKGxpc3RlbmVyMikge1xuICAgICAgY29uc3Qgd3JhcHBlZExpc3RlbmVyID0gKCkgPT4gbm90aWZ5aW5nICYmIGxpc3RlbmVyMigpO1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBzdG9yZS5zdWJzY3JpYmUod3JhcHBlZExpc3RlbmVyKTtcbiAgICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIyKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIyKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICAvLyBPdmVycmlkZSB0aGUgYmFzZSBgc3RvcmUuZGlzcGF0Y2hgIG1ldGhvZCBzbyB0aGF0IHdlIGNhbiBjaGVjayBhY3Rpb25zXG4gICAgLy8gZm9yIHRoZSBgc2hvdWxkQXV0b0JhdGNoYCBmbGFnIGFuZCBkZXRlcm1pbmUgaWYgYmF0Y2hpbmcgaXMgYWN0aXZlXG4gICAgZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBub3RpZnlpbmcgPSAhYWN0aW9uPy5tZXRhPy5bU0hPVUxEX0FVVE9CQVRDSF07XG4gICAgICAgIHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrID0gIW5vdGlmeWluZztcbiAgICAgICAgaWYgKHNob3VsZE5vdGlmeUF0RW5kT2ZUaWNrKSB7XG4gICAgICAgICAgaWYgKCFub3RpZmljYXRpb25RdWV1ZWQpIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvblF1ZXVlZCA9IHRydWU7XG4gICAgICAgICAgICBxdWV1ZUNhbGxiYWNrKG5vdGlmeUxpc3RlbmVycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbm90aWZ5aW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxuLy8gc3JjL2dldERlZmF1bHRFbmhhbmNlcnMudHNcbnZhciBidWlsZEdldERlZmF1bHRFbmhhbmNlcnMgPSAobWlkZGxld2FyZUVuaGFuY2VyKSA9PiBmdW5jdGlvbiBnZXREZWZhdWx0RW5oYW5jZXJzKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIGF1dG9CYXRjaCA9IHRydWVcbiAgfSA9IG9wdGlvbnMgPz8ge307XG4gIGxldCBlbmhhbmNlckFycmF5ID0gbmV3IFR1cGxlKG1pZGRsZXdhcmVFbmhhbmNlcik7XG4gIGlmIChhdXRvQmF0Y2gpIHtcbiAgICBlbmhhbmNlckFycmF5LnB1c2goYXV0b0JhdGNoRW5oYW5jZXIodHlwZW9mIGF1dG9CYXRjaCA9PT0gXCJvYmplY3RcIiA/IGF1dG9CYXRjaCA6IHZvaWQgMCkpO1xuICB9XG4gIHJldHVybiBlbmhhbmNlckFycmF5O1xufTtcblxuLy8gc3JjL2NvbmZpZ3VyZVN0b3JlLnRzXG5mdW5jdGlvbiBjb25maWd1cmVTdG9yZShvcHRpb25zKSB7XG4gIGNvbnN0IGdldERlZmF1bHRNaWRkbGV3YXJlID0gYnVpbGRHZXREZWZhdWx0TWlkZGxld2FyZSgpO1xuICBjb25zdCB7XG4gICAgcmVkdWNlciA9IHZvaWQgMCxcbiAgICBtaWRkbGV3YXJlLFxuICAgIGRldlRvb2xzID0gdHJ1ZSxcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHZvaWQgMCxcbiAgICBlbmhhbmNlcnMgPSB2b2lkIDBcbiAgfSA9IG9wdGlvbnMgfHwge307XG4gIGxldCByb290UmVkdWNlcjtcbiAgaWYgKHR5cGVvZiByZWR1Y2VyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByb290UmVkdWNlciA9IHJlZHVjZXI7XG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdDIocmVkdWNlcikpIHtcbiAgICByb290UmVkdWNlciA9IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VyKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxKSA6IFwiYHJlZHVjZXJgIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQsIGFuZCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gY29tYmluZVJlZHVjZXJzXCIpO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgbWlkZGxld2FyZSAmJiB0eXBlb2YgbWlkZGxld2FyZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMikgOiBcImBtaWRkbGV3YXJlYCBmaWVsZCBtdXN0IGJlIGEgY2FsbGJhY2tcIik7XG4gIH1cbiAgbGV0IGZpbmFsTWlkZGxld2FyZTtcbiAgaWYgKHR5cGVvZiBtaWRkbGV3YXJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmaW5hbE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlKGdldERlZmF1bHRNaWRkbGV3YXJlKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFBcnJheS5pc0FycmF5KGZpbmFsTWlkZGxld2FyZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMpIDogXCJ3aGVuIHVzaW5nIGEgbWlkZGxld2FyZSBidWlsZGVyIGZ1bmN0aW9uLCBhbiBhcnJheSBvZiBtaWRkbGV3YXJlIG11c3QgYmUgcmV0dXJuZWRcIik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmFsTWlkZGxld2FyZSA9IGdldERlZmF1bHRNaWRkbGV3YXJlKCk7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBmaW5hbE1pZGRsZXdhcmUuc29tZSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gIT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg0KSA6IFwiZWFjaCBtaWRkbGV3YXJlIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBsZXQgZmluYWxDb21wb3NlID0gY29tcG9zZTI7XG4gIGlmIChkZXZUb29scykge1xuICAgIGZpbmFsQ29tcG9zZSA9IGNvbXBvc2VXaXRoRGV2VG9vbHMoe1xuICAgICAgLy8gRW5hYmxlIGNhcHR1cmUgb2Ygc3RhY2sgdHJhY2VzIGZvciBkaXNwYXRjaGVkIFJlZHV4IGFjdGlvbnNcbiAgICAgIHRyYWNlOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIsXG4gICAgICAuLi50eXBlb2YgZGV2VG9vbHMgPT09IFwib2JqZWN0XCIgJiYgZGV2VG9vbHNcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtaWRkbGV3YXJlRW5oYW5jZXIgPSBhcHBseU1pZGRsZXdhcmUoLi4uZmluYWxNaWRkbGV3YXJlKTtcbiAgY29uc3QgZ2V0RGVmYXVsdEVuaGFuY2VycyA9IGJ1aWxkR2V0RGVmYXVsdEVuaGFuY2VycyhtaWRkbGV3YXJlRW5oYW5jZXIpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGVuaGFuY2VycyAmJiB0eXBlb2YgZW5oYW5jZXJzICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg1KSA6IFwiYGVuaGFuY2Vyc2AgZmllbGQgbXVzdCBiZSBhIGNhbGxiYWNrXCIpO1xuICB9XG4gIGxldCBzdG9yZUVuaGFuY2VycyA9IHR5cGVvZiBlbmhhbmNlcnMgPT09IFwiZnVuY3Rpb25cIiA/IGVuaGFuY2VycyhnZXREZWZhdWx0RW5oYW5jZXJzKSA6IGdldERlZmF1bHRFbmhhbmNlcnMoKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhQXJyYXkuaXNBcnJheShzdG9yZUVuaGFuY2VycykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg2KSA6IFwiYGVuaGFuY2Vyc2AgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gYXJyYXlcIik7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBzdG9yZUVuaGFuY2Vycy5zb21lKChpdGVtKSA9PiB0eXBlb2YgaXRlbSAhPT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDcpIDogXCJlYWNoIGVuaGFuY2VyIHByb3ZpZGVkIHRvIGNvbmZpZ3VyZVN0b3JlIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGZpbmFsTWlkZGxld2FyZS5sZW5ndGggJiYgIXN0b3JlRW5oYW5jZXJzLmluY2x1ZGVzKG1pZGRsZXdhcmVFbmhhbmNlcikpIHtcbiAgICBjb25zb2xlLmVycm9yKFwibWlkZGxld2FyZXMgd2VyZSBwcm92aWRlZCwgYnV0IG1pZGRsZXdhcmUgZW5oYW5jZXIgd2FzIG5vdCBpbmNsdWRlZCBpbiBmaW5hbCBlbmhhbmNlcnMgLSBtYWtlIHN1cmUgdG8gY2FsbCBgZ2V0RGVmYXVsdEVuaGFuY2Vyc2BcIik7XG4gIH1cbiAgY29uc3QgY29tcG9zZWRFbmhhbmNlciA9IGZpbmFsQ29tcG9zZSguLi5zdG9yZUVuaGFuY2Vycyk7XG4gIHJldHVybiBjcmVhdGVTdG9yZShyb290UmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGNvbXBvc2VkRW5oYW5jZXIpO1xufVxuXG4vLyBzcmMvY3JlYXRlUmVkdWNlci50c1xuaW1wb3J0IHsgcHJvZHVjZSBhcyBjcmVhdGVOZXh0U3RhdGUyLCBpc0RyYWZ0IGFzIGlzRHJhZnQyLCBpc0RyYWZ0YWJsZSBhcyBpc0RyYWZ0YWJsZTIgfSBmcm9tIFwiaW1tZXJcIjtcblxuLy8gc3JjL21hcEJ1aWxkZXJzLnRzXG5mdW5jdGlvbiBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhidWlsZGVyQ2FsbGJhY2spIHtcbiAgY29uc3QgYWN0aW9uc01hcCA9IHt9O1xuICBjb25zdCBhY3Rpb25NYXRjaGVycyA9IFtdO1xuICBsZXQgZGVmYXVsdENhc2VSZWR1Y2VyO1xuICBjb25zdCBidWlsZGVyID0ge1xuICAgIGFkZENhc2UodHlwZU9yQWN0aW9uQ3JlYXRvciwgcmVkdWNlcikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAoYWN0aW9uTWF0Y2hlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI2KSA6IFwiYGJ1aWxkZXIuYWRkQ2FzZWAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGBidWlsZGVyLmFkZE1hdGNoZXJgXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyNykgOiBcImBidWlsZGVyLmFkZENhc2VgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWBcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdHlwZU9yQWN0aW9uQ3JlYXRvciA9PT0gXCJzdHJpbmdcIiA/IHR5cGVPckFjdGlvbkNyZWF0b3IgOiB0eXBlT3JBY3Rpb25DcmVhdG9yLnR5cGU7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjgpIDogXCJgYnVpbGRlci5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggYW4gZW1wdHkgYWN0aW9uIHR5cGVcIik7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSBpbiBhY3Rpb25zTWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI5KSA6IGBcXGBidWlsZGVyLmFkZENhc2VcXGAgY2Fubm90IGJlIGNhbGxlZCB3aXRoIHR3byByZWR1Y2VycyBmb3IgdGhlIHNhbWUgYWN0aW9uIHR5cGUgJyR7dHlwZX0nYCk7XG4gICAgICB9XG4gICAgICBhY3Rpb25zTWFwW3R5cGVdID0gcmVkdWNlcjtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH0sXG4gICAgYWRkTWF0Y2hlcihtYXRjaGVyLCByZWR1Y2VyKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChkZWZhdWx0Q2FzZVJlZHVjZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgzMCkgOiBcImBidWlsZGVyLmFkZE1hdGNoZXJgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWBcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFjdGlvbk1hdGNoZXJzLnB1c2goe1xuICAgICAgICBtYXRjaGVyLFxuICAgICAgICByZWR1Y2VyXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBidWlsZGVyO1xuICAgIH0sXG4gICAgYWRkRGVmYXVsdENhc2UocmVkdWNlcikge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpZiAoZGVmYXVsdENhc2VSZWR1Y2VyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMzEpIDogXCJgYnVpbGRlci5hZGREZWZhdWx0Q2FzZWAgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlZmF1bHRDYXNlUmVkdWNlciA9IHJlZHVjZXI7XG4gICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICB9XG4gIH07XG4gIGJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKTtcbiAgcmV0dXJuIFthY3Rpb25zTWFwLCBhY3Rpb25NYXRjaGVycywgZGVmYXVsdENhc2VSZWR1Y2VyXTtcbn1cblxuLy8gc3JjL2NyZWF0ZVJlZHVjZXIudHNcbmZ1bmN0aW9uIGlzU3RhdGVGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUsIG1hcE9yQnVpbGRlckNhbGxiYWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAodHlwZW9mIG1hcE9yQnVpbGRlckNhbGxiYWNrID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSg4KSA6IFwiVGhlIG9iamVjdCBub3RhdGlvbiBmb3IgYGNyZWF0ZVJlZHVjZXJgIGhhcyBiZWVuIHJlbW92ZWQuIFBsZWFzZSB1c2UgdGhlICdidWlsZGVyIGNhbGxiYWNrJyBub3RhdGlvbiBpbnN0ZWFkOiBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL2FwaS9jcmVhdGVSZWR1Y2VyXCIpO1xuICAgIH1cbiAgfVxuICBsZXQgW2FjdGlvbnNNYXAsIGZpbmFsQWN0aW9uTWF0Y2hlcnMsIGZpbmFsRGVmYXVsdENhc2VSZWR1Y2VyXSA9IGV4ZWN1dGVSZWR1Y2VyQnVpbGRlckNhbGxiYWNrKG1hcE9yQnVpbGRlckNhbGxiYWNrKTtcbiAgbGV0IGdldEluaXRpYWxTdGF0ZTtcbiAgaWYgKGlzU3RhdGVGdW5jdGlvbihpbml0aWFsU3RhdGUpKSB7XG4gICAgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gZnJlZXplRHJhZnRhYmxlKGluaXRpYWxTdGF0ZSgpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmcm96ZW5Jbml0aWFsU3RhdGUgPSBmcmVlemVEcmFmdGFibGUoaW5pdGlhbFN0YXRlKTtcbiAgICBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBmcm96ZW5Jbml0aWFsU3RhdGU7XG4gIH1cbiAgZnVuY3Rpb24gcmVkdWNlcihzdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSgpLCBhY3Rpb24pIHtcbiAgICBsZXQgY2FzZVJlZHVjZXJzID0gW2FjdGlvbnNNYXBbYWN0aW9uLnR5cGVdLCAuLi5maW5hbEFjdGlvbk1hdGNoZXJzLmZpbHRlcigoe1xuICAgICAgbWF0Y2hlclxuICAgIH0pID0+IG1hdGNoZXIoYWN0aW9uKSkubWFwKCh7XG4gICAgICByZWR1Y2VyOiByZWR1Y2VyMlxuICAgIH0pID0+IHJlZHVjZXIyKV07XG4gICAgaWYgKGNhc2VSZWR1Y2Vycy5maWx0ZXIoKGNyKSA9PiAhIWNyKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNhc2VSZWR1Y2VycyA9IFtmaW5hbERlZmF1bHRDYXNlUmVkdWNlcl07XG4gICAgfVxuICAgIHJldHVybiBjYXNlUmVkdWNlcnMucmVkdWNlKChwcmV2aW91c1N0YXRlLCBjYXNlUmVkdWNlcikgPT4ge1xuICAgICAgaWYgKGNhc2VSZWR1Y2VyKSB7XG4gICAgICAgIGlmIChpc0RyYWZ0MihwcmV2aW91c1N0YXRlKSkge1xuICAgICAgICAgIGNvbnN0IGRyYWZ0ID0gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihkcmFmdCwgYWN0aW9uKTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1N0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0RyYWZ0YWJsZTIocHJldmlvdXNTdGF0ZSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYXNlUmVkdWNlcihwcmV2aW91c1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzU3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkEgY2FzZSByZWR1Y2VyIG9uIGEgbm9uLWRyYWZ0YWJsZSB2YWx1ZSBtdXN0IG5vdCByZXR1cm4gdW5kZWZpbmVkXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVOZXh0U3RhdGUyKHByZXZpb3VzU3RhdGUsIChkcmFmdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNhc2VSZWR1Y2VyKGRyYWZ0LCBhY3Rpb24pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldmlvdXNTdGF0ZTtcbiAgICB9LCBzdGF0ZSk7XG4gIH1cbiAgcmVkdWNlci5nZXRJbml0aWFsU3RhdGUgPSBnZXRJbml0aWFsU3RhdGU7XG4gIHJldHVybiByZWR1Y2VyO1xufVxuXG4vLyBzcmMvbWF0Y2hlcnMudHNcbnZhciBtYXRjaGVzID0gKG1hdGNoZXIsIGFjdGlvbikgPT4ge1xuICBpZiAoaGFzTWF0Y2hGdW5jdGlvbihtYXRjaGVyKSkge1xuICAgIHJldHVybiBtYXRjaGVyLm1hdGNoKGFjdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1hdGNoZXIoYWN0aW9uKTtcbiAgfVxufTtcbmZ1bmN0aW9uIGlzQW55T2YoLi4ubWF0Y2hlcnMpIHtcbiAgcmV0dXJuIChhY3Rpb24pID0+IHtcbiAgICByZXR1cm4gbWF0Y2hlcnMuc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hlcyhtYXRjaGVyLCBhY3Rpb24pKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzQWxsT2YoLi4ubWF0Y2hlcnMpIHtcbiAgcmV0dXJuIChhY3Rpb24pID0+IHtcbiAgICByZXR1cm4gbWF0Y2hlcnMuZXZlcnkoKG1hdGNoZXIpID0+IG1hdGNoZXMobWF0Y2hlciwgYWN0aW9uKSk7XG4gIH07XG59XG5mdW5jdGlvbiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIHZhbGlkU3RhdHVzKSB7XG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24ubWV0YSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBoYXNWYWxpZFJlcXVlc3RJZCA9IHR5cGVvZiBhY3Rpb24ubWV0YS5yZXF1ZXN0SWQgPT09IFwic3RyaW5nXCI7XG4gIGNvbnN0IGhhc1ZhbGlkUmVxdWVzdFN0YXR1cyA9IHZhbGlkU3RhdHVzLmluZGV4T2YoYWN0aW9uLm1ldGEucmVxdWVzdFN0YXR1cykgPiAtMTtcbiAgcmV0dXJuIGhhc1ZhbGlkUmVxdWVzdElkICYmIGhhc1ZhbGlkUmVxdWVzdFN0YXR1cztcbn1cbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FycmF5KGEpIHtcbiAgcmV0dXJuIHR5cGVvZiBhWzBdID09PSBcImZ1bmN0aW9uXCIgJiYgXCJwZW5kaW5nXCIgaW4gYVswXSAmJiBcImZ1bGZpbGxlZFwiIGluIGFbMF0gJiYgXCJyZWplY3RlZFwiIGluIGFbMF07XG59XG5mdW5jdGlvbiBpc1BlbmRpbmcoLi4uYXN5bmNUaHVua3MpIHtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoYWN0aW9uKSA9PiBoYXNFeHBlY3RlZFJlcXVlc3RNZXRhZGF0YShhY3Rpb24sIFtcInBlbmRpbmdcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzUGVuZGluZygpKGFzeW5jVGh1bmtzWzBdKTtcbiAgfVxuICByZXR1cm4gaXNBbnlPZiguLi5hc3luY1RodW5rcy5tYXAoKGFzeW5jVGh1bmspID0+IGFzeW5jVGh1bmsucGVuZGluZykpO1xufVxuZnVuY3Rpb24gaXNSZWplY3RlZCguLi5hc3luY1RodW5rcykge1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhY3Rpb24pID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicmVqZWN0ZWRcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzUmVqZWN0ZWQoKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQW55T2YoLi4uYXN5bmNUaHVua3MubWFwKChhc3luY1RodW5rKSA9PiBhc3luY1RodW5rLnJlamVjdGVkKSk7XG59XG5mdW5jdGlvbiBpc1JlamVjdGVkV2l0aFZhbHVlKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGNvbnN0IGhhc0ZsYWcgPSAoYWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIGFjdGlvbiAmJiBhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZTtcbiAgfTtcbiAgaWYgKGFzeW5jVGh1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc1JlamVjdGVkV2l0aFZhbHVlKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FsbE9mKGlzUmVqZWN0ZWQoLi4uYXN5bmNUaHVua3MpLCBoYXNGbGFnKTtcbn1cbmZ1bmN0aW9uIGlzRnVsZmlsbGVkKC4uLmFzeW5jVGh1bmtzKSB7XG4gIGlmIChhc3luY1RodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKGFjdGlvbikgPT4gaGFzRXhwZWN0ZWRSZXF1ZXN0TWV0YWRhdGEoYWN0aW9uLCBbXCJmdWxmaWxsZWRcIl0pO1xuICB9XG4gIGlmICghaXNBc3luY1RodW5rQXJyYXkoYXN5bmNUaHVua3MpKSB7XG4gICAgcmV0dXJuIGlzRnVsZmlsbGVkKCkoYXN5bmNUaHVua3NbMF0pO1xuICB9XG4gIHJldHVybiBpc0FueU9mKC4uLmFzeW5jVGh1bmtzLm1hcCgoYXN5bmNUaHVuaykgPT4gYXN5bmNUaHVuay5mdWxmaWxsZWQpKTtcbn1cbmZ1bmN0aW9uIGlzQXN5bmNUaHVua0FjdGlvbiguLi5hc3luY1RodW5rcykge1xuICBpZiAoYXN5bmNUaHVua3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIChhY3Rpb24pID0+IGhhc0V4cGVjdGVkUmVxdWVzdE1ldGFkYXRhKGFjdGlvbiwgW1wicGVuZGluZ1wiLCBcImZ1bGZpbGxlZFwiLCBcInJlamVjdGVkXCJdKTtcbiAgfVxuICBpZiAoIWlzQXN5bmNUaHVua0FycmF5KGFzeW5jVGh1bmtzKSkge1xuICAgIHJldHVybiBpc0FzeW5jVGh1bmtBY3Rpb24oKShhc3luY1RodW5rc1swXSk7XG4gIH1cbiAgcmV0dXJuIGlzQW55T2YoLi4uYXN5bmNUaHVua3MuZmxhdE1hcCgoYXN5bmNUaHVuaykgPT4gW2FzeW5jVGh1bmsucGVuZGluZywgYXN5bmNUaHVuay5yZWplY3RlZCwgYXN5bmNUaHVuay5mdWxmaWxsZWRdKSk7XG59XG5cbi8vIHNyYy9uYW5vaWQudHNcbnZhciB1cmxBbHBoYWJldCA9IFwiTW9kdWxlU3ltYmhhc093blByLTAxMjM0NTY3ODlBQkNERUZHSE5SVmZnY3RpVXZ6X0txWVRKa0x4cFpYSWpRV1wiO1xudmFyIG5hbm9pZCA9IChzaXplID0gMjEpID0+IHtcbiAgbGV0IGlkID0gXCJcIjtcbiAgbGV0IGkgPSBzaXplO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgaWQgKz0gdXJsQWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIDY0IHwgMF07XG4gIH1cbiAgcmV0dXJuIGlkO1xufTtcblxuLy8gc3JjL2NyZWF0ZUFzeW5jVGh1bmsudHNcbnZhciBjb21tb25Qcm9wZXJ0aWVzID0gW1wibmFtZVwiLCBcIm1lc3NhZ2VcIiwgXCJzdGFja1wiLCBcImNvZGVcIl07XG52YXIgUmVqZWN0V2l0aFZhbHVlID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihwYXlsb2FkLCBtZXRhKSB7XG4gICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDtcbiAgICB0aGlzLm1ldGEgPSBtZXRhO1xuICB9XG4gIC8qXG4gIHR5cGUtb25seSBwcm9wZXJ0eSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFJlamVjdFdpdGhWYWx1ZSBhbmQgRnVsZmlsbFdpdGhNZXRhXG4gIGRvZXMgbm90IGV4aXN0IGF0IHJ1bnRpbWVcbiAgKi9cbiAgX3R5cGU7XG59O1xudmFyIEZ1bGZpbGxXaXRoTWV0YSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IocGF5bG9hZCwgbWV0YSkge1xuICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgdGhpcy5tZXRhID0gbWV0YTtcbiAgfVxuICAvKlxuICB0eXBlLW9ubHkgcHJvcGVydHkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBSZWplY3RXaXRoVmFsdWUgYW5kIEZ1bGZpbGxXaXRoTWV0YVxuICBkb2VzIG5vdCBleGlzdCBhdCBydW50aW1lXG4gICovXG4gIF90eXBlO1xufTtcbnZhciBtaW5pU2VyaWFsaXplRXJyb3IgPSAodmFsdWUpID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHNpbXBsZUVycm9yID0ge307XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBjb21tb25Qcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlW3Byb3BlcnR5XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzaW1wbGVFcnJvcltwcm9wZXJ0eV0gPSB2YWx1ZVtwcm9wZXJ0eV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaW1wbGVFcnJvcjtcbiAgfVxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2U6IFN0cmluZyh2YWx1ZSlcbiAgfTtcbn07XG52YXIgY3JlYXRlQXN5bmNUaHVuayA9IC8qIEBfX1BVUkVfXyAqLyAoKCkgPT4ge1xuICBmdW5jdGlvbiBjcmVhdGVBc3luY1RodW5rMih0eXBlUHJlZml4LCBwYXlsb2FkQ3JlYXRvciwgb3B0aW9ucykge1xuICAgIGNvbnN0IGZ1bGZpbGxlZCA9IGNyZWF0ZUFjdGlvbih0eXBlUHJlZml4ICsgXCIvZnVsZmlsbGVkXCIsIChwYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgbWV0YSkgPT4gKHtcbiAgICAgIHBheWxvYWQsXG4gICAgICBtZXRhOiB7XG4gICAgICAgIC4uLm1ldGEgfHwge30sXG4gICAgICAgIGFyZyxcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICByZXF1ZXN0U3RhdHVzOiBcImZ1bGZpbGxlZFwiXG4gICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IHBlbmRpbmcgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3BlbmRpbmdcIiwgKHJlcXVlc3RJZCwgYXJnLCBtZXRhKSA9PiAoe1xuICAgICAgcGF5bG9hZDogdm9pZCAwLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5tZXRhIHx8IHt9LFxuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVxdWVzdFN0YXR1czogXCJwZW5kaW5nXCJcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgcmVqZWN0ZWQgPSBjcmVhdGVBY3Rpb24odHlwZVByZWZpeCArIFwiL3JlamVjdGVkXCIsIChlcnJvciwgcmVxdWVzdElkLCBhcmcsIHBheWxvYWQsIG1ldGEpID0+ICh7XG4gICAgICBwYXlsb2FkLFxuICAgICAgZXJyb3I6IChvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplRXJyb3IgfHwgbWluaVNlcmlhbGl6ZUVycm9yKShlcnJvciB8fCBcIlJlamVjdGVkXCIpLFxuICAgICAgbWV0YToge1xuICAgICAgICAuLi5tZXRhIHx8IHt9LFxuICAgICAgICBhcmcsXG4gICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgcmVqZWN0ZWRXaXRoVmFsdWU6ICEhcGF5bG9hZCxcbiAgICAgICAgcmVxdWVzdFN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgICBhYm9ydGVkOiBlcnJvcj8ubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIsXG4gICAgICAgIGNvbmRpdGlvbjogZXJyb3I/Lm5hbWUgPT09IFwiQ29uZGl0aW9uRXJyb3JcIlxuICAgICAgfVxuICAgIH0pKTtcbiAgICBmdW5jdGlvbiBhY3Rpb25DcmVhdG9yKGFyZykge1xuICAgICAgcmV0dXJuIChkaXNwYXRjaCwgZ2V0U3RhdGUsIGV4dHJhKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IG9wdGlvbnM/LmlkR2VuZXJhdG9yID8gb3B0aW9ucy5pZEdlbmVyYXRvcihhcmcpIDogbmFub2lkKCk7XG4gICAgICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgbGV0IGFib3J0SGFuZGxlcjtcbiAgICAgICAgbGV0IGFib3J0UmVhc29uO1xuICAgICAgICBmdW5jdGlvbiBhYm9ydChyZWFzb24pIHtcbiAgICAgICAgICBhYm9ydFJlYXNvbiA9IHJlYXNvbjtcbiAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID0gYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbGV0IGZpbmFsQWN0aW9uO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgY29uZGl0aW9uUmVzdWx0ID0gb3B0aW9ucz8uY29uZGl0aW9uPy4oYXJnLCB7XG4gICAgICAgICAgICAgIGdldFN0YXRlLFxuICAgICAgICAgICAgICBleHRyYVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXNUaGVuYWJsZShjb25kaXRpb25SZXN1bHQpKSB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvblJlc3VsdCA9IGF3YWl0IGNvbmRpdGlvblJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb25kaXRpb25SZXN1bHQgPT09IGZhbHNlIHx8IGFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgICAgICB0aHJvdyB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJDb25kaXRpb25FcnJvclwiLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQWJvcnRlZCBkdWUgdG8gY29uZGl0aW9uIGNhbGxiYWNrIHJldHVybmluZyBmYWxzZS5cIlxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWJvcnRlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGFib3J0SGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJBYm9ydEVycm9yXCIsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhYm9ydFJlYXNvbiB8fCBcIkFib3J0ZWRcIlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwYXRjaChwZW5kaW5nKHJlcXVlc3RJZCwgYXJnLCBvcHRpb25zPy5nZXRQZW5kaW5nTWV0YT8uKHtcbiAgICAgICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgICAgICBhcmdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgZ2V0U3RhdGUsXG4gICAgICAgICAgICAgIGV4dHJhXG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBhd2FpdCBQcm9taXNlLnJhY2UoW2Fib3J0ZWRQcm9taXNlLCBQcm9taXNlLnJlc29sdmUocGF5bG9hZENyZWF0b3IoYXJnLCB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoLFxuICAgICAgICAgICAgICBnZXRTdGF0ZSxcbiAgICAgICAgICAgICAgZXh0cmEsXG4gICAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICAgICAgcmVqZWN0V2l0aFZhbHVlOiAodmFsdWUsIG1ldGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlamVjdFdpdGhWYWx1ZSh2YWx1ZSwgbWV0YSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bGZpbGxXaXRoVmFsdWU6ICh2YWx1ZSwgbWV0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVsZmlsbFdpdGhNZXRhKHZhbHVlLCBtZXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVqZWN0V2l0aFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBGdWxmaWxsV2l0aE1ldGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVsZmlsbGVkKHJlc3VsdC5wYXlsb2FkLCByZXF1ZXN0SWQsIGFyZywgcmVzdWx0Lm1ldGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBmdWxmaWxsZWQocmVzdWx0LCByZXF1ZXN0SWQsIGFyZyk7XG4gICAgICAgICAgICB9KV0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZmluYWxBY3Rpb24gPSBlcnIgaW5zdGFuY2VvZiBSZWplY3RXaXRoVmFsdWUgPyByZWplY3RlZChudWxsLCByZXF1ZXN0SWQsIGFyZywgZXJyLnBheWxvYWQsIGVyci5tZXRhKSA6IHJlamVjdGVkKGVyciwgcmVxdWVzdElkLCBhcmcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoYWJvcnRIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0SGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHNraXBEaXNwYXRjaCA9IG9wdGlvbnMgJiYgIW9wdGlvbnMuZGlzcGF0Y2hDb25kaXRpb25SZWplY3Rpb24gJiYgcmVqZWN0ZWQubWF0Y2goZmluYWxBY3Rpb24pICYmIGZpbmFsQWN0aW9uLm1ldGEuY29uZGl0aW9uO1xuICAgICAgICAgIGlmICghc2tpcERpc3BhdGNoKSB7XG4gICAgICAgICAgICBkaXNwYXRjaChmaW5hbEFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmaW5hbEFjdGlvbjtcbiAgICAgICAgfSgpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9taXNlLCB7XG4gICAgICAgICAgYWJvcnQsXG4gICAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICAgIGFyZyxcbiAgICAgICAgICB1bndyYXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHVud3JhcFJlc3VsdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjdGlvbkNyZWF0b3IsIHtcbiAgICAgIHBlbmRpbmcsXG4gICAgICByZWplY3RlZCxcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHNldHRsZWQ6IGlzQW55T2YocmVqZWN0ZWQsIGZ1bGZpbGxlZCksXG4gICAgICB0eXBlUHJlZml4XG4gICAgfSk7XG4gIH1cbiAgY3JlYXRlQXN5bmNUaHVuazIud2l0aFR5cGVzID0gKCkgPT4gY3JlYXRlQXN5bmNUaHVuazI7XG4gIHJldHVybiBjcmVhdGVBc3luY1RodW5rMjtcbn0pKCk7XG5mdW5jdGlvbiB1bndyYXBSZXN1bHQoYWN0aW9uKSB7XG4gIGlmIChhY3Rpb24ubWV0YSAmJiBhY3Rpb24ubWV0YS5yZWplY3RlZFdpdGhWYWx1ZSkge1xuICAgIHRocm93IGFjdGlvbi5wYXlsb2FkO1xuICB9XG4gIGlmIChhY3Rpb24uZXJyb3IpIHtcbiAgICB0aHJvdyBhY3Rpb24uZXJyb3I7XG4gIH1cbiAgcmV0dXJuIGFjdGlvbi5wYXlsb2FkO1xufVxuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbi8vIHNyYy9jcmVhdGVTbGljZS50c1xudmFyIGFzeW5jVGh1bmtTeW1ib2wgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcihcInJ0ay1zbGljZS1jcmVhdGVhc3luY3RodW5rXCIpO1xudmFyIGFzeW5jVGh1bmtDcmVhdG9yID0ge1xuICBbYXN5bmNUaHVua1N5bWJvbF06IGNyZWF0ZUFzeW5jVGh1bmtcbn07XG52YXIgUmVkdWNlclR5cGUgPSAvKiBAX19QVVJFX18gKi8gKChSZWR1Y2VyVHlwZTIpID0+IHtcbiAgUmVkdWNlclR5cGUyW1wicmVkdWNlclwiXSA9IFwicmVkdWNlclwiO1xuICBSZWR1Y2VyVHlwZTJbXCJyZWR1Y2VyV2l0aFByZXBhcmVcIl0gPSBcInJlZHVjZXJXaXRoUHJlcGFyZVwiO1xuICBSZWR1Y2VyVHlwZTJbXCJhc3luY1RodW5rXCJdID0gXCJhc3luY1RodW5rXCI7XG4gIHJldHVybiBSZWR1Y2VyVHlwZTI7XG59KShSZWR1Y2VyVHlwZSB8fCB7fSk7XG5mdW5jdGlvbiBnZXRUeXBlKHNsaWNlLCBhY3Rpb25LZXkpIHtcbiAgcmV0dXJuIGAke3NsaWNlfS8ke2FjdGlvbktleX1gO1xufVxuZnVuY3Rpb24gYnVpbGRDcmVhdGVTbGljZSh7XG4gIGNyZWF0b3JzXG59ID0ge30pIHtcbiAgY29uc3QgY0FUID0gY3JlYXRvcnM/LmFzeW5jVGh1bms/Llthc3luY1RodW5rU3ltYm9sXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVNsaWNlMihvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIHJlZHVjZXJQYXRoID0gbmFtZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTEpIDogXCJgbmFtZWAgaXMgYSByZXF1aXJlZCBvcHRpb24gZm9yIGNyZWF0ZVNsaWNlXCIpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbFN0YXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gYGluaXRpYWxTdGF0ZWAgdmFsdWUgdGhhdCBpcyBub3QgYHVuZGVmaW5lZGAuIFlvdSBtYXkgaGF2ZSBtaXNzcGVsbGVkIGBpbml0aWFsU3RhdGVgXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWR1Y2VycyA9ICh0eXBlb2Ygb3B0aW9ucy5yZWR1Y2VycyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucy5yZWR1Y2VycyhidWlsZFJlZHVjZXJDcmVhdG9ycygpKSA6IG9wdGlvbnMucmVkdWNlcnMpIHx8IHt9O1xuICAgIGNvbnN0IHJlZHVjZXJOYW1lcyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeU5hbWU6IHt9LFxuICAgICAgc2xpY2VDYXNlUmVkdWNlcnNCeVR5cGU6IHt9LFxuICAgICAgYWN0aW9uQ3JlYXRvcnM6IHt9LFxuICAgICAgc2xpY2VNYXRjaGVyczogW11cbiAgICB9O1xuICAgIGNvbnN0IGNvbnRleHRNZXRob2RzID0ge1xuICAgICAgYWRkQ2FzZSh0eXBlT3JBY3Rpb25DcmVhdG9yLCByZWR1Y2VyMikge1xuICAgICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHR5cGVPckFjdGlvbkNyZWF0b3IgPT09IFwic3RyaW5nXCIgPyB0eXBlT3JBY3Rpb25DcmVhdG9yIDogdHlwZU9yQWN0aW9uQ3JlYXRvci50eXBlO1xuICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxMikgOiBcImBjb250ZXh0LmFkZENhc2VgIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBhbiBlbXB0eSBhY3Rpb24gdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSBpbiBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTMpIDogXCJgY29udGV4dC5hZGRDYXNlYCBjYW5ub3QgYmUgY2FsbGVkIHdpdGggdHdvIHJlZHVjZXJzIGZvciB0aGUgc2FtZSBhY3Rpb24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlUeXBlW3R5cGVdID0gcmVkdWNlcjI7XG4gICAgICAgIHJldHVybiBjb250ZXh0TWV0aG9kcztcbiAgICAgIH0sXG4gICAgICBhZGRNYXRjaGVyKG1hdGNoZXIsIHJlZHVjZXIyKSB7XG4gICAgICAgIGNvbnRleHQuc2xpY2VNYXRjaGVycy5wdXNoKHtcbiAgICAgICAgICBtYXRjaGVyLFxuICAgICAgICAgIHJlZHVjZXI6IHJlZHVjZXIyXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29udGV4dE1ldGhvZHM7XG4gICAgICB9LFxuICAgICAgZXhwb3NlQWN0aW9uKG5hbWUyLCBhY3Rpb25DcmVhdG9yKSB7XG4gICAgICAgIGNvbnRleHQuYWN0aW9uQ3JlYXRvcnNbbmFtZTJdID0gYWN0aW9uQ3JlYXRvcjtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRNZXRob2RzO1xuICAgICAgfSxcbiAgICAgIGV4cG9zZUNhc2VSZWR1Y2VyKG5hbWUyLCByZWR1Y2VyMikge1xuICAgICAgICBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lW25hbWUyXSA9IHJlZHVjZXIyO1xuICAgICAgICByZXR1cm4gY29udGV4dE1ldGhvZHM7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWR1Y2VyTmFtZXMuZm9yRWFjaCgocmVkdWNlck5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJlZHVjZXJEZWZpbml0aW9uID0gcmVkdWNlcnNbcmVkdWNlck5hbWVdO1xuICAgICAgY29uc3QgcmVkdWNlckRldGFpbHMgPSB7XG4gICAgICAgIHJlZHVjZXJOYW1lLFxuICAgICAgICB0eXBlOiBnZXRUeXBlKG5hbWUsIHJlZHVjZXJOYW1lKSxcbiAgICAgICAgY3JlYXRlTm90YXRpb246IHR5cGVvZiBvcHRpb25zLnJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgIH07XG4gICAgICBpZiAoaXNBc3luY1RodW5rU2xpY2VSZWR1Y2VyRGVmaW5pdGlvbihyZWR1Y2VyRGVmaW5pdGlvbikpIHtcbiAgICAgICAgaGFuZGxlVGh1bmtDYXNlUmVkdWNlckRlZmluaXRpb24ocmVkdWNlckRldGFpbHMsIHJlZHVjZXJEZWZpbml0aW9uLCBjb250ZXh0TWV0aG9kcywgY0FUKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZU5vcm1hbFJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZXRhaWxzLCByZWR1Y2VyRGVmaW5pdGlvbiwgY29udGV4dE1ldGhvZHMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZ1bmN0aW9uIGJ1aWxkUmVkdWNlcigpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmV4dHJhUmVkdWNlcnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNCkgOiBcIlRoZSBvYmplY3Qgbm90YXRpb24gZm9yIGBjcmVhdGVTbGljZS5leHRyYVJlZHVjZXJzYCBoYXMgYmVlbiByZW1vdmVkLiBQbGVhc2UgdXNlIHRoZSAnYnVpbGRlciBjYWxsYmFjaycgbm90YXRpb24gaW5zdGVhZDogaHR0cHM6Ly9yZWR1eC10b29sa2l0LmpzLm9yZy9hcGkvY3JlYXRlU2xpY2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IFtleHRyYVJlZHVjZXJzID0ge30sIGFjdGlvbk1hdGNoZXJzID0gW10sIGRlZmF1bHRDYXNlUmVkdWNlciA9IHZvaWQgMF0gPSB0eXBlb2Ygb3B0aW9ucy5leHRyYVJlZHVjZXJzID09PSBcImZ1bmN0aW9uXCIgPyBleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayhvcHRpb25zLmV4dHJhUmVkdWNlcnMpIDogW29wdGlvbnMuZXh0cmFSZWR1Y2Vyc107XG4gICAgICBjb25zdCBmaW5hbENhc2VSZWR1Y2VycyA9IHtcbiAgICAgICAgLi4uZXh0cmFSZWR1Y2VycyxcbiAgICAgICAgLi4uY29udGV4dC5zbGljZUNhc2VSZWR1Y2Vyc0J5VHlwZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBjcmVhdGVSZWR1Y2VyKG9wdGlvbnMuaW5pdGlhbFN0YXRlLCAoYnVpbGRlcikgPT4ge1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZmluYWxDYXNlUmVkdWNlcnMpIHtcbiAgICAgICAgICBidWlsZGVyLmFkZENhc2Uoa2V5LCBmaW5hbENhc2VSZWR1Y2Vyc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBzTSBvZiBjb250ZXh0LnNsaWNlTWF0Y2hlcnMpIHtcbiAgICAgICAgICBidWlsZGVyLmFkZE1hdGNoZXIoc00ubWF0Y2hlciwgc00ucmVkdWNlcik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgbSBvZiBhY3Rpb25NYXRjaGVycykge1xuICAgICAgICAgIGJ1aWxkZXIuYWRkTWF0Y2hlcihtLm1hdGNoZXIsIG0ucmVkdWNlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRDYXNlUmVkdWNlcikge1xuICAgICAgICAgIGJ1aWxkZXIuYWRkRGVmYXVsdENhc2UoZGVmYXVsdENhc2VSZWR1Y2VyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdFNlbGYgPSAoc3RhdGUpID0+IHN0YXRlO1xuICAgIGNvbnN0IGluamVjdGVkU2VsZWN0b3JDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgbGV0IF9yZWR1Y2VyO1xuICAgIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcbiAgICAgIHJldHVybiBfcmVkdWNlcihzdGF0ZSwgYWN0aW9uKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SW5pdGlhbFN0YXRlKCkge1xuICAgICAgaWYgKCFfcmVkdWNlcikgX3JlZHVjZXIgPSBidWlsZFJlZHVjZXIoKTtcbiAgICAgIHJldHVybiBfcmVkdWNlci5nZXRJbml0aWFsU3RhdGUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbWFrZVNlbGVjdG9yUHJvcHMocmVkdWNlclBhdGgyLCBpbmplY3RlZCA9IGZhbHNlKSB7XG4gICAgICBmdW5jdGlvbiBzZWxlY3RTbGljZShzdGF0ZSkge1xuICAgICAgICBsZXQgc2xpY2VTdGF0ZSA9IHN0YXRlW3JlZHVjZXJQYXRoMl07XG4gICAgICAgIGlmICh0eXBlb2Ygc2xpY2VTdGF0ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICAgICAgc2xpY2VTdGF0ZSA9IGdldEluaXRpYWxTdGF0ZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNSkgOiBcInNlbGVjdFNsaWNlIHJldHVybmVkIHVuZGVmaW5lZCBmb3IgYW4gdW5pbmplY3RlZCBzbGljZSByZWR1Y2VyXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2xpY2VTdGF0ZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdG9ycyhzZWxlY3RTdGF0ZSA9IHNlbGVjdFNlbGYpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JDYWNoZSA9IGVtcGxhY2UoaW5qZWN0ZWRTZWxlY3RvckNhY2hlLCBpbmplY3RlZCwge1xuICAgICAgICAgIGluc2VydDogKCkgPT4gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlbXBsYWNlKHNlbGVjdG9yQ2FjaGUsIHNlbGVjdFN0YXRlLCB7XG4gICAgICAgICAgaW5zZXJ0OiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUyLCBzZWxlY3Rvcl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucy5zZWxlY3RvcnMgPz8ge30pKSB7XG4gICAgICAgICAgICAgIG1hcFtuYW1lMl0gPSB3cmFwU2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdFN0YXRlLCBnZXRJbml0aWFsU3RhdGUsIGluamVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlZHVjZXJQYXRoOiByZWR1Y2VyUGF0aDIsXG4gICAgICAgIGdldFNlbGVjdG9ycyxcbiAgICAgICAgZ2V0IHNlbGVjdG9ycygpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0U2VsZWN0b3JzKHNlbGVjdFNsaWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0U2xpY2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNsaWNlID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHJlZHVjZXIsXG4gICAgICBhY3Rpb25zOiBjb250ZXh0LmFjdGlvbkNyZWF0b3JzLFxuICAgICAgY2FzZVJlZHVjZXJzOiBjb250ZXh0LnNsaWNlQ2FzZVJlZHVjZXJzQnlOYW1lLFxuICAgICAgZ2V0SW5pdGlhbFN0YXRlLFxuICAgICAgLi4ubWFrZVNlbGVjdG9yUHJvcHMocmVkdWNlclBhdGgpLFxuICAgICAgaW5qZWN0SW50byhpbmplY3RhYmxlLCB7XG4gICAgICAgIHJlZHVjZXJQYXRoOiBwYXRoT3B0LFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH0gPSB7fSkge1xuICAgICAgICBjb25zdCBuZXdSZWR1Y2VyUGF0aCA9IHBhdGhPcHQgPz8gcmVkdWNlclBhdGg7XG4gICAgICAgIGluamVjdGFibGUuaW5qZWN0KHtcbiAgICAgICAgICByZWR1Y2VyUGF0aDogbmV3UmVkdWNlclBhdGgsXG4gICAgICAgICAgcmVkdWNlclxuICAgICAgICB9LCBjb25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnNsaWNlLFxuICAgICAgICAgIC4uLm1ha2VTZWxlY3RvclByb3BzKG5ld1JlZHVjZXJQYXRoLCB0cnVlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNsaWNlO1xuICB9O1xufVxuZnVuY3Rpb24gd3JhcFNlbGVjdG9yKHNlbGVjdG9yLCBzZWxlY3RTdGF0ZSwgZ2V0SW5pdGlhbFN0YXRlLCBpbmplY3RlZCkge1xuICBmdW5jdGlvbiB3cmFwcGVyKHJvb3RTdGF0ZSwgLi4uYXJncykge1xuICAgIGxldCBzbGljZVN0YXRlID0gc2VsZWN0U3RhdGUocm9vdFN0YXRlKTtcbiAgICBpZiAodHlwZW9mIHNsaWNlU3RhdGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChpbmplY3RlZCkge1xuICAgICAgICBzbGljZVN0YXRlID0gZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNikgOiBcInNlbGVjdFN0YXRlIHJldHVybmVkIHVuZGVmaW5lZCBmb3IgYW4gdW5pbmplY3RlZCBzbGljZSByZWR1Y2VyXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0b3Ioc2xpY2VTdGF0ZSwgLi4uYXJncyk7XG4gIH1cbiAgd3JhcHBlci51bndyYXBwZWQgPSBzZWxlY3RvcjtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG52YXIgY3JlYXRlU2xpY2UgPSAvKiBAX19QVVJFX18gKi8gYnVpbGRDcmVhdGVTbGljZSgpO1xuZnVuY3Rpb24gYnVpbGRSZWR1Y2VyQ3JlYXRvcnMoKSB7XG4gIGZ1bmN0aW9uIGFzeW5jVGh1bmsocGF5bG9hZENyZWF0b3IsIGNvbmZpZykge1xuICAgIHJldHVybiB7XG4gICAgICBfcmVkdWNlckRlZmluaXRpb25UeXBlOiBcImFzeW5jVGh1bmtcIiAvKiBhc3luY1RodW5rICovLFxuICAgICAgcGF5bG9hZENyZWF0b3IsXG4gICAgICAuLi5jb25maWdcbiAgICB9O1xuICB9XG4gIGFzeW5jVGh1bmsud2l0aFR5cGVzID0gKCkgPT4gYXN5bmNUaHVuaztcbiAgcmV0dXJuIHtcbiAgICByZWR1Y2VyKGNhc2VSZWR1Y2VyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIC8vIGhhY2sgc28gdGhlIHdyYXBwaW5nIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcmlnaW5hbFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc28gdGhlIGByZWR1Y2VyRGVmaW5pdGlvblR5cGVgIGlzIG5vdCBhc3NpZ25lZCB0byB0aGUgb3JpZ2luYWxcbiAgICAgICAgW2Nhc2VSZWR1Y2VyLm5hbWVdKC4uLmFyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gY2FzZVJlZHVjZXIoLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1bY2FzZVJlZHVjZXIubmFtZV0sIHtcbiAgICAgICAgX3JlZHVjZXJEZWZpbml0aW9uVHlwZTogXCJyZWR1Y2VyXCIgLyogcmVkdWNlciAqL1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVwYXJlZFJlZHVjZXIocHJlcGFyZSwgcmVkdWNlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3JlZHVjZXJEZWZpbml0aW9uVHlwZTogXCJyZWR1Y2VyV2l0aFByZXBhcmVcIiAvKiByZWR1Y2VyV2l0aFByZXBhcmUgKi8sXG4gICAgICAgIHByZXBhcmUsXG4gICAgICAgIHJlZHVjZXJcbiAgICAgIH07XG4gICAgfSxcbiAgICBhc3luY1RodW5rXG4gIH07XG59XG5mdW5jdGlvbiBoYW5kbGVOb3JtYWxSZWR1Y2VyRGVmaW5pdGlvbih7XG4gIHR5cGUsXG4gIHJlZHVjZXJOYW1lLFxuICBjcmVhdGVOb3RhdGlvblxufSwgbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUsIGNvbnRleHQpIHtcbiAgbGV0IGNhc2VSZWR1Y2VyO1xuICBsZXQgcHJlcGFyZUNhbGxiYWNrO1xuICBpZiAoXCJyZWR1Y2VyXCIgaW4gbWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpIHtcbiAgICBpZiAoY3JlYXRlTm90YXRpb24gJiYgIWlzQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZURlZmluaXRpb24obWF5YmVSZWR1Y2VyV2l0aFByZXBhcmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgxNykgOiBcIlBsZWFzZSB1c2UgdGhlIGBjcmVhdGUucHJlcGFyZWRSZWR1Y2VyYCBub3RhdGlvbiBmb3IgcHJlcGFyZWQgYWN0aW9uIGNyZWF0b3JzIHdpdGggdGhlIGBjcmVhdGVgIG5vdGF0aW9uLlwiKTtcbiAgICB9XG4gICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZS5yZWR1Y2VyO1xuICAgIHByZXBhcmVDYWxsYmFjayA9IG1heWJlUmVkdWNlcldpdGhQcmVwYXJlLnByZXBhcmU7XG4gIH0gZWxzZSB7XG4gICAgY2FzZVJlZHVjZXIgPSBtYXliZVJlZHVjZXJXaXRoUHJlcGFyZTtcbiAgfVxuICBjb250ZXh0LmFkZENhc2UodHlwZSwgY2FzZVJlZHVjZXIpLmV4cG9zZUNhc2VSZWR1Y2VyKHJlZHVjZXJOYW1lLCBjYXNlUmVkdWNlcikuZXhwb3NlQWN0aW9uKHJlZHVjZXJOYW1lLCBwcmVwYXJlQ2FsbGJhY2sgPyBjcmVhdGVBY3Rpb24odHlwZSwgcHJlcGFyZUNhbGxiYWNrKSA6IGNyZWF0ZUFjdGlvbih0eXBlKSk7XG59XG5mdW5jdGlvbiBpc0FzeW5jVGh1bmtTbGljZVJlZHVjZXJEZWZpbml0aW9uKHJlZHVjZXJEZWZpbml0aW9uKSB7XG4gIHJldHVybiByZWR1Y2VyRGVmaW5pdGlvbi5fcmVkdWNlckRlZmluaXRpb25UeXBlID09PSBcImFzeW5jVGh1bmtcIiAvKiBhc3luY1RodW5rICovO1xufVxuZnVuY3Rpb24gaXNDYXNlUmVkdWNlcldpdGhQcmVwYXJlRGVmaW5pdGlvbihyZWR1Y2VyRGVmaW5pdGlvbikge1xuICByZXR1cm4gcmVkdWNlckRlZmluaXRpb24uX3JlZHVjZXJEZWZpbml0aW9uVHlwZSA9PT0gXCJyZWR1Y2VyV2l0aFByZXBhcmVcIiAvKiByZWR1Y2VyV2l0aFByZXBhcmUgKi87XG59XG5mdW5jdGlvbiBoYW5kbGVUaHVua0Nhc2VSZWR1Y2VyRGVmaW5pdGlvbih7XG4gIHR5cGUsXG4gIHJlZHVjZXJOYW1lXG59LCByZWR1Y2VyRGVmaW5pdGlvbiwgY29udGV4dCwgY0FUKSB7XG4gIGlmICghY0FUKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMTgpIDogXCJDYW5ub3QgdXNlIGBjcmVhdGUuYXN5bmNUaHVua2AgaW4gdGhlIGJ1aWx0LWluIGBjcmVhdGVTbGljZWAuIFVzZSBgYnVpbGRDcmVhdGVTbGljZSh7IGNyZWF0b3JzOiB7IGFzeW5jVGh1bms6IGFzeW5jVGh1bmtDcmVhdG9yIH0gfSlgIHRvIGNyZWF0ZSBhIGN1c3RvbWlzZWQgdmVyc2lvbiBvZiBgY3JlYXRlU2xpY2VgLlwiKTtcbiAgfVxuICBjb25zdCB7XG4gICAgcGF5bG9hZENyZWF0b3IsXG4gICAgZnVsZmlsbGVkLFxuICAgIHBlbmRpbmcsXG4gICAgcmVqZWN0ZWQsXG4gICAgc2V0dGxlZCxcbiAgICBvcHRpb25zXG4gIH0gPSByZWR1Y2VyRGVmaW5pdGlvbjtcbiAgY29uc3QgdGh1bmsgPSBjQVQodHlwZSwgcGF5bG9hZENyZWF0b3IsIG9wdGlvbnMpO1xuICBjb250ZXh0LmV4cG9zZUFjdGlvbihyZWR1Y2VyTmFtZSwgdGh1bmspO1xuICBpZiAoZnVsZmlsbGVkKSB7XG4gICAgY29udGV4dC5hZGRDYXNlKHRodW5rLmZ1bGZpbGxlZCwgZnVsZmlsbGVkKTtcbiAgfVxuICBpZiAocGVuZGluZykge1xuICAgIGNvbnRleHQuYWRkQ2FzZSh0aHVuay5wZW5kaW5nLCBwZW5kaW5nKTtcbiAgfVxuICBpZiAocmVqZWN0ZWQpIHtcbiAgICBjb250ZXh0LmFkZENhc2UodGh1bmsucmVqZWN0ZWQsIHJlamVjdGVkKTtcbiAgfVxuICBpZiAoc2V0dGxlZCkge1xuICAgIGNvbnRleHQuYWRkTWF0Y2hlcih0aHVuay5zZXR0bGVkLCBzZXR0bGVkKTtcbiAgfVxuICBjb250ZXh0LmV4cG9zZUNhc2VSZWR1Y2VyKHJlZHVjZXJOYW1lLCB7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQgfHwgbm9vcCxcbiAgICBwZW5kaW5nOiBwZW5kaW5nIHx8IG5vb3AsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkIHx8IG5vb3AsXG4gICAgc2V0dGxlZDogc2V0dGxlZCB8fCBub29wXG4gIH0pO1xufVxuZnVuY3Rpb24gbm9vcCgpIHtcbn1cblxuLy8gc3JjL2VudGl0aWVzL2VudGl0eV9zdGF0ZS50c1xuZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eVN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIGlkczogW10sXG4gICAgZW50aXRpZXM6IHt9XG4gIH07XG59XG5mdW5jdGlvbiBjcmVhdGVJbml0aWFsU3RhdGVGYWN0b3J5KHN0YXRlQWRhcHRlcikge1xuICBmdW5jdGlvbiBnZXRJbml0aWFsU3RhdGUoYWRkaXRpb25hbFN0YXRlID0ge30sIGVudGl0aWVzKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlTdGF0ZSgpLCBhZGRpdGlvbmFsU3RhdGUpO1xuICAgIHJldHVybiBlbnRpdGllcyA/IHN0YXRlQWRhcHRlci5zZXRBbGwoc3RhdGUsIGVudGl0aWVzKSA6IHN0YXRlO1xuICB9XG4gIHJldHVybiB7XG4gICAgZ2V0SW5pdGlhbFN0YXRlXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9zdGF0ZV9zZWxlY3RvcnMudHNcbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKSB7XG4gIGZ1bmN0aW9uIGdldFNlbGVjdG9ycyhzZWxlY3RTdGF0ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgY3JlYXRlU2VsZWN0b3I6IGNyZWF0ZVNlbGVjdG9yMiA9IGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2VsZWN0SWRzID0gKHN0YXRlKSA9PiBzdGF0ZS5pZHM7XG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXMgPSAoc3RhdGUpID0+IHN0YXRlLmVudGl0aWVzO1xuICAgIGNvbnN0IHNlbGVjdEFsbCA9IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RJZHMsIHNlbGVjdEVudGl0aWVzLCAoaWRzLCBlbnRpdGllcykgPT4gaWRzLm1hcCgoaWQpID0+IGVudGl0aWVzW2lkXSkpO1xuICAgIGNvbnN0IHNlbGVjdElkID0gKF8sIGlkKSA9PiBpZDtcbiAgICBjb25zdCBzZWxlY3RCeUlkID0gKGVudGl0aWVzLCBpZCkgPT4gZW50aXRpZXNbaWRdO1xuICAgIGNvbnN0IHNlbGVjdFRvdGFsID0gY3JlYXRlU2VsZWN0b3IyKHNlbGVjdElkcywgKGlkcykgPT4gaWRzLmxlbmd0aCk7XG4gICAgaWYgKCFzZWxlY3RTdGF0ZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0SWRzLFxuICAgICAgICBzZWxlY3RFbnRpdGllcyxcbiAgICAgICAgc2VsZWN0QWxsLFxuICAgICAgICBzZWxlY3RUb3RhbCxcbiAgICAgICAgc2VsZWN0QnlJZDogY3JlYXRlU2VsZWN0b3IyKHNlbGVjdEVudGl0aWVzLCBzZWxlY3RJZCwgc2VsZWN0QnlJZClcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdEdsb2JhbGl6ZWRFbnRpdGllcyA9IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0RW50aXRpZXMpO1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RJZHM6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0SWRzKSxcbiAgICAgIHNlbGVjdEVudGl0aWVzOiBzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsXG4gICAgICBzZWxlY3RBbGw6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RTdGF0ZSwgc2VsZWN0QWxsKSxcbiAgICAgIHNlbGVjdFRvdGFsOiBjcmVhdGVTZWxlY3RvcjIoc2VsZWN0U3RhdGUsIHNlbGVjdFRvdGFsKSxcbiAgICAgIHNlbGVjdEJ5SWQ6IGNyZWF0ZVNlbGVjdG9yMihzZWxlY3RHbG9iYWxpemVkRW50aXRpZXMsIHNlbGVjdElkLCBzZWxlY3RCeUlkKVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBnZXRTZWxlY3RvcnNcbiAgfTtcbn1cblxuLy8gc3JjL2VudGl0aWVzL3N0YXRlX2FkYXB0ZXIudHNcbmltcG9ydCB7IHByb2R1Y2UgYXMgY3JlYXRlTmV4dFN0YXRlMywgaXNEcmFmdCBhcyBpc0RyYWZ0MyB9IGZyb20gXCJpbW1lclwiO1xudmFyIGlzRHJhZnRUeXBlZCA9IGlzRHJhZnQzO1xuZnVuY3Rpb24gY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKG11dGF0b3IpIHtcbiAgY29uc3Qgb3BlcmF0b3IgPSBjcmVhdGVTdGF0ZU9wZXJhdG9yKChfLCBzdGF0ZSkgPT4gbXV0YXRvcihzdGF0ZSkpO1xuICByZXR1cm4gZnVuY3Rpb24gb3BlcmF0aW9uKHN0YXRlKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yKHN0YXRlLCB2b2lkIDApO1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlU3RhdGVPcGVyYXRvcihtdXRhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiBvcGVyYXRpb24oc3RhdGUsIGFyZykge1xuICAgIGZ1bmN0aW9uIGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZzIpIHtcbiAgICAgIHJldHVybiBpc0ZTQShhcmcyKTtcbiAgICB9XG4gICAgY29uc3QgcnVuTXV0YXRvciA9IChkcmFmdCkgPT4ge1xuICAgICAgaWYgKGlzUGF5bG9hZEFjdGlvbkFyZ3VtZW50KGFyZykpIHtcbiAgICAgICAgbXV0YXRvcihhcmcucGF5bG9hZCwgZHJhZnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXV0YXRvcihhcmcsIGRyYWZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChpc0RyYWZ0VHlwZWQoc3RhdGUpKSB7XG4gICAgICBydW5NdXRhdG9yKHN0YXRlKTtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZU5leHRTdGF0ZTMoc3RhdGUsIHJ1bk11dGF0b3IpO1xuICB9O1xufVxuXG4vLyBzcmMvZW50aXRpZXMvdXRpbHMudHNcbmltcG9ydCB7IGN1cnJlbnQgYXMgY3VycmVudDIsIGlzRHJhZnQgYXMgaXNEcmFmdDQgfSBmcm9tIFwiaW1tZXJcIjtcbmZ1bmN0aW9uIHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCkge1xuICBjb25zdCBrZXkgPSBzZWxlY3RJZChlbnRpdHkpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGtleSA9PT0gdm9pZCAwKSB7XG4gICAgY29uc29sZS53YXJuKFwiVGhlIGVudGl0eSBwYXNzZWQgdG8gdGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgdW5kZWZpbmVkLlwiLCBcIllvdSBzaG91bGQgcHJvYmFibHkgcHJvdmlkZSB5b3VyIG93biBgc2VsZWN0SWRgIGltcGxlbWVudGF0aW9uLlwiLCBcIlRoZSBlbnRpdHkgdGhhdCB3YXMgcGFzc2VkOlwiLCBlbnRpdHksIFwiVGhlIGBzZWxlY3RJZGAgaW1wbGVtZW50YXRpb246XCIsIHNlbGVjdElkLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBrZXk7XG59XG5mdW5jdGlvbiBlbnN1cmVFbnRpdGllc0FycmF5KGVudGl0aWVzKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShlbnRpdGllcykpIHtcbiAgICBlbnRpdGllcyA9IE9iamVjdC52YWx1ZXMoZW50aXRpZXMpO1xuICB9XG4gIHJldHVybiBlbnRpdGllcztcbn1cbmZ1bmN0aW9uIGdldEN1cnJlbnQodmFsdWUpIHtcbiAgcmV0dXJuIGlzRHJhZnQ0KHZhbHVlKSA/IGN1cnJlbnQyKHZhbHVlKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKSB7XG4gIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzQXJyYXkgPSBnZXRDdXJyZW50KHN0YXRlLmlkcyk7XG4gIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChleGlzdGluZ0lkc0FycmF5KTtcbiAgY29uc3QgYWRkZWQgPSBbXTtcbiAgY29uc3QgdXBkYXRlZCA9IFtdO1xuICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xuICAgIGNvbnN0IGlkID0gc2VsZWN0SWRWYWx1ZShlbnRpdHksIHNlbGVjdElkKTtcbiAgICBpZiAoZXhpc3RpbmdJZHMuaGFzKGlkKSkge1xuICAgICAgdXBkYXRlZC5wdXNoKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNoYW5nZXM6IGVudGl0eVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZGVkLnB1c2goZW50aXR5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFthZGRlZCwgdXBkYXRlZCwgZXhpc3RpbmdJZHNBcnJheV07XG59XG5cbi8vIHNyYy9lbnRpdGllcy91bnNvcnRlZF9zdGF0ZV9hZGFwdGVyLnRzXG5mdW5jdGlvbiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCkge1xuICBmdW5jdGlvbiBhZGRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICBjb25zdCBrZXkgPSBzZWxlY3RJZFZhbHVlKGVudGl0eSwgc2VsZWN0SWQpO1xuICAgIGlmIChrZXkgaW4gc3RhdGUuZW50aXRpZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcbiAgICBzdGF0ZS5lbnRpdGllc1trZXldID0gZW50aXR5O1xuICB9XG4gIGZ1bmN0aW9uIGFkZE1hbnlNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgZm9yIChjb25zdCBlbnRpdHkgb2YgbmV3RW50aXRpZXMpIHtcbiAgICAgIGFkZE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHNldE9uZU11dGFibHkoZW50aXR5LCBzdGF0ZSkge1xuICAgIGNvbnN0IGtleSA9IHNlbGVjdElkVmFsdWUoZW50aXR5LCBzZWxlY3RJZCk7XG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmVudGl0aWVzKSkge1xuICAgICAgc3RhdGUuaWRzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgO1xuICAgIHN0YXRlLmVudGl0aWVzW2tleV0gPSBlbnRpdHk7XG4gIH1cbiAgZnVuY3Rpb24gc2V0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgbmV3RW50aXRpZXMgPSBlbnN1cmVFbnRpdGllc0FycmF5KG5ld0VudGl0aWVzKTtcbiAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBuZXdFbnRpdGllcykge1xuICAgICAgc2V0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gc2V0QWxsTXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIHN0YXRlLmlkcyA9IFtdO1xuICAgIHN0YXRlLmVudGl0aWVzID0ge307XG4gICAgYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVPbmVNdXRhYmx5KGtleSwgc3RhdGUpIHtcbiAgICByZXR1cm4gcmVtb3ZlTWFueU11dGFibHkoW2tleV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVNYW55TXV0YWJseShrZXlzLCBzdGF0ZSkge1xuICAgIGxldCBkaWRNdXRhdGUgPSBmYWxzZTtcbiAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBzdGF0ZS5lbnRpdGllcykge1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNba2V5XTtcbiAgICAgICAgZGlkTXV0YXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZGlkTXV0YXRlKSB7XG4gICAgICBzdGF0ZS5pZHMgPSBzdGF0ZS5pZHMuZmlsdGVyKChpZCkgPT4gaWQgaW4gc3RhdGUuZW50aXRpZXMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZW1vdmVBbGxNdXRhYmx5KHN0YXRlKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZSwge1xuICAgICAgaWRzOiBbXSxcbiAgICAgIGVudGl0aWVzOiB7fVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIHRha2VOZXdLZXkoa2V5cywgdXBkYXRlLCBzdGF0ZSkge1xuICAgIGNvbnN0IG9yaWdpbmFsMyA9IHN0YXRlLmVudGl0aWVzW3VwZGF0ZS5pZF07XG4gICAgaWYgKG9yaWdpbmFsMyA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbDMsIHVwZGF0ZS5jaGFuZ2VzKTtcbiAgICBjb25zdCBuZXdLZXkgPSBzZWxlY3RJZFZhbHVlKHVwZGF0ZWQsIHNlbGVjdElkKTtcbiAgICBjb25zdCBoYXNOZXdLZXkgPSBuZXdLZXkgIT09IHVwZGF0ZS5pZDtcbiAgICBpZiAoaGFzTmV3S2V5KSB7XG4gICAgICBrZXlzW3VwZGF0ZS5pZF0gPSBuZXdLZXk7XG4gICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICB9XG4gICAgO1xuICAgIHN0YXRlLmVudGl0aWVzW25ld0tleV0gPSB1cGRhdGVkO1xuICAgIHJldHVybiBoYXNOZXdLZXk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlT25lTXV0YWJseSh1cGRhdGUsIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwZGF0ZU1hbnlNdXRhYmx5KFt1cGRhdGVdLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlTWFueU11dGFibHkodXBkYXRlcywgc3RhdGUpIHtcbiAgICBjb25zdCBuZXdLZXlzID0ge307XG4gICAgY29uc3QgdXBkYXRlc1BlckVudGl0eSA9IHt9O1xuICAgIHVwZGF0ZXMuZm9yRWFjaCgodXBkYXRlKSA9PiB7XG4gICAgICBpZiAodXBkYXRlLmlkIGluIHN0YXRlLmVudGl0aWVzKSB7XG4gICAgICAgIHVwZGF0ZXNQZXJFbnRpdHlbdXBkYXRlLmlkXSA9IHtcbiAgICAgICAgICBpZDogdXBkYXRlLmlkLFxuICAgICAgICAgIC8vIFNwcmVhZHMgaWdub3JlIGZhbHN5IHZhbHVlcywgc28gdGhpcyB3b3JrcyBldmVuIGlmIHRoZXJlIGlzbid0XG4gICAgICAgICAgLy8gYW4gZXhpc3RpbmcgdXBkYXRlIGFscmVhZHkgYXQgdGhpcyBrZXlcbiAgICAgICAgICBjaGFuZ2VzOiB7XG4gICAgICAgICAgICAuLi51cGRhdGVzUGVyRW50aXR5W3VwZGF0ZS5pZF0/LmNoYW5nZXMsXG4gICAgICAgICAgICAuLi51cGRhdGUuY2hhbmdlc1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB1cGRhdGVzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzUGVyRW50aXR5KTtcbiAgICBjb25zdCBkaWRNdXRhdGVFbnRpdGllcyA9IHVwZGF0ZXMubGVuZ3RoID4gMDtcbiAgICBpZiAoZGlkTXV0YXRlRW50aXRpZXMpIHtcbiAgICAgIGNvbnN0IGRpZE11dGF0ZUlkcyA9IHVwZGF0ZXMuZmlsdGVyKCh1cGRhdGUpID0+IHRha2VOZXdLZXkobmV3S2V5cywgdXBkYXRlLCBzdGF0ZSkpLmxlbmd0aCA+IDA7XG4gICAgICBpZiAoZGlkTXV0YXRlSWRzKSB7XG4gICAgICAgIHN0YXRlLmlkcyA9IE9iamVjdC52YWx1ZXMoc3RhdGUuZW50aXRpZXMpLm1hcCgoZSkgPT4gc2VsZWN0SWRWYWx1ZShlLCBzZWxlY3RJZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1cHNlcnRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdXBzZXJ0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiB1cHNlcnRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBjb25zdCBbYWRkZWQsIHVwZGF0ZWRdID0gc3BsaXRBZGRlZFVwZGF0ZWRFbnRpdGllcyhuZXdFbnRpdGllcywgc2VsZWN0SWQsIHN0YXRlKTtcbiAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XG4gICAgYWRkTWFueU11dGFibHkoYWRkZWQsIHN0YXRlKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlbW92ZUFsbDogY3JlYXRlU2luZ2xlQXJndW1lbnRTdGF0ZU9wZXJhdG9yKHJlbW92ZUFsbE11dGFibHkpLFxuICAgIGFkZE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcihhZGRPbmVNdXRhYmx5KSxcbiAgICBhZGRNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKGFkZE1hbnlNdXRhYmx5KSxcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxuICAgIHVwZGF0ZU9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cGRhdGVPbmVNdXRhYmx5KSxcbiAgICB1cGRhdGVNYW55OiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU1hbnlNdXRhYmx5KSxcbiAgICB1cHNlcnRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0T25lTXV0YWJseSksXG4gICAgdXBzZXJ0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRNYW55TXV0YWJseSksXG4gICAgcmVtb3ZlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHJlbW92ZU9uZU11dGFibHkpLFxuICAgIHJlbW92ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IocmVtb3ZlTWFueU11dGFibHkpXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9zb3J0ZWRfc3RhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gZmluZEluc2VydEluZGV4KHNvcnRlZEl0ZW1zLCBpdGVtLCBjb21wYXJpc29uRnVuY3Rpb24pIHtcbiAgbGV0IGxvd0luZGV4ID0gMDtcbiAgbGV0IGhpZ2hJbmRleCA9IHNvcnRlZEl0ZW1zLmxlbmd0aDtcbiAgd2hpbGUgKGxvd0luZGV4IDwgaGlnaEluZGV4KSB7XG4gICAgbGV0IG1pZGRsZUluZGV4ID0gbG93SW5kZXggKyBoaWdoSW5kZXggPj4+IDE7XG4gICAgY29uc3QgY3VycmVudEl0ZW0gPSBzb3J0ZWRJdGVtc1ttaWRkbGVJbmRleF07XG4gICAgY29uc3QgcmVzID0gY29tcGFyaXNvbkZ1bmN0aW9uKGl0ZW0sIGN1cnJlbnRJdGVtKTtcbiAgICBpZiAocmVzID49IDApIHtcbiAgICAgIGxvd0luZGV4ID0gbWlkZGxlSW5kZXggKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoSW5kZXggPSBtaWRkbGVJbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvd0luZGV4O1xufVxuZnVuY3Rpb24gaW5zZXJ0KHNvcnRlZEl0ZW1zLCBpdGVtLCBjb21wYXJpc29uRnVuY3Rpb24pIHtcbiAgY29uc3QgaW5zZXJ0QXRJbmRleCA9IGZpbmRJbnNlcnRJbmRleChzb3J0ZWRJdGVtcywgaXRlbSwgY29tcGFyaXNvbkZ1bmN0aW9uKTtcbiAgc29ydGVkSXRlbXMuc3BsaWNlKGluc2VydEF0SW5kZXgsIDAsIGl0ZW0pO1xuICByZXR1cm4gc29ydGVkSXRlbXM7XG59XG5mdW5jdGlvbiBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIGNvbXBhcmVyKSB7XG4gIGNvbnN0IHtcbiAgICByZW1vdmVPbmUsXG4gICAgcmVtb3ZlTWFueSxcbiAgICByZW1vdmVBbGxcbiAgfSA9IGNyZWF0ZVVuc29ydGVkU3RhdGVBZGFwdGVyKHNlbGVjdElkKTtcbiAgZnVuY3Rpb24gYWRkT25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIGFkZE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gYWRkTWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlLCBleGlzdGluZ0lkcykge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChleGlzdGluZ0lkcyA/PyBnZXRDdXJyZW50KHN0YXRlLmlkcykpO1xuICAgIGNvbnN0IG1vZGVscyA9IG5ld0VudGl0aWVzLmZpbHRlcigobW9kZWwpID0+ICFleGlzdGluZ0tleXMuaGFzKHNlbGVjdElkVmFsdWUobW9kZWwsIHNlbGVjdElkKSkpO1xuICAgIGlmIChtb2RlbHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKHN0YXRlLCBtb2RlbHMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRPbmVNdXRhYmx5KGVudGl0eSwgc3RhdGUpIHtcbiAgICByZXR1cm4gc2V0TWFueU11dGFibHkoW2VudGl0eV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiBzZXRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUpIHtcbiAgICBuZXdFbnRpdGllcyA9IGVuc3VyZUVudGl0aWVzQXJyYXkobmV3RW50aXRpZXMpO1xuICAgIGlmIChuZXdFbnRpdGllcy5sZW5ndGggIT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBuZXdFbnRpdGllcykge1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbc2VsZWN0SWQoaXRlbSldO1xuICAgICAgfVxuICAgICAgbWVyZ2VGdW5jdGlvbihzdGF0ZSwgbmV3RW50aXRpZXMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRBbGxNdXRhYmx5KG5ld0VudGl0aWVzLCBzdGF0ZSkge1xuICAgIG5ld0VudGl0aWVzID0gZW5zdXJlRW50aXRpZXNBcnJheShuZXdFbnRpdGllcyk7XG4gICAgc3RhdGUuZW50aXRpZXMgPSB7fTtcbiAgICBzdGF0ZS5pZHMgPSBbXTtcbiAgICBhZGRNYW55TXV0YWJseShuZXdFbnRpdGllcywgc3RhdGUsIFtdKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVPbmVNdXRhYmx5KHVwZGF0ZSwgc3RhdGUpIHtcbiAgICByZXR1cm4gdXBkYXRlTWFueU11dGFibHkoW3VwZGF0ZV0sIHN0YXRlKTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVzLCBzdGF0ZSkge1xuICAgIGxldCBhcHBsaWVkVXBkYXRlcyA9IGZhbHNlO1xuICAgIGxldCByZXBsYWNlZElkcyA9IGZhbHNlO1xuICAgIGZvciAobGV0IHVwZGF0ZSBvZiB1cGRhdGVzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBzdGF0ZS5lbnRpdGllc1t1cGRhdGUuaWRdO1xuICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhcHBsaWVkVXBkYXRlcyA9IHRydWU7XG4gICAgICBPYmplY3QuYXNzaWduKGVudGl0eSwgdXBkYXRlLmNoYW5nZXMpO1xuICAgICAgY29uc3QgbmV3SWQgPSBzZWxlY3RJZChlbnRpdHkpO1xuICAgICAgaWYgKHVwZGF0ZS5pZCAhPT0gbmV3SWQpIHtcbiAgICAgICAgcmVwbGFjZWRJZHMgPSB0cnVlO1xuICAgICAgICBkZWxldGUgc3RhdGUuZW50aXRpZXNbdXBkYXRlLmlkXTtcbiAgICAgICAgY29uc3Qgb2xkSW5kZXggPSBzdGF0ZS5pZHMuaW5kZXhPZih1cGRhdGUuaWQpO1xuICAgICAgICBzdGF0ZS5pZHNbb2xkSW5kZXhdID0gbmV3SWQ7XG4gICAgICAgIHN0YXRlLmVudGl0aWVzW25ld0lkXSA9IGVudGl0eTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFwcGxpZWRVcGRhdGVzKSB7XG4gICAgICBtZXJnZUZ1bmN0aW9uKHN0YXRlLCBbXSwgYXBwbGllZFVwZGF0ZXMsIHJlcGxhY2VkSWRzKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0T25lTXV0YWJseShlbnRpdHksIHN0YXRlKSB7XG4gICAgcmV0dXJuIHVwc2VydE1hbnlNdXRhYmx5KFtlbnRpdHldLCBzdGF0ZSk7XG4gIH1cbiAgZnVuY3Rpb24gdXBzZXJ0TWFueU11dGFibHkobmV3RW50aXRpZXMsIHN0YXRlKSB7XG4gICAgY29uc3QgW2FkZGVkLCB1cGRhdGVkLCBleGlzdGluZ0lkc0FycmF5XSA9IHNwbGl0QWRkZWRVcGRhdGVkRW50aXRpZXMobmV3RW50aXRpZXMsIHNlbGVjdElkLCBzdGF0ZSk7XG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoKSB7XG4gICAgICB1cGRhdGVNYW55TXV0YWJseSh1cGRhdGVkLCBzdGF0ZSk7XG4gICAgfVxuICAgIGlmIChhZGRlZC5sZW5ndGgpIHtcbiAgICAgIGFkZE1hbnlNdXRhYmx5KGFkZGVkLCBzdGF0ZSwgZXhpc3RpbmdJZHNBcnJheSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKGEsIGIpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gPT09IGJbaV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IG1lcmdlRnVuY3Rpb24gPSAoc3RhdGUsIGFkZGVkSXRlbXMsIGFwcGxpZWRVcGRhdGVzLCByZXBsYWNlZElkcykgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRFbnRpdGllcyA9IGdldEN1cnJlbnQoc3RhdGUuZW50aXRpZXMpO1xuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSBnZXRDdXJyZW50KHN0YXRlLmlkcyk7XG4gICAgY29uc3Qgc3RhdGVFbnRpdGllcyA9IHN0YXRlLmVudGl0aWVzO1xuICAgIGxldCBpZHMgPSBjdXJyZW50SWRzO1xuICAgIGlmIChyZXBsYWNlZElkcykge1xuICAgICAgaWRzID0gbmV3IFNldChjdXJyZW50SWRzKTtcbiAgICB9XG4gICAgbGV0IHNvcnRlZEVudGl0aWVzID0gW107XG4gICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IGN1cnJlbnRFbnRpdGllc1tpZF07XG4gICAgICBpZiAoZW50aXR5KSB7XG4gICAgICAgIHNvcnRlZEVudGl0aWVzLnB1c2goZW50aXR5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgd2FzUHJldmlvdXNseUVtcHR5ID0gc29ydGVkRW50aXRpZXMubGVuZ3RoID09PSAwO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhZGRlZEl0ZW1zKSB7XG4gICAgICBzdGF0ZUVudGl0aWVzW3NlbGVjdElkKGl0ZW0pXSA9IGl0ZW07XG4gICAgICBpZiAoIXdhc1ByZXZpb3VzbHlFbXB0eSkge1xuICAgICAgICBpbnNlcnQoc29ydGVkRW50aXRpZXMsIGl0ZW0sIGNvbXBhcmVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdhc1ByZXZpb3VzbHlFbXB0eSkge1xuICAgICAgc29ydGVkRW50aXRpZXMgPSBhZGRlZEl0ZW1zLnNsaWNlKCkuc29ydChjb21wYXJlcik7XG4gICAgfSBlbHNlIGlmIChhcHBsaWVkVXBkYXRlcykge1xuICAgICAgc29ydGVkRW50aXRpZXMuc29ydChjb21wYXJlcik7XG4gICAgfVxuICAgIGNvbnN0IG5ld1NvcnRlZElkcyA9IHNvcnRlZEVudGl0aWVzLm1hcChzZWxlY3RJZCk7XG4gICAgaWYgKCFhcmVBcnJheXNFcXVhbChjdXJyZW50SWRzLCBuZXdTb3J0ZWRJZHMpKSB7XG4gICAgICBzdGF0ZS5pZHMgPSBuZXdTb3J0ZWRJZHM7XG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIHJlbW92ZU9uZSxcbiAgICByZW1vdmVNYW55LFxuICAgIHJlbW92ZUFsbCxcbiAgICBhZGRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkT25lTXV0YWJseSksXG4gICAgdXBkYXRlT25lOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHVwZGF0ZU9uZU11dGFibHkpLFxuICAgIHVwc2VydE9uZTogY3JlYXRlU3RhdGVPcGVyYXRvcih1cHNlcnRPbmVNdXRhYmx5KSxcbiAgICBzZXRPbmU6IGNyZWF0ZVN0YXRlT3BlcmF0b3Ioc2V0T25lTXV0YWJseSksXG4gICAgc2V0TWFueTogY3JlYXRlU3RhdGVPcGVyYXRvcihzZXRNYW55TXV0YWJseSksXG4gICAgc2V0QWxsOiBjcmVhdGVTdGF0ZU9wZXJhdG9yKHNldEFsbE11dGFibHkpLFxuICAgIGFkZE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IoYWRkTWFueU11dGFibHkpLFxuICAgIHVwZGF0ZU1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBkYXRlTWFueU11dGFibHkpLFxuICAgIHVwc2VydE1hbnk6IGNyZWF0ZVN0YXRlT3BlcmF0b3IodXBzZXJ0TWFueU11dGFibHkpXG4gIH07XG59XG5cbi8vIHNyYy9lbnRpdGllcy9jcmVhdGVfYWRhcHRlci50c1xuZnVuY3Rpb24gY3JlYXRlRW50aXR5QWRhcHRlcihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHNlbGVjdElkLFxuICAgIHNvcnRDb21wYXJlclxuICB9ID0ge1xuICAgIHNvcnRDb21wYXJlcjogZmFsc2UsXG4gICAgc2VsZWN0SWQ6IChpbnN0YW5jZSkgPT4gaW5zdGFuY2UuaWQsXG4gICAgLi4ub3B0aW9uc1xuICB9O1xuICBjb25zdCBzdGF0ZUFkYXB0ZXIgPSBzb3J0Q29tcGFyZXIgPyBjcmVhdGVTb3J0ZWRTdGF0ZUFkYXB0ZXIoc2VsZWN0SWQsIHNvcnRDb21wYXJlcikgOiBjcmVhdGVVbnNvcnRlZFN0YXRlQWRhcHRlcihzZWxlY3RJZCk7XG4gIGNvbnN0IHN0YXRlRmFjdG9yeSA9IGNyZWF0ZUluaXRpYWxTdGF0ZUZhY3Rvcnkoc3RhdGVBZGFwdGVyKTtcbiAgY29uc3Qgc2VsZWN0b3JzRmFjdG9yeSA9IGNyZWF0ZVNlbGVjdG9yc0ZhY3RvcnkoKTtcbiAgcmV0dXJuIHtcbiAgICBzZWxlY3RJZCxcbiAgICBzb3J0Q29tcGFyZXIsXG4gICAgLi4uc3RhdGVGYWN0b3J5LFxuICAgIC4uLnNlbGVjdG9yc0ZhY3RvcnksXG4gICAgLi4uc3RhdGVBZGFwdGVyXG4gIH07XG59XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcbmltcG9ydCB7IGlzQWN0aW9uIGFzIGlzQWN0aW9uMyB9IGZyb20gXCJyZWR1eFwiO1xuXG4vLyBzcmMvbGlzdGVuZXJNaWRkbGV3YXJlL2V4Y2VwdGlvbnMudHNcbnZhciB0YXNrID0gXCJ0YXNrXCI7XG52YXIgbGlzdGVuZXIgPSBcImxpc3RlbmVyXCI7XG52YXIgY29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcbnZhciBjYW5jZWxsZWQgPSBcImNhbmNlbGxlZFwiO1xudmFyIHRhc2tDYW5jZWxsZWQgPSBgdGFzay0ke2NhbmNlbGxlZH1gO1xudmFyIHRhc2tDb21wbGV0ZWQgPSBgdGFzay0ke2NvbXBsZXRlZH1gO1xudmFyIGxpc3RlbmVyQ2FuY2VsbGVkID0gYCR7bGlzdGVuZXJ9LSR7Y2FuY2VsbGVkfWA7XG52YXIgbGlzdGVuZXJDb21wbGV0ZWQgPSBgJHtsaXN0ZW5lcn0tJHtjb21wbGV0ZWR9YDtcbnZhciBUYXNrQWJvcnRFcnJvciA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoY29kZSkge1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5tZXNzYWdlID0gYCR7dGFza30gJHtjYW5jZWxsZWR9IChyZWFzb246ICR7Y29kZX0pYDtcbiAgfVxuICBuYW1lID0gXCJUYXNrQWJvcnRFcnJvclwiO1xuICBtZXNzYWdlO1xufTtcblxuLy8gc3JjL2xpc3RlbmVyTWlkZGxld2FyZS91dGlscy50c1xudmFyIGFzc2VydEZ1bmN0aW9uID0gKGZ1bmMsIGV4cGVjdGVkKSA9PiB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDMyKSA6IGAke2V4cGVjdGVkfSBpcyBub3QgYSBmdW5jdGlvbmApO1xuICB9XG59O1xudmFyIG5vb3AyID0gKCkgPT4ge1xufTtcbnZhciBjYXRjaFJlamVjdGlvbiA9IChwcm9taXNlLCBvbkVycm9yID0gbm9vcDIpID0+IHtcbiAgcHJvbWlzZS5jYXRjaChvbkVycm9yKTtcbiAgcmV0dXJuIHByb21pc2U7XG59O1xudmFyIGFkZEFib3J0U2lnbmFsTGlzdGVuZXIgPSAoYWJvcnRTaWduYWwsIGNhbGxiYWNrKSA9PiB7XG4gIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBjYWxsYmFjaywge1xuICAgIG9uY2U6IHRydWVcbiAgfSk7XG4gIHJldHVybiAoKSA9PiBhYm9ydFNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgY2FsbGJhY2spO1xufTtcbnZhciBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uID0gKGFib3J0Q29udHJvbGxlciwgcmVhc29uKSA9PiB7XG4gIGNvbnN0IHNpZ25hbCA9IGFib3J0Q29udHJvbGxlci5zaWduYWw7XG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIShcInJlYXNvblwiIGluIHNpZ25hbCkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2lnbmFsLCBcInJlYXNvblwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IHJlYXNvbixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgO1xuICBhYm9ydENvbnRyb2xsZXIuYWJvcnQocmVhc29uKTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvdGFzay50c1xudmFyIHZhbGlkYXRlQWN0aXZlID0gKHNpZ25hbCkgPT4ge1xuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBjb25zdCB7XG4gICAgICByZWFzb25cbiAgICB9ID0gc2lnbmFsO1xuICAgIHRocm93IG5ldyBUYXNrQWJvcnRFcnJvcihyZWFzb24pO1xuICB9XG59O1xuZnVuY3Rpb24gcmFjZVdpdGhTaWduYWwoc2lnbmFsLCBwcm9taXNlKSB7XG4gIGxldCBjbGVhbnVwID0gbm9vcDI7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgbm90aWZ5UmVqZWN0aW9uID0gKCkgPT4gcmVqZWN0KG5ldyBUYXNrQWJvcnRFcnJvcihzaWduYWwucmVhc29uKSk7XG4gICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICBub3RpZnlSZWplY3Rpb24oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2xlYW51cCA9IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIoc2lnbmFsLCBub3RpZnlSZWplY3Rpb24pO1xuICAgIHByb21pc2UuZmluYWxseSgoKSA9PiBjbGVhbnVwKCkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgY2xlYW51cCA9IG5vb3AyO1xuICB9KTtcbn1cbnZhciBydW5UYXNrID0gYXN5bmMgKHRhc2syLCBjbGVhblVwKSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0YXNrMigpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwib2tcIixcbiAgICAgIHZhbHVlXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBlcnJvciBpbnN0YW5jZW9mIFRhc2tBYm9ydEVycm9yID8gXCJjYW5jZWxsZWRcIiA6IFwicmVqZWN0ZWRcIixcbiAgICAgIGVycm9yXG4gICAgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhblVwPy4oKTtcbiAgfVxufTtcbnZhciBjcmVhdGVQYXVzZSA9IChzaWduYWwpID0+IHtcbiAgcmV0dXJuIChwcm9taXNlKSA9PiB7XG4gICAgcmV0dXJuIGNhdGNoUmVqZWN0aW9uKHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgcHJvbWlzZSkudGhlbigob3V0cHV0KSA9PiB7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9KSk7XG4gIH07XG59O1xudmFyIGNyZWF0ZURlbGF5ID0gKHNpZ25hbCkgPT4ge1xuICBjb25zdCBwYXVzZSA9IGNyZWF0ZVBhdXNlKHNpZ25hbCk7XG4gIHJldHVybiAodGltZW91dE1zKSA9PiB7XG4gICAgcmV0dXJuIHBhdXNlKG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWVvdXRNcykpKTtcbiAgfTtcbn07XG5cbi8vIHNyYy9saXN0ZW5lck1pZGRsZXdhcmUvaW5kZXgudHNcbnZhciB7XG4gIGFzc2lnblxufSA9IE9iamVjdDtcbnZhciBJTlRFUk5BTF9OSUxfVE9LRU4gPSB7fTtcbnZhciBhbG0gPSBcImxpc3RlbmVyTWlkZGxld2FyZVwiO1xudmFyIGNyZWF0ZUZvcmsgPSAocGFyZW50QWJvcnRTaWduYWwsIHBhcmVudEJsb2NraW5nUHJvbWlzZXMpID0+IHtcbiAgY29uc3QgbGlua0NvbnRyb2xsZXJzID0gKGNvbnRyb2xsZXIpID0+IGFkZEFib3J0U2lnbmFsTGlzdGVuZXIocGFyZW50QWJvcnRTaWduYWwsICgpID0+IGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgcGFyZW50QWJvcnRTaWduYWwucmVhc29uKSk7XG4gIHJldHVybiAodGFza0V4ZWN1dG9yLCBvcHRzKSA9PiB7XG4gICAgYXNzZXJ0RnVuY3Rpb24odGFza0V4ZWN1dG9yLCBcInRhc2tFeGVjdXRvclwiKTtcbiAgICBjb25zdCBjaGlsZEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsaW5rQ29udHJvbGxlcnMoY2hpbGRBYm9ydENvbnRyb2xsZXIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJ1blRhc2soYXN5bmMgKCkgPT4ge1xuICAgICAgdmFsaWRhdGVBY3RpdmUocGFyZW50QWJvcnRTaWduYWwpO1xuICAgICAgdmFsaWRhdGVBY3RpdmUoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIGNvbnN0IHJlc3VsdDIgPSBhd2FpdCB0YXNrRXhlY3V0b3Ioe1xuICAgICAgICBwYXVzZTogY3JlYXRlUGF1c2UoY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKSxcbiAgICAgICAgZGVsYXk6IGNyZWF0ZURlbGF5KGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCksXG4gICAgICAgIHNpZ25hbDogY2hpbGRBYm9ydENvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICAgIHZhbGlkYXRlQWN0aXZlKGNoaWxkQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICByZXR1cm4gcmVzdWx0MjtcbiAgICB9LCAoKSA9PiBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ29tcGxldGVkKSk7XG4gICAgaWYgKG9wdHM/LmF1dG9Kb2luKSB7XG4gICAgICBwYXJlbnRCbG9ja2luZ1Byb21pc2VzLnB1c2gocmVzdWx0LmNhdGNoKG5vb3AyKSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICByZXN1bHQ6IGNyZWF0ZVBhdXNlKHBhcmVudEFib3J0U2lnbmFsKShyZXN1bHQpLFxuICAgICAgY2FuY2VsKCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNoaWxkQWJvcnRDb250cm9sbGVyLCB0YXNrQ2FuY2VsbGVkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xufTtcbnZhciBjcmVhdGVUYWtlUGF0dGVybiA9IChzdGFydExpc3RlbmluZywgc2lnbmFsKSA9PiB7XG4gIGNvbnN0IHRha2UgPSBhc3luYyAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiB7XG4gICAgdmFsaWRhdGVBY3RpdmUoc2lnbmFsKTtcbiAgICBsZXQgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBjb25zdCB0dXBsZVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgc3RvcExpc3RlbmluZyA9IHN0YXJ0TGlzdGVuaW5nKHtcbiAgICAgICAgcHJlZGljYXRlLFxuICAgICAgICBlZmZlY3Q6IChhY3Rpb24sIGxpc3RlbmVyQXBpKSA9PiB7XG4gICAgICAgICAgbGlzdGVuZXJBcGkudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXNvbHZlKFthY3Rpb24sIGxpc3RlbmVyQXBpLmdldFN0YXRlKCksIGxpc3RlbmVyQXBpLmdldE9yaWdpbmFsU3RhdGUoKV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBzdG9wTGlzdGVuaW5nKCk7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFt0dXBsZVByb21pc2VdO1xuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZW91dCwgbnVsbCkpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJhY2VXaXRoU2lnbmFsKHNpZ25hbCwgUHJvbWlzZS5yYWNlKHByb21pc2VzKSk7XG4gICAgICB2YWxpZGF0ZUFjdGl2ZShzaWduYWwpO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAocHJlZGljYXRlLCB0aW1lb3V0KSA9PiBjYXRjaFJlamVjdGlvbih0YWtlKHByZWRpY2F0ZSwgdGltZW91dCkpO1xufTtcbnZhciBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tID0gKG9wdGlvbnMpID0+IHtcbiAgbGV0IHtcbiAgICB0eXBlLFxuICAgIGFjdGlvbkNyZWF0b3IsXG4gICAgbWF0Y2hlcixcbiAgICBwcmVkaWNhdGUsXG4gICAgZWZmZWN0XG4gIH0gPSBvcHRpb25zO1xuICBpZiAodHlwZSkge1xuICAgIHByZWRpY2F0ZSA9IGNyZWF0ZUFjdGlvbih0eXBlKS5tYXRjaDtcbiAgfSBlbHNlIGlmIChhY3Rpb25DcmVhdG9yKSB7XG4gICAgdHlwZSA9IGFjdGlvbkNyZWF0b3IudHlwZTtcbiAgICBwcmVkaWNhdGUgPSBhY3Rpb25DcmVhdG9yLm1hdGNoO1xuICB9IGVsc2UgaWYgKG1hdGNoZXIpIHtcbiAgICBwcmVkaWNhdGUgPSBtYXRjaGVyO1xuICB9IGVsc2UgaWYgKHByZWRpY2F0ZSkge1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDIxKSA6IFwiQ3JlYXRpbmcgb3IgcmVtb3ZpbmcgYSBsaXN0ZW5lciByZXF1aXJlcyBvbmUgb2YgdGhlIGtub3duIGZpZWxkcyBmb3IgbWF0Y2hpbmcgYW4gYWN0aW9uXCIpO1xuICB9XG4gIGFzc2VydEZ1bmN0aW9uKGVmZmVjdCwgXCJvcHRpb25zLmxpc3RlbmVyXCIpO1xuICByZXR1cm4ge1xuICAgIHByZWRpY2F0ZSxcbiAgICB0eXBlLFxuICAgIGVmZmVjdFxuICB9O1xufTtcbnZhciBjcmVhdGVMaXN0ZW5lckVudHJ5ID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigob3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBwcmVkaWNhdGUsXG4gICAgZWZmZWN0XG4gIH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpO1xuICBjb25zdCBpZCA9IG5hbm9pZCgpO1xuICBjb25zdCBlbnRyeSA9IHtcbiAgICBpZCxcbiAgICBlZmZlY3QsXG4gICAgdHlwZSxcbiAgICBwcmVkaWNhdGUsXG4gICAgcGVuZGluZzogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSxcbiAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIiA/IGZvcm1hdFByb2RFcnJvck1lc3NhZ2UoMjIpIDogXCJVbnN1YnNjcmliZSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gZW50cnk7XG59LCB7XG4gIHdpdGhUeXBlczogKCkgPT4gY3JlYXRlTGlzdGVuZXJFbnRyeVxufSk7XG52YXIgY2FuY2VsQWN0aXZlTGlzdGVuZXJzID0gKGVudHJ5KSA9PiB7XG4gIGVudHJ5LnBlbmRpbmcuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgIGFib3J0Q29udHJvbGxlcldpdGhSZWFzb24oY29udHJvbGxlciwgbGlzdGVuZXJDYW5jZWxsZWQpO1xuICB9KTtcbn07XG52YXIgY3JlYXRlQ2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSAobGlzdGVuZXJNYXApID0+IHtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lck1hcC5mb3JFYWNoKGNhbmNlbEFjdGl2ZUxpc3RlbmVycyk7XG4gICAgbGlzdGVuZXJNYXAuY2xlYXIoKTtcbiAgfTtcbn07XG52YXIgc2FmZWx5Tm90aWZ5RXJyb3IgPSAoZXJyb3JIYW5kbGVyLCBlcnJvclRvTm90aWZ5LCBlcnJvckluZm8pID0+IHtcbiAgdHJ5IHtcbiAgICBlcnJvckhhbmRsZXIoZXJyb3JUb05vdGlmeSwgZXJyb3JJbmZvKTtcbiAgfSBjYXRjaCAoZXJyb3JIYW5kbGVyRXJyb3IpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm93IGVycm9ySGFuZGxlckVycm9yO1xuICAgIH0sIDApO1xuICB9XG59O1xudmFyIGFkZExpc3RlbmVyID0gLyogQF9fUFVSRV9fICovIGFzc2lnbigvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vYWRkYCksIHtcbiAgd2l0aFR5cGVzOiAoKSA9PiBhZGRMaXN0ZW5lclxufSk7XG52YXIgY2xlYXJBbGxMaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gY3JlYXRlQWN0aW9uKGAke2FsbX0vcmVtb3ZlQWxsYCk7XG52YXIgcmVtb3ZlTGlzdGVuZXIgPSAvKiBAX19QVVJFX18gKi8gYXNzaWduKC8qIEBfX1BVUkVfXyAqLyBjcmVhdGVBY3Rpb24oYCR7YWxtfS9yZW1vdmVgKSwge1xuICB3aXRoVHlwZXM6ICgpID0+IHJlbW92ZUxpc3RlbmVyXG59KTtcbnZhciBkZWZhdWx0RXJyb3JIYW5kbGVyID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc29sZS5lcnJvcihgJHthbG19L2Vycm9yYCwgLi4uYXJncyk7XG59O1xudmFyIGNyZWF0ZUxpc3RlbmVyTWlkZGxld2FyZSA9IChtaWRkbGV3YXJlT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGxpc3RlbmVyTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qge1xuICAgIGV4dHJhLFxuICAgIG9uRXJyb3IgPSBkZWZhdWx0RXJyb3JIYW5kbGVyXG4gIH0gPSBtaWRkbGV3YXJlT3B0aW9ucztcbiAgYXNzZXJ0RnVuY3Rpb24ob25FcnJvciwgXCJvbkVycm9yXCIpO1xuICBjb25zdCBpbnNlcnRFbnRyeSA9IChlbnRyeSkgPT4ge1xuICAgIGVudHJ5LnVuc3Vic2NyaWJlID0gKCkgPT4gbGlzdGVuZXJNYXAuZGVsZXRlKGVudHJ5LmlkKTtcbiAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcbiAgICByZXR1cm4gKGNhbmNlbE9wdGlvbnMpID0+IHtcbiAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoY2FuY2VsT3B0aW9ucz8uY2FuY2VsQWN0aXZlKSB7XG4gICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVycyhlbnRyeSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgY29uc3Qgc3RhcnRMaXN0ZW5pbmcgPSAob3B0aW9ucykgPT4ge1xuICAgIGxldCBlbnRyeSA9IGZpbmQoQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSksIChleGlzdGluZ0VudHJ5KSA9PiBleGlzdGluZ0VudHJ5LmVmZmVjdCA9PT0gb3B0aW9ucy5lZmZlY3QpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIGVudHJ5ID0gY3JlYXRlTGlzdGVuZXJFbnRyeShvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc2VydEVudHJ5KGVudHJ5KTtcbiAgfTtcbiAgYXNzaWduKHN0YXJ0TGlzdGVuaW5nLCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBzdGFydExpc3RlbmluZ1xuICB9KTtcbiAgY29uc3Qgc3RvcExpc3RlbmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdHlwZSxcbiAgICAgIGVmZmVjdCxcbiAgICAgIHByZWRpY2F0ZVxuICAgIH0gPSBnZXRMaXN0ZW5lckVudHJ5UHJvcHNGcm9tKG9wdGlvbnMpO1xuICAgIGNvbnN0IGVudHJ5ID0gZmluZChBcnJheS5mcm9tKGxpc3RlbmVyTWFwLnZhbHVlcygpKSwgKGVudHJ5MikgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hQcmVkaWNhdGVPclR5cGUgPSB0eXBlb2YgdHlwZSA9PT0gXCJzdHJpbmdcIiA/IGVudHJ5Mi50eXBlID09PSB0eXBlIDogZW50cnkyLnByZWRpY2F0ZSA9PT0gcHJlZGljYXRlO1xuICAgICAgcmV0dXJuIG1hdGNoUHJlZGljYXRlT3JUeXBlICYmIGVudHJ5Mi5lZmZlY3QgPT09IGVmZmVjdDtcbiAgICB9KTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAob3B0aW9ucy5jYW5jZWxBY3RpdmUpIHtcbiAgICAgICAgY2FuY2VsQWN0aXZlTGlzdGVuZXJzKGVudHJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICEhZW50cnk7XG4gIH07XG4gIGFzc2lnbihzdG9wTGlzdGVuaW5nLCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBzdG9wTGlzdGVuaW5nXG4gIH0pO1xuICBjb25zdCBub3RpZnlMaXN0ZW5lciA9IGFzeW5jIChlbnRyeSwgYWN0aW9uLCBhcGksIGdldE9yaWdpbmFsU3RhdGUpID0+IHtcbiAgICBjb25zdCBpbnRlcm5hbFRhc2tDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRha2UgPSBjcmVhdGVUYWtlUGF0dGVybihzdGFydExpc3RlbmluZywgaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpO1xuICAgIGNvbnN0IGF1dG9Kb2luUHJvbWlzZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgZW50cnkucGVuZGluZy5hZGQoaW50ZXJuYWxUYXNrQ29udHJvbGxlcik7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoZW50cnkuZWZmZWN0KFxuICAgICAgICBhY3Rpb24sXG4gICAgICAgIC8vIFVzZSBhc3NpZ24oKSByYXRoZXIgdGhhbiAuLi4gdG8gYXZvaWQgZXh0cmEgaGVscGVyIGZ1bmN0aW9ucyBhZGRlZCB0byBidW5kbGVcbiAgICAgICAgYXNzaWduKHt9LCBhcGksIHtcbiAgICAgICAgICBnZXRPcmlnaW5hbFN0YXRlLFxuICAgICAgICAgIGNvbmRpdGlvbjogKHByZWRpY2F0ZSwgdGltZW91dCkgPT4gdGFrZShwcmVkaWNhdGUsIHRpbWVvdXQpLnRoZW4oQm9vbGVhbiksXG4gICAgICAgICAgdGFrZSxcbiAgICAgICAgICBkZWxheTogY3JlYXRlRGVsYXkoaW50ZXJuYWxUYXNrQ29udHJvbGxlci5zaWduYWwpLFxuICAgICAgICAgIHBhdXNlOiBjcmVhdGVQYXVzZShpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCksXG4gICAgICAgICAgZXh0cmEsXG4gICAgICAgICAgc2lnbmFsOiBpbnRlcm5hbFRhc2tDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICBmb3JrOiBjcmVhdGVGb3JrKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsLCBhdXRvSm9pblByb21pc2VzKSxcbiAgICAgICAgICB1bnN1YnNjcmliZTogZW50cnkudW5zdWJzY3JpYmUsXG4gICAgICAgICAgc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgICAgICBsaXN0ZW5lck1hcC5zZXQoZW50cnkuaWQsIGVudHJ5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNhbmNlbEFjdGl2ZUxpc3RlbmVyczogKCkgPT4ge1xuICAgICAgICAgICAgZW50cnkucGVuZGluZy5mb3JFYWNoKChjb250cm9sbGVyLCBfLCBzZXQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIgIT09IGludGVybmFsVGFza0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGNvbnRyb2xsZXIsIGxpc3RlbmVyQ2FuY2VsbGVkKTtcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyV2l0aFJlYXNvbihpbnRlcm5hbFRhc2tDb250cm9sbGVyLCBsaXN0ZW5lckNhbmNlbGxlZCk7XG4gICAgICAgICAgICBlbnRyeS5wZW5kaW5nLmRlbGV0ZShpbnRlcm5hbFRhc2tDb250cm9sbGVyKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRocm93SWZDYW5jZWxsZWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHZhbGlkYXRlQWN0aXZlKGludGVybmFsVGFza0NvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApKTtcbiAgICB9IGNhdGNoIChsaXN0ZW5lckVycm9yKSB7XG4gICAgICBpZiAoIShsaXN0ZW5lckVycm9yIGluc3RhbmNlb2YgVGFza0Fib3J0RXJyb3IpKSB7XG4gICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIGxpc3RlbmVyRXJyb3IsIHtcbiAgICAgICAgICByYWlzZWRCeTogXCJlZmZlY3RcIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYXV0b0pvaW5Qcm9taXNlcyk7XG4gICAgICBhYm9ydENvbnRyb2xsZXJXaXRoUmVhc29uKGludGVybmFsVGFza0NvbnRyb2xsZXIsIGxpc3RlbmVyQ29tcGxldGVkKTtcbiAgICAgIGVudHJ5LnBlbmRpbmcuZGVsZXRlKGludGVybmFsVGFza0NvbnRyb2xsZXIpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUgPSBjcmVhdGVDbGVhckxpc3RlbmVyTWlkZGxld2FyZShsaXN0ZW5lck1hcCk7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSAoYXBpKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgIGlmICghaXNBY3Rpb24zKGFjdGlvbikpIHtcbiAgICAgIHJldHVybiBuZXh0KGFjdGlvbik7XG4gICAgfVxuICAgIGlmIChhZGRMaXN0ZW5lci5tYXRjaChhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gc3RhcnRMaXN0ZW5pbmcoYWN0aW9uLnBheWxvYWQpO1xuICAgIH1cbiAgICBpZiAoY2xlYXJBbGxMaXN0ZW5lcnMubWF0Y2goYWN0aW9uKSkge1xuICAgICAgY2xlYXJMaXN0ZW5lck1pZGRsZXdhcmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlbW92ZUxpc3RlbmVyLm1hdGNoKGFjdGlvbikpIHtcbiAgICAgIHJldHVybiBzdG9wTGlzdGVuaW5nKGFjdGlvbi5wYXlsb2FkKTtcbiAgICB9XG4gICAgbGV0IG9yaWdpbmFsU3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBnZXRPcmlnaW5hbFN0YXRlID0gKCkgPT4ge1xuICAgICAgaWYgKG9yaWdpbmFsU3RhdGUgPT09IElOVEVSTkFMX05JTF9UT0tFTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyMykgOiBgJHthbG19OiBnZXRPcmlnaW5hbFN0YXRlIGNhbiBvbmx5IGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luYWxTdGF0ZTtcbiAgICB9O1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IG5leHQoYWN0aW9uKTtcbiAgICAgIGlmIChsaXN0ZW5lck1hcC5zaXplID4gMCkge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBhcGkuZ2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJFbnRyaWVzID0gQXJyYXkuZnJvbShsaXN0ZW5lck1hcC52YWx1ZXMoKSk7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgbGlzdGVuZXJFbnRyaWVzKSB7XG4gICAgICAgICAgbGV0IHJ1bkxpc3RlbmVyID0gZmFsc2U7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJ1bkxpc3RlbmVyID0gZW50cnkucHJlZGljYXRlKGFjdGlvbiwgY3VycmVudFN0YXRlLCBvcmlnaW5hbFN0YXRlKTtcbiAgICAgICAgICB9IGNhdGNoIChwcmVkaWNhdGVFcnJvcikge1xuICAgICAgICAgICAgcnVuTGlzdGVuZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHNhZmVseU5vdGlmeUVycm9yKG9uRXJyb3IsIHByZWRpY2F0ZUVycm9yLCB7XG4gICAgICAgICAgICAgIHJhaXNlZEJ5OiBcInByZWRpY2F0ZVwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFydW5MaXN0ZW5lcikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vdGlmeUxpc3RlbmVyKGVudHJ5LCBhY3Rpb24sIGFwaSwgZ2V0T3JpZ2luYWxTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgb3JpZ2luYWxTdGF0ZSA9IElOVEVSTkFMX05JTF9UT0tFTjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBtaWRkbGV3YXJlLFxuICAgIHN0YXJ0TGlzdGVuaW5nLFxuICAgIHN0b3BMaXN0ZW5pbmcsXG4gICAgY2xlYXJMaXN0ZW5lcnM6IGNsZWFyTGlzdGVuZXJNaWRkbGV3YXJlXG4gIH07XG59O1xuXG4vLyBzcmMvZHluYW1pY01pZGRsZXdhcmUvaW5kZXgudHNcbmltcG9ydCB7IGNvbXBvc2UgYXMgY29tcG9zZTMgfSBmcm9tIFwicmVkdXhcIjtcbnZhciBjcmVhdGVNaWRkbGV3YXJlRW50cnkgPSAobWlkZGxld2FyZSkgPT4gKHtcbiAgaWQ6IG5hbm9pZCgpLFxuICBtaWRkbGV3YXJlLFxuICBhcHBsaWVkOiAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpXG59KTtcbnZhciBtYXRjaEluc3RhbmNlID0gKGluc3RhbmNlSWQpID0+IChhY3Rpb24pID0+IGFjdGlvbj8ubWV0YT8uaW5zdGFuY2VJZCA9PT0gaW5zdGFuY2VJZDtcbnZhciBjcmVhdGVEeW5hbWljTWlkZGxld2FyZSA9ICgpID0+IHtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IG5hbm9pZCgpO1xuICBjb25zdCBtaWRkbGV3YXJlTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgY29uc3Qgd2l0aE1pZGRsZXdhcmUgPSBPYmplY3QuYXNzaWduKGNyZWF0ZUFjdGlvbihcImR5bmFtaWNNaWRkbGV3YXJlL2FkZFwiLCAoLi4ubWlkZGxld2FyZXMpID0+ICh7XG4gICAgcGF5bG9hZDogbWlkZGxld2FyZXMsXG4gICAgbWV0YToge1xuICAgICAgaW5zdGFuY2VJZFxuICAgIH1cbiAgfSkpLCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiB3aXRoTWlkZGxld2FyZVxuICB9KTtcbiAgY29uc3QgYWRkTWlkZGxld2FyZSA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gYWRkTWlkZGxld2FyZTIoLi4ubWlkZGxld2FyZXMpIHtcbiAgICBtaWRkbGV3YXJlcy5mb3JFYWNoKChtaWRkbGV3YXJlMikgPT4ge1xuICAgICAgbGV0IGVudHJ5ID0gZmluZChBcnJheS5mcm9tKG1pZGRsZXdhcmVNYXAudmFsdWVzKCkpLCAoZW50cnkyKSA9PiBlbnRyeTIubWlkZGxld2FyZSA9PT0gbWlkZGxld2FyZTIpO1xuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICBlbnRyeSA9IGNyZWF0ZU1pZGRsZXdhcmVFbnRyeShtaWRkbGV3YXJlMik7XG4gICAgICB9XG4gICAgICBtaWRkbGV3YXJlTWFwLnNldChlbnRyeS5pZCwgZW50cnkpO1xuICAgIH0pO1xuICB9LCB7XG4gICAgd2l0aFR5cGVzOiAoKSA9PiBhZGRNaWRkbGV3YXJlXG4gIH0pO1xuICBjb25zdCBnZXRGaW5hbE1pZGRsZXdhcmUgPSAoYXBpKSA9PiB7XG4gICAgY29uc3QgYXBwbGllZE1pZGRsZXdhcmUgPSBBcnJheS5mcm9tKG1pZGRsZXdhcmVNYXAudmFsdWVzKCkpLm1hcCgoZW50cnkpID0+IGVtcGxhY2UoZW50cnkuYXBwbGllZCwgYXBpLCB7XG4gICAgICBpbnNlcnQ6ICgpID0+IGVudHJ5Lm1pZGRsZXdhcmUoYXBpKVxuICAgIH0pKTtcbiAgICByZXR1cm4gY29tcG9zZTMoLi4uYXBwbGllZE1pZGRsZXdhcmUpO1xuICB9O1xuICBjb25zdCBpc1dpdGhNaWRkbGV3YXJlID0gaXNBbGxPZih3aXRoTWlkZGxld2FyZSwgbWF0Y2hJbnN0YW5jZShpbnN0YW5jZUlkKSk7XG4gIGNvbnN0IG1pZGRsZXdhcmUgPSAoYXBpKSA9PiAobmV4dCkgPT4gKGFjdGlvbikgPT4ge1xuICAgIGlmIChpc1dpdGhNaWRkbGV3YXJlKGFjdGlvbikpIHtcbiAgICAgIGFkZE1pZGRsZXdhcmUoLi4uYWN0aW9uLnBheWxvYWQpO1xuICAgICAgcmV0dXJuIGFwaS5kaXNwYXRjaDtcbiAgICB9XG4gICAgcmV0dXJuIGdldEZpbmFsTWlkZGxld2FyZShhcGkpKG5leHQpKGFjdGlvbik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbWlkZGxld2FyZSxcbiAgICBhZGRNaWRkbGV3YXJlLFxuICAgIHdpdGhNaWRkbGV3YXJlLFxuICAgIGluc3RhbmNlSWRcbiAgfTtcbn07XG5cbi8vIHNyYy9jb21iaW5lU2xpY2VzLnRzXG5pbXBvcnQgeyBjb21iaW5lUmVkdWNlcnMgYXMgY29tYmluZVJlZHVjZXJzMiB9IGZyb20gXCJyZWR1eFwiO1xudmFyIGlzU2xpY2VMaWtlID0gKG1heWJlU2xpY2VMaWtlKSA9PiBcInJlZHVjZXJQYXRoXCIgaW4gbWF5YmVTbGljZUxpa2UgJiYgdHlwZW9mIG1heWJlU2xpY2VMaWtlLnJlZHVjZXJQYXRoID09PSBcInN0cmluZ1wiO1xudmFyIGdldFJlZHVjZXJzID0gKHNsaWNlcykgPT4gc2xpY2VzLmZsYXRNYXAoKHNsaWNlT3JNYXApID0+IGlzU2xpY2VMaWtlKHNsaWNlT3JNYXApID8gW1tzbGljZU9yTWFwLnJlZHVjZXJQYXRoLCBzbGljZU9yTWFwLnJlZHVjZXJdXSA6IE9iamVjdC5lbnRyaWVzKHNsaWNlT3JNYXApKTtcbnZhciBPUklHSU5BTF9TVEFURSA9IFN5bWJvbC5mb3IoXCJydGstc3RhdGUtcHJveHktb3JpZ2luYWxcIik7XG52YXIgaXNTdGF0ZVByb3h5ID0gKHZhbHVlKSA9PiAhIXZhbHVlICYmICEhdmFsdWVbT1JJR0lOQUxfU1RBVEVdO1xudmFyIHN0YXRlUHJveHlNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBjcmVhdGVTdGF0ZVByb3h5ID0gKHN0YXRlLCByZWR1Y2VyTWFwKSA9PiBlbXBsYWNlKHN0YXRlUHJveHlNYXAsIHN0YXRlLCB7XG4gIGluc2VydDogKCkgPT4gbmV3IFByb3h5KHN0YXRlLCB7XG4gICAgZ2V0OiAodGFyZ2V0LCBwcm9wLCByZWNlaXZlcikgPT4ge1xuICAgICAgaWYgKHByb3AgPT09IE9SSUdJTkFMX1NUQVRFKSByZXR1cm4gdGFyZ2V0O1xuICAgICAgY29uc3QgcmVzdWx0ID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlcik7XG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb25zdCByZWR1Y2VyID0gcmVkdWNlck1hcFtwcm9wLnRvU3RyaW5nKCldO1xuICAgICAgICBpZiAocmVkdWNlcikge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZXJSZXN1bHQgPSByZWR1Y2VyKHZvaWQgMCwge1xuICAgICAgICAgICAgdHlwZTogbmFub2lkKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlZHVjZXJSZXN1bHQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgPyBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKDI0KSA6IGBUaGUgc2xpY2UgcmVkdWNlciBmb3Iga2V5IFwiJHtwcm9wLnRvU3RyaW5nKCl9XCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gY2FsbGVkIGZvciBzZWxlY3RvcigpLiBJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3IgdGhpcyByZWR1Y2VyLCB5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVkdWNlclJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pXG59KTtcbnZhciBvcmlnaW5hbCA9IChzdGF0ZSkgPT4ge1xuICBpZiAoIWlzU3RhdGVQcm94eShzdGF0ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gZm9ybWF0UHJvZEVycm9yTWVzc2FnZSgyNSkgOiBcIm9yaWdpbmFsIG11c3QgYmUgdXNlZCBvbiBzdGF0ZSBQcm94eVwiKTtcbiAgfVxuICByZXR1cm4gc3RhdGVbT1JJR0lOQUxfU1RBVEVdO1xufTtcbnZhciBub29wUmVkdWNlciA9IChzdGF0ZSA9IHt9KSA9PiBzdGF0ZTtcbmZ1bmN0aW9uIGNvbWJpbmVTbGljZXMoLi4uc2xpY2VzKSB7XG4gIGNvbnN0IHJlZHVjZXJNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMoZ2V0UmVkdWNlcnMoc2xpY2VzKSk7XG4gIGNvbnN0IGdldFJlZHVjZXIgPSAoKSA9PiBPYmplY3Qua2V5cyhyZWR1Y2VyTWFwKS5sZW5ndGggPyBjb21iaW5lUmVkdWNlcnMyKHJlZHVjZXJNYXApIDogbm9vcFJlZHVjZXI7XG4gIGxldCByZWR1Y2VyID0gZ2V0UmVkdWNlcigpO1xuICBmdW5jdGlvbiBjb21iaW5lZFJlZHVjZXIoc3RhdGUsIGFjdGlvbikge1xuICAgIHJldHVybiByZWR1Y2VyKHN0YXRlLCBhY3Rpb24pO1xuICB9XG4gIGNvbWJpbmVkUmVkdWNlci53aXRoTGF6eUxvYWRlZFNsaWNlcyA9ICgpID0+IGNvbWJpbmVkUmVkdWNlcjtcbiAgY29uc3QgaW5qZWN0ID0gKHNsaWNlLCBjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJlZHVjZXJQYXRoLFxuICAgICAgcmVkdWNlcjogcmVkdWNlclRvSW5qZWN0XG4gICAgfSA9IHNsaWNlO1xuICAgIGNvbnN0IGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlck1hcFtyZWR1Y2VyUGF0aF07XG4gICAgaWYgKCFjb25maWcub3ZlcnJpZGVFeGlzdGluZyAmJiBjdXJyZW50UmVkdWNlciAmJiBjdXJyZW50UmVkdWNlciAhPT0gcmVkdWNlclRvSW5qZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBjYWxsZWQgXFxgaW5qZWN0XFxgIHRvIG92ZXJyaWRlIGFscmVhZHktZXhpc3RpbmcgcmVkdWNlciAke3JlZHVjZXJQYXRofSB3aXRob3V0IHNwZWNpZnlpbmcgXFxgb3ZlcnJpZGVFeGlzdGluZzogdHJ1ZVxcYGApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbWJpbmVkUmVkdWNlcjtcbiAgICB9XG4gICAgcmVkdWNlck1hcFtyZWR1Y2VyUGF0aF0gPSByZWR1Y2VyVG9JbmplY3Q7XG4gICAgcmVkdWNlciA9IGdldFJlZHVjZXIoKTtcbiAgICByZXR1cm4gY29tYmluZWRSZWR1Y2VyO1xuICB9O1xuICBjb25zdCBzZWxlY3RvciA9IE9iamVjdC5hc3NpZ24oZnVuY3Rpb24gbWFrZVNlbGVjdG9yKHNlbGVjdG9yRm4sIHNlbGVjdFN0YXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNlbGVjdG9yMihzdGF0ZSwgLi4uYXJncykge1xuICAgICAgcmV0dXJuIHNlbGVjdG9yRm4oY3JlYXRlU3RhdGVQcm94eShzZWxlY3RTdGF0ZSA/IHNlbGVjdFN0YXRlKHN0YXRlLCAuLi5hcmdzKSA6IHN0YXRlLCByZWR1Y2VyTWFwKSwgLi4uYXJncyk7XG4gICAgfTtcbiAgfSwge1xuICAgIG9yaWdpbmFsXG4gIH0pO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihjb21iaW5lZFJlZHVjZXIsIHtcbiAgICBpbmplY3QsXG4gICAgc2VsZWN0b3JcbiAgfSk7XG59XG5cbi8vIHNyYy9mb3JtYXRQcm9kRXJyb3JNZXNzYWdlLnRzXG5mdW5jdGlvbiBmb3JtYXRQcm9kRXJyb3JNZXNzYWdlKGNvZGUpIHtcbiAgcmV0dXJuIGBNaW5pZmllZCBSZWR1eCBUb29sa2l0IGVycm9yICMke2NvZGV9OyB2aXNpdCBodHRwczovL3JlZHV4LXRvb2xraXQuanMub3JnL0Vycm9ycz9jb2RlPSR7Y29kZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycy4gYDtcbn1cbmV4cG9ydCB7XG4gIFJlZHVjZXJUeXBlLFxuICBTSE9VTERfQVVUT0JBVENILFxuICBUYXNrQWJvcnRFcnJvcixcbiAgVHVwbGUsXG4gIGFkZExpc3RlbmVyLFxuICBhc3luY1RodW5rQ3JlYXRvcixcbiAgYXV0b0JhdGNoRW5oYW5jZXIsXG4gIGJ1aWxkQ3JlYXRlU2xpY2UsXG4gIGNsZWFyQWxsTGlzdGVuZXJzLFxuICBjb21iaW5lU2xpY2VzLFxuICBjb25maWd1cmVTdG9yZSxcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25DcmVhdG9ySW52YXJpYW50TWlkZGxld2FyZSxcbiAgY3JlYXRlQXN5bmNUaHVuayxcbiAgY3JlYXRlRHJhZnRTYWZlU2VsZWN0b3IsXG4gIGNyZWF0ZURyYWZ0U2FmZVNlbGVjdG9yQ3JlYXRvcixcbiAgY3JlYXRlRHluYW1pY01pZGRsZXdhcmUsXG4gIGNyZWF0ZUVudGl0eUFkYXB0ZXIsXG4gIGNyZWF0ZUltbXV0YWJsZVN0YXRlSW52YXJpYW50TWlkZGxld2FyZSxcbiAgY3JlYXRlTGlzdGVuZXJNaWRkbGV3YXJlLFxuICBwcm9kdWNlIGFzIGNyZWF0ZU5leHRTdGF0ZSxcbiAgY3JlYXRlUmVkdWNlcixcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIGNyZWF0ZVNlbGVjdG9yQ3JlYXRvcjIgYXMgY3JlYXRlU2VsZWN0b3JDcmVhdG9yLFxuICBjcmVhdGVTZXJpYWxpemFibGVTdGF0ZUludmFyaWFudE1pZGRsZXdhcmUsXG4gIGNyZWF0ZVNsaWNlLFxuICBjdXJyZW50MyBhcyBjdXJyZW50LFxuICBmaW5kTm9uU2VyaWFsaXphYmxlVmFsdWUsXG4gIGZvcm1hdFByb2RFcnJvck1lc3NhZ2UsXG4gIGZyZWV6ZSxcbiAgaXNBY3Rpb25DcmVhdG9yLFxuICBpc0FsbE9mLFxuICBpc0FueU9mLFxuICBpc0FzeW5jVGh1bmtBY3Rpb24sXG4gIGlzRHJhZnQ1IGFzIGlzRHJhZnQsXG4gIGlzRlNBIGFzIGlzRmx1eFN0YW5kYXJkQWN0aW9uLFxuICBpc0Z1bGZpbGxlZCxcbiAgaXNJbW11dGFibGVEZWZhdWx0LFxuICBpc1BlbmRpbmcsXG4gIGlzUGxhaW4sXG4gIGlzUmVqZWN0ZWQsXG4gIGlzUmVqZWN0ZWRXaXRoVmFsdWUsXG4gIGxydU1lbW9pemUsXG4gIG1pbmlTZXJpYWxpemVFcnJvcixcbiAgbmFub2lkLFxuICBvcmlnaW5hbDIgYXMgb3JpZ2luYWwsXG4gIHByZXBhcmVBdXRvQmF0Y2hlZCxcbiAgcmVtb3ZlTGlzdGVuZXIsXG4gIHVud3JhcFJlc3VsdCxcbiAgd2Vha01hcE1lbW9pemUyIGFzIHdlYWtNYXBNZW1vaXplXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdXgtdG9vbGtpdC5tb2Rlcm4ubWpzLm1hcCJdLCJuYW1lcyI6WyJpc1BsYWluT2JqZWN0Iiwib2JqIiwicHJvdG8iLCJpc0FjdGlvbiIsImFjdGlvbiIsIk5PVEhJTkciLCJEUkFGVEFCTEUiLCJEUkFGVF9TVEFURSIsImVycm9ycyIsInBsdWdpbiIsInRoaW5nIiwiZGF0YSIsImRpZSIsImVycm9yIiwiYXJncyIsImUiLCJtc2ciLCJnZXRQcm90b3R5cGVPZiIsImlzRHJhZnQiLCJ2YWx1ZSIsImlzRHJhZnRhYmxlIiwiX2EiLCJpc01hcCIsImlzU2V0Iiwib2JqZWN0Q3RvclN0cmluZyIsIkN0b3IiLCJlYWNoIiwiaXRlciIsImdldEFyY2h0eXBlIiwia2V5IiwiZW50cnkiLCJpbmRleCIsInN0YXRlIiwiaGFzIiwicHJvcCIsInNldCIsInByb3BPck9sZFZhbHVlIiwidCIsImlzIiwieCIsInkiLCJ0YXJnZXQiLCJsYXRlc3QiLCJzaGFsbG93Q29weSIsImJhc2UiLCJzdHJpY3QiLCJpc1BsYWluIiwiZGVzY3JpcHRvcnMiLCJrZXlzIiwiZGVzYyIsImZyZWV6ZSIsImRlZXAiLCJpc0Zyb3plbiIsImRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucyIsInBsdWdpbnMiLCJnZXRQbHVnaW4iLCJwbHVnaW5LZXkiLCJjdXJyZW50U2NvcGUiLCJnZXRDdXJyZW50U2NvcGUiLCJjcmVhdGVTY29wZSIsInBhcmVudF8iLCJpbW1lcl8iLCJ1c2VQYXRjaGVzSW5TY29wZSIsInNjb3BlIiwicGF0Y2hMaXN0ZW5lciIsInJldm9rZVNjb3BlIiwibGVhdmVTY29wZSIsInJldm9rZURyYWZ0IiwiZW50ZXJTY29wZSIsImltbWVyMiIsImRyYWZ0IiwicHJvY2Vzc1Jlc3VsdCIsInJlc3VsdCIsImJhc2VEcmFmdCIsImZpbmFsaXplIiwibWF5YmVGcmVlemUiLCJyb290U2NvcGUiLCJwYXRoIiwiY2hpbGRWYWx1ZSIsImZpbmFsaXplUHJvcGVydHkiLCJyZXN1bHRFYWNoIiwiaXNTZXQyIiwicGFyZW50U3RhdGUiLCJ0YXJnZXRPYmplY3QiLCJyb290UGF0aCIsInRhcmdldElzU2V0IiwicmVzIiwiY3JlYXRlUHJveHlQcm94eSIsInBhcmVudCIsImlzQXJyYXkiLCJ0cmFwcyIsIm9iamVjdFRyYXBzIiwiYXJyYXlUcmFwcyIsInJldm9rZSIsInByb3h5Iiwic291cmNlIiwicmVhZFByb3BGcm9tUHJvdG8iLCJwZWVrIiwicHJlcGFyZUNvcHkiLCJjcmVhdGVQcm94eSIsImdldERlc2NyaXB0b3JGcm9tUHJvdG8iLCJjdXJyZW50MiIsImN1cnJlbnRTdGF0ZSIsIm1hcmtDaGFuZ2VkIiwib3duZXIiLCJmbiIsIkltbWVyMiIsImNvbmZpZyIsInJlY2lwZSIsImRlZmF1bHRCYXNlIiwic2VsZiIsImJhc2UyIiwiaGFzRXJyb3IiLCJwIiwiaXAiLCJwYXRjaGVzIiwiaW52ZXJzZVBhdGNoZXMiLCJjdXJyZW50IiwiaSIsInBhdGNoIiwiYXBwbHlQYXRjaGVzSW1wbCIsImN1cnJlbnRJbXBsIiwiY29weSIsImltbWVyIiwicHJvZHVjZSIsImNyZWF0ZUFjdGlvbiIsInR5cGUiLCJwcmVwYXJlQWN0aW9uIiwiYWN0aW9uQ3JlYXRvciIsInByZXBhcmVkIiwiZm9ybWF0UHJvZEVycm9yTWVzc2FnZSIsImZyZWV6ZURyYWZ0YWJsZSIsInZhbCIsImNyZWF0ZU5leHRTdGF0ZSIsImVtcGxhY2UiLCJtYXAiLCJoYW5kbGVyIiwiaW5zZXJ0ZWQiLCJleGVjdXRlUmVkdWNlckJ1aWxkZXJDYWxsYmFjayIsImJ1aWxkZXJDYWxsYmFjayIsImFjdGlvbnNNYXAiLCJhY3Rpb25NYXRjaGVycyIsImRlZmF1bHRDYXNlUmVkdWNlciIsImJ1aWxkZXIiLCJ0eXBlT3JBY3Rpb25DcmVhdG9yIiwicmVkdWNlciIsIm1hdGNoZXIiLCJpc1N0YXRlRnVuY3Rpb24iLCJjcmVhdGVSZWR1Y2VyIiwiaW5pdGlhbFN0YXRlIiwibWFwT3JCdWlsZGVyQ2FsbGJhY2siLCJmaW5hbEFjdGlvbk1hdGNoZXJzIiwiZmluYWxEZWZhdWx0Q2FzZVJlZHVjZXIiLCJnZXRJbml0aWFsU3RhdGUiLCJmcm96ZW5Jbml0aWFsU3RhdGUiLCJjYXNlUmVkdWNlcnMiLCJyZWR1Y2VyMiIsImNyIiwicHJldmlvdXNTdGF0ZSIsImNhc2VSZWR1Y2VyIiwiaXNEcmFmdDIiLCJpc0RyYWZ0YWJsZTIiLCJjcmVhdGVOZXh0U3RhdGUyIiwidW53cmFwUmVzdWx0IiwiYXN5bmNUaHVua1N5bWJvbCIsImdldFR5cGUiLCJzbGljZSIsImFjdGlvbktleSIsImJ1aWxkQ3JlYXRlU2xpY2UiLCJjcmVhdG9ycyIsImNBVCIsIm9wdGlvbnMiLCJuYW1lIiwicmVkdWNlclBhdGgiLCJyZWR1Y2VycyIsImJ1aWxkUmVkdWNlckNyZWF0b3JzIiwicmVkdWNlck5hbWVzIiwiY29udGV4dCIsImNvbnRleHRNZXRob2RzIiwibmFtZTIiLCJyZWR1Y2VyTmFtZSIsInJlZHVjZXJEZWZpbml0aW9uIiwicmVkdWNlckRldGFpbHMiLCJpc0FzeW5jVGh1bmtTbGljZVJlZHVjZXJEZWZpbml0aW9uIiwiaGFuZGxlVGh1bmtDYXNlUmVkdWNlckRlZmluaXRpb24iLCJoYW5kbGVOb3JtYWxSZWR1Y2VyRGVmaW5pdGlvbiIsImJ1aWxkUmVkdWNlciIsImV4dHJhUmVkdWNlcnMiLCJmaW5hbENhc2VSZWR1Y2VycyIsInNNIiwibSIsInNlbGVjdFNlbGYiLCJpbmplY3RlZFNlbGVjdG9yQ2FjaGUiLCJfcmVkdWNlciIsIm1ha2VTZWxlY3RvclByb3BzIiwicmVkdWNlclBhdGgyIiwiaW5qZWN0ZWQiLCJzZWxlY3RTbGljZSIsInNsaWNlU3RhdGUiLCJnZXRTZWxlY3RvcnMiLCJzZWxlY3RTdGF0ZSIsInNlbGVjdG9yQ2FjaGUiLCJzZWxlY3RvciIsIndyYXBTZWxlY3RvciIsImluamVjdGFibGUiLCJwYXRoT3B0IiwibmV3UmVkdWNlclBhdGgiLCJ3cmFwcGVyIiwicm9vdFN0YXRlIiwiY3JlYXRlU2xpY2UiLCJhc3luY1RodW5rIiwicGF5bG9hZENyZWF0b3IiLCJwcmVwYXJlIiwiY3JlYXRlTm90YXRpb24iLCJtYXliZVJlZHVjZXJXaXRoUHJlcGFyZSIsInByZXBhcmVDYWxsYmFjayIsImlzQ2FzZVJlZHVjZXJXaXRoUHJlcGFyZURlZmluaXRpb24iLCJmdWxmaWxsZWQiLCJwZW5kaW5nIiwicmVqZWN0ZWQiLCJzZXR0bGVkIiwidGh1bmsiLCJub29wIiwiY29kZSJdLCJtYXBwaW5ncyI6IkFBbUJBLFNBQVNBLEdBQWNDLEdBQUs7QUFDMUIsTUFBSSxPQUFPQSxLQUFRLFlBQVlBLE1BQVE7QUFDckMsV0FBTztBQUNULE1BQUlDLElBQVFEO0FBQ1osU0FBTyxPQUFPLGVBQWVDLENBQUssTUFBTTtBQUN0QyxJQUFBQSxJQUFRLE9BQU8sZUFBZUEsQ0FBSztBQUVyQyxTQUFPLE9BQU8sZUFBZUQsQ0FBRyxNQUFNQyxLQUFTLE9BQU8sZUFBZUQsQ0FBRyxNQUFNO0FBQ2hGO0FBbVdBLFNBQVNFLEdBQVNDLEdBQVE7QUFDeEIsU0FBT0osR0FBY0ksQ0FBTSxLQUFLLFVBQVVBLEtBQVUsT0FBT0EsRUFBTyxRQUFTO0FBQzdFO0FDL1hBLElBQUlDLEtBQVUsT0FBTyxJQUFJLGVBQWUsR0FDcENDLEtBQVksT0FBTyxJQUFJLGlCQUFpQixHQUN4Q0MsSUFBYyxPQUFPLElBQUksYUFBYSxHQUd0Q0MsS0FBUyxRQUFRLElBQUksYUFBYSxlQUFlO0FBQUE7QUFBQSxFQUVuRCxTQUFTQyxHQUFRO0FBQ2YsV0FBTyxtQkFBbUJBLENBQU0sbUZBQW1GQSxD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\n","import { c } from \"../../redux-toolkit.modern-T6XJoxBf.js\";\nimport { filterEquals as f } from \"../../models/filter.model.js\";\nconst d = {}, n = c({\n name: \"filter\",\n initialState: d,\n reducers: {\n initContext(a, t) {\n const {\n name: e,\n defaultOrFilters: r,\n defaultFilters: o,\n defaultPage: l,\n defaultSort: s,\n defaultTagFilter: m,\n defaultCustomParameters: i,\n defaultQueryParams: u\n } = t.payload;\n a[e] = {\n orFilters: r,\n filters: o,\n page: l,\n sort: s,\n tagFilter: m,\n customParameters: i,\n queryParams: u\n };\n },\n addFilter(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].filters.push(r), a[e.name].page.offset = e.defaultPage.offset;\n },\n addOrFilter(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].orFilters.push(r), a[e.name].page.offset = e.defaultPage.offset;\n },\n removeFilter(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].filters = a[e.name].filters.filter(\n (o) => f(o, r)\n ), a[e.name].orFilters.forEach((o) => {\n o.filters.filter((l) => f(l, r));\n }), a[e.name].page.offset = e.defaultPage.offset, a[e.name].customParameters = e.defaultCustomParameters;\n },\n setFilters(a, t) {\n const { context: e, value: r } = t.payload, { filters: o, orFilters: l, customParameters: s } = r;\n a[e.name].filters = o, a[e.name].orFilters = l, a[e.name].page.offset = e.defaultPage.offset, a[e.name].customParameters = s;\n },\n clearFilters(a, t) {\n const { context: e } = t.payload;\n a[e.name].filters = e.defaultFilters, a[e.name].orFilters = e.defaultOrFilters, a[e.name].page.offset = e.defaultPage.offset, a[e.name].customParameters = e.defaultCustomParameters;\n },\n setSort(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].sort = r, a[e.name].page.offset = e.defaultPage.offset;\n },\n clearSort(a, t) {\n const { context: e } = t.payload;\n a[e.name].sort = e.defaultSort, a[e.name].page.offset = e.defaultPage.offset;\n },\n nextPage(a, t) {\n const { context: e } = t.payload, { limit: r, offset: o } = a[e.name].page;\n a[e.name].page = { limit: r, offset: o + r };\n },\n setPageNumber(a, t) {\n const { context: e, value: r } = t.payload, { limit: o } = a[e.name].page;\n a[e.name].page = { limit: o, offset: o * r };\n },\n setPageLimit(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].page = { limit: r, offset: 0 };\n },\n setQueryParams(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].queryParams = r;\n },\n setTagFilter(a, t) {\n const { context: e, value: r } = t.payload;\n a[e.name].orFilters = r.orFilters, a[e.name].filters = r.filters, a[e.name].page.offset = e.defaultPage.offset, a[e.name].sort = r.sort, a[e.name].tagFilter = r.name;\n },\n clear(a, t) {\n const { context: e } = t.payload;\n a[e.name].orFilters = e.defaultOrFilters, a[e.name].filters = e.defaultFilters, a[e.name].page.offset = e.defaultPage.offset, a[e.name].sort = e.defaultSort, a[e.name].tagFilter = e.defaultTagFilter;\n }\n }\n}), {\n removeFilter: F,\n setFilters: P,\n clearFilters: y,\n addFilter: x,\n setSort: v,\n clearSort: S,\n nextPage: C,\n setPageNumber: O,\n setPageLimit: T,\n initContext: h,\n clear: q,\n setTagFilter: Q,\n setQueryParams: b\n} = n.actions, E = n.reducer;\nexport {\n x as addFilter,\n q as clear,\n y as clearFilters,\n S as clearSort,\n E as default,\n h as initContext,\n C as nextPage,\n F as removeFilter,\n P as setFilters,\n T as setPageLimit,\n O as setPageNumber,\n b as setQueryParams,\n v as setSort,\n Q as setTagFilter\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5yZWR1Y2VyLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvcmVkdWNlcnMvZmlsdGVycy9maWx0ZXJzLnJlZHVjZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2xpY2UsIFBheWxvYWRBY3Rpb24gfSBmcm9tIFwiQHJlZHV4anMvdG9vbGtpdFwiO1xuaW1wb3J0IHtcbiAgQ3VzdG9tUGFyYW1ldGVyLFxuICBGaWx0ZXIsXG4gIGZpbHRlckVxdWFscyxcbiAgRmlsdGVyc0NvbnRleHQsXG4gIE9yRmlsdGVyLFxuICBQYWdlYWJsZSxcbiAgU2V0RmlsdGVyc1BheWxvYWQsXG4gIFNvcnRhYmxlLFxuICBUYWdGaWx0ZXIsXG59IGZyb20gXCJAbW9kZWxzL2ZpbHRlci5tb2RlbC50c1wiO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJzQ29udGV4dFZhbHVlID0ge1xuICBvckZpbHRlcnM6IE9yRmlsdGVyW107XG4gIGZpbHRlcnM6IEZpbHRlcltdO1xuICBwYWdlOiBQYWdlYWJsZTtcbiAgc29ydDogU29ydGFibGUgfCB1bmRlZmluZWQ7XG4gIHRhZ0ZpbHRlcj86IHN0cmluZztcbiAgY3VzdG9tUGFyYW1ldGVyczogQ3VzdG9tUGFyYW1ldGVyW107XG4gIHF1ZXJ5UGFyYW1zPzogYW55W107XG59O1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJTdGF0ZSA9IHtcbiAgW2tleTogc3RyaW5nXTogRmlsdGVyc0NvbnRleHRWYWx1ZTtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbHRlclN0YXRlVmFsdWVBY3Rpb248VD4gPSB7XG4gIGNvbnRleHQ6IEZpbHRlcnNDb250ZXh0O1xuICB2YWx1ZTogVDtcbn07XG5leHBvcnQgdHlwZSBGaWx0ZXJTdGF0ZUFjdGlvbiA9IHtcbiAgY29udGV4dDogRmlsdGVyc0NvbnRleHQ7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGU6IEZpbHRlclN0YXRlID0ge307XG5cbmNvbnN0IGZpbHRlclNsaWNlID0gY3JlYXRlU2xpY2Uoe1xuICBuYW1lOiBcImZpbHRlclwiLFxuICBpbml0aWFsU3RhdGUsXG4gIHJlZHVjZXJzOiB7XG4gICAgaW5pdENvbnRleHQoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJzQ29udGV4dD4pIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGVmYXVsdE9yRmlsdGVycyxcbiAgICAgICAgZGVmYXVsdEZpbHRlcnMsXG4gICAgICAgIGRlZmF1bHRQYWdlLFxuICAgICAgICBkZWZhdWx0U29ydCxcbiAgICAgICAgZGVmYXVsdFRhZ0ZpbHRlcixcbiAgICAgICAgZGVmYXVsdEN1c3RvbVBhcmFtZXRlcnMsXG4gICAgICAgIGRlZmF1bHRRdWVyeVBhcmFtcyxcbiAgICAgIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHN0YXRlW25hbWVdID0ge1xuICAgICAgICBvckZpbHRlcnM6IGRlZmF1bHRPckZpbHRlcnMsXG4gICAgICAgIGZpbHRlcnM6IGRlZmF1bHRGaWx0ZXJzLFxuICAgICAgICBwYWdlOiBkZWZhdWx0UGFnZSxcbiAgICAgICAgc29ydDogZGVmYXVsdFNvcnQsXG4gICAgICAgIHRhZ0ZpbHRlcjogZGVmYXVsdFRhZ0ZpbHRlcixcbiAgICAgICAgY3VzdG9tUGFyYW1ldGVyczogZGVmYXVsdEN1c3RvbVBhcmFtZXRlcnMsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiBkZWZhdWx0UXVlcnlQYXJhbXMsXG4gICAgICB9O1xuICAgIH0sXG4gICAgYWRkRmlsdGVyKHN0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RmlsdGVyU3RhdGVWYWx1ZUFjdGlvbjxGaWx0ZXI+Pikge1xuICAgICAgY29uc3QgeyBjb250ZXh0LCB2YWx1ZSB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLmZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLnBhZ2Uub2Zmc2V0ID0gY29udGV4dC5kZWZhdWx0UGFnZS5vZmZzZXQ7XG4gICAgfSxcbiAgICBhZGRPckZpbHRlcihcbiAgICAgIHN0YXRlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPEZpbHRlclN0YXRlVmFsdWVBY3Rpb248T3JGaWx0ZXI+PixcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgY29udGV4dCwgdmFsdWUgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5vckZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLnBhZ2Uub2Zmc2V0ID0gY29udGV4dC5kZWZhdWx0UGFnZS5vZmZzZXQ7XG4gICAgfSxcbiAgICByZW1vdmVGaWx0ZXIoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJTdGF0ZVZhbHVlQWN0aW9uPEZpbHRlcj4+KSB7XG4gICAgICBjb25zdCB7IGNvbnRleHQsIHZhbHVlIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0uZmlsdGVycyA9IHN0YXRlW2NvbnRleHQubmFtZV0uZmlsdGVycy5maWx0ZXIoXG4gICAgICAgIChmaWx0ZXIpID0+IGZpbHRlckVxdWFscyhmaWx0ZXIsIHZhbHVlKSxcbiAgICAgICk7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLm9yRmlsdGVycy5mb3JFYWNoKChvckZpbHRlcikgPT4ge1xuICAgICAgICBvckZpbHRlci5maWx0ZXJzLmZpbHRlcigoZmlsdGVyKSA9PiBmaWx0ZXJFcXVhbHMoZmlsdGVyLCB2YWx1ZSkpOyAvLyBOT1NPTkFSIFRPRE86IGNoZWNrIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHJlZmFjdG9yXG4gICAgICB9KTtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0ucGFnZS5vZmZzZXQgPSBjb250ZXh0LmRlZmF1bHRQYWdlLm9mZnNldDtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0uY3VzdG9tUGFyYW1ldGVycyA9IGNvbnRleHQuZGVmYXVsdEN1c3RvbVBhcmFtZXRlcnM7XG4gICAgfSxcbiAgICBzZXRGaWx0ZXJzKFxuICAgICAgc3RhdGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248RmlsdGVyU3RhdGVWYWx1ZUFjdGlvbjxTZXRGaWx0ZXJzUGF5bG9hZD4+LFxuICAgICkge1xuICAgICAgY29uc3QgeyBjb250ZXh0LCB2YWx1ZSB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBjb25zdCB7IGZpbHRlcnMsIG9yRmlsdGVycywgY3VzdG9tUGFyYW1ldGVycyB9ID0gdmFsdWU7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5vckZpbHRlcnMgPSBvckZpbHRlcnM7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLnBhZ2Uub2Zmc2V0ID0gY29udGV4dC5kZWZhdWx0UGFnZS5vZmZzZXQ7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLmN1c3RvbVBhcmFtZXRlcnMgPSBjdXN0b21QYXJhbWV0ZXJzO1xuICAgIH0sXG4gICAgY2xlYXJGaWx0ZXJzKHN0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RmlsdGVyU3RhdGVBY3Rpb24+KSB7XG4gICAgICBjb25zdCB7IGNvbnRleHQgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5maWx0ZXJzID0gY29udGV4dC5kZWZhdWx0RmlsdGVycztcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0ub3JGaWx0ZXJzID0gY29udGV4dC5kZWZhdWx0T3JGaWx0ZXJzO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5wYWdlLm9mZnNldCA9IGNvbnRleHQuZGVmYXVsdFBhZ2Uub2Zmc2V0O1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5jdXN0b21QYXJhbWV0ZXJzID0gY29udGV4dC5kZWZhdWx0Q3VzdG9tUGFyYW1ldGVycztcbiAgICB9LFxuICAgIHNldFNvcnQoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJTdGF0ZVZhbHVlQWN0aW9uPFNvcnRhYmxlPj4pIHtcbiAgICAgIGNvbnN0IHsgY29udGV4dCwgdmFsdWUgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5zb3J0ID0gdmFsdWU7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLnBhZ2Uub2Zmc2V0ID0gY29udGV4dC5kZWZhdWx0UGFnZS5vZmZzZXQ7XG4gICAgfSxcbiAgICBjbGVhclNvcnQoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJTdGF0ZUFjdGlvbj4pIHtcbiAgICAgIGNvbnN0IHsgY29udGV4dCB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLnNvcnQgPSBjb250ZXh0LmRlZmF1bHRTb3J0O1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5wYWdlLm9mZnNldCA9IGNvbnRleHQuZGVmYXVsdFBhZ2Uub2Zmc2V0O1xuICAgIH0sXG4gICAgbmV4dFBhZ2Uoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJTdGF0ZUFjdGlvbj4pIHtcbiAgICAgIGNvbnN0IHsgY29udGV4dCB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgICBjb25zdCB7IGxpbWl0LCBvZmZzZXQgfSA9IHN0YXRlW2NvbnRleHQubmFtZV0ucGFnZTtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0ucGFnZSA9IHsgbGltaXQsIG9mZnNldDogb2Zmc2V0ICsgbGltaXQgfTtcbiAgICB9LFxuXG4gICAgc2V0UGFnZU51bWJlcihcbiAgICAgIHN0YXRlLFxuICAgICAgYWN0aW9uOiBQYXlsb2FkQWN0aW9uPEZpbHRlclN0YXRlVmFsdWVBY3Rpb248bnVtYmVyPj4sXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGNvbnRleHQsIHZhbHVlIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIGNvbnN0IHsgbGltaXQgfSA9IHN0YXRlW2NvbnRleHQubmFtZV0ucGFnZTtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0ucGFnZSA9IHsgbGltaXQsIG9mZnNldDogbGltaXQgKiB2YWx1ZSB9O1xuICAgIH0sXG5cbiAgICBzZXRQYWdlTGltaXQoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJTdGF0ZVZhbHVlQWN0aW9uPG51bWJlcj4+KSB7XG4gICAgICBjb25zdCB7IGNvbnRleHQsIHZhbHVlIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0ucGFnZSA9IHsgbGltaXQ6IHZhbHVlLCBvZmZzZXQ6IDAgfTtcbiAgICB9LFxuXG4gICAgc2V0UXVlcnlQYXJhbXMoc3RhdGUsIGFjdGlvbjogUGF5bG9hZEFjdGlvbjxGaWx0ZXJTdGF0ZVZhbHVlQWN0aW9uPGFueT4+KSB7XG4gICAgICBjb25zdCB7IGNvbnRleHQsIHZhbHVlIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0ucXVlcnlQYXJhbXMgPSB2YWx1ZTtcbiAgICB9LFxuXG4gICAgc2V0VGFnRmlsdGVyKFxuICAgICAgc3RhdGUsXG4gICAgICBhY3Rpb246IFBheWxvYWRBY3Rpb248RmlsdGVyU3RhdGVWYWx1ZUFjdGlvbjxUYWdGaWx0ZXI+PixcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgY29udGV4dCwgdmFsdWUgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5vckZpbHRlcnMgPSB2YWx1ZS5vckZpbHRlcnM7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLmZpbHRlcnMgPSB2YWx1ZS5maWx0ZXJzO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5wYWdlLm9mZnNldCA9IGNvbnRleHQuZGVmYXVsdFBhZ2Uub2Zmc2V0O1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5zb3J0ID0gdmFsdWUuc29ydDtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0udGFnRmlsdGVyID0gdmFsdWUubmFtZTtcbiAgICB9LFxuICAgIGNsZWFyKHN0YXRlLCBhY3Rpb246IFBheWxvYWRBY3Rpb248RmlsdGVyU3RhdGVBY3Rpb24+KSB7XG4gICAgICBjb25zdCB7IGNvbnRleHQgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5vckZpbHRlcnMgPSBjb250ZXh0LmRlZmF1bHRPckZpbHRlcnM7XG4gICAgICBzdGF0ZVtjb250ZXh0Lm5hbWVdLmZpbHRlcnMgPSBjb250ZXh0LmRlZmF1bHRGaWx0ZXJzO1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5wYWdlLm9mZnNldCA9IGNvbnRleHQuZGVmYXVsdFBhZ2Uub2Zmc2V0O1xuICAgICAgc3RhdGVbY29udGV4dC5uYW1lXS5zb3J0ID0gY29udGV4dC5kZWZhdWx0U29ydDtcbiAgICAgIHN0YXRlW2NvbnRleHQubmFtZV0udGFnRmlsdGVyID0gY29udGV4dC5kZWZhdWx0VGFnRmlsdGVyO1xuICAgIH0sXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHtcbiAgcmVtb3ZlRmlsdGVyLFxuICBzZXRGaWx0ZXJzLFxuICBjbGVhckZpbHRlcnMsXG4gIGFkZEZpbHRlcixcbiAgc2V0U29ydCxcbiAgY2xlYXJTb3J0LFxuICBuZXh0UGFnZSxcbiAgc2V0UGFnZU51bWJlcixcbiAgc2V0UGFnZUxpbWl0LFxuICBpbml0Q29udGV4dCxcbiAgY2xlYXIsXG4gIHNldFRhZ0ZpbHRlcixcbiAgc2V0UXVlcnlQYXJhbXMsXG59ID0gZmlsdGVyU2xpY2UuYWN0aW9ucztcblxuZXhwb3J0IGRlZmF1bHQgZmlsdGVyU2xpY2UucmVkdWNlcjtcbiJdLCJuYW1lcyI6WyJpbml0aWFsU3RhdGUiLCJmaWx0ZXJTbGljZSIsImNyZWF0ZVNsaWNlIiwic3RhdGUiLCJhY3Rpb24iLCJuYW1lIiwiZGVmYXVsdE9yRmlsdGVycyIsImRlZmF1bHRGaWx0ZXJzIiwiZGVmYXVsdFBhZ2UiLCJkZWZhdWx0U29ydCIsImRlZmF1bHRUYWdGaWx0ZXIiLCJkZWZhdWx0Q3VzdG9tUGFyYW1ldGVycyIsImRlZmF1bHRRdWVyeVBhcmFtcyIsImNvbnRleHQiLCJ2YWx1ZSIsImZpbHRlciIsImZpbHRlckVxdWFscyIsIm9yRmlsdGVyIiwiZmlsdGVycyIsIm9yRmlsdGVycyIsImN1c3RvbVBhcmFtZXRlcnMiLCJsaW1pdCIsIm9mZnNldCIsInJlbW92ZUZpbHRlciIsInNldEZpbHRlcnMiLCJjbGVhckZpbHRlcnMiLCJhZGRGaWx0ZXIiLCJzZXRTb3J0IiwiY2xlYXJTb3J0IiwibmV4dFBhZ2UiLCJzZXRQYWdlTnVtYmVyIiwic2V0UGFnZUxpbWl0IiwiaW5pdENvbnRleHQiLCJjbGVhciIsInNldFRhZ0ZpbHRlciIsInNldFF1ZXJ5UGFyYW1zIiwiZmlsdGVyUmVkdWNlciJdLCJtYXBwaW5ncyI6Ijs7QUFtQ0EsTUFBTUEsSUFBNEIsQ0FBQyxHQUU3QkMsSUFBY0MsRUFBWTtBQUFBLEVBQzlCLE1BQU07QUFBQSxFQUNOLGNBQUFGO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDUixZQUFZRyxHQUFPQyxHQUF1QztBQUNsRCxZQUFBO0FBQUEsUUFDSixNQUFBQztBQUFBLFFBQ0Esa0JBQUFDO0FBQUEsUUFDQSxnQkFBQUM7QUFBQSxRQUNBLGFBQUFDO0FBQUEsUUFDQSxhQUFBQztBQUFBLFFBQ0Esa0JBQUFDO0FBQUEsUUFDQSx5QkFBQUM7QUFBQSxRQUNBLG9CQUFBQztBQUFBLFVBQ0VSLEVBQU87QUFDWCxNQUFBRCxFQUFNRSxDQUFJLElBQUk7QUFBQSxRQUNaLFdBQVdDO0FBQUEsUUFDWCxTQUFTQztBQUFBLFFBQ1QsTUFBTUM7QUFBQSxRQUNOLE1BQU1DO0FBQUEsUUFDTixXQUFXQztBQUFBLFFBQ1gsa0JBQWtCQztBQUFBLFFBQ2xCLGFBQWFDO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFVBQVVULEdBQU9DLEdBQXVEO0FBQ3RFLFlBQU0sRUFBRSxTQUFBUyxHQUFTLE9BQUFDLEVBQU0sSUFBSVYsRUFB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\n","const r = (t) => (e) => e.filter[t.name], i = () => (t) => t.filter;\nexport {\n i as getFilterState,\n r as getFilters\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5zZWxlY3RvcnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9yZWR1Y2Vycy9maWx0ZXJzL2ZpbHRlcnMuc2VsZWN0b3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbHRlcnNDb250ZXh0VmFsdWUsIEZpbHRlclN0YXRlIH0gZnJvbSBcIi4vZmlsdGVycy5yZWR1Y2VyXCI7XG5pbXBvcnQgeyBGaWx0ZXJzQ29udGV4dCB9IGZyb20gXCJAbW9kZWxzL2ZpbHRlci5tb2RlbC50c1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVycyA9XG4gIChjb250ZXh0OiBGaWx0ZXJzQ29udGV4dCkgPT5cbiAgKHJvb3Q6IGFueSk6IEZpbHRlcnNDb250ZXh0VmFsdWUgPT5cbiAgICByb290LmZpbHRlcltjb250ZXh0Lm5hbWVdO1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlclN0YXRlID1cbiAgKCkgPT5cbiAgKHJvb3Q6IGFueSk6IEZpbHRlclN0YXRlID0+XG4gICAgcm9vdC5maWx0ZXI7XG4iXSwibmFtZXMiOlsiZ2V0RmlsdGVycyIsImNvbnRleHQiLCJyb290IiwiZ2V0RmlsdGVyU3RhdGUiXSwibWFwcGluZ3MiOiJBQUdhLE1BQUFBLElBQ1gsQ0FBQ0MsTUFDRCxDQUFDQyxNQUNDQSxFQUFLLE9BQU9ELEVBQVEsSUFBSSxHQUNmRSxJQUNYLE1BQ0EsQ0FBQ0QsTUFDQ0EsRUFBSzsifQ==\n","import { createContext as I, useEffect as d, useRef as k, useContext as T, useState as f } from \"react\";\nimport { g as _ } from \"../_commonjsHelpers-BkfeUUK-.js\";\nimport { P as s } from \"../index-mIdcEJEy.js\";\nimport { RWDMode as b } from \"../models/utility.model.js\";\nvar v = {};\nv.match = $;\nv.parse = L;\nvar N = /(?:(only|not)?\\s*([^\\s\\(\\)]+)(?:\\s*and)?\\s*)?(.+)?/i, Q = /\\(\\s*([^\\s\\:\\)]+)\\s*(?:\\:\\s*([^\\s\\)]+))?\\s*\\)/, S = /^(?:(min|max)-)?(.+)/, P = /(em|rem|px|cm|mm|in|pt|pc)?$/, U = /(dpi|dpcm|dppx)?$/;\nfunction $(e, t) {\n return L(e).some(function(r) {\n var a = r.inverse, n = r.type === \"all\" || t.type === r.type;\n if (n && a || !(n || a))\n return !1;\n var c = r.expressions.every(function(o) {\n var l = o.feature, h = o.modifier, i = o.value, m = t[l];\n if (!m)\n return !1;\n switch (l) {\n case \"orientation\":\n case \"scan\":\n return m.toLowerCase() === i.toLowerCase();\n case \"width\":\n case \"height\":\n case \"device-width\":\n case \"device-height\":\n i = w(i), m = w(m);\n break;\n case \"resolution\":\n i = M(i), m = M(m);\n break;\n case \"aspect-ratio\":\n case \"device-aspect-ratio\":\n case /* Deprecated */\n \"device-pixel-ratio\":\n i = x(i), m = x(m);\n break;\n case \"grid\":\n case \"color\":\n case \"color-index\":\n case \"monochrome\":\n i = parseInt(i, 10) || 1, m = parseInt(m, 10) || 0;\n break;\n }\n switch (h) {\n case \"min\":\n return m >= i;\n case \"max\":\n return m <= i;\n default:\n return m === i;\n }\n });\n return c && !a || !c && a;\n });\n}\nfunction L(e) {\n return e.split(\",\").map(function(t) {\n t = t.trim();\n var r = t.match(N), a = r[1], n = r[2], c = r[3] || \"\", o = {};\n return o.inverse = !!a && a.toLowerCase() === \"not\", o.type = n ? n.toLowerCase() : \"all\", c = c.match(/\\([^\\)]+\\)/g) || [], o.expressions = c.map(function(l) {\n var h = l.match(Q), i = h[1].toLowerCase().match(S);\n return {\n modifier: i[1],\n feature: i[2],\n value: h[2]\n };\n }), o;\n });\n}\nfunction x(e) {\n var t = Number(e), r;\n return t || (r = e.match(/^(\\d+)\\s*\\/\\s*(\\d+)$/), t = r[1] / r[2]), t;\n}\nfunction M(e) {\n var t = parseFloat(e), r = String(e).match(U)[1];\n switch (r) {\n case \"dpcm\":\n return t / 2.54;\n case \"dppx\":\n return t * 96;\n default:\n return t;\n }\n}\nfunction w(e) {\n var t = parseFloat(e), r = String(e).match(P)[1];\n switch (r) {\n case \"em\":\n return t * 16;\n case \"rem\":\n return t * 16;\n case \"cm\":\n return t * 96 / 2.54;\n case \"mm\":\n return t * 96 / 2.54 / 10;\n case \"in\":\n return t * 96;\n case \"pt\":\n return t * 72;\n case \"pc\":\n return t * 72 / 12;\n default:\n return t;\n }\n}\nvar H = v.match, g = typeof window < \"u\" ? window.matchMedia : null;\nfunction W(e, t, r) {\n var a = this, n;\n g && !r && (n = g.call(window, e)), n ? (this.matches = n.matches, this.media = n.media, n.addListener(l)) : (this.matches = H(e, t), this.media = e), this.addListener = c, this.removeListener = o, this.dispose = h;\n function c(i) {\n n && n.addListener(i);\n }\n function o(i) {\n n && n.removeListener(i);\n }\n function l(i) {\n a.matches = i.matches, a.media = i.media;\n }\n function h() {\n n && n.removeListener(l);\n }\n}\nfunction q(e, t, r) {\n return new W(e, t, r);\n}\nvar A = q;\nconst K = /* @__PURE__ */ _(A);\nvar F = /[A-Z]/g, j = /^ms-/, p = {};\nfunction V(e) {\n return \"-\" + e.toLowerCase();\n}\nfunction O(e) {\n if (p.hasOwnProperty(e))\n return p[e];\n var t = e.replace(F, V);\n return p[e] = j.test(t) ? \"-\" + t : t;\n}\nfunction G(e, t) {\n if (e === t)\n return !0;\n if (!e || !t)\n return !1;\n const r = Object.keys(e), a = Object.keys(t), n = r.length;\n if (a.length !== n)\n return !1;\n for (let c = 0; c < n; c++) {\n const o = r[c];\n if (e[o] !== t[o] || !Object.prototype.hasOwnProperty.call(t, o))\n return !1;\n }\n return !0;\n}\nconst u = s.oneOfType([s.string, s.number]), y = {\n all: s.bool,\n grid: s.bool,\n aural: s.bool,\n braille: s.bool,\n handheld: s.bool,\n print: s.bool,\n projection: s.bool,\n screen: s.bool,\n tty: s.bool,\n tv: s.bool,\n embossed: s.bool\n}, R = {\n orientation: s.oneOf([\"portrait\", \"landscape\"]),\n scan: s.oneOf([\"progressive\", \"interlace\"]),\n aspectRatio: s.string,\n deviceAspectRatio: s.string,\n height: u,\n deviceHeight: u,\n width: u,\n deviceWidth: u,\n color: s.bool,\n colorIndex: s.bool,\n monochrome: s.bool,\n resolution: u,\n type: Object.keys(y)\n}, { type: de, ...X } = R, D = {\n minAspectRatio: s.string,\n maxAspectRatio: s.string,\n minDeviceAspectRatio: s.string,\n maxDeviceAspectRatio: s.string,\n minHeight: u,\n maxHeight: u,\n minDeviceHeight: u,\n maxDeviceHeight: u,\n minWidth: u,\n maxWidth: u,\n minDeviceWidth: u,\n maxDeviceWidth: u,\n minColor: s.number,\n maxColor: s.number,\n minColorIndex: s.number,\n maxColorIndex: s.number,\n minMonochrome: s.number,\n maxMonochrome: s.number,\n minResolution: u,\n maxResolution: u,\n ...X\n}, Y = { ...y, ...D };\nvar Z = {\n all: Y,\n types: y,\n matchers: R,\n features: D\n};\nconst z = (e) => `not ${e}`, J = (e, t) => {\n const r = O(e);\n return typeof t == \"number\" && (t = `${t}px`), t === !0 ? r : t === !1 ? z(r) : `(${r}: ${t})`;\n}, B = (e) => e.join(\" and \"), ee = (e) => {\n const t = [];\n return Object.keys(Z.all).forEach((r) => {\n const a = e[r];\n a != null && t.push(J(r, a));\n }), B(t);\n}, te = I(void 0), re = (e) => e.query || ee(e), E = (e) => e ? Object.keys(e).reduce((r, a) => (r[O(a)] = e[a], r), {}) : void 0, C = () => {\n const e = k(!1);\n return d(() => {\n e.current = !0;\n }, []), e.current;\n}, ne = (e) => {\n const t = T(te), r = () => E(e) || E(t), [a, n] = f(r);\n return d(() => {\n const c = r();\n G(a, c) || n(c);\n }, [e, t]), a;\n}, se = (e) => {\n const t = () => re(e), [r, a] = f(t);\n return d(() => {\n const n = t();\n r !== n && a(n);\n }, [e]), r;\n}, ae = (e, t) => {\n const r = () => K(e, t || {}, !!t), [a, n] = f(r), c = C();\n return d(() => {\n if (c) {\n const o = r();\n return n(o), () => {\n o && o.dispose();\n };\n }\n }, [e, t]), a;\n}, oe = (e) => {\n const [t, r] = f(e.matches);\n return d(() => {\n const a = (n) => {\n r(n.matches);\n };\n return e.addListener(a), r(e.matches), () => {\n e.removeListener(a);\n };\n }, [e]), t;\n}, ie = (e, t, r) => {\n const a = ne(t), n = se(e);\n if (!n)\n throw new Error(\"Invalid or missing MediaQuery!\");\n const c = ae(n, a), o = oe(c), l = C();\n return d(() => {\n l && r && r(o);\n }, [o]), d(() => () => {\n c && c.dispose();\n }, []), o;\n}, he = () => ({ mode: ie({ query: \"(max-width: 768px)\" }) ? b.MOBILE : b.DESKTOP });\nexport {\n he as useRWDMode\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXJ3ZC1tb2RlLmhvb2suanMiLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbWVkaWFxdWVyeS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9tYXRjaG1lZGlhcXVlcnkvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvaHlwaGVuYXRlLXN0eWxlLW5hbWUvaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS9ub2RlX21vZHVsZXMvc2hhbGxvdy1lcXVhbC9kaXN0L2luZGV4Lm1vZGVybi5tanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtcmVzcG9uc2l2ZS9kaXN0L2VzbS9pbmRleC5qcyIsIi4uLy4uL2xpYi9ob29rcy91c2UtcndkLW1vZGUuaG9vay50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IChjKSAyMDE0LCBZYWhvbyEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLlxuU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiovXG5cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5tYXRjaCA9IG1hdGNoUXVlcnk7XG5leHBvcnRzLnBhcnNlID0gcGFyc2VRdWVyeTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudmFyIFJFX01FRElBX1FVRVJZICAgICA9IC8oPzoob25seXxub3QpP1xccyooW15cXHNcXChcXCldKykoPzpcXHMqYW5kKT9cXHMqKT8oLispPy9pLFxuICAgIFJFX01RX0VYUFJFU1NJT04gICA9IC9cXChcXHMqKFteXFxzXFw6XFwpXSspXFxzKig/OlxcOlxccyooW15cXHNcXCldKykpP1xccypcXCkvLFxuICAgIFJFX01RX0ZFQVRVUkUgICAgICA9IC9eKD86KG1pbnxtYXgpLSk/KC4rKS8sXG4gICAgUkVfTEVOR1RIX1VOSVQgICAgID0gLyhlbXxyZW18cHh8Y218bW18aW58cHR8cGMpPyQvLFxuICAgIFJFX1JFU09MVVRJT05fVU5JVCA9IC8oZHBpfGRwY218ZHBweCk/JC87XG5cbmZ1bmN0aW9uIG1hdGNoUXVlcnkobWVkaWFRdWVyeSwgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHBhcnNlUXVlcnkobWVkaWFRdWVyeSkuc29tZShmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgdmFyIGludmVyc2UgPSBxdWVyeS5pbnZlcnNlO1xuXG4gICAgICAgIC8vIEVpdGhlciB0aGUgcGFyc2VkIG9yIHNwZWNpZmllZCBgdHlwZWAgaXMgXCJhbGxcIiwgb3IgdGhlIHR5cGVzIG11c3QgYmVcbiAgICAgICAgLy8gZXF1YWwgZm9yIGEgbWF0Y2guXG4gICAgICAgIHZhciB0eXBlTWF0Y2ggPSBxdWVyeS50eXBlID09PSAnYWxsJyB8fCB2YWx1ZXMudHlwZSA9PT0gcXVlcnkudHlwZTtcblxuICAgICAgICAvLyBRdWl0IGVhcmx5IHdoZW4gYHR5cGVgIGRvZXNuJ3QgbWF0Y2gsIGJ1dCB0YWtlIFwibm90XCIgaW50byBhY2NvdW50LlxuICAgICAgICBpZiAoKHR5cGVNYXRjaCAmJiBpbnZlcnNlKSB8fCAhKHR5cGVNYXRjaCB8fCBpbnZlcnNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGV4cHJlc3Npb25zTWF0Y2ggPSBxdWVyeS5leHByZXNzaW9ucy5ldmVyeShmdW5jdGlvbiAoZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdmFyIGZlYXR1cmUgID0gZXhwcmVzc2lvbi5mZWF0dXJlLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gZXhwcmVzc2lvbi5tb2RpZmllcixcbiAgICAgICAgICAgICAgICBleHBWYWx1ZSA9IGV4cHJlc3Npb24udmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWUgICAgPSB2YWx1ZXNbZmVhdHVyZV07XG5cbiAgICAgICAgICAgIC8vIE1pc3Npbmcgb3IgZmFsc3kgdmFsdWVzIGRvbid0IG1hdGNoLlxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgICAgICAgICAgc3dpdGNoIChmZWF0dXJlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnb3JpZW50YXRpb24nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NjYW4nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZXhwVmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3dpZHRoJzpcbiAgICAgICAgICAgICAgICBjYXNlICdoZWlnaHQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2RldmljZS13aWR0aCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZGV2aWNlLWhlaWdodCc6XG4gICAgICAgICAgICAgICAgICAgIGV4cFZhbHVlID0gdG9QeChleHBWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICAgID0gdG9QeCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAncmVzb2x1dGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGV4cFZhbHVlID0gdG9EcGkoZXhwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICA9IHRvRHBpKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdhc3BlY3QtcmF0aW8nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2RldmljZS1hc3BlY3QtcmF0aW8nOlxuICAgICAgICAgICAgICAgIGNhc2UgLyogRGVwcmVjYXRlZCAqLyAnZGV2aWNlLXBpeGVsLXJhdGlvJzpcbiAgICAgICAgICAgICAgICAgICAgZXhwVmFsdWUgPSB0b0RlY2ltYWwoZXhwVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICA9IHRvRGVjaW1hbCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZ3JpZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29sb3InOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbG9yLWluZGV4JzpcbiAgICAgICAgICAgICAgICBjYXNlICdtb25vY2hyb21lJzpcbiAgICAgICAgICAgICAgICAgICAgZXhwVmFsdWUgPSBwYXJzZUludChleHBWYWx1ZSwgMTApIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlICAgID0gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChtb2RpZmllcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbic6IHJldHVybiB2YWx1ZSA+PSBleHBWYWx1ZTtcbiAgICAgICAgICAgICAgICBjYXNlICdtYXgnOiByZXR1cm4gdmFsdWUgPD0gZXhwVmFsdWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdCAgIDogcmV0dXJuIHZhbHVlID09PSBleHBWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIChleHByZXNzaW9uc01hdGNoICYmICFpbnZlcnNlKSB8fCAoIWV4cHJlc3Npb25zTWF0Y2ggJiYgaW52ZXJzZSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUXVlcnkobWVkaWFRdWVyeSkge1xuICAgIHJldHVybiBtZWRpYVF1ZXJ5LnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uIChxdWVyeSkge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnRyaW0oKTtcblxuICAgICAgICB2YXIgY2FwdHVyZXMgICAgPSBxdWVyeS5tYXRjaChSRV9NRURJQV9RVUVSWSksXG4gICAgICAgICAgICBtb2RpZmllciAgICA9IGNhcHR1cmVzWzFdLFxuICAgICAgICAgICAgdHlwZSAgICAgICAgPSBjYXB0dXJlc1syXSxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zID0gY2FwdHVyZXNbM10gfHwgJycsXG4gICAgICAgICAgICBwYXJzZWQgICAgICA9IHt9O1xuXG4gICAgICAgIHBhcnNlZC5pbnZlcnNlID0gISFtb2RpZmllciAmJiBtb2RpZmllci50b0xvd2VyQ2FzZSgpID09PSAnbm90JztcbiAgICAgICAgcGFyc2VkLnR5cGUgICAgPSB0eXBlID8gdHlwZS50b0xvd2VyQ2FzZSgpIDogJ2FsbCc7XG5cbiAgICAgICAgLy8gU3BsaXQgZXhwcmVzc2lvbnMgaW50byBhIGxpc3QuXG4gICAgICAgIGV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWF0Y2goL1xcKFteXFwpXStcXCkvZykgfHwgW107XG5cbiAgICAgICAgcGFyc2VkLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWFwKGZ1bmN0aW9uIChleHByZXNzaW9uKSB7XG4gICAgICAgICAgICB2YXIgY2FwdHVyZXMgPSBleHByZXNzaW9uLm1hdGNoKFJFX01RX0VYUFJFU1NJT04pLFxuICAgICAgICAgICAgICAgIGZlYXR1cmUgID0gY2FwdHVyZXNbMV0udG9Mb3dlckNhc2UoKS5tYXRjaChSRV9NUV9GRUFUVVJFKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogZmVhdHVyZVsxXSxcbiAgICAgICAgICAgICAgICBmZWF0dXJlIDogZmVhdHVyZVsyXSxcbiAgICAgICAgICAgICAgICB2YWx1ZSAgIDogY2FwdHVyZXNbMl1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfSk7XG59XG5cbi8vIC0tIFV0aWxpdGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHRvRGVjaW1hbChyYXRpbykge1xuICAgIHZhciBkZWNpbWFsID0gTnVtYmVyKHJhdGlvKSxcbiAgICAgICAgbnVtYmVycztcblxuICAgIGlmICghZGVjaW1hbCkge1xuICAgICAgICBudW1iZXJzID0gcmF0aW8ubWF0Y2goL14oXFxkKylcXHMqXFwvXFxzKihcXGQrKSQvKTtcbiAgICAgICAgZGVjaW1hbCA9IG51bWJlcnNbMV0gLyBudW1iZXJzWzJdO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNpbWFsO1xufVxuXG5mdW5jdGlvbiB0b0RwaShyZXNvbHV0aW9uKSB7XG4gICAgdmFyIHZhbHVlID0gcGFyc2VGbG9hdChyZXNvbHV0aW9uKSxcbiAgICAgICAgdW5pdHMgPSBTdHJpbmcocmVzb2x1dGlvbikubWF0Y2goUkVfUkVTT0xVVElPTl9VTklUKVsxXTtcblxuICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgY2FzZSAnZHBjbSc6IHJldHVybiB2YWx1ZSAvIDIuNTQ7XG4gICAgICAgIGNhc2UgJ2RwcHgnOiByZXR1cm4gdmFsdWUgKiA5NjtcbiAgICAgICAgZGVmYXVsdCAgICA6IHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRvUHgobGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gcGFyc2VGbG9hdChsZW5ndGgpLFxuICAgICAgICB1bml0cyA9IFN0cmluZyhsZW5ndGgpLm1hdGNoKFJFX0xFTkdUSF9VTklUKVsxXTtcblxuICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgY2FzZSAnZW0nIDogcmV0dXJuIHZhbHVlICogMTY7XG4gICAgICAgIGNhc2UgJ3JlbSc6IHJldHVybiB2YWx1ZSAqIDE2O1xuICAgICAgICBjYXNlICdjbScgOiByZXR1cm4gdmFsdWUgKiA5NiAvIDIuNTQ7XG4gICAgICAgIGNhc2UgJ21tJyA6IHJldHVybiB2YWx1ZSAqIDk2IC8gMi41NCAvIDEwO1xuICAgICAgICBjYXNlICdpbicgOiByZXR1cm4gdmFsdWUgKiA5NjtcbiAgICAgICAgY2FzZSAncHQnIDogcmV0dXJuIHZhbHVlICogNzI7XG4gICAgICAgIGNhc2UgJ3BjJyA6IHJldHVybiB2YWx1ZSAqIDcyIC8gMTI7XG4gICAgICAgIGRlZmF1bHQgICA6IHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdGF0aWNNYXRjaCA9IHJlcXVpcmUoJ2Nzcy1tZWRpYXF1ZXJ5JykubWF0Y2g7XG52YXIgZHluYW1pY01hdGNoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubWF0Y2hNZWRpYSA6IG51bGw7XG5cbi8vIG91ciBmYWtlIE1lZGlhUXVlcnlMaXN0XG5mdW5jdGlvbiBNcWwocXVlcnksIHZhbHVlcywgZm9yY2VTdGF0aWMpe1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBtcWw7XG5cbiAgLy8gbWF0Y2hNZWRpYSB3aWxsIHJldHVybiBudWxsIGluIEZGIHdoZW4gaXQncyBjYWxsZWQgaW4gYSBoaWRkZW4gaWZyYW1lXG4gIC8vIHJlZjogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzEyMzMwNTY4XG4gIGlmKGR5bmFtaWNNYXRjaCAmJiAhZm9yY2VTdGF0aWMpIG1xbCA9IGR5bmFtaWNNYXRjaC5jYWxsKHdpbmRvdywgcXVlcnkpO1xuXG4gIGlmIChtcWwpIHtcbiAgICB0aGlzLm1hdGNoZXMgPSBtcWwubWF0Y2hlcztcbiAgICB0aGlzLm1lZGlhID0gbXFsLm1lZGlhO1xuICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgdGltZSBpdCBtYWtlcyBzZW5zZSB0byByZW1vdmUgdGhpcyBsaXN0ZW5lcj9cbiAgICBtcWwuYWRkTGlzdGVuZXIodXBkYXRlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1hdGNoZXMgPSBzdGF0aWNNYXRjaChxdWVyeSwgdmFsdWVzKTtcbiAgICB0aGlzLm1lZGlhID0gcXVlcnk7XG4gIH1cblxuICB0aGlzLmFkZExpc3RlbmVyID0gYWRkTGlzdGVuZXI7XG4gIHRoaXMucmVtb3ZlTGlzdGVuZXIgPSByZW1vdmVMaXN0ZW5lcjtcbiAgdGhpcy5kaXNwb3NlID0gZGlzcG9zZTtcblxuICBmdW5jdGlvbiBhZGRMaXN0ZW5lcihsaXN0ZW5lcil7XG4gICAgaWYobXFsKXtcbiAgICAgIG1xbC5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpe1xuICAgIGlmKG1xbCl7XG4gICAgICBtcWwucmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHVwZGF0ZSBvdXJzZWx2ZXMhXG4gIGZ1bmN0aW9uIHVwZGF0ZShldnQpe1xuICAgIHNlbGYubWF0Y2hlcyA9IGV2dC5tYXRjaGVzO1xuICAgIHNlbGYubWVkaWEgPSBldnQubWVkaWE7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwb3NlKCl7XG4gICAgaWYobXFsKXtcbiAgICAgIG1xbC5yZW1vdmVMaXN0ZW5lcih1cGRhdGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaE1lZGlhKHF1ZXJ5LCB2YWx1ZXMsIGZvcmNlU3RhdGljKXtcbiAgcmV0dXJuIG5ldyBNcWwocXVlcnksIHZhbHVlcywgZm9yY2VTdGF0aWMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoTWVkaWE7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby12YXIsIHByZWZlci10ZW1wbGF0ZSAqL1xudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvW0EtWl0vZ1xudmFyIG1zUGF0dGVybiA9IC9ebXMtL1xudmFyIGNhY2hlID0ge31cblxuZnVuY3Rpb24gdG9IeXBoZW5Mb3dlcihtYXRjaCkge1xuICByZXR1cm4gJy0nICsgbWF0Y2gudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUobmFtZSkge1xuICBpZiAoY2FjaGUuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICByZXR1cm4gY2FjaGVbbmFtZV1cbiAgfVxuXG4gIHZhciBoTmFtZSA9IG5hbWUucmVwbGFjZSh1cHBlcmNhc2VQYXR0ZXJuLCB0b0h5cGhlbkxvd2VyKVxuICByZXR1cm4gKGNhY2hlW25hbWVdID0gbXNQYXR0ZXJuLnRlc3QoaE5hbWUpID8gJy0nICsgaE5hbWUgOiBoTmFtZSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgaHlwaGVuYXRlU3R5bGVOYW1lXG4iLCJmdW5jdGlvbiBzaGFsbG93RXF1YWxBcnJheXMoYXJyQSwgYXJyQikge1xuICBpZiAoYXJyQSA9PT0gYXJyQikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICghYXJyQSB8fCAhYXJyQikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBsZW4gPSBhcnJBLmxlbmd0aDtcbiAgaWYgKGFyckIubGVuZ3RoICE9PSBsZW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJBW2ldICE9PSBhcnJCW2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaGFsbG93RXF1YWxPYmplY3RzKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iakEgPT09IG9iakIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIW9iakEgfHwgIW9iakIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgY29uc3QgbGVuID0gYUtleXMubGVuZ3RoO1xuICBpZiAoYktleXMubGVuZ3RoICE9PSBsZW4pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGFLZXlzW2ldO1xuICAgIGlmIChvYmpBW2tleV0gIT09IG9iakJba2V5XSB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iakIsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhLCBiKSB7XG4gIGNvbnN0IGFJc0FyciA9IEFycmF5LmlzQXJyYXkoYSk7XG4gIGNvbnN0IGJJc0FyciA9IEFycmF5LmlzQXJyYXkoYik7XG4gIGlmIChhSXNBcnIgIT09IGJJc0Fycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYUlzQXJyICYmIGJJc0Fycikge1xuICAgIHJldHVybiBzaGFsbG93RXF1YWxBcnJheXMoYSwgYik7XG4gIH1cbiAgcmV0dXJuIHNoYWxsb3dFcXVhbE9iamVjdHMoYSwgYik7XG59XG5cbmV4cG9ydCB7IHNoYWxsb3dFcXVhbCwgc2hhbGxvd0VxdWFsQXJyYXlzLCBzaGFsbG93RXF1YWxPYmplY3RzIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tb2Rlcm4ubWpzLm1hcFxuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZUNvbnRleHQsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1hdGNoTWVkaWEgZnJvbSAnbWF0Y2htZWRpYXF1ZXJ5JztcbmltcG9ydCBoeXBoZW5hdGUgZnJvbSAnaHlwaGVuYXRlLXN0eWxlLW5hbWUnO1xuaW1wb3J0IHsgc2hhbGxvd0VxdWFsT2JqZWN0cyB9IGZyb20gJ3NoYWxsb3ctZXF1YWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuY29uc3Qgc3RyaW5nT3JOdW1iZXIgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSk7XG4vLyBtZWRpYSB0eXBlc1xuY29uc3QgdHlwZXMgPSB7XG4gICAgYWxsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBncmlkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhdXJhbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgYnJhaWxsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGFuZGhlbGQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHByaW50OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwcm9qZWN0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzY3JlZW46IFByb3BUeXBlcy5ib29sLFxuICAgIHR0eTogUHJvcFR5cGVzLmJvb2wsXG4gICAgdHY6IFByb3BUeXBlcy5ib29sLFxuICAgIGVtYm9zc2VkOiBQcm9wVHlwZXMuYm9vbFxufTtcbi8vIHByb3BlcnRpZXMgdGhhdCBtYXRjaCBtZWRpYSBxdWVyaWVzXG5jb25zdCBtYXRjaGVycyA9IHtcbiAgICBvcmllbnRhdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsncG9ydHJhaXQnLCAnbGFuZHNjYXBlJ10pLFxuICAgIHNjYW46IFByb3BUeXBlcy5vbmVPZihbJ3Byb2dyZXNzaXZlJywgJ2ludGVybGFjZSddKSxcbiAgICBhc3BlY3RSYXRpbzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXZpY2VBc3BlY3RSYXRpbzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBoZWlnaHQ6IHN0cmluZ09yTnVtYmVyLFxuICAgIGRldmljZUhlaWdodDogc3RyaW5nT3JOdW1iZXIsXG4gICAgd2lkdGg6IHN0cmluZ09yTnVtYmVyLFxuICAgIGRldmljZVdpZHRoOiBzdHJpbmdPck51bWJlcixcbiAgICBjb2xvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3JJbmRleDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbW9ub2Nocm9tZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgcmVzb2x1dGlvbjogc3RyaW5nT3JOdW1iZXIsXG4gICAgdHlwZTogT2JqZWN0LmtleXModHlwZXMpXG59O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuY29uc3QgeyB0eXBlLCAuLi5mZWF0dXJlTWF0Y2hlcnMgfSA9IG1hdGNoZXJzO1xuLy8gbWVkaWEgZmVhdHVyZXNcbmNvbnN0IGZlYXR1cmVzID0ge1xuICAgIG1pbkFzcGVjdFJhdGlvOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1heEFzcGVjdFJhdGlvOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1pbkRldmljZUFzcGVjdFJhdGlvOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1heERldmljZUFzcGVjdFJhdGlvOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1pbkhlaWdodDogc3RyaW5nT3JOdW1iZXIsXG4gICAgbWF4SGVpZ2h0OiBzdHJpbmdPck51bWJlcixcbiAgICBtaW5EZXZpY2VIZWlnaHQ6IHN0cmluZ09yTnVtYmVyLFxuICAgIG1heERldmljZUhlaWdodDogc3RyaW5nT3JOdW1iZXIsXG4gICAgbWluV2lkdGg6IHN0cmluZ09yTnVtYmVyLFxuICAgIG1heFdpZHRoOiBzdHJpbmdPck51bWJlcixcbiAgICBtaW5EZXZpY2VXaWR0aDogc3RyaW5nT3JOdW1iZXIsXG4gICAgbWF4RGV2aWNlV2lkdGg6IHN0cmluZ09yTnVtYmVyLFxuICAgIG1pbkNvbG9yOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heENvbG9yOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1pbkNvbG9ySW5kZXg6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWF4Q29sb3JJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBtaW5Nb25vY2hyb21lOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heE1vbm9jaHJvbWU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgbWluUmVzb2x1dGlvbjogc3RyaW5nT3JOdW1iZXIsXG4gICAgbWF4UmVzb2x1dGlvbjogc3RyaW5nT3JOdW1iZXIsXG4gICAgLi4uZmVhdHVyZU1hdGNoZXJzXG59O1xuY29uc3QgYWxsID0geyAuLi50eXBlcywgLi4uZmVhdHVyZXMgfTtcbnZhciBtcSA9IHtcbiAgICBhbGw6IGFsbCxcbiAgICB0eXBlczogdHlwZXMsXG4gICAgbWF0Y2hlcnM6IG1hdGNoZXJzLFxuICAgIGZlYXR1cmVzOiBmZWF0dXJlc1xufTtcblxuY29uc3QgbmVnYXRlID0gKGNvbmQpID0+IGBub3QgJHtjb25kfWA7XG5jb25zdCBrZXlWYWwgPSAoaywgdikgPT4ge1xuICAgIGNvbnN0IHJlYWxLZXkgPSBoeXBoZW5hdGUoayk7XG4gICAgLy8gcHggc2hvcnRoYW5kXG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgICB2ID0gYCR7dn1weGA7XG4gICAgfVxuICAgIGlmICh2ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiByZWFsS2V5O1xuICAgIH1cbiAgICBpZiAodiA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5lZ2F0ZShyZWFsS2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIGAoJHtyZWFsS2V5fTogJHt2fSlgO1xufTtcbmNvbnN0IGpvaW4gPSAoY29uZHMpID0+IGNvbmRzLmpvaW4oJyBhbmQgJyk7XG5jb25zdCB0b1F1ZXJ5ID0gKG9iaikgPT4ge1xuICAgIGNvbnN0IHJ1bGVzID0gW107XG4gICAgT2JqZWN0LmtleXMobXEuYWxsKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGNvbnN0IHYgPSBvYmpba107XG4gICAgICAgIGlmICh2ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJ1bGVzLnB1c2goa2V5VmFsKGssIHYpKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBqb2luKHJ1bGVzKTtcbn07XG5cbmNvbnN0IENvbnRleHQgPSBjcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5cbmNvbnN0IG1ha2VRdWVyeSA9IChzZXR0aW5ncykgPT4gc2V0dGluZ3MucXVlcnkgfHwgdG9RdWVyeShzZXR0aW5ncyk7XG5jb25zdCBoeXBoZW5hdGVLZXlzID0gKG9iaikgPT4ge1xuICAgIGlmICghb2JqKVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgocmVzdWx0LCBrZXkpID0+IHtcbiAgICAgICAgcmVzdWx0W2h5cGhlbmF0ZShrZXkpXSA9IG9ialtrZXldO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KTtcbn07XG5jb25zdCB1c2VJc1VwZGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCByZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50O1xufTtcbmNvbnN0IHVzZURldmljZSA9IChkZXZpY2VGcm9tUHJvcHMpID0+IHtcbiAgICBjb25zdCBkZXZpY2VGcm9tQ29udGV4dCA9IHVzZUNvbnRleHQoQ29udGV4dCk7XG4gICAgY29uc3QgZ2V0RGV2aWNlID0gKCkgPT4gaHlwaGVuYXRlS2V5cyhkZXZpY2VGcm9tUHJvcHMpIHx8IGh5cGhlbmF0ZUtleXMoZGV2aWNlRnJvbUNvbnRleHQpO1xuICAgIGNvbnN0IFtkZXZpY2UsIHNldERldmljZV0gPSB1c2VTdGF0ZShnZXREZXZpY2UpO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0RldmljZSA9IGdldERldmljZSgpO1xuICAgICAgICBpZiAoIXNoYWxsb3dFcXVhbE9iamVjdHMoZGV2aWNlLCBuZXdEZXZpY2UpKSB7XG4gICAgICAgICAgICBzZXREZXZpY2UobmV3RGV2aWNlKTtcbiAgICAgICAgfVxuICAgIH0sIFtkZXZpY2VGcm9tUHJvcHMsIGRldmljZUZyb21Db250ZXh0XSk7XG4gICAgcmV0dXJuIGRldmljZTtcbn07XG5jb25zdCB1c2VRdWVyeSA9IChzZXR0aW5ncykgPT4ge1xuICAgIGNvbnN0IGdldFF1ZXJ5ID0gKCkgPT4gbWFrZVF1ZXJ5KHNldHRpbmdzKTtcbiAgICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlKGdldFF1ZXJ5KTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdRdWVyeSA9IGdldFF1ZXJ5KCk7XG4gICAgICAgIGlmIChxdWVyeSAhPT0gbmV3UXVlcnkpIHtcbiAgICAgICAgICAgIHNldFF1ZXJ5KG5ld1F1ZXJ5KTtcbiAgICAgICAgfVxuICAgIH0sIFtzZXR0aW5nc10pO1xuICAgIHJldHVybiBxdWVyeTtcbn07XG5jb25zdCB1c2VNYXRjaE1lZGlhID0gKHF1ZXJ5LCBkZXZpY2UpID0+IHtcbiAgICBjb25zdCBnZXRNYXRjaE1lZGlhID0gKCkgPT4gbWF0Y2hNZWRpYShxdWVyeSwgZGV2aWNlIHx8IHt9LCAhIWRldmljZSk7XG4gICAgY29uc3QgW21xLCBzZXRNcV0gPSB1c2VTdGF0ZShnZXRNYXRjaE1lZGlhKTtcbiAgICBjb25zdCBpc1VwZGF0ZSA9IHVzZUlzVXBkYXRlKCk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGlzVXBkYXRlKSB7XG4gICAgICAgICAgICAvLyBza2lwIG9uIG1vdW50aW5nLCBpdCBoYXMgYWxyZWFkeSBiZWVuIHNldFxuICAgICAgICAgICAgY29uc3QgbmV3TXEgPSBnZXRNYXRjaE1lZGlhKCk7XG4gICAgICAgICAgICBzZXRNcShuZXdNcSk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuZXdNcSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdNcS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFtxdWVyeSwgZGV2aWNlXSk7XG4gICAgcmV0dXJuIG1xO1xufTtcbmNvbnN0IHVzZU1hdGNoZXMgPSAobWVkaWFRdWVyeSkgPT4ge1xuICAgIGNvbnN0IFttYXRjaGVzLCBzZXRNYXRjaGVzXSA9IHVzZVN0YXRlKG1lZGlhUXVlcnkubWF0Y2hlcyk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlTWF0Y2hlcyA9IChldikgPT4ge1xuICAgICAgICAgICAgc2V0TWF0Y2hlcyhldi5tYXRjaGVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbWVkaWFRdWVyeS5hZGRMaXN0ZW5lcih1cGRhdGVNYXRjaGVzKTtcbiAgICAgICAgc2V0TWF0Y2hlcyhtZWRpYVF1ZXJ5Lm1hdGNoZXMpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgbWVkaWFRdWVyeS5yZW1vdmVMaXN0ZW5lcih1cGRhdGVNYXRjaGVzKTtcbiAgICAgICAgfTtcbiAgICB9LCBbbWVkaWFRdWVyeV0pO1xuICAgIHJldHVybiBtYXRjaGVzO1xufTtcbmNvbnN0IHVzZU1lZGlhUXVlcnkgPSAoc2V0dGluZ3MsIGRldmljZSwgb25DaGFuZ2UpID0+IHtcbiAgICBjb25zdCBkZXZpY2VTZXR0aW5ncyA9IHVzZURldmljZShkZXZpY2UpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdXNlUXVlcnkoc2V0dGluZ3MpO1xuICAgIGlmICghcXVlcnkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBvciBtaXNzaW5nIE1lZGlhUXVlcnkhJyk7XG4gICAgY29uc3QgbXEgPSB1c2VNYXRjaE1lZGlhKHF1ZXJ5LCBkZXZpY2VTZXR0aW5ncyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHVzZU1hdGNoZXMobXEpO1xuICAgIGNvbnN0IGlzVXBkYXRlID0gdXNlSXNVcGRhdGUoKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaXNVcGRhdGUgJiYgb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKG1hdGNoZXMpO1xuICAgICAgICB9XG4gICAgfSwgW21hdGNoZXNdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAobXEpIHtcbiAgICAgICAgICAgIG1xLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbn07XG5cbi8vIFJlYWN0Tm9kZSBhbmQgUmVhY3RFbGVtZW50IHR5cGluZ3MgYXJlIGEgbGl0dGxlIGZ1bmt5IGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudHMsIHNvIHRoZSBSZWFjdEVsZW1lbnQgY2FzdCBpcyBuZWVkZWQgb24gdGhlIHJldHVyblxuY29uc3QgTWVkaWFRdWVyeSA9ICh7IGNoaWxkcmVuLCBkZXZpY2UsIG9uQ2hhbmdlLCAuLi5zZXR0aW5ncyB9KSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHVzZU1lZGlhUXVlcnkoc2V0dGluZ3MsIGRldmljZSwgb25DaGFuZ2UpO1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuKG1hdGNoZXMpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlcyA/IGNoaWxkcmVuIDogbnVsbDtcbn07XG5cbmV4cG9ydCB7IENvbnRleHQsIE1lZGlhUXVlcnkgYXMgZGVmYXVsdCwgdG9RdWVyeSwgdXNlTWVkaWFRdWVyeSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgeyB1c2VNZWRpYVF1ZXJ5IH0gZnJvbSBcInJlYWN0LXJlc3BvbnNpdmVcIjtcbmltcG9ydCB7IFJXRE1vZGUgfSBmcm9tIFwiQG1vZGVscy91dGlsaXR5Lm1vZGVsLnRzXCI7XG5cbmV4cG9ydCBjb25zdCB1c2VSV0RNb2RlID0gKCkgPT4ge1xuICAvLyBjb25zdCBpc0Rlc2t0b3BPckxhcHRvcCA9IHVzZU1lZGlhUXVlcnkoe1xuICAvLyAgIHF1ZXJ5OiAnKG1pbi13aWR0aDogMTIyNHB4KSdcbiAgLy8gfSlcblxuICBjb25zdCBpc1RhYmxldE9yTW9iaWxlID0gdXNlTWVkaWFRdWVyeSh7IHF1ZXJ5OiBcIihtYXgtd2lkdGg6IDc2OHB4KVwiIH0pO1xuXG4gIHJldHVybiB7IG1vZGU6IGlzVGFibGV0T3JNb2JpbGUgPyBSV0RNb2RlLk1PQklMRSA6IFJXRE1vZGUuREVTS1RPUCB9O1xufTtcbiJdLCJuYW1lcyI6WyJjc3NNZWRpYXF1ZXJ5IiwibWF0Y2hRdWVyeSIsInBhcnNlUXVlcnkiLCJSRV9NRURJQV9RVUVSWSIsIlJFX01RX0VYUFJFU1NJT04iLCJSRV9NUV9GRUFUVVJFIiwiUkVfTEVOR1RIX1VOSVQiLCJSRV9SRVNPTFVUSU9OX1VOSVQiLCJtZWRpYVF1ZXJ5IiwidmFsdWVzIiwicXVlcnkiLCJpbnZlcnNlIiwidHlwZU1hdGNoIiwiZXhwcmVzc2lvbnNNYXRjaCIsImV4cHJlc3Npb24iLCJmZWF0dXJlIiwibW9kaWZpZXIiLCJleHBWYWx1ZSIsInZhbHVlIiwidG9QeCIsInRvRHBpIiwidG9EZWNpbWFsIiwiY2FwdHVyZXMiLCJ0eXBlIiwiZXhwcmVzc2lvbnMiLCJwYXJzZWQiLCJyYXRpbyIsImRlY2ltYWwiLCJudW1iZXJzIiwicmVzb2x1dGlvbiIsInVuaXRzIiwibGVuZ3RoIiwic3RhdGljTWF0Y2giLCJyZXF1aXJlJCQwIiwiZHluYW1pY01hdGNoIiwiTXFsIiwiZm9yY2VTdGF0aWMiLCJzZWxmIiwibXFsIiwidXBkYXRlIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImRpc3Bvc2UiLCJsaXN0ZW5lciIsImV2dCIsIm1hdGNoTWVkaWEiLCJtYXRjaG1lZGlhcXVlcnkiLCJ1cHBlcmNhc2VQYXR0ZXJuIiwibXNQYXR0ZXJuIiwiY2FjaGUiLCJ0b0h5cGhlbkxvd2VyIiwibWF0Y2giLCJoeXBoZW5hdGVTdHlsZU5hbWUiLCJuYW1lIiwiaE5hbWUiLCJzaGFsbG93RXF1YWxPYmplY3RzIiwib2JqQSIsIm9iakIiLCJhS2V5cyIsImJLZXlzIiwibGVuIiwiaSIsImtleSIsInN0cmluZ09yTnVtYmVyIiwiUHJvcFR5cGVzIiwidHlwZXMiLCJtYXRjaGVycyIsImZlYXR1cmVNYXRjaGVycyIsImZlYXR1cmVzIiwiYWxsIiwibXEiLCJuZWdhdGUiLCJjb25kIiwia2V5VmFsIiwiayIsInYiLCJyZWFsS2V5IiwiaHlwaGVuYXRlIiwiam9pbiIsImNvbmRzIiwidG9RdWVyeSIsIm9iaiIsInJ1bGVzIiwiQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJtYWtlUXVlcnkiLCJzZXR0aW5ncyIsImh5cGhlbmF0ZUtleXMiLCJyZXN1bHQiLCJ1c2VJc1VwZGF0ZSIsInJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZURldmljZSIsImRldmljZUZyb21Qcm9wcyIsImRldmljZUZyb21Db250ZXh0IiwidXNlQ29udGV4dCIsImdldERldmljZSIsImRldmljZSIsInNldERldmljZSIsInVzZVN0YXRlIiwibmV3RGV2aWNlIiwidXNlUXVlcnkiLCJnZXRRdWVyeSIsInNldFF1ZXJ5IiwibmV3UXVlcnkiLCJ1c2VNYXRjaE1lZGlhIiwiZ2V0TWF0Y2hNZWRpYSIsInNldE1xIiwiaXNVcGRhdGUiLCJuZXdNcSIsInVzZU1hdGNoZXMiLCJtYXRjaGVzIiwic2V0TWF0Y2hlcyIsInVwZGF0ZU1hdGNoZXMiLCJldiIsInVzZU1lZGlhUXVlcnkiLCJvbkNoYW5nZSIsImRldmljZVNldHRpbmdzIiwidXNlUldETW9kZSIsIlJXRE1vZGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBUWFBLEVBQUEsUUFBR0M7QUFDSEQsRUFBQSxRQUFHRTtBQUloQixJQUFJQyxJQUFxQix1REFDckJDLElBQXFCLGlEQUNyQkMsSUFBcUIsd0JBQ3JCQyxJQUFxQixnQ0FDckJDLElBQXFCO0FBRXpCLFNBQVNOLEVBQVdPLEdBQVlDLEdBQVE7QUFDcEMsU0FBT1AsRUFBV00sQ0FBVSxFQUFFLEtBQUssU0FBVUUsR0FBTztBQUNoRCxRQUFJQyxJQUFVRCxFQUFNLFNBSWhCRSxJQUFZRixFQUFNLFNBQVMsU0FBU0QsRUFBTyxTQUFTQyxFQUFNO0FBRzlELFFBQUtFLEtBQWFELEtBQVksRUFBRUMsS0FBYUQ7QUFDekMsYUFBTztBQUdYLFFBQUlFLElBQW1CSCxFQUFNLFlBQVksTUFB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d0YsS0FBVSxDQUFFLEdBQUUsQ0FBQyxDQUFDQSxDQUFNLEdBQzlELENBQUM1QixHQUFJc0MsQ0FBSyxJQUFJUixFQUFTTyxDQUFhLEdBQ3BDRSxJQUFXcEIsRUFBYTtBQUM5QixTQUFBRyxFQUFVLE1BQU07QUFDWixRQUFJaUIsR0FBVTtBQUVWLFlBQU1DLElBQVFILEVBQWU7QUFDN0IsYUFBQUMsRUFBTUUsQ0FBSyxHQUNKLE1BQU07QUFDVCxRQUFJQSxLQUNBQSxFQUFNLFFBQVM7QUFBQSxNQUV0QjtBQUFBLElBQ2I7QUFBQSxFQUNBLEdBQU8sQ0FBQ3BHLEdBQU93RixDQUFNLENBQUMsR0FDWDVCO0FBQ1gsR0FDTXlDLEtBQWEsQ0FBQ3ZHLE1BQWU7QUFDL0IsUUFBTSxDQUFDd0csR0FBU0MsQ0FBVSxJQUFJYixFQUFTNUYsRUFBVyxPQUFPO0FBQ3pELFNBQUFvRixFQUFVLE1BQU07QUFDWixVQUFNc0IsSUFBZ0IsQ0FBQ0MsTUFBTztBQUMxQixNQUFBRixFQUFXRSxFQUFHLE9BQU87QUFBQSxJQUN4QjtBQUNELFdBQUEzRyxFQUFXLFlBQVkwRyxDQUFhLEdBQ3BDRCxFQUFXekcsRUFBVyxPQUFPLEdBQ3RCLE1BQU07QUFDVCxNQUFBQSxFQUFXLGVBQWUwRyxDQUFhO0FBQUEsSUFDMUM7QUFBQSxFQUNULEdBQU8sQ0FBQzFHLENBQVUsQ0FBQyxHQUNSd0c7QUFDWCxHQUNNSSxLQUFnQixDQUFDOUIsR0FBVVksR0FBUW1CLE1BQWE7QUFDbEQsUUFBTUMsSUFBaUJ6QixHQUFVSyxDQUFNLEdBQ2pDeEYsSUFBUTRGLEdBQVNoQixDQUFRO0FBQy9CLE1BQUksQ0FBQzVFO0FBQ0QsVUFBTSxJQUFJLE1BQU0sZ0NBQWdDO0FBQ3BELFFBQU00RCxJQUFLb0MsR0FBY2hHLEdBQU80RyxDQUFjLEdBQ3hDTixJQUFVRCxHQUFXekMsQ0FBRSxHQUN2QnVDLElBQVdwQixFQUFhO0FBQzlCLFNBQUFHLEVBQVUsTUFBTTtBQUNaLElBQUlpQixLQUFZUSxLQUNaQSxFQUFTTCxDQUFPO0FBQUEsRUFFNUIsR0FBTyxDQUFDQSxDQUFPLENBQUMsR0FDWnBCLEVBQVUsTUFBTSxNQUFNO0FBQ2xCLElBQUl0QixLQUNBQSxFQUFHLFFBQVM7QUFBQSxFQUVuQixHQUFFLEVBQUUsR0FDRTBDO0FBQ1gsR0M1TGFPLEtBQWEsT0FPakIsRUFBRSxNQUZnQkgsR0FBYyxFQUFFLE9BQU8sc0JBQXNCLElBRXBDSSxFQUFRLFNBQVNBLEVBQVEsUUFBUTsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0XX0=\n","import { jsxs as t, Fragment as s, jsx as a } from \"react/jsx-runtime\";\nconst l = (e, n) => {\n if (!e)\n return null;\n const r = e.split(/[[\\]]/);\n return r.length !== 3 ? e : /* @__PURE__ */ t(s, { children: [\n r[0],\n n ? /* @__PURE__ */ a(\"a\", { href: n, target: \"_blank\", rel: \"noreferrer\", className: \"link\", children: r[1] }) : r[1],\n r[2]\n ] });\n};\nexport {\n l as useLabelUrl\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxhYmVsLXVybC5ob29rLmpzIiwic291cmNlcyI6WyIuLi8uLi9saWIvaG9va3MvdXNlLWxhYmVsLXVybC5ob29rLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdXNlTGFiZWxVcmwgPSAobGFiZWw6IHN0cmluZywgdXJsPzogc3RyaW5nKSA9PiB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBkYXRhID0gbGFiZWwuc3BsaXQoL1tbXFxdXS8pO1xuICBpZiAoZGF0YS5sZW5ndGggIT09IDMpIHtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAge2RhdGFbMF19XG4gICAgICB7dXJsID8gKFxuICAgICAgICA8YSBocmVmPXt1cmx9IHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vcmVmZXJyZXJcIiBjbGFzc05hbWU9XCJsaW5rXCI+XG4gICAgICAgICAge2RhdGFbMV19XG4gICAgICAgIDwvYT5cbiAgICAgICkgOiAoXG4gICAgICAgIGRhdGFbMV1cbiAgICAgICl9XG4gICAgICB7ZGF0YVsyXX1cbiAgICA8Lz5cbiAgKTtcbn07XG4iXSwibmFtZXMiOlsidXNlTGFiZWxVcmwiLCJsYWJlbCIsInVybCIsImRhdGEiLCJqc3hzIiwiRnJhZ21lbnQiLCJqc3giXSwibWFwcGluZ3MiOiI7QUFBYSxNQUFBQSxJQUFjLENBQUNDLEdBQWVDLE1BQWlCO0FBQzFELE1BQUksQ0FBQ0Q7QUFDSSxXQUFBO0FBRUgsUUFBQUUsSUFBT0YsRUFBTSxNQUFNLE9BQU87QUFDNUIsU0FBQUUsRUFBSyxXQUFXLElBQ1hGLElBSUosZ0JBQUFHLEVBQUFDLEdBQUEsRUFBQSxVQUFBO0FBQUEsSUFBQUYsRUFBSyxDQUFDO0FBQUEsSUFDTkQsSUFDRSxnQkFBQUksRUFBQSxLQUFBLEVBQUUsTUFBTUosR0FBSyxRQUFPLFVBQVMsS0FBSSxjQUFhLFdBQVUsUUFDdEQsVUFBS0MsRUFBQSxDQUFDLEdBQ1QsSUFFQUEsRUFBSyxDQUFDO0FBQUEsSUFFUEEsRUFBSyxDQUFDO0FBQUEsRUFBQSxHQUNUO0FBRUo7In0=\n","import { jsx as e, jsxs as d } from \"react/jsx-runtime\";\nimport '../../assets/action-status.css';/* empty css */\nconst p = ({\n title: t,\n subtitle: a,\n iconClass: l,\n panelClass: n,\n confirmButtonAction: r,\n confirmButtonText: c,\n cancelButtonAction: s,\n cancelButtonText: i\n}) => /* @__PURE__ */ e(\"div\", { className: \"layout-wrapper\", children: /* @__PURE__ */ e(\"div\", { className: `layout-panel action-panel ${n}`, children: /* @__PURE__ */ e(\"div\", { className: \"d-flex row justify-content-center contact-form-wrapper mx-4 w-100\", children: /* @__PURE__ */ d(\"div\", { className: \"d-flex flex-column py-4 text-center\", children: [\n t && /* @__PURE__ */ e(\"div\", { className: \"title-level-1\", children: t }),\n /* @__PURE__ */ e(\n \"div\",\n {\n className: `subtitle-level-1 pb-3 ${t ? \"pt-3\" : \"\"}`,\n dangerouslySetInnerHTML: { __html: a }\n }\n ),\n /* @__PURE__ */ e(\"div\", { children: /* @__PURE__ */ e(\"i\", { className: `fal fa-5x text-primary py-4 ${l}` }) }),\n /* @__PURE__ */ e(\"div\", { children: /* @__PURE__ */ e(\n \"button\",\n {\n className: \"btn btn-primary mt-2\",\n onClick: r,\n children: c\n }\n ) }),\n /* @__PURE__ */ e(\"div\", { className: \"pt-3 fs-0-875\", children: /* @__PURE__ */ e(\n \"button\",\n {\n type: \"button\",\n className: \"btn save-btn w-100 text-primary\",\n onClick: s,\n children: i\n }\n ) })\n] }) }) }) });\nexport {\n p as default\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jb21wb25lbnRzL2FjdGlvbi1zdGF0dXMvYWN0aW9uLXN0YXR1cy5jb21wb25lbnQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vYWN0aW9uLXN0YXR1cy5jb21wb25lbnQuc2Nzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICB0aXRsZT86IHN0cmluZztcbiAgc3VidGl0bGU6IHN0cmluZztcbiAgaWNvbkNsYXNzOiBzdHJpbmc7XG4gIHBhbmVsQ2xhc3M/OiBzdHJpbmc7XG4gIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmc7XG4gIGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZztcbiAgY29uZmlybUJ1dHRvbkFjdGlvbjogKCkgPT4gYW55O1xuICBjYW5jZWxCdXR0b25BY3Rpb246ICgpID0+IGFueTtcbn07XG5cbmNvbnN0IEFjdGlvblN0YXR1c0NvbXBvbmVudDogUmVhY3QuRkM8UHJvcHM+ID0gKHtcbiAgdGl0bGUsXG4gIHN1YnRpdGxlLFxuICBpY29uQ2xhc3MsXG4gIHBhbmVsQ2xhc3MsXG4gIGNvbmZpcm1CdXR0b25BY3Rpb24sXG4gIGNvbmZpcm1CdXR0b25UZXh0LFxuICBjYW5jZWxCdXR0b25BY3Rpb24sXG4gIGNhbmNlbEJ1dHRvblRleHQsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJsYXlvdXQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2BsYXlvdXQtcGFuZWwgYWN0aW9uLXBhbmVsICR7cGFuZWxDbGFzc31gfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJkLWZsZXggcm93IGp1c3RpZnktY29udGVudC1jZW50ZXIgY29udGFjdC1mb3JtLXdyYXBwZXIgbXgtNCB3LTEwMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZC1mbGV4IGZsZXgtY29sdW1uIHB5LTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIHt0aXRsZSAmJiA8ZGl2IGNsYXNzTmFtZT1cInRpdGxlLWxldmVsLTFcIj57dGl0bGV9PC9kaXY+fVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2BzdWJ0aXRsZS1sZXZlbC0xIHBiLTMgJHt0aXRsZSA/IFwicHQtM1wiIDogXCJcIn1gfVxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHN1YnRpdGxlIH19XG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9e2BmYWwgZmEtNXggdGV4dC1wcmltYXJ5IHB5LTQgJHtpY29uQ2xhc3N9YH0+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IG10LTJcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2NvbmZpcm1CdXR0b25BY3Rpb259XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y29uZmlybUJ1dHRvblRleHR9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTMgZnMtMC04NzVcIj5cbiAgICAgICAgICAgICAgey8qIDxhIGhyZWY9XCIjL1wiIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeVwiIG9uQ2xpY2s9e2NhbmNlbEJ1dHRvbkFjdGlvbn0+XG4gICAgICAgICAgICAgICAge2NhbmNlbEJ1dHRvblRleHR9XG4gICAgICAgICAgICAgIDwvYT4gKi99XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gc2F2ZS1idG4gdy0xMDAgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtjYW5jZWxCdXR0b25BY3Rpb259XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y2FuY2VsQnV0dG9uVGV4dH1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFjdGlvblN0YXR1c0NvbXBvbmVudDtcbiJdLCJuYW1lcyI6WyJBY3Rpb25TdGF0dXNDb21wb25lbnQiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaWNvbkNsYXNzIiwicGFuZWxDbGFzcyIsImNvbmZpcm1CdXR0b25BY3Rpb24iLCJjb25maXJtQnV0dG9uVGV4dCIsImNhbmNlbEJ1dHRvbkFjdGlvbiIsImNhbmNlbEJ1dHRvblRleHQiLCJqc3giLCJqc3hzIl0sIm1hcHBpbmdzIjoiOztBQWFBLE1BQU1BLElBQXlDLENBQUM7QUFBQSxFQUM5QyxPQUFBQztBQUFBLEVBQ0EsVUFBQUM7QUFBQSxFQUNBLFdBQUFDO0FBQUEsRUFDQSxZQUFBQztBQUFBLEVBQ0EscUJBQUFDO0FBQUEsRUFDQSxtQkFBQUM7QUFBQSxFQUNBLG9CQUFBQztBQUFBLEVBQ0Esa0JBQUFDO0FBQ0Ysd0JBRUssT0FBSSxFQUFBLFdBQVUsa0JBQ2IsVUFBQSxnQkFBQUMsRUFBQyxTQUFJLFdBQVcsNkJBQTZCTCxDQUFVLElBQ3JELDRCQUFDLE9BQUksRUFBQSxXQUFVLHFFQUNiLFVBQUMsZ0JBQUFNLEVBQUEsT0FBQSxFQUFJLFdBQVUsdUNBQ1osVUFBQTtBQUFBLEVBQUFULEtBQVUsZ0JBQUFRLEVBQUEsT0FBQSxFQUFJLFdBQVUsaUJBQWlCLFVBQU1SLEdBQUE7QUFBQSxFQUNoRCxnQkFBQVE7QUFBQSxJQUFDO0FBQUEsSUFBQTtBQUFBLE1BQ0MsV0FBVyx5QkFBeUJSLElBQVEsU0FBUyxFQUFFO0FBQUEsTUFDdkQseUJBQXlCLEVBQUUsUUFBUUMsRUFBUztBQUFBLElBQUE7QUFBQSxFQUM3QztBQUFBLEVBQ0QsZ0JBQUFPLEVBQUMsU0FDQyxVQUFDLGdCQUFBQSxFQUFBLEtBQUEsRUFBRSxXQUFXLCtCQUErQk4sQ0FBUyxJQUFJLEVBQzVELENBQUE7QUFBQSxvQkFDQyxPQUNDLEVBQUEsVUFBQSxnQkFBQU07QUFBQSxJQUFDO0FBQUEsSUFBQTtBQUFBLE1BQ0MsV0FBVTtBQUFBLE1BQ1YsU0FBU0o7QUFBQSxNQUVSLFVBQUFDO0FBQUEsSUFBQTtBQUFBLEVBQUEsR0FFTDtBQUFBLEVBQ0EsZ0JBQUFHLEVBQUMsT0FBSSxFQUFBLFdBQVUsaUJBSWIsVUFBQSxnQkFBQUE7QUFBQSxJQUFDO0FBQUEsSUFBQTtBQUFBLE1BQ0MsTUFBSztBQUFBLE1BQ0wsV0FBVTtBQUFBLE1BQ1YsU0FBU0Y7QUFBQSxNQUVSLFVBQUFDO0FBQUEsSUFBQTtBQUFBLEVBQUEsRUFFTCxDQUFBO0FBQUEsR0FDRixFQUFBLENBQ0YsRUFDRixDQUFBLEdBQ0Y7In0=\n","var isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!options.isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nexport default deepmerge_1;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import overArg from './_overArg.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nexport default nativeKeys;\n","import isPrototype from './_isPrototype.js';\nimport nativeKeys from './_nativeKeys.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeys;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nexport default arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nexport default arrayPush;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nexport default DataView;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nexport default Promise;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nexport default Set;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nexport default WeakMap;\n","import DataView from './_DataView.js';\nimport Map from './_Map.js';\nimport Promise from './_Promise.js';\nimport Set from './_Set.js';\nimport WeakMap from './_WeakMap.js';\nimport baseGetTag from './_baseGetTag.js';\nimport toSource from './_toSource.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nexport default getTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nexport default initCloneByTag;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n}\n\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\nvar hasElementType = typeof Element !== 'undefined';\n\nfunction equal(a, b) {\n // fast-deep-equal index.js 2.0.1\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n var arrA = isArray(a)\n , arrB = isArray(b)\n , i\n , length\n , key;\n\n if (arrA && arrB) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n if (arrA != arrB) return false;\n\n var dateA = a instanceof Date\n , dateB = b instanceof Date;\n if (dateA != dateB) return false;\n if (dateA && dateB) return a.getTime() == b.getTime();\n\n var regexpA = a instanceof RegExp\n , regexpB = b instanceof RegExp;\n if (regexpA != regexpB) return false;\n if (regexpA && regexpB) return a.toString() == b.toString();\n\n var keys = keyList(a);\n length = keys.length;\n\n if (length !== keyList(b).length)\n return false;\n\n for (i = length; i-- !== 0;)\n if (!hasProp.call(b, keys[i])) return false;\n // end fast-deep-equal\n\n // start react-fast-compare\n // custom handling for DOM elements\n if (hasElementType && a instanceof Element && b instanceof Element)\n return a === b;\n\n // custom handling for React\n for (i = length; i-- !== 0;) {\n key = keys[i];\n if (key === '_owner' && a.$$typeof) {\n // React-specific: avoid traversing React elements' _owner.\n // _owner contains circular references\n // and is not needed when comparing the actual elements (and not their owners)\n // .$$typeof and ._store on just reasonable markers of a react element\n continue;\n } else {\n // all other properties should be traversed as usual\n if (!equal(a[key], b[key])) return false;\n }\n }\n // end react-fast-compare\n\n // fast-deep-equal index.js 2.0.1\n return true;\n }\n\n return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function exportedEqual(a, b) {\n try {\n return equal(a, b);\n } catch (error) {\n if ((error.message && error.message.match(/stack|recursion/i)) || (error.number === -2146828260)) {\n // warn on circular references, don't crash\n // browsers give this different errors name and messages:\n // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n // firefox: \"InternalError\", too much recursion\"\n // edge: \"Error\", \"Out of stack space\"\n console.warn('Warning: react-fast-compare does not handle circular references.', error.name, error.message);\n return false;\n }\n // some other error. we should definitely know about these\n throw error;\n }\n};\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import arrayMap from './_arrayMap.js';\nimport copyArray from './_copyArray.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\nimport stringToPath from './_stringToPath.js';\nimport toKey from './_toKey.js';\nimport toString from './toString.js';\n\n/**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\nfunction toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n}\n\nexport default toPath;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","import deepmerge from 'deepmerge';\nimport isPlainObject from 'lodash-es/isPlainObject';\nimport cloneDeep from 'lodash-es/cloneDeep';\nimport { createContext, useContext, Children, useRef, useEffect, useState, useCallback, useMemo, useImperativeHandle, createElement, useLayoutEffect, forwardRef, Component } from 'react';\nimport isEqual from 'react-fast-compare';\nimport invariant from 'tiny-warning';\nimport clone from 'lodash-es/clone';\nimport toPath from 'lodash-es/toPath';\nimport hoistNonReactStatics from 'hoist-non-react-statics';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar FormikContext = /*#__PURE__*/createContext(undefined);\nFormikContext.displayName = 'FormikContext';\nvar FormikProvider = FormikContext.Provider;\nvar FormikConsumer = FormikContext.Consumer;\nfunction useFormikContext() {\n var formik = useContext(FormikContext);\n !!!formik ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"Formik context is undefined, please verify you are calling useFormikContext() as child of a component.\") : invariant(false) : void 0;\n return formik;\n}\n\n/** @private is the value an empty array? */\n\nvar isEmptyArray = function isEmptyArray(value) {\n return Array.isArray(value) && value.length === 0;\n};\n/** @private is the given object a Function? */\n\nvar isFunction = function isFunction(obj) {\n return typeof obj === 'function';\n};\n/** @private is the given object an Object? */\n\nvar isObject = function isObject(obj) {\n return obj !== null && typeof obj === 'object';\n};\n/** @private is the given object an integer? */\n\nvar isInteger = function isInteger(obj) {\n return String(Math.floor(Number(obj))) === obj;\n};\n/** @private is the given object a string? */\n\nvar isString = function isString(obj) {\n return Object.prototype.toString.call(obj) === '[object String]';\n};\n/** @private is the given object a NaN? */\n// eslint-disable-next-line no-self-compare\n\nvar isNaN$1 = function isNaN(obj) {\n return obj !== obj;\n};\n/** @private Does a React component have exactly 0 children? */\n\nvar isEmptyChildren = function isEmptyChildren(children) {\n return Children.count(children) === 0;\n};\n/** @private is the given object/value a promise? */\n\nvar isPromise = function isPromise(value) {\n return isObject(value) && isFunction(value.then);\n};\n/** @private is the given object/value a type of synthetic event? */\n\nvar isInputEvent = function isInputEvent(value) {\n return value && isObject(value) && isObject(value.target);\n};\n/**\r\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\r\n * not safe to call document.activeElement if there is nothing focused.\r\n *\r\n * The activeElement will be null only if the document or document body is not\r\n * yet defined.\r\n *\r\n * @param {?Document} doc Defaults to current document.\r\n * @return {Element | null}\r\n * @see https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/dom/getActiveElement.js\r\n */\n\nfunction getActiveElement(doc) {\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n if (typeof doc === 'undefined') {\n return null;\n }\n\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n/**\r\n * Deeply get a value from an object via its path.\r\n */\n\nfunction getIn(obj, key, def, p) {\n if (p === void 0) {\n p = 0;\n }\n\n var path = toPath(key);\n\n while (obj && p < path.length) {\n obj = obj[path[p++]];\n } // check if path is not in the end\n\n\n if (p !== path.length && !obj) {\n return def;\n }\n\n return obj === undefined ? def : obj;\n}\n/**\r\n * Deeply set a value from in object via it's path. If the value at `path`\r\n * has changed, return a shallow copy of obj with `value` set at `path`.\r\n * If `value` has not changed, return the original `obj`.\r\n *\r\n * Existing objects / arrays along `path` are also shallow copied. Sibling\r\n * objects along path retain the same internal js reference. Since new\r\n * objects / arrays are only created along `path`, we can test if anything\r\n * changed in a nested structure by comparing the object's reference in\r\n * the old and new object, similar to how russian doll cache invalidation\r\n * works.\r\n *\r\n * In earlier versions of this function, which used cloneDeep, there were\r\n * issues whereby settings a nested value would mutate the parent\r\n * instead of creating a new object. `clone` avoids that bug making a\r\n * shallow copy of the objects along the update path\r\n * so no object is mutated in place.\r\n *\r\n * Before changing this function, please read through the following\r\n * discussions.\r\n *\r\n * @see https://github.com/developit/linkstate\r\n * @see https://github.com/jaredpalmer/formik/pull/123\r\n */\n\nfunction setIn(obj, path, value) {\n var res = clone(obj); // this keeps inheritance when obj is a class\n\n var resVal = res;\n var i = 0;\n var pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n var currentPath = pathArray[i];\n var currentObj = getIn(obj, pathArray.slice(0, i + 1));\n\n if (currentObj && (isObject(currentObj) || Array.isArray(currentObj))) {\n resVal = resVal[currentPath] = clone(currentObj);\n } else {\n var nextPath = pathArray[i + 1];\n resVal = resVal[currentPath] = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n }\n } // Return original object if new value is the same as current\n\n\n if ((i === 0 ? obj : resVal)[pathArray[i]] === value) {\n return obj;\n }\n\n if (value === undefined) {\n delete resVal[pathArray[i]];\n } else {\n resVal[pathArray[i]] = value;\n } // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n\n\n if (i === 0 && value === undefined) {\n delete res[pathArray[i]];\n }\n\n return res;\n}\n/**\r\n * Recursively a set the same value for all keys and arrays nested object, cloning\r\n * @param object\r\n * @param value\r\n * @param visited\r\n * @param response\r\n */\n\nfunction setNestedObjectValues(object, value, visited, response) {\n if (visited === void 0) {\n visited = new WeakMap();\n }\n\n if (response === void 0) {\n response = {};\n }\n\n for (var _i = 0, _Object$keys = Object.keys(object); _i < _Object$keys.length; _i++) {\n var k = _Object$keys[_i];\n var val = object[k];\n\n if (isObject(val)) {\n if (!visited.get(val)) {\n visited.set(val, true); // In order to keep array values consistent for both dot path and\n // bracket syntax, we need to check if this is an array so that\n // this will output { friends: [true] } and not { friends: { \"0\": true } }\n\n response[k] = Array.isArray(val) ? [] : {};\n setNestedObjectValues(val, value, visited, response[k]);\n }\n } else {\n response[k] = value;\n }\n }\n\n return response;\n}\n\nfunction formikReducer(state, msg) {\n switch (msg.type) {\n case 'SET_VALUES':\n return _extends({}, state, {\n values: msg.payload\n });\n\n case 'SET_TOUCHED':\n return _extends({}, state, {\n touched: msg.payload\n });\n\n case 'SET_ERRORS':\n if (isEqual(state.errors, msg.payload)) {\n return state;\n }\n\n return _extends({}, state, {\n errors: msg.payload\n });\n\n case 'SET_STATUS':\n return _extends({}, state, {\n status: msg.payload\n });\n\n case 'SET_ISSUBMITTING':\n return _extends({}, state, {\n isSubmitting: msg.payload\n });\n\n case 'SET_ISVALIDATING':\n return _extends({}, state, {\n isValidating: msg.payload\n });\n\n case 'SET_FIELD_VALUE':\n return _extends({}, state, {\n values: setIn(state.values, msg.payload.field, msg.payload.value)\n });\n\n case 'SET_FIELD_TOUCHED':\n return _extends({}, state, {\n touched: setIn(state.touched, msg.payload.field, msg.payload.value)\n });\n\n case 'SET_FIELD_ERROR':\n return _extends({}, state, {\n errors: setIn(state.errors, msg.payload.field, msg.payload.value)\n });\n\n case 'RESET_FORM':\n return _extends({}, state, msg.payload);\n\n case 'SET_FORMIK_STATE':\n return msg.payload(state);\n\n case 'SUBMIT_ATTEMPT':\n return _extends({}, state, {\n touched: setNestedObjectValues(state.values, true),\n isSubmitting: true,\n submitCount: state.submitCount + 1\n });\n\n case 'SUBMIT_FAILURE':\n return _extends({}, state, {\n isSubmitting: false\n });\n\n case 'SUBMIT_SUCCESS':\n return _extends({}, state, {\n isSubmitting: false\n });\n\n default:\n return state;\n }\n} // Initial empty states // objects\n\n\nvar emptyErrors = {};\nvar emptyTouched = {};\nfunction useFormik(_ref) {\n var _ref$validateOnChange = _ref.validateOnChange,\n validateOnChange = _ref$validateOnChange === void 0 ? true : _ref$validateOnChange,\n _ref$validateOnBlur = _ref.validateOnBlur,\n validateOnBlur = _ref$validateOnBlur === void 0 ? true : _ref$validateOnBlur,\n _ref$validateOnMount = _ref.validateOnMount,\n validateOnMount = _ref$validateOnMount === void 0 ? false : _ref$validateOnMount,\n isInitialValid = _ref.isInitialValid,\n _ref$enableReinitiali = _ref.enableReinitialize,\n enableReinitialize = _ref$enableReinitiali === void 0 ? false : _ref$enableReinitiali,\n onSubmit = _ref.onSubmit,\n rest = _objectWithoutPropertiesLoose(_ref, [\"validateOnChange\", \"validateOnBlur\", \"validateOnMount\", \"isInitialValid\", \"enableReinitialize\", \"onSubmit\"]);\n\n var props = _extends({\n validateOnChange: validateOnChange,\n validateOnBlur: validateOnBlur,\n validateOnMount: validateOnMount,\n onSubmit: onSubmit\n }, rest);\n\n var initialValues = useRef(props.initialValues);\n var initialErrors = useRef(props.initialErrors || emptyErrors);\n var initialTouched = useRef(props.initialTouched || emptyTouched);\n var initialStatus = useRef(props.initialStatus);\n var isMounted = useRef(false);\n var fieldRegistry = useRef({});\n\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(function () {\n !(typeof isInitialValid === 'undefined') ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'isInitialValid has been deprecated and will be removed in future versions of Formik. Please use initialErrors or validateOnMount instead.') : invariant(false) : void 0; // eslint-disable-next-line\n }, []);\n }\n\n useEffect(function () {\n isMounted.current = true;\n return function () {\n isMounted.current = false;\n };\n }, []);\n\n var _React$useState = useState(0),\n setIteration = _React$useState[1];\n\n var stateRef = useRef({\n values: cloneDeep(props.initialValues),\n errors: cloneDeep(props.initialErrors) || emptyErrors,\n touched: cloneDeep(props.initialTouched) || emptyTouched,\n status: cloneDeep(props.initialStatus),\n isSubmitting: false,\n isValidating: false,\n submitCount: 0\n });\n var state = stateRef.current;\n var dispatch = useCallback(function (action) {\n var prev = stateRef.current;\n stateRef.current = formikReducer(prev, action); // force rerender\n\n if (prev !== stateRef.current) setIteration(function (x) {\n return x + 1;\n });\n }, []);\n var runValidateHandler = useCallback(function (values, field) {\n return new Promise(function (resolve, reject) {\n var maybePromisedErrors = props.validate(values, field);\n\n if (maybePromisedErrors == null) {\n // use loose null check here on purpose\n resolve(emptyErrors);\n } else if (isPromise(maybePromisedErrors)) {\n maybePromisedErrors.then(function (errors) {\n resolve(errors || emptyErrors);\n }, function (actualException) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Warning: An unhandled error was caught during validation in \", actualException);\n }\n\n reject(actualException);\n });\n } else {\n resolve(maybePromisedErrors);\n }\n });\n }, [props.validate]);\n /**\r\n * Run validation against a Yup schema and optionally run a function if successful\r\n */\n\n var runValidationSchema = useCallback(function (values, field) {\n var validationSchema = props.validationSchema;\n var schema = isFunction(validationSchema) ? validationSchema(field) : validationSchema;\n var promise = field && schema.validateAt ? schema.validateAt(field, values) : validateYupSchema(values, schema);\n return new Promise(function (resolve, reject) {\n promise.then(function () {\n resolve(emptyErrors);\n }, function (err) {\n // Yup will throw a validation error if validation fails. We catch those and\n // resolve them into Formik errors. We can sniff if something is a Yup error\n // by checking error.name.\n // @see https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n if (err.name === 'ValidationError') {\n resolve(yupToFormErrors(err));\n } else {\n // We throw any other errors\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Warning: An unhandled error was caught during validation in \", err);\n }\n\n reject(err);\n }\n });\n });\n }, [props.validationSchema]);\n var runSingleFieldLevelValidation = useCallback(function (field, value) {\n return new Promise(function (resolve) {\n return resolve(fieldRegistry.current[field].validate(value));\n });\n }, []);\n var runFieldLevelValidations = useCallback(function (values) {\n var fieldKeysWithValidation = Object.keys(fieldRegistry.current).filter(function (f) {\n return isFunction(fieldRegistry.current[f].validate);\n }); // Construct an array with all of the field validation functions\n\n var fieldValidations = fieldKeysWithValidation.length > 0 ? fieldKeysWithValidation.map(function (f) {\n return runSingleFieldLevelValidation(f, getIn(values, f));\n }) : [Promise.resolve('DO_NOT_DELETE_YOU_WILL_BE_FIRED')]; // use special case ;)\n\n return Promise.all(fieldValidations).then(function (fieldErrorsList) {\n return fieldErrorsList.reduce(function (prev, curr, index) {\n if (curr === 'DO_NOT_DELETE_YOU_WILL_BE_FIRED') {\n return prev;\n }\n\n if (curr) {\n prev = setIn(prev, fieldKeysWithValidation[index], curr);\n }\n\n return prev;\n }, {});\n });\n }, [runSingleFieldLevelValidation]); // Run all validations and return the result\n\n var runAllValidations = useCallback(function (values) {\n return Promise.all([runFieldLevelValidations(values), props.validationSchema ? runValidationSchema(values) : {}, props.validate ? runValidateHandler(values) : {}]).then(function (_ref2) {\n var fieldErrors = _ref2[0],\n schemaErrors = _ref2[1],\n validateErrors = _ref2[2];\n var combinedErrors = deepmerge.all([fieldErrors, schemaErrors, validateErrors], {\n arrayMerge: arrayMerge\n });\n return combinedErrors;\n });\n }, [props.validate, props.validationSchema, runFieldLevelValidations, runValidateHandler, runValidationSchema]); // Run all validations methods and update state accordingly\n\n var validateFormWithHighPriority = useEventCallback(function (values) {\n if (values === void 0) {\n values = state.values;\n }\n\n dispatch({\n type: 'SET_ISVALIDATING',\n payload: true\n });\n return runAllValidations(values).then(function (combinedErrors) {\n if (!!isMounted.current) {\n dispatch({\n type: 'SET_ISVALIDATING',\n payload: false\n });\n dispatch({\n type: 'SET_ERRORS',\n payload: combinedErrors\n });\n }\n\n return combinedErrors;\n });\n });\n useEffect(function () {\n if (validateOnMount && isMounted.current === true && isEqual(initialValues.current, props.initialValues)) {\n validateFormWithHighPriority(initialValues.current);\n }\n }, [validateOnMount, validateFormWithHighPriority]);\n var resetForm = useCallback(function (nextState) {\n var values = nextState && nextState.values ? nextState.values : initialValues.current;\n var errors = nextState && nextState.errors ? nextState.errors : initialErrors.current ? initialErrors.current : props.initialErrors || {};\n var touched = nextState && nextState.touched ? nextState.touched : initialTouched.current ? initialTouched.current : props.initialTouched || {};\n var status = nextState && nextState.status ? nextState.status : initialStatus.current ? initialStatus.current : props.initialStatus;\n initialValues.current = values;\n initialErrors.current = errors;\n initialTouched.current = touched;\n initialStatus.current = status;\n\n var dispatchFn = function dispatchFn() {\n dispatch({\n type: 'RESET_FORM',\n payload: {\n isSubmitting: !!nextState && !!nextState.isSubmitting,\n errors: errors,\n touched: touched,\n status: status,\n values: values,\n isValidating: !!nextState && !!nextState.isValidating,\n submitCount: !!nextState && !!nextState.submitCount && typeof nextState.submitCount === 'number' ? nextState.submitCount : 0\n }\n });\n };\n\n if (props.onReset) {\n var maybePromisedOnReset = props.onReset(state.values, imperativeMethods);\n\n if (isPromise(maybePromisedOnReset)) {\n maybePromisedOnReset.then(dispatchFn);\n } else {\n dispatchFn();\n }\n } else {\n dispatchFn();\n }\n }, [props.initialErrors, props.initialStatus, props.initialTouched, props.onReset]);\n useEffect(function () {\n if (isMounted.current === true && !isEqual(initialValues.current, props.initialValues)) {\n if (enableReinitialize) {\n initialValues.current = props.initialValues;\n resetForm();\n\n if (validateOnMount) {\n validateFormWithHighPriority(initialValues.current);\n }\n }\n }\n }, [enableReinitialize, props.initialValues, resetForm, validateOnMount, validateFormWithHighPriority]);\n useEffect(function () {\n if (enableReinitialize && isMounted.current === true && !isEqual(initialErrors.current, props.initialErrors)) {\n initialErrors.current = props.initialErrors || emptyErrors;\n dispatch({\n type: 'SET_ERRORS',\n payload: props.initialErrors || emptyErrors\n });\n }\n }, [enableReinitialize, props.initialErrors]);\n useEffect(function () {\n if (enableReinitialize && isMounted.current === true && !isEqual(initialTouched.current, props.initialTouched)) {\n initialTouched.current = props.initialTouched || emptyTouched;\n dispatch({\n type: 'SET_TOUCHED',\n payload: props.initialTouched || emptyTouched\n });\n }\n }, [enableReinitialize, props.initialTouched]);\n useEffect(function () {\n if (enableReinitialize && isMounted.current === true && !isEqual(initialStatus.current, props.initialStatus)) {\n initialStatus.current = props.initialStatus;\n dispatch({\n type: 'SET_STATUS',\n payload: props.initialStatus\n });\n }\n }, [enableReinitialize, props.initialStatus, props.initialTouched]);\n var validateField = useEventCallback(function (name) {\n // This will efficiently validate a single field by avoiding state\n // changes if the validation function is synchronous. It's different from\n // what is called when using validateForm.\n if (fieldRegistry.current[name] && isFunction(fieldRegistry.current[name].validate)) {\n var value = getIn(state.values, name);\n var maybePromise = fieldRegistry.current[name].validate(value);\n\n if (isPromise(maybePromise)) {\n // Only flip isValidating if the function is async.\n dispatch({\n type: 'SET_ISVALIDATING',\n payload: true\n });\n return maybePromise.then(function (x) {\n return x;\n }).then(function (error) {\n dispatch({\n type: 'SET_FIELD_ERROR',\n payload: {\n field: name,\n value: error\n }\n });\n dispatch({\n type: 'SET_ISVALIDATING',\n payload: false\n });\n });\n } else {\n dispatch({\n type: 'SET_FIELD_ERROR',\n payload: {\n field: name,\n value: maybePromise\n }\n });\n return Promise.resolve(maybePromise);\n }\n } else if (props.validationSchema) {\n dispatch({\n type: 'SET_ISVALIDATING',\n payload: true\n });\n return runValidationSchema(state.values, name).then(function (x) {\n return x;\n }).then(function (error) {\n dispatch({\n type: 'SET_FIELD_ERROR',\n payload: {\n field: name,\n value: getIn(error, name)\n }\n });\n dispatch({\n type: 'SET_ISVALIDATING',\n payload: false\n });\n });\n }\n\n return Promise.resolve();\n });\n var registerField = useCallback(function (name, _ref3) {\n var validate = _ref3.validate;\n fieldRegistry.current[name] = {\n validate: validate\n };\n }, []);\n var unregisterField = useCallback(function (name) {\n delete fieldRegistry.current[name];\n }, []);\n var setTouched = useEventCallback(function (touched, shouldValidate) {\n dispatch({\n type: 'SET_TOUCHED',\n payload: touched\n });\n var willValidate = shouldValidate === undefined ? validateOnBlur : shouldValidate;\n return willValidate ? validateFormWithHighPriority(state.values) : Promise.resolve();\n });\n var setErrors = useCallback(function (errors) {\n dispatch({\n type: 'SET_ERRORS',\n payload: errors\n });\n }, []);\n var setValues = useEventCallback(function (values, shouldValidate) {\n var resolvedValues = isFunction(values) ? values(state.values) : values;\n dispatch({\n type: 'SET_VALUES',\n payload: resolvedValues\n });\n var willValidate = shouldValidate === undefined ? validateOnChange : shouldValidate;\n return willValidate ? validateFormWithHighPriority(resolvedValues) : Promise.resolve();\n });\n var setFieldError = useCallback(function (field, value) {\n dispatch({\n type: 'SET_FIELD_ERROR',\n payload: {\n field: field,\n value: value\n }\n });\n }, []);\n var setFieldValue = useEventCallback(function (field, value, shouldValidate) {\n dispatch({\n type: 'SET_FIELD_VALUE',\n payload: {\n field: field,\n value: value\n }\n });\n var willValidate = shouldValidate === undefined ? validateOnChange : shouldValidate;\n return willValidate ? validateFormWithHighPriority(setIn(state.values, field, value)) : Promise.resolve();\n });\n var executeChange = useCallback(function (eventOrTextValue, maybePath) {\n // By default, assume that the first argument is a string. This allows us to use\n // handleChange with React Native and React Native Web's onChangeText prop which\n // provides just the value of the input.\n var field = maybePath;\n var val = eventOrTextValue;\n var parsed; // If the first argument is not a string though, it has to be a synthetic React Event (or a fake one),\n // so we handle like we would a normal HTML change event.\n\n if (!isString(eventOrTextValue)) {\n // If we can, persist the event\n // @see https://reactjs.org/docs/events.html#event-pooling\n if (eventOrTextValue.persist) {\n eventOrTextValue.persist();\n }\n\n var target = eventOrTextValue.target ? eventOrTextValue.target : eventOrTextValue.currentTarget;\n var type = target.type,\n name = target.name,\n id = target.id,\n value = target.value,\n checked = target.checked,\n outerHTML = target.outerHTML,\n options = target.options,\n multiple = target.multiple;\n field = maybePath ? maybePath : name ? name : id;\n\n if (!field && process.env.NODE_ENV !== \"production\") {\n warnAboutMissingIdentifier({\n htmlContent: outerHTML,\n documentationAnchorLink: 'handlechange-e-reactchangeeventany--void',\n handlerName: 'handleChange'\n });\n }\n\n val = /number|range/.test(type) ? (parsed = parseFloat(value), isNaN(parsed) ? '' : parsed) : /checkbox/.test(type) // checkboxes\n ? getValueForCheckbox(getIn(state.values, field), checked, value) : options && multiple //